]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1620b7.zip
authorToni Wilen <twilen@winuae.net>
Sun, 16 Aug 2009 16:40:20 +0000 (19:40 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:47:50 +0000 (21:47 +0200)
53 files changed:
a2091.c
ar.c
audio.c
autoconf.c
blitter.c
bsdsocket.c
cfgfile.c
cpummu.c
custom.c
debug.c
drawing.c
enforcer.c
ersatz.c
filesys.c
fpp.c
gayle.c
gencpu.c
hardfile.c
include/autoconf.h
include/cpu_prefetch.h
include/memory.h
include/newcpu.h
include/traps.h
jit/compemu_fpp.c
jit/compemu_raw_x86.c
jit/compemu_support.c
main.c
memory.c
native2amiga.c
newcpu.c
od-win32/ahidsound_dsonly.c
od-win32/ahidsound_new.c
od-win32/bsdsock.c
od-win32/debug_win32.c
od-win32/dxwrap.c
od-win32/gencpu_msvc/gencpu_msvc.vcproj
od-win32/picasso96_win.c
od-win32/resources/winuae.rc
od-win32/screenshot.c
od-win32/sounddep/sound.h
od-win32/sysconfig.h
od-win32/win32.c
od-win32/win32.h
od-win32/win32gfx.c
od-win32/winuae_msvc/winuae_msvc.vcproj
od-win32/winuaechangelog.txt
sana2.c
scsiemul.c
traps.c
uaeexe.c
uaelib.c
uaeresource.c
uaeserial.c

diff --git a/a2091.c b/a2091.c
index 246a8117fc75a71c6bb46403dc7d68d0cf325a02..01ed1869bf7a5ab1031fd978d7d66774c2d107a3 100644 (file)
--- 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 cac97b796812d22579047e22d963d5e31c183608..de47b94e2a9094a7c77178f4158c30384ca303d9 100644 (file)
--- 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 (&regs) & 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 (&regs) & 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 (&regs, 7) + 2); /* Get (SP+2) */
-                   set_special (&regs, SPCFLAG_ACTION_REPLAY);
+                   wait_for_pc = longget (m68k_areg (regs, 7) + 2); /* Get (SP+2) */
+                   set_special (SPCFLAG_ACTION_REPLAY);
 
-                   pc = m68k_getpc (&regs);
+                   pc = m68k_getpc ();
 /*                 write_log_debug ("Action Replay marked as ACTION_REPLAY_WAIT_PC, PC=%p\n",pc);*/
                }
                else
                {
-                   uaecptr pc = m68k_getpc (&regs);
+                   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 (&regs, 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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs));
+       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 (&regs, 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 (&regs, 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, &regs, 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 (&regs));
+       write_log (L"AR1: Enter PC:%p\n", m68k_getpc ());
        action_replay_go1 (7);
-       unset_special (&regs, 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 (&regs) >= hrtmem_start && m68k_getpc (&regs) <= 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 (&regs) >= arrom_start && m68k_getpc (&regs) <= 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 (&regs) >= 0x200)
+    if (m68k_getpc () >= 0x200)
        return;
     action_replay_flag = ACTION_REPLAY_ACTIVATE;
-    set_special (&regs, 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 (&regs, SPCFLAG_ACTION_REPLAY);
+           set_special (SPCFLAG_ACTION_REPLAY);
            armode = ARMODE_FREEZE;
        }
        return 1;
     } else {
        hrtmon_flag = ACTION_REPLAY_ACTIVATE;
-       set_special (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 cf6e0144dcfdcf7c5ab1b1cfaa53dc2a720c0ee3..8319e321bc58560765216cbc9aa523e1d2468efd 100644 (file)
--- 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 ();
index 61ddb35aa1cddeea2a0e14ef28f497f7974bbd3f..79a4581edb1ecef4070359fbf5a1101c10d16068 100644 (file)
@@ -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;
 }
 
index 61800a7ce3e01bf5721fcfbe3eb2e3b2519639d1..77221ca4aef815472e4d447f6dc41accd26841c3 100644 (file)
--- 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 (&regs, 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 (&regs, SPCFLAG_BLTNASTY);
+    unset_special (SPCFLAG_BLTNASTY);
     if (dmaen (DMA_BLITPRI))
-       set_special (&regs, SPCFLAG_BLTNASTY);
+       set_special (SPCFLAG_BLTNASTY);
 
     if (vblitsize == 0 || (blitline && hblitsize != 2)) {
        blitter_done (hpos);
index beeea2a1ac9d3b4eb4aad9f6ec5d236564568dd9..daeb76471e9a1f33d223f21cd802654c0a2d1a2d 100644 (file)
@@ -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;
 }
 
index 7c9c92c3f5baf1fabc466aafdbfe7226763287e9..31c353b9e5abcbbc90e7e0bf2a2c4dc5492dfacb 100644 (file)
--- 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 (&regs, 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;
index 10b71d973ca311de2e7f54a00b47a1a1d16e74a8..853bd16f67946fc4996ecf3d07697e4e824e9bd2 100644 (file)
--- 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(&regs, 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(&regs, 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, &regs);
+               op_illg (opcode);
 }
 
 void REGPARAM2 mmu_flush_atc(uaecptr addr, bool super, bool global)
index ea8c2ad4f8d7b40d8c3ca43bed7f68e40623dea5..c9c59873e987d2550c13a4827d028f2c6dcdf95c 100644 (file)
--- 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, SPCFLAG_COPPER);
+           unset_special (SPCFLAG_COPPER);
        }
     }
     if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done)
