--- generator/main/reg68k.c 2020/03/04 04:46:43 1.1 +++ generator/main/reg68k.c 2020/03/04 04:46:51 1.1.1.2 @@ -9,26 +9,25 @@ #include #include "reg68k.h" -#include "mem68k.h" #include "cpu68k.h" +#include "mem68k.h" #include "cpuz80.h" #include "vdp.h" #include "ui.h" #include "compile.h" #include "gensound.h" -/*** externed variables ***/ +/*** global variables ***/ #if (!(defined(PROCESSOR_ARM) || defined(PROCESSOR_SPARC) \ || defined(PROCESSOR_INTEL))) - uint32 reg68k_pc; - uint32 *reg68k_regs; - t_sr reg68k_sr; +uint32 reg68k_pc; +uint32 *reg68k_regs; +t_sr reg68k_sr; #endif /*** forward references ***/ - /*** reg68k_external_step - execute one instruction ***/ unsigned int reg68k_external_step(void) @@ -53,17 +52,18 @@ unsigned int reg68k_external_step(void) ui_err("Invalid instruction @ %08X\n", reg68k_pc); cpu68k_ipc(reg68k_pc, - mem68k_memptr[(reg68k_pc>>12) & 0xfff](reg68k_pc & 0xFFFFFF), - piib, &ipc); - cpu68k_functable[fetchword(reg68k_pc)*2+1](&ipc); - clks = piib->clocks; + mem68k_memptr[(reg68k_pc >> 12) & 0xfff] (reg68k_pc & + 0xFFFFFF), piib, + &ipc); + cpu68k_functable[fetchword(reg68k_pc) * 2 + 1] (&ipc); + clks = piib->clocks; /* restore global registers back to permanent storage */ regs.pc = reg68k_pc; regs.sr = reg68k_sr; longjmp(jb, 1); } - cpu68k_clocks+= clks; - return clks; /* number of clocks done */ + cpu68k_clocks += clks; + return clks; /* number of clocks done */ } /*** reg68k_external_execute - execute at least given number of clocks, @@ -94,57 +94,60 @@ unsigned int reg68k_external_execute(uns do { pc24 = reg68k_pc & 0xffffff; if ((pc24 & 0xff0000) == 0xff0000) { - /* executing code from RAM, do not use compiled information */ - do { - step_piib = cpu68k_iibtable[fetchword(reg68k_pc)]; + /* executing code from RAM, do not use compiled information */ + do { + step_piib = cpu68k_iibtable[fetchword(reg68k_pc)]; if (!step_piib) ui_err("Invalid instruction (iib assert) @ %08X\n", reg68k_pc); - cpu68k_ipc(reg68k_pc, - mem68k_memptr[(reg68k_pc>>12) & - 0xfff](reg68k_pc & 0xFFFFFF), - step_piib, &step_ipc); - cpu68k_functable[fetchword(reg68k_pc)*2+1](&step_ipc); - clks-= step_piib->clocks; - cpu68k_clocks+= step_piib->clocks; - } while (!step_piib->flags.endblk); - list = NULL; /* stop compiler warning ;( */ + cpu68k_ipc(reg68k_pc, + mem68k_memptr[(reg68k_pc >> 12) & + 0xfff] (reg68k_pc & 0xFFFFFF), + step_piib, &step_ipc); + cpu68k_functable[fetchword(reg68k_pc) * 2 + 1] (&step_ipc); + clks -= step_piib->clocks; + cpu68k_clocks += step_piib->clocks; + } + while (!step_piib->flags.endblk); + list = NULL; /* stop compiler warning ;( */ } else { - index = (pc24>>1) & (LEN_IPCLISTTABLE-1); - list = ipclist[index]; - while(list && (list->pc != pc24)) { - list = list->next; - } + index = (pc24 >> 1) & (LEN_IPCLISTTABLE - 1); + list = ipclist[index]; + while (list && (list->pc != pc24)) { + list = list->next; + } #ifdef PROCESSOR_ARM - if (!list) { - list = cpu68k_makeipclist(pc24); - list->next = ipclist[index]; - ipclist[index] = list; - list->compiled = compile_make(list); - } - list->compiled((t_ipc *)(list+1)); + if (!list) { + list = cpu68k_makeipclist(pc24); + list->next = ipclist[index]; + ipclist[index] = list; + list->compiled = compile_make(list); + } + list->compiled((t_ipc *) (list + 1)); #else - if (!list) { - /* LOG_USER(("Making IPC list @ %08x", pc24)); */ - list = cpu68k_makeipclist(pc24); - list->next = ipclist[index]; - ipclist[index] = list; - } - ipc = (t_ipc *)(list+1); - do { - ipc->function(ipc); - ipc++; - } while (*(int *)ipc); + if (!list) { + /* LOG_USER(("Making IPC list @ %08x", pc24)); */ + list = cpu68k_makeipclist(pc24); + list->next = ipclist[index]; + ipclist[index] = list; + } + ipc = (t_ipc *) (list + 1); + do { + ipc->function(ipc); + ipc++; + } + while (*(int *)ipc); #endif - clks-= list->clocks; - cpu68k_clocks+= list->clocks; + clks -= list->clocks; + cpu68k_clocks += list->clocks; } - } while (clks > 0); + } + while (clks > 0); /* restore global registers back to permanent storage */ regs.pc = reg68k_pc; regs.sr = reg68k_sr; longjmp(jb, 1); } - return -clks; /* i.e. number of clocks done too much */ + return -clks; /* i.e. number of clocks done too much */ } /*** reg68k_external_autovector - for external use ***/ @@ -182,35 +185,36 @@ void reg68k_external_autovector(int avno void reg68k_internal_autovector(int avno) { - int curlevel = (reg68k_sr.sr_int>>8) & 7; + int curlevel = (reg68k_sr.sr_int >> 8) & 7; uint32 tmpaddr; if ((curlevel < avno || avno == 7) && !cpu68k_frozen) { if (regs.stop) { LOG_DEBUG1(("stop finished")); /* autovector whilst in a STOP instruction */ - reg68k_pc+= 4; + reg68k_pc += 4; regs.stop = 0; } if (!reg68k_sr.sr_struct.s) { - regs.regs[15]^= regs.sp; /* swap A7 and SP */ - regs.sp^= regs.regs[15]; - regs.regs[15]^= regs.sp; + reg68k_regs[15] ^= regs.sp; /* swap A7 and SP */ + regs.sp ^= reg68k_regs[15]; + reg68k_regs[15] ^= regs.sp; reg68k_sr.sr_struct.s = 1; } - regs.regs[15]-=4; - storelong(regs.regs[15], reg68k_pc); - regs.regs[15]-=2; - storeword(regs.regs[15], reg68k_sr.sr_int); + reg68k_regs[15] -= 4; + storelong(reg68k_regs[15], reg68k_pc); + reg68k_regs[15] -= 2; + storeword(reg68k_regs[15], reg68k_sr.sr_int); reg68k_sr.sr_struct.t = 0; - reg68k_sr.sr_int&= ~0x0700; - reg68k_sr.sr_int|= avno << 8; + reg68k_sr.sr_int &= ~0x0700; + reg68k_sr.sr_int |= avno << 8; tmpaddr = reg68k_pc; - reg68k_pc = fetchlong((V_AUTO+avno-1)*4); - /* LOG_USER(("AUTOVECTOR %d: %X -> %X", avno, tmpaddr, reg68k_pc)); */ + reg68k_pc = fetchlong((V_AUTO + avno - 1) * 4); + LOG_USER(("AUTOVECTOR %d: %X -> %X", avno, tmpaddr, reg68k_pc)); regs.pending = 0; } else { - /* LOG_USER(("%08X autovector %d pending", reg68k_pc, avno)); */ + LOG_USER(("%08X autovector %d pending", reg68k_pc, avno)); + // if (!regs.pending || regs.pending < avno) - not sure about this regs.pending = avno; } } @@ -221,15 +225,15 @@ void reg68k_internal_autovector(int avno void reg68k_internal_vector(int vno, uint32 oldpc) { if (!reg68k_sr.sr_struct.s) { - reg68k_regs[15]^= regs.sp; /* swap A7 and SP */ - regs.sp^= reg68k_regs[15]; - reg68k_regs[15]^= regs.sp; + reg68k_regs[15] ^= regs.sp; /* swap A7 and SP */ + regs.sp ^= reg68k_regs[15]; + reg68k_regs[15] ^= regs.sp; reg68k_sr.sr_struct.s = 1; } - reg68k_regs[15]-=4; + reg68k_regs[15] -= 4; storelong(reg68k_regs[15], oldpc); - reg68k_regs[15]-=2; + reg68k_regs[15] -= 2; storeword(reg68k_regs[15], reg68k_sr.sr_int); - reg68k_pc = fetchlong(vno*4); + reg68k_pc = fetchlong(vno * 4); /* LOG_USER(("VECTOR %d: %X -> %X\n", vno, oldpc, reg68k_pc)); */ -} +}