X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fm68000%2Fcpuextra.c;fp=src%2Fm68000%2Fcpuextra.c;h=e98f1da8120f957a220e2d69898064165add532e;hb=d207b11e613703aff7d00191c4595b7359f29700;hp=e165dd202610e196425fde74cc07a8662e51ab6e;hpb=48dd9ba5b6742935eef61cec80964afe093139ad;p=virtualjaguar diff --git a/src/m68000/cpuextra.c b/src/m68000/cpuextra.c index e165dd2..e98f1da 100644 --- a/src/m68000/cpuextra.c +++ b/src/m68000/cpuextra.c @@ -110,6 +110,43 @@ NB: Seems that when an address exception occurs, it doesn't get handled properly // on Atari ST, because it's possible to change the MFP's vector base // and get a conflict with 'normal' cpu exceptions. // +#if 0 +/* +This is the STOP # function. Dunno if exception handling occurs when it hits here or not, because don't know if the regs.s bit is set or not! +Seems to be... + +SR----------------- +1111 11 +5432 1098 7654 3210 +---- ---- ---- ---- + 1 1 + + +*/ +unsigned long CPUFUNC(op_4e72_5)(uint32_t opcode) /* STOP */ +{ + OpcodeFamily = 44; + CurrentInstrCycles = 4; + + if (!regs.s) + { + Exception(8, 0, M68000_EXC_SRC_CPU); + } + else + { + int16_t src = get_iword_prefetch(2); + regs.sr = src; + MakeFromSR(); + m68k_setstopped(1); + m68k_incpc(4); + fill_prefetch_0(); + } + + return 4; +} +#endif +//tmp... +void WriteLog(const char * text, ...); void Exception(int nr, uint32_t oldpc, int ExceptionSource) { uint32_t currpc = m68k_getpc(), newpc; @@ -128,15 +165,15 @@ char excNames[33][64] = { "Trap #" }; -printf("Exception #%i occurred! (%s)\n", nr, (nr < 32 ? excNames[nr] : (nr < 48 ? "Trap #" : "????"))); -printf("Vector @ #%i = %08X\n", nr, m68k_read_memory_32(nr * 4)); +WriteLog("Exception #%i occurred! (%s)\n", nr, (nr < 32 ? excNames[nr] : (nr < 48 ? "Trap #" : "????"))); +WriteLog("Vector @ #%i = %08X\n", nr, m68k_read_memory_32(nr * 4)); //abort(); -printf("PC = $%08X\n", currpc); -printf("A0 = $%08X A1 = $%08X A2 = $%08X A3 = $%08X\n", m68k_areg(regs, 0), m68k_areg(regs, 1), m68k_areg(regs, 2), m68k_areg(regs, 3)); -printf("A4 = $%08X A5 = $%08X A6 = $%08X A7 = $%08X\n", m68k_areg(regs, 4), m68k_areg(regs, 5), m68k_areg(regs, 6), m68k_areg(regs, 7)); -printf("D0 = $%08X D1 = $%08X D2 = $%08X D3 = $%08X\n", m68k_dreg(regs, 0), m68k_dreg(regs, 1), m68k_dreg(regs, 2), m68k_dreg(regs, 3)); -printf("D4 = $%08X D5 = $%08X D6 = $%08X D7 = $%08X\n", m68k_dreg(regs, 4), m68k_dreg(regs, 5), m68k_dreg(regs, 6), m68k_dreg(regs, 7)); -printf("\n"); +WriteLog("PC = $%08X\n", currpc); +WriteLog("A0 = $%08X A1 = $%08X A2 = $%08X A3 = $%08X\n", m68k_areg(regs, 0), m68k_areg(regs, 1), m68k_areg(regs, 2), m68k_areg(regs, 3)); +WriteLog("A4 = $%08X A5 = $%08X A6 = $%08X A7 = $%08X\n", m68k_areg(regs, 4), m68k_areg(regs, 5), m68k_areg(regs, 6), m68k_areg(regs, 7)); +WriteLog("D0 = $%08X D1 = $%08X D2 = $%08X D3 = $%08X\n", m68k_dreg(regs, 0), m68k_dreg(regs, 1), m68k_dreg(regs, 2), m68k_dreg(regs, 3)); +WriteLog("D4 = $%08X D5 = $%08X D6 = $%08X D7 = $%08X\n", m68k_dreg(regs, 4), m68k_dreg(regs, 5), m68k_dreg(regs, 6), m68k_dreg(regs, 7)); +WriteLog("\n"); uint32_t disPC = currpc - 10; char buffer[128]; @@ -145,7 +182,7 @@ do { uint32_t oldpc = disPC; disPC += m68k_disassemble(buffer, disPC, 0); - printf("%s%08X: %s\n", (oldpc == currpc ? ">" : " "), oldpc, buffer); + WriteLog("%s%08X: %s\n", (oldpc == currpc ? ">" : " "), oldpc, buffer); } while (disPC < (currpc + 10)); #endif