-       set_special (&regs, 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 (&regs, 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 (&regs, 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 (&regs, SPCFLAG_COPPER);
+               unset_special (SPCFLAG_COPPER);
                goto out;
            }
            if (vp < cop_state.vcmp) {
                copper_enabled_thisline = 0;
-               unset_special (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs));
+    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 (&regs, ~(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 6d1834aed527b5b08b9637f52f537a14c96a595a..3bbfc9e0a99dc3e8e5bca4561b2bfdb8244e06d3 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -71,7 +71,7 @@ void activate_debugger (void)
     if (debugger_active)
        return;
     debugger_active = 1;
-    set_special (&regs, 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 (&regs));
+    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 (&regs);
+    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 (&regs);
+               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 (&regs, 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 (&regs);
+       MakeFromSR ();
     } else if (!_tcscmp (parm, L"CCR")) {
        regs.sr = (regs.sr & ~31) | (v & 31);
-       MakeFromSR (&regs);
+       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 (&regs, v);
-       fill_prefetch_slow (&regs);
+       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 (&regs, 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 (&regs, readhex (&inptr));
-               fill_prefetch_slow (&regs);
+               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 (&regs);
+           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 (&regs, 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 (&regs, 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 (&regs);
+    uae_u32 pc = m68k_getpc ();
 //    if (!notinrom())
 //     return;
     history[lasthist] = regs;
-    history[lasthist].pc = m68k_getpc (&regs);
+    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 (&regs));
+           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 (&regs);
+               MakeSR ();
                if ((regs.sr & sr_bpmask) == sr_bpvalue) {
                    console_out (L"SR breakpoint\n");
                    bp = 1;
                }
            }
            if (!bp) {
-               set_special (&regs, 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 (&regs, 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 (&regs, SPCFLAG_BRK);
-       m68k_resumestopped (&regs);
+       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 (&regs);
+    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 (&regs, 7);
+       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;
+           m68k_areg (regs, 7) = regs.isp;
        regs.s = 1;
     }
-    MakeSR (&regs);
-    m68k_setpc (&regs, mmu_callback);
-    fill_prefetch_slow (&regs);
+    MakeSR ();
+    m68k_setpc (mmu_callback);
+    fill_prefetch_slow ();
 
     if (currprefs.cpu_model > 68000) {
        for (i = 0 ; i < 9; i++) {
-           m68k_areg (&regs, 7) -= 4;
-           put_long (m68k_areg (&regs, 7), 0);
+           m68k_areg (regs, 7) -= 4;
+           put_long (m68k_areg (regs, 7), 0);
        }
-       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),
+       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 (&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 (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 (&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);
+    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(&regs, 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 (&regs);
+    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 (&regs, SPCFLAG_BRK);
+    set_special (SPCFLAG_BRK);
     return 1;
 }
index 2261ded7b8776fffbf3d589f09398cfcf27a90d4..f7008c73847db06d49310f1f1808e5fb5834a55f 100644 (file)
--- 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 (&regs, SPCFLAG_BRK);
+           set_special (SPCFLAG_BRK);
            return;
        }
 
index 6d0d5a4edde2e44e393b9a949571d2ba37544b63..ff6abf1fe6c774deefd58191e1762e33be186a5e 100644 (file)
@@ -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 (&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));
+            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 (&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));
+           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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs, SPCFLAG_TRAP);
+       set_special (SPCFLAG_TRAP);
        return;
     }
 }
index d74d43a62bd0d92cb013ea6647a9a1effa502dfd..4adf0c0acaab85b1ec88e515c1e36866eb12cbb4 100644 (file)
--- a/ersatz.c
+++ b/ersatz.c
@@ -96,7 +96,7 @@ static void ersatz_failed (void)
 
 static void ersatz_doio (void)
 {
-    uaecptr request = m68k_areg (&regs, 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 (&regs, 7) = 0x80000;
+    m68k_areg (regs, 7) = 0x80000;
     regs.intmask = 0;
 
     /* Build a dummy execbase */
-    put_long (4, m68k_areg (&regs, 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 (&regs, 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 (&regs, 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 (&regs, 1) = request;
+       m68k_areg (regs, 1) = request;
        ersatz_doio ();
 
        disk_eject (0);
 
-       m68k_setpc (&regs, 0xFC0002);
-       fill_prefetch_slow (&regs);
+       m68k_setpc (0xFC0002);
+       fill_prefetch_slow ();
        uae_reset (0);
        ersatzkickfile = 0;
        return;
     }
 
-    m68k_setpc (&regs, 0x400C);
-    fill_prefetch_slow (&regs);
+    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 (&regs, 0) = m68k_dreg (&regs, 1) & 4 ? 0 : 0x70000;
+       m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x70000;
        break;
 
      case EOP_ALLOCMEM:
-       m68k_dreg (&regs, 0) = m68k_dreg (&regs, 1) & 4 ? 0 : 0x0F000;
+       m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x0F000;
        break;
 
      case EOP_ALLOCABS:
-       m68k_dreg (&regs, 0) = m68k_areg (&regs, 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 (&regs, 0xF80010);
+       m68k_setpc (0xF80010);
        break;
 
      case EOP_OPENLIB:
index 58666515b46e76e5816afd37e40068aeeb859290..771a67caef51e16a4801695cc8b3ce7c7a3f38aa 100644 (file)
--- 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 (&regs, 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 (&regs, 7) = m68k_dreg (&regs, 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 (&regs, 7) = m68k_dreg (&regs, 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 1d8e3b5a7999801002d7316266e0368a76d37281..8585843743fef51e556fa653ba96a327e35d2ff5 100644 (file)
--- a/fpp.c
+++ b/fpp.c
@@ -28,7 +28,7 @@
 
 STATIC_INLINE int isinrom (void)
 {
-    return (munge24 (m68k_getpc (&regs)) & 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 (&regs, reg);
+           *src = (fptype) (uae_s8) m68k_dreg (regs, reg);
            break;
        case 4:
-           *src = (fptype) (uae_s16) m68k_dreg (&regs, reg);
+           *src = (fptype) (uae_s16) m68k_dreg (regs, reg);
            break;
        case 0:
-           *src = (fptype) (uae_s32) m68k_dreg (&regs, reg);
+           *src = (fptype) (uae_s32) m68k_dreg (regs, reg);
            break;
        case 1:
-           *src = to_single (m68k_dreg (&regs, 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 (&regs, reg);
+       ad = m68k_areg (regs, reg);
        break;
     case 3:
-       ad = m68k_areg (&regs, reg);
-       m68k_areg (&regs, 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 (&regs, reg) -= reg == 7 ? sz2[size] : sz1[size];
-       ad = m68k_areg (&regs, reg);
+       m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size];
+       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]);
            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 (&regs, reg);
+       *ad = m68k_areg (regs, reg);
        break;
     case 3:
-       *ad = m68k_areg (&regs, reg);
+       *ad = m68k_areg (regs, reg);
        break;
     case 4:
-       *ad = m68k_areg (&regs, reg);
+       *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;
        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. */
            /*<ea> 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 1f5f2ca5a667f784e87d889b6f426961c0c061a8..ded5b622cc9f42bbb9b1303c1c02309b34be1c54 100644 (file)
--- 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, &regs, 0);
+               Exception (2, 0);
        }
     }
 }
index fb4b7e65d6e9c1dd7b00564cb3ae09589ec65cf7..8c1c75ed8205214d88382cdb3052dfe9e391b8ca 100644 (file)
--- 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 (&regs->ccrflags);\n");
+    printf ("COPY_CARRY (&regs.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 (&regs->ccrflags);\n");
-       printf ("\tSET_ZFLG   (&regs->ccrflags, %s == 0);\n", vstr);
-       printf ("\tSET_NFLG   (&regs->ccrflags, %s < 0);\n", vstr);
+       printf ("\tCLEAR_CZNV (&regs.ccrflags);\n");
+       printf ("\tSET_ZFLG   (&regs.ccrflags, %s == 0);\n", vstr);
+       printf ("\tSET_NFLG   (&regs.ccrflags, %s < 0);\n", vstr);
        break;
      case flag_logical_noclobber:
-       printf ("\tSET_ZFLG (&regs->ccrflags, %s == 0);\n", vstr);
-       printf ("\tSET_NFLG (&regs->ccrflags, %s < 0);\n", vstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, %s == 0);\n", vstr);
+       printf ("\tSET_NFLG (&regs.ccrflags, %s < 0);\n", vstr);
        break;
      case flag_av:
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
        break;
      case flag_sv:
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
        break;
      case flag_z:
-       printf ("\tSET_ZFLG (&regs->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr);
        break;
      case flag_zn:
-       printf ("\tSET_ZFLG (&regs->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr);
-       printf ("\tSET_NFLG (&regs->ccrflags, %s < 0);\n", vstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr);
+       printf ("\tSET_NFLG (&regs.ccrflags, %s < 0);\n", vstr);
        break;
      case flag_add:
-       printf ("\tSET_ZFLG (&regs->ccrflags, %s == 0);\n", vstr);
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, %s < %s);\n", undstr, usstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, %s == 0);\n", vstr);
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, %s < %s);\n", undstr, usstr);
        duplicate_carry (0);
-       printf ("\tSET_NFLG (&regs->ccrflags, flgn != 0);\n");
+       printf ("\tSET_NFLG (&regs.ccrflags, flgn != 0);\n");
        break;
      case flag_sub:
-       printf ("\tSET_ZFLG (&regs->ccrflags, %s == 0);\n", vstr);
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, %s > %s);\n", usstr, udstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, %s == 0);\n", vstr);
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, %s > %s);\n", usstr, udstr);
        duplicate_carry (0);
-       printf ("\tSET_NFLG (&regs->ccrflags, flgn != 0);\n");
+       printf ("\tSET_NFLG (&regs.ccrflags, flgn != 0);\n");
        break;
      case flag_addx:
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */
-       printf ("\tSET_CFLG (&regs->ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */
+       printf ("\tSET_CFLG (&regs.ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */
        duplicate_carry (0);
        break;
      case flag_subx:
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */
-       printf ("\tSET_CFLG (&regs->ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */
+       printf ("\tSET_CFLG (&regs.ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */
        duplicate_carry (0);
        break;
      case flag_cmp:
-       printf ("\tSET_ZFLG (&regs->ccrflags, %s == 0);\n", vstr);
-       printf ("\tSET_VFLG (&regs->ccrflags, (flgs != flgo) && (flgn != flgo));\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, %s > %s);\n", usstr, udstr);
-       printf ("\tSET_NFLG (&regs->ccrflags, flgn != 0);\n");
+       printf ("\tSET_ZFLG (&regs.ccrflags, %s == 0);\n", vstr);
+       printf ("\tSET_VFLG (&regs.ccrflags, (flgs != flgo) && (flgn != flgo));\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, %s > %s);\n", usstr, udstr);
+       printf ("\tSET_NFLG (&regs.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 (&regs->ccrflags, olcznv | FLAGVAL_Z);\n");
+           printf ("\tSET_CZNV (&regs.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 (&regs->ccrflags, oldcznv);\n");
+           printf ("\tIOR_CZNV (&regs.ccrflags, oldcznv);\n");
        }
        printf ("\t}\n");
        return;
      case flag_logical:
        if (strcmp (value, "0") == 0) {
-           printf ("\tSET_CZNV (&regs->ccrflags, FLAGVAL_Z);\n");
+           printf ("\tSET_CZNV (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u32 newv = dst - src - (GET_XFLG (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG (&regs.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 (&regs->ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (&regs->ccrflags) ? 1 : 0)) & 0x300) > 0xFF);\n");
+       printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG (&regs.ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (&regs.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 (&regs->ccrflags, (tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n");
+           printf ("\tSET_VFLG (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u32 newv = dst + src + (GET_XFLG (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG (&regs.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 (&regs->ccrflags, cflg);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, (tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n");
+           printf ("\tSET_VFLG (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u32 newv = 0 - src - (GET_XFLG (&regs.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 (&regs->ccrflags) ? 1 : 0);\n");
+       printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG (&regs.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 (&regs->ccrflags, cflg);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+       printf ("\tSET_ZFLG (&regs.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 (&regs->ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n");
+           printf ("\tSET_ZFLG (&regs.ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n");
        } else if (curi->mnemo == i_BCLR) {
-           printf ("\tSET_ZFLG (&regs->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+           printf ("\tSET_ZFLG (&regs.ccrflags, 1 ^ ((dst >> src) & 1));\n");
            printf ("\tdst &= ~(1 << src);\n");
        } else if (curi->mnemo == i_BSET) {
-           printf ("\tSET_ZFLG (&regs->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+           printf ("\tSET_ZFLG (&regs.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 (&regs->ccrflags)) {\n");
-       printf ("\t\tException (7, regs, m68k_getpc (regs));\n");
+       printf ("\tif (GET_VFLG (&regs.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(&regs->ccrflags, %d)) {\n", curi->cc, endlabelstr);
-               printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 1);\n");
+               printf ("\tif (cctrue (&regs.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(&regs->ccrflags, %d)) goto didnt_jump;\n", curi->cc);
+       printf ("\tif (!cctrue (&regs.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(&regs->ccrflags, %d)) {\n", curi->cc);
-       printf ("\t\tm68k_incpc (regs, (uae_s32)offs + 2);\n");
+       printf ("\tif (!cctrue (&regs.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(&regs->ccrflags, %d) ? 0xff : 0;\n", curi->cc);
+       printf ("\tint val = cctrue (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags, 1);\n");
-           printf("\t\tif (dst < 0) SET_NFLG (&regs->ccrflags, 1);\n");
+           printf("\t\tSET_VFLG (&regs.ccrflags, 1);\n");
+           printf("\t\tif (dst < 0) SET_NFLG (&regs.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 (&regs->ccrflags, 1);\n");
+       printf ("\t\t\tSET_VFLG (&regs.ccrflags, 1);\n");
 #ifdef UNDEF68020
        if (cpu_level >= 2)
            printf ("\t\t\tif (currprefs.cpu_level == 0 || dst < 0) SET_NFLG (&regs, 1);\n");
        else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */
 #endif
-           printf ("\t\t\tSET_NFLG (&regs->ccrflags, 1);\n");
+           printf ("\t\t\tSET_NFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags, 1);\n");
-           printf("\t\tSET_ZFLG (&regs->ccrflags, 1);\n");
+           printf("\t\tSET_VFLG (&regs.ccrflags, 1);\n");
+           printf("\t\tSET_ZFLG (&regs.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 (&regs->ccrflags, 1);\n");
+       printf ("\t\t\tSET_VFLG (&regs.ccrflags, 1);\n");
 #ifdef UNDEF68020
        if (cpu_level > 0)
            printf ("\t\t\tif (currprefs.cpu_level == 0) SET_NFLG (&regs, 1);\n");
        else
 #endif
-           printf ("\t\t\tSET_NFLG (&regs->ccrflags, 1);\n");
+           printf ("\t\t\tSET_NFLG (&regs.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 (&regs->ccrflags, 0);\n");
-       printf ("\t\tException (6, regs, oldpc);\n");
+       printf ("\t\tSET_NFLG (&regs.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 (&regs->ccrflags, 1);\n");
-       printf ("\t\tException (6, regs, oldpc);\n");
+       printf ("\t\tSET_NFLG (&regs.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 (&regs->ccrflags, upper == reg || lower == reg);\n");
-       printf ("\tSET_CFLG_ALWAYS (&regs->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n");
-       printf ("\tif ((extra & 0x800) && GET_CFLG (&regs->ccrflags)) { Exception (6, regs, oldpc); goto %s; }\n}\n", endlabelstr);
+       printf ("\tSET_ZFLG (&regs.ccrflags, upper == reg || lower == reg);\n");
+       printf ("\tSET_CFLG_ALWAYS (&regs.ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n");
+       printf ("\tif ((extra & 0x800) && GET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags, sign);\n");
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags, val & 1);\n");
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.ccrflags);\n");
        printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
-       printf ("\t\tSET_VFLG (&regs->ccrflags, val != 0);\n");
-       printf ("\t\tSET_CFLG (&regs->ccrflags, cnt == %d ? val & 1 : 0);\n",
+       printf ("\t\tSET_VFLG (&regs.ccrflags, val != 0);\n");
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags, (val & mask) != mask && (val & mask) != 0);\n");
+       printf ("\t\tSET_VFLG (&regs.ccrflags, (val & mask) != mask && (val & mask) != 0);\n");
        printf ("\t\tval <<= cnt - 1;\n");
-       printf ("\t\tSET_CFLG (&regs->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.ccrflags);\n");
        printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
-       printf ("\t\tSET_CFLG (&regs->ccrflags, (cnt == %d) & (val >> %d));\n",
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags, val & 1);\n");
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.ccrflags);\n");
        printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
-       printf ("\t\tSET_CFLG (&regs->ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size));
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+       printf ("\t\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags, val & 1);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags)) << cnt) | (loval >> 1);\n");
-       printf ("\tSET_XFLG (&regs->ccrflags, carry);\n");
+       printf ("\tval = (((val << 1) | GET_XFLG (&regs.ccrflags)) << cnt) | (loval >> 1);\n");
+       printf ("\tSET_XFLG (&regs.ccrflags, carry);\n");
        printf ("\tval &= %s;\n", bit_mask (curi->size));
        printf ("\t} }\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, GET_XFLG (&regs->ccrflags));\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, GET_XFLG (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tCLEAR_CZNV (&regs.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 (&regs->ccrflags);\n");
+       printf ("\tuae_u32 hival = (val << 1) | GET_XFLG (&regs.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 (&regs->ccrflags, carry);\n");
+       printf ("\tSET_XFLG (&regs.ccrflags, carry);\n");
        printf ("\tval &= %s;\n", bit_mask (curi->size));
        printf ("\t} }\n");
-       printf ("\tSET_CFLG (&regs->ccrflags, GET_XFLG (&regs->ccrflags));\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, GET_XFLG (&regs.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 (&regs->ccrflags, cflg);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, sign != 0);\n");
+       printf ("\tSET_CFLG (&regs.ccrflags, sign != 0);\n");
        duplicate_carry (0);
 
-       printf ("\tSET_VFLG (&regs->ccrflags, GET_VFLG (&regs->ccrflags) | (sign2 != sign));\n");
+       printf ("\tSET_VFLG (&regs.ccrflags, GET_VFLG (&regs.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 (&regs->ccrflags, carry);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags, carry);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags)) val |= 1;\n");
+       printf ("\tif (GET_XFLG (&regs.ccrflags)) val |= 1;\n");
        genflags (flag_logical, curi->size, "val", "", "");
-       printf ("\tSET_CFLG (&regs->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags)) val |= %s;\n", cmask (curi->size));
+       printf ("\tif (GET_XFLG (&regs.ccrflags)) val |= %s;\n", cmask (curi->size));
        genflags (flag_logical, curi->size, "val", "", "");
-       printf ("\tSET_CFLG (&regs->ccrflags, carry);\n");
+       printf ("\tSET_CFLG (&regs.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 (&regs->ccrflags))");
+       printf ("\tif (GET_ZFLG (&regs.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 (&regs->ccrflags)) {\n");
+           printf ("\tif (GET_ZFLG (&regs.ccrflags)) {\n");
            genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2");
-           printf ("\tif (GET_ZFLG (&regs->ccrflags)) {\n");
+           printf ("\tif (GET_ZFLG (&regs.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 (&regs->ccrflags)) {\n");
+           printf ("\tif (! GET_ZFLG (&regs.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 (&regs->ccrflags)) {\n");
+           printf ("\tif (GET_ZFLG (&regs.ccrflags)) {\n");
            genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2");
-           printf ("\tif (GET_ZFLG (&regs->ccrflags)) {\n");
+           printf ("\tif (GET_ZFLG (&regs.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 (&regs->ccrflags)) {\n");
+           printf ("\tif (! GET_ZFLG (&regs.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(&regs->ccrflags, %d)) { Exception (7, regs, m68k_getpc (regs)); goto %s; }\n", curi->cc, endlabelstr);
+       printf ("\tif (cctrue (&regs.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 (&regs->ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n");
-       printf ("\tSET_ZFLG (&regs->ccrflags, tmp == 0); SET_VFLG (&regs->ccrflags, 0); SET_CFLG (&regs->ccrflags, 0);\n");
+       printf ("\tSET_NFLG_ALWAYS (&regs.ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n");
+       printf ("\tSET_ZFLG (&regs.ccrflags, tmp == 0); SET_VFLG (&regs.ccrflags, 0); SET_CFLG (&regs.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 (&regs->ccrflags)) tmp |= width == 32 ? 0 : (-1 << width);\n");
+           printf ("\tif (GET_NFLG (&regs.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 (&regs->ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n");
-           printf ("\tSET_ZFLG (&regs->ccrflags, tmp == 0);\n");
+           printf ("\tSET_NFLG (&regs.ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n");
+           printf ("\tSET_ZFLG (&regs.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");
index 317ef05f7c858d3bb55f0f9a8354d65fd4e68f54..d50b80ec9fdb5953fa43bd26d22461e6b813f0f0 100644 (file)
@@ -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));
index 48ca4ad01e808d40bf167d29e929c8486374a240..70e550cda2e3ecdfeba5b4175196c3c2548604bb 100644 (file)
@@ -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;
index 9bdae7d3c8255eab2f515e53029e097ee0c7e9a9..d2160906583d95a62ecb5ef7b58f25b81e8c2595 100644 (file)
 
-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
index 2c9c060c43afe4846ec60f298286d89ff984395e..6acbfa35fac9223a8a2dd0b9486c2c9dd285197e 100644 (file)
@@ -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);
 }
 
 /*
index a8b8fd39bc7125e5a49e486af37c4a6d255d18e1..448a761c8cbf96079fb70c5efad09523d271baa0 100644 (file)
@@ -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(&regs)
+#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)
index 3a8a2cc531a4a971c28adfba198533fe587be1ef..fac8354c93840efec604a7a54fb42648b4387435 100644 (file)
 /*
  * 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
index ed78dd2e65e29290b158793b575aa97d37efb888..bafe0b69a9d8347116c6caa180ff43297c2279ec 100644 (file)
@@ -515,8 +515,8 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra)
     else {
        abort();
        if (!comp_fp_adr (opcode)) {
-           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);
@@ -789,8 +789,8 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
                }
                ad=comp_fp_adr (opcode);
                if (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) {
@@ -859,8 +859,8 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
                }
                ad=comp_fp_adr (opcode);
                if (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) {
index 1555b2860089fe790129999fb3cea60cb03816d6..e4b52fc16310de7f3b66332d4981c8bc29289d69 100644 (file)
@@ -1941,7 +1941,7 @@ int EvalException (LPEXCEPTION_POINTERS blah, int n_except)
 #endif
                    invalidate_block(bi);
                    raise_in_cl_list(bi);
-                   set_special(&regs, 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(&regs, 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(&regs, 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(&regs, 0);
+                   set_special(0);
                    return;
                }
                bi=bi->next;
index 5bd7457f910588d8865cb0ce0818421c9047be89..ea5f590d14f3a54edacc18c754b7a003e7c223c4 100644 (file)
@@ -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(&regs, 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 6ee719ee0b1b61767868f1df5a561c2900503db7..36fbb6e6f1a8bfeda770ad7fe97f350eba9a69b3 100644 (file)
--- 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)
index f874e7443ca605aec7840ae41792b19213911b60..d6915a2ac642060839e6a8a68bb79a744869ea12 100644 (file)
--- 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 (&regs) - 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 (&regs);
+               regs.panic_pc = m68k_getpc ();
                regs.panic_addr = a;
-               set_special (&regs, 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 (&regs, m68k_getpc (&regs));
+       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;
index 6ddd31762edb0619e161bffcbd4e384ff4970c7e..86d5dd6a6221234a8040d37cbc8a5b56a4460875 100644 (file)
@@ -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 */
 }
index 5c9e7d95395ae4d62377724559fd070d9f3ae0db..80eb6c361d96cae52317c6b422541812c9c31906 100644 (file)
--- 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 (&regs);
+           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 (&regs, 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 (&regs, 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 (&regs, r) : m68k_dreg (&regs, 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 (&regs, 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 (&regs, 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 (&regs) + 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 (&regs) + 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 (&regs, r) : m68k_dreg (&regs, 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 (&regs, reg);
+       *val = m68k_dreg (regs, reg);
        return 1;
      case Areg:
-       *val = m68k_areg (&regs, reg);
+       *val = m68k_areg (regs, reg);
        return 1;
 
      case Aind:
      case Aipi:
-       addr = m68k_areg (&regs, reg);
+       addr = m68k_areg (regs, reg);
        break;
      case Apdi:
-       addr = m68k_areg (&regs, reg);
+       addr = m68k_areg (regs, reg);
        break;
      case Ad16:
        disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
-       addr = m68k_areg (&regs, reg) + (uae_s16)disp16;
+       addr = m68k_areg (regs, reg) + (uae_s16)disp16;
        break;
      case Ad8r:
-       addr = m68k_areg (&regs, 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 (&regs, r) : m68k_dreg (&regs, 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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs->ccrflags) << 4) | (GET_NFLG (&regs->ccrflags) << 3)
-              | (GET_ZFLG (&regs->ccrflags) << 2) | (GET_VFLG (&regs->ccrflags) << 1)
-              |  GET_CFLG (&regs->ccrflags));
-}
-
-void REGPARAM2 MakeFromSR (struct regstruct *regs)
-{
-    int oldm = regs->m;
-    int olds = regs->s;
-
-    SET_XFLG (&regs->ccrflags, (regs->sr >> 4) & 1);
-    SET_NFLG (&regs->ccrflags, (regs->sr >> 3) & 1);
-    SET_ZFLG (&regs->ccrflags, (regs->sr >> 2) & 1);
-    SET_VFLG (&regs->ccrflags, (regs->sr >> 1) & 1);
-    SET_CFLG (&regs->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 (&regs.ccrflags) << 4) | (GET_NFLG (&regs.ccrflags) << 3)
+              | (GET_ZFLG (&regs.ccrflags) << 2) | (GET_VFLG (&regs.ccrflags) << 1)
+              |  GET_CFLG (&regs.ccrflags));
+}
+
+void REGPARAM2 MakeFromSR (void)
+{
+    int oldm = regs.m;
+    int olds = regs.s;
+
+    SET_XFLG (&regs.ccrflags, (regs.sr >> 4) & 1);
+    SET_NFLG (&regs.ccrflags, (regs.sr >> 3) & 1);
+    SET_ZFLG (&regs.ccrflags, (regs.sr >> 2) & 1);
+    SET_VFLG (&regs.ccrflags, (regs.sr >> 1) & 1);
+    SET_CFLG (&regs.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 (&regs, 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 (&regs, 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, &regs);
+    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, &regs);
+       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 (&regs, 7) = regs.msp; break;
-       case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (&regs, 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, &regs);
+           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, &regs);
+       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 (&regs, 7) : regs.msp; break;
-       case 0x804: *regp = regs.m == 0 ? m68k_areg (&regs, 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, &regs);
+           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, &regs, oldpc);
+       Exception (5, oldpc);
        return;
     }
     if (extra & 0x800) {
        /* signed variant */
-       uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (&regs, (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 (&regs, 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 (&regs.ccrflags, 0);
            SET_ZFLG (&regs.ccrflags, ((uae_s32)quot) == 0);
            SET_NFLG (&regs.ccrflags, ((uae_s32)quot) < 0);
-           m68k_dreg (&regs, extra & 7) = (uae_u32)rem;
-           m68k_dreg (&regs, (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 (&regs, (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 (&regs, 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 (&regs.ccrflags, 0);
            SET_ZFLG (&regs.ccrflags, ((uae_s32)quot) == 0);
            SET_NFLG (&regs.ccrflags, ((uae_s32)quot) < 0);
-           m68k_dreg (&regs, extra & 7) = (uae_u32)rem;
-           m68k_dreg (&regs, (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, &regs, oldpc);
+       Exception (5, oldpc);
        return;
     }
     if (extra & 0x800) {
        /* signed variant */
-       uae_s32 lo = (uae_s32)m68k_dreg (&regs, (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 (&regs, 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 (&regs, (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 (&regs, extra & 7);
+           hi = (uae_u32)m68k_dreg (regs, extra & 7);
        }
        if (div_unsigned (hi, lo, src, &quot, &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 (&regs, (extra >> 12) & 7);
+       uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7);
 
        a *= (uae_s64)(uae_s32)src;
        SET_VFLG (&regs.ccrflags, 0);
@@ -1548,16 +1569,16 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra)
        SET_ZFLG (&regs.ccrflags, a == 0);
        SET_NFLG (&regs.ccrflags, a < 0);
        if (extra & 0x400)
-           m68k_dreg (&regs, 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 (&regs.ccrflags, 1);
        }
-       m68k_dreg (&regs, (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 (&regs, (extra >> 12) & 7);
+       uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7);
 
        a *= (uae_u64)src;
        SET_VFLG (&regs.ccrflags, 0);
@@ -1565,11 +1586,11 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra)
        SET_ZFLG (&regs.ccrflags, a == 0);
        SET_NFLG (&regs.ccrflags, ((uae_s64)a) < 0);
        if (extra & 0x400)
-           m68k_dreg (&regs, extra & 7) = (uae_u32)(a >> 32);
+           m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32);
        else if ((a & UVAL64 (0xffffffff00000000)) != 0) {
            SET_VFLG (&regs.ccrflags, 1);
        }
-       m68k_dreg (&regs, (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 (&regs, (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 (&regs, 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 (&regs, (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 (&regs, (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 (&regs, 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 (&regs, regs.pc);
+       m68k_setpc (regs.pc);
        /* MakeFromSR () must not swap stack pointer */
        regs.s = (regs.sr >> 13) & 1;
-       MakeFromSR (&regs);
+       MakeFromSR ();
        /* set stack pointer */
        if (regs.s)
-           m68k_areg (&regs, 7) = regs.isp;
+           m68k_areg (regs, 7) = regs.isp;
        else
-           m68k_areg (&regs, 7) = regs.usp;
+           m68k_areg (regs, 7) = regs.usp;
        return;
     }
 #endif
-    m68k_areg (&regs, 7) = get_long (0);
-    m68k_setpc (&regs, 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 (&regs);
+    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, &regs);
+       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 (&regs, m68k_getpc (&regs));
-       fill_prefetch_slow (&regs);
+       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 (&regs.ccrflags, (opcode >> 8) & 0xf))
            || ((opcode & 0xf0f0) == 0x5050     /* DBcc */
                && !cctrue (&regs.ccrflags, (opcode >> 8) & 0xf)
-               && (uae_s16)m68k_dreg (&regs, opcode & 7) != 0))
+               && (uae_s16)m68k_dreg (regs, opcode & 7) != 0))
        {
-           last_trace_ad = m68k_getpc (&regs);
-           unset_special (&regs, SPCFLAG_TRACE);
-           set_special (&regs, SPCFLAG_DOTRACE);
+           last_trace_ad = m68k_getpc ();
+           unset_special (SPCFLAG_TRACE);
+           set_special (SPCFLAG_DOTRACE);
        }
     } else if (regs.t1) {
-       last_trace_ad = m68k_getpc (&regs);
-       unset_special (&regs, SPCFLAG_TRACE);
-       set_special (&regs, 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 (&regs, SPCFLAG_INT);
+       set_special (SPCFLAG_INT);
     else
-       set_special (&regs, 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 (&regs, 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 (&regs, 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 (&regs));
+       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 (&regs, SPCFLAG_INT);
+           set_special (SPCFLAG_INT);
        }
        if (regs.spcflags) {
-           if (do_specialties (0, &regs)) {
+           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 = &regs;
+
+   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 = &regs;
 
-    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 (&regs));
+       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 = &regs;
 
    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 (&regs, 0);
+       uae_u32 opcode = get_iword (0);
        do_cycles (cpu_cycles);
        mmu_backup_regs = regs;
-       cpu_cycles = (*cpufunctbl[opcode])(opcode, &regs);
+       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, &regs))
+           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, &regs, 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 (&regs); /* compatibility with old state saves */
+               fill_prefetch_slow (); /* compatibility with old state saves */
                memory_map_dump ();
            }
            savestate_restore_finish ();
 #endif
-           fill_prefetch_slow (&regs);
+           fill_prefetch_slow ();
            if (currprefs.produce_sound == 0)
                eventtab[ev_audio].active = 0;
            handle_active_events ();
            if (regs.spcflags)
-               do_specialties (0, &regs);
-           m68k_setpc (&regs, 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, &regs);
+           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, &regs, 0);
+           Exception (3, 0);
            return;
        }
     }
     if (dp->duse) {
        if (!verify_ea (dp->dreg, dp->dmode, dp->size, &val)) {
-           Exception (3, &regs, 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 (&regs);
+    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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs);
+    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 (&regs) + 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 (&regs) + 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 (&regs) + 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 (&regs, 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 (&regs, 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 (&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);
+    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 (&regs), 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 (&regs, 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 (&regs, 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 (&regs));                     /* PC */
+    save_u32 (m68k_getpc ());                  /* PC */
     save_u16 (regs.irc);                               /* prefetch */
     save_u16 (regs.ir);                                        /* instruction prefetch */
-    MakeSR (&regs);
+    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, &regs, 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 (&regs);
+    regs.panic_pc = m68k_getpc ();
     regs.panic_addr = addr;
     regs.panic = 2;
-    set_special (&regs, SPCFLAG_BRK);
-    m68k_setpc (&regs, 0xf80000);
+    set_special (SPCFLAG_BRK);
+    m68k_setpc (0xf80000);
 #ifdef JIT
-    set_special (&regs, SPCFLAG_END_COMPILE);
+    set_special (SPCFLAG_END_COMPILE);
 #endif
-    fill_prefetch_slow (&regs);
+    fill_prefetch_slow ();
 }
 
 void cpureset (void)
@@ -3254,7 +3294,7 @@ void cpureset (void)
        customreset (0);
        return;
     }
-    pc = m68k_getpc (&regs);
+    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 (&regs, 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 (&regs, 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 (&regs, addr - 2);
+       m68k_setpc (addr - 2);
        return;
     }
     write_log (L"M68K RESET PC=%x, rebooting..\n", pc);
     customreset (0);
-    m68k_setpc (&regs, 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);
 }
 
 /*
index 27c050a6d8dba1e1eab5fe4cd0960969f4c8516d..5bce158e0ba970803488937127b5dfe46e2cdcee 100644 (file)
@@ -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)&regs;
     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 (&regs, 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)
index d9921e70f50017314697f4a5d7d9aa81a0e298c8..58ec0b1cd109ca29bc636c2bb2889fd3d07f93d2 100644 (file)
@@ -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)
index 62eb0adad826a32d58d76527a618178d2498c418..3d37c3617c774306638ac21199b5115a28556fc0 100644 (file)
@@ -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<<sb->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;
index 101112019385cd84bd8d52fe7c9d9d7f0131b882..f432f9765a2684587502d659514962b1557bbb9b 100644 (file)
@@ -597,11 +597,11 @@ static void ShowDasm(int direction)
                hDasm = GetDlgItem(hDbgWnd, IDC_DBG_DASM);
 
     if (!dbgpage[currpage].init) {
-       addr = m68k_getpc (&regs);
+       addr = m68k_getpc ();
        dbgpage[currpage].init = 1;
     }
        else if (dbgpage[currpage].autoset == 1 && direction == 0) {
-       addr = m68k_getpc (&regs);
+       addr = m68k_getpc ();
        }
     else
        addr = dbgpage[currpage].dasmaddr;
@@ -636,7 +636,7 @@ static void SetMemToPC(void)
 {
     int i, id;
 
-    dbgpage[currpage].dasmaddr = m68k_getpc (&regs);
+    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(&regs, 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(&regs, 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(&regs, 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(&regs, 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(&regs);
+                               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 (&regs, 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(&regs)) {
+                       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 (&regs, 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 (&regs, 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 (&regs, 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 (&regs));
+    _stprintf(out, L"PC: %08lX", m68k_getpc ());
     UpdateListboxString(hwnd, 0, out, TRUE);
 
     hwnd = GetDlgItem(hDbgWnd, IDC_DBG_PREFETCH);
index a67c952350cdbfb6c3324b0b60633b0f09fe6ad1..f647fe99682a5ca3aaad839ccb9660537827eee0 100644 (file)
@@ -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;
index d7ee9042470a90435ece637c275415a8148ca04d..9e3660efcd8b325c104ef3b9df52a76af1c54d79 100644 (file)
@@ -44,7 +44,7 @@
                                AdditionalOptions=""
                                Optimization="0"
                                AdditionalIncludeDirectories="..\..\include,..\..,..\"
-                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,__STDC__"
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
                                BasicRuntimeChecks="3"
                                RuntimeLibrary="1"
                                UsePrecompiledHeader="0"
index 13ef0836fbeec1216f48b9d14bbf2f4f2e3e43f6..5108b58e490ab3f3723cc0d6a1a5a5642a391bdf 100644 (file)
@@ -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);
index d4dcb9cc4d0deec8ed0ff38857dc63e284079944..a45f1075673b2abec990297eebcc68379423d34f 100644 (file)
@@ -987,8 +987,8 @@ END
 //\r
 \r
 VS_VERSION_INFO VERSIONINFO\r
- FILEVERSION 1,6,2,0\r
- PRODUCTVERSION 1,6,2,0\r
+ FILEVERSION 2,0,0,0\r
+ PRODUCTVERSION 2,0,0,0\r
  FILEFLAGSMASK 0x3fL\r
 #ifdef _DEBUG\r
  FILEFLAGS 0x1L\r
@@ -1004,12 +1004,12 @@ BEGIN
         BLOCK "040904b0"\r
         BEGIN\r
             VALUE "FileDescription", "WinUAE"\r
-            VALUE "FileVersion", "1.6.2"\r
+            VALUE "FileVersion", "2.0.0"\r
             VALUE "InternalName", "WinUAE"\r
             VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)"\r
             VALUE "OriginalFilename", "WinUAE.exe"\r
             VALUE "ProductName", "WinUAE"\r
-            VALUE "ProductVersion", "1.6.2"\r
+            VALUE "ProductVersion", "2.0.0"\r
         END\r
     END\r
     BLOCK "VarFileInfo"\r
index 7afd53854c35042935a29510c2c5647dbfd87272..13715a9caca966ec8e7748c07df71b974ec1e9e6 100644 (file)
@@ -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);
index ffd0f248bd3c2a14ee4a581b78a493726982a3ac..d94e39f093dc04ed8262ca6c74a707b8581246ac 100644 (file)
@@ -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
index d9e1db111a9e4a4b6f22e5367a907fd9034f1662..622674cdb07f7e329bd98c8a25b4ad0b2d484a1d 100644 (file)
@@ -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 */
index 39fb24e31cca1bc9f74e0a5e6bbd06a33c83b298..1a8df0bfa35f4570289918a1bf1b9e485604d1c5 100644 (file)
@@ -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 (&regs);
+               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 (&regs, 0);
+                   m68k_setpc (0);
                    if (ppc != regs.pc_p) {
                        prevpc = (uae_u8*)ppc;
                    }
index 6d0d51a5e0b2deedd4ad8363bd43fd94a4f46f1e..2680b607c865ca15c625d2ba7aea3909b4b183e8 100644 (file)
@@ -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""
 
index 7b9229fa6d4e372054c9dd9c2a5eff14dc8fd2fa..a6303ee8721fe3007ba1fe5fd5c414609e0c59f7 100644 (file)
@@ -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;
index 39485de76ef7485139b2a16a8f98b200c4ce76a9..d98210fe338468e4f2f10cedb2e7adf102662a8e 100644 (file)
                                        >
                                </File>
                                <File
-                                       RelativePath="..\resources\configfile.ico"
+                                       RelativePath=".\configfile.ico"
                                        >
                                </File>
                                <File
-                                       RelativePath=".\configfile.ico"
+                                       RelativePath="..\resources\configfile.ico"
                                        >
                                </File>
                                <File
                                        >
                                </File>
                                <File
-                                       RelativePath="..\resources\file.ico"
+                                       RelativePath=".\file.ico"
                                        >
                                </File>
                                <File
-                                       RelativePath=".\file.ico"
+                                       RelativePath="..\resources\file.ico"
                                        >
                                </File>
                                <File
                                        >
                                </File>
                                <File
-                                       RelativePath=".\port.ico"
+                                       RelativePath="..\resources\port.ico"
                                        >
                                </File>
                                <File
-                                       RelativePath="..\resources\port.ico"
+                                       RelativePath=".\port.ico"
                                        >
                                </File>
                                <File
                                RelativePath="..\..\cpuemu_12.c"
                                >
                        </File>
+                       <File
+                               RelativePath="..\..\cpuemu_13.c"
+                               >
+                       </File>
                        <File
                                RelativePath="..\..\cpummu.c"
                                >
index 59eb664e29560112f5aa8ab993b3ca8b7ee56339..6b8d251fa3a8a289dcbb05fd7baf1f051574a6fa 100644 (file)
@@ -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 f0e6db6bb55c7b6bf32bae74c01e7ecd43e78aa5..041c9fad6c357008a79713383ac70e36843b2e4d 100644 (file)
--- 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);
index aa94ca5a2370b0508148ec3ef0dbdc2adc1bb920..ee3d7cce6f6379432ac812256d9f84c2e784d0b9 100644 (file)
@@ -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 2f77e96191ac796c335b682a5ee776e6c06a2eb1..63981ae9247ac106f4f93c9f9e5b4d14b883e431 100644 (file)
--- 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);
 }
index 691515b9e2923ed6993841a2180e2e401ba282f7..a3e6606caf931b3fbf50a144fd0640e7d32d9d0c 100644 (file)
--- 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;
index 93167cd0d37a24ee1552ea20ed84a82f429c3135..4bb325ffbbe91ba14a63b076aecac96690f4a84b 100644 (file)
--- 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 = &regs;
 
     if (uaelib_debug)
        write_log (L"%d: %08x %08x %08x %08x %08x %08x %08x %08x, %08x %08x %08x %08x %08x %08x %08x %08x\n",
index 2351505f6f071df6e8e0aa71544cc3b2bcbe67cf..24a779f2aed8ea7983ab9885d23957f195cfa726 100644 (file)
@@ -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);
index 8bbebeb8bce6370934b88ca5282cd16a15935054..29137d0c702b6dc212bbf33d02a966c403ae4b35 100644 (file)
@@ -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) {