From: Toni Wilen Date: Sun, 16 Aug 2009 16:40:20 +0000 (+0300) Subject: imported winuaesrc1620b7.zip X-Git-Tag: 2100~66 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=49c598699528aac4908a3015ef64beefd9c4ea0b;p=francis%2Fwinuae.git imported winuaesrc1620b7.zip --- diff --git a/a2091.c b/a2091.c index 246a8117..01ed1869 100644 --- a/a2091.c +++ b/a2091.c @@ -7,7 +7,7 @@ * */ -#define A2091_DEBUG 1 +#define A2091_DEBUG 0 #define A3000_DEBUG 0 #define WD33C93_DEBUG 0 diff --git a/ar.c b/ar.c index cac97b79..de47b94e 100644 --- a/ar.c +++ b/ar.c @@ -507,14 +507,14 @@ uaecptr wait_for_pc = 0; /* The program counter that we wait for. */ /* returns true if the Program counter is currently in the AR rom. */ int is_ar_pc_in_rom() { - uaecptr pc = m68k_getpc (®s) & 0xFFFFFF; + uaecptr pc = m68k_getpc () & 0xFFFFFF; return pc >= arrom_start && pc < arrom_start+arrom_size; } /* returns true if the Program counter is currently in the AR RAM. */ int is_ar_pc_in_ram() { - uaecptr pc = m68k_getpc (®s) & 0xFFFFFF; + uaecptr pc = m68k_getpc () & 0xFFFFFF; return pc >= arram_start && pc < arram_start+arram_size; } @@ -544,15 +544,15 @@ STATIC_INLINE int ar3a (uaecptr addr, uae_u8 b, int writing) ar_wait_pop = 0; /* We get (SP+2) here, as the first word on the stack is the status register. */ /* We want the following long, which is the return program counter. */ - wait_for_pc = longget (m68k_areg (®s, 7) + 2); /* Get (SP+2) */ - set_special (®s, SPCFLAG_ACTION_REPLAY); + wait_for_pc = longget (m68k_areg (regs, 7) + 2); /* Get (SP+2) */ + set_special (SPCFLAG_ACTION_REPLAY); - pc = m68k_getpc (®s); + pc = m68k_getpc (); /* write_log_debug ("Action Replay marked as ACTION_REPLAY_WAIT_PC, PC=%p\n",pc);*/ } else { - uaecptr pc = m68k_getpc (®s); + uaecptr pc = m68k_getpc (); /* write_log_debug ("Action Replay marked as IDLE, PC=%p\n",pc);*/ action_replay_flag = ACTION_REPLAY_IDLE; } @@ -592,7 +592,7 @@ STATIC_INLINE int ar3a (uaecptr addr, uae_u8 b, int writing) } else write_log (L"AR: exit with armode(%d)\n", armode); - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); action_replay_flag = ACTION_REPLAY_HIDE; } else if (addr == 6) { copytoamiga (regs.vbr + 0x7c, artemp, 4); @@ -686,19 +686,19 @@ static uae_u32 REGPARAM2 arram_lget (uaecptr addr) addr &= arram_mask; m = (uae_u32 *)(armemory_ram + addr); if (strncmp ("T8", (char*)m, 2) == 0) - write_log_debug (L"Reading T8 from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading T8 from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("LAME", (char*)m, 4) == 0) - write_log_debug (L"Reading LAME from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading LAME from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("RES1", (char*)m, 4) == 0) - write_log_debug (L"Reading RES1 from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading RES1 from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("ARON", (char*)m, 4) == 0) - write_log_debug (L"Reading ARON from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading ARON from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("KILL", (char*)m, 4) == 0) - write_log_debug (L"Reading KILL from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading KILL from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("BRON", (char*)m, 4) == 0) - write_log_debug (L"Reading BRON from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading BRON from addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("PRIN", (char*)m, 4) == 0) - write_log_debug (L"Reading PRIN from addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Reading PRIN from addr %08x PC=%p\n", addr, m68k_getpc ()); return do_get_mem_long (m); } @@ -735,19 +735,19 @@ void REGPARAM2 arram_lput (uaecptr addr, uae_u32 l) addr &= arram_mask; m = (uae_u32 *)(armemory_ram + addr); if (strncmp ("T8", (char*)m, 2) == 0) - write_log_debug (L"Writing T8 to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing T8 to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("LAME", (char*)m, 4) == 0) - write_log_debug (L"Writing LAME to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing LAME to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("RES1", (char*)m, 4) == 0) - write_log_debug (L"Writing RES1 to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing RES1 to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("ARON", (char*)m, 4) == 0) - write_log_debug (L"Writing ARON to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing ARON to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("KILL", (char*)m, 4) == 0) - write_log_debug (L"Writing KILL to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing KILL to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("BRON", (char*)m, 4) == 0) - write_log_debug (L"Writing BRON to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing BRON to addr %08x PC=%p\n", addr, m68k_getpc ()); if (strncmp ("PRIN", (char*)m, 4) == 0) - write_log_debug (L"Writing PRIN to addr %08x PC=%p\n", addr, m68k_getpc (®s)); + write_log_debug (L"Writing PRIN to addr %08x PC=%p\n", addr, m68k_getpc ()); do_put_mem_long (m, l); } @@ -923,7 +923,7 @@ static void action_replay_go (void) hide_cart (0); memcpy (armemory_ram + 0xf000, ar_custom, 2 * 256); action_replay_flag = ACTION_REPLAY_ACTIVE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); copyfromamiga (artemp, regs.vbr + 0x7c, 4); copytoamiga (regs.vbr + 0x7c, armemory_rom + 0x7c, 4); NMI (); @@ -979,7 +979,7 @@ static void hrtmon_go (void) triggered_once = 1; cartridge_enter(); hrtmon_flag = ACTION_REPLAY_ACTIVE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); if (hrtmon_zeropage) memcpy (hrtmon_zeropage, chipmemory, 1024); if (hrtmon_custom) @@ -994,7 +994,7 @@ static void hrtmon_go (void) old = get_long ((uaecptr)(regs.vbr + 0x8)); put_word (hrtmem_start + 0xc0000, 4); put_long ((uaecptr)(regs.vbr + 8), get_long (hrtmem_start + 8)); - Exception (2, ®s, 0); + Exception (2, 0); put_long ((uaecptr)(regs.vbr + 8), old); } else if (cart_type == CART_SUPER4) { uae_u32 v = get_long (hrtmem_start + 0x7c); @@ -1035,9 +1035,9 @@ void action_replay_enter(void) return; triggered_once = 1; if (armodel == 1) { - write_log (L"AR1: Enter PC:%p\n", m68k_getpc (®s)); + write_log (L"AR1: Enter PC:%p\n", m68k_getpc ()); action_replay_go1 (7); - unset_special (®s, SPCFLAG_ACTION_REPLAY); + unset_special (SPCFLAG_ACTION_REPLAY); return; } if (action_replay_flag == ACTION_REPLAY_DORESET) { @@ -1080,7 +1080,7 @@ void action_replay_reset(void) { if (hrtmemory) { if (savestate_state == STATE_RESTORE) { - if (m68k_getpc (®s) >= hrtmem_start && m68k_getpc (®s) <= hrtmem_start + hrtmem_size) + if (m68k_getpc () >= hrtmem_start && m68k_getpc () <= hrtmem_start + hrtmem_size) hrtmon_map_banks (); else hrtmon_unmap_banks (); @@ -1090,7 +1090,7 @@ void action_replay_reset(void) return; if (savestate_state == STATE_RESTORE) { - if (m68k_getpc (®s) >= arrom_start && m68k_getpc (®s) <= arrom_start + arrom_size) { + if (m68k_getpc () >= arrom_start && m68k_getpc () <= arrom_start + arrom_size) { action_replay_flag = ACTION_REPLAY_ACTIVE; hide_cart (0); } else { @@ -1123,10 +1123,10 @@ void action_replay_ciaread(void) if (armode < 2) /* If there are no active breakpoints */ return; - if (m68k_getpc (®s) >= 0x200) + if (m68k_getpc () >= 0x200) return; action_replay_flag = ACTION_REPLAY_ACTIVATE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); } int action_replay_freeze(void) @@ -1136,13 +1136,13 @@ int action_replay_freeze(void) action_replay_chipwrite(); } else { action_replay_flag = ACTION_REPLAY_ACTIVATE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); armode = ARMODE_FREEZE; } return 1; } else { hrtmon_flag = ACTION_REPLAY_ACTIVATE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); return 1; } return 0; @@ -1152,7 +1152,7 @@ void action_replay_chipwrite(void) { if (armodel == 2 || armodel == 3) { action_replay_flag = ACTION_REPLAY_DORESET; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); } else if (armodel == 1) { /* copy 0x60 addr info to level 7 */ /* This is to emulate the 0x60 interrupt. */ @@ -1161,7 +1161,7 @@ void action_replay_chipwrite(void) ar_wait_pop = 1; /* Wait for stack to pop. */ action_replay_flag = ACTION_REPLAY_ACTIVATE; - set_special (®s, SPCFLAG_ACTION_REPLAY); + set_special (SPCFLAG_ACTION_REPLAY); } } @@ -1178,7 +1178,7 @@ void hrtmon_hide(void) return; cartridge_exit(); hrtmon_flag = ACTION_REPLAY_IDLE; - unset_special (®s, SPCFLAG_ACTION_REPLAY); + unset_special (SPCFLAG_ACTION_REPLAY); //write_log (L"HRTMON: Exit\n"); } @@ -1498,7 +1498,7 @@ int action_replay_unload (int in_memory_reset) } } - unset_special (®s, SPCFLAG_ACTION_REPLAY); /* This shouldn't be necessary here, but just in case. */ + unset_special (SPCFLAG_ACTION_REPLAY); /* This shouldn't be necessary here, but just in case. */ action_replay_flag = ACTION_REPLAY_INACTIVE; hrtmon_flag = ACTION_REPLAY_INACTIVE; action_replay_unsetbanks (); diff --git a/audio.c b/audio.c index cf6e0144..8319e321 100644 --- a/audio.c +++ b/audio.c @@ -732,8 +732,9 @@ static void sample16i_crux_handler (void) STATIC_INLINE void make6ch (uae_s32 d0, uae_s32 d1, uae_s32 d2, uae_s32 d3) { uae_s32 sum = d0 + d1 + d2 + d3; - PUT_SOUND_WORD (sum >> 1); - PUT_SOUND_WORD (sum >> 1); + sum /= 8; + PUT_SOUND_WORD (sum); + PUT_SOUND_WORD (sum); } void sample16ss_handler (void) @@ -1152,7 +1153,7 @@ static void audio_handler (int nr) cdp->state = 1; cdp->wlen = cdp->len; /* there are too many stupid sound routines that fail on "too" fast cpus.. */ - if (currprefs.cpu_model >= 68020) + if (currprefs.cpu_model >= 68020 && !currprefs.cpu_cycle_exact) cdp->pt = cdp->lc; #ifdef DEBUG_AUDIO if (debugchannel (nr)) @@ -1692,11 +1693,11 @@ void AUDxDAT (int nr, uae_u16 v) cdp->request_word = -1; cdp->request_word_skip = 0; /* cpu >= 68020: another "too fast" memory/CPU hack */ - if (cdp->state == 0 || currprefs.cpu_model >= 68020) { + if (cdp->state == 0 || (currprefs.cpu_model >= 68020 && !currprefs.cpu_cycle_exact)) { cdp->state = 2; cdp->wlen = cdp->len; cdp->pt = cdp->lc; - if (currprefs.cpu_model >= 68020) + if (currprefs.cpu_model >= 68020 && !currprefs.cpu_cycle_exact) INTREQ (0x80 << nr); audio_handler (nr); schedule_audio (); diff --git a/autoconf.c b/autoconf.c index 61ddb35a..79a4581e 100644 --- a/autoconf.c +++ b/autoconf.c @@ -202,7 +202,7 @@ static uae_u32 REGPARAM2 getchipmemsize (TrapContext *context) static uae_u32 REGPARAM2 uae_puts (TrapContext *context) { - puts ((uae_u8*)get_real_address (m68k_areg (&context->regs, 0))); + puts ((uae_u8*)get_real_address (m68k_areg (regs, 0))); return 0; } diff --git a/blitter.c b/blitter.c index 61800a7c..77221ca4 100644 --- a/blitter.c +++ b/blitter.c @@ -300,7 +300,7 @@ static void blitter_done (int hpos) if (debug_dma) record_dma_event (DMA_EVENT_BLITFINISHED, hpos, vpos); event2_remevent (ev2_blitter); - unset_special (®s, SPCFLAG_BLTNASTY); + unset_special (SPCFLAG_BLTNASTY); #ifdef BLITTER_DEBUG write_log (L"cycles %d, missed %d, total %d\n", blit_totalcyclecounter, blit_misscyclecounter, blit_totalcyclecounter + blit_misscyclecounter); @@ -1271,9 +1271,9 @@ static void do_blitter2 (int hpos, int copper) bltstate = BLT_init; blit_slowdown = 0; - unset_special (®s, SPCFLAG_BLTNASTY); + unset_special (SPCFLAG_BLTNASTY); if (dmaen (DMA_BLITPRI)) - set_special (®s, SPCFLAG_BLTNASTY); + set_special (SPCFLAG_BLTNASTY); if (vblitsize == 0 || (blitline && hblitsize != 2)) { blitter_done (hpos); diff --git a/bsdsocket.c b/bsdsocket.c index beeea2a1..daeb7647 100644 --- a/bsdsocket.c +++ b/bsdsocket.c @@ -91,12 +91,12 @@ uae_u32 addmem (uae_u32 * dst, const uae_char *src, int len) /* Get current task */ static uae_u32 gettask (TrapContext *context) { - uae_u32 currtask, a1 = m68k_areg (&context->regs, 1); + uae_u32 currtask, a1 = m68k_areg (regs, 1); - m68k_areg (&context->regs, 1) = 0; + m68k_areg (regs, 1) = 0; currtask = CallLib (context, get_long (4), -0x126); /* FindTask */ - m68k_areg (&context->regs, 1) = a1; + m68k_areg (regs, 1) = a1; BSDTRACE ((L"[%s] ", get_real_address (get_long (currtask + 10)))); return currtask; @@ -316,8 +316,8 @@ static uae_u32 REGPARAM2 bsdsock_int_handler (TrapContext *context) for (sb = sbsigqueue; sb; sb = sb->nextsig) { if (sb->dosignal == 1) { struct regstruct sbved_regs = context->regs; - m68k_areg (&context->regs, 1) = sb->ownertask; - m68k_dreg (&context->regs, 0) = sb->sigstosend; + m68k_areg (regs, 1) = sb->ownertask; + m68k_dreg (regs, 0) = sb->sigstosend; CallLib (context, get_long (4), -0x144); /* Signal() */ context->regs = sbved_regs; sb->sigstosend = 0; @@ -337,14 +337,14 @@ static uae_u32 REGPARAM2 bsdsock_int_handler (TrapContext *context) void waitsig (TrapContext *context, SB) { long sigs; - m68k_dreg (&context->regs, 0) = (((uae_u32) 1) << sb->signal) | sb->eintrsigs; + m68k_dreg (regs, 0) = (((uae_u32) 1) << sb->signal) | sb->eintrsigs; if ((sigs = CallLib (context, get_long (4), -0x13e)) & sb->eintrsigs) { /* Wait */ sockabort (sb); bsdsocklib_seterrno (sb, 4); /* EINTR */ // Set signal - m68k_dreg (&context->regs, 0) = sigs; - m68k_dreg (&context->regs, 1) = sb->eintrsigs; + m68k_dreg (regs, 0) = sigs; + m68k_dreg (regs, 1) = sb->eintrsigs; sigs = CallLib (context, get_long (4), -0x132); /* SetSignal() */ sb->eintr = 1; @@ -360,8 +360,8 @@ void cancelsig (TrapContext *context, SB) sb->dosignal = 2; unlocksigqueue (); #endif - m68k_dreg (&context->regs, 0) = 0; - m68k_dreg (&context->regs, 1) = ((uae_u32) 1) << sb->signal; + m68k_dreg (regs, 0) = 0; + m68k_dreg (regs, 1) = ((uae_u32) 1) << sb->signal; CallLib (context, get_long (4), -0x132); /* SetSignal() */ } @@ -375,7 +375,7 @@ static struct socketbase *alloc_socketbase (TrapContext *context) if ((sb = (struct socketbase*)calloc (sizeof (struct socketbase), 1)) != NULL) { sb->ownertask = gettask (context); - m68k_dreg (&context->regs, 0) = -1; + m68k_dreg (regs, 0) = -1; sb->signal = CallLib (context, get_long (4), -0x14A); /* AllocSignal */ if (sb->signal == -1) { @@ -383,8 +383,8 @@ static struct socketbase *alloc_socketbase (TrapContext *context) free (sb); return NULL; } - m68k_dreg (&context->regs, 0) = SCRATCHBUFSIZE; - m68k_dreg (&context->regs, 1) = 0; + m68k_dreg (regs, 0) = SCRATCHBUFSIZE; + m68k_dreg (regs, 1) = 0; sb->dtablesize = DEFAULT_DTABLE_SIZE; /* @@@ check malloc() result */ @@ -415,7 +415,7 @@ static struct socketbase *alloc_socketbase (TrapContext *context) STATIC_INLINE struct socketbase *get_socketbase (TrapContext *context) { - return (struct socketbase*)get_pointer (m68k_areg (&context->regs, 6) + offsetof (struct UAEBSDBase, sb)); + return (struct socketbase*)get_pointer (m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, sb)); } static void free_socketbase (TrapContext *context) @@ -423,24 +423,24 @@ static void free_socketbase (TrapContext *context) struct socketbase *sb, *nsb; if ((sb = get_socketbase (context)) != NULL) { - m68k_dreg (&context->regs, 0) = sb->signal; + m68k_dreg (regs, 0) = sb->signal; CallLib (context, get_long (4), -0x150); /* FreeSignal */ if (sb->hostent) { - m68k_areg (&context->regs, 1) = sb->hostent; - m68k_dreg (&context->regs, 0) = sb->hostentsize; + m68k_areg (regs, 1) = sb->hostent; + m68k_dreg (regs, 0) = sb->hostentsize; CallLib (context, get_long (4), -0xD2); /* FreeMem */ } if (sb->protoent) { - m68k_areg (&context->regs, 1) = sb->protoent; - m68k_dreg (&context->regs, 0) = sb->protoentsize; + m68k_areg (regs, 1) = sb->protoent; + m68k_dreg (regs, 0) = sb->protoentsize; CallLib (context, get_long (4), -0xD2); /* FreeMem */ } if (sb->servent) { - m68k_areg (&context->regs, 1) = sb->servent; - m68k_dreg (&context->regs, 0) = sb->serventsize; + m68k_areg (regs, 1) = sb->servent; + m68k_dreg (regs, 0) = sb->serventsize; CallLib (context, get_long (4), -0xD2); /* FreeMem */ } @@ -500,11 +500,11 @@ static uae_u32 REGPARAM2 bsdsocklib_Open (TrapContext *context) if ((sb = alloc_socketbase (context)) != NULL) { put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) + 1); - m68k_areg (&context->regs, 0) = functable; - m68k_areg (&context->regs, 1) = datatable; - m68k_areg (&context->regs, 2) = 0; - m68k_dreg (&context->regs, 0) = sizeof (struct UAEBSDBase); - m68k_dreg (&context->regs, 1) = 0; + m68k_areg (regs, 0) = functable; + m68k_areg (regs, 1) = datatable; + m68k_areg (regs, 2) = 0; + m68k_dreg (regs, 0) = sizeof (struct UAEBSDBase); + m68k_dreg (regs, 1) = 0; result = CallLib (context, get_long (4), -0x54); /* MakeLibrary */ put_pointer (result + offsetof (struct UAEBSDBase, sb), sb); @@ -520,15 +520,15 @@ static uae_u32 REGPARAM2 bsdsocklib_Close (TrapContext *context) { int opencount; - uae_u32 base = m68k_areg (&context->regs, 6); + uae_u32 base = m68k_areg (regs, 6); uae_u32 negsize = get_word (base + 16); free_socketbase (context); put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) - 1); - m68k_areg (&context->regs, 1) = base - negsize; - m68k_dreg (&context->regs, 0) = negsize + get_word (base + 18); + m68k_areg (regs, 1) = base - negsize; + m68k_dreg (regs, 0) = negsize + get_word (base + 18); CallLib (context, get_long (4), -0xD2); /* FreeMem */ BSDTRACE ((L"CloseLibrary() -> [%d]\n", opencount)); @@ -540,30 +540,30 @@ static uae_u32 REGPARAM2 bsdsocklib_Close (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_socket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_socket (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1), - m68k_dreg (&context->regs, 2)); + return host_socket (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), + m68k_dreg (regs, 2)); } /* bind(s, name, namelen)(d0/a0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_bind (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_bind (sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), - m68k_dreg (&context->regs, 1)); + return host_bind (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), + m68k_dreg (regs, 1)); } /* listen(s, backlog)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_listen (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_listen (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1)); + return host_listen (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } /* accept(s, addr, addrlen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_accept (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_accept (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1)); + host_accept (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); return sb->resultval; } @@ -571,7 +571,7 @@ static uae_u32 REGPARAM2 bsdsocklib_accept (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_connect (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_connect (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 1)); + host_connect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1)); return sb->sb_errno ? -1 : 0; } @@ -579,8 +579,8 @@ static uae_u32 REGPARAM2 bsdsocklib_connect (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_sendto (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_sendto (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 1), - m68k_dreg (&context->regs, 2), m68k_areg (&context->regs, 1), m68k_dreg (&context->regs, 3)); + host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), + m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_dreg (regs, 3)); return sb->resultval; } @@ -588,8 +588,8 @@ static uae_u32 REGPARAM2 bsdsocklib_sendto (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_send (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_sendto (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 1), - m68k_dreg (&context->regs, 2), 0, 0); + host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), + m68k_dreg (regs, 2), 0, 0); return sb->resultval; } @@ -597,8 +597,8 @@ static uae_u32 REGPARAM2 bsdsocklib_send (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_recvfrom (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_recvfrom (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 1), - m68k_dreg (&context->regs, 2), m68k_areg (&context->regs, 1), m68k_areg (&context->regs, 2)); + host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), + m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_areg (regs, 2)); return sb->resultval; } @@ -606,8 +606,8 @@ static uae_u32 REGPARAM2 bsdsocklib_recvfrom (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_recv (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_recvfrom (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 1), - m68k_dreg (&context->regs, 2), 0, 0); + host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), + m68k_dreg (regs, 2), 0, 0); return sb->resultval; } @@ -615,15 +615,15 @@ static uae_u32 REGPARAM2 bsdsocklib_recv (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_shutdown (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_shutdown (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1)); + return host_shutdown (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } /* setsockopt(s, level, optname, optval, optlen)(d0/d1/d2/a0/d3) */ static uae_u32 REGPARAM2 bsdsocklib_setsockopt (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_setsockopt (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1), m68k_dreg (&context->regs, 2), - m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 3)); + host_setsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), + m68k_areg (regs, 0), m68k_dreg (regs, 3)); return sb->resultval; } @@ -631,22 +631,22 @@ static uae_u32 REGPARAM2 bsdsocklib_setsockopt (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_getsockopt (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_getsockopt (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1), m68k_dreg (&context->regs, 2), - m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1)); + return host_getsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), + m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* getsockname(s, hostname, namelen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getsockname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_getsockname (sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1)); + return host_getsockname (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* getpeername(s, hostname, namelen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getpeername (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_getpeername (sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1)); + return host_getpeername (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* *------ generic system calls related to sockets */ @@ -654,7 +654,7 @@ static uae_u32 REGPARAM2 bsdsocklib_getpeername (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_IoctlSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_IoctlSocket (context, sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1), m68k_areg (&context->regs, 0)); + return host_IoctlSocket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_areg (regs, 0)); } /* *------ AmiTCP/IP specific stuff */ @@ -662,15 +662,15 @@ static uae_u32 REGPARAM2 bsdsocklib_IoctlSocket (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_CloseSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_CloseSocket (context, sb, m68k_dreg (&context->regs, 0)); + return host_CloseSocket (context, sb, m68k_dreg (regs, 0)); } /* WaitSelect(nfds, readfds, writefds, execptfds, timeout, maskp)(d0/a0/a1/a2/a3/d1) */ static uae_u32 REGPARAM2 bsdsocklib_WaitSelect (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_WaitSelect (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1), - m68k_areg (&context->regs, 2), m68k_areg (&context->regs, 3), m68k_dreg (&context->regs, 1)); + host_WaitSelect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1), + m68k_areg (regs, 2), m68k_areg (regs, 3), m68k_dreg (regs, 1)); return sb->resultval; } @@ -679,9 +679,9 @@ static uae_u32 REGPARAM2 bsdsocklib_SetSocketSignals (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - BSDTRACE ((L"SetSocketSignals(0x%08lx,0x%08lx,0x%08lx) -> ", m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1), m68k_dreg (&context->regs, 2))); - sb->eintrsigs = m68k_dreg (&context->regs, 0); - sb->eventsigs = m68k_dreg (&context->regs, 1); + BSDTRACE ((L"SetSocketSignals(0x%08lx,0x%08lx,0x%08lx) -> ", m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2))); + sb->eintrsigs = m68k_dreg (regs, 0); + sb->eventsigs = m68k_dreg (regs, 1); return 0; } @@ -749,9 +749,9 @@ static uae_u32 REGPARAM2 bsdsocklib_ObtainSocket (TrapContext *context) SOCKET_TYPE s; int i; - id = m68k_dreg (&context->regs, 0); + id = m68k_dreg (regs, 0); - BSDTRACE ((L"ObtainSocket(%d,%d,%d,%d) -> ", id, m68k_dreg (&context->regs, 1), m68k_dreg (&context->regs, 2), m68k_dreg (&context->regs, 3))); + BSDTRACE ((L"ObtainSocket(%d,%d,%d,%d) -> ", id, m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3))); i = sockpoolindex (id); @@ -784,8 +784,8 @@ static uae_u32 REGPARAM2 bsdsocklib_ReleaseSocket (TrapContext *context) int i; uae_u32 flags; - sd = m68k_dreg (&context->regs, 0); - id = m68k_dreg (&context->regs, 1); + sd = m68k_dreg (regs, 0); + id = m68k_dreg (regs, 1); sd++; BSDTRACE ((L"ReleaseSocket(%d,%d) -> ", sd, id)); @@ -847,8 +847,8 @@ static uae_u32 REGPARAM2 bsdsocklib_ReleaseCopyOfSocket (TrapContext *context) int i; uae_u32 flags; - sd = m68k_dreg (&context->regs, 0); - id = m68k_dreg (&context->regs, 1); + sd = m68k_dreg (regs, 0); + id = m68k_dreg (regs, 1); sd++; BSDTRACE ((L"ReleaseSocket(%d,%d) -> ", sd, id)); @@ -911,7 +911,7 @@ static uae_u32 REGPARAM2 bsdsocklib_Errno (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_SetErrnoPtr (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - uae_u32 errnoptr = m68k_areg (&context->regs, 0), size = m68k_dreg (&context->regs, 0); + uae_u32 errnoptr = m68k_areg (regs, 0), size = m68k_dreg (regs, 0); BSDTRACE ((L"SetErrnoPtr(0x%lx,%d) -> ", errnoptr, size)); @@ -931,13 +931,13 @@ static uae_u32 REGPARAM2 bsdsocklib_SetErrnoPtr (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_Inet_NtoA (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_Inet_NtoA (context, sb, m68k_dreg (&context->regs, 0)); + return host_Inet_NtoA (context, sb, m68k_dreg (regs, 0)); } /* inet_addr(cp)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_inet_addr (TrapContext *context) { - return host_inet_addr (m68k_areg (&context->regs, 0)); + return host_inet_addr (m68k_areg (regs, 0)); } /* Inet_LnaOf(in)(d0) */ @@ -964,7 +964,7 @@ static uae_u32 REGPARAM2 bsdsocklib_Inet_MakeAddr (TrapContext *context) /* inet_network(cp)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_inet_network (TrapContext *context) { - return host_inet_addr (m68k_areg (&context->regs, 0)); + return host_inet_addr (m68k_areg (regs, 0)); } /* *------ gethostbyname etc */ @@ -972,7 +972,7 @@ static uae_u32 REGPARAM2 bsdsocklib_inet_network (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_gethostbyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_gethostbynameaddr (context, sb, m68k_areg (&context->regs, 0), 0, -1); + host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), 0, -1); return sb->sb_herrno ? 0 : sb->hostent; } @@ -980,7 +980,7 @@ static uae_u32 REGPARAM2 bsdsocklib_gethostbyname (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_gethostbyaddr (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_gethostbynameaddr (context, sb, m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1)); + host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), m68k_dreg (regs, 0), m68k_dreg (regs, 1)); return sb->sb_herrno ? 0 : sb->hostent; } @@ -1002,7 +1002,7 @@ static uae_u32 REGPARAM2 bsdsocklib_getnetbyaddr (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_getservbyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_getservbynameport (context, sb, m68k_areg (&context->regs, 0), m68k_areg (&context->regs, 1), 0); + host_getservbynameport (context, sb, m68k_areg (regs, 0), m68k_areg (regs, 1), 0); return sb->sb_errno ? 0 : sb->servent; } @@ -1010,7 +1010,7 @@ static uae_u32 REGPARAM2 bsdsocklib_getservbyname (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_getservbyport (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_getservbynameport (context, sb, m68k_dreg (&context->regs, 0), m68k_areg (&context->regs, 0), 1); + host_getservbynameport (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), 1); return sb->sb_errno ? 0 : sb->servent; } @@ -1018,7 +1018,7 @@ static uae_u32 REGPARAM2 bsdsocklib_getservbyport (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_getprotobyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_getprotobyname (context, sb, m68k_areg (&context->regs, 0)); + host_getprotobyname (context, sb, m68k_areg (regs, 0)); return sb->sb_errno ? 0 : sb->protoent; } @@ -1026,7 +1026,7 @@ static uae_u32 REGPARAM2 bsdsocklib_getprotobyname (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_getprotobynumber (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - host_getprotobynumber (context, sb, m68k_dreg (&context->regs, 0)); + host_getprotobynumber (context, sb, m68k_dreg (regs, 0)); return sb->sb_errno ? 0 : sb->protoent; } @@ -1043,7 +1043,7 @@ static uae_u32 REGPARAM2 bsdsocklib_vsyslog (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_Dup2Socket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - return host_dup2socket (sb, m68k_dreg (&context->regs, 0), m68k_dreg (&context->regs, 1)); + return host_dup2socket (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } static uae_u32 REGPARAM2 bsdsocklib_sendmsg (TrapContext *context) @@ -1060,7 +1060,7 @@ static uae_u32 REGPARAM2 bsdsocklib_recvmsg (TrapContext *context) static uae_u32 REGPARAM2 bsdsocklib_gethostname (TrapContext *context) { - return host_gethostname (m68k_areg (&context->regs, 0), m68k_dreg (&context->regs, 0)); + return host_gethostname (m68k_areg (regs, 0), m68k_dreg (regs, 0)); } static uae_u32 REGPARAM2 bsdsocklib_gethostid (TrapContext *context) @@ -1178,7 +1178,7 @@ static void tagcopy (uae_u32 currtag, uae_u32 currval, uae_u32 tagptr, uae_u32 * static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList (TrapContext *context) { struct socketbase *sb = get_socketbase (context); - uae_u32 tagptr = m68k_areg (&context->regs, 0); + uae_u32 tagptr = m68k_areg (regs, 0); uae_u32 tagsprocessed = 1; uae_u32 currtag; uae_u32 currval; @@ -1300,7 +1300,7 @@ static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList (TrapContext *context) break; default: write_log (L"bsdsocket: WARNING: Unsupported tag type (%08x) in SocketBaseTagList(%x)\n", - currtag, m68k_areg (&context->regs, 0)); + currtag, m68k_areg (regs, 0)); break; } } else { @@ -1308,7 +1308,7 @@ static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList (TrapContext *context) /* Aminetradio uses 0x00004e55 as an ending tag */ if ((currtag & 0xffff8000) == 0) { write_log (L"bsdsocket: WARNING: Corrupted SocketBaseTagList(%x) tag detected (%08x)\n", - m68k_areg (&context->regs, 0), currtag); + m68k_areg (regs, 0), currtag); goto done; } } @@ -1330,7 +1330,7 @@ static uae_u32 REGPARAM2 bsdsocklib_GetSocketEvents (TrapContext *context) struct socketbase *sb = get_socketbase (context); int i; int flags; - uae_u32 ptr = m68k_areg (&context->regs, 0); + uae_u32 ptr = m68k_areg (regs, 0); BSDTRACE ((L"GetSocketEvents(0x%x) -> ", ptr)); @@ -1342,7 +1342,7 @@ static uae_u32 REGPARAM2 bsdsocklib_GetSocketEvents (TrapContext *context) flags = sb->ftable[sb->eventindex] & SET_ALL; if (flags) { sb->ftable[sb->eventindex] &= ~SET_ALL; - put_long (m68k_areg (&context->regs, 0), flags >> 8); + put_long (m68k_areg (regs, 0), flags >> 8); BSDTRACE ((L"%d (0x%x)\n", sb->eventindex + 1, flags >> 8)); return sb->eventindex; // xxx } @@ -1372,19 +1372,19 @@ static uae_u32 REGPARAM2 bsdsocklib_init (TrapContext *context) if (SockLibBase) bsdlib_reset (); - m68k_areg (&context->regs, 0) = functable; - m68k_areg (&context->regs, 1) = datatable; - m68k_areg (&context->regs, 2) = 0; - m68k_dreg (&context->regs, 0) = LIBRARY_SIZEOF; - m68k_dreg (&context->regs, 1) = 0; - tmp1 = CallLib (context, m68k_areg (&context->regs, 6), -0x54); /* MakeLibrary */ + m68k_areg (regs, 0) = functable; + m68k_areg (regs, 1) = datatable; + m68k_areg (regs, 2) = 0; + m68k_dreg (regs, 0) = LIBRARY_SIZEOF; + m68k_dreg (regs, 1) = 0; + tmp1 = CallLib (context, m68k_areg (regs, 6), -0x54); /* MakeLibrary */ if (!tmp1) { write_log (L"bsdoscket: FATAL: Cannot create bsdsocket.library!\n"); return 0; } - m68k_areg (&context->regs, 1) = tmp1; - CallLib (context, m68k_areg (&context->regs, 6), -0x18c); /* AddLibrary */ + m68k_areg (regs, 1) = tmp1; + CallLib (context, m68k_areg (regs, 6), -0x18c); /* AddLibrary */ SockLibBase = tmp1; /* Install error strings in Amiga memory */ @@ -1397,8 +1397,8 @@ static uae_u32 REGPARAM2 bsdsocklib_init (TrapContext *context) tmp1 += _tcslen (strErr) + 1; - m68k_dreg (&context->regs, 0) = tmp1; - m68k_dreg (&context->regs, 1) = 0; + m68k_dreg (regs, 0) = tmp1; + m68k_dreg (regs, 1) = 0; tmp1 = CallLib (context, get_long (4), -0xC6); /* AllocMem */ if (!tmp1) { @@ -1420,7 +1420,7 @@ static uae_u32 REGPARAM2 bsdsocklib_init (TrapContext *context) put_long (context->regs.vbr + 0x78, tmp1); #endif - m68k_dreg (&context->regs, 0) = 1; + m68k_dreg (regs, 0) = 1; return 0; } diff --git a/cfgfile.c b/cfgfile.c index 7c9c92c3..31c353b9 100644 --- a/cfgfile.c +++ b/cfgfile.c @@ -2893,7 +2893,7 @@ uae_u32 cfgfile_modify (uae_u32 index, TCHAR *parms, uae_u32 size, TCHAR *out, u break; } } - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); i++; } } @@ -3420,8 +3420,12 @@ static void buildin_default_prefs (struct uae_prefs *p) static void set_68020_compa (struct uae_prefs *p, int compa) { - if (compa == 0) + if (compa == 0) { p->blitter_cycle_exact = 1; + p->m68k_speed = 0; + if (p->cpu_model == 68020 && p->cachesize == 0) + p->cpu_cycle_exact = 1; + } if (compa > 0) { p->cpu_compatible = 0; p->address_space_24 = 0; diff --git a/cpummu.c b/cpummu.c index 10b71d97..853bd16f 100644 --- a/cpummu.c +++ b/cpummu.c @@ -920,7 +920,7 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) D(bug(L"pflusha(%u,%u)\n", glob, regs.dfc)); mmu_flush_atc_all(glob); } else { - addr = m68k_areg(®s, regno); + addr = m68k_areg(regs, regno); D(bug(L"pflush(%u,%u,%x)\n", glob, regs.dfc, addr)); mmu_flush_atc(addr, super, glob); } @@ -931,7 +931,7 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) regno = opcode & 7; write = (opcode & 32) == 0; - addr = m68k_areg(®s, regno); + addr = m68k_areg(regs, regno); //bug("ptest(%u,%u,%x)", write, regs.dfc, addr); D(bug(L"PTEST%c (A%d) %08x DFC=%d\n", write ? 'W' : 'R', regno, addr, regs.dfc)); mmu_flush_atc(addr, super, true); @@ -959,7 +959,7 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) RESTORE_EXCEPTION; D(bug(L"PTEST result: mmusr %08x\n", regs.mmusr)); } else - op_illg (opcode, ®s); + op_illg (opcode); } void REGPARAM2 mmu_flush_atc(uaecptr addr, bool super, bool global) diff --git a/custom.c b/custom.c index ea8c2ad4..c9c59873 100644 --- a/custom.c +++ b/custom.c @@ -170,6 +170,7 @@ uae_u16 adkcon; /* used by audio code */ static uae_u32 cop1lc, cop2lc, copcon; int maxhpos = MAXHPOS_PAL; +int maxhpos_short = MAXHPOS_PAL; int maxvpos = MAXVPOS_PAL; int maxvpos_max = MAXVPOS_PAL; int minfirstline = VBLANK_ENDLINE_PAL; @@ -2712,6 +2713,7 @@ void init_hz (void) vblank_hz = 10; if (vblank_hz > 300) vblank_hz = 300; + maxhpos_short = maxhpos; eventtab[ev_hsync].oldcycles = get_cycles (); eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME; events_schedule (); @@ -2799,14 +2801,14 @@ static uae_u32 REGPARAM2 timehack_helper (TrapContext *context) { #ifdef HAVE_GETTIMEOFDAY struct timeval tv; - if (m68k_dreg (&context->regs, 0) == 0) + if (m68k_dreg (regs, 0) == 0) return timehack_alive; timehack_alive = 10; gettimeofday (&tv, NULL); - put_long (m68k_areg (&context->regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60)); - put_long (m68k_areg (&context->regs, 0) + 4, tv.tv_usec); + put_long (m68k_areg (regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60)); + put_long (m68k_areg (regs, 0) + 4, tv.tv_usec); return 0; #else return 2; @@ -2851,13 +2853,24 @@ STATIC_INLINE uae_u16 ADKCONR (void) return adkcon; } +STATIC_INLINE int islightpentriggered (void) +{ + if (beamcon0 & 0x2000) // LPENDIS + return 0; + return lightpen_triggered > 0; +} +STATIC_INLINE int issyncstopped (void) +{ + return (bplcon0 & 2) && !currprefs.genlock; +} + STATIC_INLINE int GETVPOS (void) { - return lightpen_triggered > 0 ? vpos_lpen : (((bplcon0 & 2) && !currprefs.genlock) ? vpos_previous : vpos); + return islightpentriggered () ? vpos_lpen : (issyncstopped () ? vpos_previous : vpos); } STATIC_INLINE int GETHPOS (void) { - return lightpen_triggered > 0 ? hpos_lpen : (((bplcon0 & 2) && !currprefs.genlock) ? hpos_previous : current_hpos ()); + return islightpentriggered () ? hpos_lpen : (issyncstopped () ? hpos_previous : current_hpos ()); } STATIC_INLINE uae_u16 VPOSR (void) @@ -2880,7 +2893,9 @@ STATIC_INLINE uae_u16 VPOSR (void) if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) vp &= 1; - vp = vp | (lof ? 0x8000 : 0) | (lol ? 0x80 : 0) | csbit; + vp = vp | (lof ? 0x8000 : 0) | csbit; + if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) + vp |= lol ? 0x80 : 0; #if 0 write_log (L"VPOSR %04x at %08x\n", vp, M68K_GETPC); #endif @@ -2896,9 +2911,8 @@ static void VPOSW (uae_u16 v) if (lof != ((v & 0x8000) ? 1 : 0)) lof_changed = 1; lof = (v & 0x8000) ? 1 : 0; - if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { + if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) lol = (v & 0x0080) ? 1 : 0; - } if ((v & 1) && vpos > 0) { hack_vpos = vpos + 1; if (hack_vpos > maxvpos) @@ -2941,7 +2955,7 @@ static int test_copper_dangerous (unsigned int address) if ((address & 0x1fe) < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) { cop_state.state = COP_stop; copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); return 1; } return 0; @@ -2990,7 +3004,7 @@ static void immediate_copper (int num) } } cop_state.state = COP_stop; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); } STATIC_INLINE void COP1LCH (uae_u16 v) @@ -3023,7 +3037,7 @@ static void COPJMP (int num, int vblank) write_log (L"vblank without copper ending %08x (%08x %08x)\n", cop_state.ip, cop1lc, cop2lc); #endif - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); cop_state.ignore_next = 0; if (!oldstrobe) cop_state.state_prev = cop_state.state; @@ -3075,17 +3089,17 @@ static void DMACON (int hpos, uae_u16 v) compute_spcflag_copper (hpos); } else if (!newcop) { copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); } } if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done) - set_special (®s, SPCFLAG_BLTNASTY); + set_special (SPCFLAG_BLTNASTY); if (dmaen (DMA_BLITTER) && bltstate == BLT_init) bltstate = BLT_work; if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) - unset_special (®s, SPCFLAG_BLTNASTY); + unset_special (SPCFLAG_BLTNASTY); if (changed & (DMA_MASTER | 0x0f)) audio_hsync (hpos); @@ -3294,6 +3308,11 @@ static void BPLCON0 (int hpos, uae_u16 v) if (bplcon0 == v) return; + if (!issyncstopped ()) { + vpos_previous = vpos; + hpos_previous = hpos; + } + bplcon0 = v; bpldmainitdelay (hpos); @@ -3303,10 +3322,6 @@ static void BPLCON0 (int hpos, uae_u16 v) } #if 0 - if ((bplcon0 & 2) && !(v & 2)) { - vpos_previous = vpos; - hpos_previous = hpos; - } ddf_change = vpos; decide_line (hpos); @@ -3966,7 +3981,7 @@ static void update_copper (int until_hpos) dump_copper (L"error2", until_hpos); copper_enabled_thisline = 0; cop_state.state = COP_stop; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); return; } @@ -4173,12 +4188,12 @@ static void update_copper (int until_hpos) if (cop_state.saved_i1 == 0xFFFF && cop_state.saved_i2 == 0xFFFE) { cop_state.state = COP_stop; copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); goto out; } if (vp < cop_state.vcmp) { copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); goto out; } @@ -4197,7 +4212,7 @@ static void update_copper (int until_hpos) /* We need to wait for the blitter. */ cop_state.state = COP_bltwait; copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); goto out; } @@ -4250,7 +4265,7 @@ static void compute_spcflag_copper (int hpos) int wasenabled = copper_enabled_thisline; copper_enabled_thisline = 0; - unset_special (®s, SPCFLAG_COPPER); + unset_special (SPCFLAG_COPPER); if (!dmaen (DMA_COPPER) || cop_state.state == COP_stop || cop_state.state == COP_bltwait || nocustom ()) return; @@ -4269,7 +4284,7 @@ static void compute_spcflag_copper (int hpos) cop_state.hpos = hpos; } copper_enabled_thisline = 1; - set_special (®s, SPCFLAG_COPPER); + set_special (SPCFLAG_COPPER); } /* @@ -4296,7 +4311,7 @@ void blitter_done_notify (int hpos) if (dmaen (DMA_COPPER) && vp == vpos) { copper_enabled_thisline = 1; - set_special (®s, SPCFLAG_COPPER); + set_special (SPCFLAG_COPPER); } } @@ -5030,7 +5045,11 @@ static void hsync_handler (void) } #endif - eventtab[ev_hsync].evtime += get_cycles () - eventtab[ev_hsync].oldcycles; + if (!(beamcon0 & 0x0800) && !(beamcon0 & 0x0020) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { + lol ^= 1; // NTSC and !LOLDIS -> LOL toggles every line + } + maxhpos = maxhpos_short + lol; + eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME; eventtab[ev_hsync].oldcycles = get_cycles (); CIA_hsync_handler (!(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock)); if (currprefs.cs_ciaatod > 0) { @@ -5064,10 +5083,6 @@ static void hsync_handler (void) hsync_scandoubler (); } - if (!(beamcon0 & 0x0800) && !(beamcon0 & 0x0020) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { - lol ^= 1; // NTSC and !LOLDIS = LOL toggles every line - } - /* In theory only an equality test is needed here - but if a program goes haywire with the VPOSW register, it can cause us to miss this, with vpos going into the thousands (and all the nasty consequences @@ -5375,7 +5390,7 @@ void customreset (int hardreset) target_reset (); reset_all_systems (); - write_log (L"Reset at %08X\n", m68k_getpc (®s)); + write_log (L"Reset at %08X\n", M68K_GETPC); memory_map_dump(); hsync_counter = 0; @@ -5442,7 +5457,7 @@ void customreset (int hardreset) #ifdef JIT compemu_reset (); #endif - unset_special (®s, ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE)); + unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE)); vpos = 0; @@ -6623,7 +6638,9 @@ uae_u32 wait_cpu_cycle_read (uaecptr addr, int mode) checknasty (hpos, vpos); } #endif - if (mode > 0) + if (mode < 0) + v = get_long (addr); + else if (mode > 0) v = get_word (addr); else if (mode == 0) v = get_byte (addr); @@ -6660,7 +6677,9 @@ void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v) checknasty (hpos, vpos); } #endif - if (mode > 0) + if (mode < 0) + put_long (addr, v); + else if (mode > 0) put_word (addr, v); else if (mode == 0) put_byte (addr, v); diff --git a/debug.c b/debug.c index 6d1834ae..3bbfc9e0 100644 --- a/debug.c +++ b/debug.c @@ -71,7 +71,7 @@ void activate_debugger (void) if (debugger_active) return; debugger_active = 1; - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); debugging = 1; mmu_triggered = 0; } @@ -403,7 +403,7 @@ static void converter (TCHAR **c) int notinrom (void) { - uaecptr pc = munge24(m68k_getpc (®s)); + uaecptr pc = munge24 (m68k_getpc ()); if (pc < 0x00e00000 || pc > 0x00ffffff) return 1; return 0; @@ -1361,7 +1361,7 @@ static void illg_debug_check (uaecptr addr, int rwi, int size, uae_u32 val) static void illg_debug_do (uaecptr addr, int rwi, int size, uae_u32 val) { uae_u8 mask; - uae_u32 pc = m68k_getpc (®s); + uae_u32 pc = m68k_getpc (); int i; for (i = size - 1; i >= 0; i--) { @@ -1455,7 +1455,7 @@ static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp) if (rwi == 2) { for (i = 0; i < size; i++) { if (smc_table[addr + i].cnt < SMC_MAXHITS) { - smc_table[addr + i].addr = m68k_getpc (®s); + smc_table[addr + i].addr = m68k_getpc (); } } return; @@ -1579,7 +1579,7 @@ static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp) mwhit.val = val; memwatch_triggered = i + 1; debugging = 1; - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); return 1; } return 1; @@ -2762,17 +2762,17 @@ static void m68k_modify (TCHAR **inptr) regs.ir = v; else if (!_tcscmp (parm, L"SR")) { regs.sr = v; - MakeFromSR (®s); + MakeFromSR (); } else if (!_tcscmp (parm, L"CCR")) { regs.sr = (regs.sr & ~31) | (v & 31); - MakeFromSR (®s); + MakeFromSR (); } else if (!_tcscmp (parm, L"USP")) { regs.usp = v; } else if (!_tcscmp (parm, L"ISP")) { regs.isp = v; } else if (!_tcscmp (parm, L"PC")) { - m68k_setpc (®s, v); - fill_prefetch_slow (®s); + m68k_setpc (v); + fill_prefetch_slow (); } else { for (i = 0; m2cregs[i].regname; i++) { if (!_tcscmp (parm, m2cregs[i].regname)) @@ -2899,7 +2899,7 @@ static void debug_1 (void) skipaddr_doskip = readint (&inptr); if (skipaddr_doskip <= 0 || skipaddr_doskip > 10000) skipaddr_doskip = 1; - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); exception_debugging = 1; return; case 'z': @@ -2930,8 +2930,8 @@ static void debug_1 (void) case 'g': if (more_params (&inptr)) { - m68k_setpc (®s, readhex (&inptr)); - fill_prefetch_slow (®s); + m68k_setpc (readhex (&inptr)); + fill_prefetch_slow (); } deactivate_debugger(); return; @@ -2949,7 +2949,7 @@ static void debug_1 (void) case 'H': { int count, temp, badly, skip; - uae_u32 oldpc = m68k_getpc (®s); + uae_u32 oldpc = m68k_getpc (); struct regstruct save_regs = regs; badly = 0; @@ -2977,7 +2977,7 @@ static void debug_1 (void) } while (temp != lasthist) { regs = history[temp]; - m68k_setpc (®s, history[temp].pc); + m68k_setpc (history[temp].pc); if (badly) m68k_dumpstate (stdout, NULL); else @@ -2988,7 +2988,7 @@ static void debug_1 (void) temp = 0; } regs = save_regs; - m68k_setpc (®s, oldpc); + m68k_setpc (oldpc); } break; case 'M': @@ -3096,11 +3096,11 @@ static void debug_1 (void) static void addhistory (void) { - uae_u32 pc = m68k_getpc (®s); + uae_u32 pc = m68k_getpc (); // if (!notinrom()) // return; history[lasthist] = regs; - history[lasthist].pc = m68k_getpc (®s); + history[lasthist].pc = m68k_getpc (); if (++lasthist == MAX_HIST) lasthist = 0; if (lasthist == firsthist) { @@ -3143,7 +3143,7 @@ void debug (void) uae_u16 opcode; int bp = 0; - pc = munge24 (m68k_getpc (®s)); + pc = munge24 (m68k_getpc ()); opcode = (currprefs.cpu_compatible || currprefs.cpu_cycle_exact) ? regs.ir : get_word (pc); for (i = 0; i < BREAKPOINT_TOTAL; i++) { @@ -3205,14 +3205,14 @@ void debug (void) } } if (sr_bpmask || sr_bpvalue) { - MakeSR (®s); + MakeSR (); if ((regs.sr & sr_bpmask) == sr_bpvalue) { console_out (L"SR breakpoint\n"); bp = 1; } } if (!bp) { - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); return; } } @@ -3226,7 +3226,7 @@ void debug (void) if (skipaddr_doskip > 0) { skipaddr_doskip--; if (skipaddr_doskip > 0) { - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); return; } } @@ -3262,8 +3262,8 @@ void debug (void) if (sr_bpmask || sr_bpvalue) do_skip = 1; if (do_skip) { - set_special (®s, SPCFLAG_BRK); - m68k_resumestopped (®s); + set_special (SPCFLAG_BRK); + m68k_resumestopped (); debugging = 1; } resume_sound (); @@ -3325,51 +3325,51 @@ void mmu_do_hit(void) uae_u32 pc; mmu_triggered = 0; - pc = m68k_getpc (®s); + pc = m68k_getpc (); p = mmu_regs + 18 * 4; put_long (p, pc); regs = mmu_backup_regs; regs.intmask = 7; regs.t0 = regs.t1 = 0; if (!regs.s) { - regs.usp = m68k_areg (®s, 7); + regs.usp = m68k_areg (regs, 7); if (currprefs.cpu_model >= 68020) - m68k_areg (®s, 7) = regs.m ? regs.msp : regs.isp; + m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; else - m68k_areg (®s, 7) = regs.isp; + m68k_areg (regs, 7) = regs.isp; regs.s = 1; } - MakeSR (®s); - m68k_setpc (®s, mmu_callback); - fill_prefetch_slow (®s); + MakeSR (); + m68k_setpc (mmu_callback); + fill_prefetch_slow (); if (currprefs.cpu_model > 68000) { for (i = 0 ; i < 9; i++) { - m68k_areg (®s, 7) -= 4; - put_long (m68k_areg (®s, 7), 0); + m68k_areg (regs, 7) -= 4; + put_long (m68k_areg (regs, 7), 0); } - m68k_areg (®s, 7) -= 4; - put_long (m68k_areg (®s, 7), mmu_fault_addr); - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), 0); /* WB1S */ - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), 0); /* WB2S */ - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), 0); /* WB3S */ - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), + m68k_areg (regs, 7) -= 4; + put_long (m68k_areg (regs, 7), mmu_fault_addr); + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), 0); /* WB1S */ + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), 0); /* WB2S */ + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), 0); /* WB3S */ + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), (mmu_fault_rw ? 0 : 0x100) | (mmu_fault_size << 5)); /* SSW */ - m68k_areg (®s, 7) -= 4; - put_long (m68k_areg (®s, 7), mmu_fault_bank_addr); - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), 0x7002); + m68k_areg (regs, 7) -= 4; + put_long (m68k_areg (regs, 7), mmu_fault_bank_addr); + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), 0x7002); } - m68k_areg (®s, 7) -= 4; - put_long (m68k_areg (®s, 7), get_long (p - 4)); - m68k_areg (®s, 7) -= 2; - put_word (m68k_areg (®s, 7), mmur.sr); + m68k_areg (regs, 7) -= 4; + put_long (m68k_areg (regs, 7), get_long (p - 4)); + m68k_areg (regs, 7) -= 2; + put_word (m68k_areg (regs, 7), mmur.sr); - set_special(®s, SPCFLAG_END_COMPILE); + set_special(SPCFLAG_END_COMPILE); } static void mmu_do_hit_pre (struct mmudata *md, uaecptr addr, int size, int rwi, uae_u32 v) @@ -3378,7 +3378,7 @@ static void mmu_do_hit_pre (struct mmudata *md, uaecptr addr, int size, int rwi, int i; mmur = regs; - pc = m68k_getpc (®s); + pc = m68k_getpc (); if (mmu_logging) console_out_f (L"MMU: hit %08X SZ=%d RW=%d V=%08X PC=%08X\n", addr, size, rwi, v, pc); @@ -3631,6 +3631,6 @@ int mmu_init(int mode, uaecptr parm, uaecptr parm2) initialize_memwatch (1); console_out_f (L"MMU: enabled, %d banks, CB=%08X S=%08X BNK=%08X SF=%08X, %d*%d\n", size - 1, mmu_callback, parm, banks, mmu_regs, mmu_slots, 1 << MMU_PAGE_SHIFT); - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); return 1; } diff --git a/drawing.c b/drawing.c index 2261ded7..f7008c73 100644 --- a/drawing.c +++ b/drawing.c @@ -2833,7 +2833,7 @@ void vsync_handle_redraw (int long_frame, int lof_changed) if (quit_program < 0) { quit_program = -quit_program; set_inhibit_frame (IHF_QUIT_PROGRAM); - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); return; } diff --git a/enforcer.c b/enforcer.c index 6d0d5a4e..ff6abf1f 100644 --- a/enforcer.c +++ b/enforcer.c @@ -224,18 +224,18 @@ static void enforcer_display_hit (const TCHAR *addressmode, uae_u32 pc, uaecptr /* Data registers */ _stprintf (enforcer_buf_ptr, L"Data: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", - m68k_dreg (®s, 0), m68k_dreg (®s, 1), m68k_dreg (®s, 2), m68k_dreg (®s, 3), - m68k_dreg (®s, 4), m68k_dreg (®s, 5), m68k_dreg (®s, 6), m68k_dreg (®s, 7)); + m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3), + m68k_dreg (regs, 4), m68k_dreg (regs, 5), m68k_dreg (regs, 6), m68k_dreg (regs, 7)); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); /* Address registers */ _stprintf (enforcer_buf_ptr, L"Addr: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", - m68k_areg (®s, 0), m68k_areg (®s, 1), m68k_areg (®s, 2), m68k_areg (®s, 3), - m68k_areg (®s, 4), m68k_areg (®s, 5), m68k_areg (®s, 6), m68k_areg (®s, 7)); + m68k_areg (regs, 0), m68k_areg (regs, 1), m68k_areg (regs, 2), m68k_areg (regs, 3), + m68k_areg (regs, 4), m68k_areg (regs, 5), m68k_areg (regs, 6), m68k_areg (regs, 7)); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); /* Stack */ - a7 = m68k_areg (®s, 7); + a7 = m68k_areg (regs, 7); for (i = 0; i < 8 * STACKLINES; i++) { a7 += 4; if (!(i % 8)) { @@ -250,7 +250,7 @@ static void enforcer_display_hit (const TCHAR *addressmode, uae_u32 pc, uaecptr } /* Segtracker output */ - a7 = m68k_areg (®s, 7); + a7 = m68k_areg (regs, 7); if (get_long (a7 - 4) != pc) { if (enforcer_decode_hunk_and_offset (buf, pc)) { _tcscpy (enforcer_buf_ptr, buf); @@ -382,7 +382,7 @@ uae_u32 REGPARAM2 chipmem_lget2 (uaecptr addr) { enforcer_display_hit (L"LONG READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } return do_get_mem_long (m); } @@ -399,7 +399,7 @@ uae_u32 REGPARAM2 chipmem_wget2(uaecptr addr) { enforcer_display_hit (L"WORD READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } return do_get_mem_word (m); } @@ -413,7 +413,7 @@ uae_u32 REGPARAM2 chipmem_bget2 (uaecptr addr) { enforcer_display_hit (L"BYTE READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } return chipmemory[addr]; @@ -432,7 +432,7 @@ void REGPARAM2 chipmem_lput2 (uaecptr addr, uae_u32 l) enforcer_display_hit (L"LONG WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) if (addr != 0x100) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } do_put_mem_long (m, l); } @@ -449,7 +449,7 @@ void REGPARAM2 chipmem_wput2 (uaecptr addr, uae_u32 w) { enforcer_display_hit (L"WORD WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } do_put_mem_word (m, w); } @@ -463,7 +463,7 @@ void REGPARAM2 chipmem_bput2 (uaecptr addr, uae_u32 b) { enforcer_display_hit (L"BYTE WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); } chipmemory[addr] = b; } @@ -487,7 +487,7 @@ uae_u32 REGPARAM2 dummy_lget2 (uaecptr addr) special_mem_r; enforcer_display_hit (L"LONG READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET), addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return 0; } return 0xbadedeef; @@ -512,7 +512,7 @@ uae_u32 REGPARAM2 dummy_wget2 (uaecptr addr) #endif enforcer_display_hit (L"WORD READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return 0; } return 0xbadf; @@ -523,7 +523,7 @@ uae_u32 REGPARAM2 dummy_bget2 (uaecptr addr) special_mem_r; enforcer_display_hit (L"BYTE READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return 0; } return 0xbadedeef; @@ -534,7 +534,7 @@ void REGPARAM2 dummy_lput2 (uaecptr addr, uae_u32 l) special_mem_w; enforcer_display_hit (L"LONG WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return; } } @@ -544,7 +544,7 @@ void REGPARAM2 dummy_wput2 (uaecptr addr, uae_u32 w) special_mem_w; enforcer_display_hit (L"WORD WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return; } } @@ -554,7 +554,7 @@ void REGPARAM2 dummy_bput2 (uaecptr addr, uae_u32 b) special_mem_w; enforcer_display_hit (L"BYTE WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { - set_special (®s, SPCFLAG_TRAP); + set_special (SPCFLAG_TRAP); return; } } diff --git a/ersatz.c b/ersatz.c index d74d43a6..4adf0c0a 100644 --- a/ersatz.c +++ b/ersatz.c @@ -96,7 +96,7 @@ static void ersatz_failed (void) static void ersatz_doio (void) { - uaecptr request = m68k_areg (®s, 1); + uaecptr request = m68k_areg (regs, 1); switch (get_word (request + 0x1C)) { case 9: /* TD_MOTOR is harmless */ return; @@ -143,11 +143,11 @@ static void ersatz_init (void) put_long (a, 0xF8001A); } regs.isp = regs.msp = regs.usp = 0x800; - m68k_areg (®s, 7) = 0x80000; + m68k_areg (regs, 7) = 0x80000; regs.intmask = 0; /* Build a dummy execbase */ - put_long (4, m68k_areg (®s, 6) = 0x676); + put_long (4, m68k_areg (regs, 6) = 0x676); put_byte (0x676 + 0x129, 0); for (f = 1; f < 105; f++) { put_word (0x676 - 6*f, 0x4EF9); @@ -166,7 +166,7 @@ static void ersatz_init (void) put_long (request + 0x28, 0x4000); put_long (request + 0x2C, 0); put_long (request + 0x24, 0x200 * 4); - m68k_areg (®s, 1) = request; + m68k_areg (regs, 1) = request; ersatz_doio (); /* kickstart disk loader */ if (get_long (0x4000) == 0x4b49434b) { @@ -180,7 +180,7 @@ static void ersatz_init (void) put_long (request + 0x28, 0xF80000); put_long (request + 0x2C, 0x200); put_long (request + 0x24, 0x200 * 512); - m68k_areg (®s, 1) = request; + m68k_areg (regs, 1) = request; ersatz_doio (); /* read rom image once again to mirror address space. @@ -189,20 +189,20 @@ static void ersatz_init (void) put_long (request + 0x28, 0xFC0000); put_long (request + 0x2C, 0x200); put_long (request + 0x24, 0x200 * 512); - m68k_areg (®s, 1) = request; + m68k_areg (regs, 1) = request; ersatz_doio (); disk_eject (0); - m68k_setpc (®s, 0xFC0002); - fill_prefetch_slow (®s); + m68k_setpc (0xFC0002); + fill_prefetch_slow (); uae_reset (0); ersatzkickfile = 0; return; } - m68k_setpc (®s, 0x400C); - fill_prefetch_slow (®s); + m68k_setpc (0x400C); + fill_prefetch_slow (); /* Init the hardware */ put_long (0x3000, 0xFFFFFFFEul); @@ -243,15 +243,15 @@ void ersatz_perform (uae_u16 what) break; case EOP_AVAILMEM: - m68k_dreg (®s, 0) = m68k_dreg (®s, 1) & 4 ? 0 : 0x70000; + m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x70000; break; case EOP_ALLOCMEM: - m68k_dreg (®s, 0) = m68k_dreg (®s, 1) & 4 ? 0 : 0x0F000; + m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x0F000; break; case EOP_ALLOCABS: - m68k_dreg (®s, 0) = m68k_areg (®s, 1); + m68k_dreg (regs, 0) = m68k_areg (regs, 1); break; case EOP_NIMP: @@ -260,7 +260,7 @@ void ersatz_perform (uae_u16 what) /* fall through */ case EOP_LOOP: - m68k_setpc (®s, 0xF80010); + m68k_setpc (0xF80010); break; case EOP_OPENLIB: diff --git a/filesys.c b/filesys.c index 58666515..771a67ca 100644 --- a/filesys.c +++ b/filesys.c @@ -2002,7 +2002,7 @@ static Unit *startup_create_unit (UnitInfo *uinfo, int num) uinfo->self = unit; unit->volume = 0; - unit->port = m68k_areg (®s, 5); + unit->port = m68k_areg (regs, 5); unit->unit = num; startup_update_unit (unit, uinfo); @@ -2076,9 +2076,9 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) /* Just got the startup packet. It's in A4. DosBase is in A2, * our allocated volume structure is in A3, A5 is a pointer to * our port. */ - uaecptr rootnode = get_long (m68k_areg (&context->regs, 2) + 34); + uaecptr rootnode = get_long (m68k_areg (regs, 2) + 34); uaecptr dos_info = get_long (rootnode + 24) << 2; - uaecptr pkt = m68k_dreg (&context->regs, 3); + uaecptr pkt = m68k_dreg (regs, 3); uaecptr arg2 = get_long (pkt + dp_Arg2); uaecptr devnode; int i; @@ -2133,17 +2133,17 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) /* fill in our process in the device node */ devnode = get_long (pkt + dp_Arg3) << 2; put_long (devnode + 8, unit->port); - unit->dosbase = m68k_areg (&context->regs, 2); + unit->dosbase = m68k_areg (regs, 2); /* make new volume */ - unit->volume = m68k_areg (&context->regs, 3) + 32; + unit->volume = m68k_areg (regs, 3) + 32; put_long (unit->volume + 180 - 32, devnode); #ifdef UAE_FILESYS_THREADS - unit->locklist = m68k_areg (&context->regs, 3) + 8; + unit->locklist = m68k_areg (regs, 3) + 8; #else - unit->locklist = m68k_areg (&context->regs, 3); + unit->locklist = m68k_areg (regs, 3); #endif - unit->dummy_message = m68k_areg (&context->regs, 3) + 12; + unit->dummy_message = m68k_areg (regs, 3) + 12; put_long (unit->dummy_message + 10, 0); @@ -3157,7 +3157,7 @@ static uae_u32 REGPARAM2 exall_helper (TrapContext *context) { int i; Unit *u; - uaecptr packet = m68k_areg (&context->regs, 4); + uaecptr packet = m68k_areg (regs, 4); uaecptr control = get_long (packet + dp_Arg5); uae_u32 id = get_long (control + 4); @@ -4616,7 +4616,7 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) { UnitInfo *uip = mountinfo.ui; uaecptr port; - int n = m68k_dreg (&context->regs, 0); + int n = m68k_dreg (regs, 0); static int unit_no; switch (n) { @@ -4645,8 +4645,8 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) */ #ifdef UAE_FILESYS_THREADS { - Unit *unit = find_unit (m68k_areg (&context->regs, 5)); - uaecptr msg = m68k_areg (&context->regs, 4); + Unit *unit = find_unit (m68k_areg (regs, 5)); + uaecptr msg = m68k_areg (regs, 4); unit->cmds_complete = unit->cmds_acked; while (comm_pipe_has_data (unit->ui.back_pipe)) { uaecptr locks, lockend; @@ -4661,9 +4661,9 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) lockend = get_long (lockend); cnt++; } - TRACE((L"%d %x %x %x\n", cnt, locks, lockend, m68k_areg (&context->regs, 3))); - put_long (lockend, get_long (m68k_areg (&context->regs, 3))); - put_long (m68k_areg (&context->regs, 3), locks); + TRACE((L"%d %x %x %x\n", cnt, locks, lockend, m68k_areg (regs, 3))); + put_long (lockend, get_long (m68k_areg (regs, 3))); + put_long (m68k_areg (regs, 3), locks); } } #else @@ -4686,26 +4686,26 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) int cmd = read_comm_pipe_int_blocking (&native2amiga_pending); switch (cmd) { case 0: /* Signal() */ - m68k_areg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); - m68k_dreg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_dreg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 2; case 1: /* PutMsg() */ - m68k_areg (&context->regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); - m68k_areg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 1; case 2: /* ReplyMsg() */ - m68k_areg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 3; case 3: /* Cause() */ - m68k_areg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 4; case 4: /* NotifyHack() */ - m68k_areg (&context->regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); - m68k_areg (&context->regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); + m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 5; default: @@ -4732,8 +4732,8 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) uip[unit_no].self->cmds_acked = uip[unit_no].self->cmds_sent; port = uip[unit_no].self->port; if (port) { - m68k_areg (&context->regs, 0) = port; - m68k_areg (&context->regs, 1) = find_unit (port)->dummy_message; + m68k_areg (regs, 0) = port; + m68k_areg (regs, 1) = find_unit (port)->dummy_message; unit_no++; return 1; } @@ -4889,9 +4889,9 @@ static void *filesys_thread (void *unit_v) /* Talk about spaghetti code... */ static uae_u32 REGPARAM2 filesys_handler (TrapContext *context) { - Unit *unit = find_unit (m68k_areg (&context->regs, 5)); - uaecptr packet_addr = m68k_dreg (&context->regs, 3); - uaecptr message_addr = m68k_areg (&context->regs, 4); + Unit *unit = find_unit (m68k_areg (regs, 5)); + uaecptr packet_addr = m68k_dreg (regs, 3); + uaecptr message_addr = m68k_areg (regs, 4); uae_u8 *pck; uae_u8 *msg; if (! valid_address (packet_addr, 36) || ! valid_address (message_addr, 14)) { @@ -4912,8 +4912,8 @@ static uae_u32 REGPARAM2 filesys_handler (TrapContext *context) if (!unit->ui.unit_pipe) goto error; /* Get two more locks and hand them over to the other thread. */ - morelocks = get_long (m68k_areg (&context->regs, 3)); - put_long (m68k_areg (&context->regs, 3), get_long (get_long (morelocks))); + morelocks = get_long (m68k_areg (regs, 3)); + put_long (m68k_areg (regs, 3), get_long (get_long (morelocks))); put_long (get_long (morelocks), 0); /* The packet wasn't processed yet. */ @@ -5055,13 +5055,13 @@ void filesys_prepare_reset (void) static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) { - uaecptr resaddr = m68k_areg (&context->regs, 2) + 0x10; + uaecptr resaddr = m68k_areg (regs, 2) + 0x10; uaecptr start = resaddr; uaecptr residents, tmp; TRACE ((L"filesystem: diagentry called\n")); - filesys_configdev = m68k_areg (&context->regs, 3); + filesys_configdev = m68k_areg (regs, 3); init_filesys_diagentry (); if (ROM_hardfile_resid != 0) { @@ -5123,7 +5123,7 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) put_word (resaddr + 14, 0x7001); /* moveq.l #1,d0 */ put_word (resaddr + 16, RTS); - m68k_areg (&context->regs, 0) = residents; + m68k_areg (regs, 0) = residents; return 1; } @@ -5137,13 +5137,13 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) static uae_u32 REGPARAM2 filesys_dev_bootfilesys (TrapContext *context) { - uaecptr devicenode = m68k_areg (&context->regs, 3); - uaecptr parmpacket = m68k_areg (&context->regs, 1); + uaecptr devicenode = m68k_areg (regs, 3); + uaecptr parmpacket = m68k_areg (regs, 1); uaecptr fsres = get_long (parmpacket + PP_FSRES); uaecptr fsnode; uae_u32 dostype, dostype2; UnitInfo *uip = mountinfo.ui; - int no = m68k_dreg (&context->regs, 6); + int no = m68k_dreg (regs, 6); int unit_no = no & 65535; int type = is_hardfile (unit_no); @@ -5171,10 +5171,10 @@ extern void picasso96_alloc (TrapContext*); static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) { int ret = -1; - switch (m68k_dreg (&context->regs, 1)) + switch (m68k_dreg (regs, 1)) { case 1: - mountertask = m68k_areg (&context->regs, 1); + mountertask = m68k_areg (regs, 1); picasso96_alloc (context); break; case 2: @@ -5191,13 +5191,13 @@ static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) * which unit a given startup message belongs to. */ static uae_u32 REGPARAM2 filesys_dev_remember (TrapContext *context) { - int no = m68k_dreg (&context->regs, 6); + int no = m68k_dreg (regs, 6); int unit_no = no & 65535; int sub_no = no >> 16; UnitInfo *uip = &mountinfo.ui[unit_no]; int i; - uaecptr devicenode = m68k_areg (&context->regs, 3); - uaecptr parmpacket = m68k_areg (&context->regs, 1); + uaecptr devicenode = m68k_areg (regs, 3); + uaecptr parmpacket = m68k_areg (regs, 1); /* copy filesystem loaded from RDB */ if (get_long (parmpacket + PP_FSPTR)) { @@ -5207,7 +5207,7 @@ static uae_u32 REGPARAM2 filesys_dev_remember (TrapContext *context) uip->rdb_filesysstore = 0; uip->rdb_filesyssize = 0; } - if (m68k_dreg (&context->regs, 3) >= 0) + if (m68k_dreg (regs, 3) >= 0) uip->startup = get_long (devicenode + 28); return devicenode; } @@ -5410,7 +5410,7 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke } if (!(flags & 1)) /* not bootable */ - m68k_dreg (®s, 7) = m68k_dreg (®s, 7) & ~1; + m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; buf[37 + buf[36]] = 0; /* zero terminate BSTR */ s = au (buf + 37); @@ -5634,11 +5634,11 @@ static void get_new_device (int type, uaecptr parmpacket, TCHAR **devname, uaecp static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) { UnitInfo *uip = mountinfo.ui; - int no = m68k_dreg (&context->regs, 6); + int no = m68k_dreg (regs, 6); int unit_no = no & 65535; int sub_no = no >> 16; int type = is_hardfile (unit_no); - uaecptr parmpacket = m68k_areg (&context->regs, 0); + uaecptr parmpacket = m68k_areg (regs, 0); if (type == FILESYS_HARDFILE_RDB || type == FILESYS_HARDDRIVE) { /* RDB hardfile */ @@ -5674,7 +5674,7 @@ static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) if (type == FILESYS_HARDFILE) type = dofakefilesys (&uip[unit_no], parmpacket); if (uip[unit_no].bootpri < -127) - m68k_dreg (®s, 7) = m68k_dreg (®s, 7) & ~1; /* do not boot */ + m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; /* do not boot */ if (uip[unit_no].bootpri < -128) return -1; /* do not mount */ return type; @@ -5682,26 +5682,26 @@ static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) { - int mode = m68k_dreg (&context->regs, 1); + int mode = m68k_dreg (regs, 1); if (mode < 10) { - uaecptr diminfo = m68k_areg (&context->regs, 2); - uaecptr dispinfo = m68k_areg (&context->regs, 3); - uaecptr vp = m68k_areg (&context->regs, 4); - input_mousehack_status (mode, diminfo, dispinfo, vp, m68k_dreg (&context->regs, 2)); + uaecptr diminfo = m68k_areg (regs, 2); + uaecptr dispinfo = m68k_areg (regs, 3); + uaecptr vp = m68k_areg (regs, 4); + input_mousehack_status (mode, diminfo, dispinfo, vp, m68k_dreg (regs, 2)); } else if (mode == 10) { amiga_clipboard_die (); } else if (mode == 11) { - amiga_clipboard_got_data (m68k_areg (&context->regs, 2), m68k_dreg (&context->regs, 2), m68k_dreg (&context->regs, 0) + 8); + amiga_clipboard_got_data (m68k_areg (regs, 2), m68k_dreg (regs, 2), m68k_dreg (regs, 0) + 8); } else if (mode == 12) { amiga_clipboard_want_data (); } else if (mode == 13) { return amiga_clipboard_proc_start (); } else if (mode == 14) { - amiga_clipboard_task_start (m68k_dreg (&context->regs, 0)); + amiga_clipboard_task_start (m68k_dreg (regs, 0)); } else if (mode == 15) { amiga_clipboard_init (); } else if (mode == 16) { - uaecptr a2 = m68k_areg (&context->regs, 2); + uaecptr a2 = m68k_areg (regs, 2); input_mousehack_mouseoffset (a2); } return 1; diff --git a/fpp.c b/fpp.c index 1d8e3b5a..85858437 100644 --- a/fpp.c +++ b/fpp.c @@ -28,7 +28,7 @@ STATIC_INLINE int isinrom (void) { - return (munge24 (m68k_getpc (®s)) & 0xFFF80000) == 0xF80000; + return (munge24 (m68k_getpc ()) & 0xFFF80000) == 0xF80000; } static uae_u32 xhex_pi[] ={0x2168c235, 0xc90fdaa2, 0x4000}; @@ -109,7 +109,7 @@ float fp_1e0 = 1, fp_1e1 = 10, fp_1e2 = 100, fp_1e4 = 10000; #define FFLAG_N 0x0100 #define FFLAG_NAN 0x0400 -#define MAKE_FPSR(regs, r) (regs)->fp_result=(r) +#define MAKE_FPSR(r) (regs).fp_result=(r) static uae_u16 x87_cw_tab[] = { 0x137f, 0x1f7f, 0x177f, 0x1b7f, /* Extended */ @@ -138,21 +138,21 @@ typedef uae_s64 tointtype; typedef uae_s32 tointtype; #endif -static void fpu_op_illg (uae_u32 opcode, struct regstruct *regs, int pcoffset) +static void fpu_op_illg (uae_u32 opcode, int pcoffset) { - if ((currprefs.cpu_model == 68060 && (currprefs.fpu_model == 0 || (regs->pcr & 2))) + if ((currprefs.cpu_model == 68060 && (currprefs.fpu_model == 0 || (regs.pcr & 2))) || (currprefs.cpu_model == 68040 && currprefs.fpu_model == 0)) { /* 68040 unimplemented/68060 FPU disabled exception. * Line F exception with different stack frame.. */ - uaecptr newpc = m68k_getpc (regs); + uaecptr newpc = m68k_getpc (); uaecptr oldpc = newpc - pcoffset; - regs->t0 = regs->t1 = 0; - MakeSR (regs); - if (!regs->s) { - regs->usp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->isp; + regs.t0 = regs.t1 = 0; + MakeSR (); + if (!regs.s) { + regs.usp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; } - regs->s = 1; + regs.s = 1; m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); m68k_areg (regs, 7) -= 4; @@ -162,20 +162,20 @@ static void fpu_op_illg (uae_u32 opcode, struct regstruct *regs, int pcoffset) m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), newpc); m68k_areg (regs, 7) -= 2; - put_word (m68k_areg (regs, 7), regs->sr); + put_word (m68k_areg (regs, 7), regs.sr); write_log (L"68040/060 FPU disabled exception PC=%x\n", newpc); - newpc = get_long (regs->vbr + 11 * 4); - m68k_setpc (regs, newpc); - set_special (regs, SPCFLAG_END_COMPILE); + newpc = get_long (regs.vbr + 11 * 4); + m68k_setpc (newpc); + set_special (SPCFLAG_END_COMPILE); return; } - op_illg (opcode, regs); + op_illg (opcode); } -STATIC_INLINE int fault_if_no_fpu (uae_u32 opcode, struct regstruct *regs, int pcoffset) +STATIC_INLINE int fault_if_no_fpu (uae_u32 opcode, int pcoffset) { - if ((regs->pcr & 2) || currprefs.fpu_model <= 0) { - fpu_op_illg (opcode, regs, pcoffset); + if ((regs.pcr & 2) || currprefs.fpu_model <= 0) { + fpu_op_illg (opcode, pcoffset); return 1; } return 0; @@ -394,16 +394,16 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src) case 0: switch (size) { case 6: - *src = (fptype) (uae_s8) m68k_dreg (®s, reg); + *src = (fptype) (uae_s8) m68k_dreg (regs, reg); break; case 4: - *src = (fptype) (uae_s16) m68k_dreg (®s, reg); + *src = (fptype) (uae_s16) m68k_dreg (regs, reg); break; case 0: - *src = (fptype) (uae_s32) m68k_dreg (®s, reg); + *src = (fptype) (uae_s32) m68k_dreg (regs, reg); break; case 1: - *src = to_single (m68k_dreg (®s, reg)); + *src = to_single (m68k_dreg (regs, reg)); break; default: return 0; @@ -412,42 +412,42 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src) case 1: return 0; case 2: - ad = m68k_areg (®s, reg); + ad = m68k_areg (regs, reg); break; case 3: - ad = m68k_areg (®s, reg); - m68k_areg (®s, reg) += reg == 7 ? sz2[size] : sz1[size]; + ad = m68k_areg (regs, reg); + m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size]; break; case 4: - m68k_areg (®s, reg) -= reg == 7 ? sz2[size] : sz1[size]; - ad = m68k_areg (®s, reg); + m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size]; + ad = m68k_areg (regs, reg); break; case 5: - ad = m68k_areg (®s, reg) + (uae_s32) (uae_s16) next_iword (®s); + ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword (); break; case 6: - ad = get_disp_ea_020 (®s, m68k_areg (®s, reg), next_iword (®s)); + ad = get_disp_ea_020 (m68k_areg (regs, reg), next_iword ()); break; case 7: switch (reg) { case 0: - ad = (uae_s32) (uae_s16) next_iword (®s); + ad = (uae_s32) (uae_s16) next_iword (); break; case 1: - ad = next_ilong (®s); + ad = next_ilong (); break; case 2: - ad = m68k_getpc (®s); - ad += (uae_s32) (uae_s16) next_iword (®s); + ad = m68k_getpc (); + ad += (uae_s32) (uae_s16) next_iword (); break; case 3: - tmppc = m68k_getpc (®s); - tmp = next_iword (®s); - ad = get_disp_ea_020 (®s, tmppc, tmp); + tmppc = m68k_getpc (); + tmp = next_iword (); + ad = get_disp_ea_020 (tmppc, tmp); break; case 4: - ad = m68k_getpc (®s); - m68k_setpc (®s, ad + sz2[size]); + ad = m68k_getpc (); + m68k_setpc (ad + sz2[size]); if (size == 6) ad++; break; @@ -502,7 +502,7 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src) return 1; } -STATIC_INLINE int put_fp_value (struct regstruct *regs, fptype value, uae_u32 opcode, uae_u16 extra) +STATIC_INLINE int put_fp_value (fptype value, uae_u32 opcode, uae_u16 extra) { uae_u16 tmp; uaecptr tmppc; @@ -516,7 +516,7 @@ STATIC_INLINE int put_fp_value (struct regstruct *regs, fptype value, uae_u32 op write_log (L"PUTFP: %f %04X %04X\n", value, opcode, extra); #endif if (!(extra & 0x4000)) { - regs->fp[(extra >> 10) & 7] = value; + regs.fp[(extra >> 10) & 7] = value; return 1; } reg = opcode & 7; @@ -558,31 +558,31 @@ STATIC_INLINE int put_fp_value (struct regstruct *regs, fptype value, uae_u32 op ad = m68k_areg (regs, reg); break; case 5: - ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword (regs); + ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword (); break; case 6: - ad = get_disp_ea_020 (regs, m68k_areg (regs, reg), next_iword (regs)); + ad = get_disp_ea_020 (m68k_areg (regs, reg), next_iword ()); break; case 7: switch (reg) { case 0: - ad = (uae_s32) (uae_s16) next_iword (regs); + ad = (uae_s32) (uae_s16) next_iword (); break; case 1: - ad = next_ilong (regs); + ad = next_ilong (); break; case 2: - ad = m68k_getpc (regs); - ad += (uae_s32) (uae_s16) next_iword (regs); + ad = m68k_getpc (); + ad += (uae_s32) (uae_s16) next_iword (); break; case 3: - tmppc = m68k_getpc (regs); - tmp = next_iword (regs); - ad = get_disp_ea_020 (regs, tmppc, tmp); + tmppc = m68k_getpc (); + tmp = next_iword (); + ad = get_disp_ea_020 (tmppc, tmp); break; case 4: - ad = m68k_getpc (regs); - m68k_setpc (regs, ad + sz2[size]); + ad = m68k_getpc (); + m68k_setpc (ad + sz2[size]); break; default: return 0; @@ -651,36 +651,36 @@ STATIC_INLINE int get_fp_ad (uae_u32 opcode, uae_u32 * ad) case 1: return 0; case 2: - *ad = m68k_areg (®s, reg); + *ad = m68k_areg (regs, reg); break; case 3: - *ad = m68k_areg (®s, reg); + *ad = m68k_areg (regs, reg); break; case 4: - *ad = m68k_areg (®s, reg); + *ad = m68k_areg (regs, reg); break; case 5: - *ad = m68k_areg (®s, reg) + (uae_s32) (uae_s16) next_iword (®s); + *ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword (); break; case 6: - *ad = get_disp_ea_020 (®s, m68k_areg (®s, reg), next_iword (®s)); + *ad = get_disp_ea_020 (m68k_areg (regs, reg), next_iword ()); break; case 7: switch (reg) { case 0: - *ad = (uae_s32) (uae_s16) next_iword (®s); + *ad = (uae_s32) (uae_s16) next_iword (); break; case 1: - *ad = next_ilong (®s); + *ad = next_ilong (); break; case 2: - *ad = m68k_getpc (®s); - *ad += (uae_s32) (uae_s16) next_iword (®s); + *ad = m68k_getpc (); + *ad += (uae_s32) (uae_s16) next_iword (); break; case 3: - tmppc = m68k_getpc (®s); - tmp = next_iword (®s); - *ad = get_disp_ea_020 (®s, tmppc, tmp); + tmppc = m68k_getpc (); + tmp = next_iword (); + *ad = get_disp_ea_020 (tmppc, tmp); break; default: return 0; @@ -771,100 +771,100 @@ STATIC_INLINE int fpp_cond (uae_u32 opcode, int contition) return -1; } -void fpuop_dbcc (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) +void fpuop_dbcc (uae_u32 opcode, uae_u16 extra) { - uaecptr pc = (uae_u32) m68k_getpc (regs); + uaecptr pc = (uae_u32) m68k_getpc (); uae_s32 disp; int cc; #if DEBUG_FPP if (!isinrom ()) - write_log (L"fdbcc_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"fdbcc_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, 4)) + if (fault_if_no_fpu (opcode, 4)) return; - disp = (uae_s32) (uae_s16) next_iword (regs); + disp = (uae_s32) (uae_s16) next_iword (); cc = fpp_cond (opcode, extra & 0x3f); if (cc == -1) { - fpu_op_illg (opcode, regs, 4); + fpu_op_illg (opcode, 4); } else if (!cc) { int reg = opcode & 0x7; m68k_dreg (regs, reg) = ((m68k_dreg (regs, reg) & 0xffff0000) | (((m68k_dreg (regs, reg) & 0xffff) - 1) & 0xffff)); if ((m68k_dreg (regs, reg) & 0xffff) != 0xffff) - m68k_setpc (regs, pc + disp); + m68k_setpc (pc + disp); } } -void fpuop_scc (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) +void fpuop_scc (uae_u32 opcode, uae_u16 extra) { uae_u32 ad; int cc; #if DEBUG_FPP if (!isinrom ()) - write_log (L"fscc_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"fscc_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, 4)) + if (fault_if_no_fpu (opcode, 4)) return; cc = fpp_cond (opcode, extra & 0x3f); if (cc == -1) { - fpu_op_illg (opcode, regs, 4); + fpu_op_illg (opcode, 4); } else if ((opcode & 0x38) == 0) { m68k_dreg (regs, opcode & 7) = (m68k_dreg (regs, opcode & 7) & ~0xff) | (cc ? 0xff : 0x00); } else { if (get_fp_ad (opcode, &ad) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); } else put_byte (ad, cc ? 0xff : 0x00); } } -void fpuop_trapcc (uae_u32 opcode, struct regstruct *regs, uaecptr oldpc) +void fpuop_trapcc (uae_u32 opcode, uaecptr oldpc) { int cc; #if DEBUG_FPP if (!isinrom ()) - write_log (L"ftrapcc_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"ftrapcc_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, m68k_getpc(regs) - oldpc)) + if (fault_if_no_fpu (opcode, m68k_getpc() - oldpc)) return; cc = fpp_cond (opcode, opcode & 0x3f); if (cc == -1) { - fpu_op_illg (opcode, regs, m68k_getpc(regs) - oldpc); + fpu_op_illg (opcode, m68k_getpc () - oldpc); } if (cc) - Exception (7, regs, oldpc - 2); + Exception (7, oldpc - 2); } -void fpuop_bcc (uae_u32 opcode, struct regstruct *regs, uaecptr pc, uae_u32 extra) +void fpuop_bcc (uae_u32 opcode, uaecptr pc, uae_u32 extra) { int cc; #if DEBUG_FPP if (!isinrom ()) - write_log (L"fbcc_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"fbcc_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, m68k_getpc(regs) - pc)) + if (fault_if_no_fpu (opcode, m68k_getpc () - pc)) return; cc = fpp_cond (opcode, opcode & 0x3f); if (cc == -1) { - fpu_op_illg (opcode, regs, m68k_getpc(regs) - pc); + fpu_op_illg (opcode, m68k_getpc () - pc); } else if (cc) { if ((opcode & 0x40) == 0) extra = (uae_s32) (uae_s16) extra; - m68k_setpc (regs, pc + extra); + m68k_setpc (pc + extra); } } -void fpuop_save (uae_u32 opcode, struct regstruct *regs) +void fpuop_save (uae_u32 opcode) { uae_u32 ad; int incr = (opcode & 0x38) == 0x20 ? -1 : 1; @@ -873,13 +873,13 @@ void fpuop_save (uae_u32 opcode, struct regstruct *regs) #if DEBUG_FPP if (!isinrom ()) - write_log (L"fsave_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"fsave_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, 2)) + if (fault_if_no_fpu (opcode, 2)) return; if (get_fp_ad (opcode, &ad) == 0) { - fpu_op_illg (opcode, regs, 2); + fpu_op_illg (opcode, 2); return; } @@ -937,7 +937,7 @@ void fpuop_save (uae_u32 opcode, struct regstruct *regs) m68k_areg (regs, opcode & 7) = ad; } -void fpuop_restore (uae_u32 opcode, struct regstruct *regs) +void fpuop_restore (uae_u32 opcode) { uae_u32 ad; uae_u32 d; @@ -945,13 +945,13 @@ void fpuop_restore (uae_u32 opcode, struct regstruct *regs) #if DEBUG_FPP if (!isinrom ()) - write_log (L"frestore_opp at %08lx\n", m68k_getpc (regs)); + write_log (L"frestore_opp at %08lx\n", m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, regs, 2)) + if (fault_if_no_fpu (opcode, 2)) return; if (get_fp_ad (opcode, &ad) == 0) { - fpu_op_illg (opcode, regs, 2); + fpu_op_illg (opcode, 2); return; } @@ -1029,24 +1029,24 @@ static void fround (int reg) regs.fp[reg] = (float)regs.fp[reg]; } -void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) +void fpuop_arithmetic (uae_u32 opcode, uae_u16 extra) { int reg; fptype src; #if DEBUG_FPP if (!isinrom ()) - write_log (L"FPP %04lx %04x at %08lx\n", opcode & 0xffff, extra, m68k_getpc (regs) - 4); + write_log (L"FPP %04lx %04x at %08lx\n", opcode & 0xffff, extra, m68k_getpc () - 4); #endif - if (fault_if_no_fpu (opcode, regs, 4)) + if (fault_if_no_fpu (opcode, 4)) return; switch ((extra >> 13) & 0x7) { case 3: - if (put_fp_value (regs, regs->fp[(extra >> 7) & 7], opcode, extra) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + if (put_fp_value (regs.fp[(extra >> 7) & 7], opcode, extra) == 0) { + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); } return; @@ -1055,49 +1055,49 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) if ((opcode & 0x38) == 0) { if (extra & 0x2000) { if (extra & 0x1000) - m68k_dreg (regs, opcode & 7) = regs->fpcr & 0xffff; + m68k_dreg (regs, opcode & 7) = regs.fpcr & 0xffff; if (extra & 0x0800) m68k_dreg (regs, opcode & 7) = get_fpsr (); if (extra & 0x0400) - m68k_dreg (regs, opcode & 7) = regs->fpiar; + m68k_dreg (regs, opcode & 7) = regs.fpiar; } else { if (extra & 0x1000) { - regs->fpcr = m68k_dreg (regs, opcode & 7); - native_set_fpucw (regs->fpcr); + regs.fpcr = m68k_dreg (regs, opcode & 7); + native_set_fpucw (regs.fpcr); } if (extra & 0x0800) set_fpsr (m68k_dreg (regs, opcode & 7)); if (extra & 0x0400) - regs->fpiar = m68k_dreg (regs, opcode & 7); + regs.fpiar = m68k_dreg (regs, opcode & 7); } } else if ((opcode & 0x38) == 0x08) { if (extra & 0x2000) { if (extra & 0x1000) - m68k_areg (regs, opcode & 7) = regs->fpcr & 0xffff; + m68k_areg (regs, opcode & 7) = regs.fpcr & 0xffff; if (extra & 0x0800) m68k_areg (regs, opcode & 7) = get_fpsr (); if (extra & 0x0400) - m68k_areg (regs, opcode & 7) = regs->fpiar; + m68k_areg (regs, opcode & 7) = regs.fpiar; } else { if (extra & 0x1000) { - regs->fpcr = m68k_areg (regs, opcode & 7); - native_set_fpucw (regs->fpcr); + regs.fpcr = m68k_areg (regs, opcode & 7); + native_set_fpucw (regs.fpcr); } if (extra & 0x0800) set_fpsr (m68k_areg (regs, opcode & 7)); if (extra & 0x0400) - regs->fpiar = m68k_areg (regs, opcode & 7); + regs.fpiar = m68k_areg (regs, opcode & 7); } } else if ((opcode & 0x3f) == 0x3c) { if ((extra & 0x2000) == 0) { if (extra & 0x1000) { - regs->fpcr = next_ilong (regs); - native_set_fpucw (regs->fpcr); + regs.fpcr = next_ilong (); + native_set_fpucw (regs.fpcr); } if (extra & 0x0800) - set_fpsr (next_ilong (regs)); + set_fpsr (next_ilong ()); if (extra & 0x0400) - regs->fpiar = next_ilong (regs); + regs.fpiar = next_ilong (); } } else if (extra & 0x2000) { /* FMOVEM FPP->memory */ @@ -1105,8 +1105,8 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) int incr = 0; if (get_fp_ad (opcode, &ad) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } if ((opcode & 0x38) == 0x20) { @@ -1119,7 +1119,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) } ad -= incr; if (extra & 0x1000) { - put_long (ad, regs->fpcr & 0xffff); + put_long (ad, regs.fpcr & 0xffff); ad += 4; } if (extra & 0x0800) { @@ -1127,7 +1127,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) ad += 4; } if (extra & 0x0400) { - put_long (ad, regs->fpiar); + put_long (ad, regs.fpiar); ad += 4; } ad -= incr; @@ -1141,8 +1141,8 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) int incr = 0; if (get_fp_ad (opcode, &ad) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } if((opcode & 0x38) == 0x20) { @@ -1155,8 +1155,8 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) ad = ad - incr; } if (extra & 0x1000) { - regs->fpcr = get_long (ad); - native_set_fpucw (regs->fpcr); + regs.fpcr = get_long (ad); + native_set_fpucw (regs.fpcr); ad += 4; } if (extra & 0x0800) { @@ -1164,7 +1164,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) ad += 4; } if (extra & 0x0400) { - regs->fpiar = get_long (ad); + regs.fpiar = get_long (ad); ad += 4; } if ((opcode & 0x38) == 0x18) @@ -1182,8 +1182,8 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) if (extra & 0x2000) { /* FMOVEM FPP->memory */ if (get_fp_ad (opcode, &ad) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } switch ((extra >> 11) & 3) { @@ -1208,7 +1208,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) for (reg = 7; reg >= 0; reg--) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { - from_exten (regs->fp[reg], &wrd1, &wrd2, &wrd3); + from_exten (regs.fp[reg], &wrd1, &wrd2, &wrd3); ad -= 4; put_long (ad, wrd3); ad -= 4; @@ -1222,7 +1222,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) for (reg = 0; reg <= 7; reg++) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { - from_exten (regs->fp[reg], &wrd1, &wrd2, &wrd3); + from_exten (regs.fp[reg], &wrd1, &wrd2, &wrd3); put_long (ad, wrd1); ad += 4; put_long (ad, wrd2); @@ -1240,8 +1240,8 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) } else { /* FMOVEM memory->FPP */ if (get_fp_ad (opcode, &ad) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } switch ((extra >> 11) & 3) { @@ -1272,7 +1272,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) wrd2 = get_long (ad); ad -= 4; wrd1 = get_long (ad); - regs->fp[reg] = to_exten(wrd1, wrd2, wrd3); + regs.fp[reg] = to_exten(wrd1, wrd2, wrd3); } list <<= 1; } @@ -1286,7 +1286,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) ad += 4; wrd3 = get_long (ad); ad += 4; - regs->fp[reg] = to_exten(wrd1, wrd2, wrd3); + regs.fp[reg] = to_exten(wrd1, wrd2, wrd3); } list <<= 1; } @@ -1305,82 +1305,82 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) if ((extra & 0xfc00) == 0x5c00) { switch (extra & 0x7f) { case 0x00: - regs->fp[reg] = *fp_pi; + regs.fp[reg] = *fp_pi; break; case 0x0b: - regs->fp[reg] = *fp_l10_2; + regs.fp[reg] = *fp_l10_2; break; case 0x0c: - regs->fp[reg] = *fp_exp_1; + regs.fp[reg] = *fp_exp_1; break; case 0x0d: - regs->fp[reg] = *fp_l2_e; + regs.fp[reg] = *fp_l2_e; break; case 0x0e: - regs->fp[reg] = *fp_l10_e; + regs.fp[reg] = *fp_l10_e; break; case 0x0f: - regs->fp[reg] = 0.0; + regs.fp[reg] = 0.0; break; case 0x30: - regs->fp[reg] = *fp_ln_2; + regs.fp[reg] = *fp_ln_2; break; case 0x31: - regs->fp[reg] = *fp_ln_10; + regs.fp[reg] = *fp_ln_10; break; case 0x32: - regs->fp[reg] = (fptype)fp_1e0; + regs.fp[reg] = (fptype)fp_1e0; break; case 0x33: - regs->fp[reg] = (fptype)fp_1e1; + regs.fp[reg] = (fptype)fp_1e1; break; case 0x34: - regs->fp[reg] = (fptype)fp_1e2; + regs.fp[reg] = (fptype)fp_1e2; break; case 0x35: - regs->fp[reg] = (fptype)fp_1e4; + regs.fp[reg] = (fptype)fp_1e4; break; case 0x36: - regs->fp[reg] = (fptype)fp_1e8; + regs.fp[reg] = (fptype)fp_1e8; break; case 0x37: - regs->fp[reg] = *fp_1e16; + regs.fp[reg] = *fp_1e16; break; case 0x38: - regs->fp[reg] = *fp_1e32; + regs.fp[reg] = *fp_1e32; break; case 0x39: - regs->fp[reg] = *fp_1e64; + regs.fp[reg] = *fp_1e64; break; case 0x3a: - regs->fp[reg] = *fp_1e128; + regs.fp[reg] = *fp_1e128; break; case 0x3b: - regs->fp[reg] = *fp_1e256; + regs.fp[reg] = *fp_1e256; break; case 0x3c: - regs->fp[reg] = *fp_1e512; + regs.fp[reg] = *fp_1e512; break; case 0x3d: - regs->fp[reg] = *fp_1e1024; + regs.fp[reg] = *fp_1e1024; break; case 0x3e: - regs->fp[reg] = *fp_1e2048; + regs.fp[reg] = *fp_1e2048; break; case 0x3f: - regs->fp[reg] = *fp_1e4096; + regs.fp[reg] = *fp_1e4096; break; default: - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } - MAKE_FPSR (regs, regs->fp[reg]); + MAKE_FPSR (regs.fp[reg]); return; } if (get_fp_value (opcode, extra, &src) == 0) { - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } @@ -1389,7 +1389,7 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) case 0x00: /* FMOVE */ case 0x40: /* Explicit rounding. This is just a quick fix. */ case 0x44: /* Same for all other cases that have three choices */ - regs->fp[reg] = src; /* Brian King was here. */ + regs.fp[reg] = src; /* Brian King was here. */ /* to register needs FPSR updated. See Motorola 68K Manual. */ if ((extra & 0x44) == 0x40) fround (reg); @@ -1405,185 +1405,185 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) frndint fstp LDPTR tmp_fp } - regs->fp[reg] = tmp_fp; + regs.fp[reg] = tmp_fp; } #else /* no X86_MSVC */ - switch ((regs->fpcr >> 4) & 3) { + switch ((regs.fpcr >> 4) & 3) { case 0: /* to nearest */ - regs->fp[reg] = floor (src + 0.5); + regs.fp[reg] = floor (src + 0.5); break; case 1: /* to zero */ if (src >= 0.0) - regs->fp[reg] = floor (src); + regs.fp[reg] = floor (src); else - regs->fp[reg] = ceil (src); + regs.fp[reg] = ceil (src); break; case 2: /* down */ - regs->fp[reg] = floor (src); + regs.fp[reg] = floor (src); break; case 3: /* up */ - regs->fp[reg] = ceil (src); + regs.fp[reg] = ceil (src); break; default: /* never reached */ - regs->fp[reg] = src; + regs.fp[reg] = src; } #endif /* X86_MSVC */ break; case 0x02: /* FSINH */ - regs->fp[reg] = sinh (src); + regs.fp[reg] = sinh (src); break; case 0x03: /* FINTRZ */ - regs->fp[reg] = fp_round_to_zero(src); + regs.fp[reg] = fp_round_to_zero(src); break; case 0x04: /* FSQRT */ case 0x41: case 0x45: - regs->fp[reg] = sqrt (src); + regs.fp[reg] = sqrt (src); if ((extra & 0x44) == 0x40) fround (reg); break; case 0x06: /* FLOGNP1 */ - regs->fp[reg] = log (src + 1.0); + regs.fp[reg] = log (src + 1.0); break; case 0x08: /* FETOXM1 */ - regs->fp[reg] = exp (src) - 1.0; + regs.fp[reg] = exp (src) - 1.0; break; case 0x09: /* FTANH */ - regs->fp[reg] = tanh (src); + regs.fp[reg] = tanh (src); break; case 0x0a: /* FATAN */ - regs->fp[reg] = atan (src); + regs.fp[reg] = atan (src); break; case 0x0c: /* FASIN */ - regs->fp[reg] = asin (src); + regs.fp[reg] = asin (src); break; case 0x0d: /* FATANH */ #if 1 /* The BeBox doesn't have atanh, and it isn't in the HPUX libm either */ - regs->fp[reg] = 0.5 * log ((1 + src) / (1 - src)); + regs.fp[reg] = 0.5 * log ((1 + src) / (1 - src)); #else - regs->fp[reg] = atanh (src); + regs.fp[reg] = atanh (src); #endif break; case 0x0e: /* FSIN */ - regs->fp[reg] = sin (src); + regs.fp[reg] = sin (src); break; case 0x0f: /* FTAN */ - regs->fp[reg] = tan (src); + regs.fp[reg] = tan (src); break; case 0x10: /* FETOX */ - regs->fp[reg] = exp (src); + regs.fp[reg] = exp (src); break; case 0x11: /* FTWOTOX */ - regs->fp[reg] = pow (2.0, src); + regs.fp[reg] = pow (2.0, src); break; case 0x12: /* FTENTOX */ - regs->fp[reg] = pow (10.0, src); + regs.fp[reg] = pow (10.0, src); break; case 0x14: /* FLOGN */ - regs->fp[reg] = log (src); + regs.fp[reg] = log (src); break; case 0x15: /* FLOG10 */ - regs->fp[reg] = log10 (src); + regs.fp[reg] = log10 (src); break; case 0x16: /* FLOG2 */ - regs->fp[reg] = *fp_l2_e * log (src); + regs.fp[reg] = *fp_l2_e * log (src); break; case 0x18: /* FABS */ case 0x58: case 0x5c: - regs->fp[reg] = src < 0 ? -src : src; + regs.fp[reg] = src < 0 ? -src : src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x19: /* FCOSH */ - regs->fp[reg] = cosh (src); + regs.fp[reg] = cosh (src); break; case 0x1a: /* FNEG */ case 0x5a: case 0x5e: - regs->fp[reg] = -src; + regs.fp[reg] = -src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x1c: /* FACOS */ - regs->fp[reg] = acos (src); + regs.fp[reg] = acos (src); break; case 0x1d: /* FCOS */ - regs->fp[reg] = cos (src); + regs.fp[reg] = cos (src); break; case 0x1e: /* FGETEXP */ { if (src == 0) { - regs->fp[reg] = 0; + regs.fp[reg] = 0; } else { int expon; frexp (src, &expon); - regs->fp[reg] = (double) (expon - 1); + regs.fp[reg] = (double) (expon - 1); } } break; case 0x1f: /* FGETMAN */ { if (src == 0) { - regs->fp[reg] = 0; + regs.fp[reg] = 0; } else { int expon; - regs->fp[reg] = frexp (src, &expon) * 2.0; + regs.fp[reg] = frexp (src, &expon) * 2.0; } } break; case 0x20: /* FDIV */ case 0x60: case 0x64: - regs->fp[reg] /= src; + regs.fp[reg] /= src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x21: /* FMOD */ { - fptype quot = fp_round_to_zero(regs->fp[reg] / src); - regs->fp[reg] = regs->fp[reg] - quot * src; + fptype quot = fp_round_to_zero(regs.fp[reg] / src); + regs.fp[reg] = regs.fp[reg] - quot * src; } break; case 0x22: /* FADD */ case 0x62: case 0x66: - regs->fp[reg] += src; + regs.fp[reg] += src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x23: /* FMUL */ case 0x63: case 0x67: - regs->fp[reg] *= src; + regs.fp[reg] *= src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x24: /* FSGLDIV */ - regs->fp[reg] /= src; + regs.fp[reg] /= src; break; case 0x25: /* FREM */ { - fptype quot = fp_round_to_nearest(regs->fp[reg] / src); - regs->fp[reg] = regs->fp[reg] - quot * src; + fptype quot = fp_round_to_nearest(regs.fp[reg] / src); + regs.fp[reg] = regs.fp[reg] - quot * src; } break; case 0x26: /* FSCALE */ if (src != 0) { #ifdef ldexp - regs->fp[reg] = ldexp (regs->fp[reg], (int) src); + regs.fp[reg] = ldexp (regs.fp[reg], (int) src); #else - regs->fp[reg] *= exp (*fp_ln_2 * (int) src); + regs.fp[reg] *= exp (*fp_ln_2 * (int) src); #endif } break; case 0x27: /* FSGLMUL */ - regs->fp[reg] *= src; + regs.fp[reg] *= src; break; case 0x28: /* FSUB */ case 0x68: case 0x6c: - regs->fp[reg] -= src; + regs.fp[reg] -= src; if ((extra & 0x44) == 0x40) fround (reg); break; @@ -1595,30 +1595,30 @@ void fpuop_arithmetic (uae_u32 opcode, struct regstruct *regs, uae_u16 extra) case 0x35: case 0x36: case 0x37: - regs->fp[extra & 7] = cos (src); - regs->fp[reg] = sin (src); + regs.fp[extra & 7] = cos (src); + regs.fp[reg] = sin (src); break; case 0x38: /* FCMP */ { - fptype tmp = regs->fp[reg] - src; - regs->fpsr = 0; - MAKE_FPSR (regs, tmp); + fptype tmp = regs.fp[reg] - src; + regs.fpsr = 0; + MAKE_FPSR (tmp); } return; case 0x3a: /* FTST */ - regs->fpsr = 0; - MAKE_FPSR (regs, src); + regs.fpsr = 0; + MAKE_FPSR (src); return; default: - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } - MAKE_FPSR (regs, regs->fp[reg]); + MAKE_FPSR (regs.fp[reg]); return; } - m68k_setpc (regs, m68k_getpc (regs) - 4); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); } void fpu_reset (void) diff --git a/gayle.c b/gayle.c index 1f5f2ca5..ded5b622 100644 --- a/gayle.c +++ b/gayle.c @@ -284,7 +284,7 @@ static void gayle_cs_change (uae_u8 mask, int onoff) if (gayle_irq & GAYLE_IRQ_RESET) uae_reset (0); if (gayle_irq & GAYLE_IRQ_BERR) - Exception (2, ®s, 0); + Exception (2, 0); } } } diff --git a/gencpu.c b/gencpu.c index fb4b7e65..8c1c75ed 100644 --- a/gencpu.c +++ b/gencpu.c @@ -32,6 +32,7 @@ static FILE *headerfile; static FILE *stblfile; static int using_prefetch, using_indirect, using_mmu; +static int using_ce020; static int using_exception_3; static int using_ce; static int cpu_level; @@ -118,7 +119,10 @@ static void cpulimit (void) static void returncycles (char *s, int cycles) { if (using_ce) return; - printf ("%sreturn %d * CYCLE_UNIT / 2;\n", s, cycles); + if (using_ce020) + printf ("%sreturn;\n", s); + else + printf ("%sreturn %d * CYCLE_UNIT / 2;\n", s, cycles); } static void addcycles (int cycles) { @@ -139,7 +143,7 @@ static void addcycles3 (char *s) count_ncycles++; } -static int isreg(amodes mode) +static int isreg (amodes mode) { if (mode == Dreg || mode == Areg) return 1; @@ -198,29 +202,32 @@ static void gen_nextilong (char *type, char *name, int norefill) int r = m68k_pc_offset; m68k_pc_offset += 4; - if (using_ce) { + if (using_ce020) { + printf ("\t%s %s = get_long_ce020_prefetch (%d);\n", type, name, r); + count_read += 2; + } else if (using_ce) { printf ("\t%s %s;\n", type, name); /* we must do this because execution order of (something | something2) is not defined */ if (norefill) { - printf ("\t%s = get_word_ce_prefetch (regs, %d) << 16;\n", name, r + 2); + printf ("\t%s = get_word_ce_prefetch (%d) << 16;\n", name, r + 2); count_read++; - printf ("\t%s |= regs->irc;\n", name); + printf ("\t%s |= regs.irc;\n", name); } else { - printf ("\t%s = get_word_ce_prefetch (regs, %d) << 16;\n", name, r + 2); + printf ("\t%s = get_word_ce_prefetch (%d) << 16;\n", name, r + 2); count_read++; - printf ("\t%s |= get_word_ce_prefetch (regs, %d);\n", name, r + 4); + printf ("\t%s |= get_word_ce_prefetch (%d);\n", name, r + 4); count_read++; } } else { if (using_prefetch) { if (norefill) { printf ("\t%s %s;\n", type, name); - printf ("\t%s = get_word_prefetch (regs, %d) << 16;\n", name, r + 2); + printf ("\t%s = get_word_prefetch (%d) << 16;\n", name, r + 2); count_read++; - printf ("\t%s |= regs->irc;\n", name); + printf ("\t%s |= regs.irc;\n", name); insn_n_cycles += 4; } else { - printf ("\t%s %s = get_long_prefetch (regs, %d);\n", type, name, r + 2); + printf ("\t%s %s = get_long_prefetch (%d);\n", type, name, r + 2); count_read++; count_read++; insn_n_cycles += 8; @@ -230,10 +237,10 @@ static void gen_nextilong (char *type, char *name, int norefill) printf ("\t%s %s = get_ilongi (%d);\n", type, name, r); } else if (using_mmu) { insn_n_cycles += 8; - printf ("\t%s %s = get_ilong_mmu (regs, %d);\n", type, name, r); + printf ("\t%s %s = get_ilong_mmu (%d);\n", type, name, r); } else { insn_n_cycles += 8; - printf ("\t%s %s = get_ilong (regs, %d);\n", type, name, r); + printf ("\t%s %s = get_ilong (%d);\n", type, name, r); } } } @@ -244,19 +251,22 @@ static const char *gen_nextiword (int norefill) int r = m68k_pc_offset; m68k_pc_offset += 2; - if (using_ce) { + if (using_ce020) { + sprintf (buffer, "get_word_ce020_prefetch (%d)", r); + count_read++; + } else if (using_ce) { if (norefill) { - strcpy (buffer, "regs->irc"); + strcpy (buffer, "regs.irc"); } else { - sprintf (buffer, "get_word_ce_prefetch (regs, %d)", r + 2); + sprintf (buffer, "get_word_ce_prefetch (%d)", r + 2); count_read++; } } else { if (using_prefetch) { if (norefill) { - sprintf (buffer, "regs->irc", r); + sprintf (buffer, "regs.irc", r); } else { - sprintf (buffer, "get_word_prefetch (regs, %d)", r + 2); + sprintf (buffer, "get_word_prefetch (%d)", r + 2); count_read++; insn_n_cycles += 4; } @@ -264,10 +274,10 @@ static const char *gen_nextiword (int norefill) sprintf (buffer, "get_iwordi(%d)", r); insn_n_cycles += 4; } else if (using_mmu) { - sprintf (buffer, "get_iword_mmu (regs, %d)", r); + sprintf (buffer, "get_iword_mmu (%d)", r); insn_n_cycles += 4; } else { - sprintf (buffer, "get_iword (regs, %d)", r); + sprintf (buffer, "get_iword (%d)", r); insn_n_cycles += 4; } } @@ -280,20 +290,23 @@ static const char *gen_nextibyte (int norefill) int r = m68k_pc_offset; m68k_pc_offset += 2; - if (using_ce) { + if (using_ce020) { + sprintf (buffer, "(uae_u8)get_word_ce020_prefetch (%d)", r); + count_read++; + } else if (using_ce) { if (norefill) { - strcpy (buffer, "(uae_u8)regs->irc"); + strcpy (buffer, "(uae_u8)regs.irc"); } else { - sprintf (buffer, "(uae_u8)get_word_ce_prefetch (regs, %d)", r + 2); + sprintf (buffer, "(uae_u8)get_word_ce_prefetch (%d)", r + 2); count_read++; } } else { insn_n_cycles += 4; if (using_prefetch) { if (norefill) { - sprintf (buffer, "(uae_u8)regs->irc", r); + sprintf (buffer, "(uae_u8)regs.irc", r); } else { - sprintf (buffer, "(uae_u8)get_word_prefetch (regs, %d)", r + 2); + sprintf (buffer, "(uae_u8)get_word_prefetch (%d)", r + 2); insn_n_cycles += 4; count_read++; } @@ -304,7 +317,7 @@ static const char *gen_nextibyte (int norefill) sprintf (buffer, "get_ibyte_mmu (%d)", r); insn_n_cycles += 4; } else { - sprintf (buffer, "get_ibyte (regs, %d)", r); + sprintf (buffer, "get_ibyte (%d)", r); insn_n_cycles += 4; } } @@ -315,7 +328,7 @@ static void irc2ir (void) { if (!using_prefetch) return; - printf ("\tregs->ir = regs->irc;\n"); + printf ("\tregs.ir = regs.irc;\n"); } static int did_prefetch; @@ -325,9 +338,9 @@ static void fill_prefetch_2 (void) if (!using_prefetch) return; if (using_ce) - printf ("\tget_word_ce_prefetch (regs, %d);\n", m68k_pc_offset + 2); + printf ("\tget_word_ce_prefetch (%d);\n", m68k_pc_offset + 2); else - printf ("\tget_word_prefetch (regs, %d);\n", m68k_pc_offset + 2); + printf ("\tget_word_prefetch (%d);\n", m68k_pc_offset + 2); did_prefetch = 1; count_read++; insn_n_cycles += 4; @@ -338,9 +351,9 @@ static void fill_prefetch_1 (int o) if (!using_prefetch) return; if (using_ce) { - printf ("\tget_word_ce_prefetch (regs, %d);\n", o); + printf ("\tget_word_ce_prefetch (%d);\n", o); } else { - printf ("\tget_word_prefetch (regs, %d);\n", o); + printf ("\tget_word_prefetch (%d);\n", o); } did_prefetch = 1; count_read++; @@ -359,9 +372,9 @@ static void fill_prefetch_0 (void) if (!using_prefetch) return; if (using_ce) - printf ("\tget_word_ce_prefetch (regs, 0);\n"); + printf ("\tget_word_ce_prefetch (0);\n"); else - printf ("\tget_word_prefetch (regs, 0);\n"); + printf ("\tget_word_prefetch (0);\n"); did_prefetch = 1; count_read++; insn_n_cycles += 4; @@ -410,7 +423,7 @@ static void sync_m68k_pc (void) { if (m68k_pc_offset == 0) return; - printf ("\tm68k_incpc (regs, %d);\n", m68k_pc_offset); + printf ("\tm68k_incpc (%d);\n", m68k_pc_offset); m68k_pc_offset = 0; } @@ -511,12 +524,14 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; - if (using_mmu) - printf ("\t%sa = get_disp_ea_020 (regs, m68k_areg (regs, %s), next_iword_mmu (regs));\n", name, reg); + if (using_ce020) + printf ("\t%sa = get_disp_ea_020ce (m68k_areg (regs, %s), next_iword_020ce ());\n", name, reg); + else if (using_mmu) + printf ("\t%sa = get_disp_ea_020 (m68k_areg (regs, %s), next_iword_mmu ());\n", name, reg); else - printf ("\t%sa = get_disp_ea_020 (regs, m68k_areg (regs, %s), next_iword (regs));\n", name, reg); + printf ("\t%sa = get_disp_ea_020 (m68k_areg (regs, %s), next_iword ());\n", name, reg); } else { - printf ("\t%sa = get_disp_ea_000 (regs, m68k_areg (regs, %s), %s);\n", name, reg, gen_nextiword (flags & GF_NOREFILL)); + printf ("\t%sa = get_disp_ea_000 (m68k_areg (regs, %s), %s);\n", name, reg, gen_nextiword (flags & GF_NOREFILL)); count_read_ea++; } if (!(flags & GF_AD8R)) { @@ -526,7 +541,7 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g } break; case PC16: - printf ("\tuaecptr %sa = m68k_getpc (regs) + %d;\n", name, m68k_pc_offset); + printf ("\tuaecptr %sa = m68k_getpc () + %d;\n", name, m68k_pc_offset); printf ("\t%sa += (uae_s32)(uae_s16)%s;\n", name, gen_nextiword (flags & GF_NOREFILL)); break; case PC8r: @@ -539,14 +554,16 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; - printf ("\ttmppc = m68k_getpc (regs);\n"); - if (using_mmu) - printf ("\t%sa = get_disp_ea_020 (regs, tmppc, next_iword_mmu (regs));\n", name); + printf ("\ttmppc = m68k_getpc ();\n"); + if (using_ce020) + printf ("\t%sa = get_disp_ea_020ce (tmppc, next_iword_020ce ());\n", name); + else if (using_mmu) + printf ("\t%sa = get_disp_ea_020 (tmppc, next_iword_mmu ());\n", name); else - printf ("\t%sa = get_disp_ea_020 (regs, tmppc, next_iword (regs));\n", name); + printf ("\t%sa = get_disp_ea_020 (tmppc, next_iword ());\n", name); } else { - printf ("\ttmppc = m68k_getpc (regs) + %d;\n", m68k_pc_offset); - printf ("\t%sa = get_disp_ea_000 (regs, tmppc, %s);\n", name, gen_nextiword (flags & GF_NOREFILL)); + printf ("\ttmppc = m68k_getpc () + %d;\n", m68k_pc_offset); + printf ("\t%sa = get_disp_ea_000 (tmppc, %s);\n", name, gen_nextiword (flags & GF_NOREFILL)); } if (!(flags & GF_PC8R)) { addcycles (2); @@ -614,7 +631,7 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g if ((using_prefetch || using_ce) && using_exception_3 && getv != 0 && size != sz_byte) { printf ("\tif (%sa & 1) {\n", name); - printf ("\t\texception3 (opcode, m68k_getpc (regs) + %d, %sa);\n", + printf ("\t\texception3 (opcode, m68k_getpc () + %d, %sa);\n", m68k_pc_offset_last + e3fudge, name); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); @@ -627,7 +644,14 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g if (getv == 1) { start_brace (); - if (using_ce) { + if (using_ce020) { + switch (size) { + case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = get_byte_ce_020 (%sa);\n", name, name); count_read++; break; + case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = get_word_ce_020 (%sa);\n", name, name); count_read++; break; + case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = get_long_ce_020 (%sa);\n", name, name); count_read += 2; break; + default: abort (); + } + } else if (using_ce) { switch (size) { case sz_byte: printf ("\tuae_s8 %s = get_byte_ce (%sa);\n", name, name); count_read++; break; case sz_word: printf ("\tuae_s16 %s = get_word_ce (%sa);\n", name, name); count_read++; break; @@ -726,7 +750,28 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha case absl: case PC16: case PC8r: - if (using_ce) { + if (using_ce020) { + switch (size) { + case sz_byte: + printf ("\tput_byte_ce020 (%sa,%s);\n", to, from); + count_write++; + break; + case sz_word: + if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) + abort (); + printf ("\tput_word_ce020 (%sa,%s);\n", to, from); + count_write++; + break; + case sz_long: + if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) + abort (); + printf ("\tput_long_ce020 (%sa, %s);\n", to, from); + count_write += 2; + break; + default: + abort (); + } + } else if (using_ce) { switch (size) { case sz_byte: printf ("\tput_byte_ce (%sa,%s);\n", to, from); @@ -983,7 +1028,7 @@ static void duplicate_carry (int n) int i; for (i = 0; i <= n; i++) printf ("\t"); - printf ("COPY_CARRY (®s->ccrflags);\n"); + printf ("COPY_CARRY (®s.ccrflags);\n"); } typedef enum @@ -1084,56 +1129,56 @@ static void genflags_normal (flagtypes type, wordsizes size, char *value, char * switch (type) { case flag_logical: - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); - printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr); - printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); + printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr); + printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr); break; case flag_logical_noclobber: - printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr); - printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr); + printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr); + printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr); break; case flag_av: - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); break; case flag_sv: - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n"); + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n"); break; case flag_z: - printf ("\tSET_ZFLG (®s->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr); + printf ("\tSET_ZFLG (®s.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr); break; case flag_zn: - printf ("\tSET_ZFLG (®s->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr); - printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr); + printf ("\tSET_ZFLG (®s.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr); + printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr); break; case flag_add: - printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr); - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); - printf ("\tSET_CFLG (®s->ccrflags, %s < %s);\n", undstr, usstr); + printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr); + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); + printf ("\tSET_CFLG (®s.ccrflags, %s < %s);\n", undstr, usstr); duplicate_carry (0); - printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n"); + printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n"); break; case flag_sub: - printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr); - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n"); - printf ("\tSET_CFLG (®s->ccrflags, %s > %s);\n", usstr, udstr); + printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr); + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n"); + printf ("\tSET_CFLG (®s.ccrflags, %s > %s);\n", usstr, udstr); duplicate_carry (0); - printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n"); + printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n"); break; case flag_addx: - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */ - printf ("\tSET_CFLG (®s->ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */ + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */ + printf ("\tSET_CFLG (®s.ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */ duplicate_carry (0); break; case flag_subx: - printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */ - printf ("\tSET_CFLG (®s->ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */ + printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */ + printf ("\tSET_CFLG (®s.ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */ duplicate_carry (0); break; case flag_cmp: - printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr); - printf ("\tSET_VFLG (®s->ccrflags, (flgs != flgo) && (flgn != flgo));\n"); - printf ("\tSET_CFLG (®s->ccrflags, %s > %s);\n", usstr, udstr); - printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n"); + printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr); + printf ("\tSET_VFLG (®s.ccrflags, (flgs != flgo) && (flgn != flgo));\n"); + printf ("\tSET_CFLG (®s.ccrflags, %s > %s);\n", usstr, udstr); + printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n"); break; } } @@ -1160,20 +1205,20 @@ static void genflags (flagtypes type, wordsizes size, char *value, char *src, ch case flag_logical_noclobber: printf ("\t{uae_u32 oldcznv = GET_CZNV & ~(FLAGVAL_Z | FLAGVAL_N);\n"); if (strcmp (value, "0") == 0) { - printf ("\tSET_CZNV (®s->ccrflags, olcznv | FLAGVAL_Z);\n"); + printf ("\tSET_CZNV (®s.ccrflags, olcznv | FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break; case sz_word: printf ("\toptflag_testw (regs, (uae_s16)(%s));\n", value); break; case sz_long: printf ("\toptflag_testl (regs, (uae_s32)(%s));\n", value); break; } - printf ("\tIOR_CZNV (®s->ccrflags, oldcznv);\n"); + printf ("\tIOR_CZNV (®s.ccrflags, oldcznv);\n"); } printf ("\t}\n"); return; case flag_logical: if (strcmp (value, "0") == 0) { - printf ("\tSET_CZNV (®s->ccrflags, FLAGVAL_Z);\n"); + printf ("\tSET_CZNV (®s.ccrflags, FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break; @@ -1271,7 +1316,7 @@ static void bsetcycles (struct instr *curi) printf ("\tsrc &= 31;\n"); if (isreg (curi->dmode)) { addcycles (2); - if (curi->mnemo != i_BTST) { + if (curi->mnemo != i_BTST && using_ce) { printf ("\tif (src > 15) do_cycles_ce (2 * CYCLE_UNIT / 2);\n"); count_ncycles++; } @@ -1302,14 +1347,14 @@ static void gen_opcode (unsigned long int opcode) /* fall through */ case 2: /* priviledged */ - printf ("if (!regs->s) { Exception (8, regs, 0); goto %s; }\n", endlabelstr); + printf ("if (!regs.s) { Exception (8, 0); goto %s; }\n", endlabelstr); need_endlabel = 1; start_brace (); break; case 3: /* privileged if size == word */ if (curi->size == sz_byte) break; - printf ("if (!regs->s) { Exception (8, regs, 0); goto %s; }\n", endlabelstr); + printf ("if (!regs.s) { Exception (8, 0); goto %s; }\n", endlabelstr); need_endlabel = 1; start_brace (); break; @@ -1349,26 +1394,26 @@ static void gen_opcode (unsigned long int opcode) break; case i_ORSR: case i_EORSR: - printf ("\tMakeSR (regs);\n"); + printf ("\tMakeSR ();\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); if (curi->size == sz_byte) { printf ("\tsrc &= 0xFF;\n"); } addcycles (4); fill_prefetch_next (); - printf ("\tregs->sr %c= src;\n", curi->mnemo == i_EORSR ? '^' : '|'); - printf ("\tMakeFromSR (regs);\n"); + printf ("\tregs.sr %c= src;\n", curi->mnemo == i_EORSR ? '^' : '|'); + printf ("\tMakeFromSR ();\n"); break; case i_ANDSR: - printf ("\tMakeSR (regs);\n"); + printf ("\tMakeSR ();\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); if (curi->size == sz_byte) { printf ("\tsrc |= 0xFF00;\n"); } addcycles (4); fill_prefetch_next (); - printf ("\tregs->sr &= src;\n"); - printf ("\tMakeFromSR (regs);\n"); + printf ("\tregs.sr &= src;\n"); + printf ("\tMakeFromSR ();\n"); break; case i_SUB: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); @@ -1416,7 +1461,7 @@ static void gen_opcode (unsigned long int opcode) addcycles (2); fill_prefetch_next (); start_brace (); - printf ("\tuae_u32 newv = dst - src - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u32 newv = dst - src - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); @@ -1426,14 +1471,14 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); fill_prefetch_next (); start_brace (); - printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint bcd = 0;\n"); printf ("\tnewv = tmp_newv = newv_hi + newv_lo;\n"); printf ("\tif (newv_lo & 0xF0) { newv -= 6; bcd = 6; };\n"); - printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG (®s->ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n"); - printf ("\tSET_CFLG (®s->ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (®s->ccrflags) ? 1 : 0)) & 0x300) > 0xFF);\n"); + printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG (®s.ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n"); + printf ("\tSET_CFLG (®s.ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (®s.ccrflags) ? 1 : 0)) & 0x300) > 0xFF);\n"); duplicate_carry (0); /* Manual says bits NV are undefined though a real 68040/060 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { @@ -1442,7 +1487,7 @@ static void gen_opcode (unsigned long int opcode) genflags (flag_z, curi->size, "newv", "", ""); } else { genflags (flag_zn, curi->size, "newv", "", ""); - printf ("\tSET_VFLG (®s->ccrflags, (tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n"); + printf ("\tSET_VFLG (®s.ccrflags, (tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n"); } addcycles (2); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); @@ -1495,7 +1540,7 @@ static void gen_opcode (unsigned long int opcode) addcycles (2); fill_prefetch_next (); start_brace (); - printf ("\tuae_u32 newv = dst + src + (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u32 newv = dst + src + (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); genflags (flag_addx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); @@ -1505,7 +1550,7 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); fill_prefetch_next (); start_brace (); - printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint cflg;\n"); @@ -1513,7 +1558,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tif (newv_lo > 9) { newv += 6; }\n"); printf ("\tcflg = (newv & 0x3F0) > 0x90;\n"); printf ("\tif (cflg) newv += 0x60;\n"); - printf ("\tSET_CFLG (®s->ccrflags, cflg);\n"); + printf ("\tSET_CFLG (®s.ccrflags, cflg);\n"); duplicate_carry (0); /* Manual says bits NV are undefined though a real 68040 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { @@ -1523,7 +1568,7 @@ static void gen_opcode (unsigned long int opcode) } else { genflags (flag_zn, curi->size, "newv", "", ""); - printf ("\tSET_VFLG (®s->ccrflags, (tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n"); + printf ("\tSET_VFLG (®s.ccrflags, (tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n"); } addcycles (2); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); @@ -1543,7 +1588,7 @@ static void gen_opcode (unsigned long int opcode) addcycles (2); fill_prefetch_next (); start_brace (); - printf ("\tuae_u32 newv = 0 - src - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u32 newv = 0 - src - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "0"); genflags (flag_zn, curi->size, "newv", "", ""); genastore_rev ("newv", curi->smode, "srcreg", curi->size, "src"); @@ -1554,7 +1599,7 @@ static void gen_opcode (unsigned long int opcode) addcycles (2); fill_prefetch_next (); start_brace (); - printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n"); + printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = - (src & 0xF0);\n"); printf ("\tuae_u16 newv;\n"); printf ("\tint cflg;\n"); @@ -1562,7 +1607,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tnewv = newv_hi + newv_lo;"); printf ("\tcflg = (newv & 0x1F0) > 0x90;\n"); printf ("\tif (cflg) newv -= 0x60;\n"); - printf ("\tSET_CFLG (®s->ccrflags, cflg);\n"); + printf ("\tSET_CFLG (®s.ccrflags, cflg);\n"); duplicate_carry(0); /* Manual says bits NV are undefined though a real 68040 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { @@ -1603,7 +1648,7 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); fill_prefetch_next (); bsetcycles (curi); - printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n"); + printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n"); break; case i_BCHG: case i_BCLR: @@ -1616,12 +1661,12 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next (); if (curi->mnemo == i_BCHG) { printf ("\tdst ^= (1 << src);\n"); - printf ("\tSET_ZFLG (®s->ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n"); + printf ("\tSET_ZFLG (®s.ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n"); } else if (curi->mnemo == i_BCLR) { - printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n"); + printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n"); printf ("\tdst &= ~(1 << src);\n"); } else if (curi->mnemo == i_BSET) { - printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n"); + printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n"); printf ("\tdst |= (1 << src);\n"); } genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); @@ -1737,23 +1782,23 @@ static void gen_opcode (unsigned long int opcode) if (isreg (curi->smode)) addcycles (2); fill_prefetch_next (); - printf ("\tMakeSR (regs);\n"); + printf ("\tMakeSR ();\n"); if (curi->size == sz_byte) - genastore ("regs->sr & 0xff", curi->smode, "srcreg", sz_word, "src"); + genastore ("regs.sr & 0xff", curi->smode, "srcreg", sz_word, "src"); else - genastore ("regs->sr", curi->smode, "srcreg", sz_word, "src"); + genastore ("regs.sr", curi->smode, "srcreg", sz_word, "src"); break; case i_MV2SR: // MOVE TO SR genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); if (curi->size == sz_byte) { addcycles (8); - printf ("\tMakeSR (regs);\n\tregs->sr &= 0xFF00;\n\tregs->sr |= src & 0xFF;\n"); + printf ("\tMakeSR ();\n\tregs.sr &= 0xFF00;\n\tregs.sr |= src & 0xFF;\n"); } else { addcycles (4); - printf ("\tregs->sr = src;\n"); + printf ("\tregs.sr = src;\n"); } fill_prefetch_next (); - printf ("\tMakeFromSR (regs);\n"); + printf ("\tMakeFromSR ();\n"); break; case i_SWAP: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0, 0); @@ -1801,53 +1846,53 @@ static void gen_opcode (unsigned long int opcode) case i_TRAP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); sync_m68k_pc (); - printf ("\tException (src + 32, regs, 0);\n"); + printf ("\tException (src + 32, 0);\n"); did_prefetch = 1; m68k_pc_offset = 0; break; case i_MVR2USP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); - printf ("\tregs->usp = src;\n"); + printf ("\tregs.usp = src;\n"); break; case i_MVUSP2R: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0, 0); fill_prefetch_next (); - genastore ("regs->usp", curi->smode, "srcreg", curi->size, "src"); + genastore ("regs.usp", curi->smode, "srcreg", curi->size, "src"); break; case i_RESET: fill_prefetch_next (); printf ("\tcpureset ();\n"); addcycles (128); if (using_prefetch) - printf ("\tregs->irc = get_iword (regs, 4);\n"); + printf ("\tregs.irc = get_iword (4);\n"); break; case i_NOP: fill_prefetch_next (); break; case i_STOP: if (using_prefetch) { - printf ("\tregs->sr = regs->irc;\n"); + printf ("\tregs.sr = regs.irc;\n"); m68k_pc_offset += 2; } else { genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); - printf ("\tregs->sr = src;\n"); + printf ("\tregs.sr = src;\n"); } - printf ("\tMakeFromSR (regs);\n"); - printf ("\tm68k_setstopped (regs);\n"); + printf ("\tMakeFromSR ();\n"); + printf ("\tm68k_setstopped ();\n"); sync_m68k_pc (); // STOP does not prefetch anything did_prefetch = -1; break; case i_LPSTOP: /* 68060 */ - printf ("\tuae_u16 sw = get_iword (regs, 2);\n"); + printf ("\tuae_u16 sw = get_iword (2);\n"); printf ("\tuae_u16 sr;\n"); - printf ("\tif (sw != (0x100|0x80|0x40)) { Exception (4, regs, 0); goto %s; }\n", endlabelstr); - printf ("\tsr = get_iword (regs, 4);\n"); - printf ("\tif (!(sr & 0x8000)) { Exception (8, regs, 0); goto %s; }\n", endlabelstr); - printf ("\tregs->sr = sr;\n"); - printf ("\tMakeFromSR (regs);\n"); - printf ("\tm68k_setstopped(regs);\n"); + printf ("\tif (sw != (0x100|0x80|0x40)) { Exception (4, 0); goto %s; }\n", endlabelstr); + printf ("\tsr = get_iword (4);\n"); + printf ("\tif (!(sr & 0x8000)) { Exception (8, 0); goto %s; }\n", endlabelstr); + printf ("\tregs.sr = sr;\n"); + printf ("\tMakeFromSR ();\n"); + printf ("\tm68k_setstopped();\n"); m68k_pc_offset += 4; sync_m68k_pc (); fill_prefetch_full (); @@ -1856,8 +1901,8 @@ static void gen_opcode (unsigned long int opcode) if (cpu_level == 0) { genamode (Aipi, "7", sz_word, "sr", 1, 0, GF_NOREFILL); genamode (Aipi, "7", sz_long, "pc", 1, 0, GF_NOREFILL); - printf ("\tregs->sr = sr; m68k_setpc (regs, pc);\n"); - printf ("\tMakeFromSR (regs);\n"); + printf ("\tregs.sr = sr; m68k_setpc (pc);\n"); + printf ("\tMakeFromSR ();\n"); } else { int old_brace_level = n_braces; if (next_cpu_level < 0) @@ -1876,14 +1921,14 @@ static void gen_opcode (unsigned long int opcode) printf ("\telse if ((format & 0xF000) == 0x9000) { m68k_areg (regs, 7) += 12; break; }\n"); printf ("\telse if ((format & 0xF000) == 0xa000) { m68k_areg (regs, 7) += 24; break; }\n"); printf ("\telse if ((format & 0xF000) == 0xb000) { m68k_areg (regs, 7) += 84; break; }\n"); - printf ("\telse { Exception (14, regs, 0); goto %s; }\n", endlabelstr); - printf ("\tregs->sr = newsr; MakeFromSR (regs);\n}\n"); + printf ("\telse { Exception (14, 0); goto %s; }\n", endlabelstr); + printf ("\tregs.sr = newsr; MakeFromSR ();\n}\n"); pop_braces (old_brace_level); - printf ("\tregs->sr = newsr; MakeFromSR (regs);\n"); + printf ("\tregs.sr = newsr; MakeFromSR ();\n"); printf ("\tif (newpc & 1)\n"); - printf ("\t\texception3 (0x%04X, m68k_getpc (regs), newpc);\n", opcode); + printf ("\t\texception3 (0x%04X, m68k_getpc (), newpc);\n", opcode); printf ("\telse\n"); - printf ("\t\tm68k_setpc (regs, newpc);\n"); + printf ("\t\tm68k_setpc (newpc);\n"); need_endlabel = 1; } /* PC is set and prefetch filled. */ @@ -1895,9 +1940,9 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->smode, "srcreg", curi->size, "offs", 1, 0, 0); printf ("\tm68k_areg (regs, 7) += offs;\n"); printf ("\tif (pc & 1)\n"); - printf ("\t\texception3 (0x%04X, m68k_getpc (regs), pc);\n", opcode); + printf ("\t\texception3 (0x%04X, m68k_getpc (), pc);\n", opcode); printf ("\telse\n"); - printf ("\t\tm68k_setpc (regs, pc);\n"); + printf ("\t\tm68k_setpc (pc);\n"); /* PC is set and prefetch filled. */ m68k_pc_offset = 0; fill_prefetch_full (); @@ -1920,11 +1965,11 @@ static void gen_opcode (unsigned long int opcode) break; case i_RTS: if (using_ce) - printf ("\tm68k_do_rts_ce(regs);\n"); + printf ("\tm68k_do_rts_ce ();\n"); else if (using_indirect) - printf ("\tm68k_do_rtsi(regs);\n"); + printf ("\tm68k_do_rtsi ();\n"); else - printf ("\tm68k_do_rts(regs);\n"); + printf ("\tm68k_do_rts ();\n"); count_read += 2; m68k_pc_offset = 0; fill_prefetch_full (); @@ -1932,26 +1977,26 @@ static void gen_opcode (unsigned long int opcode) case i_TRAPV: sync_m68k_pc (); fill_prefetch_next (); - printf ("\tif (GET_VFLG (®s->ccrflags)) {\n"); - printf ("\t\tException (7, regs, m68k_getpc (regs));\n"); + printf ("\tif (GET_VFLG (®s.ccrflags)) {\n"); + printf ("\t\tException (7, m68k_getpc ());\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; break; case i_RTR: - printf ("\tMakeSR (regs);\n"); + printf ("\tMakeSR ();\n"); genamode (Aipi, "7", sz_word, "sr", 1, 0, 0); genamode (Aipi, "7", sz_long, "pc", 1, 0, 0); - printf ("\tregs->sr &= 0xFF00; sr &= 0xFF;\n"); - printf ("\tregs->sr |= sr; m68k_setpc (regs, pc);\n"); - printf ("\tMakeFromSR (regs);\n"); + printf ("\tregs.sr &= 0xFF00; sr &= 0xFF;\n"); + printf ("\tregs.sr |= sr; m68k_setpc (pc);\n"); + printf ("\tMakeFromSR ();\n"); m68k_pc_offset = 0; fill_prefetch_full (); break; case i_JSR: // TODO: check stack write order genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA|GF_NOREFILL); start_brace (); - printf ("\tuaecptr oldpc = m68k_getpc (regs) + %d;\n", m68k_pc_offset); + printf ("\tuaecptr oldpc = m68k_getpc () + %d;\n", m68k_pc_offset); if (using_exception_3) { printf ("\tif (srca & 1) {\n"); printf ("\t\texception3i (opcode, oldpc, srca);\n"); @@ -1961,7 +2006,7 @@ static void gen_opcode (unsigned long int opcode) } if (curi->smode == Ad16 || curi->smode == absw || curi->smode == PC16) addcycles (2); - printf ("\tm68k_setpc (regs, srca);\n"); + printf ("\tm68k_setpc (srca);\n"); m68k_pc_offset = 0; fill_prefetch_1 (0); if (curi->smode == Ad8r || curi->smode == PC8r) @@ -1980,7 +2025,7 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA | ((curi->smode == Ad8r || curi->smode == PC8r) ? 0 : GF_NOREFILL)); if (using_exception_3) { printf ("\tif (srca & 1) {\n"); - printf ("\t\texception3i (opcode, m68k_getpc (regs) + 6, srca);\n"); + printf ("\t\texception3i (opcode, m68k_getpc () + 6, srca);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; @@ -1988,7 +2033,7 @@ static void gen_opcode (unsigned long int opcode) if (curi->smode == Ad16 || curi->smode == Ad8r || curi->smode == absw || curi->smode == PC16 || curi->smode == PC8r) addcycles (2); // if (using_ce && (curi->smode == Ad8r || curi->smode == PC8r)) - printf ("\tm68k_setpc (regs, srca);\n"); + printf ("\tm68k_setpc (srca);\n"); m68k_pc_offset = 0; fill_prefetch_full (); break; @@ -1998,18 +2043,18 @@ static void gen_opcode (unsigned long int opcode) printf ("\ts = (uae_s32)src + 2;\n"); if (using_exception_3) { printf ("\tif (src & 1) {\n"); - printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + s);\n"); + printf ("\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + s);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } addcycles (2); if (using_ce) - printf ("\tm68k_do_bsr_ce (regs, m68k_getpc (regs) + %d, s);\n", m68k_pc_offset); + printf ("\tm68k_do_bsr_ce (m68k_getpc () + %d, s);\n", m68k_pc_offset); else if (using_indirect) - printf ("\tm68k_do_bsri (regs, m68k_getpc (regs) + %d, s);\n", m68k_pc_offset); + printf ("\tm68k_do_bsri (m68k_getpc () + %d, s);\n", m68k_pc_offset); else - printf ("\tm68k_do_bsr (regs, m68k_getpc (regs) + %d, s);\n", m68k_pc_offset); + printf ("\tm68k_do_bsr (m68k_getpc () + %d, s);\n", m68k_pc_offset); count_write += 2; m68k_pc_offset = 0; fill_prefetch_full (); @@ -2018,8 +2063,8 @@ static void gen_opcode (unsigned long int opcode) if (curi->size == sz_long) { if (cpu_level < 2) { addcycles (2); - printf ("\tif (cctrue(®s->ccrflags, %d)) {\n", curi->cc, endlabelstr); - printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 1);\n"); + printf ("\tif (cctrue (®s.ccrflags, %d)) {\n", curi->cc, endlabelstr); + printf ("\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 1);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); sync_m68k_pc (); @@ -2034,19 +2079,19 @@ static void gen_opcode (unsigned long int opcode) } genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL); addcycles (2); - printf ("\tif (!cctrue(®s->ccrflags, %d)) goto didnt_jump;\n", curi->cc); + printf ("\tif (!cctrue (®s.ccrflags, %d)) goto didnt_jump;\n", curi->cc); if (using_exception_3) { printf ("\tif (src & 1) {\n"); - printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 2 + (uae_s32)src);\n"); + printf ("\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 2 + (uae_s32)src);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } if (using_prefetch) { if (curi->size == sz_byte) { - printf ("\tm68k_incpc (regs, (uae_s32)src + 2);\n"); + printf ("\tm68k_incpc ((uae_s32)src + 2);\n"); } else { - printf ("\tm68k_incpc (regs, (uae_s32)src + 2);\n"); + printf ("\tm68k_incpc ((uae_s32)src + 2);\n"); } fill_prefetch_full (); if (using_ce) @@ -2054,7 +2099,7 @@ static void gen_opcode (unsigned long int opcode) else printf ("\treturn 10 * CYCLE_UNIT / 2;\n"); } else { - printf ("\tm68k_incpc (regs, (uae_s32)src + 2);\n"); + printf ("\tm68k_incpc ((uae_s32)src + 2);\n"); returncycles ("\t", 10); } printf ("didnt_jump:;\n"); @@ -2098,17 +2143,17 @@ static void gen_opcode (unsigned long int opcode) case i_DBcc: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0, GF_AA | GF_NOREFILL); - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); addcycles (2); - printf ("\tif (!cctrue(®s->ccrflags, %d)) {\n", curi->cc); - printf ("\t\tm68k_incpc (regs, (uae_s32)offs + 2);\n"); + printf ("\tif (!cctrue (®s.ccrflags, %d)) {\n", curi->cc); + printf ("\t\tm68k_incpc ((uae_s32)offs + 2);\n"); printf ("\t"); fill_prefetch_1 (0); - printf ("\t"); genastore ("(src-1)", curi->smode, "srcreg", curi->size, "src"); + printf ("\t"); genastore ("(src - 1)", curi->smode, "srcreg", curi->size, "src"); printf ("\t\tif (src) {\n"); if (using_exception_3) { printf ("\t\t\tif (offs & 1) {\n"); - printf ("\t\t\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 2 + (uae_s32)offs + 2);\n"); + printf ("\t\t\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 2 + (uae_s32)offs + 2);\n"); printf ("\t\t\t\tgoto %s;\n", endlabelstr); printf ("\t\t\t}\n"); need_endlabel = 1; @@ -2122,7 +2167,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\t} else {\n"); addcycles2 ("\t\t", 2); printf ("\t}\n"); - printf ("\tm68k_setpc (regs, oldpc + %d);\n", m68k_pc_offset); + printf ("\tm68k_setpc (oldpc + %d);\n", m68k_pc_offset); m68k_pc_offset = 0; fill_prefetch_full (); insn_n_cycles = 12; @@ -2133,7 +2178,7 @@ static void gen_opcode (unsigned long int opcode) start_brace (); fill_prefetch_next(); start_brace (); - printf ("\tint val = cctrue(®s->ccrflags, %d) ? 0xff : 0;\n", curi->cc); + printf ("\tint val = cctrue (®s.ccrflags, %d) ? 0xff : 0;\n", curi->cc); if (using_ce) { printf ("\tint cycles = 0;\n"); if (isreg (curi->smode)) @@ -2143,20 +2188,20 @@ static void gen_opcode (unsigned long int opcode) genastore ("val", curi->smode, "srcreg", curi->size, "src"); break; case i_DIVU: - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (src == 0) {\n"); if (cpu_level > 0) { /* 68020 sets V when dividing by zero and N if dst is negative * 68000 clears both */ - printf("\t\tSET_VFLG (®s->ccrflags, 1);\n"); - printf("\t\tif (dst < 0) SET_NFLG (®s->ccrflags, 1);\n"); + printf("\t\tSET_VFLG (®s.ccrflags, 1);\n"); + printf("\t\tif (dst < 0) SET_NFLG (®s.ccrflags, 1);\n"); } - printf ("\t\tm68k_incpc (regs, %d);\n", m68k_pc_offset); - printf ("\t\tException (5, regs, oldpc);\n"); + printf ("\t\tm68k_incpc (%d);\n", m68k_pc_offset); + printf ("\t\tException (5, oldpc);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t} else {\n"); printf ("\t\tuae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src;\n"); @@ -2170,13 +2215,13 @@ static void gen_opcode (unsigned long int opcode) /* The N flag appears to be set each time there is an overflow. * Weird. but 68020 only sets N when dst is negative.. */ printf ("\t\tif (newv > 0xffff) {\n"); - printf ("\t\t\tSET_VFLG (®s->ccrflags, 1);\n"); + printf ("\t\t\tSET_VFLG (®s.ccrflags, 1);\n"); #ifdef UNDEF68020 if (cpu_level >= 2) printf ("\t\t\tif (currprefs.cpu_level == 0 || dst < 0) SET_NFLG (®s, 1);\n"); else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */ #endif - printf ("\t\t\tSET_NFLG (®s->ccrflags, 1);\n"); + printf ("\t\t\tSET_NFLG (®s.ccrflags, 1);\n"); printf ("\t\t} else {\n"); printf ("\t\t"); genflags (flag_logical, sz_word, "newv", "", ""); printf ("\t\t\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n"); @@ -2189,20 +2234,20 @@ static void gen_opcode (unsigned long int opcode) need_endlabel = 1; break; case i_DIVS: - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (src == 0) {\n"); if (cpu_level > 0) { /* 68020 sets V when dividing by zero. Z is also set. * 68000 clears both */ - printf("\t\tSET_VFLG (®s->ccrflags, 1);\n"); - printf("\t\tSET_ZFLG (®s->ccrflags, 1);\n"); + printf("\t\tSET_VFLG (®s.ccrflags, 1);\n"); + printf("\t\tSET_ZFLG (®s.ccrflags, 1);\n"); } - printf ("\t\tm68k_incpc (regs, %d);\n", m68k_pc_offset); - printf ("\t\tException (5, regs, oldpc);\n"); + printf ("\t\tm68k_incpc (%d);\n", m68k_pc_offset); + printf ("\t\tException (5, oldpc);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t} else {\n"); printf ("\t\tuae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src;\n"); @@ -2214,13 +2259,13 @@ static void gen_opcode (unsigned long int opcode) addcycles3 ("\t\t"); } printf ("\t\tif ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) {\n"); - printf ("\t\t\tSET_VFLG (®s->ccrflags, 1);\n"); + printf ("\t\t\tSET_VFLG (®s.ccrflags, 1);\n"); #ifdef UNDEF68020 if (cpu_level > 0) printf ("\t\t\tif (currprefs.cpu_level == 0) SET_NFLG (®s, 1);\n"); else #endif - printf ("\t\t\tSET_NFLG (®s->ccrflags, 1);\n"); + printf ("\t\t\tSET_NFLG (®s.ccrflags, 1);\n"); printf ("\t\t} else {\n"); printf ("\t\t\tif (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem;\n"); genflags (flag_logical, sz_word, "newv", "", ""); @@ -2276,31 +2321,31 @@ static void gen_opcode (unsigned long int opcode) insn_n_cycles += (70 - 38) / 2 + 38; /* average */ break; case i_CHK: - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); sync_m68k_pc (); addcycles (4); printf ("\tif (dst > src) {\n"); - printf ("\t\tSET_NFLG (®s->ccrflags, 0);\n"); - printf ("\t\tException (6, regs, oldpc);\n"); + printf ("\t\tSET_NFLG (®s.ccrflags, 0);\n"); + printf ("\t\tException (6, oldpc);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); addcycles (2); printf ("\tif ((uae_s32)dst < 0) {\n"); - printf ("\t\tSET_NFLG (®s->ccrflags, 1);\n"); - printf ("\t\tException (6, regs, oldpc);\n"); + printf ("\t\tSET_NFLG (®s.ccrflags, 1);\n"); + printf ("\t\tException (6, oldpc);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); fill_prefetch_next (); need_endlabel = 1; break; case i_CHK2: - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); fill_prefetch_0 (); - printf ("\t{uae_s32 upper,lower,reg = regs->regs[(extra >> 12) & 15];\n"); + printf ("\t{uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15];\n"); switch (curi->size) { case sz_byte: printf ("\tlower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta+1);\n"); @@ -2316,9 +2361,9 @@ static void gen_opcode (unsigned long int opcode) default: abort (); } - printf ("\tSET_ZFLG (®s->ccrflags, upper == reg || lower == reg);\n"); - printf ("\tSET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n"); - printf ("\tif ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception (6, regs, oldpc); goto %s; }\n}\n", endlabelstr); + printf ("\tSET_ZFLG (®s.ccrflags, upper == reg || lower == reg);\n"); + printf ("\tSET_CFLG_ALWAYS (®s.ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n"); + printf ("\tif ((extra & 0x800) && GET_CFLG (®s.ccrflags)) { Exception (6, oldpc); goto %s; }\n}\n", endlabelstr); need_endlabel = 1; break; @@ -2336,17 +2381,17 @@ static void gen_opcode (unsigned long int opcode) printf ("\tuae_u32 sign = (%s & val) >> %d;\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tval = %s & (uae_u32)-sign;\n", bit_mask (curi->size)); - printf ("\t\tSET_CFLG (®s->ccrflags, sign);\n"); + printf ("\t\tSET_CFLG (®s.ccrflags, sign);\n"); duplicate_carry (1); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); - printf ("\t\tSET_CFLG (®s->ccrflags, val & 1);\n"); + printf ("\t\tSET_CFLG (®s.ccrflags, val & 1);\n"); duplicate_carry (1); printf ("\t\tval >>= 1;\n"); printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)-sign;\n", @@ -2371,10 +2416,10 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); - printf ("\t\tSET_VFLG (®s->ccrflags, val != 0);\n"); - printf ("\t\tSET_CFLG (®s->ccrflags, cnt == %d ? val & 1 : 0);\n", + printf ("\t\tSET_VFLG (®s.ccrflags, val != 0);\n"); + printf ("\t\tSET_CFLG (®s.ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (1); printf ("\t\tval = 0;\n"); @@ -2386,9 +2431,9 @@ static void gen_opcode (unsigned long int opcode) bit_mask (curi->size), bit_size (curi->size) - 1, bit_mask (curi->size)); - printf ("\t\tSET_VFLG (®s->ccrflags, (val & mask) != mask && (val & mask) != 0);\n"); + printf ("\t\tSET_VFLG (®s.ccrflags, (val & mask) != mask && (val & mask) != 0);\n"); printf ("\t\tval <<= cnt - 1;\n"); - printf ("\t\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); + printf ("\t\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval <<= 1;\n"); printf ("\t\tval &= %s;\n", bit_mask (curi->size)); @@ -2410,9 +2455,9 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); - printf ("\t\tSET_CFLG (®s->ccrflags, (cnt == %d) & (val >> %d));\n", + printf ("\t\tSET_CFLG (®s.ccrflags, (cnt == %d) & (val >> %d));\n", bit_size (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval = 0;\n"); @@ -2421,7 +2466,7 @@ static void gen_opcode (unsigned long int opcode) else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); - printf ("\t\tSET_CFLG (®s->ccrflags, val & 1);\n"); + printf ("\t\tSET_CFLG (®s.ccrflags, val & 1);\n"); duplicate_carry (1); printf ("\t\tval >>= 1;\n"); printf ("\t}\n"); @@ -2442,9 +2487,9 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); - printf ("\t\tSET_CFLG (®s->ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); + printf ("\t\tSET_CFLG (®s.ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (1); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) @@ -2452,7 +2497,7 @@ static void gen_opcode (unsigned long int opcode) else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval <<= (cnt - 1);\n"); - printf ("\t\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); + printf ("\t\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval <<= 1;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); @@ -2474,7 +2519,7 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); if (source_is_imm1_8 (curi)) printf ("{"); else @@ -2485,7 +2530,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tval <<= cnt;\n"); printf ("\tval |= loval;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); - printf ("\tSET_CFLG (®s->ccrflags, val & 1);\n"); + printf ("\tSET_CFLG (®s.ccrflags, val & 1);\n"); printf ("}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); @@ -2504,7 +2549,7 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); if (source_is_imm1_8 (curi)) printf ("{"); else @@ -2515,7 +2560,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tval >>= cnt;\n"); printf ("\tval |= hival;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); - printf ("\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); + printf ("\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); @@ -2534,7 +2579,7 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { @@ -2545,11 +2590,11 @@ static void gen_opcode (unsigned long int opcode) printf ("\t{\n\tuae_u32 carry;\n"); printf ("\tuae_u32 loval = val >> (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tcarry = loval & 1;\n"); - printf ("\tval = (((val << 1) | GET_XFLG (®s->ccrflags)) << cnt) | (loval >> 1);\n"); - printf ("\tSET_XFLG (®s->ccrflags, carry);\n"); + printf ("\tval = (((val << 1) | GET_XFLG (®s.ccrflags)) << cnt) | (loval >> 1);\n"); + printf ("\tSET_XFLG (®s.ccrflags, carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); - printf ("\tSET_CFLG (®s->ccrflags, GET_XFLG (®s->ccrflags));\n"); + printf ("\tSET_CFLG (®s.ccrflags, GET_XFLG (®s.ccrflags));\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); @@ -2567,7 +2612,7 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); - printf ("\tCLEAR_CZNV (®s->ccrflags);\n"); + printf ("\tCLEAR_CZNV (®s.ccrflags);\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { @@ -2576,16 +2621,16 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tcnt--;\n"); printf ("\t{\n\tuae_u32 carry;\n"); - printf ("\tuae_u32 hival = (val << 1) | GET_XFLG (®s->ccrflags);\n"); + printf ("\tuae_u32 hival = (val << 1) | GET_XFLG (®s.ccrflags);\n"); printf ("\thival <<= (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tval >>= cnt;\n"); printf ("\tcarry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tval |= hival;\n"); - printf ("\tSET_XFLG (®s->ccrflags, carry);\n"); + printf ("\tSET_XFLG (®s.ccrflags, carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); - printf ("\tSET_CFLG (®s->ccrflags, GET_XFLG (®s->ccrflags));\n"); + printf ("\tSET_CFLG (®s.ccrflags, GET_XFLG (®s.ccrflags));\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); @@ -2604,7 +2649,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tuae_u32 cflg = val & 1;\n"); printf ("\tval = (val >> 1) | sign;\n"); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, cflg);\n"); + printf ("\tSET_CFLG (®s.ccrflags, cflg);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; @@ -2623,10 +2668,10 @@ static void gen_opcode (unsigned long int opcode) printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tsign2 = %s & val;\n", cmask (curi->size)); - printf ("\tSET_CFLG (®s->ccrflags, sign != 0);\n"); + printf ("\tSET_CFLG (®s.ccrflags, sign != 0);\n"); duplicate_carry (0); - printf ("\tSET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign));\n"); + printf ("\tSET_VFLG (®s.ccrflags, GET_VFLG (®s.ccrflags) | (sign2 != sign));\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_LSRW: @@ -2642,7 +2687,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry);\n"); + printf ("\tSET_CFLG (®s.ccrflags, carry);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; @@ -2659,7 +2704,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); + printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; @@ -2677,7 +2722,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tval <<= 1;\n"); printf ("\tif (carry) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); + printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_RORW: @@ -2694,7 +2739,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tval >>= 1;\n"); printf ("\tif (carry) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry);\n"); + printf ("\tSET_CFLG (®s.ccrflags, carry);\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROXLW: @@ -2709,9 +2754,9 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); - printf ("\tif (GET_XFLG (®s->ccrflags)) val |= 1;\n"); + printf ("\tif (GET_XFLG (®s.ccrflags)) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); + printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; @@ -2727,9 +2772,9 @@ static void gen_opcode (unsigned long int opcode) } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); - printf ("\tif (GET_XFLG (®s->ccrflags)) val |= %s;\n", cmask (curi->size)); + printf ("\tif (GET_XFLG (®s.ccrflags)) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); - printf ("\tSET_CFLG (®s->ccrflags, carry);\n"); + printf ("\tSET_CFLG (®s.ccrflags, carry);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; @@ -2738,7 +2783,7 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next (); start_brace (); printf ("\tint regno = (src >> 12) & 15;\n"); - printf ("\tuae_u32 *regp = regs->regs + regno;\n"); + printf ("\tuae_u32 *regp = regs.regs + regno;\n"); printf ("\tif (! m68k_movec2(src & 0xFFF, regp)) goto %s;\n", endlabelstr); break; case i_MOVE2C: @@ -2746,7 +2791,7 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next (); start_brace (); printf ("\tint regno = (src >> 12) & 15;\n"); - printf ("\tuae_u32 *regp = regs->regs + regno;\n"); + printf ("\tuae_u32 *regp = regs.regs + regno;\n"); printf ("\tif (! m68k_move2c(src & 0xFFF, regp)) goto %s;\n", endlabelstr); break; case i_CAS: @@ -2759,7 +2804,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tint ru = (src >> 6) & 7;\n"); printf ("\tint rc = src & 7;\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, rc)", "dst"); - printf ("\tif (GET_ZFLG (®s->ccrflags))"); + printf ("\tif (GET_ZFLG (®s.ccrflags))"); old_brace_level = n_braces; start_brace (); genastore ("(m68k_dreg (regs, ru))", curi->dmode, "dstreg", curi->size, "dst"); @@ -2772,20 +2817,20 @@ static void gen_opcode (unsigned long int opcode) break; case i_CAS2: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); - printf ("\tuae_u32 rn1 = regs->regs[(extra >> 28) & 15];\n"); - printf ("\tuae_u32 rn2 = regs->regs[(extra >> 12) & 15];\n"); + printf ("\tuae_u32 rn1 = regs.regs[(extra >> 28) & 15];\n"); + printf ("\tuae_u32 rn2 = regs.regs[(extra >> 12) & 15];\n"); if (curi->size == sz_word) { int old_brace_level = n_braces; printf ("\tuae_u16 dst1 = get_word (rn1), dst2 = get_word (rn2);\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1"); - printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2"); - printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n"); printf ("\tput_word (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n"); printf ("\tput_word (rn1, m68k_dreg (regs, (extra >> 6) & 7));\n"); printf ("\t}}\n"); pop_braces (old_brace_level); - printf ("\tif (! GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (! GET_ZFLG (®s.ccrflags)) {\n"); printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff);\n"); printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff);\n"); printf ("\t}\n"); @@ -2793,14 +2838,14 @@ static void gen_opcode (unsigned long int opcode) int old_brace_level = n_braces; printf ("\tuae_u32 dst1 = get_long (rn1), dst2 = get_long (rn2);\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1"); - printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2"); - printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n"); printf ("\tput_long (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n"); printf ("\tput_long (rn1, m68k_dreg (regs, (extra >> 6) & 7));\n"); printf ("\t}}\n"); pop_braces (old_brace_level); - printf ("\tif (! GET_ZFLG (®s->ccrflags)) {\n"); + printf ("\tif (! GET_ZFLG (®s.ccrflags)) {\n"); printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = dst1;\n"); printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = dst2;\n"); printf ("\t}\n"); @@ -2813,7 +2858,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tif (extra & 0x800)\n"); old_brace_level = n_braces; start_brace (); - printf ("\tuae_u32 src = regs->regs[(extra >> 12) & 15];\n"); + printf ("\tuae_u32 src = regs.regs[(extra >> 12) & 15];\n"); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); pop_braces (old_brace_level); @@ -2835,27 +2880,27 @@ static void gen_opcode (unsigned long int opcode) break; case i_BKPT: /* only needed for hardware emulators */ sync_m68k_pc (); - printf ("\top_illg (opcode, regs);\n"); + printf ("\top_illg (opcode);\n"); break; case i_CALLM: /* not present in 68030 */ sync_m68k_pc (); - printf ("\top_illg (opcode, regs);\n"); + printf ("\top_illg (opcode);\n"); break; case i_RTM: /* not present in 68030 */ sync_m68k_pc (); - printf ("\top_illg (opcode, regs);\n"); + printf ("\top_illg (opcode);\n"); break; case i_TRAPcc: if (curi->smode != am_unknown && curi->smode != am_illg) genamode (curi->smode, "srcreg", curi->size, "dummy", 1, 0, 0); fill_prefetch_0 (); - printf ("\tif (cctrue(®s->ccrflags, %d)) { Exception (7, regs, m68k_getpc (regs)); goto %s; }\n", curi->cc, endlabelstr); + printf ("\tif (cctrue (®s.ccrflags, %d)) { Exception (7, m68k_getpc ()); goto %s; }\n", curi->cc, endlabelstr); need_endlabel = 1; break; case i_DIVL: sync_m68k_pc (); start_brace (); - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); sync_m68k_pc (); @@ -2889,8 +2934,8 @@ static void gen_opcode (unsigned long int opcode) printf ("\ttmp = (bf0 << (offset & 7)) | (bf1 >> (8 - (offset & 7)));\n"); } printf ("\ttmp >>= (32 - width);\n"); - printf ("\tSET_NFLG_ALWAYS (®s->ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n"); - printf ("\tSET_ZFLG (®s->ccrflags, tmp == 0); SET_VFLG (®s->ccrflags, 0); SET_CFLG (®s->ccrflags, 0);\n"); + printf ("\tSET_NFLG_ALWAYS (®s.ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n"); + printf ("\tSET_ZFLG (®s.ccrflags, tmp == 0); SET_VFLG (®s.ccrflags, 0); SET_CFLG (®s.ccrflags, 0);\n"); switch (curi->mnemo) { case i_BFTST: break; @@ -2901,7 +2946,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\ttmp = ~tmp;\n"); break; case i_BFEXTS: - printf ("\tif (GET_NFLG (®s->ccrflags)) tmp |= width == 32 ? 0 : (-1 << width);\n"); + printf ("\tif (GET_NFLG (®s.ccrflags)) tmp |= width == 32 ? 0 : (-1 << width);\n"); printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = tmp;\n"); break; case i_BFCLR: @@ -2917,8 +2962,8 @@ static void gen_opcode (unsigned long int opcode) break; case i_BFINS: printf ("\ttmp = m68k_dreg (regs, (extra >> 12) & 7);\n"); - printf ("\tSET_NFLG (®s->ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n"); - printf ("\tSET_ZFLG (®s->ccrflags, tmp == 0);\n"); + printf ("\tSET_NFLG (®s.ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n"); + printf ("\tSET_ZFLG (®s.ccrflags, tmp == 0);\n"); break; default: break; @@ -3002,48 +3047,48 @@ static void gen_opcode (unsigned long int opcode) fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); - printf ("\tfpuop_arithmetic(opcode, regs, extra);\n"); + printf ("\tfpuop_arithmetic(opcode, extra);\n"); break; case i_FDBcc: fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); - printf ("\tfpuop_dbcc (opcode, regs, extra);\n"); + printf ("\tfpuop_dbcc (opcode, extra);\n"); break; case i_FScc: fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); - printf ("\tfpuop_scc (opcode, regs, extra);\n"); + printf ("\tfpuop_scc (opcode, extra);\n"); break; case i_FTRAPcc: fpulimit(); sync_m68k_pc (); start_brace (); - printf ("\tuaecptr oldpc = m68k_getpc (regs);\n"); + printf ("\tuaecptr oldpc = m68k_getpc ();\n"); if (curi->smode != am_unknown && curi->smode != am_illg) genamode (curi->smode, "srcreg", curi->size, "dummy", 1, 0, 0); sync_m68k_pc (); - printf ("\tfpuop_trapcc (opcode, regs, oldpc);\n"); + printf ("\tfpuop_trapcc (opcode, oldpc);\n"); break; case i_FBcc: fpulimit(); sync_m68k_pc (); start_brace (); - printf ("\tuaecptr pc = m68k_getpc (regs);\n"); + printf ("\tuaecptr pc = m68k_getpc ();\n"); genamode (curi->dmode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); - printf ("\tfpuop_bcc (opcode,regs, pc,extra);\n"); + printf ("\tfpuop_bcc (opcode, pc,extra);\n"); break; case i_FSAVE: fpulimit(); sync_m68k_pc (); - printf ("\tfpuop_save (opcode, regs);\n"); + printf ("\tfpuop_save (opcode);\n"); break; case i_FRESTORE: fpulimit(); sync_m68k_pc (); - printf ("\tfpuop_restore (opcode, regs);\n"); + printf ("\tfpuop_restore (opcode);\n"); break; case i_CINVL: @@ -3096,16 +3141,16 @@ static void gen_opcode (unsigned long int opcode) case i_PTESTW: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); - printf ("\tmmu_op (opcode, regs, extra);\n"); + printf ("\tmmu_op (opcode, extra);\n"); break; case i_MMUOP030: - printf ("\tuaecptr pc = m68k_getpc (regs);\n"); + printf ("\tuaecptr pc = m68k_getpc ();\n"); if (curi->smode == Areg || curi->smode == Dreg) printf("\tuae_u16 extraa = 0;\n"); else genamode (curi->smode, "srcreg", curi->size, "extra", 0, 0, 0); sync_m68k_pc (); - printf ("\tmmu_op30 (pc, opcode, regs, 1, extraa);\n"); + printf ("\tmmu_op30 (pc, opcode, 1, extraa);\n"); break; default: abort (); @@ -3283,18 +3328,18 @@ static void generate_one_opcode (int rp) if (i68000) fprintf (stblfile, "#ifndef CPUEMU_68000_ONLY\n"); fprintf (stblfile, "{ %sCPUFUNC(op_%04lx_%d), %ld }, /* %s */\n", - using_ce ? "(cpuop_func*)" : "", opcode, postfix, opcode, lookuptab[i].name); + (using_ce || using_ce020) ? "(cpuop_func*)" : "", opcode, postfix, opcode, lookuptab[i].name); if (i68000) fprintf (stblfile, "#endif\n"); } fprintf (headerfile, "extern %s op_%04lx_%d_nf;\n", - using_ce ? "cpuop_func_ce" : "cpuop_func", opcode, postfix); + (using_ce || using_ce020) ? "cpuop_func_ce" : "cpuop_func", opcode, postfix); fprintf (headerfile, "extern %s op_%04lx_%d_ff;\n", - using_ce ? "cpuop_func_ce" : "cpuop_func", opcode, postfix); + (using_ce || using_ce020) ? "cpuop_func_ce" : "cpuop_func", opcode, postfix); printf ("/* %s */\n", outopcode (opcode)); if (i68000) printf("#ifndef CPUEMU_68000_ONLY\n"); - printf ("%s REGPARAM2 CPUFUNC(op_%04lx_%d)(uae_u32 opcode, struct regstruct *regs)\n{\n", using_ce ? "void" : "unsigned long", opcode, postfix); + printf ("%s REGPARAM2 CPUFUNC(op_%04lx_%d)(uae_u32 opcode)\n{\n", (using_ce || using_ce020) ? "void" : "unsigned long", opcode, postfix); switch (table68k[opcode].stype) { case 0: smsk = 7; break; @@ -3446,12 +3491,12 @@ int main (int argc, char **argv) using_ce = 0; postfix2 = -1; - for (i = 0; i < 13; i++) { + for (i = 0; i < 14; i++) { postfix = i; if (i >= 6 && i < 11) continue; generate_stbl = 1; - if (i == 0 || i == 11 || i == 12) { + if (i == 0 || i == 11 || i == 12 || i == 13) { if (generate_stbl) fprintf (stblfile, "#ifdef CPUEMU_%d\n", postfix); postfix2 = postfix; @@ -3460,6 +3505,8 @@ int main (int argc, char **argv) generate_includes (stdout); } using_mmu = 0; + using_prefetch = 0; + using_ce = 0; cpu_level = 5 - i; if (i == 11 || i == 12) { cpu_level = 0; @@ -3469,7 +3516,13 @@ int main (int argc, char **argv) using_ce = 1; for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = 0; + } else if (i == 13) { + cpu_level = 2; + using_ce020 = 1; + for (rp = 0; rp < nr_cpuop_funcs; rp++) + opcode_next_clev[rp] = cpu_level; } + if (generate_stbl) { if (i > 0 && i < 10) fprintf (stblfile, "#ifndef CPUEMU_68000_ONLY\n"); diff --git a/hardfile.c b/hardfile.c index 317ef05f..d50b80ec 100644 --- a/hardfile.c +++ b/hardfile.c @@ -1419,7 +1419,7 @@ static int start_thread (TrapContext *context, int unit) if (hfpd->thread_running) return 1; memset (hfpd, 0, sizeof (struct hardfileprivdata)); - hfpd->base = m68k_areg (&context->regs, 6); + hfpd->base = m68k_areg (regs, 6); init_comm_pipe (&hfpd->requests, 100, 1); uae_sem_init (&hfpd->sync_sem, 0, 0); uae_start_thread (L"hardfile", hardfile_thread, hfpd, NULL); @@ -1440,8 +1440,8 @@ static int mangleunit (int unit) static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) { - uaecptr ioreq = m68k_areg (&context->regs, 1); /* IOReq */ - int unit = mangleunit (m68k_dreg (&context->regs, 0)); + uaecptr ioreq = m68k_areg (regs, 1); /* IOReq */ + int unit = mangleunit (m68k_dreg (regs, 0)); struct hardfileprivdata *hfpd = &hardfpd[unit]; int err = IOERR_OPENFAIL; int size = get_word (ioreq + 0x12); @@ -1456,7 +1456,7 @@ static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) put_long (ioreq + 24, unit); /* io_Unit */ put_byte (ioreq + 31, 0); /* io_Error */ put_byte (ioreq + 8, 7); /* ln_type = NT_REPLYMSG */ - hf_log (L"hardfile_open, unit %d (%d), OK\n", unit, m68k_dreg (&context->regs, 0)); + hf_log (L"hardfile_open, unit %d (%d), OK\n", unit, m68k_dreg (regs, 0)); return 0; } } @@ -1465,7 +1465,7 @@ static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) } else { err = IOERR_BADLENGTH; } - hf_log (L"hardfile_open, unit %d (%d), ERR=%d\n", unit, m68k_dreg (&context->regs, 0), err); + hf_log (L"hardfile_open, unit %d (%d), ERR=%d\n", unit, m68k_dreg (regs, 0), err); put_long (ioreq + 20, (uae_u32)err); put_byte (ioreq + 31, (uae_u8)err); return (uae_u32)err; @@ -1473,7 +1473,7 @@ static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) static uae_u32 REGPARAM2 hardfile_close (TrapContext *context) { - uaecptr request = m68k_areg (&context->regs, 1); /* IOReq */ + uaecptr request = m68k_areg (regs, 1); /* IOReq */ int unit = mangleunit (get_long (request + 24)); struct hardfileprivdata *hfpd = &hardfpd[unit]; @@ -1720,7 +1720,7 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata static uae_u32 REGPARAM2 hardfile_abortio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); int unit = mangleunit (get_long (request + 24)); struct hardfiledata *hfd = get_hardfile_data (unit); struct hardfileprivdata *hfpd = &hardfpd[unit]; @@ -1765,7 +1765,7 @@ static int hardfile_canquick (struct hardfiledata *hfd, uaecptr request) static uae_u32 REGPARAM2 hardfile_beginio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int cmd = get_word (request + 28); int unit = mangleunit (get_long (request + 24)); diff --git a/include/autoconf.h b/include/autoconf.h index 48ca4ad0..70e550cd 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -21,10 +21,6 @@ extern void org (uae_u32); extern uae_u32 here (void); extern uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev); -#define deftrap(f) define_trap((f), 0, L"") -#define deftrap2(f, mode, str) define_trap((f), (mode), (str)) -#define deftrapres(f, mode, str) define_trap((f), (mode | TRAPFLAG_UAERES), (str)) - extern void align (int); extern volatile int uae_int_requested; diff --git a/include/cpu_prefetch.h b/include/cpu_prefetch.h index 9bdae7d3..d2160906 100644 --- a/include/cpu_prefetch.h +++ b/include/cpu_prefetch.h @@ -1,17 +1,207 @@ -STATIC_INLINE uae_u32 get_word_prefetch (struct regstruct *regs, int o) +STATIC_INLINE uae_u32 get_word_prefetch (int o) { - uae_u32 v = regs->irc; - regs->irc = get_wordi (m68k_getpc (regs) + o); + uae_u32 v = regs.irc; + regs.irc = get_wordi (m68k_getpc () + o); return v; } -STATIC_INLINE uae_u32 get_long_prefetch (struct regstruct *regs, int o) +STATIC_INLINE uae_u32 get_long_prefetch (int o) { - uae_u32 v = get_word_prefetch (regs, o) << 16; - v |= get_word_prefetch (regs, o + 2); + uae_u32 v = get_word_prefetch (o) << 16; + v |= get_word_prefetch (o + 2); return v; } +#ifdef CPUEMU_13 + +STATIC_INLINE uae_u32 mem_access_delay_long_read_020 (uaecptr addr) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + return wait_cpu_cycle_read (addr, -1); + case CE_MEMBANK_FAST: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (4 * CYCLE_UNIT / 2); + break; + } + return get_long (addr); +} +STATIC_INLINE uae_u32 mem_access_delay_longi_read_020 (uaecptr addr) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + return wait_cpu_cycle_read (addr, -1); + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + return get_longi (addr); +} + +STATIC_INLINE uae_u32 mem_access_delay_word_read_020 (uaecptr addr) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + return wait_cpu_cycle_read (addr, 1); + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + return get_word (addr); +} +STATIC_INLINE uae_u32 mem_access_delay_wordi_read_020 (uaecptr addr) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + return wait_cpu_cycle_read (addr, 1); + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + return get_wordi (addr); +} + +STATIC_INLINE uae_u32 mem_access_delay_byte_read_020 (uaecptr addr) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + return wait_cpu_cycle_read (addr, 0); + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + + } + return get_byte (addr); +} +STATIC_INLINE void mem_access_delay_byte_write_020 (uaecptr addr, uae_u32 v) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + wait_cpu_cycle_write (addr, 0, v); + return; + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + put_byte (addr, v); +} +STATIC_INLINE void mem_access_delay_word_write_020 (uaecptr addr, uae_u32 v) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + wait_cpu_cycle_write (addr, 1, v); + return; + break; + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + put_word (addr, v); +} +STATIC_INLINE void mem_access_delay_long_write_020 (uaecptr addr, uae_u32 v) +{ + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: + wait_cpu_cycle_write (addr, -1, v); + return; + break; + case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: + do_cycles_ce (2 * CYCLE_UNIT / 2); + break; + } + put_long (addr, v); +} + +STATIC_INLINE uae_u32 get_long_ce_020 (uaecptr addr) +{ + return mem_access_delay_long_read_020 (addr); +} +STATIC_INLINE uae_u32 get_word_ce_020 (uaecptr addr) +{ + return mem_access_delay_word_read_020 (addr); +} +STATIC_INLINE uae_u32 get_byte_ce_020 (uaecptr addr) +{ + return mem_access_delay_byte_read_020 (addr); +} + +STATIC_INLINE void put_long_ce020 (uaecptr addr, uae_u32 v) +{ + mem_access_delay_long_write_020 (addr, v); +} +STATIC_INLINE void put_word_ce020 (uaecptr addr, uae_u16 v) +{ + mem_access_delay_word_write_020 (addr, v); +} +STATIC_INLINE void put_byte_ce020 (uaecptr addr, uae_u8 v) +{ + mem_access_delay_byte_write_020 (addr, v); +} + +STATIC_INLINE void fill_cache020 (uae_u32 pc) +{ + regs.prefetch020pc = pc; + if ((pc >= regs.prefetch020ptr && pc - regs.prefetch020ptr < 256) && (regs.cacr & 1)) { + regs.prefetch020 = get_long (pc); + do_cycles_ce (1 * CYCLE_UNIT); + } else { + if (!(regs.cacr & 2)) + regs.prefetch020ptr = pc; + regs.prefetch020 = mem_access_delay_long_read_020 (pc); + } +} + +STATIC_INLINE uae_u32 get_word_ce020_prefetch (int o) +{ + uae_u32 pc = m68k_getpc () + o; + if (pc == regs.prefetch020pc) + return regs.prefetch020 >> 16; + if (pc == regs.prefetch020pc + 2) + return regs.prefetch020 & 0xffff; + fill_cache020 (pc); + return regs.prefetch020 >> 16; +} + +STATIC_INLINE uae_u32 get_long_ce020_prefetch (int o) +{ + uae_u32 pc = m68k_getpc () + o; + if (pc == regs.prefetch020pc) + return regs.prefetch020; + fill_cache020 (pc); + return regs.prefetch020; +} + +STATIC_INLINE uae_u32 next_iword_020ce (void) +{ + uae_u32 r = get_word_ce020_prefetch (0); + m68k_incpc (2); + return r; +} +STATIC_INLINE uae_u32 next_ilong_020ce (void) +{ + uae_u32 r = get_long_ce020_prefetch (0); + m68k_incpc (4); + return r; +} +#endif + #ifdef CPUEMU_12 STATIC_INLINE uae_u32 mem_access_delay_word_read (uaecptr addr) @@ -21,6 +211,7 @@ STATIC_INLINE uae_u32 mem_access_delay_word_read (uaecptr addr) case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: do_cycles_ce (4 * CYCLE_UNIT / 2); break; } @@ -33,6 +224,7 @@ STATIC_INLINE uae_u32 mem_access_delay_wordi_read (uaecptr addr) case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: do_cycles_ce (4 * CYCLE_UNIT / 2); break; } @@ -46,6 +238,7 @@ STATIC_INLINE uae_u32 mem_access_delay_byte_read (uaecptr addr) case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 0); case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: do_cycles_ce (4 * CYCLE_UNIT / 2); break; @@ -60,6 +253,7 @@ STATIC_INLINE void mem_access_delay_byte_write (uaecptr addr, uae_u32 v) wait_cpu_cycle_write (addr, 0, v); return; case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: do_cycles_ce (4 * CYCLE_UNIT / 2); break; } @@ -74,6 +268,7 @@ STATIC_INLINE void mem_access_delay_word_write (uaecptr addr, uae_u32 v) return; break; case CE_MEMBANK_FAST: + case CE_MEMBANK_FAST16BIT: do_cycles_ce (4 * CYCLE_UNIT / 2); break; } @@ -94,10 +289,10 @@ STATIC_INLINE uae_u32 get_byte_ce (uaecptr addr) return mem_access_delay_byte_read (addr); } -STATIC_INLINE uae_u32 get_word_ce_prefetch (struct regstruct *regs, int o) +STATIC_INLINE uae_u32 get_word_ce_prefetch (int o) { - uae_u32 v = regs->irc; - regs->irc = get_wordi_ce (m68k_getpc (regs) + o); + uae_u32 v = regs.irc; + regs.irc = get_wordi_ce (m68k_getpc () + o); return v; } @@ -111,31 +306,31 @@ STATIC_INLINE void put_byte_ce (uaecptr addr, uae_u8 v) mem_access_delay_byte_write (addr, v); } -STATIC_INLINE void m68k_do_rts_ce (struct regstruct *regs) +STATIC_INLINE void m68k_do_rts_ce (void) { uaecptr pc; pc = get_word_ce (m68k_areg (regs, 7)) << 16; pc |= get_word_ce (m68k_areg (regs, 7) + 2); m68k_areg (regs, 7) += 4; if (pc & 1) - exception3 (0x4e75, m68k_getpc (regs), pc); + exception3 (0x4e75, m68k_getpc (), pc); else - m68k_setpc (regs, pc); + m68k_setpc (pc); } -STATIC_INLINE void m68k_do_bsr_ce (struct regstruct *regs, uaecptr oldpc, uae_s32 offset) +STATIC_INLINE void m68k_do_bsr_ce (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; put_word_ce (m68k_areg (regs, 7), oldpc >> 16); put_word_ce (m68k_areg (regs, 7) + 2, oldpc); - m68k_incpc (regs, offset); + m68k_incpc (offset); } -STATIC_INLINE void m68k_do_jsr_ce (struct regstruct *regs, uaecptr oldpc, uaecptr dest) +STATIC_INLINE void m68k_do_jsr_ce (uaecptr oldpc, uaecptr dest) { m68k_areg (regs, 7) -= 4; put_word_ce (m68k_areg (regs, 7), oldpc >> 16); put_word_ce (m68k_areg (regs, 7) + 2, oldpc); - m68k_setpc (regs, dest); + m68k_setpc (dest); } #endif \ No newline at end of file diff --git a/include/memory.h b/include/memory.h index 2c9c060c..6acbfa35 100644 --- a/include/memory.h +++ b/include/memory.h @@ -99,6 +99,7 @@ typedef struct { #define CE_MEMBANK_FAST 0 #define CE_MEMBANK_CHIP 1 #define CE_MEMBANK_CIA 2 +#define CE_MEMBANK_FAST16BIT 3 extern uae_u8 ce_banktype[256]; extern uae_u8 *filesysory; @@ -183,23 +184,23 @@ extern void free_fastmemory (void); STATIC_INLINE uae_u32 get_long (uaecptr addr) { - return longget(addr); + return longget (addr); } STATIC_INLINE uae_u32 get_word (uaecptr addr) { - return wordget(addr); + return wordget (addr); } STATIC_INLINE uae_u32 get_byte (uaecptr addr) { - return byteget(addr); + return byteget (addr); } STATIC_INLINE uae_u32 get_longi(uaecptr addr) { - return longgeti(addr); + return longgeti (addr); } STATIC_INLINE uae_u32 get_wordi(uaecptr addr) { - return wordgeti(addr); + return wordgeti (addr); } /* diff --git a/include/newcpu.h b/include/newcpu.h index a8b8fd39..448a761c 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -49,8 +49,8 @@ extern int fpp_movem_next[256]; struct regstruct; -typedef unsigned long REGPARAM3 cpuop_func (uae_u32, struct regstruct *regs) REGPARAM; -typedef void REGPARAM3 cpuop_func_ce (uae_u32, struct regstruct *regs) REGPARAM; +typedef unsigned long REGPARAM3 cpuop_func (uae_u32) REGPARAM; +typedef void REGPARAM3 cpuop_func_ce (uae_u32) REGPARAM; struct cputbl { cpuop_func *handler; @@ -67,7 +67,7 @@ struct comptbl { }; #endif -extern unsigned long REGPARAM3 op_illg (uae_u32, struct regstruct *regs) REGPARAM; +extern unsigned long REGPARAM3 op_illg (uae_u32) REGPARAM; typedef uae_u8 flagtype; @@ -97,6 +97,10 @@ extern struct regstruct uae_u16 irc, ir; uae_u32 spcflags; + + uae_u32 prefetch020; + uae_u32 prefetch020pc; + uae_u32 prefetch020ptr; uaecptr usp, isp, msp; uae_u16 sr; @@ -148,139 +152,137 @@ extern int irqdelay[15]; extern int mmu_enabled, mmu_triggered; extern int cpu_cycles; -STATIC_INLINE void set_special (struct regstruct *regs, uae_u32 x) +STATIC_INLINE void set_special (uae_u32 x) { - regs->spcflags |= x; + regs.spcflags |= x; cycles_do_special (); } -STATIC_INLINE void unset_special (struct regstruct *regs, uae_u32 x) +STATIC_INLINE void unset_special (uae_u32 x) { - regs->spcflags &= ~x; + regs.spcflags &= ~x; } -#define m68k_dreg(r,num) ((r)->regs[(num)]) -#define m68k_areg(r,num) (((r)->regs + 8)[(num)]) +#define m68k_dreg(r,num) ((r).regs[(num)]) +#define m68k_areg(r,num) (((r).regs + 8)[(num)]) -STATIC_INLINE void m68k_setpc (struct regstruct *regs, uaecptr newpc) +STATIC_INLINE void m68k_setpc (uaecptr newpc) { - regs->pc_p = regs->pc_oldp = get_real_address (newpc); - regs->pc = newpc; + regs.pc_p = regs.pc_oldp = get_real_address (newpc); + regs.pc = newpc; } -STATIC_INLINE uaecptr m68k_getpc (struct regstruct *regs) +STATIC_INLINE uaecptr m68k_getpc (void) { - return (uaecptr)(regs->pc + ((uae_u8*)regs->pc_p - (uae_u8*)regs->pc_oldp)); + return (uaecptr)(regs.pc + ((uae_u8*)regs.pc_p - (uae_u8*)regs.pc_oldp)); } -#define M68K_GETPC m68k_getpc(®s) +#define M68K_GETPC m68k_getpc() -STATIC_INLINE uaecptr m68k_getpc_p (struct regstruct *regs, uae_u8 *p) +STATIC_INLINE uaecptr m68k_getpc_p (uae_u8 *p) { - return (uaecptr)(regs->pc + ((uae_u8*)p - (uae_u8*)regs->pc_oldp)); + return (uaecptr)(regs.pc + ((uae_u8*)p - (uae_u8*)regs.pc_oldp)); } -#define m68k_incpc(regs, o) ((regs)->pc_p += (o)) +#define m68k_incpc(o) ((regs).pc_p += (o)) -STATIC_INLINE void m68k_setpci(struct regstruct *regs, uaecptr newpc) +STATIC_INLINE void m68k_setpci (uaecptr newpc) { - regs->pc = newpc; + regs.pc = newpc; } -STATIC_INLINE uaecptr m68k_getpci(struct regstruct *regs) +STATIC_INLINE uaecptr m68k_getpci (void) { - return regs->pc; + return regs.pc; } -STATIC_INLINE void m68k_incpci(struct regstruct *regs, int o) +STATIC_INLINE void m68k_incpci (int o) { - regs->pc += o; + regs.pc += o; } -STATIC_INLINE void m68k_do_rts(struct regstruct *regs) +STATIC_INLINE void m68k_do_rts (void) { - m68k_setpc(regs, get_long(m68k_areg (regs, 7))); + m68k_setpc (get_long(m68k_areg (regs, 7))); m68k_areg (regs, 7) += 4; } -STATIC_INLINE void m68k_do_rtsi(struct regstruct *regs) +STATIC_INLINE void m68k_do_rtsi (void) { - m68k_setpci(regs, get_long(m68k_areg (regs, 7))); + m68k_setpci (get_long (m68k_areg (regs, 7))); m68k_areg (regs, 7) += 4; } -STATIC_INLINE void m68k_do_bsr(struct regstruct *regs, uaecptr oldpc, uae_s32 offset) +STATIC_INLINE void m68k_do_bsr (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; - put_long(m68k_areg (regs, 7), oldpc); - m68k_incpc(regs, offset); + put_long (m68k_areg (regs, 7), oldpc); + m68k_incpc (offset); } -STATIC_INLINE void m68k_do_bsri(struct regstruct *regs, uaecptr oldpc, uae_s32 offset) +STATIC_INLINE void m68k_do_bsri (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; - put_long(m68k_areg (regs, 7), oldpc); - m68k_incpci(regs, offset); + put_long (m68k_areg (regs, 7), oldpc); + m68k_incpci (offset); } -STATIC_INLINE void m68k_do_jsr(struct regstruct *regs, uaecptr oldpc, uaecptr dest) +STATIC_INLINE void m68k_do_jsr (uaecptr oldpc, uaecptr dest) { m68k_areg (regs, 7) -= 4; put_long(m68k_areg (regs, 7), oldpc); - m68k_setpc(regs, dest); + m68k_setpc (dest); } -#define get_ibyte(regs, o) do_get_mem_byte((uae_u8 *)((regs)->pc_p + (o) + 1)) -#define get_iword(regs, o) do_get_mem_word((uae_u16 *)((regs)->pc_p + (o))) -#define get_ilong(regs, o) do_get_mem_long((uae_u32 *)((regs)->pc_p + (o))) +#define get_ibyte(o) do_get_mem_byte((uae_u8 *)((regs).pc_p + (o) + 1)) +#define get_iword(o) do_get_mem_word((uae_u16 *)((regs).pc_p + (o))) +#define get_ilong(o) do_get_mem_long((uae_u32 *)((regs).pc_p + (o))) #define get_iwordi(o) get_wordi(o) #define get_ilongi(o) get_longi(o) /* These are only used by the 68020/68881 code, and therefore don't * need to handle prefetch. */ -STATIC_INLINE uae_u32 next_ibyte (struct regstruct *regs) +STATIC_INLINE uae_u32 next_ibyte (void) { - uae_u32 r = get_ibyte (regs, 0); - m68k_incpc (regs, 2); + uae_u32 r = get_ibyte (0); + m68k_incpc (2); return r; } - -STATIC_INLINE uae_u32 next_iword (struct regstruct *regs) +STATIC_INLINE uae_u32 next_iword (void) { - uae_u32 r = get_iword (regs, 0); - m68k_incpc (regs, 2); + uae_u32 r = get_iword (0); + m68k_incpc (2); return r; } -STATIC_INLINE uae_u32 next_iwordi (struct regstruct *regs) +STATIC_INLINE uae_u32 next_iwordi (void) { - uae_u32 r = get_iwordi (m68k_getpci(regs)); - m68k_incpc (regs, 2); + uae_u32 r = get_iwordi (m68k_getpci ()); + m68k_incpc (2); return r; } - -STATIC_INLINE uae_u32 next_ilong (struct regstruct *regs) +STATIC_INLINE uae_u32 next_ilong (void) { - uae_u32 r = get_ilong (regs, 0); - m68k_incpc (regs, 4); + uae_u32 r = get_ilong (0); + m68k_incpc (4); return r; } -STATIC_INLINE uae_u32 next_ilongi (struct regstruct *regs) +STATIC_INLINE uae_u32 next_ilongi (void) { - uae_u32 r = get_ilongi (m68k_getpci(regs)); - m68k_incpc (regs, 4); + uae_u32 r = get_ilongi (m68k_getpci ()); + m68k_incpc (4); return r; } -extern void m68k_setstopped (struct regstruct *regs); -extern void m68k_resumestopped (struct regstruct *regs); +extern void m68k_setstopped (void); +extern void m68k_resumestopped (void); -extern uae_u32 REGPARAM3 get_disp_ea_020 (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM; -extern uae_u32 REGPARAM3 get_disp_ea_020i (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM; -extern uae_u32 REGPARAM3 get_disp_ea_000 (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM; +extern uae_u32 REGPARAM3 get_disp_ea_020 (uae_u32 base, uae_u32 dp) REGPARAM; +extern uae_u32 REGPARAM3 get_disp_ea_020ce (uae_u32 base, uae_u32 dp) REGPARAM; +extern uae_u32 REGPARAM3 get_disp_ea_000 (uae_u32 base, uae_u32 dp) REGPARAM; extern void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr); extern void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt); extern void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode); extern int get_cpu_model(void); -extern void REGPARAM3 MakeSR (struct regstruct *regs) REGPARAM; -extern void REGPARAM3 MakeFromSR (struct regstruct *regs) REGPARAM; -extern void REGPARAM3 Exception (int, struct regstruct *regs, uaecptr) REGPARAM; +extern void REGPARAM3 MakeSR (void) REGPARAM; +extern void REGPARAM3 MakeFromSR (void) REGPARAM; +extern void REGPARAM3 Exception (int, uaecptr) REGPARAM; extern void NMI (void); extern void NMI_delayed (void); extern void prepare_interrupt (void); @@ -300,17 +302,17 @@ extern void m68k_reset (int); extern int getDivu68kCycles(uae_u32 dividend, uae_u16 divisor); extern int getDivs68kCycles(uae_s32 dividend, uae_s16 divisor); -extern void mmu_op (uae_u32, struct regstruct *regs, uae_u32); -extern void mmu_op30 (uaecptr, uae_u32, struct regstruct *regs, int, uaecptr); - -extern void fpuop_arithmetic(uae_u32, struct regstruct *regs, uae_u16); -extern void fpuop_dbcc(uae_u32, struct regstruct *regs, uae_u16); -extern void fpuop_scc(uae_u32, struct regstruct *regs, uae_u16); -extern void fpuop_trapcc(uae_u32, struct regstruct *regs, uaecptr); -extern void fpuop_bcc(uae_u32, struct regstruct *regs, uaecptr, uae_u32); -extern void fpuop_save(uae_u32, struct regstruct *regs); -extern void fpuop_restore(uae_u32, struct regstruct *regs); -extern uae_u32 fpp_get_fpsr (const struct regstruct *regs); +extern void mmu_op (uae_u32, uae_u32); +extern void mmu_op30 (uaecptr, uae_u32, int, uaecptr); + +extern void fpuop_arithmetic(uae_u32, uae_u16); +extern void fpuop_dbcc(uae_u32, uae_u16); +extern void fpuop_scc(uae_u32, uae_u16); +extern void fpuop_trapcc(uae_u32, uaecptr); +extern void fpuop_bcc(uae_u32, uaecptr, uae_u32); +extern void fpuop_save(uae_u32); +extern void fpuop_restore(uae_u32); +extern uae_u32 fpp_get_fpsr (void); extern void fpu_reset (void); extern void fpux_save (int*); extern void fpux_restore (int*); @@ -320,7 +322,7 @@ extern void exception3i (uae_u32 opcode, uaecptr addr, uaecptr fault); extern void exception2 (uaecptr addr, uaecptr fault); extern void cpureset (void); -extern void fill_prefetch_slow (struct regstruct *regs); +extern void fill_prefetch_slow (void); #define CPU_OP_NAME(a) op ## a @@ -340,14 +342,16 @@ extern const struct cputbl op_smalltbl_5_ff[]; extern const struct cputbl op_smalltbl_11_ff[]; /* 68000 slow but compatible and cycle-exact. */ extern const struct cputbl op_smalltbl_12_ff[]; +/* 68020 slow but compatible */ +extern const struct cputbl op_smalltbl_13_ff[]; extern cpuop_func *cpufunctbl[65536] ASM_SYM_FOR_FUNC ("cpufunctbl"); -void newcpu_showstate(void); +void newcpu_showstate (void); #ifdef JIT -extern void flush_icache(uaecptr, int n); -extern void compemu_reset(void); +extern void flush_icache (uaecptr, int n); +extern void compemu_reset (void); extern int check_prefs_changed_comp (void); #else #define flush_icache(X) do {} while (0) diff --git a/include/traps.h b/include/traps.h index 3a8a2cc5..fac8354c 100644 --- a/include/traps.h +++ b/include/traps.h @@ -16,10 +16,7 @@ /* * Data passed to a trap handler */ -typedef struct TrapContext -{ - struct regstruct regs; -} TrapContext; +typedef struct TrapContext TrapContext; #define TRAPFLAG_NO_REGSAVE 1 @@ -37,7 +34,7 @@ typedef uae_u32 (REGPARAM3 *TrapHandler) (TrapContext *) REGPARAM; /* * Interface with 68k interpreter */ -extern void REGPARAM3 m68k_handle_trap (unsigned int trap_num, struct regstruct *) REGPARAM; +extern void REGPARAM3 m68k_handle_trap (unsigned int trap_num) REGPARAM; unsigned int define_trap (TrapHandler handler_func, int flags, const TCHAR *name); uaecptr find_trap (const TCHAR *name); @@ -54,4 +51,8 @@ extern uae_u32 CallFunc (TrapContext *context, uaecptr func); void init_traps (void); void init_extended_traps (void); +#define deftrap(f) define_trap((f), 0, L"") +#define deftrap2(f, mode, str) define_trap((f), (mode), (str)) +#define deftrapres(f, mode, str) define_trap((f), (mode | TRAPFLAG_UAERES), (str)) + #endif diff --git a/jit/compemu_fpp.c b/jit/compemu_fpp.c index ed78dd2e..bafe0b69 100644 --- a/jit/compemu_fpp.c +++ b/jit/compemu_fpp.c @@ -515,8 +515,8 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra) else { abort(); if (!comp_fp_adr (opcode)) { - m68k_setpc (®s, m68k_getpc (®s) - 4); - op_illg (opcode, ®s); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); } else put_byte (ad, cc ? 0xff : 0x00); @@ -789,8 +789,8 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) } ad=comp_fp_adr (opcode); if (ad<0) { - m68k_setpc (®s, m68k_getpc (®s) - 4); - op_illg (opcode, ®s); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } switch ((extra >> 11) & 3) { @@ -859,8 +859,8 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) } ad=comp_fp_adr (opcode); if (ad<0) { - m68k_setpc (®s, m68k_getpc (®s) - 4); - op_illg (opcode, ®s); + m68k_setpc (m68k_getpc () - 4); + op_illg (opcode); return; } switch ((extra >> 11) & 3) { diff --git a/jit/compemu_raw_x86.c b/jit/compemu_raw_x86.c index 1555b286..e4b52fc1 100644 --- a/jit/compemu_raw_x86.c +++ b/jit/compemu_raw_x86.c @@ -1941,7 +1941,7 @@ int EvalException (LPEXCEPTION_POINTERS blah, int n_except) #endif invalidate_block(bi); raise_in_cl_list(bi); - set_special(®s, 0); + set_special(0); return EXCEPTION_CONTINUE_EXECUTION; } bi=bi->next; @@ -1962,7 +1962,7 @@ int EvalException (LPEXCEPTION_POINTERS blah, int n_except) #endif invalidate_block(bi); raise_in_cl_list(bi); - set_special(®s, 0); + set_special(0); return EXCEPTION_CONTINUE_EXECUTION; } bi=bi->next; @@ -2189,7 +2189,7 @@ static void vec(int x, struct sigcontext sc) bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); - set_special(®s, 0); + set_special(0); return; } bi=bi->next; @@ -2208,7 +2208,7 @@ static void vec(int x, struct sigcontext sc) bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); - set_special(®s, 0); + set_special(0); return; } bi=bi->next; diff --git a/jit/compemu_support.c b/jit/compemu_support.c index 5bd7457f..ea5f590d 100644 --- a/jit/compemu_support.c +++ b/jit/compemu_support.c @@ -5846,7 +5846,7 @@ static void flush_icache_hard(uae_u32 ptr, int n) if (!compiled_code) return; current_compile_p=compiled_code; - set_special(®s, 0); /* To get out of compiled code */ + set_special(0); /* To get out of compiled code */ } diff --git a/main.c b/main.c index 6ee719ee..36fbb6e6 100644 --- a/main.c +++ b/main.c @@ -98,8 +98,6 @@ static void fixup_prefs_dim2 (struct wh *wh) wh->width = 3072; if (wh->height > 2048) wh->height = 2048; - wh->width += 7; - wh->width &= ~7; } void fixup_prefs_dimensions (struct uae_prefs *prefs) diff --git a/memory.c b/memory.c index f874e744..d6915a2a 100644 --- a/memory.c +++ b/memory.c @@ -2086,7 +2086,7 @@ uae_u8 *REGPARAM2 default_xlate (uaecptr a) if (be_cnt < 3) { int i, j; uaecptr a2 = a - 32; - uaecptr a3 = m68k_getpc (®s) - 32; + uaecptr a3 = m68k_getpc () - 32; write_log (L"Your Amiga program just did something terribly stupid %08X PC=%08X\n", a, M68K_GETPC); m68k_dumpstate (0, 0); for (i = 0; i < 10; i++) { @@ -2105,9 +2105,9 @@ uae_u8 *REGPARAM2 default_xlate (uaecptr a) be_cnt = 0; } else { regs.panic = 1; - regs.panic_pc = m68k_getpc (®s); + regs.panic_pc = m68k_getpc (); regs.panic_addr = a; - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); } } } @@ -3353,6 +3353,37 @@ static void allocate_memory (void) a3000hmem_filepos = 0; } +static void fill_ce_banks (void) +{ + int i; + + memset (ce_banktype, CE_MEMBANK_FAST, 256); + if (&get_mem_bank (0) == &chipmem_bank) { + for (i = 0; i < (0x200000 >> 16); i++) + ce_banktype[i] = CE_MEMBANK_CHIP; + } + if (!currprefs.cs_slowmemisfast) { + for (i = (0xc00000 >> 16); i < (0xe00000 >> 16); i++) + ce_banktype[i] = CE_MEMBANK_CHIP; + } + for (i = (0xd00000 >> 16); i < (0xe00000 >> 16); i++) + ce_banktype[i] = CE_MEMBANK_CHIP; + for (i = (0xa00000 >> 16); i < (0xc00000 >> 16); i++) { + addrbank *b; + ce_banktype[i] = CE_MEMBANK_CIA; + b = &get_mem_bank (i << 16); + if (b != &cia_bank) + ce_banktype[i] = CE_MEMBANK_FAST; + } + // CD32 ROM is 16-bit + if (currprefs.cs_cd32cd) { + for (i = (0xe00000 >> 16); i < (0xe80000 >> 16); i++) + ce_banktype[i] = CE_MEMBANK_FAST16BIT; + for (i = (0xf80000 >> 16); i <= (0xff0000 >> 16); i++) + ce_banktype[i] = CE_MEMBANK_FAST16BIT; + } +} + void map_overlay (int chip) { int size; @@ -3361,8 +3392,10 @@ void map_overlay (int chip) size = allocated_chipmem >= 0x180000 ? (allocated_chipmem >> 16) : 32; cb = &chipmem_bank; #ifdef AGA +#if 0 if (currprefs.cpu_cycle_exact && currprefs.cpu_model >= 68020) cb = &chipmem_bank_ce2; +#endif #endif if (chip) { map_banks (&dummy_bank, 0, 32, 0); @@ -3396,8 +3429,9 @@ void map_overlay (int chip) rb = &kickmem_bank; map_banks (rb, 0, size, 0x80000); } + fill_ce_banks (); if (savestate_state != STATE_RESTORE && savestate_state != STATE_REWIND && valid_address (regs.pc, 4)) - m68k_setpc (®s, m68k_getpc (®s)); + m68k_setpc (m68k_getpc ()); } void memory_reset (void) @@ -3753,28 +3787,6 @@ void memory_hardreset (void) expansion_clear (); } -static void fill_ce_banks (void) -{ - int i; - - memset (ce_banktype, CE_MEMBANK_FAST, 256); - for (i = 0; i < (0x200000 >> 16); i++) - ce_banktype[i] = CE_MEMBANK_CHIP; - if (!currprefs.cs_slowmemisfast) { - for (i = (0xc00000 >> 16); i < (0xe00000 >> 16); i++) - ce_banktype[i] = CE_MEMBANK_CHIP; - } - for (i = (0xd00000 >> 16); i < (0xe00000 >> 16); i++) - ce_banktype[i] = CE_MEMBANK_CHIP; - for (i = (0xa00000 >> 16); i < (0xc00000 >> 16); i++) { - addrbank *b; - ce_banktype[i] = CE_MEMBANK_CIA; - b = &get_mem_bank (i << 16); - if (b != &cia_bank) - ce_banktype[i] = CE_MEMBANK_FAST; - } -} - void map_banks (addrbank *bank, int start, int size, int realsize) { int bnr, old; diff --git a/native2amiga.c b/native2amiga.c index 6ddd3176..86d5dd6a 100644 --- a/native2amiga.c +++ b/native2amiga.c @@ -115,14 +115,14 @@ void uae_NewList (uaecptr list) uaecptr uae_AllocMem (TrapContext *context, uae_u32 size, uae_u32 flags) { - m68k_dreg (&context->regs, 0) = size; - m68k_dreg (&context->regs, 1) = flags; + m68k_dreg (regs, 0) = size; + m68k_dreg (regs, 1) = flags; return CallLib (context, get_long (4), -198); /* AllocMem */ } void uae_FreeMem (TrapContext *context, uaecptr memory, uae_u32 size) { - m68k_dreg (&context->regs, 0) = size; - m68k_areg (&context->regs, 1) = memory; + m68k_dreg (regs, 0) = size; + m68k_areg (regs, 1) = memory; CallLib (context, get_long (4), -0xD2); /* FreeMem */ } diff --git a/newcpu.c b/newcpu.c index 5c9e7d95..80eb6c36 100644 --- a/newcpu.c +++ b/newcpu.c @@ -135,6 +135,7 @@ static void set_cpu_caches (void) if (regs.cacr & 0x08) { regs.cacr &= ~0x08; flush_icache (0, 3); + regs.prefetch020pc = regs.prefetch020ptr = 0xff000000; } } else { set_cache_state ((regs.cacr & 0x8000) ? 1 : 0); @@ -146,11 +147,11 @@ STATIC_INLINE void count_instr (unsigned int opcode) { } -static unsigned long REGPARAM3 op_illg_1 (uae_u32 opcode, struct regstruct *regs) REGPARAM; +static unsigned long REGPARAM3 op_illg_1 (uae_u32 opcode) REGPARAM; -static unsigned long REGPARAM2 op_illg_1 (uae_u32 opcode, struct regstruct *regs) +static unsigned long REGPARAM2 op_illg_1 (uae_u32 opcode) { - op_illg (opcode, regs); + op_illg (opcode); return 4; } @@ -180,6 +181,8 @@ static void build_cpufunctbl (void) case 68020: lvl = 2; tbl = op_smalltbl_3_ff; + if (currprefs.cpu_cycle_exact) + tbl = op_smalltbl_13_ff; break; case 68010: lvl = 1; @@ -256,16 +259,16 @@ static void build_cpufunctbl (void) set_cpu_caches (); } -void fill_prefetch_slow (struct regstruct *regs) +void fill_prefetch_slow (void) { #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact) { - regs->ir = get_word_ce (m68k_getpc (regs)); - regs->irc = get_word_ce (m68k_getpc (regs) + 2); + regs.ir = get_word_ce (m68k_getpc ()); + regs.irc = get_word_ce (m68k_getpc () + 2); } else { #endif - regs->ir = get_word (m68k_getpc (regs)); - regs->irc = get_word (m68k_getpc (regs) + 2); + regs.ir = get_word (m68k_getpc ()); + regs.irc = get_word (m68k_getpc () + 2); #ifdef CPUEMU_12 } #endif @@ -308,7 +311,7 @@ void check_prefs_changed_cpu (void) prefs_changed_cpu (); if (!currprefs.cpu_compatible && changed_prefs.cpu_compatible) - fill_prefetch_slow (®s); + fill_prefetch_slow (); build_cpufunctbl (); changed = 1; } @@ -321,7 +324,7 @@ void check_prefs_changed_cpu (void) currprefs.cpu_idle = changed_prefs.cpu_idle; } if (changed) - set_special (®s, SPCFLAG_BRK); + set_special (SPCFLAG_BRK); } @@ -440,7 +443,7 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes _stprintf (offtxt, L"-$%04x", -disp16); else _stprintf (offtxt, L"$%04x", disp16); - addr = m68k_areg (®s, reg) + disp16; + addr = m68k_areg (regs, reg) + disp16; _stprintf (buffer, L"(A%d, %s) == $%08lx", reg, offtxt, (unsigned long)addr); } break; @@ -448,13 +451,13 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; - dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r); + dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0, disp = 0; - uae_s32 base = m68k_areg (®s, reg); + uae_s32 base = m68k_areg (regs, reg); TCHAR name[10]; _stprintf (name, L"A%d, ", reg); if (dp & 0x80) { base = 0; name[0] = 0; } @@ -477,7 +480,7 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes disp, outer, (unsigned long)addr); } else { - addr = m68k_areg (®s, reg) + (uae_s32)((uae_s8)disp8) + dispreg; + addr = m68k_areg (regs, reg) + (uae_s32)((uae_s8)disp8) + dispreg; _stprintf (buffer, L"(A%d, %c%d.%c*%d, $%02x) == $%08lx", reg, dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3), disp8, @@ -485,17 +488,17 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes } break; case PC16: - addr = m68k_getpc (®s) + m68kpc_offset; + addr = m68k_getpc () + m68kpc_offset; disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; addr += (uae_s16)disp16; _stprintf (buffer, L"(PC,$%04x) == $%08lx", disp16 & 0xffff, (unsigned long)addr); break; case PC8r: - addr = m68k_getpc (®s) + m68kpc_offset; + addr = m68k_getpc () + m68kpc_offset; dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; - dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r); + dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; @@ -606,30 +609,30 @@ static int verify_ea (int reg, amodes mode, wordsizes size, uae_u32 *val) switch (mode){ case Dreg: - *val = m68k_dreg (®s, reg); + *val = m68k_dreg (regs, reg); return 1; case Areg: - *val = m68k_areg (®s, reg); + *val = m68k_areg (regs, reg); return 1; case Aind: case Aipi: - addr = m68k_areg (®s, reg); + addr = m68k_areg (regs, reg); break; case Apdi: - addr = m68k_areg (®s, reg); + addr = m68k_areg (regs, reg); break; case Ad16: disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; - addr = m68k_areg (®s, reg) + (uae_s16)disp16; + addr = m68k_areg (regs, reg) + (uae_s16)disp16; break; case Ad8r: - addr = m68k_areg (®s, reg); + addr = m68k_areg (regs, reg); d8r_common: dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; - dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r); + dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; @@ -655,12 +658,12 @@ static int verify_ea (int reg, amodes mode, wordsizes size, uae_u32 *val) } break; case PC16: - addr = m68k_getpc (®s) + m68kpc_offset; + addr = m68k_getpc () + m68kpc_offset; disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; addr += (uae_s16)disp16; break; case PC8r: - addr = m68k_getpc (®s) + m68kpc_offset; + addr = m68k_getpc () + m68kpc_offset; goto d8r_common; case absw: addr = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); @@ -710,7 +713,7 @@ static int verify_ea (int reg, amodes mode, wordsizes size, uae_u32 *val) if ((addr & 1) == 0) return 1; - last_addr_for_exception_3 = m68k_getpc (®s) + m68kpc_offset; + last_addr_for_exception_3 = m68k_getpc () + m68kpc_offset; last_fault_for_exception_3 = addr; last_writeaccess_for_exception_3 = 0; last_instructionaccess_for_exception_3 = 0; @@ -723,10 +726,10 @@ int get_cpu_model (void) return currprefs.cpu_model; } -uae_u32 REGPARAM2 get_disp_ea_020 (struct regstruct *regs, uae_u32 base, uae_u32 dp) +uae_u32 REGPARAM2 get_disp_ea_020 (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; - uae_s32 regd = regs->regs[reg]; + uae_s32 regd = regs.regs[reg]; if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; regd <<= (dp >> 9) & 3; @@ -735,11 +738,11 @@ uae_u32 REGPARAM2 get_disp_ea_020 (struct regstruct *regs, uae_u32 base, uae_u32 if (dp & 0x80) base = 0; if (dp & 0x40) regd = 0; - if ((dp & 0x30) == 0x20) base += (uae_s32)(uae_s16) next_iword (regs); - if ((dp & 0x30) == 0x30) base += next_ilong (regs); + if ((dp & 0x30) == 0x20) base += (uae_s32)(uae_s16) next_iword (); + if ((dp & 0x30) == 0x30) base += next_ilong (); - if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16) next_iword (regs); - if ((dp & 0x3) == 0x3) outer = next_ilong (regs); + if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16) next_iword (); + if ((dp & 0x3) == 0x3) outer = next_ilong (); if ((dp & 0x4) == 0) base += regd; if (dp & 0x3) base = get_long (base); @@ -751,10 +754,39 @@ uae_u32 REGPARAM2 get_disp_ea_020 (struct regstruct *regs, uae_u32 base, uae_u32 } } -uae_u32 REGPARAM3 get_disp_ea_000 (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM +uae_u32 REGPARAM2 get_disp_ea_020ce (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; - uae_s32 regd = regs->regs[reg]; + uae_s32 regd = regs.regs[reg]; + if ((dp & 0x800) == 0) + regd = (uae_s32)(uae_s16)regd; + regd <<= (dp >> 9) & 3; + if (dp & 0x100) { + uae_s32 outer = 0; + if (dp & 0x80) base = 0; + if (dp & 0x40) regd = 0; + + if ((dp & 0x30) == 0x20) base += (uae_s32)(uae_s16) next_iword_020ce (); + if ((dp & 0x30) == 0x30) base += next_ilong_020ce (); + + if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16) next_iword_020ce (); + if ((dp & 0x3) == 0x3) outer = next_ilong_020ce (); + + if ((dp & 0x4) == 0) base += regd; + if (dp & 0x3) base = get_long (base); + if (dp & 0x4) base += regd; + + return base + outer; + } else { + return base + (uae_s32)((uae_s8)dp) + regd; + } +} + + +uae_u32 REGPARAM3 get_disp_ea_000 (uae_u32 base, uae_u32 dp) REGPARAM +{ + int reg = (dp >> 12) & 15; + uae_s32 regd = regs.regs[reg]; #if 1 if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; @@ -775,106 +807,95 @@ uae_u32 REGPARAM3 get_disp_ea_000 (struct regstruct *regs, uae_u32 base, uae_u32 #endif } -void REGPARAM2 MakeSR (struct regstruct *regs) +void REGPARAM2 MakeSR (void) { -#if 0 - assert ((regs.t1 & 1) == regs->t1); - assert ((regs.t0 & 1) == regs->t0); - assert ((regs.s & 1) == regs->s); - assert ((regs.m & 1) == regs->m); - assert ((XFLG & 1) == XFLG); - assert ((NFLG & 1) == NFLG); - assert ((ZFLG & 1) == ZFLG); - assert ((VFLG & 1) == VFLG); - assert ((CFLG & 1) == CFLG); -#endif - regs->sr = ((regs->t1 << 15) | (regs->t0 << 14) - | (regs->s << 13) | (regs->m << 12) | (regs->intmask << 8) - | (GET_XFLG (®s->ccrflags) << 4) | (GET_NFLG (®s->ccrflags) << 3) - | (GET_ZFLG (®s->ccrflags) << 2) | (GET_VFLG (®s->ccrflags) << 1) - | GET_CFLG (®s->ccrflags)); -} - -void REGPARAM2 MakeFromSR (struct regstruct *regs) -{ - int oldm = regs->m; - int olds = regs->s; - - SET_XFLG (®s->ccrflags, (regs->sr >> 4) & 1); - SET_NFLG (®s->ccrflags, (regs->sr >> 3) & 1); - SET_ZFLG (®s->ccrflags, (regs->sr >> 2) & 1); - SET_VFLG (®s->ccrflags, (regs->sr >> 1) & 1); - SET_CFLG (®s->ccrflags, regs->sr & 1); - if (regs->t1 == ((regs->sr >> 15) & 1) && - regs->t0 == ((regs->sr >> 14) & 1) && - regs->s == ((regs->sr >> 13) & 1) && - regs->m == ((regs->sr >> 12) & 1) && - regs->intmask == ((regs->sr >> 8) & 7)) + regs.sr = ((regs.t1 << 15) | (regs.t0 << 14) + | (regs.s << 13) | (regs.m << 12) | (regs.intmask << 8) + | (GET_XFLG (®s.ccrflags) << 4) | (GET_NFLG (®s.ccrflags) << 3) + | (GET_ZFLG (®s.ccrflags) << 2) | (GET_VFLG (®s.ccrflags) << 1) + | GET_CFLG (®s.ccrflags)); +} + +void REGPARAM2 MakeFromSR (void) +{ + int oldm = regs.m; + int olds = regs.s; + + SET_XFLG (®s.ccrflags, (regs.sr >> 4) & 1); + SET_NFLG (®s.ccrflags, (regs.sr >> 3) & 1); + SET_ZFLG (®s.ccrflags, (regs.sr >> 2) & 1); + SET_VFLG (®s.ccrflags, (regs.sr >> 1) & 1); + SET_CFLG (®s.ccrflags, regs.sr & 1); + if (regs.t1 == ((regs.sr >> 15) & 1) && + regs.t0 == ((regs.sr >> 14) & 1) && + regs.s == ((regs.sr >> 13) & 1) && + regs.m == ((regs.sr >> 12) & 1) && + regs.intmask == ((regs.sr >> 8) & 7)) return; - regs->t1 = (regs->sr >> 15) & 1; - regs->t0 = (regs->sr >> 14) & 1; - regs->s = (regs->sr >> 13) & 1; - regs->m = (regs->sr >> 12) & 1; - regs->intmask = (regs->sr >> 8) & 7; + regs.t1 = (regs.sr >> 15) & 1; + regs.t0 = (regs.sr >> 14) & 1; + regs.s = (regs.sr >> 13) & 1; + regs.m = (regs.sr >> 12) & 1; + regs.intmask = (regs.sr >> 8) & 7; if (currprefs.cpu_model >= 68020) { /* 68060 does not have MSP but does have M-bit.. */ if (currprefs.cpu_model >= 68060) - regs->msp = regs->isp; - if (olds != regs->s) { + regs.msp = regs.isp; + if (olds != regs.s) { if (olds) { if (oldm) - regs->msp = m68k_areg (regs, 7); + regs.msp = m68k_areg (regs, 7); else - regs->isp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->usp; + regs.isp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.usp; } else { - regs->usp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->m ? regs->msp : regs->isp; + regs.usp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; } - } else if (olds && oldm != regs->m) { + } else if (olds && oldm != regs.m) { if (oldm) { - regs->msp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->isp; + regs.msp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; } else { - regs->isp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->msp; + regs.isp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.msp; } } if (currprefs.cpu_model >= 68060) - regs->t0 = 0; + regs.t0 = 0; } else { - regs->t0 = regs->m = 0; - if (olds != regs->s) { + regs.t0 = regs.m = 0; + if (olds != regs.s) { if (olds) { - regs->isp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->usp; + regs.isp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.usp; } else { - regs->usp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->isp; + regs.usp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; } } } if (currprefs.mmu_model) - mmu_set_super (regs->s); + mmu_set_super (regs.s); doint (); - if (regs->t1 || regs->t0) - set_special (regs, SPCFLAG_TRACE); + if (regs.t1 || regs.t0) + set_special (SPCFLAG_TRACE); else /* Keep SPCFLAG_DOTRACE, we still want a trace exception for SR-modifying instructions (including STOP). */ - unset_special (regs, SPCFLAG_TRACE); + unset_special (SPCFLAG_TRACE); } static void exception_trace (int nr) { - unset_special (®s, SPCFLAG_TRACE | SPCFLAG_DOTRACE); + unset_special (SPCFLAG_TRACE | SPCFLAG_DOTRACE); if (regs.t1 && !regs.t0) { /* trace stays pending if exception is div by zero, chk, * trapv or trap #x */ if (nr == 5 || nr == 6 || nr == 7 || (nr >= 32 && nr <= 47)) - set_special (®s, SPCFLAG_DOTRACE); + set_special (SPCFLAG_DOTRACE); } regs.t1 = regs.t0 = regs.m = 0; } @@ -986,10 +1007,10 @@ Interrupt cycle diagram: */ -static void Exception_ce (int nr, struct regstruct *regs, uaecptr oldpc) +static void Exception_ce (int nr, uaecptr oldpc) { - uae_u32 currpc = m68k_getpc (regs), newpc; - int sv = regs->s; + uae_u32 currpc = m68k_getpc (), newpc; + int sv = regs.s; int start; start = 6; @@ -1008,12 +1029,12 @@ static void Exception_ce (int nr, struct regstruct *regs, uaecptr oldpc) } exception_debug (nr); - MakeSR (regs); + MakeSR (); - if (!regs->s) { - regs->usp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->isp; - regs->s = 1; + if (!regs.s) { + regs.usp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; + regs.s = 1; } if (nr == 2 || nr == 3) { /* 2=bus error, 3=address error */ uae_u16 mode = (sv ? 4 : 0) | (last_instructionaccess_for_exception_3 ? 2 : 1); @@ -1021,7 +1042,7 @@ static void Exception_ce (int nr, struct regstruct *regs, uaecptr oldpc) m68k_areg (regs, 7) -= 14; /* fixme: bit3=I/N */ put_word_ce (m68k_areg (regs, 7) + 12, last_addr_for_exception_3); - put_word_ce (m68k_areg (regs, 7) + 8, regs->sr); + put_word_ce (m68k_areg (regs, 7) + 8, regs.sr); put_word_ce (m68k_areg (regs, 7) + 10, last_addr_for_exception_3 >> 16); put_word_ce (m68k_areg (regs, 7) + 6, last_op_for_exception_3); put_word_ce (m68k_areg (regs, 7) + 4, last_fault_for_exception_3); @@ -1033,7 +1054,7 @@ static void Exception_ce (int nr, struct regstruct *regs, uaecptr oldpc) } m68k_areg (regs, 7) -= 6; put_word_ce (m68k_areg (regs, 7) + 4, currpc); // write low address - put_word_ce (m68k_areg (regs, 7) + 0, regs->sr); // write SR + put_word_ce (m68k_areg (regs, 7) + 0, regs.sr); // write SR put_word_ce (m68k_areg (regs, 7) + 2, currpc >> 16); // write high address kludge_me_do: newpc = get_word_ce (4 * nr) << 16; // read high address @@ -1042,38 +1063,38 @@ kludge_me_do: if (nr == 2 || nr == 3) uae_reset (1); /* there is nothing else we can do.. */ else - exception3 (regs->ir, m68k_getpc (regs), newpc); + exception3 (regs.ir, m68k_getpc (), newpc); return; } - m68k_setpc (regs, newpc); - regs->ir = get_word_ce (m68k_getpc (regs)); // prefetch 1 + m68k_setpc (newpc); + regs.ir = get_word_ce (m68k_getpc ()); // prefetch 1 do_cycles_ce (2 * CYCLE_UNIT / 2); - regs->irc = get_word_ce (m68k_getpc (regs) + 2); // prefetch 2 - set_special (regs, SPCFLAG_END_COMPILE); + regs.irc = get_word_ce (m68k_getpc () + 2); // prefetch 2 + set_special (SPCFLAG_END_COMPILE); exception_trace (nr); } #endif -static void Exception_normal (int nr, struct regstruct *regs, uaecptr oldpc) +static void Exception_normal (int nr, uaecptr oldpc) { - uae_u32 currpc = m68k_getpc (regs), newpc; - int sv = regs->s; + uae_u32 currpc = m68k_getpc (), newpc; + int sv = regs.s; if (nr >= 24 && nr < 24 + 8 && currprefs.cpu_model <= 68010) nr = get_byte (0x00fffff1 | (nr << 1)); exception_debug (nr); - MakeSR (regs); + MakeSR (); - if (!regs->s) { - regs->usp = m68k_areg (regs, 7); + if (!regs.s) { + regs.usp = m68k_areg (regs, 7); if (currprefs.cpu_model >= 68020) - m68k_areg (regs, 7) = regs->m ? regs->msp : regs->isp; + m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; else - m68k_areg (regs, 7) = regs->isp; - regs->s = 1; + m68k_areg (regs, 7) = regs.isp; + regs.s = 1; if (currprefs.mmu_model) - mmu_set_super (regs->s); + mmu_set_super (regs.s); } if (currprefs.cpu_model > 68000) { if (nr == 2 || nr == 3) { @@ -1125,22 +1146,22 @@ static void Exception_normal (int nr, struct regstruct *regs, uaecptr oldpc) m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0xb000 + nr * 4); } - write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs->vbr + 4*nr)); + write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs.vbr + 4*nr)); } else if (nr ==5 || nr == 6 || nr == 7 || nr == 9) { m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0x2000 + nr * 4); - } else if (regs->m && nr >= 24 && nr < 32) { /* M + Interrupt */ + } else if (regs.m && nr >= 24 && nr < 32) { /* M + Interrupt */ m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), nr * 4); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), currpc); m68k_areg (regs, 7) -= 2; - put_word (m68k_areg (regs, 7), regs->sr); - regs->sr |= (1 << 13); - regs->msp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs->isp; + put_word (m68k_areg (regs, 7), regs.sr); + regs.sr |= (1 << 13); + regs.msp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0x1000 + nr * 4); } else { @@ -1155,55 +1176,55 @@ static void Exception_normal (int nr, struct regstruct *regs, uaecptr oldpc) put_word (m68k_areg (regs, 7) + 0, mode); put_long (m68k_areg (regs, 7) + 2, last_fault_for_exception_3); put_word (m68k_areg (regs, 7) + 6, last_op_for_exception_3); - put_word (m68k_areg (regs, 7) + 8, regs->sr); + put_word (m68k_areg (regs, 7) + 8, regs.sr); put_long (m68k_areg (regs, 7) + 10, last_addr_for_exception_3); - write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs->vbr + 4*nr)); + write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs.vbr + 4*nr)); goto kludge_me_do; } m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), currpc); m68k_areg (regs, 7) -= 2; - put_word (m68k_areg (regs, 7), regs->sr); + put_word (m68k_areg (regs, 7), regs.sr); kludge_me_do: - newpc = get_long (regs->vbr + 4 * nr); + newpc = get_long (regs.vbr + 4 * nr); if (newpc & 1) { if (nr == 2 || nr == 3) uae_reset (1); /* there is nothing else we can do.. */ else - exception3 (regs->ir, m68k_getpc (regs), newpc); + exception3 (regs.ir, m68k_getpc (), newpc); return; } - m68k_setpc (regs, newpc); - set_special (regs, SPCFLAG_END_COMPILE); - fill_prefetch_slow (regs); + m68k_setpc (newpc); + set_special (SPCFLAG_END_COMPILE); + fill_prefetch_slow (); exception_trace (nr); } -void REGPARAM2 Exception (int nr, struct regstruct *regs, uaecptr oldpc) +void REGPARAM2 Exception (int nr, uaecptr oldpc) { #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000) - Exception_ce (nr, regs, oldpc); + Exception_ce (nr, oldpc); else #endif - Exception_normal (nr, regs, oldpc); + Exception_normal (nr, oldpc); } -STATIC_INLINE void do_interrupt (int nr, struct regstruct *regs) +STATIC_INLINE void do_interrupt (int nr) { - regs->stopped = 0; - unset_special (regs, SPCFLAG_STOP); + regs.stopped = 0; + unset_special (SPCFLAG_STOP); assert (nr < 8 && nr >= 0); - Exception (nr + 24, regs, 0); + Exception (nr + 24, 0); - regs->intmask = nr; + regs.intmask = nr; doint (); } void NMI (void) { - do_interrupt (7, ®s); + do_interrupt (7); } #ifndef CPUEMU_68000_ONLY @@ -1248,7 +1269,7 @@ int m68k_move2c (int regno, uae_u32 *regp) write_log (L"move2c %04X <- %08X PC=%x\n", regno, *regp, M68K_GETPC); #endif if (movec_illg (regno)) { - op_illg (0x4E7B, ®s); + op_illg (0x4E7B); return 0; } else { switch (regno) { @@ -1287,8 +1308,8 @@ int m68k_move2c (int regno, uae_u32 *regp) case 0x800: regs.usp = *regp; break; case 0x801: regs.vbr = *regp; break; case 0x802: regs.caar = *regp & 0xfc; break; - case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg (®s, 7) = regs.msp; break; - case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (®s, 7) = regs.isp; break; + case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg (regs, 7) = regs.msp; break; + case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (regs, 7) = regs.isp; break; /* 68040 only */ case 0x805: regs.mmusr = *regp; break; /* 68040/060 */ @@ -1308,7 +1329,7 @@ int m68k_move2c (int regno, uae_u32 *regp) } break; default: - op_illg (0x4E7B, ®s); + op_illg (0x4E7B); return 0; } } @@ -1321,7 +1342,7 @@ int m68k_movec2 (int regno, uae_u32 *regp) write_log (L"movec2 %04X PC=%x\n", regno, M68K_GETPC); #endif if (movec_illg (regno)) { - op_illg (0x4E7A, ®s); + op_illg (0x4E7A); return 0; } else { switch (regno) { @@ -1352,15 +1373,15 @@ int m68k_movec2 (int regno, uae_u32 *regp) case 0x800: *regp = regs.usp; break; case 0x801: *regp = regs.vbr; break; case 0x802: *regp = regs.caar; break; - case 0x803: *regp = regs.m == 1 ? m68k_areg (®s, 7) : regs.msp; break; - case 0x804: *regp = regs.m == 0 ? m68k_areg (®s, 7) : regs.isp; break; + case 0x803: *regp = regs.m == 1 ? m68k_areg (regs, 7) : regs.msp; break; + case 0x804: *regp = regs.m == 0 ? m68k_areg (regs, 7) : regs.isp; break; case 0x805: *regp = regs.mmusr; break; case 0x806: *regp = regs.urp; break; case 0x807: *regp = regs.srp; break; case 0x808: *regp = regs.pcr; break; default: - op_illg (0x4E7A, ®s); + op_illg (0x4E7A); return 0; } } @@ -1399,17 +1420,17 @@ void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) { #if defined (uae_s64) if (src == 0) { - Exception (5, ®s, oldpc); + Exception (5, oldpc); return; } if (extra & 0x800) { /* signed variant */ - uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (®s, (extra >> 12) & 7); + uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7); uae_s64 quot, rem; if (extra & 0x400) { a &= 0xffffffffu; - a |= (uae_s64)m68k_dreg (®s, extra & 7) << 32; + a |= (uae_s64)m68k_dreg (regs, extra & 7) << 32; } rem = a % (uae_s64)(uae_s32)src; quot = a / (uae_s64)(uae_s32)src; @@ -1425,17 +1446,17 @@ void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) SET_CFLG (®s.ccrflags, 0); SET_ZFLG (®s.ccrflags, ((uae_s32)quot) == 0); SET_NFLG (®s.ccrflags, ((uae_s32)quot) < 0); - m68k_dreg (®s, extra & 7) = (uae_u32)rem; - m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)quot; + m68k_dreg (regs, extra & 7) = (uae_u32)rem; + m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot; } } else { /* unsigned */ - uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (®s, (extra >> 12) & 7); + uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7); uae_u64 quot, rem; if (extra & 0x400) { a &= 0xffffffffu; - a |= (uae_u64)m68k_dreg (®s, extra & 7) << 32; + a |= (uae_u64)m68k_dreg (regs, extra & 7) << 32; } rem = a % (uae_u64)src; quot = a / (uae_u64)src; @@ -1448,25 +1469,25 @@ void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) SET_CFLG (®s.ccrflags, 0); SET_ZFLG (®s.ccrflags, ((uae_s32)quot) == 0); SET_NFLG (®s.ccrflags, ((uae_s32)quot) < 0); - m68k_dreg (®s, extra & 7) = (uae_u32)rem; - m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)quot; + m68k_dreg (regs, extra & 7) = (uae_u32)rem; + m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot; } } #else if (src == 0) { - Exception (5, ®s, oldpc); + Exception (5, oldpc); return; } if (extra & 0x800) { /* signed variant */ - uae_s32 lo = (uae_s32)m68k_dreg (®s, (extra >> 12) & 7); + uae_s32 lo = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7); uae_s32 hi = lo < 0 ? -1 : 0; uae_s32 save_high; uae_u32 quot, rem; uae_u32 sign; if (extra & 0x400) { - hi = (uae_s32)m68k_dreg (®s, extra & 7); + hi = (uae_s32)m68k_dreg (regs, extra & 7); } save_high = hi; sign = (hi ^ src); @@ -1493,12 +1514,12 @@ void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) } } else { /* unsigned */ - uae_u32 lo = (uae_u32)m68k_dreg (®s, (extra >> 12) & 7); + uae_u32 lo = (uae_u32)m68k_dreg (regs, (extra >> 12) & 7); uae_u32 hi = 0; uae_u32 quot, rem; if (extra & 0x400) { - hi = (uae_u32)m68k_dreg (®s, extra & 7); + hi = (uae_u32)m68k_dreg (regs, extra & 7); } if (div_unsigned (hi, lo, src, ", &rem)) { SET_VFLG (1); @@ -1540,7 +1561,7 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) #if defined (uae_s64) if (extra & 0x800) { /* signed variant */ - uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (®s, (extra >> 12) & 7); + uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7); a *= (uae_s64)(uae_s32)src; SET_VFLG (®s.ccrflags, 0); @@ -1548,16 +1569,16 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) SET_ZFLG (®s.ccrflags, a == 0); SET_NFLG (®s.ccrflags, a < 0); if (extra & 0x400) - m68k_dreg (®s, extra & 7) = (uae_u32)(a >> 32); + m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32); else if ((a & UVAL64 (0xffffffff80000000)) != 0 && (a & UVAL64 (0xffffffff80000000)) != UVAL64 (0xffffffff80000000)) { SET_VFLG (®s.ccrflags, 1); } - m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)a; + m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a; } else { /* unsigned */ - uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (®s, (extra >> 12) & 7); + uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7); a *= (uae_u64)src; SET_VFLG (®s.ccrflags, 0); @@ -1565,11 +1586,11 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) SET_ZFLG (®s.ccrflags, a == 0); SET_NFLG (®s.ccrflags, ((uae_s64)a) < 0); if (extra & 0x400) - m68k_dreg (®s, extra & 7) = (uae_u32)(a >> 32); + m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32); else if ((a & UVAL64 (0xffffffff00000000)) != 0) { SET_VFLG (®s.ccrflags, 1); } - m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)a; + m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a; } #else if (extra & 0x800) { @@ -1579,7 +1600,7 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) uae_u32 sign; src1 = (uae_s32)src; - src2 = (uae_s32)m68k_dreg (®s, (extra >> 12) & 7); + src2 = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7); sign = (src1 ^ src2); if (src1 < 0) src1 = -src1; if (src2 < 0) src2 = -src2; @@ -1594,26 +1615,26 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) SET_ZFLG (dst_hi == 0 && dst_lo == 0); SET_NFLG (((uae_s32)dst_hi) < 0); if (extra & 0x400) - m68k_dreg (®s, extra & 7) = dst_hi; + m68k_dreg (regs, extra & 7) = dst_hi; else if ((dst_hi != 0 || (dst_lo & 0x80000000) != 0) && ((dst_hi & 0xffffffff) != 0xffffffff || (dst_lo & 0x80000000) != 0x80000000)) { SET_VFLG (1); } - m68k_dreg (®s, (extra >> 12) & 7) = dst_lo; + m68k_dreg (regs, (extra >> 12) & 7) = dst_lo; } else { /* unsigned */ uae_u32 dst_lo, dst_hi; - mul_unsigned (src, (uae_u32)m68k_dreg (®s, (extra >> 12) & 7), &dst_hi, &dst_lo); + mul_unsigned (src, (uae_u32)m68k_dreg (regs, (extra >> 12) & 7), &dst_hi, &dst_lo); SET_VFLG (0); SET_CFLG (0); SET_ZFLG (dst_hi == 0 && dst_lo == 0); SET_NFLG (((uae_s32)dst_hi) < 0); if (extra & 0x400) - m68k_dreg (®s, extra & 7) = dst_hi; + m68k_dreg (regs, extra & 7) = dst_hi; else if (dst_hi != 0) { SET_VFLG (1); } @@ -1629,20 +1650,20 @@ void m68k_reset (int hardreset) regs.spcflags = 0; #ifdef SAVESTATE if (savestate_state == STATE_RESTORE || savestate_state == STATE_REWIND) { - m68k_setpc (®s, regs.pc); + m68k_setpc (regs.pc); /* MakeFromSR () must not swap stack pointer */ regs.s = (regs.sr >> 13) & 1; - MakeFromSR (®s); + MakeFromSR (); /* set stack pointer */ if (regs.s) - m68k_areg (®s, 7) = regs.isp; + m68k_areg (regs, 7) = regs.isp; else - m68k_areg (®s, 7) = regs.usp; + m68k_areg (regs, 7) = regs.usp; return; } #endif - m68k_areg (®s, 7) = get_long (0); - m68k_setpc (®s, get_long (4)); + m68k_areg (regs, 7) = get_long (0); + m68k_setpc (get_long (4)); regs.s = 1; regs.m = 0; regs.stopped = 0; @@ -1662,6 +1683,7 @@ void m68k_reset (int hardreset) regs.caar = regs.cacr = 0; regs.itt0 = regs.itt1 = regs.dtt0 = regs.dtt1 = 0; regs.tcr = regs.mmusr = regs.urp = regs.srp = regs.buscr = 0; + regs.prefetch020pc = regs.prefetch020ptr = 0xff000000; if (currprefs.mmu_model) mmu_reset (); @@ -1687,7 +1709,7 @@ void m68k_reset (int hardreset) if (kickstart_rom) regs.pcr |= 2; /* disable FPU */ } - fill_prefetch_slow (®s); + fill_prefetch_slow (); } STATIC_INLINE int in_rom (uaecptr pc) @@ -1700,17 +1722,17 @@ STATIC_INLINE int in_rtarea (uaecptr pc) return (munge24 (pc) & 0xFFFF0000) == rtarea_base && uae_boot_rom; } -unsigned long REGPARAM2 op_illg (uae_u32 opcode, struct regstruct *regs) +unsigned long REGPARAM2 op_illg (uae_u32 opcode) { - uaecptr pc = m68k_getpc (regs); + uaecptr pc = m68k_getpc (); static int warned; int inrom = in_rom (pc); int inrt = in_rtarea (pc); if (cloanto_rom && (opcode & 0xF100) == 0x7100) { m68k_dreg (regs, (opcode >> 9) & 7) = (uae_s8)(opcode & 0xFF); - m68k_incpc (regs, 2); - fill_prefetch_slow (regs); + m68k_incpc (2); + fill_prefetch_slow (); return 4; } @@ -1723,49 +1745,49 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode, struct regstruct *regs) if (opcode == 0xFF0D) { if (inrom) { /* This is from the dummy Kickstart replacement */ - uae_u16 arg = get_iword (regs, 2); - m68k_incpc (regs, 4); + uae_u16 arg = get_iword (2); + m68k_incpc (4); ersatz_perform (arg); - fill_prefetch_slow (regs); + fill_prefetch_slow (); return 4; } else if (inrt) { /* User-mode STOP replacement */ - m68k_setstopped (regs); + m68k_setstopped (); return 4; } } if ((opcode & 0xF000) == 0xA000 && inrt) { /* Calltrap. */ - m68k_incpc (regs, 2); - m68k_handle_trap (opcode & 0xFFF, regs); - fill_prefetch_slow (regs); + m68k_incpc (2); + m68k_handle_trap (opcode & 0xFFF); + fill_prefetch_slow (); return 4; } #endif if ((opcode & 0xF000) == 0xF000) { if (warned < 20) { - write_log (L"B-Trap %x at %x (%p)\n", opcode, pc, regs->pc_p); + write_log (L"B-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p); warned++; } - Exception (0xB, regs, 0); + Exception (0xB, 0); return 4; } if ((opcode & 0xF000) == 0xA000) { if (warned < 20) { - write_log (L"A-Trap %x at %x (%p)\n", opcode, pc, regs->pc_p); + write_log (L"A-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p); warned++; } - Exception (0xA, regs, 0); + Exception (0xA, 0); return 4; } if (warned < 20) { - write_log (L"Illegal instruction: %04x at %08X -> %08X\n", opcode, pc, get_long (regs->vbr + 0x10)); + write_log (L"Illegal instruction: %04x at %08X -> %08X\n", opcode, pc, get_long (regs.vbr + 0x10)); warned++; } - Exception (4, regs, 0); + Exception (4, 0); return 4; } @@ -1841,7 +1863,7 @@ static void mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr ex } if (!reg) { - op_illg (opcode, ®s); + op_illg (opcode); return; } #if MMUOP_DEBUG > 0 @@ -1895,11 +1917,11 @@ static void mmu_op30_pflush (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr e #endif } -void mmu_op30 (uaecptr pc, uae_u32 opcode, struct regstruct *regs, int isnext, uaecptr extra) +void mmu_op30 (uaecptr pc, uae_u32 opcode, int isnext, uaecptr extra) { if (currprefs.cpu_model != 68030) { - m68k_setpc (regs, pc); - op_illg (opcode, regs); + m68k_setpc (pc); + op_illg (opcode); return; } if (isnext) { @@ -1910,19 +1932,19 @@ void mmu_op30 (uaecptr pc, uae_u32 opcode, struct regstruct *regs, int isnext, u mmu_op30_pflush (pc, opcode, next, extra); else mmu_op30_pmove (pc, opcode, next, extra); - m68k_setpc (regs, m68k_getpc (regs) + 2); + m68k_setpc (m68k_getpc () + 2); } else { #if MMUOP_DEBUG > 0 - write_log (L"MMU030: %04x PC=%08x\n", opcode, m68k_getpc (regs)); + write_log (L"MMU030: %04x PC=%08x\n", opcode, m68k_getpc ()); #endif } return; } -void mmu_op (uae_u32 opcode, struct regstruct *regs, uae_u32 extra) +void mmu_op (uae_u32 opcode, uae_u32 extra) { #if MMUOP_DEBUG > 1 - write_log (L"mmu_op %04X PC=%08X\n", opcode, m68k_getpc (regs)); + write_log (L"mmu_op %04X PC=%08X\n", opcode, m68k_getpc ()); #endif if (currprefs.cpu_model) { mmu_op_real (opcode, extra); @@ -1930,7 +1952,7 @@ void mmu_op (uae_u32 opcode, struct regstruct *regs, uae_u32 extra) } if ((opcode & 0xFE0) == 0x0500) { /* PFLUSH */ - regs->mmusr = 0; + regs.mmusr = 0; #if MMUOP_DEBUG > 0 write_log (L"PFLUSH\n"); #endif @@ -1955,8 +1977,8 @@ void mmu_op (uae_u32 opcode, struct regstruct *regs, uae_u32 extra) #if MMUOP_DEBUG > 0 write_log (L"Unknown MMU OP %04X\n", opcode); #endif - m68k_setpc (regs, m68k_getpc (regs) - 2); - op_illg (opcode, regs); + m68k_setpc (m68k_getpc () - 2); + op_illg (opcode); } #endif @@ -1970,8 +1992,8 @@ static void do_trace (void) /* should also include TRAP, CHK, SR modification FPcc */ /* probably never used so why bother */ /* We can afford this to be inefficient... */ - m68k_setpc (®s, m68k_getpc (®s)); - fill_prefetch_slow (®s); + m68k_setpc (m68k_getpc ()); + fill_prefetch_slow (); opcode = get_word (regs.pc); if (opcode == 0x4e73 /* RTE */ || opcode == 0x4e74 /* RTD */ @@ -1985,16 +2007,16 @@ static void do_trace (void) && cctrue (®s.ccrflags, (opcode >> 8) & 0xf)) || ((opcode & 0xf0f0) == 0x5050 /* DBcc */ && !cctrue (®s.ccrflags, (opcode >> 8) & 0xf) - && (uae_s16)m68k_dreg (®s, opcode & 7) != 0)) + && (uae_s16)m68k_dreg (regs, opcode & 7) != 0)) { - last_trace_ad = m68k_getpc (®s); - unset_special (®s, SPCFLAG_TRACE); - set_special (®s, SPCFLAG_DOTRACE); + last_trace_ad = m68k_getpc (); + unset_special (SPCFLAG_TRACE); + set_special (SPCFLAG_DOTRACE); } } else if (regs.t1) { - last_trace_ad = m68k_getpc (®s); - unset_special (®s, SPCFLAG_TRACE); - set_special (®s, SPCFLAG_DOTRACE); + last_trace_ad = m68k_getpc (); + unset_special (SPCFLAG_TRACE); + set_special (SPCFLAG_DOTRACE); } } @@ -2015,12 +2037,12 @@ STATIC_INLINE int time_for_interrupt (void) #define IDLETIME (currprefs.cpu_idle * sleep_resolution / 700) -STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) +STATIC_INLINE int do_specialties (int cycles) { #ifdef ACTION_REPLAY #ifdef ACTION_REPLAY_HRTMON - if ((regs->spcflags & SPCFLAG_ACTION_REPLAY) && hrtmon_flag != ACTION_REPLAY_INACTIVE) { - int isinhrt = (m68k_getpc (regs) >= hrtmem_start && m68k_getpc (regs) < hrtmem_start + hrtmem_size); + if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && hrtmon_flag != ACTION_REPLAY_INACTIVE) { + int isinhrt = (m68k_getpc () >= hrtmem_start && m68k_getpc () < hrtmem_start + hrtmem_size); /* exit from HRTMon? */ if (hrtmon_flag == ACTION_REPLAY_ACTIVE && !isinhrt) hrtmon_hide (); @@ -2029,11 +2051,11 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) hrtmon_breakenter (); if (hrtmon_flag == ACTION_REPLAY_ACTIVATE) hrtmon_enter (); - if (!(regs->spcflags & ~SPCFLAG_ACTION_REPLAY)) + if (!(regs.spcflags & ~SPCFLAG_ACTION_REPLAY)) return 0; } #endif - if ((regs->spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE) { + if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE) { /*if (action_replay_flag == ACTION_REPLAY_ACTIVE && !is_ar_pc_in_rom ())*/ /* write_log (L"PC:%p\n", m68k_getpc ());*/ @@ -2041,26 +2063,26 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) action_replay_enter (); if (action_replay_flag == ACTION_REPLAY_HIDE && !is_ar_pc_in_rom ()) { action_replay_hide (); - unset_special (regs, SPCFLAG_ACTION_REPLAY); + unset_special (SPCFLAG_ACTION_REPLAY); } if (action_replay_flag == ACTION_REPLAY_WAIT_PC) { /*write_log (L"Waiting for PC: %p, current PC= %p\n", wait_for_pc, m68k_getpc ());*/ - if (m68k_getpc (regs) == wait_for_pc) { + if (m68k_getpc () == wait_for_pc) { action_replay_flag = ACTION_REPLAY_ACTIVATE; /* Activate after next instruction. */ } } } #endif - if (regs->spcflags & SPCFLAG_COPPER) + if (regs.spcflags & SPCFLAG_COPPER) do_copper (); /*n_spcinsns++;*/ #ifdef JIT - unset_special (regs, SPCFLAG_END_COMPILE); /* has done its job */ + unset_special (SPCFLAG_END_COMPILE); /* has done its job */ #endif - while ((regs->spcflags & SPCFLAG_BLTNASTY) && dmaen (DMA_BLITTER) && cycles > 0 && !currprefs.blitter_cycle_exact) { + while ((regs.spcflags & SPCFLAG_BLTNASTY) && dmaen (DMA_BLITTER) && cycles > 0 && !currprefs.blitter_cycle_exact) { int c = blitnasty (); if (c > 0) { cycles -= c * CYCLE_UNIT * 2; @@ -2069,38 +2091,38 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) } else c = 4; do_cycles (c * CYCLE_UNIT); - if (regs->spcflags & SPCFLAG_COPPER) + if (regs.spcflags & SPCFLAG_COPPER) do_copper (); } - if (regs->spcflags & SPCFLAG_DOTRACE) - Exception (9, regs, last_trace_ad); + if (regs.spcflags & SPCFLAG_DOTRACE) + Exception (9, last_trace_ad); - if (regs->spcflags & SPCFLAG_TRAP) { - unset_special (regs, SPCFLAG_TRAP); - Exception (3, regs, 0); + if (regs.spcflags & SPCFLAG_TRAP) { + unset_special (SPCFLAG_TRAP); + Exception (3, 0); } - while (regs->spcflags & SPCFLAG_STOP) { + while (regs.spcflags & SPCFLAG_STOP) { do_cycles (4 * CYCLE_UNIT); - if (regs->spcflags & SPCFLAG_COPPER) + if (regs.spcflags & SPCFLAG_COPPER) do_copper (); - if (regs->spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { + if (regs.spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { if (time_for_interrupt ()) { int intr = intlev (); - unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); - if (intr != -1 && intr > regs->intmask) - do_interrupt (intr, regs); + unset_special (SPCFLAG_INT | SPCFLAG_DOINT); + if (intr != -1 && intr > regs.intmask) + do_interrupt (intr); } } - if ((regs->spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { - unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); + if ((regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { + unset_special (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); // SPCFLAG_BRK breaks STOP condition, need to prefetch - m68k_resumestopped (regs); + m68k_resumestopped (); return 1; } - if (currprefs.cpu_idle && currprefs.m68k_speed != 0 && ((regs->spcflags & SPCFLAG_STOP)) == SPCFLAG_STOP) { + if (currprefs.cpu_idle && currprefs.m68k_speed != 0 && ((regs.spcflags & SPCFLAG_STOP)) == SPCFLAG_STOP) { /* sleep 1ms if STOP-instruction is executed */ if (1) { static int sleepcnt, lvpos, zerocnt; @@ -2122,24 +2144,24 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) } } - if (regs->spcflags & SPCFLAG_TRACE) + if (regs.spcflags & SPCFLAG_TRACE) do_trace (); - if (regs->spcflags & SPCFLAG_INT) { + if (regs.spcflags & SPCFLAG_INT) { if (time_for_interrupt ()) { int intr = intlev (); - unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); - if (intr != -1 && (intr > regs->intmask || intr == 7)) - do_interrupt (intr, regs); + unset_special (SPCFLAG_INT | SPCFLAG_DOINT); + if (intr != -1 && (intr > regs.intmask || intr == 7)) + do_interrupt (intr); } } - if (regs->spcflags & SPCFLAG_DOINT) { - unset_special (regs, SPCFLAG_DOINT); - set_special (regs, SPCFLAG_INT); + if (regs.spcflags & SPCFLAG_DOINT) { + unset_special (SPCFLAG_DOINT); + set_special (SPCFLAG_INT); } - if ((regs->spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { - unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); + if ((regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { + unset_special (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); return 1; } return 0; @@ -2154,9 +2176,9 @@ void prepare_interrupt (void) void doint (void) { if (currprefs.cpu_compatible) - set_special (®s, SPCFLAG_INT); + set_special (SPCFLAG_INT); else - set_special (®s, SPCFLAG_DOINT); + set_special (SPCFLAG_DOINT); } //static uae_u32 pcs[1000]; @@ -2178,7 +2200,7 @@ static void out_cd32io (uae_u32 pc) { TCHAR out[100]; int ioreq = 0; - uae_u32 request = m68k_areg (®s, 1); + uae_u32 request = m68k_areg (regs, 1); if (pc == cd32nextpc) { out_cd32io2 (); @@ -2211,7 +2233,7 @@ static void out_cd32io (uae_u32 pc) if (cd32request) write_log (L"old request still not returned!\n"); cd32request = request; - cd32nextpc = get_long (m68k_areg (®s, 7)); + cd32nextpc = get_long (m68k_areg (regs, 7)); write_log (L"%s A1=%08X\n", out, request); if (ioreq) { static int cnt = 0; @@ -2255,7 +2277,7 @@ static void m68k_run_1 (void) count_instr (opcode); #ifdef DEBUG_CD32IO - out_cd32io (m68k_getpc (®s)); + out_cd32io (m68k_getpc ()); #endif #if 0 @@ -2269,11 +2291,11 @@ static void m68k_run_1 (void) } #endif do_cycles (cpu_cycles); - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; if (r->spcflags) { - if (do_specialties (cpu_cycles, r)) + if (do_specialties (cpu_cycles)) return; } if (!currprefs.cpu_compatible || (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000)) @@ -2300,9 +2322,9 @@ static void m68k_run_1_ce (void) for (;;) { uae_u32 opcode = r->ir; - (*cpufunctbl[opcode])(opcode, r); + (*cpufunctbl[opcode])(opcode); if (r->spcflags) { - if (do_specialties (0, r)) + if (do_specialties (0)) return; } if (!currprefs.cpu_cycle_exact || currprefs.cpu_model > 68000) @@ -2326,9 +2348,9 @@ void exec_nostats (void) for (;;) { - uae_u16 opcode = get_iword (r, 0); + uae_u16 opcode = get_iword (0); - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; @@ -2360,12 +2382,12 @@ void execute_normal (void) start_pc = r->pc; for (;;) { /* Take note: This is the do-it-normal loop */ - uae_u16 opcode = get_iword (r, 0); + uae_u16 opcode = get_iword (0); special_mem = DISTRUST_CONSISTENT_MEM; pc_hist[blocklen].location = (uae_u16*)r->pc_p; - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; @@ -2392,10 +2414,10 @@ static void m68k_run_2a (void) if (uae_int_requested) { intreq |= 0x0008; intreqr = intreq; - set_special (®s, SPCFLAG_INT); + set_special (SPCFLAG_INT); } if (regs.spcflags) { - if (do_specialties (0, ®s)) { + if (do_specialties (0)) { return; } } @@ -2411,20 +2433,36 @@ static void m68k_run_2 (void) #else +/* "cycle exact 68020 */ +static void m68k_run_2ce (void) +{ + struct regstruct *r = ®s; + + for (;;) { + uae_u32 opcode = get_word_ce020_prefetch (0); + count_instr (opcode); + (*cpufunctbl[opcode])(opcode); + if (r->spcflags) { + if (do_specialties (0)) + return; + } + } +} + /* emulate simple prefetch */ static void m68k_run_2p (void) { uae_u32 prefetch, prefetch_pc; struct regstruct *r = ®s; - prefetch_pc = m68k_getpc (r); + prefetch_pc = m68k_getpc (); prefetch = get_longi (prefetch_pc); for (;;) { uae_u32 opcode; - uae_u32 pc = m68k_getpc (r); + uae_u32 pc = m68k_getpc (); #ifdef DEBUG_CD32IO - out_cd32io (m68k_getpc (®s)); + out_cd32io (m68k_getpc ()); #endif do_cycles (cpu_cycles); @@ -2438,13 +2476,13 @@ static void m68k_run_2p (void) count_instr (opcode); - prefetch_pc = m68k_getpc (r) + 2; + prefetch_pc = m68k_getpc () + 2; prefetch = get_longi (prefetch_pc); - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; if (r->spcflags) { - if (do_specialties (cpu_cycles, r)) + if (do_specialties (cpu_cycles)) return; } } @@ -2456,15 +2494,15 @@ static void m68k_run_2 (void) struct regstruct *r = ®s; for (;;) { - uae_u32 opcode = get_iword (r, 0); + uae_u32 opcode = get_iword (0); count_instr (opcode); do_cycles (cpu_cycles); - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; if (r->spcflags) { - if (do_specialties (cpu_cycles, r)) + if (do_specialties (cpu_cycles)) return; } } @@ -2474,16 +2512,16 @@ static void m68k_run_2 (void) static void m68k_run_mmu (void) { for (;;) { - uae_u32 opcode = get_iword (®s, 0); + uae_u32 opcode = get_iword (0); do_cycles (cpu_cycles); mmu_backup_regs = regs; - cpu_cycles = (*cpufunctbl[opcode])(opcode, ®s); + cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles &= cycles_mask; cpu_cycles |= cycles_val; if (mmu_triggered) mmu_do_hit (); if (regs.spcflags) { - if (do_specialties (cpu_cycles, ®s)) + if (do_specialties (cpu_cycles)) return; } } @@ -2499,7 +2537,7 @@ static void exception2_handle (uaecptr addr, uaecptr fault) last_fault_for_exception_3 = fault; last_writeaccess_for_exception_3 = 0; last_instructionaccess_for_exception_3 = 0; - Exception (2, ®s, addr); + Exception (2, addr); } void m68k_go (int may_quit) @@ -2540,18 +2578,18 @@ void m68k_go (int may_quit) /* We may have been restoring state, but we're done now. */ if (savestate_state == STATE_RESTORE || savestate_state == STATE_REWIND) { map_overlay (1); - fill_prefetch_slow (®s); /* compatibility with old state saves */ + fill_prefetch_slow (); /* compatibility with old state saves */ memory_map_dump (); } savestate_restore_finish (); #endif - fill_prefetch_slow (®s); + fill_prefetch_slow (); if (currprefs.produce_sound == 0) eventtab[ev_audio].active = 0; handle_active_events (); if (regs.spcflags) - do_specialties (0, ®s); - m68k_setpc (®s, regs.pc); + do_specialties (0); + m68k_setpc (regs.pc); } #ifdef DEBUGGER @@ -2578,7 +2616,7 @@ void m68k_go (int may_quit) if (regs.spcflags) { uae_u32 of = regs.spcflags; regs.spcflags &= ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); - do_specialties (0, ®s); + do_specialties (0); regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); } #endif @@ -2593,6 +2631,7 @@ void m68k_go (int may_quit) run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000 ? m68k_run_1_ce : currprefs.cpu_compatible > 0 && currprefs.cpu_model == 68000 ? m68k_run_1 : currprefs.cpu_model >= 68020 && currprefs.cachesize ? m68k_run_2a : + currprefs.cpu_model == 68020 && currprefs.cpu_cycle_exact ? m68k_run_2ce : currprefs.cpu_compatible ? m68k_run_2p : m68k_run_2; } #endif @@ -2618,13 +2657,13 @@ static void m68k_verify (uaecptr addr, uaecptr *nextpc) if (dp->suse) { if (!verify_ea (dp->sreg, dp->smode, dp->size, &val)) { - Exception (3, ®s, 0); + Exception (3, 0); return; } } if (dp->duse) { if (!verify_ea (dp->dreg, dp->dmode, dp->size, &val)) { - Exception (3, ®s, 0); + Exception (3, 0); return; } } @@ -2661,6 +2700,7 @@ static void movemout (TCHAR *out, uae_u16 mask, int mode) { unsigned int dmask, amask; int prevreg = -1, lastreg = -1, first = 1; + if (mode == Apdi) { int i; uae_u8 dmask2 = (mask >> 8) & 0xff; @@ -2719,7 +2759,7 @@ static void disasm_size (TCHAR *instrname, struct instr *dp) 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; - m68kpc_offset = addr - m68k_getpc (®s); + m68kpc_offset = addr - m68k_getpc (); if (buf) memset (buf, 0, bufsize); @@ -2742,7 +2782,7 @@ void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++) ; - buf = buf_out (buf, &bufsize, L"%08lX ", m68k_getpc (®s) + m68kpc_offset); + buf = buf_out (buf, &bufsize, L"%08lX ", m68k_getpc () + m68kpc_offset); m68kpc_offset += 2; @@ -2780,26 +2820,26 @@ void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int } m68kpc_offset += 2; } else if (lookup->mnemo == i_MVMEL) { - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; m68kpc_offset += 2; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); _tcscat (instrname, L","); - movemout (instrname, get_iword_1 (m68kpc_offset - 2), dp->dmode); + movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode); } else if (lookup->mnemo == i_MVMLE) { m68kpc_offset += 2; - movemout (instrname, get_iword_1 (m68kpc_offset - 2), dp->dmode); + movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode); _tcscat (instrname, L","); - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); } else { if (dp->suse) { - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode); } if (dp->suse && dp->duse) _tcscat (instrname, L","); if (dp->duse) { - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); } } @@ -2827,7 +2867,7 @@ void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int buf = buf_out (buf, &bufsize, L"\n"); } if (nextpc) - *nextpc = m68k_getpc (®s) + m68kpc_offset; + *nextpc = m68k_getpc () + m68kpc_offset; } void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr) @@ -2867,7 +2907,7 @@ void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *ne uaecptr newpc = 0; - m68kpc_offset = addr - m68k_getpc (®s); + m68kpc_offset = addr - m68k_getpc (); oldpc = m68kpc_offset; opcode = get_iword_1 (m68kpc_offset); @@ -2892,13 +2932,13 @@ void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *ne } if (dp->suse) { - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, NULL, 0); } if (dp->suse && dp->duse) _tcscat (instrname, L","); if (dp->duse) { - newpc = m68k_getpc (®s) + m68kpc_offset; + newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, NULL, 0); } @@ -2913,7 +2953,7 @@ void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *ne } if (nextpc) - *nextpc = m68k_getpc (®s) + m68kpc_offset; + *nextpc = m68k_getpc () + m68kpc_offset; } struct cpum2c m2cregs[] = { @@ -2992,16 +3032,16 @@ void m68k_dumpstate (void *f, uaecptr *nextpc) int i, j; for (i = 0; i < 8; i++){ - f_out (f, L" D%d %08lX ", i, m68k_dreg (®s, i)); + f_out (f, L" D%d %08lX ", i, m68k_dreg (regs, i)); if ((i & 3) == 3) f_out (f, L"\n"); } for (i = 0; i < 8; i++){ - f_out (f, L" A%d %08lX ", i, m68k_areg (®s, i)); + f_out (f, L" A%d %08lX ", i, m68k_areg (regs, i)); if ((i & 3) == 3) f_out (f, L"\n"); } - if (regs.s == 0) regs.usp = m68k_areg (®s, 7); - if (regs.s && regs.m) regs.msp = m68k_areg (®s, 7); - if (regs.s && regs.m == 0) regs.isp = m68k_areg (®s, 7); + if (regs.s == 0) regs.usp = m68k_areg (regs, 7); + if (regs.s && regs.m) regs.msp = m68k_areg (regs, 7); + if (regs.s && regs.m == 0) regs.isp = m68k_areg (regs, 7); j = 2; f_out (f, L"USP %08X ISP %08X ", regs.usp, regs.isp); for (i = 0; m2cregs[i].regno>= 0; i++) { @@ -3047,7 +3087,7 @@ void m68k_dumpstate (void *f, uaecptr *nextpc) f_out (f, L"Prefetch %04x (%s) %04x (%s)\n", regs.irc, lookup1->name, regs.ir, lookup2->name); } - m68k_disasm (f, m68k_getpc (®s), nextpc, 1); + m68k_disasm (f, m68k_getpc (), nextpc, 1); if (nextpc) f_out (f, L"Next PC: %08lx\n", *nextpc); } @@ -3086,7 +3126,7 @@ uae_u8 *restore_cpu (uae_u8 *src) l = restore_u32 (); if (l & CPUMODE_HALT) { regs.stopped = 1; - set_special (®s, SPCFLAG_STOP); + set_special (SPCFLAG_STOP); } else { regs.stopped = 0; } @@ -3139,7 +3179,7 @@ uae_u8 *restore_cpu (uae_u8 *src) void restore_cpu_finish (void) { init_m68k (); - m68k_setpc (®s, regs.pc); + m68k_setpc (regs.pc); set_cpu_caches (); } @@ -3157,10 +3197,10 @@ uae_u8 *save_cpu (int *len, uae_u8 *dstptr) save_u32 (0x80000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */ for (i = 0;i < 15; i++) save_u32 (regs.regs[i]); /* D0-D7 A0-A6 */ - save_u32 (m68k_getpc (®s)); /* PC */ + save_u32 (m68k_getpc ()); /* PC */ save_u16 (regs.irc); /* prefetch */ save_u16 (regs.ir); /* instruction prefetch */ - MakeSR (®s); + MakeSR (); save_u32 (!regs.s ? regs.regs[15] : regs.usp); /* USP */ save_u32 (regs.s ? regs.regs[15] : regs.isp); /* ISP */ save_u16 (regs.sr); /* SR/CCR */ @@ -3217,7 +3257,7 @@ static void exception3f (uae_u32 opcode, uaecptr addr, uaecptr fault, int writea last_op_for_exception_3 = opcode; last_writeaccess_for_exception_3 = writeaccess; last_instructionaccess_for_exception_3 = instructionaccess; - Exception (3, ®s, fault); + Exception (3, fault); } void exception3 (uae_u32 opcode, uaecptr addr, uaecptr fault) @@ -3233,15 +3273,15 @@ void exception3i (uae_u32 opcode, uaecptr addr, uaecptr fault) void exception2 (uaecptr addr, uaecptr fault) { write_log (L"delayed exception2!\n"); - regs.panic_pc = m68k_getpc (®s); + regs.panic_pc = m68k_getpc (); regs.panic_addr = addr; regs.panic = 2; - set_special (®s, SPCFLAG_BRK); - m68k_setpc (®s, 0xf80000); + set_special (SPCFLAG_BRK); + m68k_setpc (0xf80000); #ifdef JIT - set_special (®s, SPCFLAG_END_COMPILE); + set_special (SPCFLAG_END_COMPILE); #endif - fill_prefetch_slow (®s); + fill_prefetch_slow (); } void cpureset (void) @@ -3254,7 +3294,7 @@ void cpureset (void) customreset (0); return; } - pc = m68k_getpc (®s); + pc = m68k_getpc (); if (pc >= currprefs.chipmem_size) { addrbank *b = &get_mem_bank (pc); if (b->check (pc, 2 + 2)) { @@ -3264,45 +3304,45 @@ void cpureset (void) } write_log (L"M68K RESET PC=%x, rebooting..\n", pc); customreset (0); - m68k_setpc (®s, ksboot); + m68k_setpc (ksboot); return; } /* panic, RAM is going to disappear under PC */ ins = get_word (pc + 2); if ((ins & ~7) == 0x4ed0) { int reg = ins & 7; - uae_u32 addr = m68k_areg (®s, reg); + uae_u32 addr = m68k_areg (regs, reg); write_log (L"reset/jmp (ax) combination emulated -> %x\n", addr); customreset (0); if (addr < 0x80000) addr += 0xf80000; - m68k_setpc (®s, addr - 2); + m68k_setpc (addr - 2); return; } write_log (L"M68K RESET PC=%x, rebooting..\n", pc); customreset (0); - m68k_setpc (®s, ksboot); + m68k_setpc (ksboot); } -void m68k_setstopped (struct regstruct *regs) +void m68k_setstopped (void) { - regs->stopped = 1; + regs.stopped = 1; /* A traced STOP instruction drops through immediately without actually stopping. */ - if ((regs->spcflags & SPCFLAG_DOTRACE) == 0) - set_special (regs, SPCFLAG_STOP); + if ((regs.spcflags & SPCFLAG_DOTRACE) == 0) + set_special (SPCFLAG_STOP); else - m68k_resumestopped (regs); + m68k_resumestopped (); } -void m68k_resumestopped (struct regstruct *regs) +void m68k_resumestopped (void) { - if (!regs->stopped) + if (!regs.stopped) return; - regs->stopped = 0; - fill_prefetch_slow (regs); - unset_special (regs, SPCFLAG_STOP); + regs.stopped = 0; + fill_prefetch_slow (); + unset_special (SPCFLAG_STOP); } /* diff --git a/od-win32/ahidsound_dsonly.c b/od-win32/ahidsound_dsonly.c index 27c050a6..5bce158e 100644 --- a/od-win32/ahidsound_dsonly.c +++ b/od-win32/ahidsound_dsonly.c @@ -92,21 +92,21 @@ static struct winuae *a6; static uae_u32 REGPARAM2 emulib_ExecuteNativeCode2 (TrapContext *context) { unsigned int espstore; - uae_u8* object_UAM = (uae_u8*) m68k_areg (&context->regs, 0); - uae_u32 d1 = m68k_dreg (&context->regs, 1); - uae_u32 d2 = m68k_dreg (&context->regs, 2); - uae_u32 d3 = m68k_dreg (&context->regs, 3); - uae_u32 d4 = m68k_dreg (&context->regs, 4); - uae_u32 d5 = m68k_dreg (&context->regs, 5); - uae_u32 d6 = m68k_dreg (&context->regs, 6); - uae_u32 d7 = m68k_dreg (&context->regs, 7); - uae_u32 a1 = m68k_areg (&context->regs, 1); - uae_u32 a2 = m68k_areg (&context->regs, 2); - uae_u32 a3 = m68k_areg (&context->regs, 3); - uae_u32 a4 = m68k_areg (&context->regs, 4); - uae_u32 a5 = m68k_areg (&context->regs, 5); - uae_u32 a7 = m68k_areg (&context->regs, 7); - uae_u32 regs_ = (uae_u32)&context->regs; + uae_u8* object_UAM = (uae_u8*) m68k_areg (regs, 0); + uae_u32 d1 = m68k_dreg (regs, 1); + uae_u32 d2 = m68k_dreg (regs, 2); + uae_u32 d3 = m68k_dreg (regs, 3); + uae_u32 d4 = m68k_dreg (regs, 4); + uae_u32 d5 = m68k_dreg (regs, 5); + uae_u32 d6 = m68k_dreg (regs, 6); + uae_u32 d7 = m68k_dreg (regs, 7); + uae_u32 a1 = m68k_areg (regs, 1); + uae_u32 a2 = m68k_areg (regs, 2); + uae_u32 a3 = m68k_areg (regs, 3); + uae_u32 a4 = m68k_areg (regs, 4); + uae_u32 a5 = m68k_areg (regs, 5); + uae_u32 a7 = m68k_areg (regs, 7); + uae_u32 regs_ = (uae_u32)®s; CREATE_NATIVE_FUNC_PTR2; uaevar.z3offset = (uae_u32)(get_real_address (0x10000000) - 0x10000000); uaevar.amigawnd = hAmigaWnd; @@ -451,7 +451,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) // d0=108 free swap array // d0=200 ahitweak d1=offset for dsound position pointer - int opcode = m68k_dreg (&context->regs, 0); + int opcode = m68k_dreg (regs, 0); switch (opcode) { @@ -463,17 +463,17 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) cap_pos = 0; sound_bits_ahi = 16; sound_channels_ahi = 2; - sound_freq_ahi = m68k_dreg (&context->regs, 2); - amigablksize = m68k_dreg (&context->regs, 3); + sound_freq_ahi = m68k_dreg (regs, 2); + amigablksize = m68k_dreg (regs, 3); sound_freq_ahi = ahi_open_sound(); uaevar.changenum--; return sound_freq_ahi; case 6: /* new open function */ cap_pos = 0; - sound_freq_ahi = m68k_dreg (&context->regs, 2); - amigablksize = m68k_dreg (&context->regs, 3); - sound_channels_ahi = m68k_dreg (&context->regs, 4); - sound_bits_ahi = m68k_dreg (&context->regs, 5); + sound_freq_ahi = m68k_dreg (regs, 2); + amigablksize = m68k_dreg (regs, 3); + sound_channels_ahi = m68k_dreg (regs, 4); + sound_bits_ahi = m68k_dreg (regs, 5); sound_freq_ahi = ahi_open_sound(); uaevar.changenum--; return sound_freq_ahi; @@ -486,7 +486,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) case 2: { int i; - uaecptr addr = m68k_areg (&context->regs, 0); + uaecptr addr = m68k_areg (regs, 0); for (i = 0; i < amigablksize * 4; i += 4) *ahisndbufpt++ = get_long (addr + i); ahi_finish_sound_buffer(); @@ -524,7 +524,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) cap_pos = cap_pos + t; else cap_pos = 0; - addr = m68k_areg (&context->regs, 0); + addr = m68k_areg (regs, 0); sndbufrecpt = (unsigned int*)pos1; t /= 4; for (i = 0; i < t; i++) { @@ -568,13 +568,13 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) case 11: { #if 1 - put_byte (m68k_areg (&context->regs, 0), 0); + put_byte (m68k_areg (regs, 0), 0); if (clipdat) { char *tmp = ua (clipdat); int i; for (i = 0; i < clipsize && i < strlen (tmp); i++) - put_byte (m68k_areg (&context->regs, 0) + i, tmp[i]); - put_byte (m68k_areg (&context->regs, 0) + clipsize - 1, 0); + put_byte (m68k_areg (regs, 0) + i, tmp[i]); + put_byte (m68k_areg (regs, 0) + clipsize - 1, 0); xfree (tmp); } CloseClipboard (); @@ -585,7 +585,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) case 12: { #if 1 - TCHAR *s = au (get_real_address (m68k_areg (®s, 0))); + TCHAR *s = au (get_real_address (m68k_areg (regs, 0))); static LPTSTR p; int slen; @@ -616,8 +616,8 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) extern uae_u16 vtotal; extern unsigned int new_beamcon0; p96hack_vpos2 = 0; - if (m68k_dreg (&context->regs, 1) > 0) - p96hack_vpos2 = 15625 / m68k_dreg (&context->regs, 1); + if (m68k_dreg (regs, 1) > 0) + p96hack_vpos2 = 15625 / m68k_dreg (regs, 1); if (!currprefs.cs_ciaatod) changed_prefs.cs_ciaatod = currprefs.cs_ciaatod = currprefs.ntscmode ? 2 : 1; p96refresh_active=1; @@ -626,7 +626,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) return 0; case 20: - return enforcer_enable(m68k_dreg (&context->regs, 1)); + return enforcer_enable(m68k_dreg (regs, 1)); case 21: return enforcer_disable(); @@ -648,7 +648,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) int ok = 0; TCHAR *filepart; - dllptr = m68k_areg (&context->regs, 0); + dllptr = m68k_areg (regs, 0); dllname = au ((uae_char*)get_real_address (dllptr)); dpath[0] = 0; GetFullPathName (dllname, sizeof dpath / sizeof (TCHAR), dpath, &filepart); @@ -692,8 +692,8 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) HMODULE m; uaecptr funcaddr; char *funcname; - m = (HMODULE) m68k_dreg (&context->regs, 1); - funcaddr = m68k_areg (&context->regs, 0); + m = (HMODULE) m68k_dreg (regs, 1); + funcaddr = m68k_areg (regs, 0); funcname = get_real_address (funcaddr); return (uae_u32) GetProcAddress (m, funcname); } @@ -718,7 +718,7 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) case 103: //close dll { HMODULE libaddr; - libaddr = (HMODULE) m68k_dreg (&context->regs, 1); + libaddr = (HMODULE) m68k_dreg (regs, 1); FreeLibrary (libaddr); return 0; } @@ -742,8 +742,8 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) //a0 = start address //d1 = number of 16bit vars //returns address of new array - src = m68k_areg (&context->regs, 0); - num_vars = m68k_dreg (&context->regs, 1); + src = m68k_areg (regs, 0); + num_vars = m68k_dreg (regs, 1); if (bswap_buffer_size < num_vars * 2) { bswap_buffer_size = (num_vars + 1024) * 2; @@ -805,8 +805,8 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) //a0 = start address //d1 = number of 32bit vars //returns address of new array - src = m68k_areg (&context->regs, 0); - num_vars = m68k_dreg (&context->regs, 1); + src = m68k_areg (regs, 0); + num_vars = m68k_dreg (regs, 1); if (bswap_buffer_size < num_vars * 4) { bswap_buffer_size = (num_vars + 16384) * 4; free(bswap_buffer); @@ -862,8 +862,8 @@ uae_u32 REGPARAM2 ahi_demux (TrapContext *context) #endif case 200: - ahitweak = m68k_dreg (&context->regs, 1); - ahi_pollrate = m68k_dreg (&context->regs, 2); + ahitweak = m68k_dreg (regs, 1); + ahi_pollrate = m68k_dreg (regs, 2); if (ahi_pollrate < 10) ahi_pollrate = 10; if (ahi_pollrate > 60) diff --git a/od-win32/ahidsound_new.c b/od-win32/ahidsound_new.c index d9921e70..58ec0b1c 100644 --- a/od-win32/ahidsound_new.c +++ b/od-win32/ahidsound_new.c @@ -1325,8 +1325,8 @@ static uae_u32 init (TrapContext *ctx) static uae_u32 AHIsub_AllocAudio (TrapContext *ctx) { int i; - uae_u32 tags = m68k_areg (&ctx->regs, 1); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 tags = m68k_areg (regs, 1); + uae_u32 audioctrl = m68k_areg (regs, 2); uae_u32 pbase = get_long (audioctrl + ahiac_DriverData); uae_u32 tag, data, v, ver, size; uae_u32 ret = AHISF_KNOWSTEREO | AHISF_KNOWHIFI; @@ -1403,7 +1403,7 @@ static uae_u32 AHIsub_AllocAudio (TrapContext *ctx) static void AHIsub_Disable (TrapContext *ctx) { - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; if (ahi_debug > 1) write_log (L"AHI: Disable(%08x)\n", audioctrl); @@ -1412,7 +1412,7 @@ static void AHIsub_Disable (TrapContext *ctx) static void AHIsub_Enable (TrapContext *ctx) { - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; if (ahi_debug > 1) write_log (L"AHI: Enable(%08x)\n", audioctrl); @@ -1423,7 +1423,7 @@ static void AHIsub_Enable (TrapContext *ctx) static void AHIsub_FreeAudio (TrapContext *ctx) { - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 audioctrl = m68k_areg (regs, 2); uae_u32 pbase = get_long (audioctrl + ahiac_DriverData); struct DSAHI *dsahip = GETAHI; if (ahi_debug) @@ -1523,11 +1523,11 @@ static uae_u32 getattr2 (struct DSAHI *dsahip, uae_u32 attribute, uae_u32 argume static uae_u32 AHIsub_GetAttr (TrapContext *ctx) { - uae_u32 attribute = m68k_dreg (&ctx->regs, 0); - uae_u32 argument = m68k_dreg (&ctx->regs, 1); - uae_u32 def = m68k_dreg (&ctx->regs, 2); - uae_u32 taglist = m68k_areg (&ctx->regs, 1); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 attribute = m68k_dreg (regs, 0); + uae_u32 argument = m68k_dreg (regs, 1); + uae_u32 def = m68k_dreg (regs, 2); + uae_u32 taglist = m68k_areg (regs, 1); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; uae_u32 v; @@ -1540,9 +1540,9 @@ static uae_u32 AHIsub_GetAttr (TrapContext *ctx) static uae_u32 AHIsub_HardwareControl (TrapContext *ctx) { - uae_u32 attribute = m68k_dreg (&ctx->regs, 0); - uae_u32 argument = m68k_dreg (&ctx->regs, 1); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 attribute = m68k_dreg (regs, 0); + uae_u32 argument = m68k_dreg (regs, 1); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; if (ahi_debug) write_log (L"AHI: HardwareControl(%08x=%d,%08x,%08x)\n", attribute, attribute & 0x7fff, argument, audioctrl); @@ -1576,8 +1576,8 @@ static uae_u32 AHIsub_HardwareControl (TrapContext *ctx) static uae_u32 AHIsub_Start (TrapContext *ctx) { - uae_u32 flags = m68k_dreg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 flags = m68k_dreg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; int i; @@ -1602,8 +1602,8 @@ static uae_u32 AHIsub_Start (TrapContext *ctx) static uae_u32 AHIsub_Stop (TrapContext *ctx) { - uae_u32 flags = m68k_dreg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 flags = m68k_dreg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; int i; @@ -1627,8 +1627,8 @@ static uae_u32 AHIsub_Stop (TrapContext *ctx) static uae_u32 AHIsub_Update (TrapContext *ctx) { - uae_u32 flags = m68k_dreg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 flags = m68k_dreg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; if (ahi_debug) write_log (L"AHI: Update(%08x,%08x)\n", flags, audioctrl); @@ -1638,11 +1638,11 @@ static uae_u32 AHIsub_Update (TrapContext *ctx) static uae_u32 AHIsub_SetVol (TrapContext *ctx) { - uae_u16 channel = m68k_dreg (&ctx->regs, 0); - uae_s32 volume = m68k_dreg (&ctx->regs, 1); - uae_s32 pan = m68k_dreg (&ctx->regs, 2); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); - uae_u32 flags = m68k_dreg (&ctx->regs, 3); + uae_u16 channel = m68k_dreg (regs, 0); + uae_s32 volume = m68k_dreg (regs, 1); + uae_s32 pan = m68k_dreg (regs, 2); + uae_u32 audioctrl = m68k_areg (regs, 2); + uae_u32 flags = m68k_dreg (regs, 3); struct DSAHI *dsahip = GETAHI; struct dschannel *dc = GETCHANNEL; @@ -1669,10 +1669,10 @@ static uae_u32 AHIsub_SetVol (TrapContext *ctx) static uae_u32 AHIsub_SetFreq (TrapContext *ctx) { - uae_u16 channel = m68k_dreg (&ctx->regs, 0); - uae_u32 frequency = m68k_dreg (&ctx->regs, 1); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); - uae_u32 flags = m68k_dreg (&ctx->regs, 3); + uae_u16 channel = m68k_dreg (regs, 0); + uae_u32 frequency = m68k_dreg (regs, 1); + uae_u32 audioctrl = m68k_areg (regs, 2); + uae_u32 flags = m68k_dreg (regs, 3); struct DSAHI *dsahip = GETAHI; struct dschannel *dc = GETCHANNEL; @@ -1691,12 +1691,12 @@ static uae_u32 AHIsub_SetFreq (TrapContext *ctx) static uae_u32 AHIsub_SetSound (TrapContext *ctx) { - uae_u16 channel = m68k_dreg (&ctx->regs, 0); - uae_u16 sound = m68k_dreg (&ctx->regs, 1); - uae_u32 offset = m68k_dreg (&ctx->regs, 2); - uae_u32 length = m68k_dreg (&ctx->regs, 3); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); - uae_u32 flags = m68k_dreg (&ctx->regs, 4); + uae_u16 channel = m68k_dreg (regs, 0); + uae_u16 sound = m68k_dreg (regs, 1); + uae_u32 offset = m68k_dreg (regs, 2); + uae_u32 length = m68k_dreg (regs, 3); + uae_u32 audioctrl = m68k_areg (regs, 2); + uae_u32 flags = m68k_dreg (regs, 4); struct DSAHI *dsahip = GETAHI; struct dssample *ds = GETSAMPLE; struct dschannel *dc = GETCHANNEL; @@ -1736,8 +1736,8 @@ static uae_u32 AHIsub_SetSound (TrapContext *ctx) static uae_u32 AHIsub_SetEffect (TrapContext *ctx) { - uae_u32 effect = m68k_areg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u32 effect = m68k_areg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); uae_u32 effectype = get_long (effect); uae_u32 puaebase = get_long (audioctrl + ahiac_DriverData); struct DSAHI *dsahip = GETAHI; @@ -1764,10 +1764,10 @@ static uae_u32 AHIsub_SetEffect (TrapContext *ctx) static uae_u32 AHIsub_LoadSound (TrapContext *ctx) { - uae_u16 sound = m68k_dreg (&ctx->regs, 0); - uae_u32 type = m68k_dreg (&ctx->regs, 1); - uae_u32 info = m68k_areg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u16 sound = m68k_dreg (regs, 0); + uae_u32 type = m68k_dreg (regs, 1); + uae_u32 info = m68k_areg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; uae_u32 ret = AHIE_BADSOUNDTYPE; int sampletype = get_long (info + ahisi_Type); @@ -1845,8 +1845,8 @@ static uae_u32 AHIsub_LoadSound (TrapContext *ctx) static uae_u32 AHIsub_UnloadSound (TrapContext *ctx) { - uae_u16 sound = m68k_dreg (&ctx->regs, 0); - uae_u32 audioctrl = m68k_areg (&ctx->regs, 2); + uae_u16 sound = m68k_dreg (regs, 0); + uae_u32 audioctrl = m68k_areg (regs, 2); struct DSAHI *dsahip = GETAHI; struct dssample *ds = GETSAMPLE; @@ -1860,7 +1860,7 @@ static uae_u32 AHIsub_UnloadSound (TrapContext *ctx) static uae_u32 REGPARAM2 ahi_demux (TrapContext *ctx) { uae_u32 ret = 0; - uae_u32 sp = m68k_areg (&ctx->regs, 7); + uae_u32 sp = m68k_areg (regs, 7); uae_u32 offset = get_long (sp + 4); if (0 && ahi_debug) diff --git a/od-win32/bsdsock.c b/od-win32/bsdsock.c index 62eb0ada..3d37c361 100644 --- a/od-win32/bsdsock.c +++ b/od-win32/bsdsock.c @@ -1803,8 +1803,8 @@ void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, ua return; } if (wssigs) { - m68k_dreg (&context->regs,0) = 0; - m68k_dreg (&context->regs,1) = wssigs; + m68k_dreg (regs,0) = 0; + m68k_dreg (regs,1) = wssigs; sigs = CallLib (context, get_long (4),-0x132) & wssigs; // SetSignal() if (sigs) { @@ -1825,7 +1825,7 @@ void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, ua if (nfds == 0) { // No sockets to check, only wait for signals if (wssigs != 0) { - m68k_dreg (&context->regs, 0) = wssigs; + m68k_dreg (regs, 0) = wssigs; sigs = CallLib (context, get_long (4),-0x13e); // Wait() put_long (sigmp, sigs & wssigs); } @@ -1885,7 +1885,7 @@ void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, ua SetEvent(bsd->hEvents[i]); - m68k_dreg (&context->regs, 0) = (((uae_u32)1) << sb->signal) | sb->eintrsigs | wssigs; + m68k_dreg (regs, 0) = (((uae_u32)1) << sb->signal) | sb->eintrsigs | wssigs; sigs = CallLib (context, get_long (4), -0x13e); // Wait() /* if ((1<signal) & sigs) @@ -1946,7 +1946,7 @@ uae_u32 host_Inet_NtoA(TrapContext *context, SB, uae_u32 in) BSDTRACE((L"Inet_NtoA(%lx) -> ",in)); if ((addr = inet_ntoa(ina)) != NULL) { - scratchbuf = m68k_areg (&context->regs,6) + offsetof(struct UAEBSDBase,scratchbuf); + scratchbuf = m68k_areg (regs,6) + offsetof(struct UAEBSDBase,scratchbuf); strncpyha(scratchbuf,addr,SCRATCHBUFSIZE); BSDTRACE((L"%s\n",addr)); return scratchbuf; diff --git a/od-win32/debug_win32.c b/od-win32/debug_win32.c index 10111201..f432f976 100644 --- a/od-win32/debug_win32.c +++ b/od-win32/debug_win32.c @@ -597,11 +597,11 @@ static void ShowDasm(int direction) hDasm = GetDlgItem(hDbgWnd, IDC_DBG_DASM); if (!dbgpage[currpage].init) { - addr = m68k_getpc (®s); + addr = m68k_getpc (); dbgpage[currpage].init = 1; } else if (dbgpage[currpage].autoset == 1 && direction == 0) { - addr = m68k_getpc (®s); + addr = m68k_getpc (); } else addr = dbgpage[currpage].dasmaddr; @@ -636,7 +636,7 @@ static void SetMemToPC(void) { int i, id; - dbgpage[currpage].dasmaddr = m68k_getpc (®s); + dbgpage[currpage].dasmaddr = m68k_getpc (); _stprintf(dbgpage[currpage].addrinput, L"%08lX", dbgpage[currpage].dasmaddr); for (i = 0; i < MAXPAGECONTROLS; i++) { id = GetDlgCtrlID(dbgpage[currpage].ctrl[i]); @@ -1020,12 +1020,12 @@ static void ListboxEndEdit(HWND hwnd, BOOL acceptinput) if (id == IDC_DBG_DREG) { _tcsncpy(hexstr + 2, txt, 8); hexstr[10] = '\0'; - m68k_dreg(®s, index) = _tcstoul(hexstr, NULL, 0); + m68k_dreg(regs, index) = _tcstoul(hexstr, NULL, 0); } else if (id == IDC_DBG_AREG) { _tcsncpy(hexstr + 2, txt, 8); hexstr[10] = '\0'; - m68k_areg(®s, index) = _tcstoul(hexstr, NULL, 0); + m68k_areg(regs, index) = _tcstoul(hexstr, NULL, 0); } else if (id == IDC_DBG_FPREG) { TCHAR *stopstr; @@ -1041,7 +1041,7 @@ static void ListboxEndEdit(HWND hwnd, BOOL acceptinput) uae_u32 addr; SendMessage(hwnd, LB_GETTEXT, index, (LPARAM)tmp); if (id == IDC_DBG_AMEM) { - addr = m68k_areg(®s, index); + addr = m68k_areg(regs, index); offset = 0; bytes = 16; } @@ -1422,11 +1422,11 @@ static LRESULT CALLBACK ListboxProc(HWND hWnd, UINT message, WPARAM wParam, LPAR case ID_DBG_SETTOA5: case ID_DBG_SETTOA6: case ID_DBG_SETTOA7: - dbgpage[currpage].memaddr = m68k_areg(®s, LOWORD(wParam) - ID_DBG_SETTOA0); + dbgpage[currpage].memaddr = m68k_areg(regs, LOWORD(wParam) - ID_DBG_SETTOA0); ShowMem(0); return 0; case ID_DBG_SETTOPC: - dbgpage[currpage].dasmaddr = m68k_getpc(®s); + dbgpage[currpage].dasmaddr = m68k_getpc(); ShowDasm(0); return 0; case ID_DBG_ENTERADDR: @@ -1972,7 +1972,7 @@ static LRESULT CALLBACK DebuggerProc (HWND hDlg, UINT message, WPARAM wParam, LP _tcsncpy(addrstr + 2, text + pos + 1, 8); else if (text[pos] == '(' && _istdigit(text[pos + 2])) { //address register indirect int reg = _tstoi(text + pos + 2); - uae_u32 loc = m68k_areg (®s, reg); + uae_u32 loc = m68k_areg (regs, reg); _stprintf(addrstr + 2, L"%08lx", loc); } } @@ -2010,7 +2010,7 @@ static LRESULT CALLBACK DebuggerProc (HWND hDlg, UINT message, WPARAM wParam, LP TextOut(hdc, rc.left, rc.top, L"=", 1); } rc.left += size; - if (addr == m68k_getpc(®s)) { + if (addr == m68k_getpc()) { FillRect(hdc, &rc, GetSysColorBrush(COLOR_HIGHLIGHT)); SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT)); SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT)); @@ -2125,17 +2125,17 @@ void update_debug_info(void) return; hwnd = GetDlgItem(hDbgWnd, IDC_DBG_DREG); for (i = 0; i < 8; i++) { - _stprintf(out, L"D%d: %08lX", i, m68k_dreg (®s, i)); + _stprintf(out, L"D%d: %08lX", i, m68k_dreg (regs, i)); UpdateListboxString(hwnd, i, out, TRUE); } hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AREG); for (i = 0; i < 8; i++) { hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AREG); - _stprintf(out, L"A%d: %08lX", i, m68k_areg (®s, i)); + _stprintf(out, L"A%d: %08lX", i, m68k_areg (regs, i)); UpdateListboxString(hwnd, i, out, TRUE); hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AMEM); - dumpmem2(m68k_areg (®s, i), out, sizeof(out)); + dumpmem2(m68k_areg (regs, i), out, sizeof(out)); UpdateListboxString(hwnd, i, out + 9, TRUE); } @@ -2167,7 +2167,7 @@ void update_debug_info(void) UpdateListboxString(hwnd, 4, out, TRUE); hwnd = GetDlgItem(hDbgWnd, IDC_DBG_PC); - _stprintf(out, L"PC: %08lX", m68k_getpc (®s)); + _stprintf(out, L"PC: %08lX", m68k_getpc ()); UpdateListboxString(hwnd, 0, out, TRUE); hwnd = GetDlgItem(hDbgWnd, IDC_DBG_PREFETCH); diff --git a/od-win32/dxwrap.c b/od-win32/dxwrap.c index a67c9523..f647fe99 100644 --- a/od-win32/dxwrap.c +++ b/od-win32/dxwrap.c @@ -354,6 +354,7 @@ HRESULT DirectDraw_CreateMainSurface (int width, int height) DDSURFACEDESC2 desc = { 0 }; LPDIRECTDRAWSURFACE7 surf; + width = (width + 7) & ~7; desc.dwSize = sizeof (desc); desc.dwFlags = DDSD_CAPS; desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; diff --git a/od-win32/gencpu_msvc/gencpu_msvc.vcproj b/od-win32/gencpu_msvc/gencpu_msvc.vcproj index d7ee9042..9e3660ef 100644 --- a/od-win32/gencpu_msvc/gencpu_msvc.vcproj +++ b/od-win32/gencpu_msvc/gencpu_msvc.vcproj @@ -44,7 +44,7 @@ AdditionalOptions="" Optimization="0" AdditionalIncludeDirectories="..\..\include,..\..,..\" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,__STDC__" + PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" diff --git a/od-win32/picasso96_win.c b/od-win32/picasso96_win.c index 13ef0836..5108b58e 100644 --- a/od-win32/picasso96_win.c +++ b/od-win32/picasso96_win.c @@ -1310,7 +1310,6 @@ d7: RGBFTYPE RGBFormat */ static uae_u32 REGPARAM2 picasso_SetSpritePosition (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bi = m68k_areg (regs, 0); boardinfo = bi; newcursor_x = (uae_s16)get_word (bi + PSSO_BoardInfo_MouseX) - picasso96_state.XOffset; @@ -1335,7 +1334,6 @@ This function changes one of the possible three colors of the hardware sprite. */ static uae_u32 REGPARAM2 picasso_SetSpriteColor (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bi = m68k_areg (regs, 0); uae_u8 idx = m68k_dreg (regs, 0); uae_u8 red = m68k_dreg (regs, 1); @@ -1866,7 +1864,6 @@ compensate for this when accounting for hotspot offsets and sprite dimensions. */ static uae_u32 REGPARAM2 picasso_SetSpriteImage (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bi = m68k_areg (regs, 0); boardinfo = bi; return setspriteimage (bi); @@ -1883,7 +1880,6 @@ This function activates or deactivates the hardware sprite. */ static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u32 result = 0; uae_u32 activate = m68k_dreg (regs, 0); if (!hwsprite) @@ -1916,7 +1912,6 @@ static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) */ static uae_u32 REGPARAM2 picasso_FindCard (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr AmigaBoardInfo = m68k_areg (regs, 0); /* NOTES: See BoardInfo struct definition in Picasso96 dev info */ #ifdef UAEGFX_INTERNAL @@ -2251,8 +2246,8 @@ void picasso96_alloc (TrapContext *ctx) uaegfx_card_install (ctx, size); init_alloc (); #else - m68k_dreg (&ctx->regs, 0) = size; - m68k_dreg (&ctx->regs, 1) = 65536 + 1; + m68k_dreg (regs, 0) = size; + m68k_dreg (regs, 1) = 65536 + 1; if ((picasso96_amem = CallLib (ctx, get_long (4), -0xC6))) { /* AllocMem */ uaecptr rt; picasso96_amemend = picasso96_amem + size; @@ -2449,7 +2444,6 @@ static void addmode (uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution */ static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; int LibResolutionStructureCount = 0; int i, j, unkcnt; uaecptr amem; @@ -2532,7 +2526,6 @@ static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) */ static uae_u32 REGPARAM2 picasso_SetSwitch (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF; TCHAR p96text[100]; @@ -2597,7 +2590,6 @@ static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) { /* Fill in some static UAE related structure about this new CLUT setting * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */ - struct regstruct *regs = &ctx->regs; uae_u16 start = m68k_dreg (regs, 0); uae_u16 count = m68k_dreg (regs, 1); uaecptr boardinfo = m68k_areg (regs, 0); @@ -2618,7 +2610,6 @@ static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) */ static uae_u32 REGPARAM2 picasso_SetDAC (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; /* Fill in some static UAE related structure about this new DAC setting * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ @@ -2662,7 +2653,6 @@ static void init_picasso_screen (void) */ static uae_u32 REGPARAM2 picasso_SetGC (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; /* Fill in some static UAE related structure about this new ModeInfo setting */ uaecptr AmigaBoardInfo = m68k_areg (regs, 0); uae_u32 border = m68k_dreg (regs, 0); @@ -2723,7 +2713,6 @@ static void picasso_SetPanningInit (void) static uae_u32 REGPARAM2 picasso_SetPanning (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u16 Width = m68k_dreg (regs, 0); uaecptr start_of_screen = m68k_areg (regs, 1); uaecptr bi = m68k_areg (regs, 0); @@ -2821,7 +2810,6 @@ static void do_xor8 (uae_u8 *p, int w, uae_u32 v) */ static uae_u32 REGPARAM2 picasso_InvertRect (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr renderinfo = m68k_areg (regs, 1); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); @@ -2871,7 +2859,6 @@ FillRect: ***********************************************************/ static uae_u32 REGPARAM2 picasso_FillRect (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr renderinfo = m68k_areg (regs, 1); uae_u32 X = (uae_u16)m68k_dreg (regs, 0); uae_u32 Y = (uae_u16)m68k_dreg (regs, 1); @@ -3046,7 +3033,6 @@ BlitRect: ***********************************************************/ static uae_u32 REGPARAM2 picasso_BlitRect (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr renderinfo = m68k_areg (regs, 1); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); @@ -3084,7 +3070,6 @@ BlitRectNoMaskComplete: ***********************************************************/ static uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr srcri = m68k_areg (regs, 1); uaecptr dstri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); @@ -3154,7 +3139,6 @@ STATIC_INLINE void PixelWrite (uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, ua */ static uae_u32 REGPARAM2 picasso_BlitPattern (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr rinf = m68k_areg (regs, 1); uaecptr pinf = m68k_areg (regs, 2); unsigned long X = (uae_u16)m68k_dreg (regs, 0); @@ -3317,7 +3301,6 @@ BlitTemplate: ***********************************************************************************/ static uae_u32 REGPARAM2 picasso_BlitTemplate (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u8 inversion = 0; uaecptr rinf = m68k_areg (regs, 1); uaecptr tmpl = m68k_areg (regs, 2); @@ -3479,7 +3462,6 @@ static uae_u32 REGPARAM2 picasso_BlitTemplate (TrapContext *ctx) */ static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u16 width = m68k_dreg (regs, 0); uae_u32 type = m68k_dreg (regs, 7); width = GetBytesPerPixel (type) * width; @@ -3496,7 +3478,6 @@ static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (TrapContext *ctx) */ static uae_u32 REGPARAM2 picasso_SetDisplay (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uae_u32 state = m68k_dreg (regs, 0); P96TRACE ((L"SetDisplay(%d)\n", state)); return !state; @@ -3633,7 +3614,6 @@ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, */ static uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); @@ -3773,7 +3753,6 @@ static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, */ static uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); uaecptr cim = m68k_areg (regs, 3); @@ -4313,7 +4292,6 @@ void InitPicasso96 (void) static uae_u32 REGPARAM2 picasso_SetInterrupt (TrapContext *ctx) { - struct regstruct *regs = &ctx->regs; uaecptr bi = m68k_areg (regs, 0); uae_u32 onoff = m68k_dreg (regs, 0); interrupt_enabled = onoff; @@ -4571,11 +4549,11 @@ static void initvblankirq (TrapContext *ctx, uaecptr base) put_word (c, 0x7000); c += 2; // label: moveq #0,d0 put_word (c, RTS); // rts - m68k_areg (&ctx->regs, 1) = p1; - m68k_dreg (&ctx->regs, 0) = 5; /* VERTB */ + m68k_areg (regs, 1) = p1; + m68k_dreg (regs, 0) = 5; /* VERTB */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ - m68k_areg (&ctx->regs, 1) = p2; - m68k_dreg (&ctx->regs, 0) = 3; /* PORTS */ + m68k_areg (regs, 1) = p2; + m68k_dreg (regs, 0) = 3; /* PORTS */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ } @@ -4640,20 +4618,20 @@ static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 extrasize) datatable = makedatatable (uaegfx_resid, uaegfx_resname, 0x09, -50, UAEGFX_VERSION, UAEGFX_REVISION); - a2 = m68k_areg (&ctx->regs, 2); - m68k_areg (&ctx->regs, 0) = functable; - m68k_areg (&ctx->regs, 1) = datatable; - m68k_areg (&ctx->regs, 2) = 0; - m68k_dreg (&ctx->regs, 0) = CARD_SIZEOF + extrasize; - m68k_dreg (&ctx->regs, 1) = 0; + a2 = m68k_areg (regs, 2); + m68k_areg (regs, 0) = functable; + m68k_areg (regs, 1) = datatable; + m68k_areg (regs, 2) = 0; + m68k_dreg (regs, 0) = CARD_SIZEOF + extrasize; + m68k_dreg (regs, 1) = 0; uaegfx_base = CallLib (ctx, exec, -0x54); /* MakeLibrary */ - m68k_areg (&ctx->regs, 2) = a2; + m68k_areg (regs, 2) = a2; if (!uaegfx_base) return 0; - m68k_areg (&ctx->regs, 1) = uaegfx_base; + m68k_areg (regs, 1) = uaegfx_base; CallLib (ctx, exec, -0x18c); /* AddLibrary */ - m68k_areg (&ctx->regs, 1) = EXPANSION_explibname; - m68k_dreg (&ctx->regs, 0) = 0; + m68k_areg (regs, 1) = EXPANSION_explibname; + m68k_dreg (regs, 0) = 0; put_long (uaegfx_base + CARD_EXPANSIONBASE, CallLib (ctx, exec, -0x228)); /* OpenLibrary */ put_long (uaegfx_base + CARD_EXECBASE, exec); put_long (uaegfx_base + CARD_NAME, uaegfx_resname); diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index d4dcb9cc..a45f1075 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -987,8 +987,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,6,2,0 - PRODUCTVERSION 1,6,2,0 + FILEVERSION 2,0,0,0 + PRODUCTVERSION 2,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1004,12 +1004,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "WinUAE" - VALUE "FileVersion", "1.6.2" + VALUE "FileVersion", "2.0.0" VALUE "InternalName", "WinUAE" VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)" VALUE "OriginalFilename", "WinUAE.exe" VALUE "ProductName", "WinUAE" - VALUE "ProductVersion", "1.6.2" + VALUE "ProductVersion", "2.0.0" END END BLOCK "VarFileInfo" diff --git a/od-win32/screenshot.c b/od-win32/screenshot.c index 7afd5385..13715a9c 100644 --- a/od-win32/screenshot.c +++ b/od-win32/screenshot.c @@ -70,7 +70,7 @@ static LPVOID lpvBits = NULL; // pointer to bitmap bits array static HBITMAP offscreen_bitmap; static int screenshot_prepared; -void screenshot_free(void) +void screenshot_free (void) { if (surface_dc) releasehdc (surface_dc); @@ -161,7 +161,7 @@ static void _cdecl pngtest_blah (png_structp png_ptr, png_const_charp message) write_log (L"%s: libpng warning: %s\n", name, message); } -static int savepng(FILE *fp) +static int savepng (FILE *fp) { png_structp png_ptr; png_infop info_ptr; @@ -191,7 +191,7 @@ static int savepng(FILE *fp) row_pointers = xmalloc (h * sizeof (png_bytep*)); for (i = 0; i < h; i++) { int j = h - i - 1; - row_pointers[i] = (uae_u8*)lpvBits + j * 3 * ((w + 3) & ~3); + row_pointers[i] = (uae_u8*)lpvBits + j * (((w * 24 + 31) & ~31) / 8); } png_set_rows (png_ptr, info_ptr, row_pointers); png_write_png (png_ptr,info_ptr, PNG_TRANSFORM_BGR, NULL); diff --git a/od-win32/sounddep/sound.h b/od-win32/sounddep/sound.h index ffd0f248..d94e39f0 100644 --- a/od-win32/sounddep/sound.h +++ b/od-win32/sounddep/sound.h @@ -82,8 +82,8 @@ STATIC_INLINE void check_sound_buffers (void) p[2] = p[-2]; p[3] = p[-1]; sum = (uae_s32)(p[-2]) + (uae_s32)(p[-1]) + (uae_s32)(p[2]) + (uae_s32)(p[3]); - p[0] = sum >> 3; - p[1] = sum >> 3; + p[0] = sum / 8; + p[1] = sum / 8; paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 4 * 2); } #if SOUNDSTUFF > 0 diff --git a/od-win32/sysconfig.h b/od-win32/sysconfig.h index d9e1db11..622674cd 100644 --- a/od-win32/sysconfig.h +++ b/od-win32/sysconfig.h @@ -45,7 +45,8 @@ #define FULLMMU /* Aranym 68040 MMU */ #define CPUEMU_0 /* generic 680x0 emulation */ #define CPUEMU_11 /* 68000+prefetch emulation */ -#define CPUEMU_12 /* cycle-exact cpu&blitter */ +#define CPUEMU_12 /* 68000 cycle-exact cpu&blitter */ +#define CPUEMU_13 /* 68020 "cycle-exact" + blitter */ #define ACTION_REPLAY /* Action Replay 1/2/3 support */ #define PICASSO96 /* Picasso96 display card emulation */ #define UAEGFX_INTERNAL /* built-in libs:picasso96/uaegfx.card */ diff --git a/od-win32/win32.c b/od-win32/win32.c index 39fb24e3..1a8df0bf 100644 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -4409,7 +4409,7 @@ LONG WINAPI WIN32_ExceptionFilter (struct _EXCEPTION_POINTERS *pExceptionPointer if ((p >= (void*)regs.pc_p && p < (void*)(regs.pc_p + 32)) || (p >= (void*)prevpc && p < (void*)(prevpc + 32))) { int got = 0; - uaecptr opc = m68k_getpc (®s); + uaecptr opc = m68k_getpc (); void *ps = get_real_address (0); m68k_dumpstate (0, 0); efix (&ctx->Eax, p, ps, &got); @@ -4423,7 +4423,7 @@ LONG WINAPI WIN32_ExceptionFilter (struct _EXCEPTION_POINTERS *pExceptionPointer write_log (L"failed to find and fix the problem (%p). crashing..\n", p); } else { void *ppc = regs.pc_p; - m68k_setpc (®s, 0); + m68k_setpc (0); if (ppc != regs.pc_p) { prevpc = (uae_u8*)ppc; } diff --git a/od-win32/win32.h b/od-win32/win32.h index 6d0d51a5..2680b607 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -17,8 +17,8 @@ #define WINUAEPUBLICBETA 1 -#define WINUAEBETA L"6" -#define WINUAEDATE MAKEBD(2009, 8, 9) +#define WINUAEBETA L"7" +#define WINUAEDATE MAKEBD(2009, 8, 16) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 7b9229fa..a6303ee8 100644 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -2411,7 +2411,7 @@ static BOOL doInit (void) gfxvidinfo.bufmem = 0; gfxvidinfo.linemem = 0; gfxvidinfo.emergmem = scrlinebuf; // memcpy from system-memory to video-memory - gfxvidinfo.width = currentmode->amiga_width; + gfxvidinfo.width = (currentmode->amiga_width + 7) & ~7; gfxvidinfo.height = currentmode->amiga_height; gfxvidinfo.maxblocklines = 0; // flush_screen actually does everything gfxvidinfo.rowbytes = currentmode->pitch; diff --git a/od-win32/winuae_msvc/winuae_msvc.vcproj b/od-win32/winuae_msvc/winuae_msvc.vcproj index 39485de7..d98210fe 100644 --- a/od-win32/winuae_msvc/winuae_msvc.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.vcproj @@ -1446,11 +1446,11 @@ > + + diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 59eb664e..6b8d251f 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,27 @@ + +Beta 7: + +- removed very old width divisible by 8 restriction +- genlock "emulation" (chipset clocks stop if no genlock and BPLCON0 + external sync bit is enabled) was broken few betas ago +- NTSC alternating short/long line emulated (perhaps some rare + NTSC-only demo cares about this) +- 5.1 sound mode had wrong Amiga channels -> center/sub mixing ratio +- another MOVEM disassembler fix +- pointless regstruct duplication in sources finally removed +- 68EC020/68020 "cycle exact" mode implemented. This is A500 chipset + cycle exact mode combined with 68020 CPU. 68020's chip RAM fetches + are slowed by DMA, instruction cache is not emulated but "close + enough" opcode fetches are not slowed down as much (better than + nothing). Extra instruction processing cycle usage is not yet + included, CPU basically runs as fast as memory allows. (which is + more or less correct except slow instructions like mul and div need + extra cycles) Quickstart A1200/CD32 most compatible now enables this + new CE-mode. Some weird sound problems can be noticed, reason unknown.. + +Two above changes can break lots of things as usual.. + Beta 6: - STOP increased PC only by 2 if trace was active (copy protections..) diff --git a/sana2.c b/sana2.c index f0e6db6b..041c9fad 100644 --- a/sana2.c +++ b/sana2.c @@ -265,7 +265,7 @@ static int start_thread (struct devstruct *dev) static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; @@ -286,8 +286,8 @@ static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) if (!dev->opencnt) { dev->exclusive = 0; if (pdev->tempbuf) { - m68k_areg (&context->regs, 1) = pdev->tempbuf; - m68k_dreg (&context->regs, 0) = pdev->td->mtu + ETH_HEADER_SIZE + 2; + m68k_areg (regs, 1) = pdev->tempbuf; + m68k_dreg (regs, 0) = pdev->td->mtu + ETH_HEADER_SIZE + 2; CallLib (context, get_long (4), -0xD2); /* FreeMem */ pdev->tempbuf = 0; } @@ -297,7 +297,7 @@ static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) write_comm_pipe_u32 (&dev->requests, 0, 1); write_log (L"%s: opencnt == 0, all instances closed\n", SANA2NAME); } - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) - 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } @@ -329,8 +329,8 @@ static int initint (TrapContext *ctx) if (irq_init) return 1; - m68k_dreg (&ctx->regs, 0) = 26; - m68k_dreg (&ctx->regs, 1) = 65536 + 1; + m68k_dreg (regs, 0) = 26; + m68k_dreg (regs, 1) = 65536 + 1; p = CallLib (ctx, get_long (4), -0xC6); /* AllocMem */ if (!p) return 0; @@ -339,8 +339,8 @@ static int initint (TrapContext *ctx) put_word (p + 8, 0x020a); put_long (p + 10, ROM_netdev_resid); put_long (p + 18, tmp1); - m68k_areg (&ctx->regs, 1) = p; - m68k_dreg (&ctx->regs, 0) = 13; /* EXTER */ + m68k_areg (regs, 1) = p; + m68k_dreg (regs, 0) = 13; /* EXTER */ dw (0x4a80); /* TST.L D0 */ dw (0x4e75); /* RTS */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ @@ -350,9 +350,9 @@ static int initint (TrapContext *ctx) static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context) { - uaecptr ioreq = m68k_areg (&context->regs, 1); - uae_u32 unit = m68k_dreg (&context->regs, 0); - uae_u32 flags = m68k_dreg (&context->regs, 1); + uaecptr ioreq = m68k_areg (regs, 1); + uae_u32 unit = m68k_dreg (regs, 0); + uae_u32 flags = m68k_dreg (regs, 1); uaecptr buffermgmt; struct devstruct *dev = getdevstruct (unit); struct priv_devstruct *pdev = 0; @@ -407,10 +407,10 @@ static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context) } if (kickstart_version >= 36) { - m68k_areg (&context->regs, 0) = get_long (4) + 350; - m68k_areg (&context->regs, 1) = timerdevname; + m68k_areg (regs, 0) = get_long (4) + 350; + m68k_areg (regs, 1) = timerdevname; CallLib (context, get_long (4), -0x114); /* FindName('timer.device') */ - pdev->timerbase = m68k_dreg (&context->regs, 0); + pdev->timerbase = m68k_dreg (regs, 0); } pdev->copyfrombuff = pdev->copytobuff = pdev->packetfilter = 0; @@ -450,8 +450,8 @@ static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context) if (log_net) write_log (L"%s:%d CTB=%08x CFB=%08x PF=%08x\n", getdevname(), unit, pdev->copytobuff, pdev->copyfrombuff, pdev->packetfilter); - m68k_dreg (&context->regs, 0) = dev->td->mtu + ETH_HEADER_SIZE + 2; - m68k_dreg (&context->regs, 1) = 1; + m68k_dreg (regs, 0) = dev->td->mtu + ETH_HEADER_SIZE + 2; + m68k_dreg (regs, 1) = 1; pdev->tempbuf = CallLib (context, get_long (4), -0xC6); /* AllocMem */ if (!pdev->tempbuf) { if (dev->opencnt == 0) { @@ -466,7 +466,7 @@ static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context) } dev->exclusive = flags & SANA2OPF_MINE; dev->opencnt++; - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) + 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; @@ -634,28 +634,28 @@ static void signalasync (struct devstruct *dev, struct asyncreq *ar, int actual, static uae_u32 copytobuff (TrapContext *ctx, uaecptr from, uaecptr to, uae_u32 len, uaecptr func) { - m68k_areg (&ctx->regs, 0) = to; - m68k_areg (&ctx->regs, 1) = from; - m68k_dreg (&ctx->regs, 0) = len; + m68k_areg (regs, 0) = to; + m68k_areg (regs, 1) = from; + m68k_dreg (regs, 0) = len; return CallFunc (ctx, func); } static uae_u32 copyfrombuff (TrapContext *ctx, uaecptr from, uaecptr to, uae_u32 len, uaecptr func) { - m68k_areg (&ctx->regs, 0) = to; - m68k_areg (&ctx->regs, 1) = from; - m68k_dreg (&ctx->regs, 0) = len; + m68k_areg (regs, 0) = to; + m68k_areg (regs, 1) = from; + m68k_dreg (regs, 0) = len; return CallFunc (ctx, func); } static uae_u32 packetfilter (TrapContext *ctx, uaecptr hook, uaecptr ios2, uaecptr data) { uae_u32 a2, v; - a2 = m68k_areg (&ctx->regs, 2); - m68k_areg (&ctx->regs, 0) = hook; - m68k_areg (&ctx->regs, 2) = ios2; - m68k_areg (&ctx->regs, 1) = data; + a2 = m68k_areg (regs, 2); + m68k_areg (regs, 0) = hook; + m68k_areg (regs, 2) = ios2; + m68k_areg (regs, 1) = data; v = CallFunc (ctx, get_long (hook + 8)); - m68k_areg (&ctx->regs, 2) = a2; + m68k_areg (regs, 2) = a2; return v; } @@ -1280,7 +1280,7 @@ static int dev_canquick (struct devstruct *dev, uaecptr request) static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct priv_devstruct *pdev = getpdevstruct (request); @@ -1371,7 +1371,7 @@ static void *dev_thread (void *devs) static uae_u32 REGPARAM2 dev_init_2 (TrapContext *context) { - uae_u32 base = m68k_dreg (&context->regs,0); + uae_u32 base = m68k_dreg (regs,0); if (log_net) write_log (L"%s init\n", SANA2NAME); return base; @@ -1384,7 +1384,7 @@ static uae_u32 REGPARAM2 dev_init (TrapContext *context) static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; @@ -1510,7 +1510,7 @@ static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx) dev->unknowntypesreceived = 0; dev->reconfigurations = 0; if (pdev && pdev->timerbase) { - m68k_areg (&ctx->regs, 0) = pdev->tempbuf; + m68k_areg (regs, 0) = pdev->tempbuf; CallLib (ctx, pdev->timerbase, -0x42); /* GetSysTime() */ } else { put_long (pdev->tempbuf + 0, 0); diff --git a/scsiemul.c b/scsiemul.c index aa94ca5a..ee3d7cce 100644 --- a/scsiemul.c +++ b/scsiemul.c @@ -149,7 +149,7 @@ static void dev_close_3 (struct devstruct *dev, struct priv_devstruct *pdev) static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; @@ -162,7 +162,7 @@ static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) return 0; dev_close_3 (dev, pdev); put_long (request + 24, 0); - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) - 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } @@ -184,9 +184,9 @@ static int openfail (uaecptr ioreq, int error) static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context, int type) { - uaecptr ioreq = m68k_areg (&context->regs, 1); - uae_u32 unit = m68k_dreg (&context->regs, 0); - uae_u32 flags = m68k_dreg (&context->regs, 1); + uaecptr ioreq = m68k_areg (regs, 1); + uae_u32 unit = m68k_dreg (regs, 0); + uae_u32 flags = m68k_dreg (regs, 1); struct devstruct *dev = getdevstruct (unit); struct priv_devstruct *pdev = 0; int i; @@ -229,7 +229,7 @@ static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context, int type) } dev->opencnt++; - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) + 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; @@ -635,7 +635,7 @@ static int dev_canquick (struct devstruct *dev, uaecptr request) static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct priv_devstruct *pdev = getpdevstruct (request); @@ -694,7 +694,7 @@ static void *dev_thread (void *devs) static uae_u32 REGPARAM2 dev_init_2 (TrapContext *context, int type) { - uae_u32 base = m68k_dreg (&context->regs,0); + uae_u32 base = m68k_dreg (regs,0); if (log_scsi) write_log (L"%s init\n", getdevname (type)); return base; @@ -711,7 +711,7 @@ static uae_u32 REGPARAM2 diskdev_init (TrapContext *context) static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; diff --git a/traps.c b/traps.c index 2f77e961..63981ae9 100644 --- a/traps.c +++ b/traps.c @@ -138,19 +138,18 @@ unsigned int define_trap (TrapHandler handler_func, int flags, const TCHAR *name * trap_num = number of trap to invoke * regs = current 68k state */ -void REGPARAM2 m68k_handle_trap (unsigned int trap_num, struct regstruct *regs) +void REGPARAM2 m68k_handle_trap (unsigned int trap_num) { struct Trap *trap = &traps[trap_num]; uae_u32 retval = 0; - int has_retval = (trap->flags & TRAPFLAG_NO_RETVAL) == 0; + int has_retval = (trap->flags & TRAPFLAG_NO_RETVAL) == 0; int implicit_rts = (trap->flags & TRAPFLAG_DORET) != 0; if (trap->name && trap->name[0] != 0 && trace_traps) write_log (L"TRAP: %s\n", trap->name); if (trap_num < trap_count) { - if (trap->flags & TRAPFLAG_EXTRA_STACK) { /* Handle an extended trap. * Note: the return value of this trap is passed back to 68k @@ -160,20 +159,18 @@ void REGPARAM2 m68k_handle_trap (unsigned int trap_num, struct regstruct *regs) trap_HandleExtendedTrap (trap->handler, has_retval); } else { /* Handle simple trap */ - retval = (trap->handler) ((TrapContext *)regs); + retval = (trap->handler) (NULL); if (has_retval) m68k_dreg (regs, 0) = retval; if (implicit_rts) { - m68k_do_rts (regs); - fill_prefetch_slow (regs); + m68k_do_rts (); + fill_prefetch_slow (); } } - - } else { - write_log (L"Illegal emulator trap %d\n", trap_num); - } + } else + write_log (L"Illegal emulator trap\n"); } @@ -182,35 +179,35 @@ void REGPARAM2 m68k_handle_trap (unsigned int trap_num, struct regstruct *regs) * Implementation of extended traps */ -typedef struct ExtendedTrapContext +struct TrapContext { - /* - * Same as simple trap - */ - struct regstruct regs; /* Trap's working copy of 68k state. This is what - * the trap handler should access to get arguments - * from 68k space. */ - - /* - * Extended trap only - */ - TrapHandler trap_handler; /* Trap handler function that gets called on the trap context */ - int trap_has_retval; /* Should the handler return a value to 68k space in D0? */ - uae_u32 trap_retval; /* Return value from trap handler */ - - - struct regstruct saved_regs; /* Copy of 68k state at trap entry. */ - - - uae_thread_id thread; /* Thread which effects the trap context. */ - uae_sem_t switch_to_emu_sem; /* For IPC between the main emulator. */ - uae_sem_t switch_to_trap_sem; /* context and the trap context. */ - - - uaecptr call68k_func_addr; /* When calling a 68k function from a trap handler, this - * is set to the address of the function to call. */ - uae_u32 call68k_retval; /* And this gets set to the return value of the 68k call */ -} ExtendedTrapContext; + /* Trap's working copy of 68k state. This is what the trap handler should + * access to get arguments from 68k space. */ + struct regstruct regs; + + /* Trap handler function that gets called on the trap context */ + TrapHandler trap_handler; + /* Should the handler return a value to 68k space in D0? */ + int trap_has_retval; + /* Return value from trap handler */ + uae_u32 trap_retval; + + /* Copy of 68k state at trap entry. */ + struct regstruct saved_regs; + + /* Thread which effects the trap context. */ + uae_thread_id thread; + /* For IPC between the main emulator. */ + uae_sem_t switch_to_emu_sem; + /* context and the trap context. */ + uae_sem_t switch_to_trap_sem; + + /* When calling a 68k function from a trap handler, this is set to the + * address of the function to call. */ + uaecptr call68k_func_addr; + /* And this gets set to the return value of the 68k call. */ + uae_u32 call68k_retval; +}; /* 68k addresses which invoke the corresponding traps. */ @@ -220,23 +217,22 @@ static uaecptr exit_trap_trapaddr; /* For IPC between main thread and trap context */ static uae_sem_t trap_mutex; -static ExtendedTrapContext *current_context; +static TrapContext *current_context; + /* * Thread body for trap context */ static void *trap_thread (void *arg) { - ExtendedTrapContext *context = (ExtendedTrapContext *) arg; - - uae_set_thread_priority (NULL, 1); + TrapContext *context = (TrapContext *) arg; /* Wait until main thread is ready to switch to the * this trap context. */ uae_sem_wait (&context->switch_to_trap_sem); /* Execute trap handler function. */ - context->trap_retval = context->trap_handler ((TrapContext *)context); + context->trap_retval = context->trap_handler (context); /* Trap handler is done - we still need to tidy up * and make sure the handler's return value is propagated @@ -248,14 +244,15 @@ static void *trap_thread (void *arg) /* Enter critical section - only one trap at a time, please! */ uae_sem_wait (&trap_mutex); + regs = context->saved_regs; /* Don't allow an interrupt and thus potentially another * trap to be invoked while we hold the above mutex. * This is probably just being paranoid. */ - context->regs.intmask = 7; + regs.intmask = 7; /* Set PC to address of the exit handler, so that it will be called * when the 68k context resumes. */ - m68k_setpc (&context->regs, exit_trap_trapaddr); + m68k_setpc (exit_trap_trapaddr); current_context = context; /* Switch back to 68k context */ @@ -272,18 +269,16 @@ static void *trap_thread (void *arg) */ static void trap_HandleExtendedTrap (TrapHandler handler_func, int has_retval) { - struct ExtendedTrapContext *context = (struct ExtendedTrapContext*)calloc (1, sizeof (ExtendedTrapContext)); + struct TrapContext *context = calloc (1, sizeof (TrapContext)); if (context) { uae_sem_init (&context->switch_to_trap_sem, 0, 0); uae_sem_init (&context->switch_to_emu_sem, 0, 0); - context->trap_handler = handler_func; + context->trap_handler = handler_func; context->trap_has_retval = has_retval; - context->regs = regs; /* Working copy of regs */ - - context->saved_regs = regs; /* Copy of regs to be restored when trap is done */ + context->saved_regs = regs; /* Start thread to handle new trap context. */ uae_start_thread_fast (trap_thread, (void *)context, &context->thread); @@ -298,11 +293,6 @@ static void trap_HandleExtendedTrap (TrapHandler handler_func, int has_retval) * It'll do this when the trap handler is done - or when * the handler wants to call 68k code. */ uae_sem_wait (&context->switch_to_emu_sem); - - /* Use trap's modified 68k state. This will reset the PC, so that - * execution will resume at either the m68k call handler or the - * the exit handler. */ - regs = context->regs; } } @@ -311,7 +301,7 @@ static void trap_HandleExtendedTrap (TrapHandler handler_func, int has_retval) * * This function is to be called from the trap context. */ -static uae_u32 trap_Call68k (ExtendedTrapContext *context, uaecptr func_addr) +static uae_u32 trap_Call68k (TrapContext *context, uaecptr func_addr) { /* Enter critical section - only one trap at a time, please! */ uae_sem_wait (&trap_mutex); @@ -320,15 +310,15 @@ static uae_u32 trap_Call68k (ExtendedTrapContext *context, uaecptr func_addr) /* Don't allow an interrupt and thus potentially another * trap to be invoked while we hold the above mutex. * This is probably just being paranoid. */ - context->regs.intmask = 7; + regs.intmask = 7; /* Set up function call address. */ context->call68k_func_addr = func_addr; /* Set PC to address of 68k call trap, so that it will be * executed when emulator context resumes. */ - m68k_setpc (&context->regs, m68k_call_trapaddr); - fill_prefetch_slow (&context->regs); + m68k_setpc (m68k_call_trapaddr); + fill_prefetch_slow (); /* Switch to emulator context. */ uae_sem_post (&context->switch_to_emu_sem); @@ -346,11 +336,13 @@ static uae_u32 trap_Call68k (ExtendedTrapContext *context, uaecptr func_addr) /* * Handles the emulator's side of a 68k call (from an extended trap) */ -static uae_u32 REGPARAM2 m68k_call_handler (struct regstruct *regs) +static uae_u32 REGPARAM3 m68k_call_handler (TrapContext *dummy_ctx) { - ExtendedTrapContext *context = current_context; + TrapContext *context = current_context; - uae_u32 sp = m68k_areg (regs, 7); + uae_u32 sp; + + sp = m68k_areg (regs, 7); /* Push address of trap context on 68k stack. This is * so the return trap can find this context. */ @@ -366,14 +358,14 @@ static uae_u32 REGPARAM2 m68k_call_handler (struct regstruct *regs) m68k_areg (regs, 7) = sp; /* Set PC to address of 68k function to call. */ - m68k_setpc (regs, context->call68k_func_addr); - fill_prefetch_slow (&context->regs); + m68k_setpc (context->call68k_func_addr); + fill_prefetch_slow (); /* End critical section: allow other traps run. */ uae_sem_post (&trap_mutex); /* Restore interrupts. */ - regs->intmask = context->saved_regs.intmask; + regs.intmask = context->saved_regs.intmask; /* Dummy return value. */ return 0; @@ -382,9 +374,9 @@ static uae_u32 REGPARAM2 m68k_call_handler (struct regstruct *regs) /* * Handles the return from a 68k call at the emulator's side. */ -static uae_u32 REGPARAM2 m68k_return_handler (struct regstruct *regs) +static uae_u32 REGPARAM3 m68k_return_handler (TrapContext *dummy_ctx) { - ExtendedTrapContext *context; + TrapContext *context; uae_u32 sp; /* One trap returning at a time, please! */ @@ -392,16 +384,13 @@ static uae_u32 REGPARAM2 m68k_return_handler (struct regstruct *regs) /* Get trap context from 68k stack. */ sp = m68k_areg (regs, 7); - context = (struct ExtendedTrapContext*)get_pointer(sp); + context = (TrapContext *)get_pointer (sp); sp += sizeof (void *); m68k_areg (regs, 7) = sp; /* Get return value from the 68k call. */ context->call68k_retval = m68k_dreg (regs, 0); - /* Update trap's working copy of CPU state. */ - context->regs = *regs; - /* Switch back to trap context. */ uae_sem_post (&context->switch_to_trap_sem); @@ -411,11 +400,6 @@ static uae_u32 REGPARAM2 m68k_return_handler (struct regstruct *regs) * the handler wants to call another 68k function. */ uae_sem_wait (&context->switch_to_emu_sem); - /* Use trap's modified 68k state. This will reset the PC, so that - * execution will resume at either the m68k call handler or the - * the exit handler. */ - *regs = context->regs; - /* Dummy return value. */ return 0; } @@ -424,15 +408,15 @@ static uae_u32 REGPARAM2 m68k_return_handler (struct regstruct *regs) * Handles completion of an extended trap and passes * return value from trap function to 68k space. */ -static uae_u32 REGPARAM2 exit_trap_handler (struct regstruct *regs) +static uae_u32 REGPARAM3 exit_trap_handler (TrapContext *dummy_ctx) { - ExtendedTrapContext *context = current_context; + TrapContext *context = current_context; /* Wait for trap context thread to exit. */ uae_wait_thread (context->thread); /* Restore 68k state saved at trap entry. */ - *regs = context->saved_regs; + regs = context->saved_regs; /* If trap is supposed to return a value, then store * return value in D0. */ @@ -459,11 +443,11 @@ static uae_u32 REGPARAM2 exit_trap_handler (struct regstruct *regs) uae_u32 CallLib (TrapContext *context, uaecptr base, uae_s16 offset) { uae_u32 retval; - uaecptr olda6 = m68k_areg (&context->regs, 6); + uaecptr olda6 = m68k_areg (regs, 6); - m68k_areg (&context->regs, 6) = base; - retval = trap_Call68k ((ExtendedTrapContext *)context, base + offset); - m68k_areg (&context->regs, 6) = olda6; + m68k_areg (regs, 6) = base; + retval = trap_Call68k (context, base + offset); + m68k_areg (regs, 6) = olda6; return retval; } @@ -473,9 +457,10 @@ uae_u32 CallLib (TrapContext *context, uaecptr base, uae_s16 offset) */ uae_u32 CallFunc (TrapContext *context, uaecptr func) { - return trap_Call68k ((ExtendedTrapContext *)context, func); + return trap_Call68k (context, func); } + /* * Initialize trap mechanism. */ @@ -490,13 +475,13 @@ void init_traps (void) void init_extended_traps (void) { m68k_call_trapaddr = here (); - calltrap (deftrap2 ((TrapHandler)m68k_call_handler, TRAPFLAG_NO_RETVAL, L"m68k_call")); + calltrap (deftrap2 (m68k_call_handler, TRAPFLAG_NO_RETVAL, L"m68k_call")); m68k_return_trapaddr = here(); - calltrap (deftrap2 ((TrapHandler)m68k_return_handler, TRAPFLAG_NO_RETVAL, L"m68k_return")); + calltrap (deftrap2 (m68k_return_handler, TRAPFLAG_NO_RETVAL, L"m68k_return")); exit_trap_trapaddr = here(); - calltrap (deftrap2 ((TrapHandler)exit_trap_handler, TRAPFLAG_NO_RETVAL, L"exit_trap")); + calltrap (deftrap2 (exit_trap_handler, TRAPFLAG_NO_RETVAL, L"exit_trap")); uae_sem_init (&trap_mutex, 0, 1); } diff --git a/uaeexe.c b/uaeexe.c index 691515b9..a3e6606c 100644 --- a/uaeexe.c +++ b/uaeexe.c @@ -102,7 +102,7 @@ static TCHAR *get_cmd (void) /* * helper function */ -#define ARG(x) (get_long (m68k_areg (&context->regs, 7) + 4 * (x + 1))) +#define ARG(x) (get_long (m68k_areg (regs, 7) + 4 * (x + 1))) static uae_u32 REGPARAM2 uaeexe_server (TrapContext *context) { int len; diff --git a/uaelib.c b/uaelib.c index 93167cd0..4bb325ff 100644 --- a/uaelib.c +++ b/uaelib.c @@ -130,7 +130,7 @@ static uae_u32 emulib_ChangeLanguage (uae_u32 which) * Changes chip memory size * (reboots) */ -static uae_u32 REGPARAM2 emulib_ChgCMemSize (struct regstruct *regs, uae_u32 memsize) +static uae_u32 REGPARAM2 emulib_ChgCMemSize (uae_u32 memsize) { if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x200000) { @@ -148,7 +148,7 @@ static uae_u32 REGPARAM2 emulib_ChgCMemSize (struct regstruct *regs, uae_u32 mem * Changes slow memory size * (reboots) */ -static uae_u32 REGPARAM2 emulib_ChgSMemSize (struct regstruct *regs, uae_u32 memsize) +static uae_u32 REGPARAM2 emulib_ChgSMemSize (uae_u32 memsize) { if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x180000 && memsize != 0x1C0000) { @@ -166,7 +166,7 @@ static uae_u32 REGPARAM2 emulib_ChgSMemSize (struct regstruct *regs, uae_u32 mem * Changes fast memory size * (reboots) */ -static uae_u32 REGPARAM2 emulib_ChgFMemSize (struct regstruct *regs, uae_u32 memsize) +static uae_u32 REGPARAM2 emulib_ChgFMemSize (uae_u32 memsize) { if (memsize != 0x100000 && memsize != 0x200000 && memsize != 0x400000 && memsize != 0x800000) { @@ -299,7 +299,7 @@ static uae_u32 emulib_Debug (void) #define CALL_NATIVE_FUNC( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) if(native_func) native_func( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) /* A0 - Contains a ptr to the native .obj data. This ptr is Amiga-based. */ /* We simply find the first function in this .obj data, and execute it. */ -static uae_u32 REGPARAM2 emulib_ExecuteNativeCode (struct regstruct *regs) +static uae_u32 REGPARAM2 emulib_ExecuteNativeCode (void) { #if 0 uaecptr object_AAM = m68k_areg (regs, 0); @@ -365,12 +365,12 @@ extern uae_u32 picasso_demux (uae_u32 arg, TrapContext *context); static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) { -#define ARG0 (get_long (m68k_areg (&context->regs, 7) + 4)) -#define ARG1 (get_long (m68k_areg (&context->regs, 7) + 8)) -#define ARG2 (get_long (m68k_areg (&context->regs, 7) + 12)) -#define ARG3 (get_long (m68k_areg (&context->regs, 7) + 16)) -#define ARG4 (get_long (m68k_areg (&context->regs, 7) + 20)) -#define ARG5 (get_long (m68k_areg (&context->regs, 7) + 24)) +#define ARG0 (get_long (m68k_areg (regs, 7) + 4)) +#define ARG1 (get_long (m68k_areg (regs, 7) + 8)) +#define ARG2 (get_long (m68k_areg (regs, 7) + 12)) +#define ARG3 (get_long (m68k_areg (regs, 7) + 16)) +#define ARG4 (get_long (m68k_areg (regs, 7) + 20)) +#define ARG5 (get_long (m68k_areg (regs, 7) + 24)) #ifndef UAEGFX_INTERNAL if (ARG0 >= 16 && ARG0 <= 39) @@ -388,9 +388,9 @@ static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) case 6: return emulib_EnableSound (ARG1); case 7: return emulib_EnableJoystick (ARG1); case 8: return emulib_SetFrameRate (ARG1); - case 9: return emulib_ChgCMemSize (&context->regs, ARG1); - case 10: return emulib_ChgSMemSize (&context->regs, ARG1); - case 11: return emulib_ChgFMemSize (&context->regs, ARG1); + case 9: return emulib_ChgCMemSize (ARG1); + case 10: return emulib_ChgSMemSize (ARG1); + case 11: return emulib_ChgFMemSize (ARG1); case 12: return emulib_ChangeLanguage (ARG1); /* The next call brings bad luck */ case 13: return emulib_ExitEmu (); @@ -398,7 +398,7 @@ static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) case 15: return emulib_Debug (); case 68: return emulib_Minimize (); - case 69: return emulib_ExecuteNativeCode (&context->regs); + case 69: return emulib_ExecuteNativeCode (); case 70: return 0; /* RESERVED. Something uses this.. */ @@ -418,7 +418,7 @@ static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) { uae_u32 d0, d1; d0 = emulib_target_getcpurate (ARG1, &d1); - m68k_dreg (&context->regs, 1) = d1; + m68k_dreg (regs, 1) = d1; return d0; } @@ -430,7 +430,7 @@ extern int uaelib_debug; static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) { uae_u32 v; - struct regstruct *r = &context->regs; + struct regstruct *r = ®s; if (uaelib_debug) write_log (L"%d: %08x %08x %08x %08x %08x %08x %08x %08x, %08x %08x %08x %08x %08x %08x %08x %08x\n", diff --git a/uaeresource.c b/uaeresource.c index 2351505f..24a779f2 100644 --- a/uaeresource.c +++ b/uaeresource.c @@ -41,7 +41,7 @@ static uaecptr res_init, res_name, res_id, base; static uae_u32 REGPARAM2 res_getfunc (TrapContext *ctx) { - uaecptr funcname = m68k_areg (&ctx->regs, 0); + uaecptr funcname = m68k_areg (regs, 0); uae_char tmp[256]; uae_u32 p; TCHAR *s; @@ -58,7 +58,7 @@ static uae_u32 REGPARAM2 res_getfunc (TrapContext *ctx) static uae_u32 REGPARAM2 res_initcode (TrapContext *ctx) { uaecptr rb; - base = m68k_dreg (&ctx->regs, 0); + base = m68k_dreg (regs, 0); rb = base + SIZEOF_LIBRARY; put_word (rb + 0, UAEMAJOR); put_word (rb + 2, UAEMINOR); diff --git a/uaeserial.c b/uaeserial.c index 8bbebeb8..29137d0c 100644 --- a/uaeserial.c +++ b/uaeserial.c @@ -175,7 +175,7 @@ static void dev_close_3 (struct devstruct *dev) static uae_u32 REGPARAM2 dev_close (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct devstruct *dev; dev = getdevstruct (get_long (request + 24)); @@ -185,7 +185,7 @@ static uae_u32 REGPARAM2 dev_close (TrapContext *context) write_log (L"%s:%d close, req=%x\n", getdevname(), dev->unit, request); dev_close_3 (dev); put_long (request + 24, 0); - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) - 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } @@ -258,9 +258,9 @@ static int openfail (uaecptr ioreq, int error) static uae_u32 REGPARAM2 dev_open (TrapContext *context) { - uaecptr ioreq = m68k_areg (&context->regs, 1); - uae_u32 unit = m68k_dreg (&context->regs, 0); - uae_u32 flags = m68k_dreg (&context->regs, 1); + uaecptr ioreq = m68k_areg (regs, 1); + uae_u32 unit = m68k_dreg (regs, 0); + uae_u32 flags = m68k_dreg (regs, 1); struct devstruct *dev; int i, err; @@ -299,7 +299,7 @@ static uae_u32 REGPARAM2 dev_open (TrapContext *context) write_log (L"%s:%d open ioreq=%08X\n", getdevname(), unit, ioreq); start_thread (dev); - put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) + 1); + put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; @@ -562,7 +562,7 @@ static int dev_canquick (struct devstruct *dev, uaecptr request) static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct devstruct *dev = getdevstruct (get_long (request + 24)); @@ -615,7 +615,7 @@ static void *dev_thread (void *devs) static uae_u32 REGPARAM2 dev_init (TrapContext *context) { - uae_u32 base = m68k_dreg (&context->regs, 0); + uae_u32 base = m68k_dreg (regs, 0); if (log_uaeserial) write_log (L"%s init\n", getdevname ()); return base; @@ -623,7 +623,7 @@ static uae_u32 REGPARAM2 dev_init (TrapContext *context) static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { - uae_u32 request = m68k_areg (&context->regs, 1); + uae_u32 request = m68k_areg (regs, 1); struct devstruct *dev = getdevstruct (get_long (request + 24)); if (!dev) {