+//
+// 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 <jlhamm@acm.org>
+//
+// Who When What
+// --- ---------- -------------------------------------------------------------
+// JLH 06/01/2012 Created this log (long overdue! ;-)
+//
+
+#include "jagdasm.h"
+
+#include <stdio.h>
#include "jaguar.h"
#define ROPCODE(a) JaguarReadWord(a)
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,",
-char * signed_16bit(INT16 val)
+char * signed_16bit(int16 val)
{
static char temp[10];
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;
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
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;
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;
}