]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/jagdasm.cpp
Added preliminary M68K disassembly browser.
[virtualjaguar] / src / jagdasm.cpp
index f6eb5ee81f1d91e40e5564b6926c2156a856be2d..31a67ef7d8852489a598b19a00c5a65de527a61e 100644 (file)
@@ -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 <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)
@@ -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;
 }