fixed 68k_disam

parent 0f837aca
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "enforcer.h" #include "enforcer.h"
#include "picasso96.h" #include "picasso96.h"
#include "driveclick.h" #include "driveclick.h"
#include <stdarg.h>
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
...@@ -836,4 +837,18 @@ int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int ...@@ -836,4 +837,18 @@ int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int
return 0; return 0;
} }
// // writelog
TCHAR* buf_out (TCHAR *buffer, int *bufsize, const TCHAR *format, ...)
{
int count;
va_list parms;
va_start (parms, format);
if (buffer == NULL)
return 0;
count = vsnprintf (buffer, (*bufsize) - 1, format, parms);
va_end (parms);
*bufsize -= _tcslen (buffer);
return buffer + _tcslen (buffer);
}
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#include "cia.h" #include "cia.h"
#include "sleep.h" #include "sleep.h"
#define f_out fprintf
#define console_out printf
#ifdef JIT #ifdef JIT
extern uae_u8* compiled_code; extern uae_u8* compiled_code;
#include "compemu.h" #include "compemu.h"
...@@ -43,9 +45,6 @@ bool check_prefs_changed_comp (void) { return false; } ...@@ -43,9 +45,6 @@ bool check_prefs_changed_comp (void) { return false; }
/* For faster JIT cycles handling */ /* For faster JIT cycles handling */
signed long pissoff = 0; signed long pissoff = 0;
#define f_out fprintf
#define console_out printf
/* Opcode of faulting instruction */ /* Opcode of faulting instruction */
static uae_u16 last_op_for_exception_3; static uae_u16 last_op_for_exception_3;
/* PC at fault time */ /* PC at fault time */
...@@ -3325,7 +3324,7 @@ static void movemout (TCHAR *out, uae_u16 mask, int mode) ...@@ -3325,7 +3324,7 @@ static void movemout (TCHAR *out, uae_u16 mask, int mode)
} }
#if defined(DEBUGGER) || defined (ENFORCER) #if defined(DEBUGGER) || defined (ENFORCER)
static void disasm_size (char *instrname, struct instr *dp) static void disasm_size (TCHAR *instrname, struct instr *dp)
{ {
#if 0 #if 0
int i, size; int i, size;
...@@ -3359,7 +3358,7 @@ static void disasm_size (char *instrname, struct instr *dp) ...@@ -3359,7 +3358,7 @@ static void disasm_size (char *instrname, struct instr *dp)
} }
} }
void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode) void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode)
{ {
uaecptr newpc = 0; uaecptr newpc = 0;
m68kpc_offset = addr - m68k_getpc (); m68kpc_offset = addr - m68k_getpc ();
...@@ -3385,7 +3384,7 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c ...@@ -3385,7 +3384,7 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++) for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++)
; ;
f_out (buf, "%08x ", m68k_getpc () + m68kpc_offset); buf = buf_out (buf, &bufsize, L"%08lX ", m68k_getpc () + m68kpc_offset);
m68kpc_offset += 2; m68kpc_offset += 2;
...@@ -3397,13 +3396,44 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c ...@@ -3397,13 +3396,44 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
if (ccpt != 0) { if (ccpt != 0) {
_tcsncpy (ccpt, ccnames[dp->cc], 2); _tcsncpy (ccpt, ccnames[dp->cc], 2);
} }
switch (dp->size){ disasm_size (instrname, dp);
case sz_byte: strcat (instrname, ".B "); break;
case sz_word: strcat (instrname, ".W "); break;
case sz_long: strcat (instrname, ".L "); break;
default: strcat (instrname, " "); break;
}
if (lookup->mnemo == i_MOVEC2 || lookup->mnemo == i_MOVE2C) {
uae_u16 imm = get_iword_1 (m68kpc_offset);
uae_u16 creg = imm & 0x0fff;
uae_u16 r = imm >> 12;
TCHAR regs[16], *cname = "?";
int i;
for (i = 0; m2cregs[i].regname; i++) {
if (m2cregs[i].regno == creg)
break;
}
_stprintf (regs, "%c%d", r >= 8 ? 'A' : 'D', r >= 8 ? r - 8 : r);
if (m2cregs[i].regname)
cname = m2cregs[i].regname;
if (lookup->mnemo == i_MOVE2C) {
_tcscat (instrname, regs);
_tcscat (instrname, ",");
_tcscat (instrname, cname);
} else {
_tcscat (instrname, cname);
_tcscat (instrname, ",");
_tcscat (instrname, regs);
}
m68kpc_offset += 2;
} else if (lookup->mnemo == i_MVMEL) {
newpc = m68k_getpc () + m68kpc_offset;
m68kpc_offset += 2;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
_tcscat (instrname, ",");
movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode);
} else if (lookup->mnemo == i_MVMLE) {
m68kpc_offset += 2;
movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode);
_tcscat (instrname, ",");
newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
} else {
if (dp->suse) { if (dp->suse) {
newpc = m68k_getpc () + m68kpc_offset; newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode); newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode);
...@@ -3414,28 +3444,29 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c ...@@ -3414,28 +3444,29 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
newpc = m68k_getpc () + m68kpc_offset; newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
} }
}
for (i = 0; i < (m68kpc_offset - oldpc) / 2; i++) { for (i = 0; i < (m68kpc_offset - oldpc) / 2; i++) {
f_out (buf, "%04x ", get_iword_1 (oldpc + i * 2)); buf = buf_out (buf, &bufsize, "%04x ", get_iword_1 (oldpc + i * 2));
} }
while (i++ < 5) while (i++ < 5)
f_out (buf, " "); buf = buf_out (buf, &bufsize, " ");
f_out (buf, instrname); buf = buf_out (buf, &bufsize, instrname);
if (ccpt != 0) { if (ccpt != 0) {
if (deaddr) if (deaddr)
*deaddr = newpc; *deaddr = newpc;
if (cctrue (dp->cc)) if (cctrue (dp->cc))
f_out (buf, " == %08x (TRUE)", newpc); buf = buf_out (buf, &bufsize, " == $%08lX (T)", newpc);
else else
f_out (buf, " == %08x (FALSE)", newpc); buf = buf_out (buf, &bufsize, " == $%08lX (F)", newpc);
} else if ((opcode & 0xff00) == 0x6100) { /* BSR */ } else if ((opcode & 0xff00) == 0x6100) { /* BSR */
if (deaddr) if (deaddr)
*deaddr = newpc; *deaddr = newpc;
f_out (buf, " == %08x", newpc); buf = buf_out (buf, &bufsize, " == $%08lX", newpc);
} }
f_out (buf, "\n"); buf = buf_out (buf, &bufsize, "\n");
} }
if (nextpc) if (nextpc)
*nextpc = m68k_getpc () + m68kpc_offset; *nextpc = m68k_getpc () + m68kpc_offset;
...@@ -3468,7 +3499,7 @@ void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt) ...@@ -3468,7 +3499,7 @@ void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt)
Disasm the m68kcode at the given address into instrname Disasm the m68kcode at the given address into instrname
and instrcode and instrcode
*************************************************************/ *************************************************************/
void sm68k_disasm (char *instrname, char *instrcode, uaecptr addr, uaecptr *nextpc) void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *nextpc)
{ {
TCHAR *ccpt; TCHAR *ccpt;
uae_u32 opcode; uae_u32 opcode;
...@@ -3663,12 +3694,12 @@ void m68k_dumpstate (void *f, uaecptr *nextpc) ...@@ -3663,12 +3694,12 @@ void m68k_dumpstate (void *f, uaecptr *nextpc)
for (lookup1 = lookuptab; lookup1->mnemo != dp->mnemo; lookup1++); for (lookup1 = lookuptab; lookup1->mnemo != dp->mnemo; lookup1++);
dp = table68k + regs.ir; dp = table68k + regs.ir;
for (lookup2 = lookuptab; lookup2->mnemo != dp->mnemo; lookup2++); for (lookup2 = lookuptab; lookup2->mnemo != dp->mnemo; lookup2++);
f_out (f, "prefetch %04x (%s) %04x (%s)\n", regs.irc, lookup1->name, regs.ir, lookup2->name); f_out (f, "Prefetch %04x (%s) %04x (%s)\n", regs.irc, lookup1->name, regs.ir, lookup2->name);
} }
m68k_disasm (f, m68k_getpc (), nextpc, 1); m68k_disasm (f, m68k_getpc (), nextpc, 1);
if (nextpc) if (nextpc)
f_out (f, "next PC: %08x\n", *nextpc); f_out (f, "Next PC: %08x\n", *nextpc);
} }
#else #else
......
...@@ -445,7 +445,7 @@ configure:4344: $? = 0 ...@@ -445,7 +445,7 @@ configure:4344: $? = 0
configure:4344: result: yes configure:4344: result: yes
configure:4350: checking for _doprnt configure:4350: checking for _doprnt
configure:4350: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4350: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/cckxlJDb.o: In function `main': /tmp/ccr9Vcwh.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:67: undefined reference to `_doprnt' /home/gnostic/puaex/src/tools/conftest.c:67: undefined reference to `_doprnt'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4350: $? = 1 configure:4350: $? = 1
...@@ -533,7 +533,7 @@ configure:4364: $? = 0 ...@@ -533,7 +533,7 @@ configure:4364: $? = 0
configure:4364: result: yes configure:4364: result: yes
configure:4364: checking for strcmpi configure:4364: checking for strcmpi
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccsvYvOq.o: In function `main': /tmp/cc7g3tsw.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `strcmpi' /home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `strcmpi'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4364: $? = 1 configure:4364: $? = 1
...@@ -613,7 +613,7 @@ configure: failed program was: ...@@ -613,7 +613,7 @@ configure: failed program was:
configure:4364: result: no configure:4364: result: no
configure:4364: checking for stricmp configure:4364: checking for stricmp
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccAfsPHv.o: In function `main': /tmp/ccMKhfZB.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `stricmp' /home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `stricmp'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4364: $? = 1 configure:4364: $? = 1
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "dms/cdata.h" #include "dms/cdata.h"
#include "dms/pfile.h" #include "dms/pfile.h"
#include <zlib.h> #include <zlib.h>
#include <stdarg.h>
static struct zfile *zlist = 0; static struct zfile *zlist = 0;
...@@ -1872,7 +1873,7 @@ void zfile_seterror (const TCHAR *format, ...) ...@@ -1872,7 +1873,7 @@ void zfile_seterror (const TCHAR *format, ...)
TCHAR buffer[WRITE_LOG_BUF_SIZE]; TCHAR buffer[WRITE_LOG_BUF_SIZE];
va_list parms; va_list parms;
va_start (parms, format); va_start (parms, format);
count = _vsntprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms); count = vsnprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms);
zerror = my_strdup (buffer); zerror = my_strdup (buffer);
va_end (parms); va_end (parms);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment