--- mon/src/mon_disass.cpp 2004/06/14 14:23:59 1.10 +++ mon/src/mon_disass.cpp 2007/06/07 09:51:56 1.11 @@ -20,6 +20,7 @@ #include "sysdeps.h" +#include #include #include "mon.h" @@ -168,6 +169,29 @@ int disass_68k(FILE *f, uint32 adr) return num; } + +int disass_mips(FILE *f, uint32 adr, int little_endian) +{ + // Initialize info for GDB disassembler + disassemble_info info; + char buf[1024]; + SFILE sfile = {buf, buf}; + sfile.buffer = buf; + sfile.current = buf; + INIT_DISASSEMBLE_INFO(info, (FILE *)&sfile, (fprintf_ftype)mon_sprintf); + + // Disassemble instruction + lookup_lowmem = false; + int num = little_endian ? print_insn_little_mips(adr, &info) : print_insn_big_mips(adr, &info); + + assert(num == 4); + for (int i=0; i<4; i++) + fprintf(f, " %02x", mon_read_byte(adr + i)); + + fprintf(f, " %s\n", buf); + + return num; +} int disass_x86(FILE *f, uint32 adr, uint32 bits) {