*
*/
-#define A2091_DEBUG 1
+#define A2091_DEBUG 0
#define A3000_DEBUG 0
#define WD33C93_DEBUG 0
/* returns true if the Program counter is currently in the AR rom. */
int is_ar_pc_in_rom()
{
- uaecptr pc = m68k_getpc (®s) & 0xFFFFFF;
+ uaecptr pc = m68k_getpc () & 0xFFFFFF;
return pc >= arrom_start && pc < arrom_start+arrom_size;
}
/* returns true if the Program counter is currently in the AR RAM. */
int is_ar_pc_in_ram()
{
- uaecptr pc = m68k_getpc (®s) & 0xFFFFFF;
+ uaecptr pc = m68k_getpc () & 0xFFFFFF;
return pc >= arram_start && pc < arram_start+arram_size;
}
ar_wait_pop = 0;
/* We get (SP+2) here, as the first word on the stack is the status register. */
/* We want the following long, which is the return program counter. */
- wait_for_pc = longget (m68k_areg (®s, 7) + 2); /* Get (SP+2) */
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ wait_for_pc = longget (m68k_areg (regs, 7) + 2); /* Get (SP+2) */
+ set_special (SPCFLAG_ACTION_REPLAY);
- pc = m68k_getpc (®s);
+ pc = m68k_getpc ();
/* write_log_debug ("Action Replay marked as ACTION_REPLAY_WAIT_PC, PC=%p\n",pc);*/
}
else
{
- uaecptr pc = m68k_getpc (®s);
+ uaecptr pc = m68k_getpc ();
/* write_log_debug ("Action Replay marked as IDLE, PC=%p\n",pc);*/
action_replay_flag = ACTION_REPLAY_IDLE;
}
} else
write_log (L"AR: exit with armode(%d)\n", armode);
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
action_replay_flag = ACTION_REPLAY_HIDE;
} else if (addr == 6) {
copytoamiga (regs.vbr + 0x7c, artemp, 4);
addr &= arram_mask;
m = (uae_u32 *)(armemory_ram + addr);
if (strncmp ("T8", (char*)m, 2) == 0)
- write_log_debug (L"Reading T8 from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading T8 from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("LAME", (char*)m, 4) == 0)
- write_log_debug (L"Reading LAME from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading LAME from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("RES1", (char*)m, 4) == 0)
- write_log_debug (L"Reading RES1 from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading RES1 from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("ARON", (char*)m, 4) == 0)
- write_log_debug (L"Reading ARON from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading ARON from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("KILL", (char*)m, 4) == 0)
- write_log_debug (L"Reading KILL from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading KILL from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("BRON", (char*)m, 4) == 0)
- write_log_debug (L"Reading BRON from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading BRON from addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("PRIN", (char*)m, 4) == 0)
- write_log_debug (L"Reading PRIN from addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Reading PRIN from addr %08x PC=%p\n", addr, m68k_getpc ());
return do_get_mem_long (m);
}
addr &= arram_mask;
m = (uae_u32 *)(armemory_ram + addr);
if (strncmp ("T8", (char*)m, 2) == 0)
- write_log_debug (L"Writing T8 to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing T8 to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("LAME", (char*)m, 4) == 0)
- write_log_debug (L"Writing LAME to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing LAME to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("RES1", (char*)m, 4) == 0)
- write_log_debug (L"Writing RES1 to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing RES1 to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("ARON", (char*)m, 4) == 0)
- write_log_debug (L"Writing ARON to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing ARON to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("KILL", (char*)m, 4) == 0)
- write_log_debug (L"Writing KILL to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing KILL to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("BRON", (char*)m, 4) == 0)
- write_log_debug (L"Writing BRON to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing BRON to addr %08x PC=%p\n", addr, m68k_getpc ());
if (strncmp ("PRIN", (char*)m, 4) == 0)
- write_log_debug (L"Writing PRIN to addr %08x PC=%p\n", addr, m68k_getpc (®s));
+ write_log_debug (L"Writing PRIN to addr %08x PC=%p\n", addr, m68k_getpc ());
do_put_mem_long (m, l);
}
hide_cart (0);
memcpy (armemory_ram + 0xf000, ar_custom, 2 * 256);
action_replay_flag = ACTION_REPLAY_ACTIVE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
copyfromamiga (artemp, regs.vbr + 0x7c, 4);
copytoamiga (regs.vbr + 0x7c, armemory_rom + 0x7c, 4);
NMI ();
triggered_once = 1;
cartridge_enter();
hrtmon_flag = ACTION_REPLAY_ACTIVE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
if (hrtmon_zeropage)
memcpy (hrtmon_zeropage, chipmemory, 1024);
if (hrtmon_custom)
old = get_long ((uaecptr)(regs.vbr + 0x8));
put_word (hrtmem_start + 0xc0000, 4);
put_long ((uaecptr)(regs.vbr + 8), get_long (hrtmem_start + 8));
- Exception (2, ®s, 0);
+ Exception (2, 0);
put_long ((uaecptr)(regs.vbr + 8), old);
} else if (cart_type == CART_SUPER4) {
uae_u32 v = get_long (hrtmem_start + 0x7c);
return;
triggered_once = 1;
if (armodel == 1) {
- write_log (L"AR1: Enter PC:%p\n", m68k_getpc (®s));
+ write_log (L"AR1: Enter PC:%p\n", m68k_getpc ());
action_replay_go1 (7);
- unset_special (®s, SPCFLAG_ACTION_REPLAY);
+ unset_special (SPCFLAG_ACTION_REPLAY);
return;
}
if (action_replay_flag == ACTION_REPLAY_DORESET) {
{
if (hrtmemory) {
if (savestate_state == STATE_RESTORE) {
- if (m68k_getpc (®s) >= hrtmem_start && m68k_getpc (®s) <= hrtmem_start + hrtmem_size)
+ if (m68k_getpc () >= hrtmem_start && m68k_getpc () <= hrtmem_start + hrtmem_size)
hrtmon_map_banks ();
else
hrtmon_unmap_banks ();
return;
if (savestate_state == STATE_RESTORE) {
- if (m68k_getpc (®s) >= arrom_start && m68k_getpc (®s) <= arrom_start + arrom_size) {
+ if (m68k_getpc () >= arrom_start && m68k_getpc () <= arrom_start + arrom_size) {
action_replay_flag = ACTION_REPLAY_ACTIVE;
hide_cart (0);
} else {
if (armode < 2)
/* If there are no active breakpoints */
return;
- if (m68k_getpc (®s) >= 0x200)
+ if (m68k_getpc () >= 0x200)
return;
action_replay_flag = ACTION_REPLAY_ACTIVATE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
}
int action_replay_freeze(void)
action_replay_chipwrite();
} else {
action_replay_flag = ACTION_REPLAY_ACTIVATE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
armode = ARMODE_FREEZE;
}
return 1;
} else {
hrtmon_flag = ACTION_REPLAY_ACTIVATE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
return 1;
}
return 0;
{
if (armodel == 2 || armodel == 3) {
action_replay_flag = ACTION_REPLAY_DORESET;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
} else if (armodel == 1) {
/* copy 0x60 addr info to level 7 */
/* This is to emulate the 0x60 interrupt. */
ar_wait_pop = 1; /* Wait for stack to pop. */
action_replay_flag = ACTION_REPLAY_ACTIVATE;
- set_special (®s, SPCFLAG_ACTION_REPLAY);
+ set_special (SPCFLAG_ACTION_REPLAY);
}
}
return;
cartridge_exit();
hrtmon_flag = ACTION_REPLAY_IDLE;
- unset_special (®s, SPCFLAG_ACTION_REPLAY);
+ unset_special (SPCFLAG_ACTION_REPLAY);
//write_log (L"HRTMON: Exit\n");
}
}
}
- unset_special (®s, SPCFLAG_ACTION_REPLAY); /* This shouldn't be necessary here, but just in case. */
+ unset_special (SPCFLAG_ACTION_REPLAY); /* This shouldn't be necessary here, but just in case. */
action_replay_flag = ACTION_REPLAY_INACTIVE;
hrtmon_flag = ACTION_REPLAY_INACTIVE;
action_replay_unsetbanks ();
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)
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))
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 ();
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;
}
if (debug_dma)
record_dma_event (DMA_EVENT_BLITFINISHED, hpos, vpos);
event2_remevent (ev2_blitter);
- unset_special (®s, SPCFLAG_BLTNASTY);
+ unset_special (SPCFLAG_BLTNASTY);
#ifdef BLITTER_DEBUG
write_log (L"cycles %d, missed %d, total %d\n",
blit_totalcyclecounter, blit_misscyclecounter, blit_totalcyclecounter + blit_misscyclecounter);
bltstate = BLT_init;
blit_slowdown = 0;
- unset_special (®s, SPCFLAG_BLTNASTY);
+ unset_special (SPCFLAG_BLTNASTY);
if (dmaen (DMA_BLITPRI))
- set_special (®s, SPCFLAG_BLTNASTY);
+ set_special (SPCFLAG_BLTNASTY);
if (vblitsize == 0 || (blitline && hblitsize != 2)) {
blitter_done (hpos);
/* 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;
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;
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;
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() */
}
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) {
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 */
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)
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 */
}
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);
{
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));
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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 */
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 */
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;
}
{
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;
}
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);
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));
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));
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));
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) */
/* 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 */
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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)
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)
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;
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 {
/* 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;
}
}
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));
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
}
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 */
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) {
put_long (context->regs.vbr + 0x78, tmp1);
#endif
- m68k_dreg (&context->regs, 0) = 1;
+ m68k_dreg (regs, 0) = 1;
return 0;
}
break;
}
}
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
i++;
}
}
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;
D(bug(L"pflusha(%u,%u)\n", glob, regs.dfc));
mmu_flush_atc_all(glob);
} else {
- addr = m68k_areg(®s, regno);
+ addr = m68k_areg(regs, regno);
D(bug(L"pflush(%u,%u,%x)\n", glob, regs.dfc, addr));
mmu_flush_atc(addr, super, glob);
}
regno = opcode & 7;
write = (opcode & 32) == 0;
- addr = m68k_areg(®s, regno);
+ addr = m68k_areg(regs, regno);
//bug("ptest(%u,%u,%x)", write, regs.dfc, addr);
D(bug(L"PTEST%c (A%d) %08x DFC=%d\n", write ? 'W' : 'R', regno, addr, regs.dfc));
mmu_flush_atc(addr, super, true);
RESTORE_EXCEPTION;
D(bug(L"PTEST result: mmusr %08x\n", regs.mmusr));
} else
- op_illg (opcode, ®s);
+ op_illg (opcode);
}
void REGPARAM2 mmu_flush_atc(uaecptr addr, bool super, bool global)
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;
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 ();
{
#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;
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)
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
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)
if ((address & 0x1fe) < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) {
cop_state.state = COP_stop;
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
return 1;
}
return 0;
}
}
cop_state.state = COP_stop;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
}
STATIC_INLINE void COP1LCH (uae_u16 v)
write_log (L"vblank without copper ending %08x (%08x %08x)\n", cop_state.ip, cop1lc, cop2lc);
#endif
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
cop_state.ignore_next = 0;
if (!oldstrobe)
cop_state.state_prev = cop_state.state;
compute_spcflag_copper (hpos);
} else if (!newcop) {
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
}
}
if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done)
- set_special (®s, SPCFLAG_BLTNASTY);
+ set_special (SPCFLAG_BLTNASTY);
if (dmaen (DMA_BLITTER) && bltstate == BLT_init)
bltstate = BLT_work;
if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER))
- unset_special (®s, SPCFLAG_BLTNASTY);
+ unset_special (SPCFLAG_BLTNASTY);
if (changed & (DMA_MASTER | 0x0f))
audio_hsync (hpos);
if (bplcon0 == v)
return;
+ if (!issyncstopped ()) {
+ vpos_previous = vpos;
+ hpos_previous = hpos;
+ }
+
bplcon0 = v;
bpldmainitdelay (hpos);
}
#if 0
- if ((bplcon0 & 2) && !(v & 2)) {
- vpos_previous = vpos;
- hpos_previous = hpos;
- }
ddf_change = vpos;
decide_line (hpos);
dump_copper (L"error2", until_hpos);
copper_enabled_thisline = 0;
cop_state.state = COP_stop;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
return;
}
if (cop_state.saved_i1 == 0xFFFF && cop_state.saved_i2 == 0xFFFE) {
cop_state.state = COP_stop;
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
goto out;
}
if (vp < cop_state.vcmp) {
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
goto out;
}
/* We need to wait for the blitter. */
cop_state.state = COP_bltwait;
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
goto out;
}
int wasenabled = copper_enabled_thisline;
copper_enabled_thisline = 0;
- unset_special (®s, SPCFLAG_COPPER);
+ unset_special (SPCFLAG_COPPER);
if (!dmaen (DMA_COPPER) || cop_state.state == COP_stop || cop_state.state == COP_bltwait || nocustom ())
return;
cop_state.hpos = hpos;
}
copper_enabled_thisline = 1;
- set_special (®s, SPCFLAG_COPPER);
+ set_special (SPCFLAG_COPPER);
}
/*
if (dmaen (DMA_COPPER) && vp == vpos) {
copper_enabled_thisline = 1;
- set_special (®s, SPCFLAG_COPPER);
+ set_special (SPCFLAG_COPPER);
}
}
}
#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) {
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
target_reset ();
reset_all_systems ();
- write_log (L"Reset at %08X\n", m68k_getpc (®s));
+ write_log (L"Reset at %08X\n", M68K_GETPC);
memory_map_dump();
hsync_counter = 0;
#ifdef JIT
compemu_reset ();
#endif
- unset_special (®s, ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE));
+ unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE));
vpos = 0;
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);
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);
if (debugger_active)
return;
debugger_active = 1;
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
debugging = 1;
mmu_triggered = 0;
}
int notinrom (void)
{
- uaecptr pc = munge24(m68k_getpc (®s));
+ uaecptr pc = munge24 (m68k_getpc ());
if (pc < 0x00e00000 || pc > 0x00ffffff)
return 1;
return 0;
static void illg_debug_do (uaecptr addr, int rwi, int size, uae_u32 val)
{
uae_u8 mask;
- uae_u32 pc = m68k_getpc (®s);
+ uae_u32 pc = m68k_getpc ();
int i;
for (i = size - 1; i >= 0; i--) {
if (rwi == 2) {
for (i = 0; i < size; i++) {
if (smc_table[addr + i].cnt < SMC_MAXHITS) {
- smc_table[addr + i].addr = m68k_getpc (®s);
+ smc_table[addr + i].addr = m68k_getpc ();
}
}
return;
mwhit.val = val;
memwatch_triggered = i + 1;
debugging = 1;
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
return 1;
}
return 1;
regs.ir = v;
else if (!_tcscmp (parm, L"SR")) {
regs.sr = v;
- MakeFromSR (®s);
+ MakeFromSR ();
} else if (!_tcscmp (parm, L"CCR")) {
regs.sr = (regs.sr & ~31) | (v & 31);
- MakeFromSR (®s);
+ MakeFromSR ();
} else if (!_tcscmp (parm, L"USP")) {
regs.usp = v;
} else if (!_tcscmp (parm, L"ISP")) {
regs.isp = v;
} else if (!_tcscmp (parm, L"PC")) {
- m68k_setpc (®s, v);
- fill_prefetch_slow (®s);
+ m68k_setpc (v);
+ fill_prefetch_slow ();
} else {
for (i = 0; m2cregs[i].regname; i++) {
if (!_tcscmp (parm, m2cregs[i].regname))
skipaddr_doskip = readint (&inptr);
if (skipaddr_doskip <= 0 || skipaddr_doskip > 10000)
skipaddr_doskip = 1;
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
exception_debugging = 1;
return;
case 'z':
case 'g':
if (more_params (&inptr)) {
- m68k_setpc (®s, readhex (&inptr));
- fill_prefetch_slow (®s);
+ m68k_setpc (readhex (&inptr));
+ fill_prefetch_slow ();
}
deactivate_debugger();
return;
case 'H':
{
int count, temp, badly, skip;
- uae_u32 oldpc = m68k_getpc (®s);
+ uae_u32 oldpc = m68k_getpc ();
struct regstruct save_regs = regs;
badly = 0;
}
while (temp != lasthist) {
regs = history[temp];
- m68k_setpc (®s, history[temp].pc);
+ m68k_setpc (history[temp].pc);
if (badly)
m68k_dumpstate (stdout, NULL);
else
temp = 0;
}
regs = save_regs;
- m68k_setpc (®s, oldpc);
+ m68k_setpc (oldpc);
}
break;
case 'M':
static void addhistory (void)
{
- uae_u32 pc = m68k_getpc (®s);
+ uae_u32 pc = m68k_getpc ();
// if (!notinrom())
// return;
history[lasthist] = regs;
- history[lasthist].pc = m68k_getpc (®s);
+ history[lasthist].pc = m68k_getpc ();
if (++lasthist == MAX_HIST)
lasthist = 0;
if (lasthist == firsthist) {
uae_u16 opcode;
int bp = 0;
- pc = munge24 (m68k_getpc (®s));
+ pc = munge24 (m68k_getpc ());
opcode = (currprefs.cpu_compatible || currprefs.cpu_cycle_exact) ? regs.ir : get_word (pc);
for (i = 0; i < BREAKPOINT_TOTAL; i++) {
}
}
if (sr_bpmask || sr_bpvalue) {
- MakeSR (®s);
+ MakeSR ();
if ((regs.sr & sr_bpmask) == sr_bpvalue) {
console_out (L"SR breakpoint\n");
bp = 1;
}
}
if (!bp) {
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
return;
}
}
if (skipaddr_doskip > 0) {
skipaddr_doskip--;
if (skipaddr_doskip > 0) {
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
return;
}
}
if (sr_bpmask || sr_bpvalue)
do_skip = 1;
if (do_skip) {
- set_special (®s, SPCFLAG_BRK);
- m68k_resumestopped (®s);
+ set_special (SPCFLAG_BRK);
+ m68k_resumestopped ();
debugging = 1;
}
resume_sound ();
uae_u32 pc;
mmu_triggered = 0;
- pc = m68k_getpc (®s);
+ pc = m68k_getpc ();
p = mmu_regs + 18 * 4;
put_long (p, pc);
regs = mmu_backup_regs;
regs.intmask = 7;
regs.t0 = regs.t1 = 0;
if (!regs.s) {
- regs.usp = m68k_areg (®s, 7);
+ regs.usp = m68k_areg (regs, 7);
if (currprefs.cpu_model >= 68020)
- m68k_areg (®s, 7) = regs.m ? regs.msp : regs.isp;
+ m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp;
else
- m68k_areg (®s, 7) = regs.isp;
+ m68k_areg (regs, 7) = regs.isp;
regs.s = 1;
}
- MakeSR (®s);
- m68k_setpc (®s, mmu_callback);
- fill_prefetch_slow (®s);
+ MakeSR ();
+ m68k_setpc (mmu_callback);
+ fill_prefetch_slow ();
if (currprefs.cpu_model > 68000) {
for (i = 0 ; i < 9; i++) {
- m68k_areg (®s, 7) -= 4;
- put_long (m68k_areg (®s, 7), 0);
+ m68k_areg (regs, 7) -= 4;
+ put_long (m68k_areg (regs, 7), 0);
}
- m68k_areg (®s, 7) -= 4;
- put_long (m68k_areg (®s, 7), mmu_fault_addr);
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7), 0); /* WB1S */
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7), 0); /* WB2S */
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7), 0); /* WB3S */
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7),
+ m68k_areg (regs, 7) -= 4;
+ put_long (m68k_areg (regs, 7), mmu_fault_addr);
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7), 0); /* WB1S */
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7), 0); /* WB2S */
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7), 0); /* WB3S */
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7),
(mmu_fault_rw ? 0 : 0x100) | (mmu_fault_size << 5)); /* SSW */
- m68k_areg (®s, 7) -= 4;
- put_long (m68k_areg (®s, 7), mmu_fault_bank_addr);
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7), 0x7002);
+ m68k_areg (regs, 7) -= 4;
+ put_long (m68k_areg (regs, 7), mmu_fault_bank_addr);
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7), 0x7002);
}
- m68k_areg (®s, 7) -= 4;
- put_long (m68k_areg (®s, 7), get_long (p - 4));
- m68k_areg (®s, 7) -= 2;
- put_word (m68k_areg (®s, 7), mmur.sr);
+ m68k_areg (regs, 7) -= 4;
+ put_long (m68k_areg (regs, 7), get_long (p - 4));
+ m68k_areg (regs, 7) -= 2;
+ put_word (m68k_areg (regs, 7), mmur.sr);
- set_special(®s, SPCFLAG_END_COMPILE);
+ set_special(SPCFLAG_END_COMPILE);
}
static void mmu_do_hit_pre (struct mmudata *md, uaecptr addr, int size, int rwi, uae_u32 v)
int i;
mmur = regs;
- pc = m68k_getpc (®s);
+ pc = m68k_getpc ();
if (mmu_logging)
console_out_f (L"MMU: hit %08X SZ=%d RW=%d V=%08X PC=%08X\n", addr, size, rwi, v, pc);
initialize_memwatch (1);
console_out_f (L"MMU: enabled, %d banks, CB=%08X S=%08X BNK=%08X SF=%08X, %d*%d\n",
size - 1, mmu_callback, parm, banks, mmu_regs, mmu_slots, 1 << MMU_PAGE_SHIFT);
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
return 1;
}
if (quit_program < 0) {
quit_program = -quit_program;
set_inhibit_frame (IHF_QUIT_PROGRAM);
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
return;
}
/* Data registers */
_stprintf (enforcer_buf_ptr, L"Data: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
- m68k_dreg (®s, 0), m68k_dreg (®s, 1), m68k_dreg (®s, 2), m68k_dreg (®s, 3),
- m68k_dreg (®s, 4), m68k_dreg (®s, 5), m68k_dreg (®s, 6), m68k_dreg (®s, 7));
+ m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3),
+ m68k_dreg (regs, 4), m68k_dreg (regs, 5), m68k_dreg (regs, 6), m68k_dreg (regs, 7));
enforcer_buf_ptr += _tcslen (enforcer_buf_ptr);
/* Address registers */
_stprintf (enforcer_buf_ptr, L"Addr: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
- m68k_areg (®s, 0), m68k_areg (®s, 1), m68k_areg (®s, 2), m68k_areg (®s, 3),
- m68k_areg (®s, 4), m68k_areg (®s, 5), m68k_areg (®s, 6), m68k_areg (®s, 7));
+ m68k_areg (regs, 0), m68k_areg (regs, 1), m68k_areg (regs, 2), m68k_areg (regs, 3),
+ m68k_areg (regs, 4), m68k_areg (regs, 5), m68k_areg (regs, 6), m68k_areg (regs, 7));
enforcer_buf_ptr += _tcslen (enforcer_buf_ptr);
/* Stack */
- a7 = m68k_areg (®s, 7);
+ a7 = m68k_areg (regs, 7);
for (i = 0; i < 8 * STACKLINES; i++) {
a7 += 4;
if (!(i % 8)) {
}
/* Segtracker output */
- a7 = m68k_areg (®s, 7);
+ a7 = m68k_areg (regs, 7);
if (get_long (a7 - 4) != pc) {
if (enforcer_decode_hunk_and_offset (buf, pc)) {
_tcscpy (enforcer_buf_ptr, buf);
{
enforcer_display_hit (L"LONG READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
return do_get_mem_long (m);
}
{
enforcer_display_hit (L"WORD READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
return do_get_mem_word (m);
}
{
enforcer_display_hit (L"BYTE READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
return chipmemory[addr];
enforcer_display_hit (L"LONG WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
if (addr != 0x100)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
do_put_mem_long (m, l);
}
{
enforcer_display_hit (L"WORD WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
do_put_mem_word (m, w);
}
{
enforcer_display_hit (L"BYTE WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1)
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
}
chipmemory[addr] = b;
}
special_mem_r;
enforcer_display_hit (L"LONG READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET), addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return 0;
}
return 0xbadedeef;
#endif
enforcer_display_hit (L"WORD READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return 0;
}
return 0xbadf;
special_mem_r;
enforcer_display_hit (L"BYTE READ from",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return 0;
}
return 0xbadedeef;
special_mem_w;
enforcer_display_hit (L"LONG WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return;
}
}
special_mem_w;
enforcer_display_hit (L"WORD WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return;
}
}
special_mem_w;
enforcer_display_hit (L"BYTE WRITE to",(uae_u32)(regs.pc_p - NMEM_OFFSET),addr);
if (enforcermode & 1) {
- set_special (®s, SPCFLAG_TRAP);
+ set_special (SPCFLAG_TRAP);
return;
}
}
static void ersatz_doio (void)
{
- uaecptr request = m68k_areg (®s, 1);
+ uaecptr request = m68k_areg (regs, 1);
switch (get_word (request + 0x1C)) {
case 9: /* TD_MOTOR is harmless */
return;
put_long (a, 0xF8001A);
}
regs.isp = regs.msp = regs.usp = 0x800;
- m68k_areg (®s, 7) = 0x80000;
+ m68k_areg (regs, 7) = 0x80000;
regs.intmask = 0;
/* Build a dummy execbase */
- put_long (4, m68k_areg (®s, 6) = 0x676);
+ put_long (4, m68k_areg (regs, 6) = 0x676);
put_byte (0x676 + 0x129, 0);
for (f = 1; f < 105; f++) {
put_word (0x676 - 6*f, 0x4EF9);
put_long (request + 0x28, 0x4000);
put_long (request + 0x2C, 0);
put_long (request + 0x24, 0x200 * 4);
- m68k_areg (®s, 1) = request;
+ m68k_areg (regs, 1) = request;
ersatz_doio ();
/* kickstart disk loader */
if (get_long (0x4000) == 0x4b49434b) {
put_long (request + 0x28, 0xF80000);
put_long (request + 0x2C, 0x200);
put_long (request + 0x24, 0x200 * 512);
- m68k_areg (®s, 1) = request;
+ m68k_areg (regs, 1) = request;
ersatz_doio ();
/* read rom image once again to mirror address space.
put_long (request + 0x28, 0xFC0000);
put_long (request + 0x2C, 0x200);
put_long (request + 0x24, 0x200 * 512);
- m68k_areg (®s, 1) = request;
+ m68k_areg (regs, 1) = request;
ersatz_doio ();
disk_eject (0);
- m68k_setpc (®s, 0xFC0002);
- fill_prefetch_slow (®s);
+ m68k_setpc (0xFC0002);
+ fill_prefetch_slow ();
uae_reset (0);
ersatzkickfile = 0;
return;
}
- m68k_setpc (®s, 0x400C);
- fill_prefetch_slow (®s);
+ m68k_setpc (0x400C);
+ fill_prefetch_slow ();
/* Init the hardware */
put_long (0x3000, 0xFFFFFFFEul);
break;
case EOP_AVAILMEM:
- m68k_dreg (®s, 0) = m68k_dreg (®s, 1) & 4 ? 0 : 0x70000;
+ m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x70000;
break;
case EOP_ALLOCMEM:
- m68k_dreg (®s, 0) = m68k_dreg (®s, 1) & 4 ? 0 : 0x0F000;
+ m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x0F000;
break;
case EOP_ALLOCABS:
- m68k_dreg (®s, 0) = m68k_areg (®s, 1);
+ m68k_dreg (regs, 0) = m68k_areg (regs, 1);
break;
case EOP_NIMP:
/* fall through */
case EOP_LOOP:
- m68k_setpc (®s, 0xF80010);
+ m68k_setpc (0xF80010);
break;
case EOP_OPENLIB:
uinfo->self = unit;
unit->volume = 0;
- unit->port = m68k_areg (®s, 5);
+ unit->port = m68k_areg (regs, 5);
unit->unit = num;
startup_update_unit (unit, uinfo);
/* 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;
/* 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);
{
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);
{
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) {
*/
#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;
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
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:
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;
}
/* 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)) {
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. */
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) {
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;
}
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);
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:
* 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)) {
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;
}
}
if (!(flags & 1)) /* not bootable */
- m68k_dreg (®s, 7) = m68k_dreg (®s, 7) & ~1;
+ m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1;
buf[37 + buf[36]] = 0; /* zero terminate BSTR */
s = au (buf + 37);
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 */
if (type == FILESYS_HARDFILE)
type = dofakefilesys (&uip[unit_no], parmpacket);
if (uip[unit_no].bootpri < -127)
- m68k_dreg (®s, 7) = m68k_dreg (®s, 7) & ~1; /* do not boot */
+ m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; /* do not boot */
if (uip[unit_no].bootpri < -128)
return -1; /* do not mount */
return type;
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;
STATIC_INLINE int isinrom (void)
{
- return (munge24 (m68k_getpc (®s)) & 0xFFF80000) == 0xF80000;
+ return (munge24 (m68k_getpc ()) & 0xFFF80000) == 0xF80000;
}
static uae_u32 xhex_pi[] ={0x2168c235, 0xc90fdaa2, 0x4000};
#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 */
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;
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;
case 0:
switch (size) {
case 6:
- *src = (fptype) (uae_s8) m68k_dreg (®s, reg);
+ *src = (fptype) (uae_s8) m68k_dreg (regs, reg);
break;
case 4:
- *src = (fptype) (uae_s16) m68k_dreg (®s, reg);
+ *src = (fptype) (uae_s16) m68k_dreg (regs, reg);
break;
case 0:
- *src = (fptype) (uae_s32) m68k_dreg (®s, reg);
+ *src = (fptype) (uae_s32) m68k_dreg (regs, reg);
break;
case 1:
- *src = to_single (m68k_dreg (®s, reg));
+ *src = to_single (m68k_dreg (regs, reg));
break;
default:
return 0;
case 1:
return 0;
case 2:
- ad = m68k_areg (®s, reg);
+ ad = m68k_areg (regs, reg);
break;
case 3:
- ad = m68k_areg (®s, reg);
- m68k_areg (®s, reg) += reg == 7 ? sz2[size] : sz1[size];
+ ad = m68k_areg (regs, reg);
+ m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size];
break;
case 4:
- m68k_areg (®s, reg) -= reg == 7 ? sz2[size] : sz1[size];
- ad = m68k_areg (®s, reg);
+ m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size];
+ ad = m68k_areg (regs, reg);
break;
case 5:
- ad = m68k_areg (®s, reg) + (uae_s32) (uae_s16) next_iword (®s);
+ ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword ();
break;
case 6:
- ad = get_disp_ea_020 (®s, m68k_areg (®s, reg), next_iword (®s));
+ ad = get_disp_ea_020 (m68k_areg (regs, reg), next_iword ());
break;
case 7:
switch (reg) {
case 0:
- ad = (uae_s32) (uae_s16) next_iword (®s);
+ ad = (uae_s32) (uae_s16) next_iword ();
break;
case 1:
- ad = next_ilong (®s);
+ ad = next_ilong ();
break;
case 2:
- ad = m68k_getpc (®s);
- ad += (uae_s32) (uae_s16) next_iword (®s);
+ ad = m68k_getpc ();
+ ad += (uae_s32) (uae_s16) next_iword ();
break;
case 3:
- tmppc = m68k_getpc (®s);
- tmp = next_iword (®s);
- ad = get_disp_ea_020 (®s, tmppc, tmp);
+ tmppc = m68k_getpc ();
+ tmp = next_iword ();
+ ad = get_disp_ea_020 (tmppc, tmp);
break;
case 4:
- ad = m68k_getpc (®s);
- m68k_setpc (®s, ad + sz2[size]);
+ ad = m68k_getpc ();
+ m68k_setpc (ad + sz2[size]);
if (size == 6)
ad++;
break;
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;
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;
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;
case 1:
return 0;
case 2:
- *ad = m68k_areg (®s, reg);
+ *ad = m68k_areg (regs, reg);
break;
case 3:
- *ad = m68k_areg (®s, reg);
+ *ad = m68k_areg (regs, reg);
break;
case 4:
- *ad = m68k_areg (®s, reg);
+ *ad = m68k_areg (regs, reg);
break;
case 5:
- *ad = m68k_areg (®s, reg) + (uae_s32) (uae_s16) next_iword (®s);
+ *ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) next_iword ();
break;
case 6:
- *ad = get_disp_ea_020 (®s, m68k_areg (®s, reg), next_iword (®s));
+ *ad = get_disp_ea_020 (m68k_areg (regs, reg), next_iword ());
break;
case 7:
switch (reg) {
case 0:
- *ad = (uae_s32) (uae_s16) next_iword (®s);
+ *ad = (uae_s32) (uae_s16) next_iword ();
break;
case 1:
- *ad = next_ilong (®s);
+ *ad = next_ilong ();
break;
case 2:
- *ad = m68k_getpc (®s);
- *ad += (uae_s32) (uae_s16) next_iword (®s);
+ *ad = m68k_getpc ();
+ *ad += (uae_s32) (uae_s16) next_iword ();
break;
case 3:
- tmppc = m68k_getpc (®s);
- tmp = next_iword (®s);
- *ad = get_disp_ea_020 (®s, tmppc, tmp);
+ tmppc = m68k_getpc ();
+ tmp = next_iword ();
+ *ad = get_disp_ea_020 (tmppc, tmp);
break;
default:
return 0;
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;
#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;
}
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;
#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;
}
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;
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 */
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) {
}
ad -= incr;
if (extra & 0x1000) {
- put_long (ad, regs->fpcr & 0xffff);
+ put_long (ad, regs.fpcr & 0xffff);
ad += 4;
}
if (extra & 0x0800) {
ad += 4;
}
if (extra & 0x0400) {
- put_long (ad, regs->fpiar);
+ put_long (ad, regs.fpiar);
ad += 4;
}
ad -= incr;
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) {
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) {
ad += 4;
}
if (extra & 0x0400) {
- regs->fpiar = get_long (ad);
+ regs.fpiar = get_long (ad);
ad += 4;
}
if ((opcode & 0x38) == 0x18)
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) {
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;
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);
} 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) {
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;
}
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;
}
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;
}
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);
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;
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)
if (gayle_irq & GAYLE_IRQ_RESET)
uae_reset (0);
if (gayle_irq & GAYLE_IRQ_BERR)
- Exception (2, ®s, 0);
+ Exception (2, 0);
}
}
}
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;
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)
{
count_ncycles++;
}
-static int isreg(amodes mode)
+static int isreg (amodes mode)
{
if (mode == Dreg || mode == Areg)
return 1;
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;
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);
}
}
}
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;
}
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;
}
}
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++;
}
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;
}
}
{
if (!using_prefetch)
return;
- printf ("\tregs->ir = regs->irc;\n");
+ printf ("\tregs.ir = regs.irc;\n");
}
static int did_prefetch;
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;
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++;
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;
{
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;
}
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)) {
}
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:
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);
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");
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;
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);
int i;
for (i = 0; i <= n; i++)
printf ("\t");
- printf ("COPY_CARRY (®s->ccrflags);\n");
+ printf ("COPY_CARRY (®s.ccrflags);\n");
}
typedef enum
switch (type) {
case flag_logical:
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
- printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr);
- printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr);
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr);
+ printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr);
break;
case flag_logical_noclobber:
- printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr);
- printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr);
+ printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr);
break;
case flag_av:
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
break;
case flag_sv:
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
break;
case flag_z:
- printf ("\tSET_ZFLG (®s->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr);
break;
case flag_zn:
- printf ("\tSET_ZFLG (®s->ccrflags, GET_ZFLG (&(regs->ccrflags)) & (%s == 0));\n", vstr);
- printf ("\tSET_NFLG (®s->ccrflags, %s < 0);\n", vstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, GET_ZFLG (&(regs.ccrflags)) & (%s == 0));\n", vstr);
+ printf ("\tSET_NFLG (®s.ccrflags, %s < 0);\n", vstr);
break;
case flag_add:
- printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr);
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
- printf ("\tSET_CFLG (®s->ccrflags, %s < %s);\n", undstr, usstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr);
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n");
+ printf ("\tSET_CFLG (®s.ccrflags, %s < %s);\n", undstr, usstr);
duplicate_carry (0);
- printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n");
+ printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n");
break;
case flag_sub:
- printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr);
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
- printf ("\tSET_CFLG (®s->ccrflags, %s > %s);\n", usstr, udstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr);
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgn ^ flgo));\n");
+ printf ("\tSET_CFLG (®s.ccrflags, %s > %s);\n", usstr, udstr);
duplicate_carry (0);
- printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n");
+ printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n");
break;
case flag_addx:
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */
- printf ("\tSET_CFLG (®s->ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */
+ printf ("\tSET_CFLG (®s.ccrflags, flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */
duplicate_carry (0);
break;
case flag_subx:
- printf ("\tSET_VFLG (®s->ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */
- printf ("\tSET_CFLG (®s->ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */
+ printf ("\tSET_CFLG (®s.ccrflags, flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */
duplicate_carry (0);
break;
case flag_cmp:
- printf ("\tSET_ZFLG (®s->ccrflags, %s == 0);\n", vstr);
- printf ("\tSET_VFLG (®s->ccrflags, (flgs != flgo) && (flgn != flgo));\n");
- printf ("\tSET_CFLG (®s->ccrflags, %s > %s);\n", usstr, udstr);
- printf ("\tSET_NFLG (®s->ccrflags, flgn != 0);\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, %s == 0);\n", vstr);
+ printf ("\tSET_VFLG (®s.ccrflags, (flgs != flgo) && (flgn != flgo));\n");
+ printf ("\tSET_CFLG (®s.ccrflags, %s > %s);\n", usstr, udstr);
+ printf ("\tSET_NFLG (®s.ccrflags, flgn != 0);\n");
break;
}
}
case flag_logical_noclobber:
printf ("\t{uae_u32 oldcznv = GET_CZNV & ~(FLAGVAL_Z | FLAGVAL_N);\n");
if (strcmp (value, "0") == 0) {
- printf ("\tSET_CZNV (®s->ccrflags, olcznv | FLAGVAL_Z);\n");
+ printf ("\tSET_CZNV (®s.ccrflags, olcznv | FLAGVAL_Z);\n");
} else {
switch (size) {
case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break;
case sz_word: printf ("\toptflag_testw (regs, (uae_s16)(%s));\n", value); break;
case sz_long: printf ("\toptflag_testl (regs, (uae_s32)(%s));\n", value); break;
}
- printf ("\tIOR_CZNV (®s->ccrflags, oldcznv);\n");
+ printf ("\tIOR_CZNV (®s.ccrflags, oldcznv);\n");
}
printf ("\t}\n");
return;
case flag_logical:
if (strcmp (value, "0") == 0) {
- printf ("\tSET_CZNV (®s->ccrflags, FLAGVAL_Z);\n");
+ printf ("\tSET_CZNV (®s.ccrflags, FLAGVAL_Z);\n");
} else {
switch (size) {
case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break;
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++;
}
/* 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;
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);
addcycles (2);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u32 newv = dst - src - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u32 newv = dst - src - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
genflags (flag_subx, curi->size, "newv", "src", "dst");
genflags (flag_zn, curi->size, "newv", "", "");
genastore ("newv", curi->dmode, "dstreg", curi->size, "dst");
genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
printf ("\tuae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0);\n");
printf ("\tuae_u16 newv, tmp_newv;\n");
printf ("\tint bcd = 0;\n");
printf ("\tnewv = tmp_newv = newv_hi + newv_lo;\n");
printf ("\tif (newv_lo & 0xF0) { newv -= 6; bcd = 6; };\n");
- printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG (®s->ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n");
- printf ("\tSET_CFLG (®s->ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (®s->ccrflags) ? 1 : 0)) & 0x300) > 0xFF);\n");
+ printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG (®s.ccrflags) ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n");
+ printf ("\tSET_CFLG (®s.ccrflags, (((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG (®s.ccrflags) ? 1 : 0)) & 0x300) > 0xFF);\n");
duplicate_carry (0);
/* Manual says bits NV are undefined though a real 68040/060 don't change them */
if (cpu_level >= xBCD_KEEPS_NV_FLAGS) {
genflags (flag_z, curi->size, "newv", "", "");
} else {
genflags (flag_zn, curi->size, "newv", "", "");
- printf ("\tSET_VFLG (®s->ccrflags, (tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n");
+ printf ("\tSET_VFLG (®s.ccrflags, (tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n");
}
addcycles (2);
genastore ("newv", curi->dmode, "dstreg", curi->size, "dst");
addcycles (2);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u32 newv = dst + src + (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u32 newv = dst + src + (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
genflags (flag_addx, curi->size, "newv", "src", "dst");
genflags (flag_zn, curi->size, "newv", "", "");
genastore ("newv", curi->dmode, "dstreg", curi->size, "dst");
genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
printf ("\tuae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0);\n");
printf ("\tuae_u16 newv, tmp_newv;\n");
printf ("\tint cflg;\n");
printf ("\tif (newv_lo > 9) { newv += 6; }\n");
printf ("\tcflg = (newv & 0x3F0) > 0x90;\n");
printf ("\tif (cflg) newv += 0x60;\n");
- printf ("\tSET_CFLG (®s->ccrflags, cflg);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, cflg);\n");
duplicate_carry (0);
/* Manual says bits NV are undefined though a real 68040 don't change them */
if (cpu_level >= xBCD_KEEPS_NV_FLAGS) {
}
else {
genflags (flag_zn, curi->size, "newv", "", "");
- printf ("\tSET_VFLG (®s->ccrflags, (tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n");
+ printf ("\tSET_VFLG (®s.ccrflags, (tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n");
}
addcycles (2);
genastore ("newv", curi->dmode, "dstreg", curi->size, "dst");
addcycles (2);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u32 newv = 0 - src - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u32 newv = 0 - src - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
genflags (flag_subx, curi->size, "newv", "src", "0");
genflags (flag_zn, curi->size, "newv", "", "");
genastore_rev ("newv", curi->smode, "srcreg", curi->size, "src");
addcycles (2);
fill_prefetch_next ();
start_brace ();
- printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG (®s->ccrflags) ? 1 : 0);\n");
+ printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG (®s.ccrflags) ? 1 : 0);\n");
printf ("\tuae_u16 newv_hi = - (src & 0xF0);\n");
printf ("\tuae_u16 newv;\n");
printf ("\tint cflg;\n");
printf ("\tnewv = newv_hi + newv_lo;");
printf ("\tcflg = (newv & 0x1F0) > 0x90;\n");
printf ("\tif (cflg) newv -= 0x60;\n");
- printf ("\tSET_CFLG (®s->ccrflags, cflg);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, cflg);\n");
duplicate_carry(0);
/* Manual says bits NV are undefined though a real 68040 don't change them */
if (cpu_level >= xBCD_KEEPS_NV_FLAGS) {
genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0);
fill_prefetch_next ();
bsetcycles (curi);
- printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n");
break;
case i_BCHG:
case i_BCLR:
fill_prefetch_next ();
if (curi->mnemo == i_BCHG) {
printf ("\tdst ^= (1 << src);\n");
- printf ("\tSET_ZFLG (®s->ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, ((uae_u32)dst & (1 << src)) >> src);\n");
} else if (curi->mnemo == i_BCLR) {
- printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n");
printf ("\tdst &= ~(1 << src);\n");
} else if (curi->mnemo == i_BSET) {
- printf ("\tSET_ZFLG (®s->ccrflags, 1 ^ ((dst >> src) & 1));\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, 1 ^ ((dst >> src) & 1));\n");
printf ("\tdst |= (1 << src);\n");
}
genastore ("dst", curi->dmode, "dstreg", curi->size, "dst");
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);
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 ();
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)
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. */
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 ();
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 ();
case i_TRAPV:
sync_m68k_pc ();
fill_prefetch_next ();
- printf ("\tif (GET_VFLG (®s->ccrflags)) {\n");
- printf ("\t\tException (7, regs, m68k_getpc (regs));\n");
+ printf ("\tif (GET_VFLG (®s.ccrflags)) {\n");
+ printf ("\t\tException (7, m68k_getpc ());\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
need_endlabel = 1;
break;
case i_RTR:
- printf ("\tMakeSR (regs);\n");
+ printf ("\tMakeSR ();\n");
genamode (Aipi, "7", sz_word, "sr", 1, 0, 0);
genamode (Aipi, "7", sz_long, "pc", 1, 0, 0);
- printf ("\tregs->sr &= 0xFF00; sr &= 0xFF;\n");
- printf ("\tregs->sr |= sr; m68k_setpc (regs, pc);\n");
- printf ("\tMakeFromSR (regs);\n");
+ printf ("\tregs.sr &= 0xFF00; sr &= 0xFF;\n");
+ printf ("\tregs.sr |= sr; m68k_setpc (pc);\n");
+ printf ("\tMakeFromSR ();\n");
m68k_pc_offset = 0;
fill_prefetch_full ();
break;
case i_JSR: // TODO: check stack write order
genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA|GF_NOREFILL);
start_brace ();
- printf ("\tuaecptr oldpc = m68k_getpc (regs) + %d;\n", m68k_pc_offset);
+ printf ("\tuaecptr oldpc = m68k_getpc () + %d;\n", m68k_pc_offset);
if (using_exception_3) {
printf ("\tif (srca & 1) {\n");
printf ("\t\texception3i (opcode, oldpc, srca);\n");
}
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)
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;
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;
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 ();
if (curi->size == sz_long) {
if (cpu_level < 2) {
addcycles (2);
- printf ("\tif (cctrue(®s->ccrflags, %d)) {\n", curi->cc, endlabelstr);
- printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 1);\n");
+ printf ("\tif (cctrue (®s.ccrflags, %d)) {\n", curi->cc, endlabelstr);
+ printf ("\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 1);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
sync_m68k_pc ();
}
genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL);
addcycles (2);
- printf ("\tif (!cctrue(®s->ccrflags, %d)) goto didnt_jump;\n", curi->cc);
+ printf ("\tif (!cctrue (®s.ccrflags, %d)) goto didnt_jump;\n", curi->cc);
if (using_exception_3) {
printf ("\tif (src & 1) {\n");
- printf ("\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 2 + (uae_s32)src);\n");
+ printf ("\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 2 + (uae_s32)src);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
need_endlabel = 1;
}
if (using_prefetch) {
if (curi->size == sz_byte) {
- printf ("\tm68k_incpc (regs, (uae_s32)src + 2);\n");
+ printf ("\tm68k_incpc ((uae_s32)src + 2);\n");
} else {
- printf ("\tm68k_incpc (regs, (uae_s32)src + 2);\n");
+ printf ("\tm68k_incpc ((uae_s32)src + 2);\n");
}
fill_prefetch_full ();
if (using_ce)
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");
case i_DBcc:
genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL);
genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0, GF_AA | GF_NOREFILL);
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
addcycles (2);
- printf ("\tif (!cctrue(®s->ccrflags, %d)) {\n", curi->cc);
- printf ("\t\tm68k_incpc (regs, (uae_s32)offs + 2);\n");
+ printf ("\tif (!cctrue (®s.ccrflags, %d)) {\n", curi->cc);
+ printf ("\t\tm68k_incpc ((uae_s32)offs + 2);\n");
printf ("\t"); fill_prefetch_1 (0);
- printf ("\t"); genastore ("(src-1)", curi->smode, "srcreg", curi->size, "src");
+ printf ("\t"); genastore ("(src - 1)", curi->smode, "srcreg", curi->size, "src");
printf ("\t\tif (src) {\n");
if (using_exception_3) {
printf ("\t\t\tif (offs & 1) {\n");
- printf ("\t\t\t\texception3i (opcode, m68k_getpc (regs) + 2, m68k_getpc (regs) + 2 + (uae_s32)offs + 2);\n");
+ printf ("\t\t\t\texception3i (opcode, m68k_getpc () + 2, m68k_getpc () + 2 + (uae_s32)offs + 2);\n");
printf ("\t\t\t\tgoto %s;\n", endlabelstr);
printf ("\t\t\t}\n");
need_endlabel = 1;
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;
start_brace ();
fill_prefetch_next();
start_brace ();
- printf ("\tint val = cctrue(®s->ccrflags, %d) ? 0xff : 0;\n", curi->cc);
+ printf ("\tint val = cctrue (®s.ccrflags, %d) ? 0xff : 0;\n", curi->cc);
if (using_ce) {
printf ("\tint cycles = 0;\n");
if (isreg (curi->smode))
genastore ("val", curi->smode, "srcreg", curi->size, "src");
break;
case i_DIVU:
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0);
genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0);
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (src == 0) {\n");
if (cpu_level > 0) {
/* 68020 sets V when dividing by zero and N if dst is negative
* 68000 clears both
*/
- printf("\t\tSET_VFLG (®s->ccrflags, 1);\n");
- printf("\t\tif (dst < 0) SET_NFLG (®s->ccrflags, 1);\n");
+ printf("\t\tSET_VFLG (®s.ccrflags, 1);\n");
+ printf("\t\tif (dst < 0) SET_NFLG (®s.ccrflags, 1);\n");
}
- printf ("\t\tm68k_incpc (regs, %d);\n", m68k_pc_offset);
- printf ("\t\tException (5, regs, oldpc);\n");
+ printf ("\t\tm68k_incpc (%d);\n", m68k_pc_offset);
+ printf ("\t\tException (5, oldpc);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t} else {\n");
printf ("\t\tuae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src;\n");
/* The N flag appears to be set each time there is an overflow.
* Weird. but 68020 only sets N when dst is negative.. */
printf ("\t\tif (newv > 0xffff) {\n");
- printf ("\t\t\tSET_VFLG (®s->ccrflags, 1);\n");
+ printf ("\t\t\tSET_VFLG (®s.ccrflags, 1);\n");
#ifdef UNDEF68020
if (cpu_level >= 2)
printf ("\t\t\tif (currprefs.cpu_level == 0 || dst < 0) SET_NFLG (®s, 1);\n");
else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */
#endif
- printf ("\t\t\tSET_NFLG (®s->ccrflags, 1);\n");
+ printf ("\t\t\tSET_NFLG (®s.ccrflags, 1);\n");
printf ("\t\t} else {\n");
printf ("\t\t"); genflags (flag_logical, sz_word, "newv", "", "");
printf ("\t\t\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n");
need_endlabel = 1;
break;
case i_DIVS:
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0);
genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0);
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (src == 0) {\n");
if (cpu_level > 0) {
/* 68020 sets V when dividing by zero. Z is also set.
* 68000 clears both
*/
- printf("\t\tSET_VFLG (®s->ccrflags, 1);\n");
- printf("\t\tSET_ZFLG (®s->ccrflags, 1);\n");
+ printf("\t\tSET_VFLG (®s.ccrflags, 1);\n");
+ printf("\t\tSET_ZFLG (®s.ccrflags, 1);\n");
}
- printf ("\t\tm68k_incpc (regs, %d);\n", m68k_pc_offset);
- printf ("\t\tException (5, regs, oldpc);\n");
+ printf ("\t\tm68k_incpc (%d);\n", m68k_pc_offset);
+ printf ("\t\tException (5, oldpc);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t} else {\n");
printf ("\t\tuae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src;\n");
addcycles3 ("\t\t");
}
printf ("\t\tif ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) {\n");
- printf ("\t\t\tSET_VFLG (®s->ccrflags, 1);\n");
+ printf ("\t\t\tSET_VFLG (®s.ccrflags, 1);\n");
#ifdef UNDEF68020
if (cpu_level > 0)
printf ("\t\t\tif (currprefs.cpu_level == 0) SET_NFLG (®s, 1);\n");
else
#endif
- printf ("\t\t\tSET_NFLG (®s->ccrflags, 1);\n");
+ printf ("\t\t\tSET_NFLG (®s.ccrflags, 1);\n");
printf ("\t\t} else {\n");
printf ("\t\t\tif (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem;\n");
genflags (flag_logical, sz_word, "newv", "", "");
insn_n_cycles += (70 - 38) / 2 + 38; /* average */
break;
case i_CHK:
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0);
sync_m68k_pc ();
addcycles (4);
printf ("\tif (dst > src) {\n");
- printf ("\t\tSET_NFLG (®s->ccrflags, 0);\n");
- printf ("\t\tException (6, regs, oldpc);\n");
+ printf ("\t\tSET_NFLG (®s.ccrflags, 0);\n");
+ printf ("\t\tException (6, oldpc);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
addcycles (2);
printf ("\tif ((uae_s32)dst < 0) {\n");
- printf ("\t\tSET_NFLG (®s->ccrflags, 1);\n");
- printf ("\t\tException (6, regs, oldpc);\n");
+ printf ("\t\tSET_NFLG (®s.ccrflags, 1);\n");
+ printf ("\t\tException (6, oldpc);\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
fill_prefetch_next ();
need_endlabel = 1;
break;
case i_CHK2:
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0);
fill_prefetch_0 ();
- printf ("\t{uae_s32 upper,lower,reg = regs->regs[(extra >> 12) & 15];\n");
+ printf ("\t{uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15];\n");
switch (curi->size) {
case sz_byte:
printf ("\tlower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta+1);\n");
default:
abort ();
}
- printf ("\tSET_ZFLG (®s->ccrflags, upper == reg || lower == reg);\n");
- printf ("\tSET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n");
- printf ("\tif ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception (6, regs, oldpc); goto %s; }\n}\n", endlabelstr);
+ printf ("\tSET_ZFLG (®s.ccrflags, upper == reg || lower == reg);\n");
+ printf ("\tSET_CFLG_ALWAYS (®s.ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n");
+ printf ("\tif ((extra & 0x800) && GET_CFLG (®s.ccrflags)) { Exception (6, oldpc); goto %s; }\n}\n", endlabelstr);
need_endlabel = 1;
break;
printf ("\tuae_u32 sign = (%s & val) >> %d;\n", cmask (curi->size), bit_size (curi->size) - 1);
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
printf ("\t\tval = %s & (uae_u32)-sign;\n", bit_mask (curi->size));
- printf ("\t\tSET_CFLG (®s->ccrflags, sign);\n");
+ printf ("\t\tSET_CFLG (®s.ccrflags, sign);\n");
duplicate_carry (1);
if (source_is_imm1_8 (curi))
printf ("\t} else {\n");
else
printf ("\t} else if (cnt > 0) {\n");
printf ("\t\tval >>= cnt - 1;\n");
- printf ("\t\tSET_CFLG (®s->ccrflags, val & 1);\n");
+ printf ("\t\tSET_CFLG (®s.ccrflags, val & 1);\n");
duplicate_carry (1);
printf ("\t\tval >>= 1;\n");
printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)-sign;\n",
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
- printf ("\t\tSET_VFLG (®s->ccrflags, val != 0);\n");
- printf ("\t\tSET_CFLG (®s->ccrflags, cnt == %d ? val & 1 : 0);\n",
+ printf ("\t\tSET_VFLG (®s.ccrflags, val != 0);\n");
+ printf ("\t\tSET_CFLG (®s.ccrflags, cnt == %d ? val & 1 : 0);\n",
bit_size (curi->size));
duplicate_carry (1);
printf ("\t\tval = 0;\n");
bit_mask (curi->size),
bit_size (curi->size) - 1,
bit_mask (curi->size));
- printf ("\t\tSET_VFLG (®s->ccrflags, (val & mask) != mask && (val & mask) != 0);\n");
+ printf ("\t\tSET_VFLG (®s.ccrflags, (val & mask) != mask && (val & mask) != 0);\n");
printf ("\t\tval <<= cnt - 1;\n");
- printf ("\t\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+ printf ("\t\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
duplicate_carry (1);
printf ("\t\tval <<= 1;\n");
printf ("\t\tval &= %s;\n", bit_mask (curi->size));
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
- printf ("\t\tSET_CFLG (®s->ccrflags, (cnt == %d) & (val >> %d));\n",
+ printf ("\t\tSET_CFLG (®s.ccrflags, (cnt == %d) & (val >> %d));\n",
bit_size (curi->size), bit_size (curi->size) - 1);
duplicate_carry (1);
printf ("\t\tval = 0;\n");
else
printf ("\t} else if (cnt > 0) {\n");
printf ("\t\tval >>= cnt - 1;\n");
- printf ("\t\tSET_CFLG (®s->ccrflags, val & 1);\n");
+ printf ("\t\tSET_CFLG (®s.ccrflags, val & 1);\n");
duplicate_carry (1);
printf ("\t\tval >>= 1;\n");
printf ("\t}\n");
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
- printf ("\t\tSET_CFLG (®s->ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size));
+ printf ("\t\tSET_CFLG (®s.ccrflags, cnt == %d ? val & 1 : 0);\n", bit_size (curi->size));
duplicate_carry (1);
printf ("\t\tval = 0;\n");
if (source_is_imm1_8 (curi))
else
printf ("\t} else if (cnt > 0) {\n");
printf ("\t\tval <<= (cnt - 1);\n");
- printf ("\t\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+ printf ("\t\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
duplicate_carry (1);
printf ("\t\tval <<= 1;\n");
printf ("\tval &= %s;\n", bit_mask (curi->size));
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
if (source_is_imm1_8 (curi))
printf ("{");
else
printf ("\tval <<= cnt;\n");
printf ("\tval |= loval;\n");
printf ("\tval &= %s;\n", bit_mask (curi->size));
- printf ("\tSET_CFLG (®s->ccrflags, val & 1);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, val & 1);\n");
printf ("}\n");
genflags (flag_logical_noclobber, curi->size, "val", "", "");
shift_ce (curi->dmode, curi->size);
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
if (source_is_imm1_8 (curi))
printf ("{");
else
printf ("\tval >>= cnt;\n");
printf ("\tval |= hival;\n");
printf ("\tval &= %s;\n", bit_mask (curi->size));
- printf ("\tSET_CFLG (®s->ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
+ printf ("\tSET_CFLG (®s.ccrflags, (val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1);
printf ("\t}\n");
genflags (flag_logical_noclobber, curi->size, "val", "", "");
shift_ce (curi->dmode, curi->size);
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
if (source_is_imm1_8 (curi))
printf ("{");
else {
printf ("\t{\n\tuae_u32 carry;\n");
printf ("\tuae_u32 loval = val >> (%d - cnt);\n", bit_size (curi->size) - 1);
printf ("\tcarry = loval & 1;\n");
- printf ("\tval = (((val << 1) | GET_XFLG (®s->ccrflags)) << cnt) | (loval >> 1);\n");
- printf ("\tSET_XFLG (®s->ccrflags, carry);\n");
+ printf ("\tval = (((val << 1) | GET_XFLG (®s.ccrflags)) << cnt) | (loval >> 1);\n");
+ printf ("\tSET_XFLG (®s.ccrflags, carry);\n");
printf ("\tval &= %s;\n", bit_mask (curi->size));
printf ("\t} }\n");
- printf ("\tSET_CFLG (®s->ccrflags, GET_XFLG (®s->ccrflags));\n");
+ printf ("\tSET_CFLG (®s.ccrflags, GET_XFLG (®s.ccrflags));\n");
genflags (flag_logical_noclobber, curi->size, "val", "", "");
shift_ce (curi->dmode, curi->size);
genastore ("val", curi->dmode, "dstreg", curi->size, "data");
}
printf ("\tint ccnt = cnt & 63;\n");
printf ("\tcnt &= 63;\n");
- printf ("\tCLEAR_CZNV (®s->ccrflags);\n");
+ printf ("\tCLEAR_CZNV (®s.ccrflags);\n");
if (source_is_imm1_8 (curi))
printf ("{");
else {
}
printf ("\tcnt--;\n");
printf ("\t{\n\tuae_u32 carry;\n");
- printf ("\tuae_u32 hival = (val << 1) | GET_XFLG (®s->ccrflags);\n");
+ printf ("\tuae_u32 hival = (val << 1) | GET_XFLG (®s.ccrflags);\n");
printf ("\thival <<= (%d - cnt);\n", bit_size (curi->size) - 1);
printf ("\tval >>= cnt;\n");
printf ("\tcarry = val & 1;\n");
printf ("\tval >>= 1;\n");
printf ("\tval |= hival;\n");
- printf ("\tSET_XFLG (®s->ccrflags, carry);\n");
+ printf ("\tSET_XFLG (®s.ccrflags, carry);\n");
printf ("\tval &= %s;\n", bit_mask (curi->size));
printf ("\t} }\n");
- printf ("\tSET_CFLG (®s->ccrflags, GET_XFLG (®s->ccrflags));\n");
+ printf ("\tSET_CFLG (®s.ccrflags, GET_XFLG (®s.ccrflags));\n");
genflags (flag_logical_noclobber, curi->size, "val", "", "");
shift_ce (curi->dmode, curi->size);
genastore ("val", curi->dmode, "dstreg", curi->size, "data");
printf ("\tuae_u32 cflg = val & 1;\n");
printf ("\tval = (val >> 1) | sign;\n");
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, cflg);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, cflg);\n");
duplicate_carry (0);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
printf ("\tval <<= 1;\n");
genflags (flag_logical, curi->size, "val", "", "");
printf ("\tsign2 = %s & val;\n", cmask (curi->size));
- printf ("\tSET_CFLG (®s->ccrflags, sign != 0);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, sign != 0);\n");
duplicate_carry (0);
- printf ("\tSET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign));\n");
+ printf ("\tSET_VFLG (®s.ccrflags, GET_VFLG (®s.ccrflags) | (sign2 != sign));\n");
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
case i_LSRW:
printf ("\tuae_u32 carry = val & 1;\n");
printf ("\tval >>= 1;\n");
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, carry);\n");
duplicate_carry (0);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size));
printf ("\tval <<= 1;\n");
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+ printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
duplicate_carry (0);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
printf ("\tval <<= 1;\n");
printf ("\tif (carry) val |= 1;\n");
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+ printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
case i_RORW:
printf ("\tval >>= 1;\n");
printf ("\tif (carry) val |= %s;\n", cmask (curi->size));
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, carry);\n");
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
case i_ROXLW:
}
printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size));
printf ("\tval <<= 1;\n");
- printf ("\tif (GET_XFLG (®s->ccrflags)) val |= 1;\n");
+ printf ("\tif (GET_XFLG (®s.ccrflags)) val |= 1;\n");
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
+ printf ("\tSET_CFLG (®s.ccrflags, carry >> %d);\n", bit_size (curi->size) - 1);
duplicate_carry (0);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
}
printf ("\tuae_u32 carry = val & 1;\n");
printf ("\tval >>= 1;\n");
- printf ("\tif (GET_XFLG (®s->ccrflags)) val |= %s;\n", cmask (curi->size));
+ printf ("\tif (GET_XFLG (®s.ccrflags)) val |= %s;\n", cmask (curi->size));
genflags (flag_logical, curi->size, "val", "", "");
- printf ("\tSET_CFLG (®s->ccrflags, carry);\n");
+ printf ("\tSET_CFLG (®s.ccrflags, carry);\n");
duplicate_carry (0);
genastore ("val", curi->smode, "srcreg", curi->size, "data");
break;
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:
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:
printf ("\tint ru = (src >> 6) & 7;\n");
printf ("\tint rc = src & 7;\n");
genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, rc)", "dst");
- printf ("\tif (GET_ZFLG (®s->ccrflags))");
+ printf ("\tif (GET_ZFLG (®s.ccrflags))");
old_brace_level = n_braces;
start_brace ();
genastore ("(m68k_dreg (regs, ru))", curi->dmode, "dstreg", curi->size, "dst");
break;
case i_CAS2:
genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0);
- printf ("\tuae_u32 rn1 = regs->regs[(extra >> 28) & 15];\n");
- printf ("\tuae_u32 rn2 = regs->regs[(extra >> 12) & 15];\n");
+ printf ("\tuae_u32 rn1 = regs.regs[(extra >> 28) & 15];\n");
+ printf ("\tuae_u32 rn2 = regs.regs[(extra >> 12) & 15];\n");
if (curi->size == sz_word) {
int old_brace_level = n_braces;
printf ("\tuae_u16 dst1 = get_word (rn1), dst2 = get_word (rn2);\n");
genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1");
- printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n");
genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2");
- printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n");
printf ("\tput_word (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n");
printf ("\tput_word (rn1, m68k_dreg (regs, (extra >> 6) & 7));\n");
printf ("\t}}\n");
pop_braces (old_brace_level);
- printf ("\tif (! GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (! GET_ZFLG (®s.ccrflags)) {\n");
printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff);\n");
printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff);\n");
printf ("\t}\n");
int old_brace_level = n_braces;
printf ("\tuae_u32 dst1 = get_long (rn1), dst2 = get_long (rn2);\n");
genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1");
- printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n");
genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2");
- printf ("\tif (GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (GET_ZFLG (®s.ccrflags)) {\n");
printf ("\tput_long (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n");
printf ("\tput_long (rn1, m68k_dreg (regs, (extra >> 6) & 7));\n");
printf ("\t}}\n");
pop_braces (old_brace_level);
- printf ("\tif (! GET_ZFLG (®s->ccrflags)) {\n");
+ printf ("\tif (! GET_ZFLG (®s.ccrflags)) {\n");
printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = dst1;\n");
printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = dst2;\n");
printf ("\t}\n");
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);
break;
case i_BKPT: /* only needed for hardware emulators */
sync_m68k_pc ();
- printf ("\top_illg (opcode, regs);\n");
+ printf ("\top_illg (opcode);\n");
break;
case i_CALLM: /* not present in 68030 */
sync_m68k_pc ();
- printf ("\top_illg (opcode, regs);\n");
+ printf ("\top_illg (opcode);\n");
break;
case i_RTM: /* not present in 68030 */
sync_m68k_pc ();
- printf ("\top_illg (opcode, regs);\n");
+ printf ("\top_illg (opcode);\n");
break;
case i_TRAPcc:
if (curi->smode != am_unknown && curi->smode != am_illg)
genamode (curi->smode, "srcreg", curi->size, "dummy", 1, 0, 0);
fill_prefetch_0 ();
- printf ("\tif (cctrue(®s->ccrflags, %d)) { Exception (7, regs, m68k_getpc (regs)); goto %s; }\n", curi->cc, endlabelstr);
+ printf ("\tif (cctrue (®s.ccrflags, %d)) { Exception (7, m68k_getpc ()); goto %s; }\n", curi->cc, endlabelstr);
need_endlabel = 1;
break;
case i_DIVL:
sync_m68k_pc ();
start_brace ();
- printf ("\tuaecptr oldpc = m68k_getpc (regs);\n");
+ printf ("\tuaecptr oldpc = m68k_getpc ();\n");
genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0);
sync_m68k_pc ();
printf ("\ttmp = (bf0 << (offset & 7)) | (bf1 >> (8 - (offset & 7)));\n");
}
printf ("\ttmp >>= (32 - width);\n");
- printf ("\tSET_NFLG_ALWAYS (®s->ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n");
- printf ("\tSET_ZFLG (®s->ccrflags, tmp == 0); SET_VFLG (®s->ccrflags, 0); SET_CFLG (®s->ccrflags, 0);\n");
+ printf ("\tSET_NFLG_ALWAYS (®s.ccrflags, tmp & (1 << (width-1)) ? 1 : 0);\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, tmp == 0); SET_VFLG (®s.ccrflags, 0); SET_CFLG (®s.ccrflags, 0);\n");
switch (curi->mnemo) {
case i_BFTST:
break;
printf ("\ttmp = ~tmp;\n");
break;
case i_BFEXTS:
- printf ("\tif (GET_NFLG (®s->ccrflags)) tmp |= width == 32 ? 0 : (-1 << width);\n");
+ printf ("\tif (GET_NFLG (®s.ccrflags)) tmp |= width == 32 ? 0 : (-1 << width);\n");
printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = tmp;\n");
break;
case i_BFCLR:
break;
case i_BFINS:
printf ("\ttmp = m68k_dreg (regs, (extra >> 12) & 7);\n");
- printf ("\tSET_NFLG (®s->ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n");
- printf ("\tSET_ZFLG (®s->ccrflags, tmp == 0);\n");
+ printf ("\tSET_NFLG (®s.ccrflags, tmp & (1 << (width - 1)) ? 1 : 0);\n");
+ printf ("\tSET_ZFLG (®s.ccrflags, tmp == 0);\n");
break;
default:
break;
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:
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 ();
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;
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;
generate_includes (stdout);
}
using_mmu = 0;
+ using_prefetch = 0;
+ using_ce = 0;
cpu_level = 5 - i;
if (i == 11 || i == 12) {
cpu_level = 0;
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");
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);
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);
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;
}
}
} 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;
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];
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];
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));
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;
-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)
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;
}
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;
}
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;
wait_cpu_cycle_write (addr, 0, v);
return;
case CE_MEMBANK_FAST:
+ case CE_MEMBANK_FAST16BIT:
do_cycles_ce (4 * CYCLE_UNIT / 2);
break;
}
return;
break;
case CE_MEMBANK_FAST:
+ case CE_MEMBANK_FAST16BIT:
do_cycles_ce (4 * CYCLE_UNIT / 2);
break;
}
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;
}
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
#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;
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);
}
/*
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;
};
#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;
uae_u16 irc, ir;
uae_u32 spcflags;
+
+ uae_u32 prefetch020;
+ uae_u32 prefetch020pc;
+ uae_u32 prefetch020ptr;
uaecptr usp, isp, msp;
uae_u16 sr;
extern int mmu_enabled, mmu_triggered;
extern int cpu_cycles;
-STATIC_INLINE void set_special (struct regstruct *regs, uae_u32 x)
+STATIC_INLINE void set_special (uae_u32 x)
{
- regs->spcflags |= x;
+ regs.spcflags |= x;
cycles_do_special ();
}
-STATIC_INLINE void unset_special (struct regstruct *regs, uae_u32 x)
+STATIC_INLINE void unset_special (uae_u32 x)
{
- regs->spcflags &= ~x;
+ regs.spcflags &= ~x;
}
-#define m68k_dreg(r,num) ((r)->regs[(num)])
-#define m68k_areg(r,num) (((r)->regs + 8)[(num)])
+#define m68k_dreg(r,num) ((r).regs[(num)])
+#define m68k_areg(r,num) (((r).regs + 8)[(num)])
-STATIC_INLINE void m68k_setpc (struct regstruct *regs, uaecptr newpc)
+STATIC_INLINE void m68k_setpc (uaecptr newpc)
{
- regs->pc_p = regs->pc_oldp = get_real_address (newpc);
- regs->pc = newpc;
+ regs.pc_p = regs.pc_oldp = get_real_address (newpc);
+ regs.pc = newpc;
}
-STATIC_INLINE uaecptr m68k_getpc (struct regstruct *regs)
+STATIC_INLINE uaecptr m68k_getpc (void)
{
- return (uaecptr)(regs->pc + ((uae_u8*)regs->pc_p - (uae_u8*)regs->pc_oldp));
+ return (uaecptr)(regs.pc + ((uae_u8*)regs.pc_p - (uae_u8*)regs.pc_oldp));
}
-#define M68K_GETPC m68k_getpc(®s)
+#define M68K_GETPC m68k_getpc()
-STATIC_INLINE uaecptr m68k_getpc_p (struct regstruct *regs, uae_u8 *p)
+STATIC_INLINE uaecptr m68k_getpc_p (uae_u8 *p)
{
- return (uaecptr)(regs->pc + ((uae_u8*)p - (uae_u8*)regs->pc_oldp));
+ return (uaecptr)(regs.pc + ((uae_u8*)p - (uae_u8*)regs.pc_oldp));
}
-#define m68k_incpc(regs, o) ((regs)->pc_p += (o))
+#define m68k_incpc(o) ((regs).pc_p += (o))
-STATIC_INLINE void m68k_setpci(struct regstruct *regs, uaecptr newpc)
+STATIC_INLINE void m68k_setpci (uaecptr newpc)
{
- regs->pc = newpc;
+ regs.pc = newpc;
}
-STATIC_INLINE uaecptr m68k_getpci(struct regstruct *regs)
+STATIC_INLINE uaecptr m68k_getpci (void)
{
- return regs->pc;
+ return regs.pc;
}
-STATIC_INLINE void m68k_incpci(struct regstruct *regs, int o)
+STATIC_INLINE void m68k_incpci (int o)
{
- regs->pc += o;
+ regs.pc += o;
}
-STATIC_INLINE void m68k_do_rts(struct regstruct *regs)
+STATIC_INLINE void m68k_do_rts (void)
{
- m68k_setpc(regs, get_long(m68k_areg (regs, 7)));
+ m68k_setpc (get_long(m68k_areg (regs, 7)));
m68k_areg (regs, 7) += 4;
}
-STATIC_INLINE void m68k_do_rtsi(struct regstruct *regs)
+STATIC_INLINE void m68k_do_rtsi (void)
{
- m68k_setpci(regs, get_long(m68k_areg (regs, 7)));
+ m68k_setpci (get_long (m68k_areg (regs, 7)));
m68k_areg (regs, 7) += 4;
}
-STATIC_INLINE void m68k_do_bsr(struct regstruct *regs, uaecptr oldpc, uae_s32 offset)
+STATIC_INLINE void m68k_do_bsr (uaecptr oldpc, uae_s32 offset)
{
m68k_areg (regs, 7) -= 4;
- put_long(m68k_areg (regs, 7), oldpc);
- m68k_incpc(regs, offset);
+ put_long (m68k_areg (regs, 7), oldpc);
+ m68k_incpc (offset);
}
-STATIC_INLINE void m68k_do_bsri(struct regstruct *regs, uaecptr oldpc, uae_s32 offset)
+STATIC_INLINE void m68k_do_bsri (uaecptr oldpc, uae_s32 offset)
{
m68k_areg (regs, 7) -= 4;
- put_long(m68k_areg (regs, 7), oldpc);
- m68k_incpci(regs, offset);
+ put_long (m68k_areg (regs, 7), oldpc);
+ m68k_incpci (offset);
}
-STATIC_INLINE void m68k_do_jsr(struct regstruct *regs, uaecptr oldpc, uaecptr dest)
+STATIC_INLINE void m68k_do_jsr (uaecptr oldpc, uaecptr dest)
{
m68k_areg (regs, 7) -= 4;
put_long(m68k_areg (regs, 7), oldpc);
- m68k_setpc(regs, dest);
+ m68k_setpc (dest);
}
-#define get_ibyte(regs, o) do_get_mem_byte((uae_u8 *)((regs)->pc_p + (o) + 1))
-#define get_iword(regs, o) do_get_mem_word((uae_u16 *)((regs)->pc_p + (o)))
-#define get_ilong(regs, o) do_get_mem_long((uae_u32 *)((regs)->pc_p + (o)))
+#define get_ibyte(o) do_get_mem_byte((uae_u8 *)((regs).pc_p + (o) + 1))
+#define get_iword(o) do_get_mem_word((uae_u16 *)((regs).pc_p + (o)))
+#define get_ilong(o) do_get_mem_long((uae_u32 *)((regs).pc_p + (o)))
#define get_iwordi(o) get_wordi(o)
#define get_ilongi(o) get_longi(o)
/* These are only used by the 68020/68881 code, and therefore don't
* need to handle prefetch. */
-STATIC_INLINE uae_u32 next_ibyte (struct regstruct *regs)
+STATIC_INLINE uae_u32 next_ibyte (void)
{
- uae_u32 r = get_ibyte (regs, 0);
- m68k_incpc (regs, 2);
+ uae_u32 r = get_ibyte (0);
+ m68k_incpc (2);
return r;
}
-
-STATIC_INLINE uae_u32 next_iword (struct regstruct *regs)
+STATIC_INLINE uae_u32 next_iword (void)
{
- uae_u32 r = get_iword (regs, 0);
- m68k_incpc (regs, 2);
+ uae_u32 r = get_iword (0);
+ m68k_incpc (2);
return r;
}
-STATIC_INLINE uae_u32 next_iwordi (struct regstruct *regs)
+STATIC_INLINE uae_u32 next_iwordi (void)
{
- uae_u32 r = get_iwordi (m68k_getpci(regs));
- m68k_incpc (regs, 2);
+ uae_u32 r = get_iwordi (m68k_getpci ());
+ m68k_incpc (2);
return r;
}
-
-STATIC_INLINE uae_u32 next_ilong (struct regstruct *regs)
+STATIC_INLINE uae_u32 next_ilong (void)
{
- uae_u32 r = get_ilong (regs, 0);
- m68k_incpc (regs, 4);
+ uae_u32 r = get_ilong (0);
+ m68k_incpc (4);
return r;
}
-STATIC_INLINE uae_u32 next_ilongi (struct regstruct *regs)
+STATIC_INLINE uae_u32 next_ilongi (void)
{
- uae_u32 r = get_ilongi (m68k_getpci(regs));
- m68k_incpc (regs, 4);
+ uae_u32 r = get_ilongi (m68k_getpci ());
+ m68k_incpc (4);
return r;
}
-extern void m68k_setstopped (struct regstruct *regs);
-extern void m68k_resumestopped (struct regstruct *regs);
+extern void m68k_setstopped (void);
+extern void m68k_resumestopped (void);
-extern uae_u32 REGPARAM3 get_disp_ea_020 (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM;
-extern uae_u32 REGPARAM3 get_disp_ea_020i (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM;
-extern uae_u32 REGPARAM3 get_disp_ea_000 (struct regstruct *regs, uae_u32 base, uae_u32 dp) REGPARAM;
+extern uae_u32 REGPARAM3 get_disp_ea_020 (uae_u32 base, uae_u32 dp) REGPARAM;
+extern uae_u32 REGPARAM3 get_disp_ea_020ce (uae_u32 base, uae_u32 dp) REGPARAM;
+extern uae_u32 REGPARAM3 get_disp_ea_000 (uae_u32 base, uae_u32 dp) REGPARAM;
extern void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr);
extern void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt);
extern void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode);
extern int get_cpu_model(void);
-extern void REGPARAM3 MakeSR (struct regstruct *regs) REGPARAM;
-extern void REGPARAM3 MakeFromSR (struct regstruct *regs) REGPARAM;
-extern void REGPARAM3 Exception (int, struct regstruct *regs, uaecptr) REGPARAM;
+extern void REGPARAM3 MakeSR (void) REGPARAM;
+extern void REGPARAM3 MakeFromSR (void) REGPARAM;
+extern void REGPARAM3 Exception (int, uaecptr) REGPARAM;
extern void NMI (void);
extern void NMI_delayed (void);
extern void prepare_interrupt (void);
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*);
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
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)
/*
* Data passed to a trap handler
*/
-typedef struct TrapContext
-{
- struct regstruct regs;
-} TrapContext;
+typedef struct TrapContext TrapContext;
#define TRAPFLAG_NO_REGSAVE 1
/*
* 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);
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
else {
abort();
if (!comp_fp_adr (opcode)) {
- m68k_setpc (®s, m68k_getpc (®s) - 4);
- op_illg (opcode, ®s);
+ m68k_setpc (m68k_getpc () - 4);
+ op_illg (opcode);
}
else
put_byte (ad, cc ? 0xff : 0x00);
}
ad=comp_fp_adr (opcode);
if (ad<0) {
- m68k_setpc (®s, m68k_getpc (®s) - 4);
- op_illg (opcode, ®s);
+ m68k_setpc (m68k_getpc () - 4);
+ op_illg (opcode);
return;
}
switch ((extra >> 11) & 3) {
}
ad=comp_fp_adr (opcode);
if (ad<0) {
- m68k_setpc (®s, m68k_getpc (®s) - 4);
- op_illg (opcode, ®s);
+ m68k_setpc (m68k_getpc () - 4);
+ op_illg (opcode);
return;
}
switch ((extra >> 11) & 3) {
#endif
invalidate_block(bi);
raise_in_cl_list(bi);
- set_special(®s, 0);
+ set_special(0);
return EXCEPTION_CONTINUE_EXECUTION;
}
bi=bi->next;
#endif
invalidate_block(bi);
raise_in_cl_list(bi);
- set_special(®s, 0);
+ set_special(0);
return EXCEPTION_CONTINUE_EXECUTION;
}
bi=bi->next;
bi->pc_p);
invalidate_block(bi);
raise_in_cl_list(bi);
- set_special(®s, 0);
+ set_special(0);
return;
}
bi=bi->next;
bi->pc_p);
invalidate_block(bi);
raise_in_cl_list(bi);
- set_special(®s, 0);
+ set_special(0);
return;
}
bi=bi->next;
if (!compiled_code)
return;
current_compile_p=compiled_code;
- set_special(®s, 0); /* To get out of compiled code */
+ set_special(0); /* To get out of compiled code */
}
wh->width = 3072;
if (wh->height > 2048)
wh->height = 2048;
- wh->width += 7;
- wh->width &= ~7;
}
void fixup_prefs_dimensions (struct uae_prefs *prefs)
if (be_cnt < 3) {
int i, j;
uaecptr a2 = a - 32;
- uaecptr a3 = m68k_getpc (®s) - 32;
+ uaecptr a3 = m68k_getpc () - 32;
write_log (L"Your Amiga program just did something terribly stupid %08X PC=%08X\n", a, M68K_GETPC);
m68k_dumpstate (0, 0);
for (i = 0; i < 10; i++) {
be_cnt = 0;
} else {
regs.panic = 1;
- regs.panic_pc = m68k_getpc (®s);
+ regs.panic_pc = m68k_getpc ();
regs.panic_addr = a;
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
}
}
}
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;
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);
rb = &kickmem_bank;
map_banks (rb, 0, size, 0x80000);
}
+ fill_ce_banks ();
if (savestate_state != STATE_RESTORE && savestate_state != STATE_REWIND && valid_address (regs.pc, 4))
- m68k_setpc (®s, m68k_getpc (®s));
+ m68k_setpc (m68k_getpc ());
}
void memory_reset (void)
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;
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 */
}
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);
{
}
-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;
}
case 68020:
lvl = 2;
tbl = op_smalltbl_3_ff;
+ if (currprefs.cpu_cycle_exact)
+ tbl = op_smalltbl_13_ff;
break;
case 68010:
lvl = 1;
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
prefs_changed_cpu ();
if (!currprefs.cpu_compatible && changed_prefs.cpu_compatible)
- fill_prefetch_slow (®s);
+ fill_prefetch_slow ();
build_cpufunctbl ();
changed = 1;
}
currprefs.cpu_idle = changed_prefs.cpu_idle;
}
if (changed)
- set_special (®s, SPCFLAG_BRK);
+ set_special (SPCFLAG_BRK);
}
_stprintf (offtxt, L"-$%04x", -disp16);
else
_stprintf (offtxt, L"$%04x", disp16);
- addr = m68k_areg (®s, reg) + disp16;
+ addr = m68k_areg (regs, reg) + disp16;
_stprintf (buffer, L"(A%d, %s) == $%08lx", reg, offtxt, (unsigned long)addr);
}
break;
dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
disp8 = dp & 0xFF;
r = (dp & 0x7000) >> 12;
- dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r);
+ dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r);
if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg);
dispreg <<= (dp >> 9) & 3;
if (dp & 0x100) {
uae_s32 outer = 0, disp = 0;
- uae_s32 base = m68k_areg (®s, reg);
+ uae_s32 base = m68k_areg (regs, reg);
TCHAR name[10];
_stprintf (name, L"A%d, ", reg);
if (dp & 0x80) { base = 0; name[0] = 0; }
disp, outer,
(unsigned long)addr);
} else {
- addr = m68k_areg (®s, reg) + (uae_s32)((uae_s8)disp8) + dispreg;
+ addr = m68k_areg (regs, reg) + (uae_s32)((uae_s8)disp8) + dispreg;
_stprintf (buffer, L"(A%d, %c%d.%c*%d, $%02x) == $%08lx", reg,
dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W',
1 << ((dp >> 9) & 3), disp8,
}
break;
case PC16:
- addr = m68k_getpc (®s) + m68kpc_offset;
+ addr = m68k_getpc () + m68kpc_offset;
disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
addr += (uae_s16)disp16;
_stprintf (buffer, L"(PC,$%04x) == $%08lx", disp16 & 0xffff, (unsigned long)addr);
break;
case PC8r:
- addr = m68k_getpc (®s) + m68kpc_offset;
+ addr = m68k_getpc () + m68kpc_offset;
dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
disp8 = dp & 0xFF;
r = (dp & 0x7000) >> 12;
- dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r);
+ dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r);
if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg);
dispreg <<= (dp >> 9) & 3;
switch (mode){
case Dreg:
- *val = m68k_dreg (®s, reg);
+ *val = m68k_dreg (regs, reg);
return 1;
case Areg:
- *val = m68k_areg (®s, reg);
+ *val = m68k_areg (regs, reg);
return 1;
case Aind:
case Aipi:
- addr = m68k_areg (®s, reg);
+ addr = m68k_areg (regs, reg);
break;
case Apdi:
- addr = m68k_areg (®s, reg);
+ addr = m68k_areg (regs, reg);
break;
case Ad16:
disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
- addr = m68k_areg (®s, reg) + (uae_s16)disp16;
+ addr = m68k_areg (regs, reg) + (uae_s16)disp16;
break;
case Ad8r:
- addr = m68k_areg (®s, reg);
+ addr = m68k_areg (regs, reg);
d8r_common:
dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
disp8 = dp & 0xFF;
r = (dp & 0x7000) >> 12;
- dispreg = dp & 0x8000 ? m68k_areg (®s, r) : m68k_dreg (®s, r);
+ dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r);
if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg);
dispreg <<= (dp >> 9) & 3;
}
break;
case PC16:
- addr = m68k_getpc (®s) + m68kpc_offset;
+ addr = m68k_getpc () + m68kpc_offset;
disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
addr += (uae_s16)disp16;
break;
case PC8r:
- addr = m68k_getpc (®s) + m68kpc_offset;
+ addr = m68k_getpc () + m68kpc_offset;
goto d8r_common;
case absw:
addr = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset);
if ((addr & 1) == 0)
return 1;
- last_addr_for_exception_3 = m68k_getpc (®s) + m68kpc_offset;
+ last_addr_for_exception_3 = m68k_getpc () + m68kpc_offset;
last_fault_for_exception_3 = addr;
last_writeaccess_for_exception_3 = 0;
last_instructionaccess_for_exception_3 = 0;
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;
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);
}
}
-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;
#endif
}
-void REGPARAM2 MakeSR (struct regstruct *regs)
+void REGPARAM2 MakeSR (void)
{
-#if 0
- assert ((regs.t1 & 1) == regs->t1);
- assert ((regs.t0 & 1) == regs->t0);
- assert ((regs.s & 1) == regs->s);
- assert ((regs.m & 1) == regs->m);
- assert ((XFLG & 1) == XFLG);
- assert ((NFLG & 1) == NFLG);
- assert ((ZFLG & 1) == ZFLG);
- assert ((VFLG & 1) == VFLG);
- assert ((CFLG & 1) == CFLG);
-#endif
- regs->sr = ((regs->t1 << 15) | (regs->t0 << 14)
- | (regs->s << 13) | (regs->m << 12) | (regs->intmask << 8)
- | (GET_XFLG (®s->ccrflags) << 4) | (GET_NFLG (®s->ccrflags) << 3)
- | (GET_ZFLG (®s->ccrflags) << 2) | (GET_VFLG (®s->ccrflags) << 1)
- | GET_CFLG (®s->ccrflags));
-}
-
-void REGPARAM2 MakeFromSR (struct regstruct *regs)
-{
- int oldm = regs->m;
- int olds = regs->s;
-
- SET_XFLG (®s->ccrflags, (regs->sr >> 4) & 1);
- SET_NFLG (®s->ccrflags, (regs->sr >> 3) & 1);
- SET_ZFLG (®s->ccrflags, (regs->sr >> 2) & 1);
- SET_VFLG (®s->ccrflags, (regs->sr >> 1) & 1);
- SET_CFLG (®s->ccrflags, regs->sr & 1);
- if (regs->t1 == ((regs->sr >> 15) & 1) &&
- regs->t0 == ((regs->sr >> 14) & 1) &&
- regs->s == ((regs->sr >> 13) & 1) &&
- regs->m == ((regs->sr >> 12) & 1) &&
- regs->intmask == ((regs->sr >> 8) & 7))
+ regs.sr = ((regs.t1 << 15) | (regs.t0 << 14)
+ | (regs.s << 13) | (regs.m << 12) | (regs.intmask << 8)
+ | (GET_XFLG (®s.ccrflags) << 4) | (GET_NFLG (®s.ccrflags) << 3)
+ | (GET_ZFLG (®s.ccrflags) << 2) | (GET_VFLG (®s.ccrflags) << 1)
+ | GET_CFLG (®s.ccrflags));
+}
+
+void REGPARAM2 MakeFromSR (void)
+{
+ int oldm = regs.m;
+ int olds = regs.s;
+
+ SET_XFLG (®s.ccrflags, (regs.sr >> 4) & 1);
+ SET_NFLG (®s.ccrflags, (regs.sr >> 3) & 1);
+ SET_ZFLG (®s.ccrflags, (regs.sr >> 2) & 1);
+ SET_VFLG (®s.ccrflags, (regs.sr >> 1) & 1);
+ SET_CFLG (®s.ccrflags, regs.sr & 1);
+ if (regs.t1 == ((regs.sr >> 15) & 1) &&
+ regs.t0 == ((regs.sr >> 14) & 1) &&
+ regs.s == ((regs.sr >> 13) & 1) &&
+ regs.m == ((regs.sr >> 12) & 1) &&
+ regs.intmask == ((regs.sr >> 8) & 7))
return;
- regs->t1 = (regs->sr >> 15) & 1;
- regs->t0 = (regs->sr >> 14) & 1;
- regs->s = (regs->sr >> 13) & 1;
- regs->m = (regs->sr >> 12) & 1;
- regs->intmask = (regs->sr >> 8) & 7;
+ regs.t1 = (regs.sr >> 15) & 1;
+ regs.t0 = (regs.sr >> 14) & 1;
+ regs.s = (regs.sr >> 13) & 1;
+ regs.m = (regs.sr >> 12) & 1;
+ regs.intmask = (regs.sr >> 8) & 7;
if (currprefs.cpu_model >= 68020) {
/* 68060 does not have MSP but does have M-bit.. */
if (currprefs.cpu_model >= 68060)
- regs->msp = regs->isp;
- if (olds != regs->s) {
+ regs.msp = regs.isp;
+ if (olds != regs.s) {
if (olds) {
if (oldm)
- regs->msp = m68k_areg (regs, 7);
+ regs.msp = m68k_areg (regs, 7);
else
- regs->isp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->usp;
+ regs.isp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.usp;
} else {
- regs->usp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->m ? regs->msp : regs->isp;
+ regs.usp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp;
}
- } else if (olds && oldm != regs->m) {
+ } else if (olds && oldm != regs.m) {
if (oldm) {
- regs->msp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->isp;
+ regs.msp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.isp;
} else {
- regs->isp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->msp;
+ regs.isp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.msp;
}
}
if (currprefs.cpu_model >= 68060)
- regs->t0 = 0;
+ regs.t0 = 0;
} else {
- regs->t0 = regs->m = 0;
- if (olds != regs->s) {
+ regs.t0 = regs.m = 0;
+ if (olds != regs.s) {
if (olds) {
- regs->isp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->usp;
+ regs.isp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.usp;
} else {
- regs->usp = m68k_areg (regs, 7);
- m68k_areg (regs, 7) = regs->isp;
+ regs.usp = m68k_areg (regs, 7);
+ m68k_areg (regs, 7) = regs.isp;
}
}
}
if (currprefs.mmu_model)
- mmu_set_super (regs->s);
+ mmu_set_super (regs.s);
doint ();
- if (regs->t1 || regs->t0)
- set_special (regs, SPCFLAG_TRACE);
+ if (regs.t1 || regs.t0)
+ set_special (SPCFLAG_TRACE);
else
/* Keep SPCFLAG_DOTRACE, we still want a trace exception for
SR-modifying instructions (including STOP). */
- unset_special (regs, SPCFLAG_TRACE);
+ unset_special (SPCFLAG_TRACE);
}
static void exception_trace (int nr)
{
- unset_special (®s, SPCFLAG_TRACE | SPCFLAG_DOTRACE);
+ unset_special (SPCFLAG_TRACE | SPCFLAG_DOTRACE);
if (regs.t1 && !regs.t0) {
/* trace stays pending if exception is div by zero, chk,
* trapv or trap #x
*/
if (nr == 5 || nr == 6 || nr == 7 || (nr >= 32 && nr <= 47))
- set_special (®s, SPCFLAG_DOTRACE);
+ set_special (SPCFLAG_DOTRACE);
}
regs.t1 = regs.t0 = regs.m = 0;
}
*/
-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;
}
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);
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);
}
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
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) {
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 {
put_word (m68k_areg (regs, 7) + 0, mode);
put_long (m68k_areg (regs, 7) + 2, last_fault_for_exception_3);
put_word (m68k_areg (regs, 7) + 6, last_op_for_exception_3);
- put_word (m68k_areg (regs, 7) + 8, regs->sr);
+ put_word (m68k_areg (regs, 7) + 8, regs.sr);
put_long (m68k_areg (regs, 7) + 10, last_addr_for_exception_3);
- write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs->vbr + 4*nr));
+ write_log (L"Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs.vbr + 4*nr));
goto kludge_me_do;
}
m68k_areg (regs, 7) -= 4;
put_long (m68k_areg (regs, 7), currpc);
m68k_areg (regs, 7) -= 2;
- put_word (m68k_areg (regs, 7), regs->sr);
+ put_word (m68k_areg (regs, 7), regs.sr);
kludge_me_do:
- newpc = get_long (regs->vbr + 4 * nr);
+ newpc = get_long (regs.vbr + 4 * nr);
if (newpc & 1) {
if (nr == 2 || nr == 3)
uae_reset (1); /* there is nothing else we can do.. */
else
- exception3 (regs->ir, m68k_getpc (regs), newpc);
+ exception3 (regs.ir, m68k_getpc (), newpc);
return;
}
- m68k_setpc (regs, newpc);
- set_special (regs, SPCFLAG_END_COMPILE);
- fill_prefetch_slow (regs);
+ m68k_setpc (newpc);
+ set_special (SPCFLAG_END_COMPILE);
+ fill_prefetch_slow ();
exception_trace (nr);
}
-void REGPARAM2 Exception (int nr, struct regstruct *regs, uaecptr oldpc)
+void REGPARAM2 Exception (int nr, uaecptr oldpc)
{
#ifdef CPUEMU_12
if (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000)
- Exception_ce (nr, regs, oldpc);
+ Exception_ce (nr, oldpc);
else
#endif
- Exception_normal (nr, regs, oldpc);
+ Exception_normal (nr, oldpc);
}
-STATIC_INLINE void do_interrupt (int nr, struct regstruct *regs)
+STATIC_INLINE void do_interrupt (int nr)
{
- regs->stopped = 0;
- unset_special (regs, SPCFLAG_STOP);
+ regs.stopped = 0;
+ unset_special (SPCFLAG_STOP);
assert (nr < 8 && nr >= 0);
- Exception (nr + 24, regs, 0);
+ Exception (nr + 24, 0);
- regs->intmask = nr;
+ regs.intmask = nr;
doint ();
}
void NMI (void)
{
- do_interrupt (7, ®s);
+ do_interrupt (7);
}
#ifndef CPUEMU_68000_ONLY
write_log (L"move2c %04X <- %08X PC=%x\n", regno, *regp, M68K_GETPC);
#endif
if (movec_illg (regno)) {
- op_illg (0x4E7B, ®s);
+ op_illg (0x4E7B);
return 0;
} else {
switch (regno) {
case 0x800: regs.usp = *regp; break;
case 0x801: regs.vbr = *regp; break;
case 0x802: regs.caar = *regp & 0xfc; break;
- case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg (®s, 7) = regs.msp; break;
- case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (®s, 7) = regs.isp; break;
+ case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg (regs, 7) = regs.msp; break;
+ case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (regs, 7) = regs.isp; break;
/* 68040 only */
case 0x805: regs.mmusr = *regp; break;
/* 68040/060 */
}
break;
default:
- op_illg (0x4E7B, ®s);
+ op_illg (0x4E7B);
return 0;
}
}
write_log (L"movec2 %04X PC=%x\n", regno, M68K_GETPC);
#endif
if (movec_illg (regno)) {
- op_illg (0x4E7A, ®s);
+ op_illg (0x4E7A);
return 0;
} else {
switch (regno) {
case 0x800: *regp = regs.usp; break;
case 0x801: *regp = regs.vbr; break;
case 0x802: *regp = regs.caar; break;
- case 0x803: *regp = regs.m == 1 ? m68k_areg (®s, 7) : regs.msp; break;
- case 0x804: *regp = regs.m == 0 ? m68k_areg (®s, 7) : regs.isp; break;
+ case 0x803: *regp = regs.m == 1 ? m68k_areg (regs, 7) : regs.msp; break;
+ case 0x804: *regp = regs.m == 0 ? m68k_areg (regs, 7) : regs.isp; break;
case 0x805: *regp = regs.mmusr; break;
case 0x806: *regp = regs.urp; break;
case 0x807: *regp = regs.srp; break;
case 0x808: *regp = regs.pcr; break;
default:
- op_illg (0x4E7A, ®s);
+ op_illg (0x4E7A);
return 0;
}
}
{
#if defined (uae_s64)
if (src == 0) {
- Exception (5, ®s, oldpc);
+ Exception (5, oldpc);
return;
}
if (extra & 0x800) {
/* signed variant */
- uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7);
uae_s64 quot, rem;
if (extra & 0x400) {
a &= 0xffffffffu;
- a |= (uae_s64)m68k_dreg (®s, extra & 7) << 32;
+ a |= (uae_s64)m68k_dreg (regs, extra & 7) << 32;
}
rem = a % (uae_s64)(uae_s32)src;
quot = a / (uae_s64)(uae_s32)src;
SET_CFLG (®s.ccrflags, 0);
SET_ZFLG (®s.ccrflags, ((uae_s32)quot) == 0);
SET_NFLG (®s.ccrflags, ((uae_s32)quot) < 0);
- m68k_dreg (®s, extra & 7) = (uae_u32)rem;
- m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)quot;
+ m68k_dreg (regs, extra & 7) = (uae_u32)rem;
+ m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot;
}
} else {
/* unsigned */
- uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7);
uae_u64 quot, rem;
if (extra & 0x400) {
a &= 0xffffffffu;
- a |= (uae_u64)m68k_dreg (®s, extra & 7) << 32;
+ a |= (uae_u64)m68k_dreg (regs, extra & 7) << 32;
}
rem = a % (uae_u64)src;
quot = a / (uae_u64)src;
SET_CFLG (®s.ccrflags, 0);
SET_ZFLG (®s.ccrflags, ((uae_s32)quot) == 0);
SET_NFLG (®s.ccrflags, ((uae_s32)quot) < 0);
- m68k_dreg (®s, extra & 7) = (uae_u32)rem;
- m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)quot;
+ m68k_dreg (regs, extra & 7) = (uae_u32)rem;
+ m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot;
}
}
#else
if (src == 0) {
- Exception (5, ®s, oldpc);
+ Exception (5, oldpc);
return;
}
if (extra & 0x800) {
/* signed variant */
- uae_s32 lo = (uae_s32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_s32 lo = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7);
uae_s32 hi = lo < 0 ? -1 : 0;
uae_s32 save_high;
uae_u32 quot, rem;
uae_u32 sign;
if (extra & 0x400) {
- hi = (uae_s32)m68k_dreg (®s, extra & 7);
+ hi = (uae_s32)m68k_dreg (regs, extra & 7);
}
save_high = hi;
sign = (hi ^ src);
}
} else {
/* unsigned */
- uae_u32 lo = (uae_u32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_u32 lo = (uae_u32)m68k_dreg (regs, (extra >> 12) & 7);
uae_u32 hi = 0;
uae_u32 quot, rem;
if (extra & 0x400) {
- hi = (uae_u32)m68k_dreg (®s, extra & 7);
+ hi = (uae_u32)m68k_dreg (regs, extra & 7);
}
if (div_unsigned (hi, lo, src, ", &rem)) {
SET_VFLG (1);
#if defined (uae_s64)
if (extra & 0x800) {
/* signed variant */
- uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7);
a *= (uae_s64)(uae_s32)src;
SET_VFLG (®s.ccrflags, 0);
SET_ZFLG (®s.ccrflags, a == 0);
SET_NFLG (®s.ccrflags, a < 0);
if (extra & 0x400)
- m68k_dreg (®s, extra & 7) = (uae_u32)(a >> 32);
+ m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32);
else if ((a & UVAL64 (0xffffffff80000000)) != 0
&& (a & UVAL64 (0xffffffff80000000)) != UVAL64 (0xffffffff80000000))
{
SET_VFLG (®s.ccrflags, 1);
}
- m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)a;
+ m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a;
} else {
/* unsigned */
- uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (®s, (extra >> 12) & 7);
+ uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7);
a *= (uae_u64)src;
SET_VFLG (®s.ccrflags, 0);
SET_ZFLG (®s.ccrflags, a == 0);
SET_NFLG (®s.ccrflags, ((uae_s64)a) < 0);
if (extra & 0x400)
- m68k_dreg (®s, extra & 7) = (uae_u32)(a >> 32);
+ m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32);
else if ((a & UVAL64 (0xffffffff00000000)) != 0) {
SET_VFLG (®s.ccrflags, 1);
}
- m68k_dreg (®s, (extra >> 12) & 7) = (uae_u32)a;
+ m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a;
}
#else
if (extra & 0x800) {
uae_u32 sign;
src1 = (uae_s32)src;
- src2 = (uae_s32)m68k_dreg (®s, (extra >> 12) & 7);
+ src2 = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7);
sign = (src1 ^ src2);
if (src1 < 0) src1 = -src1;
if (src2 < 0) src2 = -src2;
SET_ZFLG (dst_hi == 0 && dst_lo == 0);
SET_NFLG (((uae_s32)dst_hi) < 0);
if (extra & 0x400)
- m68k_dreg (®s, extra & 7) = dst_hi;
+ m68k_dreg (regs, extra & 7) = dst_hi;
else if ((dst_hi != 0 || (dst_lo & 0x80000000) != 0)
&& ((dst_hi & 0xffffffff) != 0xffffffff
|| (dst_lo & 0x80000000) != 0x80000000))
{
SET_VFLG (1);
}
- m68k_dreg (®s, (extra >> 12) & 7) = dst_lo;
+ m68k_dreg (regs, (extra >> 12) & 7) = dst_lo;
} else {
/* unsigned */
uae_u32 dst_lo, dst_hi;
- mul_unsigned (src, (uae_u32)m68k_dreg (®s, (extra >> 12) & 7), &dst_hi, &dst_lo);
+ mul_unsigned (src, (uae_u32)m68k_dreg (regs, (extra >> 12) & 7), &dst_hi, &dst_lo);
SET_VFLG (0);
SET_CFLG (0);
SET_ZFLG (dst_hi == 0 && dst_lo == 0);
SET_NFLG (((uae_s32)dst_hi) < 0);
if (extra & 0x400)
- m68k_dreg (®s, extra & 7) = dst_hi;
+ m68k_dreg (regs, extra & 7) = dst_hi;
else if (dst_hi != 0) {
SET_VFLG (1);
}
regs.spcflags = 0;
#ifdef SAVESTATE
if (savestate_state == STATE_RESTORE || savestate_state == STATE_REWIND) {
- m68k_setpc (®s, regs.pc);
+ m68k_setpc (regs.pc);
/* MakeFromSR () must not swap stack pointer */
regs.s = (regs.sr >> 13) & 1;
- MakeFromSR (®s);
+ MakeFromSR ();
/* set stack pointer */
if (regs.s)
- m68k_areg (®s, 7) = regs.isp;
+ m68k_areg (regs, 7) = regs.isp;
else
- m68k_areg (®s, 7) = regs.usp;
+ m68k_areg (regs, 7) = regs.usp;
return;
}
#endif
- m68k_areg (®s, 7) = get_long (0);
- m68k_setpc (®s, get_long (4));
+ m68k_areg (regs, 7) = get_long (0);
+ m68k_setpc (get_long (4));
regs.s = 1;
regs.m = 0;
regs.stopped = 0;
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 ();
if (kickstart_rom)
regs.pcr |= 2; /* disable FPU */
}
- fill_prefetch_slow (®s);
+ fill_prefetch_slow ();
}
STATIC_INLINE int in_rom (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;
}
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;
}
}
if (!reg) {
- op_illg (opcode, ®s);
+ op_illg (opcode);
return;
}
#if MMUOP_DEBUG > 0
#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) {
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);
}
if ((opcode & 0xFE0) == 0x0500) {
/* PFLUSH */
- regs->mmusr = 0;
+ regs.mmusr = 0;
#if MMUOP_DEBUG > 0
write_log (L"PFLUSH\n");
#endif
#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
/* should also include TRAP, CHK, SR modification FPcc */
/* probably never used so why bother */
/* We can afford this to be inefficient... */
- m68k_setpc (®s, m68k_getpc (®s));
- fill_prefetch_slow (®s);
+ m68k_setpc (m68k_getpc ());
+ fill_prefetch_slow ();
opcode = get_word (regs.pc);
if (opcode == 0x4e73 /* RTE */
|| opcode == 0x4e74 /* RTD */
&& cctrue (®s.ccrflags, (opcode >> 8) & 0xf))
|| ((opcode & 0xf0f0) == 0x5050 /* DBcc */
&& !cctrue (®s.ccrflags, (opcode >> 8) & 0xf)
- && (uae_s16)m68k_dreg (®s, opcode & 7) != 0))
+ && (uae_s16)m68k_dreg (regs, opcode & 7) != 0))
{
- last_trace_ad = m68k_getpc (®s);
- unset_special (®s, SPCFLAG_TRACE);
- set_special (®s, SPCFLAG_DOTRACE);
+ last_trace_ad = m68k_getpc ();
+ unset_special (SPCFLAG_TRACE);
+ set_special (SPCFLAG_DOTRACE);
}
} else if (regs.t1) {
- last_trace_ad = m68k_getpc (®s);
- unset_special (®s, SPCFLAG_TRACE);
- set_special (®s, SPCFLAG_DOTRACE);
+ last_trace_ad = m68k_getpc ();
+ unset_special (SPCFLAG_TRACE);
+ set_special (SPCFLAG_DOTRACE);
}
}
#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 ();
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 ());*/
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;
} 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;
}
}
- 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;
void doint (void)
{
if (currprefs.cpu_compatible)
- set_special (®s, SPCFLAG_INT);
+ set_special (SPCFLAG_INT);
else
- set_special (®s, SPCFLAG_DOINT);
+ set_special (SPCFLAG_DOINT);
}
//static uae_u32 pcs[1000];
{
TCHAR out[100];
int ioreq = 0;
- uae_u32 request = m68k_areg (®s, 1);
+ uae_u32 request = m68k_areg (regs, 1);
if (pc == cd32nextpc) {
out_cd32io2 ();
if (cd32request)
write_log (L"old request still not returned!\n");
cd32request = request;
- cd32nextpc = get_long (m68k_areg (®s, 7));
+ cd32nextpc = get_long (m68k_areg (regs, 7));
write_log (L"%s A1=%08X\n", out, request);
if (ioreq) {
static int cnt = 0;
count_instr (opcode);
#ifdef DEBUG_CD32IO
- out_cd32io (m68k_getpc (®s));
+ out_cd32io (m68k_getpc ());
#endif
#if 0
}
#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))
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)
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;
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;
if (uae_int_requested) {
intreq |= 0x0008;
intreqr = intreq;
- set_special (®s, SPCFLAG_INT);
+ set_special (SPCFLAG_INT);
}
if (regs.spcflags) {
- if (do_specialties (0, ®s)) {
+ if (do_specialties (0)) {
return;
}
}
#else
+/* "cycle exact 68020 */
+static void m68k_run_2ce (void)
+{
+ struct regstruct *r = ®s;
+
+ for (;;) {
+ uae_u32 opcode = get_word_ce020_prefetch (0);
+ count_instr (opcode);
+ (*cpufunctbl[opcode])(opcode);
+ if (r->spcflags) {
+ if (do_specialties (0))
+ return;
+ }
+ }
+}
+
/* emulate simple prefetch */
static void m68k_run_2p (void)
{
uae_u32 prefetch, prefetch_pc;
struct regstruct *r = ®s;
- prefetch_pc = m68k_getpc (r);
+ prefetch_pc = m68k_getpc ();
prefetch = get_longi (prefetch_pc);
for (;;) {
uae_u32 opcode;
- uae_u32 pc = m68k_getpc (r);
+ uae_u32 pc = m68k_getpc ();
#ifdef DEBUG_CD32IO
- out_cd32io (m68k_getpc (®s));
+ out_cd32io (m68k_getpc ());
#endif
do_cycles (cpu_cycles);
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;
}
}
struct regstruct *r = ®s;
for (;;) {
- uae_u32 opcode = get_iword (r, 0);
+ uae_u32 opcode = get_iword (0);
count_instr (opcode);
do_cycles (cpu_cycles);
- cpu_cycles = (*cpufunctbl[opcode])(opcode, r);
+ cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles &= cycles_mask;
cpu_cycles |= cycles_val;
if (r->spcflags) {
- if (do_specialties (cpu_cycles, r))
+ if (do_specialties (cpu_cycles))
return;
}
}
static void m68k_run_mmu (void)
{
for (;;) {
- uae_u32 opcode = get_iword (®s, 0);
+ uae_u32 opcode = get_iword (0);
do_cycles (cpu_cycles);
mmu_backup_regs = regs;
- cpu_cycles = (*cpufunctbl[opcode])(opcode, ®s);
+ cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles &= cycles_mask;
cpu_cycles |= cycles_val;
if (mmu_triggered)
mmu_do_hit ();
if (regs.spcflags) {
- if (do_specialties (cpu_cycles, ®s))
+ if (do_specialties (cpu_cycles))
return;
}
}
last_fault_for_exception_3 = fault;
last_writeaccess_for_exception_3 = 0;
last_instructionaccess_for_exception_3 = 0;
- Exception (2, ®s, addr);
+ Exception (2, addr);
}
void m68k_go (int may_quit)
/* We may have been restoring state, but we're done now. */
if (savestate_state == STATE_RESTORE || savestate_state == STATE_REWIND) {
map_overlay (1);
- fill_prefetch_slow (®s); /* compatibility with old state saves */
+ fill_prefetch_slow (); /* compatibility with old state saves */
memory_map_dump ();
}
savestate_restore_finish ();
#endif
- fill_prefetch_slow (®s);
+ fill_prefetch_slow ();
if (currprefs.produce_sound == 0)
eventtab[ev_audio].active = 0;
handle_active_events ();
if (regs.spcflags)
- do_specialties (0, ®s);
- m68k_setpc (®s, regs.pc);
+ do_specialties (0);
+ m68k_setpc (regs.pc);
}
#ifdef DEBUGGER
if (regs.spcflags) {
uae_u32 of = regs.spcflags;
regs.spcflags &= ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
- do_specialties (0, ®s);
+ do_specialties (0);
regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
}
#endif
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
if (dp->suse) {
if (!verify_ea (dp->sreg, dp->smode, dp->size, &val)) {
- Exception (3, ®s, 0);
+ Exception (3, 0);
return;
}
}
if (dp->duse) {
if (!verify_ea (dp->dreg, dp->dmode, dp->size, &val)) {
- Exception (3, ®s, 0);
+ Exception (3, 0);
return;
}
}
{
unsigned int dmask, amask;
int prevreg = -1, lastreg = -1, first = 1;
+
if (mode == Apdi) {
int i;
uae_u8 dmask2 = (mask >> 8) & 0xff;
void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode)
{
uaecptr newpc = 0;
- m68kpc_offset = addr - m68k_getpc (®s);
+ m68kpc_offset = addr - m68k_getpc ();
if (buf)
memset (buf, 0, bufsize);
for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++)
;
- buf = buf_out (buf, &bufsize, L"%08lX ", m68k_getpc (®s) + m68kpc_offset);
+ buf = buf_out (buf, &bufsize, L"%08lX ", m68k_getpc () + m68kpc_offset);
m68kpc_offset += 2;
}
m68kpc_offset += 2;
} else if (lookup->mnemo == i_MVMEL) {
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
m68kpc_offset += 2;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
_tcscat (instrname, L",");
- movemout (instrname, get_iword_1 (m68kpc_offset - 2), dp->dmode);
+ movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode);
} else if (lookup->mnemo == i_MVMLE) {
m68kpc_offset += 2;
- movemout (instrname, get_iword_1 (m68kpc_offset - 2), dp->dmode);
+ movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode);
_tcscat (instrname, L",");
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
} else {
if (dp->suse) {
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode);
}
if (dp->suse && dp->duse)
_tcscat (instrname, L",");
if (dp->duse) {
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
}
}
buf = buf_out (buf, &bufsize, L"\n");
}
if (nextpc)
- *nextpc = m68k_getpc (®s) + m68kpc_offset;
+ *nextpc = m68k_getpc () + m68kpc_offset;
}
void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr)
uaecptr newpc = 0;
- m68kpc_offset = addr - m68k_getpc (®s);
+ m68kpc_offset = addr - m68k_getpc ();
oldpc = m68kpc_offset;
opcode = get_iword_1 (m68kpc_offset);
}
if (dp->suse) {
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, NULL, 0);
}
if (dp->suse && dp->duse)
_tcscat (instrname, L",");
if (dp->duse) {
- newpc = m68k_getpc (®s) + m68kpc_offset;
+ newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, NULL, 0);
}
}
if (nextpc)
- *nextpc = m68k_getpc (®s) + m68kpc_offset;
+ *nextpc = m68k_getpc () + m68kpc_offset;
}
struct cpum2c m2cregs[] = {
int i, j;
for (i = 0; i < 8; i++){
- f_out (f, L" D%d %08lX ", i, m68k_dreg (®s, i));
+ f_out (f, L" D%d %08lX ", i, m68k_dreg (regs, i));
if ((i & 3) == 3) f_out (f, L"\n");
}
for (i = 0; i < 8; i++){
- f_out (f, L" A%d %08lX ", i, m68k_areg (®s, i));
+ f_out (f, L" A%d %08lX ", i, m68k_areg (regs, i));
if ((i & 3) == 3) f_out (f, L"\n");
}
- if (regs.s == 0) regs.usp = m68k_areg (®s, 7);
- if (regs.s && regs.m) regs.msp = m68k_areg (®s, 7);
- if (regs.s && regs.m == 0) regs.isp = m68k_areg (®s, 7);
+ if (regs.s == 0) regs.usp = m68k_areg (regs, 7);
+ if (regs.s && regs.m) regs.msp = m68k_areg (regs, 7);
+ if (regs.s && regs.m == 0) regs.isp = m68k_areg (regs, 7);
j = 2;
f_out (f, L"USP %08X ISP %08X ", regs.usp, regs.isp);
for (i = 0; m2cregs[i].regno>= 0; i++) {
f_out (f, L"Prefetch %04x (%s) %04x (%s)\n", regs.irc, lookup1->name, regs.ir, lookup2->name);
}
- m68k_disasm (f, m68k_getpc (®s), nextpc, 1);
+ m68k_disasm (f, m68k_getpc (), nextpc, 1);
if (nextpc)
f_out (f, L"Next PC: %08lx\n", *nextpc);
}
l = restore_u32 ();
if (l & CPUMODE_HALT) {
regs.stopped = 1;
- set_special (®s, SPCFLAG_STOP);
+ set_special (SPCFLAG_STOP);
} else {
regs.stopped = 0;
}
void restore_cpu_finish (void)
{
init_m68k ();
- m68k_setpc (®s, regs.pc);
+ m68k_setpc (regs.pc);
set_cpu_caches ();
}
save_u32 (0x80000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */
for (i = 0;i < 15; i++)
save_u32 (regs.regs[i]); /* D0-D7 A0-A6 */
- save_u32 (m68k_getpc (®s)); /* PC */
+ save_u32 (m68k_getpc ()); /* PC */
save_u16 (regs.irc); /* prefetch */
save_u16 (regs.ir); /* instruction prefetch */
- MakeSR (®s);
+ MakeSR ();
save_u32 (!regs.s ? regs.regs[15] : regs.usp); /* USP */
save_u32 (regs.s ? regs.regs[15] : regs.isp); /* ISP */
save_u16 (regs.sr); /* SR/CCR */
last_op_for_exception_3 = opcode;
last_writeaccess_for_exception_3 = writeaccess;
last_instructionaccess_for_exception_3 = instructionaccess;
- Exception (3, ®s, fault);
+ Exception (3, fault);
}
void exception3 (uae_u32 opcode, uaecptr addr, uaecptr fault)
void exception2 (uaecptr addr, uaecptr fault)
{
write_log (L"delayed exception2!\n");
- regs.panic_pc = m68k_getpc (®s);
+ regs.panic_pc = m68k_getpc ();
regs.panic_addr = addr;
regs.panic = 2;
- set_special (®s, SPCFLAG_BRK);
- m68k_setpc (®s, 0xf80000);
+ set_special (SPCFLAG_BRK);
+ m68k_setpc (0xf80000);
#ifdef JIT
- set_special (®s, SPCFLAG_END_COMPILE);
+ set_special (SPCFLAG_END_COMPILE);
#endif
- fill_prefetch_slow (®s);
+ fill_prefetch_slow ();
}
void cpureset (void)
customreset (0);
return;
}
- pc = m68k_getpc (®s);
+ pc = m68k_getpc ();
if (pc >= currprefs.chipmem_size) {
addrbank *b = &get_mem_bank (pc);
if (b->check (pc, 2 + 2)) {
}
write_log (L"M68K RESET PC=%x, rebooting..\n", pc);
customreset (0);
- m68k_setpc (®s, ksboot);
+ m68k_setpc (ksboot);
return;
}
/* panic, RAM is going to disappear under PC */
ins = get_word (pc + 2);
if ((ins & ~7) == 0x4ed0) {
int reg = ins & 7;
- uae_u32 addr = m68k_areg (®s, reg);
+ uae_u32 addr = m68k_areg (regs, reg);
write_log (L"reset/jmp (ax) combination emulated -> %x\n", addr);
customreset (0);
if (addr < 0x80000)
addr += 0xf80000;
- m68k_setpc (®s, addr - 2);
+ m68k_setpc (addr - 2);
return;
}
write_log (L"M68K RESET PC=%x, rebooting..\n", pc);
customreset (0);
- m68k_setpc (®s, ksboot);
+ m68k_setpc (ksboot);
}
-void m68k_setstopped (struct regstruct *regs)
+void m68k_setstopped (void)
{
- regs->stopped = 1;
+ regs.stopped = 1;
/* A traced STOP instruction drops through immediately without
actually stopping. */
- if ((regs->spcflags & SPCFLAG_DOTRACE) == 0)
- set_special (regs, SPCFLAG_STOP);
+ if ((regs.spcflags & SPCFLAG_DOTRACE) == 0)
+ set_special (SPCFLAG_STOP);
else
- m68k_resumestopped (regs);
+ m68k_resumestopped ();
}
-void m68k_resumestopped (struct regstruct *regs)
+void m68k_resumestopped (void)
{
- if (!regs->stopped)
+ if (!regs.stopped)
return;
- regs->stopped = 0;
- fill_prefetch_slow (regs);
- unset_special (regs, SPCFLAG_STOP);
+ regs.stopped = 0;
+ fill_prefetch_slow ();
+ unset_special (SPCFLAG_STOP);
}
/*
static uae_u32 REGPARAM2 emulib_ExecuteNativeCode2 (TrapContext *context)
{
unsigned int espstore;
- uae_u8* object_UAM = (uae_u8*) m68k_areg (&context->regs, 0);
- uae_u32 d1 = m68k_dreg (&context->regs, 1);
- uae_u32 d2 = m68k_dreg (&context->regs, 2);
- uae_u32 d3 = m68k_dreg (&context->regs, 3);
- uae_u32 d4 = m68k_dreg (&context->regs, 4);
- uae_u32 d5 = m68k_dreg (&context->regs, 5);
- uae_u32 d6 = m68k_dreg (&context->regs, 6);
- uae_u32 d7 = m68k_dreg (&context->regs, 7);
- uae_u32 a1 = m68k_areg (&context->regs, 1);
- uae_u32 a2 = m68k_areg (&context->regs, 2);
- uae_u32 a3 = m68k_areg (&context->regs, 3);
- uae_u32 a4 = m68k_areg (&context->regs, 4);
- uae_u32 a5 = m68k_areg (&context->regs, 5);
- uae_u32 a7 = m68k_areg (&context->regs, 7);
- uae_u32 regs_ = (uae_u32)&context->regs;
+ uae_u8* object_UAM = (uae_u8*) m68k_areg (regs, 0);
+ uae_u32 d1 = m68k_dreg (regs, 1);
+ uae_u32 d2 = m68k_dreg (regs, 2);
+ uae_u32 d3 = m68k_dreg (regs, 3);
+ uae_u32 d4 = m68k_dreg (regs, 4);
+ uae_u32 d5 = m68k_dreg (regs, 5);
+ uae_u32 d6 = m68k_dreg (regs, 6);
+ uae_u32 d7 = m68k_dreg (regs, 7);
+ uae_u32 a1 = m68k_areg (regs, 1);
+ uae_u32 a2 = m68k_areg (regs, 2);
+ uae_u32 a3 = m68k_areg (regs, 3);
+ uae_u32 a4 = m68k_areg (regs, 4);
+ uae_u32 a5 = m68k_areg (regs, 5);
+ uae_u32 a7 = m68k_areg (regs, 7);
+ uae_u32 regs_ = (uae_u32)®s;
CREATE_NATIVE_FUNC_PTR2;
uaevar.z3offset = (uae_u32)(get_real_address (0x10000000) - 0x10000000);
uaevar.amigawnd = hAmigaWnd;
// 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)
{
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;
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();
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++) {
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 ();
case 12:
{
#if 1
- TCHAR *s = au (get_real_address (m68k_areg (®s, 0)));
+ TCHAR *s = au (get_real_address (m68k_areg (regs, 0)));
static LPTSTR p;
int slen;
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;
return 0;
case 20:
- return enforcer_enable(m68k_dreg (&context->regs, 1));
+ return enforcer_enable(m68k_dreg (regs, 1));
case 21:
return enforcer_disable();
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);
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);
}
case 103: //close dll
{
HMODULE libaddr;
- libaddr = (HMODULE) m68k_dreg (&context->regs, 1);
+ libaddr = (HMODULE) m68k_dreg (regs, 1);
FreeLibrary (libaddr);
return 0;
}
//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;
//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);
#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)
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;
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);
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);
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)
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;
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);
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;
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;
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);
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;
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;
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;
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;
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);
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;
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)
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) {
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);
}
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)
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;
hDasm = GetDlgItem(hDbgWnd, IDC_DBG_DASM);
if (!dbgpage[currpage].init) {
- addr = m68k_getpc (®s);
+ addr = m68k_getpc ();
dbgpage[currpage].init = 1;
}
else if (dbgpage[currpage].autoset == 1 && direction == 0) {
- addr = m68k_getpc (®s);
+ addr = m68k_getpc ();
}
else
addr = dbgpage[currpage].dasmaddr;
{
int i, id;
- dbgpage[currpage].dasmaddr = m68k_getpc (®s);
+ dbgpage[currpage].dasmaddr = m68k_getpc ();
_stprintf(dbgpage[currpage].addrinput, L"%08lX", dbgpage[currpage].dasmaddr);
for (i = 0; i < MAXPAGECONTROLS; i++) {
id = GetDlgCtrlID(dbgpage[currpage].ctrl[i]);
if (id == IDC_DBG_DREG) {
_tcsncpy(hexstr + 2, txt, 8);
hexstr[10] = '\0';
- m68k_dreg(®s, index) = _tcstoul(hexstr, NULL, 0);
+ m68k_dreg(regs, index) = _tcstoul(hexstr, NULL, 0);
}
else if (id == IDC_DBG_AREG) {
_tcsncpy(hexstr + 2, txt, 8);
hexstr[10] = '\0';
- m68k_areg(®s, index) = _tcstoul(hexstr, NULL, 0);
+ m68k_areg(regs, index) = _tcstoul(hexstr, NULL, 0);
}
else if (id == IDC_DBG_FPREG) {
TCHAR *stopstr;
uae_u32 addr;
SendMessage(hwnd, LB_GETTEXT, index, (LPARAM)tmp);
if (id == IDC_DBG_AMEM) {
- addr = m68k_areg(®s, index);
+ addr = m68k_areg(regs, index);
offset = 0;
bytes = 16;
}
case ID_DBG_SETTOA5:
case ID_DBG_SETTOA6:
case ID_DBG_SETTOA7:
- dbgpage[currpage].memaddr = m68k_areg(®s, LOWORD(wParam) - ID_DBG_SETTOA0);
+ dbgpage[currpage].memaddr = m68k_areg(regs, LOWORD(wParam) - ID_DBG_SETTOA0);
ShowMem(0);
return 0;
case ID_DBG_SETTOPC:
- dbgpage[currpage].dasmaddr = m68k_getpc(®s);
+ dbgpage[currpage].dasmaddr = m68k_getpc();
ShowDasm(0);
return 0;
case ID_DBG_ENTERADDR:
_tcsncpy(addrstr + 2, text + pos + 1, 8);
else if (text[pos] == '(' && _istdigit(text[pos + 2])) { //address register indirect
int reg = _tstoi(text + pos + 2);
- uae_u32 loc = m68k_areg (®s, reg);
+ uae_u32 loc = m68k_areg (regs, reg);
_stprintf(addrstr + 2, L"%08lx", loc);
}
}
TextOut(hdc, rc.left, rc.top, L"=", 1);
}
rc.left += size;
- if (addr == m68k_getpc(®s)) {
+ if (addr == m68k_getpc()) {
FillRect(hdc, &rc, GetSysColorBrush(COLOR_HIGHLIGHT));
SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
return;
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_DREG);
for (i = 0; i < 8; i++) {
- _stprintf(out, L"D%d: %08lX", i, m68k_dreg (®s, i));
+ _stprintf(out, L"D%d: %08lX", i, m68k_dreg (regs, i));
UpdateListboxString(hwnd, i, out, TRUE);
}
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AREG);
for (i = 0; i < 8; i++) {
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AREG);
- _stprintf(out, L"A%d: %08lX", i, m68k_areg (®s, i));
+ _stprintf(out, L"A%d: %08lX", i, m68k_areg (regs, i));
UpdateListboxString(hwnd, i, out, TRUE);
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_AMEM);
- dumpmem2(m68k_areg (®s, i), out, sizeof(out));
+ dumpmem2(m68k_areg (regs, i), out, sizeof(out));
UpdateListboxString(hwnd, i, out + 9, TRUE);
}
UpdateListboxString(hwnd, 4, out, TRUE);
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_PC);
- _stprintf(out, L"PC: %08lX", m68k_getpc (®s));
+ _stprintf(out, L"PC: %08lX", m68k_getpc ());
UpdateListboxString(hwnd, 0, out, TRUE);
hwnd = GetDlgItem(hDbgWnd, IDC_DBG_PREFETCH);
DDSURFACEDESC2 desc = { 0 };
LPDIRECTDRAWSURFACE7 surf;
+ width = (width + 7) & ~7;
desc.dwSize = sizeof (desc);
desc.dwFlags = DDSD_CAPS;
desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
AdditionalOptions=""
Optimization="0"
AdditionalIncludeDirectories="..\..\include,..\..,..\"
- PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,__STDC__"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
*/
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;
*/
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);
*/
static uae_u32 REGPARAM2 picasso_SetSpriteImage (TrapContext *ctx)
{
- struct regstruct *regs = &ctx->regs;
uaecptr bi = m68k_areg (regs, 0);
boardinfo = bi;
return setspriteimage (bi);
*/
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)
*/
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
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;
*/
static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx)
{
- struct regstruct *regs = &ctx->regs;
int LibResolutionStructureCount = 0;
int i, j, unkcnt;
uaecptr amem;
*/
static uae_u32 REGPARAM2 picasso_SetSwitch (TrapContext *ctx)
{
- struct regstruct *regs = &ctx->regs;
uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF;
TCHAR p96text[100];
{
/* 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);
*/
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 */
*/
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);
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);
*/
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);
***********************************************************/
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);
***********************************************************/
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);
***********************************************************/
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);
*/
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);
***********************************************************************************/
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);
*/
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;
*/
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;
*/
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);
*/
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);
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;
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 */
}
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);
//\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
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
static HBITMAP offscreen_bitmap;
static int screenshot_prepared;
-void screenshot_free(void)
+void screenshot_free (void)
{
if (surface_dc)
releasehdc (surface_dc);
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;
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);
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
#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 */
if ((p >= (void*)regs.pc_p && p < (void*)(regs.pc_p + 32))
|| (p >= (void*)prevpc && p < (void*)(prevpc + 32))) {
int got = 0;
- uaecptr opc = m68k_getpc (®s);
+ uaecptr opc = m68k_getpc ();
void *ps = get_real_address (0);
m68k_dumpstate (0, 0);
efix (&ctx->Eax, p, ps, &got);
write_log (L"failed to find and fix the problem (%p). crashing..\n", p);
} else {
void *ppc = regs.pc_p;
- m68k_setpc (®s, 0);
+ m68k_setpc (0);
if (ppc != regs.pc_p) {
prevpc = (uae_u8*)ppc;
}
#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""
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;
>
</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"
>
+
+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..)
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;
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;
}
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;
}
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;
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 */
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;
}
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;
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) {
}
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;
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;
}
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);
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;
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;
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);
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;
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;
}
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;
}
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;
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);
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;
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;
* 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
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");
}
* 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. */
/* 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
/* 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 */
*/
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);
* 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;
}
}
*
* 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);
/* 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);
/*
* 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. */
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;
/*
* 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! */
/* 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);
* 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;
}
* 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. */
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;
}
*/
uae_u32 CallFunc (TrapContext *context, uaecptr func)
{
- return trap_Call68k ((ExtendedTrapContext *)context, func);
+ return trap_Call68k (context, func);
}
+
/*
* Initialize trap mechanism.
*/
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);
}
/*
* 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;
* 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) {
* 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) {
* 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) {
#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);
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)
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 ();
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.. */
{
uae_u32 d0, d1;
d0 = emulib_target_getcpurate (ARG1, &d1);
- m68k_dreg (&context->regs, 1) = d1;
+ m68k_dreg (regs, 1) = d1;
return d0;
}
static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context)
{
uae_u32 v;
- struct regstruct *r = &context->regs;
+ struct regstruct *r = ®s;
if (uaelib_debug)
write_log (L"%d: %08x %08x %08x %08x %08x %08x %08x %08x, %08x %08x %08x %08x %08x %08x %08x %08x\n",
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;
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);
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));
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;
}
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;
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;
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));
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;
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) {