X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fjagdasm.cpp;h=31a67ef7d8852489a598b19a00c5a65de527a61e;hb=178d7f01b40cf8367cfe5b71219e6d20f60f92d4;hp=f6eb5ee81f1d91e40e5564b6926c2156a856be2d;hpb=66aa58a9416cdfbe3a999e4f2672627d4f9b1f59;p=virtualjaguar diff --git a/src/jagdasm.cpp b/src/jagdasm.cpp index f6eb5ee..31a67ef 100644 --- a/src/jagdasm.cpp +++ b/src/jagdasm.cpp @@ -1,3 +1,21 @@ +// +// Jaguar RISC Disassembly +// +// Originally by David Raingeard +// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Carwin Jones (BeOS) +// Minor cleanups by James Hammons +// (C) 2012 Underground Software +// +// JLH = James Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 06/01/2012 Created this log (long overdue! ;-) +// + +#include "jagdasm.h" + +#include #include "jaguar.h" #define ROPCODE(a) JaguarReadWord(a) @@ -5,7 +23,7 @@ uint8 convert_zero[32] = { 32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 }; -char * condition[32] = +const char * condition[32] = { "", "nz,", @@ -46,7 +64,7 @@ char * condition[32] = -char * signed_16bit(INT16 val) +char * signed_16bit(int16 val) { static char temp[10]; @@ -58,8 +76,9 @@ char * signed_16bit(INT16 val) return temp; } -unsigned dasmjag(int dsp_type, char * buffer, unsigned pc) +unsigned dasmjag(int dsp_type, char * bufferOut, unsigned pc) { + char buffer[64]; int op = ROPCODE(pc); int reg1 = (op >> 5) & 31; int reg2 = op & 31; @@ -99,7 +118,7 @@ unsigned dasmjag(int dsp_type, char * buffer, unsigned pc) case 28: sprintf(buffer, "ROR R%02d,R%02d", reg1, reg2); break; case 29: sprintf(buffer, "RORQ $%X,R%02d", convert_zero[reg1], reg2); break; case 30: sprintf(buffer, "CMP R%02d,R%02d", reg1, reg2); break; - case 31: sprintf(buffer, "CMPQ %s,R%02d", signed_16bit((INT16)(reg1 << 11) >> 11), reg2);break; + case 31: sprintf(buffer, "CMPQ %s,R%02d", signed_16bit((int16)(reg1 << 11) >> 11), reg2);break; case 32: if (dsp_type == JAGUAR_GPU) sprintf(buffer, "SAT8 R%02d", reg2); else @@ -137,7 +156,7 @@ unsigned dasmjag(int dsp_type, char * buffer, unsigned pc) case 50: sprintf(buffer, "STORE R%02d,(R15+$%X)", reg2, convert_zero[reg1]*4);break; case 51: sprintf(buffer, "MOVE PC,R%02d", reg2); break; case 52: sprintf(buffer, "JUMP %s(R%02d)", condition[reg2], reg1); break; - case 53: sprintf(buffer, "JR %s%08X", condition[reg2], pc + ((INT8)(reg1 << 3) >> 2)); break; + case 53: sprintf(buffer, "JR %s%08X", condition[reg2], pc + ((int8)(reg1 << 3) >> 2)); break; case 54: sprintf(buffer, "MMULT R%02d,R%02d", reg1, reg2); break; case 55: sprintf(buffer, "MTOI R%02d,R%02d", reg1, reg2); break; case 56: sprintf(buffer, "NORMI R%02d,R%02d", reg1, reg2); break; @@ -157,7 +176,7 @@ unsigned dasmjag(int dsp_type, char * buffer, unsigned pc) sprintf(buffer, "ADDQMOD $%X,R%02d", convert_zero[reg1], reg2); break; } - sprintf(buffer,"%-24s (%04X)", buffer, op); + sprintf(bufferOut,"%-24s (%04X)", buffer, op); return size; }