OSDN Git Service

cpu_read φ2control 導入前
authorsato_tiff <sato_tiff@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sat, 22 Nov 2008 06:29:48 +0000 (06:29 +0000)
committersato_tiff <sato_tiff@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sat, 22 Nov 2008 06:29:48 +0000 (06:29 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@76 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/Makefile
client/trunk/driver_hongkongfc.c
client/trunk/driver_onajimi.c
client/trunk/paralellport.h
client/trunk/script.c

index c55026a..eb0a48f 100644 (file)
@@ -4,12 +4,14 @@ OBJ = \
        file.o textutil.o giveio.o unagi.res.o
 OBJ_HK = giveio.o driver_hongkongfc.o
 TARGET = unagi.exe
-CFLAGS = -O0 -Wall -g -DDEBUG=1
-#CFLAGS = -O2 -Wall -DDEBUG=0
+#CFLAGS = -O0 -Wall -g -DDEBUG=1
+CFLAGS = -O2 -Wall -DDEBUG=0
 
 all: $(TARGET)
 hk.exe: $(OBJ_HK)
        gcc -o $@ $(OBJ_HK)
+iodel.exe: iodel.o giveio.o
+       gcc -o $@ iodel.o giveio.o
 clean: 
        rm -f $(OBJ) $(TARGET)
 $(TARGET): $(OBJ)
index f02ea71..b8afe95 100644 (file)
@@ -47,7 +47,7 @@ static void address_set(long address)
        data_port_latch(DATA_SELECT_A7toA0, address & 0xff);
 }
 
-static u8 data_port_get(long address)
+static u8 data_port_get(long address, int m2)
 {
        int s = DATA_SELECT_READ << BITNUM_CONTROL_DATA_SELECT;
        s = bit_set(s, BITNUM_CONTROL_DATA_LATCH);
@@ -65,7 +65,7 @@ static void data_port_set(int c, long data)
 {
        data_port_latch(DATA_SELECT_WRITEDATA, data);
        data_port_latch(DATA_SELECT_CONTROL, c);
-       c = bit_clear(c, BITNUM_WRITEDATA_LATCH);
+       c = bit_set(c, BITNUM_WRITEDATA_LATCH);
        data_port_latch(DATA_SELECT_CONTROL, c);
 }
 
@@ -109,7 +109,7 @@ static void hk_cpu_read(long address, long length, u8 *data)
        //A15 ¤òȿž¤·¡¢ /ROMCS ¤Ë¤·¤¿¤â¤Î¤òÅϤ¹
        address ^= ADDRESS_MASK_A15;
        while(length != 0){
-               *data = data_port_get(address);
+               *data = data_port_get(address, M2_CONTROL_TRUE);
                address++;
                data++;
                length--;
@@ -122,7 +122,7 @@ static void hk_ppu_read(long address, long length, u8 *data)
        address &= ADDRESS_MASK_A0toA12; //PPU charcter data area mask
        address |= ADDRESS_MASK_A15; //CPU area disk
        while(length != 0){
-               *data = data_port_get(address);
+               *data = data_port_get(address, M2_CONTROL_FALSE);
                address++;
                data++;
                length--;
@@ -145,7 +145,7 @@ static void hk_cpu_write(long address, long data)
        //2 L->H bus:data write
        //ROM Îΰè¤Î¾ì¹ç¤Ï¤³¤Î¥¿¥¤¥ß¥ó¥°¤Ç /rom ¤òÍî¤È¤¹
        if(address & ADDRESS_MASK_A15){
-               address_set(address & ADDRESS_MASK_A15);
+               address_set(address & ~ADDRESS_MASK_A15);
        }
        c = bit_clear(c, BITNUM_CPU_RW);
        c = bit_set(c, BITNUM_CPU_M2);
@@ -157,7 +157,7 @@ static void hk_cpu_write(long address, long data)
        if(address & ADDRESS_MASK_A15){
                address_set(address | ADDRESS_MASK_A15);
        }
-       data_port_latch(DATA_SELECT_CONTROL, BITNUM_WRITEDATA_OUTPUT);
+       data_port_latch(DATA_SELECT_CONTROL, BUS_CONTROL_BUS_WRITE);
 }
 
 static void hk_ppu_write(long address, long data)
index 3dac871..055907b 100644 (file)
@@ -202,10 +202,6 @@ static const int BUS_CONTROL_BUS_WRITE = (
        (CPU_READ << BITNUM_CPU_RW)
 );
 
-enum{ 
-       M2_CONTROL_TRUE, M2_CONTROL_FALSE
-};
-
 static void fc_bus_read(long address, long length, u8 *data, int control, int m2_control)
 {
        address_set(address, control);
index f6cf5cb..b718805 100644 (file)
@@ -17,6 +17,9 @@ enum{
        ADDRESS_MASK_A0toA14 = 0x7fff,
        ADDRESS_MASK_A15 = 0x8000
 };
+enum{ 
+       M2_CONTROL_TRUE, M2_CONTROL_FALSE
+};
 
 #if ASM_ENABLE==0
 void _outp(int, int);
index 8b692a2..dad5a63 100644 (file)
@@ -677,6 +677,31 @@ static int logical_check(const struct script *s, struct romimage *r, const int t
 /*
 execute() ÍÑ¥µ¥Ö´Ø¿ô¤È¥Ç¡¼¥¿
 */
+static int execute_connection_check(const struct driver *d)
+{
+       int ret = OK;
+       const int testsize = 0x80;
+       int testcount = 3;
+       u8 *testbuf[2];
+       testbuf[0] = malloc(testsize);
+       testbuf[1] = malloc(testsize);
+       //master read
+       d->cpu_read(0xfee0, testsize, testbuf[0]);
+       
+       while(testcount != 0){
+               d->cpu_read(0xfee0, testsize, testbuf[1]);
+               if(memcmp(testbuf[0], testbuf[1], testsize) != 0){
+                       ret = NG;
+                       break;
+               }
+               testcount--;
+       }
+       
+       free(testbuf[0]);
+       free(testbuf[1]);
+       return ret;
+}
+
 enum {PPU_TEST_RAM, PPU_TEST_ROM};
 const u8 PPU_TEST_DATA[] = "PPU_TEST_DATA";
 #if DEBUG==0
@@ -808,6 +833,10 @@ static int execute(const struct script *s, struct romimage *r)
                printf("execute error: Can't Access Direct IO %d\n", gg);
                return NG;
        }
+       if(execute_connection_check(d) == NG){
+               printf("execute error: maybe connection error.\n");
+               return NG;
+       }
        struct memory cpu_rom, ppu_rom, cpu_ram_read, cpu_ram_write;
        cpu_rom = r->cpu_rom;
        ppu_rom = r->ppu_rom;