OSDN Git Service

debug tool update
authorastoria-d <astoria-d@mail.goo.ne.jp>
Wed, 13 Mar 2013 09:54:29 +0000 (18:54 +0900)
committerastoria-d <astoria-d@mail.goo.ne.jp>
Wed, 13 Mar 2013 09:54:29 +0000 (18:54 +0900)
emulator/bus.c
emulator/debug.c
emulator/ram.c
emulator/rom.c

index 0c85f99..82e2177 100644 (file)
@@ -6,6 +6,11 @@
 #include "rom.h"
 #include "ram.h"
 
+unsigned char dbg_rom_get_byte(unsigned short offset);
+unsigned short dbg_rom_get_short(unsigned short offset);
+unsigned char dbg_ram_get_byte(unsigned short offset);
+unsigned short dbg_ram_get_short(unsigned short offset);
+
 struct cpu_pin {
     unsigned int rw     :1;     /*assert on write.*/
     unsigned int nmi    :1;     /*input*/
@@ -39,6 +44,36 @@ static sem_t sem_bus_wait;
 #define IO_APU_MASK 0x001F
 #define ROM_MASK    0x7FFF
 
+unsigned char dbg_get_byte(unsigned short addr) {
+    if (addr & ROM_BIT) {
+        return dbg_rom_get_byte(addr & ROM_MASK);
+    }
+    else if (addr & IO_APU_BIT) {
+        return 0;
+    }
+    else if (addr & IO_PPU_BIT) {
+        return 0;
+    }
+    else {
+        return dbg_ram_get_byte(addr & ROM_MASK);
+    }
+}
+unsigned short dbg_get_short(unsigned short addr) {
+    if (addr & ROM_BIT) {
+        return dbg_rom_get_short(addr & ROM_MASK);
+    }
+    else if (addr & IO_APU_BIT) {
+        return 0;
+    }
+    else if (addr & IO_PPU_BIT) {
+        return 0;
+    }
+    else {
+        return dbg_ram_get_short(addr & ROM_MASK);
+    }
+}
+
+
 void release_bus(void) {
     pin_status.ready = 1;
     sem_post(&sem_bus_wait);
index 465d7c9..ac74096 100644 (file)
@@ -93,30 +93,30 @@ int emu_debug(void) {
 }
 
 void disasm(const char* mnemonic, int addr_mode, unsigned short pc) {
-    unsigned char dbg_rom_get_byte(unsigned short addr);
-    unsigned short dbg_rom_get_short(unsigned short addr);
+    unsigned char dbg_get_byte(unsigned short addr);
+    unsigned short dbg_get_short(unsigned short addr);
 
     switch(addr_mode) {
         case ADDR_MODE_ZP:
-            printf("%04x: %-5s $%02x\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s $%02x\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
         case ADDR_MODE_ZP_X:
-            printf("%04x: %-5s $%02x, x\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s $%02x, x\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
         case ADDR_MODE_ZP_Y:
-            printf("%04x: %-5s $%02x, y\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s $%02x, y\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
         case ADDR_MODE_ABS:
-            printf("%04x: %-5s $%04x\n", pc, mnemonic, dbg_rom_get_short(pc + 1));
+            printf("%04x: %-5s $%04x\n", pc, mnemonic, dbg_get_short(pc + 1));
             break;
         case ADDR_MODE_ABS_X:
-            printf("%04x: %-5s $%04x, x\n", pc, mnemonic, dbg_rom_get_short(pc + 1));
+            printf("%04x: %-5s $%04x, x\n", pc, mnemonic, dbg_get_short(pc + 1));
             break;
         case ADDR_MODE_ABS_Y:
-            printf("%04x: %-5s $%04x, y\n", pc, mnemonic, dbg_rom_get_short(pc + 1));
+            printf("%04x: %-5s $%04x, y\n", pc, mnemonic, dbg_get_short(pc + 1));
             break;
         case ADDR_MODE_IND:
-            printf("%04x: %-5s ($%04x), y\n", pc, mnemonic, dbg_rom_get_short(pc + 1));
+            printf("%04x: %-5s ($%04x), y\n", pc, mnemonic, dbg_get_short(pc + 1));
             break;
         case ADDR_MODE_IMP:
         case ADDR_MODE_ACC:
@@ -124,13 +124,13 @@ void disasm(const char* mnemonic, int addr_mode, unsigned short pc) {
             break;
         case ADDR_MODE_IMM:
         case ADDR_MODE_REL:
-            printf("%04x: %-5s #$%02x\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s #$%02x\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
         case ADDR_MODE_INDEX_INDIR:
-            printf("%04x: %-5s ($%02x, x), y\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s ($%02x, x), y\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
         case ADDR_MODE_INDIR_INDEX:
-            printf("%04x: %-5s ($%02x), y\n", pc, mnemonic, dbg_rom_get_byte(pc + 1));
+            printf("%04x: %-5s ($%02x), y\n", pc, mnemonic, dbg_get_byte(pc + 1));
             break;
     }
 }
index f1247ac..0fb8e04 100644 (file)
@@ -27,6 +27,16 @@ static sem_t ram_sem_id;
 
 unsigned char * ram_buffer;
 
+unsigned char dbg_ram_get_byte(unsigned short offset) {
+    return ram_buffer[offset];
+}
+unsigned short dbg_ram_get_short(unsigned short offset) {
+    unsigned short ret;
+    ret = ram_buffer[offset];
+    ret |= (ram_buffer[offset + 1] << 8);
+    return ret;
+}
+
 void set_ram_addr(unsigned short addr) {
     ram_addr = addr;
 }
index a359ee1..9b9fb9d 100644 (file)
@@ -22,17 +22,16 @@ static int rom_end_loop;
 static sem_t rom_sem_id;
 
 #define ROM_32K 0x8000
-#define ROM_START   0x8000
 
 static unsigned char * rom_buffer;
 
-unsigned char dbg_rom_get_byte(unsigned short addr) {
-    return rom_buffer[addr - ROM_START];
+unsigned char dbg_rom_get_byte(unsigned short offset) {
+    return rom_buffer[offset];
 }
-unsigned short dbg_rom_get_short(unsigned short addr) {
+unsigned short dbg_rom_get_short(unsigned short offset) {
     unsigned short ret;
-    ret = rom_buffer[addr - ROM_START];
-    ret |= (rom_buffer[addr + 1 - ROM_START]) << 8;
+    ret = rom_buffer[offset];
+    ret |= (rom_buffer[offset + 1] << 8);
     return ret;
 }