--- a/src/sh4/sh4dasm.in Mon Jan 21 11:54:47 2008 +0000 +++ b/src/sh4/sh4dasm.in Tue Jan 22 10:11:45 2008 +0000 @@ -43,14 +43,15 @@ const struct cpu_desc_struct sh4_cpu_desc = - { "SH4", sh4_disasm_instruction, sh4_execute_instruction, mem_has_page, + { "SH4", sh4_disasm_instruction, sh4_execute_instruction, sh4_has_page, sh4_set_breakpoint, sh4_clear_breakpoint, sh4_get_breakpoint, 2, (char *)&sh4r, sizeof(sh4r), sh4_reg_map, &sh4r.pc }; -uint32_t sh4_disasm_instruction( uint32_t pc, char *buf, int len, char *opcode ) +uint32_t sh4_disasm_instruction( sh4vma_t pc, char *buf, int len, char *opcode ) { - uint16_t ir = sh4_read_word(pc); + sh4addr_t addr = mmu_vma_to_phys_disasm(pc); + uint16_t ir = sh4_read_word(addr); #define UNDEF(ir) snprintf( buf, len, "???? " ); #define RN(ir) ((ir&0x0F00)>>8) @@ -188,7 +189,7 @@ MOV.L @Rm+, Rn {: snprintf( buf, len, "MOV.L @R%d+, R%d", Rm, Rn ); :} MOV.L @(R0, Rm), Rn {: snprintf( buf, len, "MOV.L @(R0, R%d), R%d", Rm, Rn ); :} MOV.L @(disp, GBR), R0 {: snprintf( buf, len, "MOV.L @(%d, GBR), R0",disp ); :} -MOV.L @(disp, PC), Rn {: snprintf( buf, len, "MOV.L @($%xh), R%d ; <- #%08x", disp + (pc & 0xFFFFFFFC) + 4, Rn, sh4_read_long(disp+(pc&0xFFFFFFFC)+4) ); :} +MOV.L @(disp, PC), Rn {: snprintf( buf, len, "MOV.L @($%xh), R%d ; <- #%08x", disp + (pc & 0xFFFFFFFC) + 4, Rn, sh4_read_long(disp+(addr&0xFFFFFFFC)+4) ); :} MOV.L @(disp, Rm), Rn {: snprintf( buf, len, "MOV.L @(%d, R%d), R%d", disp, Rm, Rn ); :} MOV.W Rm, @Rn {: snprintf( buf, len, "MOV.W R%d, @R%d", Rm, Rn ); :} MOV.W Rm, @-Rn {: snprintf( buf, len, "MOV.W R%d, @-R%d", Rm, Rn ); :} @@ -199,7 +200,7 @@ MOV.W @Rm+, Rn {: snprintf( buf, len, "MOV.W @R%d+, R%d", Rm, Rn ); :} MOV.W @(R0, Rm), Rn {: snprintf( buf, len, "MOV.W @(R0, R%d), R%d", Rm, Rn ); :} MOV.W @(disp, GBR), R0 {: snprintf( buf, len, "MOV.W @(%d, GBR), R0", disp ); :} -MOV.W @(disp, PC), Rn {: snprintf( buf, len, "MOV.W @($%xh), R%d ; <- #%08x", disp + pc + 4, Rn, sh4_read_word(disp+pc+4) ); :} +MOV.W @(disp, PC), Rn {: snprintf( buf, len, "MOV.W @($%xh), R%d ; <- #%08x", disp + pc + 4, Rn, sh4_read_word(disp+addr+4) ); :} MOV.W @(disp, Rm), R0 {: snprintf( buf, len, "MOV.W @(%d, R%d), R0", disp, Rm ); :} MOVA @(disp, PC), R0 {: snprintf( buf, len, "MOVA @($%xh), R0", disp + (pc&0xFFFFFFFC) + 4 ); :} MOVCA.L R0, @Rn {: snprintf( buf, len, "MOVCA.L R0, @R%d", Rn ); :}