diff --git a/Makefile b/Makefile index 0ad95cbe..7aeb1528 100644 --- a/Makefile +++ b/Makefile @@ -30,9 +30,9 @@ PANDORA=1 SDL_CFLAGS = `sdl-config --cflags` -DEFS += -DCPU_arm -DARM_ASSEMBLY -DARMV6_ASSEMBLY -DGP2X -DPANDORA -DDOUBLEBUFFER -DSIX_AXIS_WORKAROUND +DEFS += -DCPU_arm -DARM_ASSEMBLY -DARMV6_ASSEMBLY -DGP2X -DPANDORA -DSIX_AXIS_WORKAROUND DEFS += -DROM_PATH_PREFIX=\"./\" -DDATA_PREFIX=\"./data/\" -DSAVE_PREFIX=\"./saves/\" -DEFS += -DUSE_SDL -DUSE_UNDERSCORE -DUNALIGNED_PROFITABLE -DOPTIMIZED_FLAGS +DEFS += -DUSE_SDL ifeq ($(USE_PICASSO96), 1) DEFS += -DPICASSO96 @@ -90,6 +90,7 @@ OBJS = \ src/savestate.o \ src/traps.o \ src/uaelib.o \ + src/uaeresource.o \ src/zfile.o \ src/zfile_archive.o \ src/archivers/7z/7zAlloc.o \ @@ -194,10 +195,10 @@ OBJS += src/cpustbl.o OBJS += src/cpuemu_0.o OBJS += src/cpuemu_4.o OBJS += src/cpuemu_11.o -OBJS += src/compemu.o -OBJS += src/compemu_fpp.o -OBJS += src/compstbl.o -OBJS += src/compemu_support.o +OBJS += src/jit/compemu.o +OBJS += src/jit/compemu_fpp.o +OBJS += src/jit/compstbl.o +OBJS += src/jit/compemu_support.o src/osdep/neon_helper.o: src/osdep/neon_helper.s $(CXX) $(CPU_FLAGS) -Wall -o src/osdep/neon_helper.o -c src/osdep/neon_helper.s diff --git a/src/archivers/dms/pfile.cpp b/src/archivers/dms/pfile.cpp index 540d47e0..02664e3a 100644 --- a/src/archivers/dms/pfile.cpp +++ b/src/archivers/dms/pfile.cpp @@ -420,7 +420,7 @@ static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, if (usum1 == Calc_CheckSum(b2,(ULONG)unpklen)) { passfound = maybeencrypted; if (passfound) - write_log("DMS: decryption key = 0x%04.4X\n", pass); + write_log ("DMS: decryption key = 0x%04X\n", prevpass); err = NO_PROBLEM; pass = prevpass; break; diff --git a/src/archivers/lha/uae_lha.cpp b/src/archivers/lha/uae_lha.cpp index d553f7db..44390249 100644 --- a/src/archivers/lha/uae_lha.cpp +++ b/src/archivers/lha/uae_lha.cpp @@ -26,10 +26,16 @@ struct zvolume *archive_directory_lha(struct zfile *zf) LzHeader hdr; int i; - tzset(); + tzset(); zv = zvolume_alloc(zf, ArchiveFormatLHA, NULL); while (get_header(zf, &hdr)) { struct znode *zn; + int method; + + for (i = 0; methods[i]; i++) { + if (!strcmp(methods[i], hdr.method)) + method = i; + } memset(&zai, 0, sizeof zai); zai.name = hdr.name; zai.size = hdr.original_size; @@ -37,12 +43,13 @@ struct zvolume *archive_directory_lha(struct zfile *zf) zai.t = hdr.unix_last_modified_stamp -= timezone; if (hdr.name[strlen(hdr.name) + 1] != 0) zai.comment = &hdr.name[strlen(hdr.name) + 1]; + if (method == LZHDIRS_METHOD_NUM) { + zvolume_adddir_abs(zv, &zai); + } else { zn = zvolume_addfile_abs(zv, &zai); zn->offset = zfile_ftell(zf); zn->packedsize = hdr.packed_size; - for (i = 0; methods[i]; i++) { - if (!strcmp(methods[i], hdr.method)) - zn->method = i; + zn->method = method; } zfile_fseek(zf, hdr.packed_size, SEEK_CUR); diff --git a/src/archivers/lha/util.cpp b/src/archivers/lha/util.cpp index 6c0c68c2..23d67d3d 100644 --- a/src/archivers/lha/util.cpp +++ b/src/archivers/lha/util.cpp @@ -73,7 +73,7 @@ strdup(char *buf) */ /* ------------------------------------------------------------------------ */ -#if defined(NOBSTRING) && !defined(__STDC__) +#if 0 && defined(NOBSTRING) && !defined(__STDC__) void * memmove(register char *dst, register char *src, register int cnt) { diff --git a/src/audio.cpp b/src/audio.cpp index e0e357d1..73591e89 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -787,7 +787,7 @@ STATIC_INLINE void state23 (struct audio_channel_data *cdp) cdp->intreq2 = 1; #ifdef DEBUG_AUDIO if (debugchannel (cdp - audio_channel)) - write_log ("Channel %d looped, LC=%08.8X LEN=%d\n", cdp - audio_channel, cdp->pt, cdp->wlen); + write_log ("Channel %d looped, LC=%08X LEN=%d\n", cdp - audio_channel, cdp->pt, cdp->wlen); #endif } else { cdp->wlen = (cdp->wlen - 1) & 0xFFFF; @@ -962,15 +962,19 @@ void audio_reset (void) STATIC_INLINE int sound_prefs_changed (void) { - return (changed_prefs.produce_sound != currprefs.produce_sound + if (changed_prefs.produce_sound != currprefs.produce_sound || changed_prefs.sound_stereo != currprefs.sound_stereo - || changed_prefs.sound_stereo_separation != currprefs.sound_stereo_separation - || changed_prefs.sound_mixed_stereo_delay != currprefs.sound_mixed_stereo_delay || changed_prefs.sound_freq != currprefs.sound_freq - || changed_prefs.sound_auto != currprefs.sound_auto + || changed_prefs.sound_auto != currprefs.sound_auto) + return 1; + + if (changed_prefs.sound_stereo_separation != currprefs.sound_stereo_separation + || changed_prefs.sound_mixed_stereo_delay != currprefs.sound_mixed_stereo_delay || changed_prefs.sound_interpol != currprefs.sound_interpol || changed_prefs.sound_filter != currprefs.sound_filter - || changed_prefs.sound_filter_type != currprefs.sound_filter_type); + || changed_prefs.sound_filter_type != currprefs.sound_filter_type) + return -1; + return 0; } /* This computes the 1st order low-pass filter term b0. @@ -995,9 +999,15 @@ static float rc_calculate_a0(int sample_rate, int cutoff_freq) void check_prefs_changed_audio (void) { - if (!sound_available || !sound_prefs_changed ()) + int ch; + if (!sound_available) return; - clear_sound_buffers(); + ch = sound_prefs_changed (); + if (!ch) + return; + if (ch > 0) { + clear_sound_buffers(); + } set_audio(); audio_activate(); } @@ -1007,32 +1017,42 @@ void set_audio(void) int old_mixed_on = mixed_on; int old_mixed_size = mixed_stereo_size; int sep, delay; + int ch; + + ch = sound_prefs_changed (); + if (ch >= 0) + close_sound (); - close_sound (); currprefs.produce_sound = changed_prefs.produce_sound; currprefs.sound_stereo = changed_prefs.sound_stereo; + currprefs.sound_auto = changed_prefs.sound_auto; + currprefs.sound_freq = changed_prefs.sound_freq; + currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation; currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; - currprefs.sound_auto = changed_prefs.sound_auto; currprefs.sound_interpol = changed_prefs.sound_interpol; - currprefs.sound_freq = changed_prefs.sound_freq; currprefs.sound_filter = changed_prefs.sound_filter; currprefs.sound_filter_type = changed_prefs.sound_filter_type; - if (currprefs.produce_sound >= 2) { - if (!init_audio ()) { - if (! sound_available) { - write_log ("Sound is not supported.\n"); - } else { - write_log ("Sorry, can't initialize sound.\n"); - currprefs.produce_sound = 0; - /* So we don't do this every frame */ - changed_prefs.produce_sound = 0; - } - } - } - next_sample_evtime = scaled_sample_evtime; - last_cycles = get_cycles () - 1; - compute_vsynctime (); + + if (ch >= 0) { + if (currprefs.produce_sound >= 2) { + if (!init_audio ()) { + if (! sound_available) { + write_log ("Sound is not supported.\n"); + } else { + write_log ("Sorry, can't initialize sound.\n"); + currprefs.produce_sound = 0; + /* So we don't do this every frame */ + changed_prefs.produce_sound = 0; + } + } + } + next_sample_evtime = scaled_sample_evtime; + last_cycles = get_cycles () - 1; + compute_vsynctime (); + } else { + sound_volume (0); + } sep = (currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation) * 3 / 2; delay = currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; @@ -1211,7 +1231,7 @@ void audio_hsync (int dmaaction) cdp->pt = cdp->lc; #ifdef DEBUG_AUDIO if (debugchannel (nr)) - write_log ("%d:>5: LEN=%d PT=%08.8X\n", nr, cdp->wlen, cdp->pt); + write_log ("%d:>5: LEN=%d PT=%08X\n", nr, cdp->wlen, cdp->pt); #endif } cdp->dat2 = CHIPMEM_AGNUS_WGET_CUSTOM (cdp->pt); @@ -1244,12 +1264,14 @@ void AUDxDAT (int nr, uae_u16 v) #ifdef DEBUG_AUDIO if (debugchannel (nr)) - write_log ("AUD%dDAT: %04.4X STATE=%d IRQ=%d %08.8X\n", nr, + write_log ("AUD%dDAT: %04X STATE=%d IRQ=%d %08X\n", nr, v, cdp->state, isirq(nr) ? 1 : 0, M68K_GETPC); #endif audio_activate(); update_audio (); cdp->dat2 = v; + if (cdp->request_word >= 2 && cdp->request_word_skip == 0) + audio_handler (nr); cdp->request_word = -1; cdp->request_word_skip = 0; /* cpu >= 68020: another "too fast" memory/CPU hack */ @@ -1292,7 +1314,7 @@ void AUDxPER (int nr, uae_u16 v) if (per < maxhpos * CYCLE_UNIT / 2 && currprefs.produce_sound < 3) per = maxhpos * CYCLE_UNIT / 2; else if (per < 4 * CYCLE_UNIT) - /* smaller value would cause extremely high cpu usage */ + /* smaller values would cause extremely high cpu usage */ per = 4 * CYCLE_UNIT; if (audio_channel[nr].per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { @@ -1349,7 +1371,6 @@ void led_filter_audio (void) led_filter_on = 0; if (led_filter_forced > 0 || (gui_data.powerled && led_filter_forced >= 0)) led_filter_on = 1; - gui_led (0, gui_data.powerled); } uae_u8 *restore_audio (int i, uae_u8 *src) diff --git a/src/autoconf.cpp b/src/autoconf.cpp index 5e02ba22..4dbd0e99 100644 --- a/src/autoconf.cpp +++ b/src/autoconf.cpp @@ -28,7 +28,7 @@ uaecptr EXPANSION_bootcode, EXPANSION_nullfunc; /* ROM tag area memory access */ uae_u8 *rtarea = 0; -uaecptr rtarea_base; +uaecptr rtarea_base = RTAREA_DEFAULT; static uae_u32 REGPARAM3 rtarea_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 rtarea_wget (uaecptr) REGPARAM; @@ -193,8 +193,7 @@ static uae_u32 REGPARAM2 uae_puts (TrapContext *context) return 0; } - -static void rtarea_init_mem (void) +void rtarea_init_mem (void) { if(rtarea != 0) mapped_free(rtarea); @@ -217,6 +216,7 @@ void rtarea_init (void) init_traps (); rtarea_init_mem (); + memset (rtarea, 0, 0x10000); snprintf (uaever, 32, "uae-%d.%d.%d", UAEMAJOR, UAEMINOR, UAESUBREV); @@ -237,10 +237,10 @@ void rtarea_init (void) calltrap (deftrap2 (nullfunc, TRAPFLAG_NO_RETVAL, "")); org (rtarea_base + 0xFF80); - calltrap (deftrap2 (getchipmemsize, TRAPFLAG_DORET, "")); + calltrap (deftrapres (getchipmemsize, TRAPFLAG_DORET, "getchipmemsize")); org (rtarea_base + 0xFF10); - calltrap (deftrap2 (uae_puts, TRAPFLAG_NO_RETVAL, "")); + calltrap (deftrapres (uae_puts, TRAPFLAG_NO_RETVAL, "uae_puts")); dw (RTS); org (a); @@ -248,6 +248,9 @@ void rtarea_init (void) #ifdef FILESYS filesys_install_code (); #endif +#ifdef PICASSO96 + uaegfx_install_code (); +#endif uae_boot_rom_size = here() - rtarea_base; init_extended_traps(); @@ -270,3 +273,32 @@ void rtarea_setup(void) rtarea_base = base; } } + +uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev) +{ + uaecptr datatable = here (); + + dw (0xE000); /* INITBYTE */ + dw (0x0008); /* LN_TYPE */ + dw (type << 8); + dw (0xE000); /* INITBYTE */ + dw (0x0009); /* LN_PRI */ + dw (priority << 8); + dw (0xC000); /* INITLONG */ + dw (0x000A); /* LN_NAME */ + dl (resname); + dw (0xE000); /* INITBYTE */ + dw (0x000E); /* LIB_FLAGS */ + dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ + dw (0xD000); /* INITWORD */ + dw (0x0014); /* LIB_VERSION */ + dw (ver); + dw (0xD000); /* INITWORD */ + dw (0x0016); /* LIB_REVISION */ + dw (rev); + dw (0xC000); /* INITLONG */ + dw (0x0018); /* LIB_IDSTRING */ + dl (resid); + dw (0x0000); /* end of table */ + return datatable; +} diff --git a/src/blitter.cpp b/src/blitter.cpp index 10e5b10a..eee12dc3 100644 --- a/src/blitter.cpp +++ b/src/blitter.cpp @@ -37,8 +37,7 @@ uae_u32 blit_masktable[BLITTER_MAX_WORDS]; enum blitter_states bltstate; static long int blit_cyclecounter; -// blitter_slowdown doesn't work at the moment -//static int blit_slowdown; +static int blit_slowdown; static long blit_firstline_cycles; static long blit_first_cycle; @@ -257,10 +256,14 @@ static void blitter_dofast(void) bltddatptr += 2; } } - if (bltadatptr) bltadatptr += blt_info.bltamod; - if (bltbdatptr) bltbdatptr += blt_info.bltbmod; - if (bltcdatptr) bltcdatptr += blt_info.bltcmod; - if (bltddatptr) bltddatptr += blt_info.bltdmod; + if (bltadatptr) + bltadatptr += blt_info.bltamod; + if (bltbdatptr) + bltbdatptr += blt_info.bltbmod; + if (bltcdatptr) + bltcdatptr += blt_info.bltcmod; + if (bltddatptr) + bltddatptr += blt_info.bltdmod; } if (dstp) CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); @@ -349,10 +352,14 @@ static void blitter_dofast_desc(void) bltddatptr -= 2; } } - if (bltadatptr) bltadatptr -= blt_info.bltamod; - if (bltbdatptr) bltbdatptr -= blt_info.bltbmod; - if (bltcdatptr) bltcdatptr -= blt_info.bltcmod; - if (bltddatptr) bltddatptr -= blt_info.bltdmod; + if (bltadatptr) + bltadatptr -= blt_info.bltamod; + if (bltbdatptr) + bltbdatptr -= blt_info.bltbmod; + if (bltcdatptr) + bltcdatptr -= blt_info.bltcmod; + if (bltddatptr) + bltddatptr -= blt_info.bltdmod; } if (dstp) CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); @@ -499,13 +506,11 @@ void blitter_handler(uae_u32 data) */ } blitter_stuck = 0; - -// blitter_slowdown doesn't work at the moment -// if (blit_slowdown > 0 && !currprefs.immediate_blits) { -// event2_newevent (ev2_blitter, blit_slowdown); -// blit_slowdown = -1; -// return; -// } + if (blit_slowdown > 0 && !currprefs.immediate_blits) { + event2_newevent (ev2_blitter, blit_slowdown); + blit_slowdown = -1; + return; + } actually_do_blit (); blitter_done(); @@ -619,8 +624,8 @@ void do_blitter(void) blit_cyclecounter = cycles * (blit_dmacount2 + (blit_nod ? 0 : 1)); bltstate = BLT_init; -// blitter_slowdown doesn't work at the moment -// blit_slowdown = 0; + + blit_slowdown = 0; if (dmaen(DMA_BLITPRI)) set_special (®s, SPCFLAG_BLTNASTY); @@ -698,9 +703,7 @@ int blitnasty (void) return ccnt; } -// blitter_slowdown doesn't work at the moment (causes gfx glitches in Shadow of the Beast) /* very approximate emulation of blitter slowdown caused by bitplane DMA */ -/* void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles) { static int oddfstrt, oddfstop, ototal, ofree; @@ -711,7 +714,7 @@ void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles if (ddfstrt != oddfstrt || ddfstop != oddfstop || totalcycles != ototal || ofree != freecycles) { int linecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * totalcycles; int freelinecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * freecycles; - int dmacycles = (linecycles * blit_dmacount) / blit_diag[1]; + int dmacycles = (linecycles * blit_dmacount) / blit_diag[0]; oddfstrt = ddfstrt; oddfstop = ddfstop; ototal = totalcycles; @@ -724,7 +727,6 @@ void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles return; blit_slowdown += slow; } -*/ #ifdef SAVESTATE @@ -759,7 +761,7 @@ uae_u8 *save_blitter (int *len, uae_u8 *dstptr) if (dstptr) dstbak = dst = dstptr; else - dstbak = dst = (uae_u8 *)malloc (16); + dstbak = dst = (uae_u8 *)xmalloc (16); save_u32(((bltstate != BLT_done) ? 0 : 1) | forced); *len = dst - dstbak; return dstbak; diff --git a/src/blitter_test.cpp b/src/blitter_test.cpp new file mode 100644 index 00000000..7271b12a --- /dev/null +++ b/src/blitter_test.cpp @@ -0,0 +1,889 @@ + /* + * UAE - The Un*x Amiga Emulator + * + * Custom chip emulation + * + * (c) 1995 Bernd Schmidt, Alessandro Bissacco + * (c) 2002 - 2005 Toni Wilen + */ + + +#include "sysconfig.h" +#include "sysdeps.h" + +#include "options.h" +#include "uae.h" +#include "memory.h" +#include "custom.h" +#include "events.h" +#include "newcpu.h" +#include "blitter.h" +#include "blit_test.h" +#include "savestate.h" + +uae_u16 bltcon0, bltcon1; +uae_u32 bltapt, bltbpt, bltcpt, bltdpt; +uae_u32 preva = 0, prevb = 0; + +int blinea_shift, blitsign; +static uae_u16 blinea, blineb; +static int blitline, blitfc, blitfill, blitife, blitsing, blitdesc; +static int blitonedot; +static int blit_ch; + +struct bltinfo blt_info; + +static uae_u8 blit_filltable[256][4][2]; +uae_u32 blit_masktable[BLITTER_MAX_WORDS]; +enum blitter_states bltstate; + +static long int blit_cyclecounter; +// blitter_slowdown doesn't work at the moment +//static int blit_slowdown; + +static long blit_firstline_cycles; +static long blit_first_cycle; +static int blit_last_cycle, blit_dmacount, blit_dmacount2; +static int blit_nod; +static const int *blit_diag; +static int ddat1use; + +// New vars for blitter mode "partial" +static int blit_total_required_cycles; // Estimated number of cycles of entire blitter op +static int blit_cycles_per_op; // Number of cycles per blitter op +static int blit_cycles_per_vsize; // Number of cycles per line +static int blit_vblitsize_done; // Number of vblitsize-lines are done +static unsigned long blit_cycle_at_start; +static unsigned long blit_init_cycles; // Cycles required for blitter initialisation +static unsigned long blit_cycle_current; +static unsigned long blit_cycle_entered_wait; // At this cycle, blitter entered in wait-state because of disabled DMA + + +/* +Blitter Idle Cycle: + +Cycles that are free cycles (available for CPU) and +are not used by any other Agnus DMA channel. Blitter +idle cycle is not "used" by blitter, CPU can still use +it normally if it needs the bus. + +same in both block and line modes + +number of cycles, initial cycle, main cycle +*/ + +#define DIAGSIZE 10 + +static const int blit_cycle_diagram[][DIAGSIZE] = +{ + { 2, 0,0, 0,0 }, /* 0 -- */ + { 2, 0,0, 0,4 }, /* 1 -D */ + { 2, 0,3, 0,3 }, /* 2 -C */ + { 3, 0,3,0, 0,3,4 }, /* 3 -CD */ + { 3, 0,2,0, 0,2,0 }, /* 4 -B- */ + { 3, 0,2,0, 0,2,4 }, /* 5 -BD */ + { 3, 0,2,3, 0,2,3 }, /* 6 -BC */ + { 4, 0,2,3,0, 0,2,3,4 }, /* 7 -BCD */ + { 2, 1,0, 1,0 }, /* 8 A- */ + { 2, 1,0, 1,4 }, /* 9 AD */ + { 2, 1,3, 1,3 }, /* A AC */ + { 3, 1,3,0, 1,3,4, }, /* B ACD */ + { 3, 1,2,0, 1,2,0 }, /* C AB- */ + { 3, 1,2,0, 1,2,4 }, /* D ABD */ + { 3, 1,2,3, 1,2,3 }, /* E ABC */ + { 4, 1,2,3,0, 1,2,3,4 } /* F ABCD */ +}; + +/* + +following 4 channel combinations in fill mode have extra +idle cycle added (still requires free bus cycle) + +*/ + +static const int blit_cycle_diagram_fill[][DIAGSIZE] = +{ + { 0 }, /* 0 */ + { 3, 0,0,0, 0,4,0 }, /* 1 */ + { 0 }, /* 2 */ + { 0 }, /* 3 */ + { 0 }, /* 4 */ + { 4, 0,2,0,0, 0,2,4,0 }, /* 5 */ + { 0 }, /* 6 */ + { 0 }, /* 7 */ + { 0 }, /* 8 */ + { 3, 1,0,0, 1,4,0 }, /* 9 */ + { 0 }, /* A */ + { 0 }, /* B */ + { 0 }, /* C */ + { 4, 1,2,0,0, 1,2,4,0 }, /* D */ + { 0 }, /* E */ + { 0 }, /* F */ +}; + +/* +-C-D C-D- ... C-D- -- + +line draw takes 4 cycles (-C-D) +idle cycles do the same as above, 2 dma fetches +(read from C, write to D, but see below) + +Oddities: + +- first word is written to address pointed by BLTDPT +but all following writes go to address pointed by BLTCPT! +(some kind of internal copy because all bus cyles are +using normal BLTDDAT) +- BLTDMOD is ignored by blitter (BLTCMOD is used) +- state of D-channel enable bit does not matter! +- disabling A-channel freezes the content of BPLAPT +- C-channel disabled: nothing is written + +There is one tricky situation, writing to DFF058 just before +last D write cycle (which is normally free) does not disturb +blitter operation, final D is still written correctly before +blitter starts normally (after 2 idle cycles) + +There is at least one demo that does this.. + +*/ + +// 5 = internal "processing cycle" +static const int blit_cycle_diagram_line[] = +{ + 4, 0,3,5,4, 0,3,5,4 +}; + +void build_blitfilltable (void) +{ + unsigned int d, fillmask; + int i; + + for (i = 0; i < BLITTER_MAX_WORDS; i++) + blit_masktable[i] = 0xFFFF; + + for (d = 0; d < 256; d++) { + for (i = 0; i < 4; i++) { + int fc = i & 1; + uae_u8 data = d; + for (fillmask = 1; fillmask != 0x100; fillmask <<= 1) { + uae_u16 tmp = data; + if (fc) { + if (i & 2) + data |= fillmask; + else + data ^= fillmask; + } + if (tmp & fillmask) fc = !fc; + } + blit_filltable[d][i][0] = data; + blit_filltable[d][i][1] = fc; + } + } +} + +static __inline__ void blitter_done (void) +{ + ddat1use = 0; + bltstate = BLT_done; + blitter_done_notify (); + INTREQ(0x8040); + event2_remevent(ev2_blitter); + unset_special (®s, SPCFLAG_BLTNASTY); +} + +static void blitter_dofast(void) +{ + int i,j; + uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; + uae_u8 mt = bltcon0 & 0xFF; + blitter_op_func blitter_func_do = blitter_func_tbl[mt]; + + blit_masktable[BLITTER_MAX_WORDS - 1] = blt_info.bltafwm; + blit_masktable[BLITTER_MAX_WORDS - blt_info.hblitsize] &= blt_info.bltalwm; + + if (bltcon0 & 0x800) { + bltadatptr = bltapt; + bltapt += (blt_info.hblitsize*2 + blt_info.bltamod)*blt_info.vblitsize; + } + if (bltcon0 & 0x400) { + bltbdatptr = bltbpt; + bltbpt += (blt_info.hblitsize*2 + blt_info.bltbmod)*blt_info.vblitsize; + } + if (bltcon0 & 0x200) { + bltcdatptr = bltcpt; + bltcpt += (blt_info.hblitsize*2 + blt_info.bltcmod)*blt_info.vblitsize; + } + if (bltcon0 & 0x100) { + bltddatptr = bltdpt; + bltdpt += (blt_info.hblitsize*2 + blt_info.bltdmod)*blt_info.vblitsize; + } + + if (blitfunc_dofast[mt] && !blitfill) { + (*blitfunc_dofast[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); + } else + { + uae_u32 blitbhold = blt_info.bltbhold; + uaecptr dstp = 0; + uae_u32 *blit_masktable_p = blit_masktable + BLITTER_MAX_WORDS - blt_info.hblitsize; + + for (j = blt_info.vblitsize; j--;) { + blitfc = !!(bltcon1 & 0x4); + for (i = blt_info.hblitsize; i--;) { + uae_u32 bltadat, blitahold; + if (bltadatptr) { + blt_info.bltadat = bltadat = CHIPMEM_AGNUS_WGET_CUSTOM (bltadatptr); + bltadatptr += 2; + } else + bltadat = blt_info.bltadat; + bltadat &= blit_masktable_p[i]; + blitahold = (((uae_u32)preva << 16) | bltadat) >> blt_info.blitashift; + preva = bltadat; + + if (bltbdatptr) { + uae_u16 bltbdat; + blt_info.bltbdat = bltbdat = CHIPMEM_AGNUS_WGET_CUSTOM (bltbdatptr); + bltbdatptr += 2; + blitbhold = (((uae_u32)prevb << 16) | bltbdat) >> blt_info.blitbshift; + prevb = bltbdat; + } + if (bltcdatptr) { + blt_info.bltcdat = CHIPMEM_AGNUS_WGET_CUSTOM (bltcdatptr); + bltcdatptr += 2; + } + if (dstp) + CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); +// blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt); + blt_info.bltddat = blitter_func_do (blitahold, blitbhold, blt_info.bltcdat); + if (blitfill) { + uae_u16 d = blt_info.bltddat; + int ifemode = blitife ? 2 : 0; + int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; + blt_info.bltddat = (blit_filltable[d & 255][ifemode + blitfc][0] + + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); + blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; + } + if (blt_info.bltddat) + blt_info.blitzero = 0; + if (bltddatptr) { + dstp = bltddatptr; + bltddatptr += 2; + } + } + if (bltadatptr) bltadatptr += blt_info.bltamod; + if (bltbdatptr) bltbdatptr += blt_info.bltbmod; + if (bltcdatptr) bltcdatptr += blt_info.bltcmod; + if (bltddatptr) bltddatptr += blt_info.bltdmod; + } + if (dstp) + CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); + blt_info.bltbhold = blitbhold; + } + blit_masktable[BLITTER_MAX_WORDS - 1] = 0xFFFF; + blit_masktable[BLITTER_MAX_WORDS - blt_info.hblitsize] = 0xFFFF; + + bltstate = BLT_done; +} + +static void blitter_dofast_desc(void) +{ + int i,j; + uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; + uae_u8 mt = bltcon0 & 0xFF; + blitter_op_func blitter_func_do = blitter_func_tbl[mt]; + + blit_masktable[BLITTER_MAX_WORDS - 1] = blt_info.bltafwm; + blit_masktable[BLITTER_MAX_WORDS - blt_info.hblitsize] &= blt_info.bltalwm; + + if (bltcon0 & 0x800) { + bltadatptr = bltapt; + bltapt -= (blt_info.hblitsize*2 + blt_info.bltamod)*blt_info.vblitsize; + } + if (bltcon0 & 0x400) { + bltbdatptr = bltbpt; + bltbpt -= (blt_info.hblitsize*2 + blt_info.bltbmod)*blt_info.vblitsize; + } + if (bltcon0 & 0x200) { + bltcdatptr = bltcpt; + bltcpt -= (blt_info.hblitsize*2 + blt_info.bltcmod)*blt_info.vblitsize; + } + if (bltcon0 & 0x100) { + bltddatptr = bltdpt; + bltdpt -= (blt_info.hblitsize*2 + blt_info.bltdmod)*blt_info.vblitsize; + } + if (blitfunc_dofast_desc[mt] && !blitfill) { + (*blitfunc_dofast_desc[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); + } else + { + uae_u32 blitbhold = blt_info.bltbhold; + uaecptr dstp = 0; + uae_u32 *blit_masktable_p = blit_masktable + BLITTER_MAX_WORDS - blt_info.hblitsize; + + for (j = blt_info.vblitsize; j--;) { + blitfc = !!(bltcon1 & 0x4); + for (i = blt_info.hblitsize; i--;) { + uae_u32 bltadat, blitahold; + if (bltadatptr) { + blt_info.bltadat = bltadat = CHIPMEM_AGNUS_WGET_CUSTOM (bltadatptr); + bltadatptr -= 2; + } else + bltadat = blt_info.bltadat; + bltadat &= blit_masktable_p[i]; + blitahold = (((uae_u32)bltadat << 16) | preva) >> blt_info.blitdownashift; + preva = bltadat; + + if (bltbdatptr) { + uae_u16 bltbdat; + blt_info.bltbdat = bltbdat = CHIPMEM_AGNUS_WGET_CUSTOM (bltbdatptr); + bltbdatptr -= 2; + blitbhold = (((uae_u32)bltbdat << 16) | prevb) >> blt_info.blitdownbshift; + prevb = bltbdat; + } + + if (bltcdatptr) { + blt_info.bltcdat = blt_info.bltbdat = CHIPMEM_AGNUS_WGET_CUSTOM (bltcdatptr); + bltcdatptr -= 2; + } + if (dstp) + CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); +// blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt); + blt_info.bltddat = blitter_func_do (blitahold, blitbhold, blt_info.bltcdat); + if (blitfill) { + uae_u16 d = blt_info.bltddat; + int ifemode = blitife ? 2 : 0; + int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; + blt_info.bltddat = (blit_filltable[d & 255][ifemode + blitfc][0] + + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); + blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; + } + if (blt_info.bltddat) + blt_info.blitzero = 0; + if (bltddatptr) { + dstp = bltddatptr; + bltddatptr -= 2; + } + } + if (bltadatptr) bltadatptr -= blt_info.bltamod; + if (bltbdatptr) bltbdatptr -= blt_info.bltbmod; + if (bltcdatptr) bltcdatptr -= blt_info.bltcmod; + if (bltddatptr) bltddatptr -= blt_info.bltdmod; + } + if (dstp) + CHIPMEM_AGNUS_WPUT_CUSTOM (dstp, blt_info.bltddat); + blt_info.bltbhold = blitbhold; + } + blit_masktable[BLITTER_MAX_WORDS - 1] = 0xFFFF; + blit_masktable[BLITTER_MAX_WORDS - blt_info.hblitsize] = 0xFFFF; + + bltstate = BLT_done; +} + +STATIC_INLINE void blitter_read(void) +{ + if (bltcon0 & 0x200) { + blt_info.bltcdat = CHIPMEM_AGNUS_WGET_CUSTOM(bltcpt); + } +} + +STATIC_INLINE void blitter_write(void) +{ + if (blt_info.bltddat) + blt_info.blitzero = 0; + /* D-channel state has no effect on linedraw, but C must be enabled or nothing is drawn! */ + if (bltcon0 & 0x200) { + CHIPMEM_AGNUS_WPUT_CUSTOM(bltdpt, blt_info.bltddat); + } +} + +STATIC_INLINE void blitter_line_incx(void) +{ + if (++blinea_shift == 16) { + blinea_shift = 0; + bltcpt += 2; + } +} + +STATIC_INLINE void blitter_line_decx(void) +{ + if (blinea_shift-- == 0) { + blinea_shift = 15; + bltcpt -= 2; + } +} + +STATIC_INLINE void blitter_line_decy(void) +{ + bltcpt -= blt_info.bltcmod; + blitonedot = 0; +} + +STATIC_INLINE void blitter_line_incy(void) +{ + bltcpt += blt_info.bltcmod; + blitonedot = 0; +} + +static int blitter_line(void) +{ + uae_u16 blitahold = (blinea & blt_info.bltafwm) >> blinea_shift; + + blt_info.bltbhold = (blineb & 1) ? 0xFFFF : 0; + int blitlinepixel = !blitsing || (blitsing && !blitonedot); +// blt_info.bltddat = blit_func (blitahold, blt_info.bltbhold, blt_info.bltcdat, bltcon0 & 0xFF); + blt_info.bltddat = blitter_func_tbl[bltcon0 & 0xFF] (blitahold, blt_info.bltbhold, blt_info.bltcdat); + blitonedot++; + + if (bltcon0 & 0x800) { + if (blitsign) + bltapt += (uae_s16)blt_info.bltbmod; + else + bltapt += (uae_s16)blt_info.bltamod; + } + + if (!blitsign) { + if (bltcon1 & 0x10) { + if (bltcon1 & 0x8) + blitter_line_decy (); + else + blitter_line_incy (); + } else { + if (bltcon1 & 0x8) + blitter_line_decx (); + else + blitter_line_incx (); + } + } + if (bltcon1 & 0x10) { + if (bltcon1 & 0x4) + blitter_line_decx (); + else + blitter_line_incx (); + } else { + if (bltcon1 & 0x4) + blitter_line_decy (); + else + blitter_line_incy (); + } + + blitsign = 0 > (uae_s16)bltapt; + return blitlinepixel; +} + +STATIC_INLINE void blitter_nxline(void) +{ + blineb = (blineb << 1) | (blineb >> 15); + blt_info.vblitsize--; +} + +static void actually_do_blit(void) +{ + if (blitline) { + do { + blitter_read (); + if (ddat1use) + bltdpt = bltcpt; + ddat1use = 1; + if (blitter_line ()) { + blitter_write (); + } + blitter_nxline (); + if (blt_info.vblitsize == 0) + bltstate = BLT_done; + } while (bltstate != BLT_done); + if(!currprefs.pandora_partial_blits) + bltdpt = bltcpt; + } else { + if (blitdesc) + blitter_dofast_desc (); + else + blitter_dofast (); + bltstate = BLT_done; + } +} + +static __inline__ void blitter_doit(void) +{ + actually_do_blit (); + blitter_done(); +} + +void blitter_handler(uae_u32 data) +{ + static int blitter_stuck; + + if (!dmaen (DMA_BLITTER)) { + event2_newevent (ev2_blitter, 10); + blitter_stuck++; + if (blitter_stuck < 20000 || !currprefs.immediate_blits) + return; /* gotta come back later. */ + /* "free" blitter in immediate mode if it has been "stuck" ~3 frames + * fixes some JIT game incompatibilities + */ + } + blitter_stuck = 0; + + if(currprefs.pandora_partial_blits) + { + blitter_do_partial(1); + return; + } + +// blitter_slowdown doesn't work at the moment +// if (blit_slowdown > 0 && !currprefs.immediate_blits) { +// event2_newevent (ev2_blitter, blit_slowdown); +// blit_slowdown = -1; +// return; +// } + + blitter_doit(); +} + +static void blitter_force_finish (void) +{ + uae_u16 odmacon; + if (bltstate == BLT_done) + return; + if (bltstate != BLT_done) { + /* blitter is currently running + * force finish (no blitter state support yet) + */ + odmacon = dmacon; + dmacon |= DMA_MASTER | DMA_BLITTER; + write_log ("forcing blitter finish\n"); + actually_do_blit (); + blitter_done (); + dmacon = odmacon; + } +} + +static __inline__ void blit_bltset (int con) +{ + int i; + + if (con & 2) { + blitdesc = bltcon1 & 2; + blt_info.blitbshift = bltcon1 >> 12; + blt_info.blitdownbshift = 16 - blt_info.blitbshift; + } + + if (con & 1) { + blt_info.blitashift = bltcon0 >> 12; + blt_info.blitdownashift = 16 - blt_info.blitashift; + } + + blit_ch = (bltcon0 & 0x0f00) >> 8; + blitline = bltcon1 & 1; + blitfill = !!(bltcon1 & 0x18); + + if (blitline) { + blit_diag = blit_cycle_diagram_line; + } else { + if (con & 2) { + blitfc = !!(bltcon1 & 0x4); + blitife = !!(bltcon1 & 0x8); + if ((bltcon1 & 0x18) == 0x18) { + blitife = 0; + } + } + blit_diag = blitfill && blit_cycle_diagram_fill[blit_ch][0] ? blit_cycle_diagram_fill[blit_ch] : blit_cycle_diagram[blit_ch]; + } + + blit_dmacount = blit_dmacount2 = 0; + blit_nod = 1; + for (i = 0; i < blit_diag[0]; i++) { + int v = blit_diag[1 + blit_diag[0] + i]; + if (v <= 4) + blit_dmacount++; + if (v > 0 && v < 4) + blit_dmacount2++; + if (v == 4) + blit_nod = 0; + } + if (blit_dmacount2 == 0) { + ddat1use = 0; + } +} + +static void blitter_start_init(void) +{ + blt_info.blitzero = 1; + preva = 0; + prevb = 0; + + blit_bltset (1 | 2); + ddat1use = 0; + + if (blitline) { + blinea = blt_info.bltadat; + blineb = (blt_info.bltbdat >> blt_info.blitbshift) | (blt_info.bltbdat << (16 - blt_info.blitbshift)); + blitonedot = 0; + blitsing = bltcon1 & 0x2; + } +} + +void do_blitter(void) +{ + int cycles; + + bltstate = BLT_done; + + blit_firstline_cycles = blit_first_cycle = get_cycles (); + blit_last_cycle = 0; + blit_cyclecounter = 0; + + blitter_start_init (); + + if(currprefs.pandora_partial_blits) + { + blit_cycle_entered_wait = 0; + if(blitline) + { + blit_cycles_per_op = blit_dmacount2 + (blit_nod ? 0 : 1); + //blit_cycles_per_op = blit_diag[0]; + blit_cycles_per_vsize = blit_cycles_per_op; + blit_init_cycles = 2; // HRM says nothing about how much cycles required for blitter initialisation + } + else + { + blit_cycles_per_op = blit_dmacount2 + (blit_nod ? 0 : 1); + //blit_cycles_per_op = blit_diag[0]; + blit_cycles_per_vsize = blit_cycles_per_op * blt_info.hblitsize; + blit_init_cycles = 2; // HRM says nothing about how much cycles required for blitter initialisation + // Used from code below so that maybe_blit behaves same as in normal mode + blit_firstline_cycles = blit_first_cycle + (blit_diag[0] * blt_info.hblitsize + cpu_cycles) * CYCLE_UNIT; + } + blit_total_required_cycles = blit_cycles_per_vsize * blt_info.vblitsize; + blit_cyclecounter = blit_init_cycles + blit_total_required_cycles; + blit_init_cycles *= CYCLE_UNIT; + blit_vblitsize_done = 0; + } + else + { + if (blitline) { + cycles = blt_info.vblitsize; + } else { + cycles = blt_info.vblitsize * blt_info.hblitsize; + blit_firstline_cycles = blit_first_cycle + (blit_diag[0] * blt_info.hblitsize + cpu_cycles) * CYCLE_UNIT; + } + blit_cyclecounter = cycles * (blit_dmacount2 + (blit_nod ? 0 : 1)); + } + + bltstate = BLT_init; +// blitter_slowdown doesn't work at the moment +// blit_slowdown = 0; + + if (dmaen(DMA_BLITPRI)) + set_special (®s, SPCFLAG_BLTNASTY); + else + unset_special (®s, SPCFLAG_BLTNASTY); + + if(!dmaen (DMA_BLITTER)) + return; + + bltstate = BLT_work; + + if (blitline && blt_info.hblitsize != 2) { + blitter_done (); + return; + } + + if (currprefs.immediate_blits) { + blitter_doit (); + return; + } + + if(currprefs.pandora_partial_blits) + { + blit_cycle_at_start = get_cycles(); + blit_cycle_current = blit_cycle_at_start; + } + + event2_newevent(ev2_blitter, blit_cyclecounter); +} + +void blitter_dma_disabled(void) +{ + if(bltstate != BLT_work || !currprefs.pandora_partial_blits) + return; + // execute blitter till current cycle + blitter_do_partial(0); + if(bltstate == BLT_work) + { + // We still have something to do... + bltstate = BLT_waitDMA; + blit_cycle_entered_wait = get_cycles(); + event2_remevent(ev2_blitter); + } +} + +void blitter_dma_enabled(void) +{ + if(bltstate != BLT_waitDMA || !currprefs.pandora_partial_blits) + return; + + bltstate = BLT_work; + // Add cycles we waited to current cycles... + unsigned long cycles_waited = get_cycles() - blit_cycle_entered_wait; + blit_cycle_current += cycles_waited; + event2_remevent(ev2_blitter); + event2_newevent(ev2_blitter, cycles_waited); + blit_cycle_entered_wait = 0; +} + +void blitter_do_partial(int do_all) +{ + if(bltstate != BLT_work && bltstate != BLT_waitDMA) + return; + + if (!dmaen (DMA_BLITTER) && !do_all) + return; + + unsigned long curr_cpu_cycles = get_cycles(); + if((curr_cpu_cycles < blit_cycle_current + blit_init_cycles) && !do_all) + return; // Blitter not finished with initialisation + if(blit_init_cycles > 0) + { + blit_cycle_current += blit_init_cycles; + blit_init_cycles = 0; + } + + int num_lines = 0; + while(curr_cpu_cycles > blit_cycle_current || do_all) + { + num_lines++; + blit_cycle_current += blit_cycles_per_vsize * CYCLE_UNIT; + if(num_lines + blit_vblitsize_done >= blt_info.vblitsize) + break; + } + + if(num_lines > 0) + { + int tmp_vblitsize = blt_info.vblitsize; + blt_info.vblitsize = num_lines; + actually_do_blit(); + blt_info.vblitsize = tmp_vblitsize; + blit_vblitsize_done += num_lines; + if(blit_vblitsize_done >= blt_info.vblitsize) + { + if(blitline) + bltdpt = bltcpt; + blitter_done(); + } + else + bltstate = BLT_work; // still not finished + } +} + +// Called only from custom.cpp if blitter DMA is now enabled +void blitter_check_start (void) +{ + if (bltstate != BLT_init) + return; + + // do the same as in do_blitter after dmaen check + bltstate = BLT_work; + + if (blitline && blt_info.hblitsize != 2) { + blitter_done (); + return; + } + + if (currprefs.immediate_blits) { + blitter_doit (); + return; + } + + if(currprefs.pandora_partial_blits) + { + blit_cycle_at_start = get_cycles(); + blit_cycle_current = blit_cycle_at_start; + } + + event2_newevent(ev2_blitter, blit_cyclecounter); +} + +void maybe_blit (int hack) +{ + if (bltstate == BLT_done) + return; + if (savestate_state) + return; + + if (hack && get_cycles() < blit_firstline_cycles) + return; + + blitter_handler (0); +} + +int blitnasty (void) +{ + int cycles, ccnt; + if (bltstate == BLT_done) + return 0; + if (!dmaen (DMA_BLITTER)) + return 0; + if (blit_last_cycle >= blit_diag[0] && blit_dmacount == blit_diag[0]) + return 0; + cycles = (get_cycles () - blit_first_cycle) / CYCLE_UNIT; + ccnt = 0; + while (blit_last_cycle < cycles) { + int c; + if (blit_last_cycle < blit_diag[0]) + c = blit_diag[1 + blit_last_cycle]; + else + c = blit_diag[1 + blit_diag[0] + ((blit_last_cycle - blit_diag[0]) % blit_diag[0])]; + blit_last_cycle++; + if (!c) + ccnt++; + } + return ccnt; +} + +// blitter_slowdown doesn't work at the moment (causes gfx glitches in Shadow of the Beast) +/* very approximate emulation of blitter slowdown caused by bitplane DMA */ +/* +void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles) +{ +} +*/ + +#ifdef SAVESTATE + +uae_u8 *restore_blitter (uae_u8 *src) +{ + uae_u32 flags = restore_u32(); + + bltstate = (flags & 1) ? BLT_init : BLT_done; + return src; +} + +void restore_blitter_finish(void) +{ + if (bltstate == BLT_init) { + write_log ("blitter was started but DMA was inactive during save\n"); + do_blitter (); + } +} + +uae_u8 *save_blitter (int *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak,*dst; + int forced; + + forced = 0; + if (bltstate != BLT_done && bltstate != BLT_init) { + write_log ("blitter is active, forcing immediate finish\n"); + /* blitter is active just now but we don't have blitter state support yet */ + blitter_force_finish (); + forced = 2; + } + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = (uae_u8 *)malloc (16); + save_u32(((bltstate != BLT_done) ? 0 : 1) | forced); + *len = dst - dstbak; + return dstbak; +} + +#endif /* SAVESTATE */ diff --git a/src/build68k.c b/src/build68k.c index f5d5fe09..d71ce834 100644 --- a/src/build68k.c +++ b/src/build68k.c @@ -283,13 +283,13 @@ int main(int argc, char **argv) while (!isspace(*p++)); *p = 0; printf("/* %s */\n", tmp); - printf("{0x%04.4X,%2d,{", bitpattern, n_variable); + printf("{0x%04X,%2d,{", bitpattern, n_variable); for (j = 0; j < 16; j++) { printf("%2d", bitpos[j]); if (j < 15) printf(","); } - printf ("},0x%04.4X,%d,%d,{", bitmask, cpulevel, plevel); + printf ("},0x%04X,%d,%d,{", bitmask, cpulevel, plevel); for(i = 0; i < 5; i++) { printf("{%d,%d}%s", flaguse[i], flagset[i], i == 4 ? "" : ","); } diff --git a/src/cfgfile.cpp b/src/cfgfile.cpp index c1f68cc9..cd302d7e 100644 --- a/src/cfgfile.cpp +++ b/src/cfgfile.cpp @@ -31,6 +31,7 @@ static int config_newfilesystem; static struct strlist *temp_lines; static struct zfile *default_file; +static int uaeconfig; /* @@@ need to get rid of this... just cut part of the manual and print that * as a help text. */ @@ -133,6 +134,7 @@ static const char *collmode[] = { "none", "sprites", "playfields", "full", 0 }; static const char *compmode[] = { "direct", "indirect", "indirectKS", "afterPic", 0 }; static const char *flushmode[] = { "soft", "hard", 0 }; static const char *kbleds[] = { "none", "POWER", "DF0", "DF1", "DF2", "DF3", "HD", "CD", 0 }; +static const char *onscreenleds[] = { "false", "true", "rtg", "both", 0 }; static const char *soundfiltermode1[] = { "off", "emulated", "on", 0 }; static const char *soundfiltermode2[] = { "standard", "enhanced", 0 }; static const char *lorestype1[] = { "lores", "hires", "superhires" }; @@ -155,15 +157,17 @@ static const char *cscompa[] = { static const char *fullmodes[] = { "false", "true", /* "FILE_NOT_FOUND", */ "fullwindow", 0 }; /* bleh for compatibility */ static const char *scsimode[] = { "false", "true", "scsi", 0 }; +static const char *maxhoriz[] = { "lores", "hires", "superhires", 0 }; +static const char *maxvert[] = { "nointerlace", "interlace", 0 }; static const char *obsolete[] = { "accuracy", "gfx_opengl", "gfx_32bit_blits", "32bit_blits", "gfx_immediate_blits", "gfx_ntsc", "win32", "gfx_filter_bits", - "sound_pri_cutoff", "sound_pri_time", "sound_min_buff", + "sound_pri_cutoff", "sound_pri_time", "sound_min_buff", "sound_bits", "gfx_test_speed", "gfxlib_replacement", "enforcer", "catweasel_io", "kickstart_key_file", "sound_adjust", - "serial_hardware_dtrdsr", - 0 + "serial_hardware_dtrdsr", "gfx_filter_upscale", + NULL }; #define UNEXPANDED "$(FILE_PATH)" @@ -207,7 +211,7 @@ char *cfgfile_subst_path (const char *path, const char *subst, const char *file) static int isdefault (const char *s) { char tmp[MAX_DPATH]; - if (!default_file) + if (!default_file || uaeconfig) return 0; zfile_fseek (default_file, 0, SEEK_SET); while (zfile_fgets (tmp, sizeof tmp, default_file)) { @@ -235,7 +239,7 @@ void cfgfile_dwrite (struct zfile *f, const char *format,...) va_start (parms, format); vsprintf (tmp, format, parms); - if (1 || !isdefault (tmp)) + if (!isdefault (tmp)) zfile_fwrite (tmp, 1, strlen (tmp), f); va_end (parms); } @@ -400,13 +404,15 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "synchronize_clock=%s\n", p->tod_hack ? "yes" : "no"); - cfgfile_dwrite (f, "gfx_framerate=%d\n", p->gfx_framerate); - cfgfile_dwrite (f, "gfx_width=%d\n", p->gfx_size.width); - cfgfile_dwrite (f, "gfx_height=%d\n", p->gfx_size.height); - cfgfile_dwrite (f, "gfx_width_windowed=%d\n", p->gfx_size_win.width); - cfgfile_dwrite (f, "gfx_height_windowed=%d\n", p->gfx_size_win.height); - cfgfile_dwrite (f, "gfx_width_fullscreen=%d\n", p->gfx_size_fs.width); - cfgfile_dwrite (f, "gfx_height_fullscreen=%d\n", p->gfx_size_fs.height); + cfgfile_write (f, "gfx_framerate=%d\n", p->gfx_framerate); + cfgfile_write (f, "gfx_width=%d\n", p->gfx_size.width); + cfgfile_write (f, "gfx_height=%d\n", p->gfx_size.height); + cfgfile_write (f, "gfx_width_windowed=%d\n", p->gfx_size_win.width); + cfgfile_write (f, "gfx_height_windowed=%d\n", p->gfx_size_win.height); + cfgfile_write (f, "gfx_width_fullscreen=%d\n", p->gfx_size_fs.width); + cfgfile_write (f, "gfx_height_fullscreen=%d\n", p->gfx_size_fs.height); + cfgfile_write (f, "gfx_lores=%s\n", p->gfx_resolution == 0 ? "true" : "false"); + cfgfile_write (f, "gfx_resolution=%s\n", lorestype1[p->gfx_resolution]); #ifdef RASPBERRY cfgfile_dwrite (f, "gfx_correct_aspect=%d\n", p->gfx_correct_aspect); @@ -451,6 +457,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "cpu_24bit_addressing=%s\n", p->address_space_24 ? "true" : "false"); /* do not reorder end */ cfgfile_write (f, "rtg_nocustom=%s\n", p->picasso96_nocustom ? "true" : "false"); + cfgfile_write (f, "rtg_modes=0x%x\n", p->picasso96_modeflags); #ifdef FILESYS write_filesys_config (p, UNEXPANDED, p->path_hardfile, f); @@ -649,7 +656,10 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) || cfgfile_strval (option, value, "sound_filter_type", &p->sound_filter_type, soundfiltermode2, 0) || cfgfile_strval (option, value, "use_gui", &p->start_gui, guimode1, 1) || cfgfile_strval (option, value, "use_gui", &p->start_gui, guimode2, 1) - || cfgfile_strval (option, value, "use_gui", &p->start_gui, guimode3, 0)) + || cfgfile_strval (option, value, "use_gui", &p->start_gui, guimode3, 0) + || cfgfile_strval (option, value, "gfx_resolution", &p->gfx_resolution, lorestype1, 0) + || cfgfile_strval (option, value, "gfx_lores", &p->gfx_resolution, lorestype2, 0) + ) return 1; @@ -660,8 +670,29 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) } if (cfgfile_string (option, value, "statefile", tmpbuf, sizeof (tmpbuf))) { - savestate_state = STATE_DORESTORE; strcpy (savestate_fname, tmpbuf); + if (zfile_exists (savestate_fname)) { + savestate_state = STATE_DORESTORE; + } else { + int ok = 0; + if (savestate_fname[0]) { + for (;;) { + char *p; + if (my_existsdir (savestate_fname)) { + ok = 1; + break; + } + p = strrchr (savestate_fname, '\\'); + if (!p) + p = strrchr (savestate_fname, '/'); + if (!p) + break; + *p = 0; + } + } + if (!ok) + savestate_fname[0] = 0; + } return 1; } @@ -763,7 +794,7 @@ struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index, static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *value) { - int tmpval, dummy, i; + int tmpval, dummyint, i; char *section = 0; char tmpbuf[CONFIG_BLEN]; @@ -782,7 +813,9 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *valu || cfgfile_intval (option, value, "z3mem_start", (int *) &p->z3fastmem_start, 1) || cfgfile_intval (option, value, "bogomem_size", (int *) &p->bogomem_size, 0x40000) || cfgfile_intval (option, value, "gfxcard_size", (int *) &p->gfxmem_size, 0x100000) + || cfgfile_intval (option, value, "rtg_modes", &p->picasso96_modeflags, 1) || cfgfile_intval (option, value, "floppy_speed", &p->floppy_speed, 1) + || cfgfile_intval (option, value, "floppy_write_length", &p->floppy_write_length, 1) || cfgfile_intval (option, value, "nr_floppies", &p->nr_floppies, 1) || cfgfile_intval (option, value, "floppy0type", &p->dfxtype[0], 1) || cfgfile_intval (option, value, "floppy1type", &p->dfxtype[1], 1) @@ -801,13 +834,13 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *valu return 1; } - if (cfgfile_intval (option, value, "chipmem_size", &dummy, 1)) { - if (dummy < 0) + if (cfgfile_intval (option, value, "chipmem_size", &dummyint, 1)) { + if (dummyint < 0) p->chipmem_size = 0x20000; /* 128k, prototype support */ - else if (dummy == 0) + else if (dummyint == 0) p->chipmem_size = 0x40000; /* 256k */ else - p->chipmem_size = dummy * 0x80000; + p->chipmem_size = dummyint * 0x80000; return 1; } @@ -1236,7 +1269,7 @@ static int cfgfile_load_2 (struct uae_prefs *p, const char *filename, int real, if (real) { cfgfile_parse_separated_line (p, line1b, line2b, askedtype); } else { - cfgfile_string (line1b, line2b, "config_description", p->description, 128); + cfgfile_string (line1b, line2b, "config_description", p->description, sizeof p->description); } } } @@ -1324,7 +1357,7 @@ int cfgfile_get_description (const char *filename, char *description) if (description) strcpy (description, p->description); } - free (p); + xfree (p); return result; } @@ -1616,6 +1649,7 @@ void default_prefs (struct uae_prefs *p, int type) p->gfx_size_win.height = 240; p->gfx_size_fs.width = 640; p->gfx_size_fs.height = 480; + p->gfx_resolution = 0; #ifdef RASPBERRY p->gfx_correct_aspect = 1; #endif @@ -1627,6 +1661,7 @@ void default_prefs (struct uae_prefs *p, int type) p->fast_copper = 1; p->cpu_idle = 0; p->floppy_speed = 100; + p->floppy_write_length = 0; p->tod_hack = 1; p->picasso96_nocustom = 1; @@ -1674,7 +1709,6 @@ void default_prefs (struct uae_prefs *p, int type) p->dfxtype[1] = DRV_35_DD; p->dfxtype[2] = DRV_NONE; p->dfxtype[3] = DRV_NONE; - p->floppy_speed = 100; target_default_options (p, type); diff --git a/src/cia.cpp b/src/cia.cpp index a9aa29f0..1615cd1a 100644 --- a/src/cia.cpp +++ b/src/cia.cpp @@ -24,6 +24,7 @@ #include "inputdevice.h" #include "audio.h" #include "keyboard.h" +#include "ersatz.h" #define TOD_HACK @@ -49,13 +50,12 @@ static unsigned int ciaapra, ciaaprb, ciaadra, ciaadrb, ciaasdr, ciaasdr_cnt; static unsigned int ciabprb, ciabdra, ciabdrb, ciabsdr, ciabsdr_cnt; static int div10; static int kbstate, kback, ciaasdr_unread; -static unsigned int sleepyhead = 0; +static unsigned int sleepyhead; #ifdef TOD_HACK static int tod_hack, tod_hack_delay; #endif - static __inline__ void setclr (unsigned int *_GCCRES_ p, unsigned int val) { if (val & 0x80) { @@ -330,7 +330,7 @@ void CIA_hsync_handler (void) ciab_checkalarm (1); } - if ((keys_available() || kbstate < 2) && kback && (ciaacra & 0x40) == 0 && (hsync_counter & 15) == 0) { + if ((keys_available() || kbstate < 3) && kback && (ciaacra & 0x40) == 0 && (hsync_counter & 15) == 0) { /* * This hack lets one possible ciaaicr cycle go by without any key * being read, for every cycle in which a key is pulled out of the @@ -348,14 +348,21 @@ void CIA_hsync_handler (void) } else if (ciaasdr_unread == 0) { switch (kbstate) { case 0: - setcode (AK_INIT_POWERUP); + ciaasdr = 0; /* powerup resync */ kbstate++; + ciaasdr_unread = 3; break; case 1: - setcode (AK_TERM_POWERUP); + setcode (AK_INIT_POWERUP); kbstate++; + ciaasdr_unread = 3; break; case 2: + setcode (AK_TERM_POWERUP); + kbstate++; + ciaasdr_unread = 3; + break; + case 3: ciaasdr = ~get_next_key(); ciaasdr_unread = 1; /* interlock to prevent lost keystrokes */ break; @@ -364,7 +371,10 @@ void CIA_hsync_handler (void) RethinkICRA(); sleepyhead = 0; } else if (!(++sleepyhead & 15)) { - ciaasdr_unread = 0; /* give up on this key event after unread for a long time */ + if (ciaasdr_unread == 3) + ciaaicr |= 8; + if (ciaasdr_unread < 3) + ciaasdr_unread = 0; /* give up on this key event after unread for a long time */ } } } @@ -392,7 +402,7 @@ void CIA_vsync_handler () if (tod_hack_delay == 0) { tod_hack_reset (); tod_hack_delay = 0; - write_log ("TOD_HACK re-initialized CIATOD=%06.6X\n", ciaatod); + write_log ("TOD_HACK re-initialized CIATOD=%06X\n", ciaatod); } } if (tod_hack_delay == 0) { @@ -404,7 +414,7 @@ void CIA_vsync_handler () ciaatod = nt; ciaatod &= 0xffffff; ciaa_checkalarm (0); - return; + return; } } #endif @@ -418,22 +428,21 @@ void CIA_vsync_handler () static void bfe001_change (void) { uae_u8 v = ciaapra; + int led; v |= ~ciaadra; /* output is high when pin's direction is input */ - if ((v & 2) != oldled) { - int led = (v & 2) ? 0 : 1; - oldled = v & 2; + led = (v & 2) ? 0 : 1; + if (led != oldled) { + oldled = led; gui_data.powerled = led; led_filter_audio(); } - if ((v & 1) != oldovl) { - oldovl = v & 1; - if (!oldovl || ersatzkickfile) { + if (!(currprefs.chipset_mask & CSMASK_AGA) && (v & 1) != oldovl) { + oldovl = v & 1; + if (!oldovl || ersatzkickfile) map_overlay (1); - } else if (!(currprefs.chipset_mask & CSMASK_AGA)) { - /* pin disconnected in AGA chipset, CD audio mute on/off on CD32 */ + else map_overlay (0); - } } } @@ -502,7 +511,7 @@ static uae_u8 ReadCIAA (unsigned int addr) } return (uae_u8)(ciaatol >> 16); case 12: - if (ciaasdr_unread == 1) + if (ciaasdr_unread >= 1) ciaasdr_unread = 2; return ciaasdr; case 13: @@ -592,6 +601,10 @@ static uae_u8 ReadCIAB (unsigned int addr) static void WriteCIAA (uae_u16 addr,uae_u8 val) { + if ((currprefs.chipset_mask & CSMASK_AGA) && oldovl) { + map_overlay (1); + oldovl = 0; + } switch (addr & 0xf) { case 0: ciaapra = (ciaapra & ~0xc3) | (val & 0xc3); @@ -816,12 +829,13 @@ void CIA_reset (void) tod_hack_reset (); #endif kback = 1; - kbstate = 0; + kbstate = 3; ciaasdr_unread = 0; - oldovl = -1; + oldovl = 1; oldled = -1; if (!savestate_state) { + kbstate = 0; ciaatlatch = ciabtlatch = 0; ciaapra = 0; ciaadra = 0; ciaatod = ciabtod = 0; ciaatodon = ciabtodon = 0; @@ -838,8 +852,11 @@ void CIA_reset (void) } CIA_calctimers (); - if (! ersatzkickfile) + if (ersatzkickfile) + ersatz_chipcopy (); + else map_overlay (0); + oldovl = 1; if (savestate_state) { bfe001_change (); /* select drives */ diff --git a/src/cpudefs.cpp b/src/cpudefs.cpp index bcf39318..982c0e10 100644 --- a/src/cpudefs.cpp +++ b/src/cpudefs.cpp @@ -113,7 +113,7 @@ struct instr_def defs68k[] = { /* MVMLE.L */ {0x48C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 2,"MVMLE.L #1,d[!Dreg,Areg,Aipi]"}, /* EXT.B */ -{0x49C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}}, 0, 48,"EXT.B d[Dreg]"}, +{0x49C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{1,1},{1,0},{1,0},{1,2},{1,2}}, 0, 48,"EXT.B d[Dreg]"}, /* TST.z */ {0x4A00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}}, 0, 16,"TST.z s"}, /* TAS.B */ @@ -161,7 +161,7 @@ struct instr_def defs68k[] = { /* JSR.L */ {0x4E80, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}}, 2, 128,"JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd]"}, /* CHK.L */ -{0x4100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,5},{1,5},{1,5}}, 4, 17,"CHK.L s[!Areg],Dr"}, +{0x4100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,{{1,1},{1,0},{1,5},{1,5},{1,5}}, 4, 17,"CHK.L s[!Areg],Dr"}, /* CHK.W */ {0x4180, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,5},{1,5},{1,5}}, 4, 17,"CHK.W s[!Areg],Dr"}, /* JMP.L */ @@ -336,12 +336,8 @@ struct instr_def defs68k[] = { {0xF300, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 32,"FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]"}, /* FRESTORE */ {0xF340, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 16,"FRESTORE s[!Dreg,Areg,Apdi,Immd]"}, -/* MMUOP30A */ -{0xF000, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 4, 17,"MMUOP30A s[!Immd],#1"}, -/* MMUOP30B */ -{0xF800, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 4, 17,"MMUOP30B s[!Immd]"}, -/* MMUOP */ -{0xF500, 8,{ 5, 5, 5, 5, 5,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,4,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 4, 17,"MMUOP #i,s"}, +/* MMUOP030 */ +{0xF000, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,2,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 4, 17,"MMUOP030 s[!Immd],#1"}, /* CINVL */ {0xF408, 5,{19,19,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 2,"CINVL #p,Ar"}, /* CINVP */ @@ -354,6 +350,18 @@ struct instr_def defs68k[] = { {0xF430, 5,{19,19,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 2,"CPUSHP #p,Ar"}, /* CPUSHA */ {0xF438, 5,{19,19,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"CPUSHA #p"}, +/* PFLUSHN */ +{0xF500, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PFLUSHN Ara"}, +/* PFLUSH */ +{0xF508, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PFLUSH Ara"}, +/* PFLUSHAN */ +{0xF510, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PFLUSHAN Ara"}, +/* PFLUSHA */ +{0xF518, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PFLUSHA Ara"}, +/* PTESTR */ +{0xF548, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PTESTR Ara"}, +/* PTESTW */ +{0xF568, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PTESTW Ara"}, /* MOVE16 */ {0xF620, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 18,"MOVE16 ArP,AxP"}, /* MOVE16 */ @@ -363,5 +371,11 @@ struct instr_def defs68k[] = { /* MOVE16 */ {0xF600, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 18,"MOVE16 s[Aind],Al"}, /* MOVE16 */ -{0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 18,"MOVE16 Al,d[Aipi-Aind]"}}; -int n_defs68k = 181; +{0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0, 18,"MOVE16 Al,d[Aipi-Aind]"}, +/* LPSTOP */ +{0xF800, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,5,2,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 4, 16,"LPSTOP #1"}, +/* PLPAR */ +{0xF588, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,5,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PLPAR Ara"}, +/* PLPAW */ +{0xF5C8, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,5,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 4, 0,"PLPAW Ara"}}; +int n_defs68k = 188; diff --git a/src/cpuemu_0.cpp b/src/cpuemu_0.cpp index f65d95e6..fa82ab79 100644 --- a/src/cpuemu_0.cpp +++ b/src/cpuemu_0.cpp @@ -282,13 +282,12 @@ return 16 * CYCLE_UNIT / 2; /* ORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_007c_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel18; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr |= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel18: ; return 15 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ @@ -425,10 +424,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00d0_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel27; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 4); -endlabel27: ; return 22 * CYCLE_UNIT / 2; } #endif @@ -445,10 +443,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00e8_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel28; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel28: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -467,9 +464,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00f0_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel29; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel29: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -485,10 +482,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00f8_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel30; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel30: ; return 25 * CYCLE_UNIT / 2; } #endif @@ -504,10 +500,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00f9_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel31; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 8); -endlabel31: ; return 28 * CYCLE_UNIT / 2; } #endif @@ -525,10 +520,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00fa_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel32; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel32: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -549,9 +543,9 @@ unsigned long REGPARAM2 CPUFUNC(op_00fb_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel33; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel33: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -1468,13 +1462,12 @@ return 16 * CYCLE_UNIT / 2; /* ANDSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_027c_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel96; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr &= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel96: ; return 15 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ @@ -1611,10 +1604,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02d0_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel105; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 4); -endlabel105: ; return 22 * CYCLE_UNIT / 2; } #endif @@ -1631,10 +1623,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02e8_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel106; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel106: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -1653,9 +1644,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02f0_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel107; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel107: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -1671,10 +1662,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02f8_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel108; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel108: ; return 25 * CYCLE_UNIT / 2; } #endif @@ -1690,10 +1680,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02f9_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel109; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 8); -endlabel109: ; return 28 * CYCLE_UNIT / 2; } #endif @@ -1711,10 +1700,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02fa_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel110; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel110: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -1735,9 +1723,9 @@ unsigned long REGPARAM2 CPUFUNC(op_02fb_0)(uae_u32 opcode, struct regstruct *reg if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel111; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel111: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -2236,10 +2224,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04d0_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel136; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 4); -endlabel136: ; return 22 * CYCLE_UNIT / 2; } #endif @@ -2255,10 +2242,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04e8_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel137; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel137: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -2276,9 +2262,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04f0_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel138; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel138: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -2293,10 +2279,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04f8_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel139; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel139: ; return 25 * CYCLE_UNIT / 2; } #endif @@ -2311,10 +2296,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04f9_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel140; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 8); -endlabel140: ; return 28 * CYCLE_UNIT / 2; } #endif @@ -2331,10 +2315,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04fa_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel141; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } }}} m68k_incpc (regs, 6); -endlabel141: ; return 33 * CYCLE_UNIT / 2; } #endif @@ -2354,9 +2337,9 @@ unsigned long REGPARAM2 CPUFUNC(op_04fb_0)(uae_u32 opcode, struct regstruct *reg lower = get_long(dsta); upper = get_long(dsta+4); SET_ZFLG (®s->ccrflags, upper == reg || lower == reg); SET_CFLG_ALWAYS (®s->ccrflags, lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); - if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); goto endlabel142; } + if ((extra & 0x800) && GET_CFLG (®s->ccrflags)) { Exception(6, regs, oldpc); return 32 * CYCLE_UNIT / 2; } } -}}}}endlabel142: ; +}}}} return 29 * CYCLE_UNIT / 2; } #endif @@ -2848,9 +2831,8 @@ return 18 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_06c0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* RTM.L An */ @@ -2858,9 +2840,8 @@ unsigned long REGPARAM2 CPUFUNC(op_06c0_0)(uae_u32 opcode, struct regstruct *reg unsigned long REGPARAM2 CPUFUNC(op_06c8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (An) */ @@ -2868,9 +2849,8 @@ unsigned long REGPARAM2 CPUFUNC(op_06c8_0)(uae_u32 opcode, struct regstruct *reg unsigned long REGPARAM2 CPUFUNC(op_06d0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (d16,An) */ @@ -2878,9 +2858,8 @@ unsigned long REGPARAM2 CPUFUNC(op_06d0_0)(uae_u32 opcode, struct regstruct *reg unsigned long REGPARAM2 CPUFUNC(op_06e8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (d8,An,Xn) */ @@ -2888,45 +2867,40 @@ unsigned long REGPARAM2 CPUFUNC(op_06e8_0)(uae_u32 opcode, struct regstruct *reg unsigned long REGPARAM2 CPUFUNC(op_06f0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_06f8_0)(uae_u32 opcode, struct regstruct *regs) { -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_06f9_0)(uae_u32 opcode, struct regstruct *regs) { -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_06fa_0)(uae_u32 opcode, struct regstruct *regs) { -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_06fb_0)(uae_u32 opcode, struct regstruct *regs) { -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 4 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* BTST.L #.W,Dn */ @@ -3755,13 +3729,12 @@ return 16 * CYCLE_UNIT / 2; /* EORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_0a7c_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel234; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr ^= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel234: ; return 15 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ @@ -4837,7 +4810,7 @@ return 25 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e10_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel288; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4851,7 +4824,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e10_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 4); -endlabel288: ; return 10 * CYCLE_UNIT / 2; } #endif @@ -4860,7 +4832,7 @@ return 10 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e18_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel289; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4876,7 +4848,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e18_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 4); -endlabel289: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -4885,7 +4856,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e20_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel290; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4903,7 +4874,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e20_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 4); -endlabel290: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -4912,7 +4882,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e28_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel291; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4926,7 +4896,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e28_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 8); -endlabel291: ; return 20 * CYCLE_UNIT / 2; } #endif @@ -4935,7 +4904,7 @@ return 20 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e30_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel292; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4951,7 +4920,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0e30_0)(uae_u32 opcode, struct regstruct *reg } else { m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } -}}}}}}}endlabel292: ; +}}}}}}} return 15 * CYCLE_UNIT / 2; } #endif @@ -4959,7 +4928,7 @@ return 15 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0e38_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel293; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4973,7 +4942,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e38_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 8); -endlabel293: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -4981,7 +4949,7 @@ return 12 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0e39_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel294; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -4995,7 +4963,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e39_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}} m68k_incpc (regs, 12); -endlabel294: ; return 13 * CYCLE_UNIT / 2; } #endif @@ -5004,7 +4971,7 @@ return 13 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e50_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel295; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5018,7 +4985,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e50_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 4); -endlabel295: ; return 10 * CYCLE_UNIT / 2; } #endif @@ -5027,7 +4993,7 @@ return 10 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e58_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel296; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5043,7 +5009,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e58_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 4); -endlabel296: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5052,7 +5017,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e60_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel297; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5070,7 +5035,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e60_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 4); -endlabel297: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5079,7 +5043,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e68_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel298; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5093,7 +5057,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e68_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 8); -endlabel298: ; return 20 * CYCLE_UNIT / 2; } #endif @@ -5102,7 +5065,7 @@ return 20 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e70_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel299; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5118,7 +5081,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0e70_0)(uae_u32 opcode, struct regstruct *reg } else { m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } -}}}}}}}endlabel299: ; +}}}}}}} return 15 * CYCLE_UNIT / 2; } #endif @@ -5126,7 +5089,7 @@ return 15 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0e78_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel300; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5140,7 +5103,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e78_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 8); -endlabel300: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5148,7 +5110,7 @@ return 12 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0e79_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel301; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5162,7 +5124,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e79_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (m68k_dreg(regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}} m68k_incpc (regs, 12); -endlabel301: ; return 13 * CYCLE_UNIT / 2; } #endif @@ -5171,7 +5132,7 @@ return 13 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e90_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel302; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5185,7 +5146,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e90_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 4); -endlabel302: ; return 10 * CYCLE_UNIT / 2; } #endif @@ -5194,7 +5154,7 @@ return 10 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0e98_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel303; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5210,7 +5170,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0e98_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 4); -endlabel303: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5219,7 +5178,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0ea0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel304; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5237,7 +5196,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ea0_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 4); -endlabel304: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5246,7 +5204,7 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0ea8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel305; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5260,7 +5218,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ea8_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 8); -endlabel305: ; return 20 * CYCLE_UNIT / 2; } #endif @@ -5269,7 +5226,7 @@ return 20 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_0eb0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel306; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5285,7 +5242,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0eb0_0)(uae_u32 opcode, struct regstruct *reg } else { m68k_dreg(regs, (extra >> 12) & 7) = (src); } -}}}}}}}endlabel306: ; +}}}}}}} return 15 * CYCLE_UNIT / 2; } #endif @@ -5293,7 +5250,7 @@ return 15 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0eb8_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel307; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5307,7 +5264,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0eb8_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 8); -endlabel307: ; return 12 * CYCLE_UNIT / 2; } #endif @@ -5315,7 +5271,7 @@ return 12 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_0eb9_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel308; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 extra = get_iword (regs, 2); if (extra & 0x800) { uae_u32 src = regs->regs[(extra >> 12) & 15]; @@ -5329,7 +5285,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0eb9_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, (extra >> 12) & 7) = (src); } }}}}}} m68k_incpc (regs, 12); -endlabel308: ; return 13 * CYCLE_UNIT / 2; } #endif @@ -10543,97 +10498,90 @@ return 15 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_40c0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel645; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ MakeSR(regs); m68k_dreg(regs, srcreg) = (m68k_dreg(regs, srcreg) & ~0xffff) | ((regs->sr) & 0xffff); }}} m68k_incpc (regs, 2); -endlabel645: ; return 5 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ unsigned long REGPARAM2 CPUFUNC(op_40d0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel646; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel646: ; return 9 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ unsigned long REGPARAM2 CPUFUNC(op_40d8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel647; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); m68k_areg(regs, srcreg) += 2; MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel647: ; return 9 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ unsigned long REGPARAM2 CPUFUNC(op_40e0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel648; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel648: ; return 9 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ unsigned long REGPARAM2 CPUFUNC(op_40e8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel649; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel649: ; return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_40f0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel650; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca; m68k_incpc (regs, 2); { srca = get_disp_ea_020(regs, m68k_areg(regs, srcreg), next_iword(regs)); MakeSR(regs); put_word (srca,regs->sr); -}}}}endlabel650: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ unsigned long REGPARAM2 CPUFUNC(op_40f8_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel651; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel651: ; return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ unsigned long REGPARAM2 CPUFUNC(op_40f9_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel652; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = get_ilong (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 6); -endlabel652: ; return 12 * CYCLE_UNIT / 2; } /* CHK.L Dn,Dn */ @@ -10648,13 +10596,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4100_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel653; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel653; + return 32 * CYCLE_UNIT / 2; } -}}}endlabel653: ; +}}} return 8 * CYCLE_UNIT / 2; } /* CHK.L (An),Dn */ @@ -10670,13 +10618,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4110_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel654; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel654; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel654: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* CHK.L (An)+,Dn */ @@ -10693,13 +10641,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4118_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel655; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel655; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel655: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* CHK.L -(An),Dn */ @@ -10717,13 +10665,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4120_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel656; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel656; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel656: ; +}}}} return 13 * CYCLE_UNIT / 2; } /* CHK.L (d16,An),Dn */ @@ -10739,13 +10687,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4128_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel657; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel657; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel657: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.L (d8,An,Xn),Dn */ @@ -10762,13 +10710,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4130_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel658; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel658; + return 32 * CYCLE_UNIT / 2; } -}}}}}endlabel658: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.L (xxx).W,Dn */ @@ -10783,13 +10731,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4138_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel659; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel659; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel659: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.L (xxx).L,Dn */ @@ -10804,13 +10752,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4139_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel660; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel660; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel660: ; +}}}} return 15 * CYCLE_UNIT / 2; } /* CHK.L (d16,PC),Dn */ @@ -10826,13 +10774,13 @@ unsigned long REGPARAM2 CPUFUNC(op_413a_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel661; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel661; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel661: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.L (d8,PC,Xn),Dn */ @@ -10850,13 +10798,13 @@ unsigned long REGPARAM2 CPUFUNC(op_413b_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel662; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel662; + return 32 * CYCLE_UNIT / 2; } -}}}}}endlabel662: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.L #.L,Dn */ @@ -10870,13 +10818,13 @@ unsigned long REGPARAM2 CPUFUNC(op_413c_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel663; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel663; + return 32 * CYCLE_UNIT / 2; } -}}}endlabel663: ; +}}} return 13 * CYCLE_UNIT / 2; } /* CHK.W Dn,Dn */ @@ -10891,13 +10839,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4180_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel664; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel664; + return 32 * CYCLE_UNIT / 2; } -}}}endlabel664: ; +}}} return 8 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ @@ -10913,13 +10861,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4190_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel665; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel665; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel665: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ @@ -10936,13 +10884,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4198_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel666; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel666; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel666: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ @@ -10960,13 +10908,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a0_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel667; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel667; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel667: ; +}}}} return 13 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ @@ -10982,13 +10930,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a8_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel668; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel668; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel668: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ @@ -11005,13 +10953,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b0_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel669; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel669; + return 32 * CYCLE_UNIT / 2; } -}}}}}endlabel669: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ @@ -11026,13 +10974,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b8_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel670; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel670; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel670: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ @@ -11047,13 +10995,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b9_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel671; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel671; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel671: ; +}}}} return 15 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ @@ -11069,13 +11017,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41ba_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel672; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel672; + return 32 * CYCLE_UNIT / 2; } -}}}}endlabel672: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ @@ -11093,13 +11041,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bb_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel673; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel673; + return 32 * CYCLE_UNIT / 2; } -}}}}}endlabel673: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ @@ -11113,13 +11061,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bc_0)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel674; + return 32 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel674; + return 32 * CYCLE_UNIT / 2; } -}}}endlabel674: ; +}}} return 11 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ @@ -12530,46 +12478,43 @@ return 13 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_46c0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel773; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 src = m68k_dreg(regs, srcreg); regs->sr = src; MakeFromSR(regs); }}} m68k_incpc (regs, 2); -endlabel773: ; return 11 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ unsigned long REGPARAM2 CPUFUNC(op_46d0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel774; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel774: ; return 15 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ unsigned long REGPARAM2 CPUFUNC(op_46d8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel775; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel775: ; return 15 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ unsigned long REGPARAM2 CPUFUNC(op_46e0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel776; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; { uae_s16 src = get_word (srca); @@ -12577,77 +12522,72 @@ unsigned long REGPARAM2 CPUFUNC(op_46e0_0)(uae_u32 opcode, struct regstruct *reg regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel776: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ unsigned long REGPARAM2 CPUFUNC(op_46e8_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel777; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel777: ; return 17 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46f0_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel778; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca; m68k_incpc (regs, 2); { srca = get_disp_ea_020(regs, m68k_areg(regs, srcreg), next_iword(regs)); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); -}}}}}endlabel778: ; +}}}}} return 19 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ unsigned long REGPARAM2 CPUFUNC(op_46f8_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel779; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel779: ; return 17 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ unsigned long REGPARAM2 CPUFUNC(op_46f9_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel780; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = get_ilong (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 6); -endlabel780: ; return 18 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ unsigned long REGPARAM2 CPUFUNC(op_46fa_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel781; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_getpc (regs) + 2; srca += (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel781: ; return 17 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46fb_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel782; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uaecptr tmppc; uaecptr srca; m68k_incpc (regs, 2); @@ -12656,18 +12596,17 @@ unsigned long REGPARAM2 CPUFUNC(op_46fb_0)(uae_u32 opcode, struct regstruct *reg { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); -}}}}}endlabel782: ; +}}}}} return 19 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_46fc_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel783; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); regs->sr = src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel783: ; return 14 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ @@ -12874,9 +12813,8 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_4848_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{ m68k_incpc (regs, 2); - op_illg(opcode, regs); -}return 10 * CYCLE_UNIT / 2; + m68k_incpc (regs, 2); + return op_illg(opcode, regs); } #endif /* PEA.L (An) */ @@ -13889,6 +13827,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c40_0)(uae_u32 opcode, struct regstruct *reg if (extra & 0x800) cyc = 12; { uae_s32 dst = m68k_dreg(regs, dstreg); m68k_incpc (regs, 2); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}return (cyc + 82) * CYCLE_UNIT / 2; } @@ -13906,6 +13848,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c50_0)(uae_u32 opcode, struct regstruct *reg { uaecptr dsta = m68k_areg(regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_incpc (regs, 2); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 83) * CYCLE_UNIT / 2; } @@ -13924,6 +13870,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c58_0)(uae_u32 opcode, struct regstruct *reg { uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; m68k_incpc (regs, 2); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 86) * CYCLE_UNIT / 2; } @@ -13943,6 +13893,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c60_0)(uae_u32 opcode, struct regstruct *reg { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpc (regs, 2); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 85) * CYCLE_UNIT / 2; } @@ -13960,6 +13914,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c68_0)(uae_u32 opcode, struct regstruct *reg { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s32 dst = get_long (dsta); m68k_incpc (regs, 4); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 94) * CYCLE_UNIT / 2; } @@ -13978,6 +13936,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c70_0)(uae_u32 opcode, struct regstruct *reg m68k_incpc (regs, 2); { dsta = get_disp_ea_020(regs, m68k_areg(regs, dstreg), next_iword(regs)); { uae_s32 dst = get_long (dsta); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}}return (cyc + 90) * CYCLE_UNIT / 2; } @@ -13994,6 +13956,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c78_0)(uae_u32 opcode, struct regstruct *reg { uaecptr dsta = (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s32 dst = get_long (dsta); m68k_incpc (regs, 4); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 86) * CYCLE_UNIT / 2; } @@ -14010,6 +13976,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c79_0)(uae_u32 opcode, struct regstruct *reg { uaecptr dsta = get_ilong (regs, 2); { uae_s32 dst = get_long (dsta); m68k_incpc (regs, 6); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 89) * CYCLE_UNIT / 2; } @@ -14028,6 +13998,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c7a_0)(uae_u32 opcode, struct regstruct *reg dsta += (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s32 dst = get_long (dsta); m68k_incpc (regs, 4); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}return (cyc + 94) * CYCLE_UNIT / 2; } @@ -14048,6 +14022,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c7b_0)(uae_u32 opcode, struct regstruct *reg { tmppc = m68k_getpc(regs); dsta = get_disp_ea_020(regs, tmppc, next_iword(regs)); { uae_s32 dst = get_long (dsta); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}}}return (cyc + 90) * CYCLE_UNIT / 2; } @@ -14063,6 +14041,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4c7c_0)(uae_u32 opcode, struct regstruct *reg if (extra & 0x800) cyc = 12; { uae_s32 dst = get_ilong (regs, 2); m68k_incpc (regs, 6); + if (dst == 0) { + Exception (5, regs, oldpc); + return 32 * CYCLE_UNIT / 2;; + } m68k_divl(opcode, dst, extra, oldpc); }}}}return (cyc + 87) * CYCLE_UNIT / 2; } @@ -14324,30 +14306,27 @@ return 7 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_4e60_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel901; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s32 src = m68k_areg(regs, srcreg); regs->usp = src; }}} m68k_incpc (regs, 2); -endlabel901: ; return 3 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ unsigned long REGPARAM2 CPUFUNC(op_4e68_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel902; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ m68k_areg(regs, srcreg) = (regs->usp); }}} m68k_incpc (regs, 2); -endlabel902: ; return 3 * CYCLE_UNIT / 2; } /* RESET.L */ unsigned long REGPARAM2 CPUFUNC(op_4e70_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); return 4 * CYCLE_UNIT / 2; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { cpureset(); }} m68k_incpc (regs, 2); -endlabel903: ; return 519 * CYCLE_UNIT / 2; } /* NOP.L */ @@ -14359,19 +14338,19 @@ return 3 * CYCLE_UNIT / 2; /* STOP.L #.W */ unsigned long REGPARAM2 CPUFUNC(op_4e72_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel905; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); regs->sr = src; MakeFromSR(regs); m68k_setstopped(regs, 1); m68k_incpc (regs, 4); -}}}endlabel905: ; +}}} return 8 * CYCLE_UNIT / 2; } /* RTE.L */ unsigned long REGPARAM2 CPUFUNC(op_4e73_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel906; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { uae_u16 newsr; uae_u32 newpc; for (;;) { { uaecptr sra = m68k_areg(regs, 7); { uae_s16 sr = get_word (sra); @@ -14386,20 +14365,24 @@ unsigned long REGPARAM2 CPUFUNC(op_4e73_0)(uae_u32 opcode, struct regstruct *reg if ((format & 0xF000) == 0x0000) { break; } else if ((format & 0xF000) == 0x1000) { ; } else if ((format & 0xF000) == 0x2000) { m68k_areg(regs, 7) += 4; break; } - else if ((format & 0xF000) == 0x7000) { m68k_areg(regs, 7) += 52; break; } + else if ((format & 0xF000) == 0x4000) { m68k_areg(regs, 7) += 8; break; } + else if ((format & 0xF000) == 0x7000) { m68k_areg(regs, 7) += 52; break; } else if ((format & 0xF000) == 0x8000) { m68k_areg(regs, 7) += 50; break; } else if ((format & 0xF000) == 0x9000) { m68k_areg(regs, 7) += 12; break; } else if ((format & 0xF000) == 0xa000) { m68k_areg(regs, 7) += 24; break; } else if ((format & 0xF000) == 0xb000) { m68k_areg(regs, 7) += 84; break; } - else { Exception(14, regs, 0); goto endlabel906; } + else { Exception(14, regs, 0); return 50 * CYCLE_UNIT / 2; } regs->sr = newsr; MakeFromSR(regs); } }}}}}} regs->sr = newsr; MakeFromSR(regs); if (newpc & 1) + { exception3 (0x4E73, m68k_getpc(regs), newpc); + return 50 * CYCLE_UNIT / 2; + } else m68k_setpc(regs, newpc); -}}endlabel906: ; +}} return 24 * CYCLE_UNIT / 2; } /* RTD.L #.W */ @@ -14411,7 +14394,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4e74_0)(uae_u32 opcode, struct regstruct *reg { uae_s16 offs = get_iword (regs, 2); m68k_areg(regs, 7) += offs; if (pc & 1) + { exception3 (0x4E74, m68k_getpc(regs), pc); + return 50 * CYCLE_UNIT / 2; + } else m68k_setpc(regs, pc); }}}}return 12 * CYCLE_UNIT / 2; @@ -14425,15 +14411,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4e75_0)(uae_u32 opcode, struct regstruct *reg /* TRAPV.L */ unsigned long REGPARAM2 CPUFUNC(op_4e76_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 5; { m68k_incpc (regs, 2); if (GET_VFLG (®s->ccrflags)) { Exception (7, regs, m68k_getpc (regs)); - cyc = 32; - goto endlabel909; + return 32 * CYCLE_UNIT / 2; } -}endlabel909: ; -return cyc * CYCLE_UNIT / 2; +} +return 5 * CYCLE_UNIT / 2; } /* RTR.L */ unsigned long REGPARAM2 CPUFUNC(op_4e77_0)(uae_u32 opcode, struct regstruct *regs) @@ -14454,28 +14438,34 @@ unsigned long REGPARAM2 CPUFUNC(op_4e77_0)(uae_u32 opcode, struct regstruct *reg #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_4e7a_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel911; } + int cyc; +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs->regs + regno; - if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel911; + cyc = m68k_movec2(src & 0xFFF, regp); + if (cyc) goto endlabel911; + cyc = 7; }}}} m68k_incpc (regs, 4); endlabel911: ; -return 7 * CYCLE_UNIT / 2; +return cyc * CYCLE_UNIT / 2; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_4e7b_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel912; } + int cyc; +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs->regs + regno; - if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel912; + cyc = m68k_move2c(src & 0xFFF, regp); + if (cyc) goto endlabel912; + cyc = 13; }}}} m68k_incpc (regs, 4); endlabel912: ; -return 13 * CYCLE_UNIT / 2; +return cyc * CYCLE_UNIT / 2; } #endif /* JSR.L (An) */ @@ -14486,12 +14476,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4e90_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 2; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel913; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel913: ; +}}} return 13 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ @@ -14502,12 +14492,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4ea8_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel914; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel914: ; +}}} return 15 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ @@ -14520,12 +14510,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb0_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 0; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel915; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}}endlabel915: ; +}}}} return 17 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ @@ -14535,12 +14525,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb8_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel916; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel916: ; +}}} return 13 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ @@ -14550,12 +14540,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb9_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 6; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel917; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel917: ; +}}} return 13 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ @@ -14566,12 +14556,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eba_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel918; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel918: ; +}}} return 15 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ @@ -14585,12 +14575,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4ebb_0)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 0; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel919; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}}endlabel919: ; +}}}} return 17 * CYCLE_UNIT / 2; } /* JMP.L (An) */ @@ -14600,10 +14590,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ed0_0)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel920; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel920: ; +}} return 9 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ @@ -14613,10 +14603,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ee8_0)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel921; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel921: ; +}} return 11 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ @@ -14628,10 +14618,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef0_0)(uae_u32 opcode, struct regstruct *reg { srca = get_disp_ea_020(regs, m68k_areg(regs, srcreg), next_iword(regs)); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel922; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}}endlabel922: ; +}}} return 13 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ @@ -14640,10 +14630,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef8_0)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel923; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel923: ; +}} return 9 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ @@ -14652,10 +14642,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef9_0)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = get_ilong (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel924; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel924: ; +}} return 9 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ @@ -14665,10 +14655,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4efa_0)(uae_u32 opcode, struct regstruct *reg srca += (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel925; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel925: ; +}} return 11 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ @@ -14681,10 +14671,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4efb_0)(uae_u32 opcode, struct regstruct *reg srca = get_disp_ea_020(regs, tmppc, next_iword(regs)); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel926; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}}endlabel926: ; +}}} return 13 * CYCLE_UNIT / 2; } /* ADD.B #,Dn */ @@ -15243,14 +15233,14 @@ unsigned long REGPARAM2 CPUFUNC(op_50c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel954; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel954: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -15329,35 +15319,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_50fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel962; } + if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel962: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_50fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel963; } + if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel963: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_50fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel964; } +{ if (cctrue(®s->ccrflags, 0)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel964: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* SUB.B #,Dn */ @@ -15913,14 +15897,14 @@ unsigned long REGPARAM2 CPUFUNC(op_51c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel992; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel992: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -15999,35 +15983,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_51fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1000; } + if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1000: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_51fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1001; } + if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1001: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_51fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1002; } +{ if (cctrue(®s->ccrflags, 1)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1002: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16052,14 +16030,14 @@ unsigned long REGPARAM2 CPUFUNC(op_52c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1004; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1004: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16138,35 +16116,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_52fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1012; } + if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1012: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_52fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1013; } + if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1013: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_52fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1014; } +{ if (cctrue(®s->ccrflags, 2)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1014: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16191,14 +16163,14 @@ unsigned long REGPARAM2 CPUFUNC(op_53c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1016; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1016: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16277,35 +16249,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_53fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1024; } + if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1024: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_53fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1025; } + if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1025: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_53fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1026; } +{ if (cctrue(®s->ccrflags, 3)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1026: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16330,14 +16296,14 @@ unsigned long REGPARAM2 CPUFUNC(op_54c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1028; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1028: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16416,35 +16382,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_54fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1036; } + if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1036: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_54fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1037; } + if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1037: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_54fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1038; } +{ if (cctrue(®s->ccrflags, 4)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1038: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16469,14 +16429,14 @@ unsigned long REGPARAM2 CPUFUNC(op_55c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1040; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1040: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16555,35 +16515,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_55fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1048; } + if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1048: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_55fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1049; } + if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1049: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_55fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1050; } +{ if (cctrue(®s->ccrflags, 5)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1050: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16608,14 +16562,14 @@ unsigned long REGPARAM2 CPUFUNC(op_56c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1052; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1052: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16694,35 +16648,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_56fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1060; } + if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1060: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_56fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1061; } + if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1061: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_56fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1062; } +{ if (cctrue(®s->ccrflags, 6)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1062: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16747,14 +16695,14 @@ unsigned long REGPARAM2 CPUFUNC(op_57c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1064; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1064: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16833,35 +16781,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_57fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1072; } + if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1072: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_57fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1073; } + if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1073: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_57fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1074; } +{ if (cctrue(®s->ccrflags, 7)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1074: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -16886,14 +16828,14 @@ unsigned long REGPARAM2 CPUFUNC(op_58c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1076; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1076: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -16972,35 +16914,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_58fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1084; } + if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1084: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_58fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1085; } + if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1085: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_58fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1086; } +{ if (cctrue(®s->ccrflags, 8)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1086: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17025,14 +16961,14 @@ unsigned long REGPARAM2 CPUFUNC(op_59c8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1088; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1088: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17111,35 +17047,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_59fa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1096; } + if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1096: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_59fb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1097; } + if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1097: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_59fc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1098; } +{ if (cctrue(®s->ccrflags, 9)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1098: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17164,14 +17094,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5ac8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1100; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1100: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17250,35 +17180,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5afa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1108; } + if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1108: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5afb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1109; } + if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1109: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5afc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1110; } +{ if (cctrue(®s->ccrflags, 10)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1110: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17303,14 +17227,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5bc8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1112; + } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1112: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17389,35 +17313,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5bfa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1120; } + if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1120: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5bfb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1121; } + if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1121: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5bfc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1122; } +{ if (cctrue(®s->ccrflags, 11)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1122: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17442,14 +17360,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5cc8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1124; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1124: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17528,35 +17446,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5cfa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1132; } + if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1132: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5cfb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1133; } + if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1133: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5cfc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1134; } +{ if (cctrue(®s->ccrflags, 12)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1134: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17581,14 +17493,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5dc8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1136; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1136: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17667,35 +17579,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5dfa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1144; } + if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1144: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5dfb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1145; } + if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1145: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5dfc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1146; } +{ if (cctrue(®s->ccrflags, 13)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1146: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17720,14 +17626,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5ec8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1148; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1148: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17806,35 +17712,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5efa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1156; } + if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1156: ; -return 25 * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5efb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1157; } + if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1157: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5efc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1158; } +{ if (cctrue(®s->ccrflags, 14)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1158: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ @@ -17859,14 +17759,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5fc8_0)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1160; + return 50 * CYCLE_UNIT / 2; } return 7 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1160: ; +}}} return 10 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17945,35 +17845,29 @@ return 11 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5ffa_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; {{ uae_s16 dummy = get_iword (regs, 2); - if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1168; } + if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 4); -endlabel1168: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5ffb_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 12; {{ uae_s32 dummy = get_ilong (regs, 2); - if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1169; } + if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } }} m68k_incpc (regs, 6); -endlabel1169: ; -return cyc * CYCLE_UNIT / 2; +return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_5ffc_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 cyc = 10; -{ if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); cyc = 33; goto endlabel1170; } +{ if (cctrue(®s->ccrflags, 15)) { Exception(7, regs, m68k_getpc(regs)); return 33 * CYCLE_UNIT / 2; } } m68k_incpc (regs, 2); -endlabel1170: ; -return cyc * CYCLE_UNIT / 2; +return 10 * CYCLE_UNIT / 2; } #endif /* Bcc.W #.W */ @@ -17983,13 +17877,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6000_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1171; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1171: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18000,13 +17894,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6001_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1172; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1172: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18016,13 +17910,13 @@ unsigned long REGPARAM2 CPUFUNC(op_60ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1173; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1173: ; +}} return 9 * CYCLE_UNIT / 2; } /* BSR.W #.W */ @@ -18033,10 +17927,10 @@ unsigned long REGPARAM2 CPUFUNC(op_6100_0)(uae_u32 opcode, struct regstruct *reg s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel1174; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 4, s); -}}endlabel1174: ; +}} return 13 * CYCLE_UNIT / 2; } /* BSR.B # */ @@ -18048,10 +17942,10 @@ unsigned long REGPARAM2 CPUFUNC(op_6101_0)(uae_u32 opcode, struct regstruct *reg s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel1175; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 2, s); -}}endlabel1175: ; +}} return 13 * CYCLE_UNIT / 2; } /* BSR.L #.L */ @@ -18062,10 +17956,10 @@ unsigned long REGPARAM2 CPUFUNC(op_61ff_0)(uae_u32 opcode, struct regstruct *reg s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel1176; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 6, s); -}}endlabel1176: ; +}} return 13 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18075,13 +17969,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6200_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1177; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1177: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18092,13 +17986,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6201_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1178; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1178: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18108,13 +18002,13 @@ unsigned long REGPARAM2 CPUFUNC(op_62ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1179; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1179: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18124,13 +18018,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6300_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1180; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1180: ; +}} return 7 * CYCLE_UNIT / 2; } #endif @@ -18144,13 +18038,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6301_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1181; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1181: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18160,13 +18054,13 @@ unsigned long REGPARAM2 CPUFUNC(op_63ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1182; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1182: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18176,13 +18070,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6400_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1183; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1183: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18193,13 +18087,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6401_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1184; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1184: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18209,13 +18103,13 @@ unsigned long REGPARAM2 CPUFUNC(op_64ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1185; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1185: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18225,13 +18119,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6500_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1186; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1186: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18242,13 +18136,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6501_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1187; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1187: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18258,13 +18152,13 @@ unsigned long REGPARAM2 CPUFUNC(op_65ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1188; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1188: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18274,13 +18168,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6600_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1189; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1189: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18291,13 +18185,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6601_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1190; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1190: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18307,13 +18201,13 @@ unsigned long REGPARAM2 CPUFUNC(op_66ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1191; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1191: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18323,13 +18217,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6700_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1192; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1192: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18340,13 +18234,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6701_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1193; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1193: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18356,13 +18250,13 @@ unsigned long REGPARAM2 CPUFUNC(op_67ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1194; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1194: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18372,13 +18266,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6800_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1195; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1195: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18389,13 +18283,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6801_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1196; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1196: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18405,13 +18299,13 @@ unsigned long REGPARAM2 CPUFUNC(op_68ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1197; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1197: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18421,13 +18315,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6900_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1198; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1198: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18438,13 +18332,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6901_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1199; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1199: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18454,13 +18348,13 @@ unsigned long REGPARAM2 CPUFUNC(op_69ff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1200; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1200: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18470,13 +18364,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6a00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1201; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1201: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18487,13 +18381,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6a01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1202; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1202: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18503,13 +18397,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6aff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1203; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1203: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18519,13 +18413,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6b00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1204; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1204: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18536,13 +18430,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6b01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1205; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1205: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18552,13 +18446,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6bff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1206; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1206: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18568,13 +18462,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6c00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1207; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1207: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18585,13 +18479,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6c01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1208; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1208: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18601,13 +18495,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6cff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1209; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1209: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18617,13 +18511,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6d00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1210; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1210: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18634,13 +18528,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6d01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1211; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1211: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18650,13 +18544,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6dff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1212; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1212: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18666,13 +18560,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6e00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1213; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1213: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18683,13 +18577,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6e01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1214; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1214: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18699,13 +18593,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6eff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1215; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1215: ; +}} return 9 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -18715,13 +18609,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6f00_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1216; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1216: ; +}} return 7 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -18732,13 +18626,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6f01_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1217; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1217: ; +}} return 5 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ @@ -18748,13 +18642,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6fff_0)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1218; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 9 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 6); -}}endlabel1218: ; +}} return 9 * CYCLE_UNIT / 2; } /* MOVE.L #,Dn */ @@ -19315,7 +19209,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 2 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19331,7 +19225,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1253: ; return 44 * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ @@ -19349,7 +19242,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19365,7 +19258,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1254: ; return 48 * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ @@ -19384,7 +19276,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19400,7 +19292,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1255: ; return 48 * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ @@ -19420,7 +19311,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19436,7 +19327,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1256: ; return 49 * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ @@ -19454,7 +19344,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19470,7 +19360,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1257: ; return 50 * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ @@ -19490,7 +19379,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 0); Exception (5, regs, oldpc); - return 9 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19505,7 +19394,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, dstreg) = (newv); } } -endlabel1258: ; return 52 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ @@ -19522,7 +19410,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19538,7 +19426,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1259: ; return 50 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ @@ -19555,7 +19442,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19571,7 +19458,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 6); } -endlabel1260: ; return 51 * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ @@ -19589,7 +19475,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19605,7 +19491,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1261: ; return 50 * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ @@ -19626,7 +19511,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 0); Exception (5, regs, oldpc); - return 9 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19641,7 +19526,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, dstreg) = (newv); } } -endlabel1262: ; return 52 * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ @@ -19657,7 +19541,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_0)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -19673,7 +19557,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1263: ; return 47 * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ @@ -20140,7 +20023,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 2 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20157,7 +20040,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1291: ; return 57 * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ @@ -20175,7 +20057,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20192,7 +20074,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1292: ; return 61 * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ @@ -20211,7 +20092,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20228,7 +20109,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1293: ; return 61 * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ @@ -20248,7 +20128,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20265,7 +20145,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1294: ; return 62 * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ @@ -20283,7 +20162,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20300,7 +20179,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1295: ; return 63 * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ @@ -20320,7 +20198,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 0); Exception (5, regs, oldpc); - return 9 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20336,7 +20214,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, dstreg) = (newv); } } -endlabel1296: ; return 65 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ @@ -20353,7 +20230,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20370,7 +20247,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1297: ; return 63 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ @@ -20387,7 +20263,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 6 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20404,7 +20280,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 6); } -endlabel1298: ; return 64 * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ @@ -20422,7 +20297,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 7 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20439,7 +20314,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1299: ; return 63 * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ @@ -20460,7 +20334,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 0); Exception (5, regs, oldpc); - return 9 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20476,7 +20350,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_0)(uae_u32 opcode, struct regstruct *reg m68k_dreg(regs, dstreg) = (newv); } } -endlabel1300: ; return 65 * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ @@ -20492,7 +20365,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_0)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 32 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -20509,7 +20382,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_0)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1301: ; return 60 * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ @@ -31004,14 +30876,14 @@ unsigned long REGPARAM2 CPUFUNC(op_f2c0_0)(uae_u32 opcode, struct regstruct *reg unsigned long REGPARAM2 CPUFUNC(op_f310_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1838; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1838: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31020,14 +30892,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f320_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1839; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1839: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31036,14 +30908,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f328_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1840; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1840: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31052,14 +30924,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f330_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1841; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1841: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31067,14 +30939,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f338_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1842; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1842: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31082,14 +30954,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f339_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1843; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_save(opcode, regs); #endif -}}endlabel1843: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31098,14 +30970,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f350_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1844; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1844: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31114,14 +30986,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f358_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1845; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1845: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31130,14 +31002,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f368_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1846; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1846: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31146,14 +31018,14 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f370_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1847; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1847: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31161,14 +31033,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f378_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1848; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1848: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31176,14 +31048,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f379_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1849; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1849: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31191,14 +31063,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f37a_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1850; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1850: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31206,14 +31078,14 @@ return 4 * CYCLE_UNIT / 2; #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f37b_0)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1851; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { #ifdef FPUEMU m68k_incpc (regs, 2); fpuop_restore(opcode, regs); #endif -}}endlabel1851: ; +}} return 4 * CYCLE_UNIT / 2; } #endif @@ -31223,11 +31095,10 @@ unsigned long REGPARAM2 CPUFUNC(op_f408_0)(uae_u32 opcode, struct regstruct *reg { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1852; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(31); }} m68k_incpc (regs, 2); -endlabel1852: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31237,11 +31108,10 @@ unsigned long REGPARAM2 CPUFUNC(op_f410_0)(uae_u32 opcode, struct regstruct *reg { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1853; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(32); }} m68k_incpc (regs, 2); -endlabel1853: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31250,11 +31120,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f418_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1854; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1854: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31263,11 +31132,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f419_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1855; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1855: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31276,11 +31144,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41a_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1856; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1856: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31289,11 +31156,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41b_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1857; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1857: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31302,11 +31168,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41c_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1858; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1858: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31315,11 +31180,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41d_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1859; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1859: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31328,11 +31192,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41e_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1860; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1860: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31341,11 +31204,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f41f_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1861; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(33); }} m68k_incpc (regs, 2); -endlabel1861: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31355,11 +31217,10 @@ unsigned long REGPARAM2 CPUFUNC(op_f428_0)(uae_u32 opcode, struct regstruct *reg { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1862; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(41); }} m68k_incpc (regs, 2); -endlabel1862: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31369,11 +31230,10 @@ unsigned long REGPARAM2 CPUFUNC(op_f430_0)(uae_u32 opcode, struct regstruct *reg { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1863; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(42); }} m68k_incpc (regs, 2); -endlabel1863: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31382,11 +31242,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f438_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1864; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1864: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31395,11 +31254,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f439_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1865; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1865: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31408,11 +31266,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43a_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1866; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1866: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31421,11 +31278,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43b_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1867; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1867: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31434,11 +31290,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43c_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1868; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1868: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31447,11 +31302,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43d_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1869; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1869: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31460,11 +31314,10 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43e_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1870; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1870: ; return 4 * CYCLE_UNIT / 2; } #endif @@ -31473,24 +31326,123 @@ return 4 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_f43f_0)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = ((opcode >> 6) & 3); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel1871; } +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } { if (opcode&0x80) flush_icache(43); }} m68k_incpc (regs, 2); -endlabel1871: ; return 4 * CYCLE_UNIT / 2; } #endif -/* MMUOP.L #,Dn */ +/* PFLUSHN.L (An) */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f500_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 srcreg = (uae_s32)(uae_s8)((opcode >> 3) & 255); - uae_u32 dstreg = opcode & 7; -{{ uae_u32 extra = srcreg; + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); m68k_incpc (regs, 2); mmu_op(opcode, regs, extra); -}}return 4 * CYCLE_UNIT / 2; +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PFLUSH.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f508_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PFLUSHAN.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f510_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PFLUSHA.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f518_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PTESTR.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f548_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PTESTW.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f568_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PLPAR.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f588_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; +} +#endif +/* PLPAW.L (An) */ +#ifndef CPUEMU_68000_ONLY +unsigned long REGPARAM2 CPUFUNC(op_f5c8_0)(uae_u32 opcode, struct regstruct *regs) +{ + uae_u32 srcreg = (opcode & 7); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{{ uaecptr extraa = m68k_areg(regs, srcreg); +{ uae_s32 extra = get_long (extraa); + m68k_incpc (regs, 2); + mmu_op(opcode, regs, extra); +}}}} +return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An)+,(xxx).L */ @@ -31583,138 +31535,22 @@ unsigned long REGPARAM2 CPUFUNC(op_f620_0)(uae_u32 opcode, struct regstruct *reg return 8 * CYCLE_UNIT / 2; } #endif -/* MMUOP30B.L Dn */ +/* LPSTOP.L #.W */ #ifndef CPUEMU_68000_ONLY unsigned long REGPARAM2 CPUFUNC(op_f800_0)(uae_u32 opcode, struct regstruct *regs) { - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ m68k_incpc (regs, 2); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 4 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L An */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f808_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ m68k_incpc (regs, 2); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 4 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (An) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f810_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = m68k_areg(regs, srcreg); - m68k_incpc (regs, 2); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 4 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (An)+ */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f818_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = m68k_areg(regs, srcreg); - m68k_areg(regs, srcreg) += 4; - m68k_incpc (regs, 2); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 4 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L -(An) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f820_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa; - extraa = m68k_areg(regs, srcreg) - 4; - m68k_areg (regs, srcreg) = extraa; - m68k_incpc (regs, 2); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 6 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (d16,An) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f828_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); - m68k_incpc (regs, 4); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 8 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (d8,An,Xn) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f830_0)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa; - m68k_incpc (regs, 2); -{ extraa = get_disp_ea_020(regs, m68k_areg(regs, srcreg), next_iword(regs)); - mmu_op30(pc, opcode, regs, 0, 0); -}}}return 10 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (xxx).W */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f838_0)(uae_u32 opcode, struct regstruct *regs) -{ -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = (uae_s32)(uae_s16)get_iword (regs, 2); - m68k_incpc (regs, 4); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 8 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (xxx).L */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f839_0)(uae_u32 opcode, struct regstruct *regs) -{ -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = get_ilong (regs, 2); +{if (!regs->s) { Exception(8, regs, 0); return 27 * CYCLE_UNIT / 2; } +{ uae_u16 sw = get_iword (regs, 2); + uae_u16 sr; + if (sw != (0x100|0x80|0x40)) { Exception (4, regs, 0); return 32 * CYCLE_UNIT / 2; } + sr = get_iword (regs, 4); + if (!(sr & 0x8000)) { Exception (8, regs, 0); return 27 * CYCLE_UNIT / 2; } + regs->sr = sr; + MakeFromSR (regs); + m68k_setstopped(regs, 1); m68k_incpc (regs, 6); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 12 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (d16,PC) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f83a_0)(uae_u32 opcode, struct regstruct *regs) -{ -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr extraa = m68k_getpc (regs) + 2; - extraa += (uae_s32)(uae_s16)get_iword (regs, 2); - m68k_incpc (regs, 4); - mmu_op30(pc, opcode, regs, 0, 0); -}}return 8 * CYCLE_UNIT / 2; -} -#endif -/* MMUOP30B.L (d8,PC,Xn) */ -#ifndef CPUEMU_68000_ONLY -unsigned long REGPARAM2 CPUFUNC(op_f83b_0)(uae_u32 opcode, struct regstruct *regs) -{ -{ uaecptr pc = m68k_getpc (regs); -{ uaecptr tmppc; - uaecptr extraa; - m68k_incpc (regs, 2); -{ tmppc = m68k_getpc(regs); - extraa = get_disp_ea_020(regs, tmppc, next_iword(regs)); - mmu_op30(pc, opcode, regs, 0, 0); -}}}return 10 * CYCLE_UNIT / 2; +}} +return 4 * CYCLE_UNIT / 2; } #endif #endif diff --git a/src/cpuemu_11.cpp b/src/cpuemu_11.cpp index aa92653c..0e5f4edb 100644 --- a/src/cpuemu_11.cpp +++ b/src/cpuemu_11.cpp @@ -200,7 +200,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0050_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2186; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -211,7 +211,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0050_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2186: ; return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,(An)+ */ @@ -222,7 +221,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0058_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2187; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -234,7 +233,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0058_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2187: ; return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,-(An) */ @@ -246,7 +244,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0060_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2188; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -258,7 +256,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0060_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2188: ; return 18 * CYCLE_UNIT / 2; } /* OR.W #.W,(d16,An) */ @@ -269,7 +266,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0068_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2189; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -280,7 +277,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0068_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2189: ; return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(d8,An,Xn) */ @@ -292,7 +288,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0070_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2190; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -303,7 +299,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0070_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2190: ; return 22 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).W */ @@ -313,7 +308,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0078_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2191; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -324,7 +319,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0078_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2191: ; return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).L */ @@ -334,7 +328,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0079_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2192; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -345,13 +339,12 @@ unsigned long REGPARAM2 CPUFUNC(op_0079_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_word (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2192: ; return 24 * CYCLE_UNIT / 2; } /* ORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_007c_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2193; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_word_prefetch (regs, 4); regs->ir = regs->irc; @@ -359,7 +352,6 @@ unsigned long REGPARAM2 CPUFUNC(op_007c_11)(uae_u32 opcode, struct regstruct *re regs->sr |= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel2193: ; return 20 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ @@ -386,7 +378,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0090_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2195; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -397,7 +389,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0090_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2195: ; return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,(An)+ */ @@ -408,7 +399,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0098_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2196; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -420,7 +411,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0098_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2196: ; return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,-(An) */ @@ -432,7 +422,7 @@ unsigned long REGPARAM2 CPUFUNC(op_00a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2197; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -444,7 +434,6 @@ unsigned long REGPARAM2 CPUFUNC(op_00a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2197: ; return 30 * CYCLE_UNIT / 2; } /* OR.L #.L,(d16,An) */ @@ -455,7 +444,7 @@ unsigned long REGPARAM2 CPUFUNC(op_00a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2198; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -466,7 +455,6 @@ unsigned long REGPARAM2 CPUFUNC(op_00a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2198: ; return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(d8,An,Xn) */ @@ -478,7 +466,7 @@ unsigned long REGPARAM2 CPUFUNC(op_00b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2199; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -489,7 +477,6 @@ unsigned long REGPARAM2 CPUFUNC(op_00b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2199: ; return 34 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).W */ @@ -499,7 +486,7 @@ unsigned long REGPARAM2 CPUFUNC(op_00b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2200; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -510,7 +497,6 @@ unsigned long REGPARAM2 CPUFUNC(op_00b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2200: ; return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).L */ @@ -520,7 +506,7 @@ unsigned long REGPARAM2 CPUFUNC(op_00b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2201; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -531,7 +517,6 @@ unsigned long REGPARAM2 CPUFUNC(op_00b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 12); put_long (dsta,src); }}}}} m68k_incpc (regs, 10); -endlabel2201: ; return 36 * CYCLE_UNIT / 2; } /* BTST.L Dn,Dn */ @@ -1455,7 +1440,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0250_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2257; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -1466,7 +1451,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0250_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2257: ; return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,(An)+ */ @@ -1477,7 +1461,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0258_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2258; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -1489,7 +1473,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0258_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2258: ; return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,-(An) */ @@ -1501,7 +1484,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0260_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2259; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -1513,7 +1496,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0260_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2259: ; return 18 * CYCLE_UNIT / 2; } /* AND.W #.W,(d16,An) */ @@ -1524,7 +1506,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0268_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2260; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -1535,7 +1517,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0268_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2260: ; return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(d8,An,Xn) */ @@ -1547,7 +1528,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0270_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2261; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -1558,7 +1539,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0270_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2261: ; return 22 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).W */ @@ -1568,7 +1548,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0278_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2262; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -1579,7 +1559,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0278_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2262: ; return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).L */ @@ -1589,7 +1568,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0279_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2263; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -1600,13 +1579,12 @@ unsigned long REGPARAM2 CPUFUNC(op_0279_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_word (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2263: ; return 24 * CYCLE_UNIT / 2; } /* ANDSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_027c_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2264; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_word_prefetch (regs, 4); regs->ir = regs->irc; @@ -1614,7 +1592,6 @@ unsigned long REGPARAM2 CPUFUNC(op_027c_11)(uae_u32 opcode, struct regstruct *re regs->sr &= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel2264: ; return 20 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ @@ -1641,7 +1618,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0290_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2266; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -1652,7 +1629,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0290_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2266: ; return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,(An)+ */ @@ -1663,7 +1639,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0298_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2267; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -1675,7 +1651,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0298_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2267: ; return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,-(An) */ @@ -1687,7 +1662,7 @@ unsigned long REGPARAM2 CPUFUNC(op_02a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2268; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -1699,7 +1674,6 @@ unsigned long REGPARAM2 CPUFUNC(op_02a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2268: ; return 30 * CYCLE_UNIT / 2; } /* AND.L #.L,(d16,An) */ @@ -1710,7 +1684,7 @@ unsigned long REGPARAM2 CPUFUNC(op_02a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2269; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -1721,7 +1695,6 @@ unsigned long REGPARAM2 CPUFUNC(op_02a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2269: ; return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(d8,An,Xn) */ @@ -1733,7 +1706,7 @@ unsigned long REGPARAM2 CPUFUNC(op_02b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2270; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -1744,7 +1717,6 @@ unsigned long REGPARAM2 CPUFUNC(op_02b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2270: ; return 34 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).W */ @@ -1754,7 +1726,7 @@ unsigned long REGPARAM2 CPUFUNC(op_02b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2271; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -1765,7 +1737,6 @@ unsigned long REGPARAM2 CPUFUNC(op_02b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2271: ; return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).L */ @@ -1775,7 +1746,7 @@ unsigned long REGPARAM2 CPUFUNC(op_02b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2272; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -1786,7 +1757,6 @@ unsigned long REGPARAM2 CPUFUNC(op_02b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 12); put_long (dsta,src); }}}}} m68k_incpc (regs, 10); -endlabel2272: ; return 36 * CYCLE_UNIT / 2; } /* SUB.B #.B,Dn */ @@ -1995,7 +1965,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0450_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2282; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2011,7 +1981,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0450_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2282: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An)+ */ @@ -2022,7 +1991,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0458_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2283; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -2039,7 +2008,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0458_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2283: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,-(An) */ @@ -2051,7 +2019,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0460_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2284; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -2068,7 +2036,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0460_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2284: ; return 18 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d16,An) */ @@ -2079,7 +2046,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0468_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2285; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2095,7 +2062,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0468_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2285: ; return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d8,An,Xn) */ @@ -2107,7 +2073,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0470_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2286; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2123,7 +2089,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0470_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2286: ; return 22 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).W */ @@ -2133,7 +2098,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0478_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2287; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2149,7 +2114,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0478_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2287: ; return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).L */ @@ -2159,7 +2123,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0479_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2288; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2175,7 +2139,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0479_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2288: ; return 24 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ @@ -2207,7 +2170,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0490_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2290; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2223,7 +2186,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0490_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2290: ; return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An)+ */ @@ -2234,7 +2196,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0498_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2291; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -2251,7 +2213,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0498_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2291: ; return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,-(An) */ @@ -2263,7 +2224,7 @@ unsigned long REGPARAM2 CPUFUNC(op_04a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2292; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -2280,7 +2241,6 @@ unsigned long REGPARAM2 CPUFUNC(op_04a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2292: ; return 30 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d16,An) */ @@ -2291,7 +2251,7 @@ unsigned long REGPARAM2 CPUFUNC(op_04a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2293; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2307,7 +2267,6 @@ unsigned long REGPARAM2 CPUFUNC(op_04a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2293: ; return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d8,An,Xn) */ @@ -2319,7 +2278,7 @@ unsigned long REGPARAM2 CPUFUNC(op_04b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2294; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2335,7 +2294,6 @@ unsigned long REGPARAM2 CPUFUNC(op_04b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2294: ; return 34 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).W */ @@ -2345,7 +2303,7 @@ unsigned long REGPARAM2 CPUFUNC(op_04b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2295; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2361,7 +2319,6 @@ unsigned long REGPARAM2 CPUFUNC(op_04b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2295: ; return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).L */ @@ -2371,7 +2328,7 @@ unsigned long REGPARAM2 CPUFUNC(op_04b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2296; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2387,7 +2344,6 @@ unsigned long REGPARAM2 CPUFUNC(op_04b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 10); -endlabel2296: ; return 36 * CYCLE_UNIT / 2; } /* ADD.B #.B,Dn */ @@ -2596,7 +2552,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0650_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2306; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2612,7 +2568,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0650_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2306: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An)+ */ @@ -2623,7 +2578,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0658_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2307; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -2640,7 +2595,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0658_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2307: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,-(An) */ @@ -2652,7 +2606,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0660_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2308; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -2669,7 +2623,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0660_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2308: ; return 18 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d16,An) */ @@ -2680,7 +2633,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0668_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2309; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2696,7 +2649,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0668_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2309: ; return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d8,An,Xn) */ @@ -2708,7 +2660,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0670_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2310; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2724,7 +2676,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0670_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2310: ; return 22 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).W */ @@ -2734,7 +2685,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0678_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2311; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2750,7 +2701,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0678_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2311: ; return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).L */ @@ -2760,7 +2710,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0679_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2312; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -2776,7 +2726,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0679_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2312: ; return 24 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ @@ -2808,7 +2757,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0690_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2314; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2824,7 +2773,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0690_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2314: ; return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An)+ */ @@ -2835,7 +2783,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0698_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2315; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -2852,7 +2800,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0698_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2315: ; return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,-(An) */ @@ -2864,7 +2811,7 @@ unsigned long REGPARAM2 CPUFUNC(op_06a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2316; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -2881,7 +2828,6 @@ unsigned long REGPARAM2 CPUFUNC(op_06a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2316: ; return 30 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d16,An) */ @@ -2892,7 +2838,7 @@ unsigned long REGPARAM2 CPUFUNC(op_06a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2317; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2908,7 +2854,6 @@ unsigned long REGPARAM2 CPUFUNC(op_06a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2317: ; return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d8,An,Xn) */ @@ -2920,7 +2865,7 @@ unsigned long REGPARAM2 CPUFUNC(op_06b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2318; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2936,7 +2881,6 @@ unsigned long REGPARAM2 CPUFUNC(op_06b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2318: ; return 34 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).W */ @@ -2946,7 +2890,7 @@ unsigned long REGPARAM2 CPUFUNC(op_06b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2319; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2962,7 +2906,6 @@ unsigned long REGPARAM2 CPUFUNC(op_06b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 8); -endlabel2319: ; return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).L */ @@ -2972,7 +2915,7 @@ unsigned long REGPARAM2 CPUFUNC(op_06b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2320; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -2988,7 +2931,6 @@ unsigned long REGPARAM2 CPUFUNC(op_06b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 10); -endlabel2320: ; return 36 * CYCLE_UNIT / 2; } /* BTST.L #.W,Dn */ @@ -3817,7 +3759,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a50_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2372; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -3828,7 +3770,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a50_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2372: ; return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An)+ */ @@ -3839,7 +3780,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a58_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2373; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -3851,7 +3792,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a58_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2373: ; return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,-(An) */ @@ -3863,7 +3803,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a60_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2374; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -3875,7 +3815,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a60_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel2374: ; return 18 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d16,An) */ @@ -3886,7 +3825,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a68_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2375; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -3897,7 +3836,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a68_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2375: ; return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d8,An,Xn) */ @@ -3909,7 +3847,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a70_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2376; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -3920,7 +3858,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a70_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2376: ; return 22 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).W */ @@ -3930,7 +3867,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a78_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2377; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -3941,7 +3878,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a78_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2377: ; return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).L */ @@ -3951,7 +3887,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a79_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2378; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -3962,13 +3898,12 @@ unsigned long REGPARAM2 CPUFUNC(op_0a79_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_word (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2378: ; return 24 * CYCLE_UNIT / 2; } /* EORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_0a7c_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2379; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_word_prefetch (regs, 4); regs->ir = regs->irc; @@ -3976,7 +3911,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a7c_11)(uae_u32 opcode, struct regstruct *re regs->sr ^= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel2379: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ @@ -4003,7 +3937,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a90_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2381; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -4014,7 +3948,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a90_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2381: ; return 28 * CYCLE_UNIT / 2; } #endif @@ -4028,7 +3961,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0a98_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2382; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -4040,7 +3973,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0a98_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2382: ; return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,-(An) */ @@ -4052,7 +3984,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0aa0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2383; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -4064,7 +3996,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0aa0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel2383: ; return 30 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d16,An) */ @@ -4075,7 +4006,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0aa8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2384; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -4086,7 +4017,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0aa8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2384: ; return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d8,An,Xn) */ @@ -4098,7 +4028,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2385; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -4109,7 +4039,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2385: ; return 34 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).W */ @@ -4119,7 +4048,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2386; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -4130,7 +4059,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 10); put_long (dsta,src); }}}}} m68k_incpc (regs, 8); -endlabel2386: ; return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).L */ @@ -4140,7 +4068,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2387; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -4151,7 +4079,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ab9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 12); put_long (dsta,src); }}}}} m68k_incpc (regs, 10); -endlabel2387: ; return 36 * CYCLE_UNIT / 2; } /* CMP.B #.B,Dn */ @@ -4342,7 +4269,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c50_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2397; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -4356,7 +4283,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c50_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel2397: ; return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An)+ */ @@ -4367,7 +4293,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c58_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2398; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -4382,7 +4308,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c58_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel2398: ; return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,-(An) */ @@ -4394,7 +4319,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c60_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2399; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -4409,7 +4334,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c60_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel2399: ; return 14 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,An) */ @@ -4420,7 +4344,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c68_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2400; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -4434,7 +4358,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c68_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2400: ; return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d8,An,Xn) */ @@ -4446,7 +4369,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c70_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2401; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -4460,7 +4383,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c70_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2401: ; return 18 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).W */ @@ -4470,7 +4392,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c78_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2402; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -4484,7 +4406,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c78_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2402: ; return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).L */ @@ -4494,7 +4415,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c79_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2403; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -4508,7 +4429,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c79_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 8); -endlabel2403: ; return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,Dn */ @@ -4538,7 +4458,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c90_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2405; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -4552,7 +4472,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c90_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2405: ; return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An)+ */ @@ -4563,7 +4482,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0c98_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2406; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -4578,7 +4497,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0c98_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2406: ; return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,-(An) */ @@ -4590,7 +4508,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0ca0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2407; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -4605,7 +4523,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ca0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel2407: ; return 22 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,An) */ @@ -4616,7 +4533,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0ca8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2408; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -4630,7 +4547,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0ca8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 8); -endlabel2408: ; return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d8,An,Xn) */ @@ -4642,7 +4558,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2409; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -4656,7 +4572,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 8); -endlabel2409: ; return 26 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).W */ @@ -4666,7 +4581,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2410; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -4680,7 +4595,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 8); -endlabel2410: ; return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).L */ @@ -4690,7 +4604,7 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2411; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -4704,7 +4618,6 @@ unsigned long REGPARAM2 CPUFUNC(op_0cb9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 10); -endlabel2411: ; return 28 * CYCLE_UNIT / 2; } /* MOVE.B Dn,Dn */ @@ -6287,7 +6200,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2010_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2502; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6297,7 +6210,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2010_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2502: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,Dn */ @@ -6308,7 +6221,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2018_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2503; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -6319,7 +6232,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2018_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2503: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L -(An),Dn */ @@ -6331,7 +6244,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2020_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2504; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -6342,7 +6255,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2020_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2504: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),Dn */ @@ -6353,7 +6266,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2028_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2505; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6363,7 +6276,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2028_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2505: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),Dn */ @@ -6375,7 +6288,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2030_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2506; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6385,7 +6298,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2030_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2506: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,Dn */ @@ -6395,7 +6308,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2038_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2507; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6405,7 +6318,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2038_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2507: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,Dn */ @@ -6415,7 +6328,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2039_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2508; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6425,7 +6338,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2039_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2508: ; +}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),Dn */ @@ -6436,7 +6349,7 @@ unsigned long REGPARAM2 CPUFUNC(op_203a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2509; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6446,7 +6359,7 @@ unsigned long REGPARAM2 CPUFUNC(op_203a_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2509: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),Dn */ @@ -6459,7 +6372,7 @@ unsigned long REGPARAM2 CPUFUNC(op_203b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2510; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_dreg(regs, dstreg) = (src); @@ -6469,7 +6382,7 @@ unsigned long REGPARAM2 CPUFUNC(op_203b_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2510: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.L #.L,Dn */ @@ -6518,14 +6431,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2514; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2514: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVEA.L (An)+,An */ @@ -6536,7 +6449,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2515; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -6544,7 +6457,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2058_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2515: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVEA.L -(An),An */ @@ -6556,7 +6469,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2516; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -6564,7 +6477,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2060_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2516: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,An),An */ @@ -6575,14 +6488,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2517; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2517: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,An,Xn),An */ @@ -6594,14 +6507,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2518; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2518: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).W,An */ @@ -6611,14 +6524,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2519; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2519: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).L,An */ @@ -6628,14 +6541,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2520; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2520: ; +}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,PC),An */ @@ -6646,14 +6559,14 @@ unsigned long REGPARAM2 CPUFUNC(op_207a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2521; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2521: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,PC,Xn),An */ @@ -6666,14 +6579,14 @@ unsigned long REGPARAM2 CPUFUNC(op_207b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2522; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { m68k_areg(regs, dstreg) = (src); m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2522: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVEA.L #.L,An */ @@ -6696,7 +6609,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2080_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2524; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6705,7 +6618,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2080_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2524: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An) */ @@ -6717,7 +6630,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2088_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2525; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6726,7 +6639,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2088_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2525: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An) */ @@ -6737,13 +6650,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2526; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2526; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6752,7 +6665,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2090_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2526: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An) */ @@ -6763,14 +6676,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2527; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2527; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6779,7 +6692,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2098_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2527: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An) */ @@ -6791,14 +6704,14 @@ unsigned long REGPARAM2 CPUFUNC(op_20a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2528; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2528; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6807,7 +6720,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20a0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2528: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An) */ @@ -6818,13 +6731,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2529; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2529; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6833,7 +6746,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20a8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2529: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An) */ @@ -6845,13 +6758,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2530; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2530; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6860,7 +6773,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20b0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2530: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An) */ @@ -6870,13 +6783,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2531; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2531; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6885,7 +6798,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20b8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2531: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An) */ @@ -6895,13 +6808,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2532; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2532; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6910,7 +6823,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20b9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2532: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An) */ @@ -6921,13 +6834,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2533; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2533; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6936,7 +6849,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20ba_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2533: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An) */ @@ -6949,13 +6862,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2534; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2534; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6964,7 +6877,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20bb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2534: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An) */ @@ -6975,7 +6888,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20bc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2535; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -6984,7 +6897,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20bc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2535: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An)+ */ @@ -6996,7 +6909,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2536; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7006,7 +6919,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2536: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An)+ */ @@ -7018,7 +6931,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2537; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7028,7 +6941,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2537: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An)+ */ @@ -7039,13 +6952,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2538; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2538; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7055,7 +6968,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20d0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2538: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An)+ */ @@ -7066,14 +6979,14 @@ unsigned long REGPARAM2 CPUFUNC(op_20d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2539; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2539; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7083,7 +6996,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20d8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2539: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An)+ */ @@ -7095,14 +7008,14 @@ unsigned long REGPARAM2 CPUFUNC(op_20e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2540; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2540; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7112,7 +7025,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20e0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2540: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An)+ */ @@ -7123,13 +7036,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2541; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2541; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7139,7 +7052,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20e8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2541: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An)+ */ @@ -7151,13 +7064,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2542; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2542; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7167,7 +7080,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20f0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2542: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An)+ */ @@ -7177,13 +7090,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2543; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2543; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7193,7 +7106,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20f8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2543: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An)+ */ @@ -7203,13 +7116,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2544; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2544; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7219,7 +7132,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20f9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2544: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An)+ */ @@ -7230,13 +7143,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2545; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2545; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7246,7 +7159,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20fa_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2545: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An)+ */ @@ -7259,13 +7172,13 @@ unsigned long REGPARAM2 CPUFUNC(op_20fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2546; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2546; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7275,7 +7188,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20fb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2546: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An)+ */ @@ -7286,7 +7199,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2547; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 4; put_long (dsta,src); @@ -7296,7 +7209,7 @@ unsigned long REGPARAM2 CPUFUNC(op_20fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2547: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,-(An) */ @@ -7309,7 +7222,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2100_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2548; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7319,7 +7232,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2100_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 2); -}}}}endlabel2548: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,-(An) */ @@ -7332,7 +7245,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2108_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2549; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7342,7 +7255,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2108_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 2); -}}}}endlabel2549: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),-(An) */ @@ -7353,14 +7266,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2110_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2550; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2550; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7370,7 +7283,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2110_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2550: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,-(An) */ @@ -7381,7 +7294,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2118_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2551; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -7389,7 +7302,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2118_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2551; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7399,7 +7312,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2118_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2551: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),-(An) */ @@ -7411,7 +7324,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2120_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2552; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -7419,7 +7332,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2120_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2552; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7429,7 +7342,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2120_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2552: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),-(An) */ @@ -7440,14 +7353,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2128_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2553; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2553; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7457,7 +7370,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2128_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2553: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),-(An) */ @@ -7469,14 +7382,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2130_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2554; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2554; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7486,7 +7399,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2130_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2554: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,-(An) */ @@ -7496,14 +7409,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2138_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2555; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2555; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7513,7 +7426,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2138_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2555: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,-(An) */ @@ -7523,14 +7436,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2139_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2556; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2556; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7540,7 +7453,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2139_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 6); -}}}}}}endlabel2556: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),-(An) */ @@ -7551,14 +7464,14 @@ unsigned long REGPARAM2 CPUFUNC(op_213a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2557; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2557; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7568,7 +7481,7 @@ unsigned long REGPARAM2 CPUFUNC(op_213a_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2557: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),-(An) */ @@ -7581,14 +7494,14 @@ unsigned long REGPARAM2 CPUFUNC(op_213b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2558; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2558; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7598,7 +7511,7 @@ unsigned long REGPARAM2 CPUFUNC(op_213b_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2558: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L #.L,-(An) */ @@ -7610,7 +7523,7 @@ unsigned long REGPARAM2 CPUFUNC(op_213c_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2559; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -7620,7 +7533,7 @@ unsigned long REGPARAM2 CPUFUNC(op_213c_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); m68k_incpc (regs, 6); -}}}}endlabel2559: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d16,An) */ @@ -7632,7 +7545,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2140_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2560; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7641,7 +7554,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2140_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2560: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d16,An) */ @@ -7653,7 +7566,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2148_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2561; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7662,7 +7575,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2148_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2561: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d16,An) */ @@ -7673,13 +7586,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2150_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2562; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2562; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7688,7 +7601,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2150_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2562: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d16,An) */ @@ -7699,14 +7612,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2158_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2563; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2563; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7715,7 +7628,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2158_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2563: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d16,An) */ @@ -7727,14 +7640,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2160_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2564; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2564; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7743,7 +7656,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2160_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2564: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d16,An) */ @@ -7754,13 +7667,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2168_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2565; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2565; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7769,7 +7682,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2168_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2565: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d16,An) */ @@ -7781,13 +7694,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2170_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2566; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2566; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7796,7 +7709,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2170_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2566: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d16,An) */ @@ -7806,13 +7719,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2178_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2567; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2567; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7821,7 +7734,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2178_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2567: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } #endif @@ -7834,13 +7747,13 @@ unsigned long REGPARAM2 CPUFUNC(op_2179_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2568; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2568; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7849,7 +7762,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2179_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2568: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d16,An) */ @@ -7860,13 +7773,13 @@ unsigned long REGPARAM2 CPUFUNC(op_217a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2569; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2569; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7875,7 +7788,7 @@ unsigned long REGPARAM2 CPUFUNC(op_217a_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2569: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d16,An) */ @@ -7888,13 +7801,13 @@ unsigned long REGPARAM2 CPUFUNC(op_217b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2570; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2570; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7903,7 +7816,7 @@ unsigned long REGPARAM2 CPUFUNC(op_217b_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2570: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d16,An) */ @@ -7914,7 +7827,7 @@ unsigned long REGPARAM2 CPUFUNC(op_217c_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2571; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7923,7 +7836,7 @@ unsigned long REGPARAM2 CPUFUNC(op_217c_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2571: ; +}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d8,An,Xn) */ @@ -7936,7 +7849,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2180_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2572; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7945,7 +7858,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2180_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2572: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.L An,(d8,An,Xn) */ @@ -7958,7 +7871,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2188_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2573; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7967,7 +7880,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2188_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2573: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d8,An,Xn) */ @@ -7978,14 +7891,14 @@ unsigned long REGPARAM2 CPUFUNC(op_2190_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2574; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2574; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -7994,7 +7907,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2190_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2574: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d8,An,Xn) */ @@ -8005,7 +7918,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2198_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2575; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -8013,7 +7926,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2198_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2575; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8022,7 +7935,7 @@ unsigned long REGPARAM2 CPUFUNC(op_2198_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2575: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d8,An,Xn) */ @@ -8034,7 +7947,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2576; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -8042,7 +7955,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21a0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2576; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8051,7 +7964,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21a0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2576: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d8,An,Xn) */ @@ -8062,14 +7975,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2577; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2577; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8078,7 +7991,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21a8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2577: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ @@ -8090,14 +8003,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2578; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2578; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8106,7 +8019,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21b0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2578: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d8,An,Xn) */ @@ -8116,14 +8029,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2579; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2579; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8132,7 +8045,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21b8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2579: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d8,An,Xn) */ @@ -8142,14 +8055,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2580; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2580; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8158,7 +8071,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21b9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2580: ; +}}}}}} return 34 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d8,An,Xn) */ @@ -8169,14 +8082,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2581; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2581; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8185,7 +8098,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21ba_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2581: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ @@ -8198,14 +8111,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2582; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2582; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8214,7 +8127,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21bb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2582: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d8,An,Xn) */ @@ -8226,7 +8139,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21bc_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2583; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8235,7 +8148,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21bc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2583: ; +}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).W */ @@ -8246,7 +8159,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2584; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8255,7 +8168,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2584: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).W */ @@ -8266,7 +8179,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2585; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8275,7 +8188,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2585: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).W */ @@ -8285,13 +8198,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2586; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2586; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8300,7 +8213,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21d0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2586: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).W */ @@ -8310,14 +8223,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2587; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2587; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8326,7 +8239,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21d8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2587: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).W */ @@ -8337,14 +8250,14 @@ unsigned long REGPARAM2 CPUFUNC(op_21e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2588; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2588; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8353,7 +8266,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21e0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2588: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).W */ @@ -8363,13 +8276,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2589; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2589; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8378,7 +8291,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21e8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2589: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).W */ @@ -8389,13 +8302,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2590; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2590; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8404,7 +8317,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21f0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2590: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).W */ @@ -8413,13 +8326,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2591; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2591; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8428,7 +8341,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21f8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2591: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).W */ @@ -8437,13 +8350,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2592; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2592; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8452,7 +8365,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21f9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2592: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).W */ @@ -8462,13 +8375,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2593; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2593; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8477,7 +8390,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21fa_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2593: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).W */ @@ -8489,13 +8402,13 @@ unsigned long REGPARAM2 CPUFUNC(op_21fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2594; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2594; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8504,7 +8417,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21fb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2594: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).W */ @@ -8514,7 +8427,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2595; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8523,7 +8436,7 @@ unsigned long REGPARAM2 CPUFUNC(op_21fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2595: ; +}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).L */ @@ -8534,7 +8447,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2596; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8543,7 +8456,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2596: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).L */ @@ -8554,7 +8467,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2597; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8563,7 +8476,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2597: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).L */ @@ -8573,7 +8486,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2598; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8581,7 +8494,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2598; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8591,7 +8504,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2598: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).L */ @@ -8601,7 +8514,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2599; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -8610,7 +8523,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2599; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8620,7 +8533,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2599: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).L */ @@ -8631,7 +8544,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2600; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -8640,7 +8553,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2600; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8650,7 +8563,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2600: ; +}}}}}} return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).L */ @@ -8660,7 +8573,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2601; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8668,7 +8581,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2601; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8678,7 +8591,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2601: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).L */ @@ -8689,7 +8602,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2602; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8697,7 +8610,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2602; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8707,7 +8620,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2602: ; +}}}}}} return 34 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).L */ @@ -8716,7 +8629,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2603; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8724,7 +8637,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2603; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8734,7 +8647,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2603: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).L */ @@ -8743,7 +8656,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2604; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8751,7 +8664,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f9_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2604; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8761,7 +8674,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2604: ; +}}}}}} return 36 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).L */ @@ -8771,7 +8684,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2605; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8779,7 +8692,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fa_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2605; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8789,7 +8702,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2605: ; +}}}}}} return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).L */ @@ -8801,7 +8714,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2606; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; @@ -8809,7 +8722,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fb_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2606; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8819,7 +8732,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2606: ; +}}}}}} return 34 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).L */ @@ -8829,7 +8742,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2607; + return 50 * CYCLE_UNIT / 2; } { put_long (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -8838,7 +8751,7 @@ unsigned long REGPARAM2 CPUFUNC(op_23fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 10); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2607: ; +}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.W Dn,Dn */ @@ -8879,7 +8792,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3010_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2610; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -8889,7 +8802,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3010_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2610: ; +}}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,Dn */ @@ -8900,7 +8813,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3018_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2611; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -8911,7 +8824,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3018_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2611: ; +}}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W -(An),Dn */ @@ -8923,7 +8836,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3020_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2612; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -8934,7 +8847,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3020_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2612: ; +}}}}} return 10 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),Dn */ @@ -8945,7 +8858,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3028_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2613; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -8955,7 +8868,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3028_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2613: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),Dn */ @@ -8967,7 +8880,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3030_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2614; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -8977,7 +8890,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3030_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2614: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,Dn */ @@ -8987,7 +8900,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3038_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2615; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -8997,7 +8910,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3038_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2615: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,Dn */ @@ -9007,7 +8920,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3039_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2616; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -9017,7 +8930,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3039_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2616: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),Dn */ @@ -9028,7 +8941,7 @@ unsigned long REGPARAM2 CPUFUNC(op_303a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2617; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -9038,7 +8951,7 @@ unsigned long REGPARAM2 CPUFUNC(op_303a_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2617: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),Dn */ @@ -9051,7 +8964,7 @@ unsigned long REGPARAM2 CPUFUNC(op_303b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2618; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); @@ -9061,7 +8974,7 @@ unsigned long REGPARAM2 CPUFUNC(op_303b_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2618: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W #.W,Dn */ @@ -9112,7 +9025,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2622; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9120,7 +9033,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3050_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2622: ; +}}}}} return 8 * CYCLE_UNIT / 2; } /* MOVEA.W (An)+,An */ @@ -9131,7 +9044,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2623; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -9140,7 +9053,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3058_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2623: ; +}}}}} return 8 * CYCLE_UNIT / 2; } /* MOVEA.W -(An),An */ @@ -9152,7 +9065,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2624; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -9161,7 +9074,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3060_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2624: ; +}}}}} return 10 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,An),An */ @@ -9172,7 +9085,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2625; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9180,7 +9093,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3068_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2625: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,An,Xn),An */ @@ -9192,7 +9105,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2626; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9200,7 +9113,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3070_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2626: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).W,An */ @@ -9210,7 +9123,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2627; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9218,7 +9131,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3078_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2627: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).L,An */ @@ -9228,7 +9141,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2628; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9236,7 +9149,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3079_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2628: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,PC),An */ @@ -9247,7 +9160,7 @@ unsigned long REGPARAM2 CPUFUNC(op_307a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2629; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9255,7 +9168,7 @@ unsigned long REGPARAM2 CPUFUNC(op_307a_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2629: ; +}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,PC,Xn),An */ @@ -9268,7 +9181,7 @@ unsigned long REGPARAM2 CPUFUNC(op_307b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2630; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; @@ -9276,7 +9189,7 @@ unsigned long REGPARAM2 CPUFUNC(op_307b_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2630: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVEA.W #.W,An */ @@ -9300,7 +9213,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3080_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2632; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9309,7 +9222,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3080_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2632: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An) */ @@ -9321,7 +9234,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3088_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2633; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9330,7 +9243,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3088_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2633: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An) */ @@ -9341,13 +9254,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2634; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2634; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9356,7 +9269,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3090_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2634: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An) */ @@ -9367,14 +9280,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2635; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2635; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9383,7 +9296,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3098_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2635: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An) */ @@ -9395,14 +9308,14 @@ unsigned long REGPARAM2 CPUFUNC(op_30a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2636; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2636; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9411,7 +9324,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30a0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2636: ; +}}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An) */ @@ -9422,13 +9335,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2637; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2637; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9437,7 +9350,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30a8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2637: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An) */ @@ -9449,13 +9362,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2638; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2638; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9464,7 +9377,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30b0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2638: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An) */ @@ -9474,13 +9387,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2639; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2639; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9489,7 +9402,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30b8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2639: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An) */ @@ -9499,13 +9412,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2640; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2640; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9514,7 +9427,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30b9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2640: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An) */ @@ -9525,13 +9438,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2641; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2641; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9540,7 +9453,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30ba_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2641: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An) */ @@ -9553,13 +9466,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2642; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2642; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9568,7 +9481,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30bb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2642: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An) */ @@ -9579,7 +9492,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30bc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2643; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -9588,7 +9501,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30bc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2643: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An)+ */ @@ -9600,7 +9513,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2644; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9610,7 +9523,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2644: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An)+ */ @@ -9622,7 +9535,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2645; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9632,7 +9545,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2645: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An)+ */ @@ -9643,13 +9556,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2646; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2646; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9659,7 +9572,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30d0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2646: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An)+ */ @@ -9670,14 +9583,14 @@ unsigned long REGPARAM2 CPUFUNC(op_30d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2647; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2647; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9687,7 +9600,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30d8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2647: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An)+ */ @@ -9699,14 +9612,14 @@ unsigned long REGPARAM2 CPUFUNC(op_30e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2648; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2648; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9716,7 +9629,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30e0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2648: ; +}}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An)+ */ @@ -9727,13 +9640,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2649; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2649; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9743,7 +9656,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30e8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2649: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An)+ */ @@ -9755,13 +9668,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2650; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2650; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9771,7 +9684,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30f0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2650: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An)+ */ @@ -9781,13 +9694,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2651; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2651; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9797,7 +9710,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30f8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2651: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An)+ */ @@ -9807,13 +9720,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2652; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2652; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9823,7 +9736,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30f9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2652: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An)+ */ @@ -9834,13 +9747,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2653; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2653; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9850,7 +9763,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30fa_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2653: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An)+ */ @@ -9863,13 +9776,13 @@ unsigned long REGPARAM2 CPUFUNC(op_30fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2654; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2654; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9879,7 +9792,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30fb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2654: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An)+ */ @@ -9890,7 +9803,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2655; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, dstreg) += 2; put_word (dsta,src); @@ -9900,7 +9813,7 @@ unsigned long REGPARAM2 CPUFUNC(op_30fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2655: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,-(An) */ @@ -9913,7 +9826,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3100_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2656; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -9923,7 +9836,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3100_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 2); -}}}}endlabel2656: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,-(An) */ @@ -9936,7 +9849,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3108_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2657; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -9946,7 +9859,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3108_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 2); -}}}}endlabel2657: ; +}}}} return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),-(An) */ @@ -9957,14 +9870,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3110_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2658; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2658; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -9974,7 +9887,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3110_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2658: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,-(An) */ @@ -9985,7 +9898,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3118_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2659; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -9993,7 +9906,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3118_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2659; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10003,7 +9916,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3118_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2659: ; +}}}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),-(An) */ @@ -10015,7 +9928,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3120_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2660; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -10023,7 +9936,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3120_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2660; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10033,7 +9946,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3120_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 2); -}}}}}}endlabel2660: ; +}}}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),-(An) */ @@ -10044,14 +9957,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3128_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2661; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2661; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10061,7 +9974,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3128_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2661: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),-(An) */ @@ -10073,14 +9986,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3130_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2662; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2662; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10090,7 +10003,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3130_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2662: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,-(An) */ @@ -10100,14 +10013,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3138_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2663; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2663; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10117,7 +10030,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3138_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2663: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,-(An) */ @@ -10127,14 +10040,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3139_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2664; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2664; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10144,7 +10057,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3139_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 6); -}}}}}}endlabel2664: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),-(An) */ @@ -10155,14 +10068,14 @@ unsigned long REGPARAM2 CPUFUNC(op_313a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2665; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2665; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10172,7 +10085,7 @@ unsigned long REGPARAM2 CPUFUNC(op_313a_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2665: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),-(An) */ @@ -10185,14 +10098,14 @@ unsigned long REGPARAM2 CPUFUNC(op_313b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2666; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2666; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10202,7 +10115,7 @@ unsigned long REGPARAM2 CPUFUNC(op_313b_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}}}endlabel2666: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W #.W,-(An) */ @@ -10214,7 +10127,7 @@ unsigned long REGPARAM2 CPUFUNC(op_313c_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2667; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, dstreg) = dsta; regs->ir = regs->irc; @@ -10224,7 +10137,7 @@ unsigned long REGPARAM2 CPUFUNC(op_313c_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); m68k_incpc (regs, 4); -}}}}endlabel2667: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d16,An) */ @@ -10236,7 +10149,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3140_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2668; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10245,7 +10158,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3140_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2668: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d16,An) */ @@ -10257,7 +10170,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3148_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2669; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10266,7 +10179,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3148_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2669: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d16,An) */ @@ -10277,13 +10190,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3150_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2670; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2670; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10292,7 +10205,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3150_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2670: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d16,An) */ @@ -10303,14 +10216,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3158_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2671; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2671; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10319,7 +10232,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3158_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2671: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d16,An) */ @@ -10331,14 +10244,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3160_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2672; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2672; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10347,7 +10260,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3160_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2672: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d16,An) */ @@ -10358,13 +10271,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3168_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2673; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2673; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10373,7 +10286,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3168_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2673: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d16,An) */ @@ -10385,13 +10298,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3170_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2674; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2674; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10400,7 +10313,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3170_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2674: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d16,An) */ @@ -10410,13 +10323,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3178_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2675; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2675; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10425,7 +10338,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3178_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2675: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d16,An) */ @@ -10435,13 +10348,13 @@ unsigned long REGPARAM2 CPUFUNC(op_3179_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2676; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2676; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10450,7 +10363,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3179_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2676: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d16,An) */ @@ -10461,13 +10374,13 @@ unsigned long REGPARAM2 CPUFUNC(op_317a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2677; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2677; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10476,7 +10389,7 @@ unsigned long REGPARAM2 CPUFUNC(op_317a_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2677: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d16,An) */ @@ -10489,13 +10402,13 @@ unsigned long REGPARAM2 CPUFUNC(op_317b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2678; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2678; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10504,7 +10417,7 @@ unsigned long REGPARAM2 CPUFUNC(op_317b_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2678: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d16,An) */ @@ -10515,7 +10428,7 @@ unsigned long REGPARAM2 CPUFUNC(op_317c_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2679; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10524,7 +10437,7 @@ unsigned long REGPARAM2 CPUFUNC(op_317c_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2679: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d8,An,Xn) */ @@ -10537,7 +10450,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3180_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2680; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10546,7 +10459,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3180_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2680: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W An,(d8,An,Xn) */ @@ -10559,7 +10472,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3188_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2681; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10568,7 +10481,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3188_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2681: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d8,An,Xn) */ @@ -10579,14 +10492,14 @@ unsigned long REGPARAM2 CPUFUNC(op_3190_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2682; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2682; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10595,7 +10508,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3190_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2682: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d8,An,Xn) */ @@ -10606,7 +10519,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3198_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2683; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -10614,7 +10527,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3198_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2683; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10623,7 +10536,7 @@ unsigned long REGPARAM2 CPUFUNC(op_3198_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2683: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d8,An,Xn) */ @@ -10635,7 +10548,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2684; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -10643,7 +10556,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31a0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2684; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10652,7 +10565,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31a0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2684: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d8,An,Xn) */ @@ -10663,14 +10576,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2685; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2685; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10679,7 +10592,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31a8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2685: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ @@ -10691,14 +10604,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2686; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2686; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10707,7 +10620,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31b0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2686: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d8,An,Xn) */ @@ -10717,14 +10630,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2687; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2687; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10733,7 +10646,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31b8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2687: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d8,An,Xn) */ @@ -10743,14 +10656,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2688; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 8)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2688; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10759,7 +10672,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31b9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2688: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d8,An,Xn) */ @@ -10770,14 +10683,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2689; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2689; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10786,7 +10699,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31ba_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2689: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ @@ -10799,14 +10712,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2690; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2690; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10815,7 +10728,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31bb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2690: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d8,An,Xn) */ @@ -10827,7 +10740,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31bc_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2691; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10836,7 +10749,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31bc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2691: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).W */ @@ -10847,7 +10760,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2692; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10856,7 +10769,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2692: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).W */ @@ -10867,7 +10780,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2693; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10876,7 +10789,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2693: ; +}}}} return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).W */ @@ -10886,13 +10799,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2694; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2694; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10901,7 +10814,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31d0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2694: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).W */ @@ -10911,14 +10824,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2695; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2695; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10927,7 +10840,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31d8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2695: ; +}}}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).W */ @@ -10938,14 +10851,14 @@ unsigned long REGPARAM2 CPUFUNC(op_31e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2696; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2696; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10954,7 +10867,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31e0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 4); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2696: ; +}}}}}} return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).W */ @@ -10964,13 +10877,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2697; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2697; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -10979,7 +10892,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31e8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2697: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).W */ @@ -10990,13 +10903,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2698; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2698; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11005,7 +10918,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31f0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2698: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).W */ @@ -11014,13 +10927,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2699; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2699; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11029,7 +10942,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31f8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2699: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).W */ @@ -11038,13 +10951,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2700; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 8); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2700; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11053,7 +10966,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31f9_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2700: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).W */ @@ -11063,13 +10976,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2701; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2701; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11078,7 +10991,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31fa_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2701: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).W */ @@ -11090,13 +11003,13 @@ unsigned long REGPARAM2 CPUFUNC(op_31fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2702; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2702; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11105,7 +11018,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31fb_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2702: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).W */ @@ -11115,7 +11028,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2703; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11124,7 +11037,7 @@ unsigned long REGPARAM2 CPUFUNC(op_31fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2703: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).L */ @@ -11135,7 +11048,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33c0_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2704; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11144,7 +11057,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33c0_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2704: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).L */ @@ -11155,7 +11068,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33c8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2705; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11164,7 +11077,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33c8_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 6); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2705: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).L */ @@ -11174,7 +11087,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2706; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11182,7 +11095,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2706; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11192,7 +11105,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2706: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).L */ @@ -11202,7 +11115,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2707; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -11211,7 +11124,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2707; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11221,7 +11134,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2707: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).L */ @@ -11232,7 +11145,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2708; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -11241,7 +11154,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2708; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11251,7 +11164,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2708: ; +}}}}}} return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).L */ @@ -11261,7 +11174,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2709; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11269,7 +11182,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2709; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11279,7 +11192,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2709: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).L */ @@ -11290,7 +11203,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2710; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11298,7 +11211,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f0_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2710; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11308,7 +11221,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2710: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).L */ @@ -11317,7 +11230,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2711; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11325,7 +11238,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f8_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2711; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11335,7 +11248,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2711: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).L */ @@ -11344,7 +11257,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2712; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11352,7 +11265,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f9_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2712; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11362,7 +11275,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2712: ; +}}}}}} return 28 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).L */ @@ -11372,7 +11285,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2713; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11380,7 +11293,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fa_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2713; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11390,7 +11303,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2713: ; +}}}}}} return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).L */ @@ -11402,7 +11315,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2714; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; @@ -11410,7 +11323,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fb_11)(uae_u32 opcode, struct regstruct *re dsta |= regs->irc; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2714; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11420,7 +11333,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}endlabel2714: ; +}}}}}} return 26 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).L */ @@ -11430,7 +11343,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fc_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 6); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2715; + return 50 * CYCLE_UNIT / 2; } { put_word (dsta,src); CLEAR_CZNV (®s->ccrflags); @@ -11439,7 +11352,7 @@ unsigned long REGPARAM2 CPUFUNC(op_33fc_11)(uae_u32 opcode, struct regstruct *re m68k_incpc (regs, 8); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2715: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* NEGX.B Dn */ @@ -11638,7 +11551,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2725; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -11654,7 +11567,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4050_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2725: ; return 12 * CYCLE_UNIT / 2; } /* NEGX.W (An)+ */ @@ -11664,7 +11576,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2726; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -11681,7 +11593,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4058_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2726: ; return 12 * CYCLE_UNIT / 2; } /* NEGX.W -(An) */ @@ -11692,7 +11603,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2727; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -11709,7 +11620,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4060_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2727: ; return 14 * CYCLE_UNIT / 2; } /* NEGX.W (d16,An) */ @@ -11719,7 +11629,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2728; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -11735,7 +11645,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4068_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2728: ; return 16 * CYCLE_UNIT / 2; } /* NEGX.W (d8,An,Xn) */ @@ -11746,7 +11655,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2729; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -11762,7 +11671,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4070_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2729: ; return 18 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).W */ @@ -11771,7 +11679,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2730; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -11787,7 +11695,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4078_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2730: ; return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).L */ @@ -11796,7 +11703,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2731; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -11812,7 +11719,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4079_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (srca,newv); }}}}}} m68k_incpc (regs, 6); -endlabel2731: ; return 20 * CYCLE_UNIT / 2; } /* NEGX.L Dn */ @@ -11842,7 +11748,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2733; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -11858,7 +11764,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4090_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2733: ; return 20 * CYCLE_UNIT / 2; } /* NEGX.L (An)+ */ @@ -11868,7 +11773,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2734; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -11885,7 +11790,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4098_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2734: ; return 20 * CYCLE_UNIT / 2; } /* NEGX.L -(An) */ @@ -11896,7 +11800,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2735; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -11913,7 +11817,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 2); -endlabel2735: ; return 22 * CYCLE_UNIT / 2; } /* NEGX.L (d16,An) */ @@ -11923,7 +11826,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2736; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -11939,7 +11842,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2736: ; return 24 * CYCLE_UNIT / 2; } /* NEGX.L (d8,An,Xn) */ @@ -11950,7 +11852,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2737; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -11966,7 +11868,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2737: ; return 26 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).W */ @@ -11975,7 +11876,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2738; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -11991,7 +11892,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 4); -endlabel2738: ; return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).L */ @@ -12000,7 +11900,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2739; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -12016,7 +11916,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (srca,newv); }}}}}} m68k_incpc (regs, 6); -endlabel2739: ; return 28 * CYCLE_UNIT / 2; } /* MVSR2.W Dn */ @@ -12037,14 +11936,13 @@ unsigned long REGPARAM2 CPUFUNC(op_40d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2741; + return 50 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 4); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel2741: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ @@ -12054,7 +11952,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2742; + return 50 * CYCLE_UNIT / 2; } { m68k_areg(regs, srcreg) += 2; regs->ir = regs->irc; @@ -12062,7 +11960,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40d8_11)(uae_u32 opcode, struct regstruct *re MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel2742: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ @@ -12073,7 +11970,7 @@ unsigned long REGPARAM2 CPUFUNC(op_40e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2743; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, srcreg) = srca; regs->ir = regs->irc; @@ -12081,7 +11978,6 @@ unsigned long REGPARAM2 CPUFUNC(op_40e0_11)(uae_u32 opcode, struct regstruct *re MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel2743: ; return 14 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ @@ -12091,14 +11987,13 @@ unsigned long REGPARAM2 CPUFUNC(op_40e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2744; + return 50 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 6); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel2744: ; return 16 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ @@ -12109,14 +12004,13 @@ unsigned long REGPARAM2 CPUFUNC(op_40f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2745; + return 50 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 6); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel2745: ; return 18 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ @@ -12125,14 +12019,13 @@ unsigned long REGPARAM2 CPUFUNC(op_40f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2746; + return 50 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 6); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel2746: ; return 16 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ @@ -12141,317 +12034,15 @@ unsigned long REGPARAM2 CPUFUNC(op_40f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2747; + return 50 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 8); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 6); -endlabel2747: ; return 20 * CYCLE_UNIT / 2; } -/* CHK.L Dn,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4100_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uae_s32 src = m68k_dreg(regs, srcreg); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2748; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2748; - } -}}}endlabel2748: ; -return 8 * CYCLE_UNIT / 2; -} -/* CHK.L (An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4110_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2749; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2749; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2749; - } -}}}}}endlabel2749: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (An)+,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4118_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2750; - } -{{ uae_s32 src = get_long (srca); - m68k_areg(regs, srcreg) += 4; -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2750; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2750; - } -}}}}}endlabel2750: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L -(An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4120_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca; - srca = m68k_areg(regs, srcreg) - 4; - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2751; - } -{{ uae_s32 src = get_long (srca); - m68k_areg (regs, srcreg) = srca; -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2751; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2751; - } -}}}}}endlabel2751: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d16,An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4128_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2752; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2752; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2752; - } -}}}}}endlabel2752: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d8,An,Xn),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4130_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca; - srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2753; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2753; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2753; - } -}}}}}endlabel2753: ; -return 24 * CYCLE_UNIT / 2; -} -/* CHK.L (xxx).W,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4138_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2754; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2754; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2754; - } -}}}}}endlabel2754: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (xxx).L,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4139_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = get_long_prefetch (regs, 4); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2755; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 6); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2755; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2755; - } -}}}}}endlabel2755: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (d16,PC),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413a_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_getpc (regs) + 2; - srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2756; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2756; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2756; - } -}}}}}endlabel2756: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d8,PC,Xn),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413b_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr tmppc; - uaecptr srca; - tmppc = m68k_getpc(regs) + 2; - srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); - if (srca & 1) { - exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2757; - } -{{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2757; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2757; - } -}}}}}endlabel2757: ; -return 24 * CYCLE_UNIT / 2; -} -/* CHK.L #.L,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413c_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uae_s32 src = get_long_prefetch (regs, 4); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 6); - regs->ir = regs->irc; - get_word_prefetch (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2758; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2758; - } -}}}endlabel2758: ; -return 12 * CYCLE_UNIT / 2; -} /* CHK.W Dn,Dn */ unsigned long REGPARAM2 CPUFUNC(op_4180_11)(uae_u32 opcode, struct regstruct *regs) { @@ -12466,13 +12057,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4180_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2759; + return 40 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2759; + return 40 * CYCLE_UNIT / 2; } -}}}endlabel2759: ; +}}} return 10 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ @@ -12484,7 +12075,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4190_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2760; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12494,13 +12085,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4190_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2760; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2760; + return 44 * CYCLE_UNIT / 2; } -}}}}}endlabel2760: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ @@ -12512,7 +12103,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4198_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2761; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -12523,13 +12114,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4198_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2761; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2761; + return 44 * CYCLE_UNIT / 2; } -}}}}}endlabel2761: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ @@ -12542,7 +12133,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2762; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -12553,13 +12144,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a0_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2762; + return 46 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2762; + return 46 * CYCLE_UNIT / 2; } -}}}}}endlabel2762: ; +}}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ @@ -12571,7 +12162,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2763; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12581,13 +12172,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a8_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2763; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2763; + return 48 * CYCLE_UNIT / 2; } -}}}}}endlabel2763: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ @@ -12600,7 +12191,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2764; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12610,13 +12201,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b0_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2764; + return 50 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2764; + return 50 * CYCLE_UNIT / 2; } -}}}}}endlabel2764: ; +}}}}} return 20 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ @@ -12627,7 +12218,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2765; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12637,13 +12228,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b8_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2765; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2765; + return 48 * CYCLE_UNIT / 2; } -}}}}}endlabel2765: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ @@ -12654,7 +12245,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2766; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12664,13 +12255,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b9_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2766; + return 52 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2766; + return 52 * CYCLE_UNIT / 2; } -}}}}}endlabel2766: ; +}}}}} return 22 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ @@ -12682,7 +12273,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2767; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12692,13 +12283,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41ba_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2767; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2767; + return 48 * CYCLE_UNIT / 2; } -}}}}}endlabel2767: ; +}}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ @@ -12712,7 +12303,7 @@ unsigned long REGPARAM2 CPUFUNC(op_41bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2768; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -12722,13 +12313,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bb_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2768; + return 50 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2768; + return 50 * CYCLE_UNIT / 2; } -}}}}}endlabel2768: ; +}}}}} return 20 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ @@ -12744,13 +12335,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bc_11)(uae_u32 opcode, struct regstruct *re if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2769; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2769; + return 44 * CYCLE_UNIT / 2; } -}}}endlabel2769: ; +}}} return 14 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ @@ -12980,7 +12571,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4250_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2786; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -12990,7 +12581,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4250_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2786: ; return 12 * CYCLE_UNIT / 2; } /* CLR.W (An)+ */ @@ -13000,7 +12590,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4258_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2787; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -13011,7 +12601,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4258_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2787: ; return 12 * CYCLE_UNIT / 2; } /* CLR.W -(An) */ @@ -13022,7 +12611,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4260_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2788; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -13033,7 +12622,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4260_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2788: ; return 14 * CYCLE_UNIT / 2; } /* CLR.W (d16,An) */ @@ -13043,7 +12631,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4268_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2789; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13053,7 +12641,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4268_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2789: ; return 16 * CYCLE_UNIT / 2; } /* CLR.W (d8,An,Xn) */ @@ -13064,7 +12651,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4270_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2790; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13074,7 +12661,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4270_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2790: ; return 18 * CYCLE_UNIT / 2; } /* CLR.W (xxx).W */ @@ -13083,7 +12669,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4278_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2791; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13093,7 +12679,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4278_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2791: ; return 16 * CYCLE_UNIT / 2; } /* CLR.W (xxx).L */ @@ -13102,7 +12687,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4279_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2792; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13112,7 +12697,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4279_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(0)) < 0); put_word (srca,0); }}}} m68k_incpc (regs, 6); -endlabel2792: ; return 20 * CYCLE_UNIT / 2; } /* CLR.L Dn */ @@ -13136,7 +12720,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4290_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2794; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13146,7 +12730,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4290_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2794: ; return 20 * CYCLE_UNIT / 2; } /* CLR.L (An)+ */ @@ -13156,7 +12739,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4298_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2795; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -13167,7 +12750,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4298_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2795: ; return 20 * CYCLE_UNIT / 2; } /* CLR.L -(An) */ @@ -13178,7 +12760,7 @@ unsigned long REGPARAM2 CPUFUNC(op_42a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2796; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -13189,7 +12771,6 @@ unsigned long REGPARAM2 CPUFUNC(op_42a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 2); -endlabel2796: ; return 22 * CYCLE_UNIT / 2; } /* CLR.L (d16,An) */ @@ -13199,7 +12780,7 @@ unsigned long REGPARAM2 CPUFUNC(op_42a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2797; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13209,7 +12790,6 @@ unsigned long REGPARAM2 CPUFUNC(op_42a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2797: ; return 24 * CYCLE_UNIT / 2; } /* CLR.L (d8,An,Xn) */ @@ -13220,7 +12800,7 @@ unsigned long REGPARAM2 CPUFUNC(op_42b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2798; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13230,7 +12810,6 @@ unsigned long REGPARAM2 CPUFUNC(op_42b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2798: ; return 26 * CYCLE_UNIT / 2; } /* CLR.L (xxx).W */ @@ -13239,7 +12818,7 @@ unsigned long REGPARAM2 CPUFUNC(op_42b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2799; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13249,7 +12828,6 @@ unsigned long REGPARAM2 CPUFUNC(op_42b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 4); -endlabel2799: ; return 24 * CYCLE_UNIT / 2; } /* CLR.L (xxx).L */ @@ -13258,7 +12836,7 @@ unsigned long REGPARAM2 CPUFUNC(op_42b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2800; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13268,7 +12846,6 @@ unsigned long REGPARAM2 CPUFUNC(op_42b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(0)) < 0); put_long (srca,0); }}}} m68k_incpc (regs, 6); -endlabel2800: ; return 28 * CYCLE_UNIT / 2; } #endif @@ -13470,7 +13047,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4450_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2810; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13486,7 +13063,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4450_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2810: ; return 12 * CYCLE_UNIT / 2; } /* NEG.W (An)+ */ @@ -13496,7 +13072,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4458_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2811; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -13513,7 +13089,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4458_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2811: ; return 12 * CYCLE_UNIT / 2; } /* NEG.W -(An) */ @@ -13524,7 +13099,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4460_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2812; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -13541,7 +13116,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4460_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2812: ; return 14 * CYCLE_UNIT / 2; } /* NEG.W (d16,An) */ @@ -13551,7 +13125,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4468_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2813; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13567,7 +13141,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4468_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2813: ; return 16 * CYCLE_UNIT / 2; } /* NEG.W (d8,An,Xn) */ @@ -13578,7 +13151,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4470_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2814; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13594,7 +13167,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4470_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2814: ; return 18 * CYCLE_UNIT / 2; } /* NEG.W (xxx).W */ @@ -13603,7 +13175,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4478_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2815; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13619,7 +13191,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4478_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2815: ; return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).L */ @@ -13628,7 +13199,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4479_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2816; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -13644,7 +13215,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4479_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (srca,dst); }}}}}}} m68k_incpc (regs, 6); -endlabel2816: ; return 20 * CYCLE_UNIT / 2; } /* NEG.L Dn */ @@ -13674,7 +13244,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4490_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2818; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13690,7 +13260,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4490_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2818: ; return 20 * CYCLE_UNIT / 2; } /* NEG.L (An)+ */ @@ -13700,7 +13269,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4498_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2819; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -13717,7 +13286,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4498_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2819: ; return 20 * CYCLE_UNIT / 2; } /* NEG.L -(An) */ @@ -13728,7 +13296,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2820; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -13745,7 +13313,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 2); -endlabel2820: ; return 22 * CYCLE_UNIT / 2; } /* NEG.L (d16,An) */ @@ -13755,7 +13322,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2821; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13771,7 +13338,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2821: ; return 24 * CYCLE_UNIT / 2; } /* NEG.L (d8,An,Xn) */ @@ -13782,7 +13348,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2822; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13798,7 +13364,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2822: ; return 26 * CYCLE_UNIT / 2; } /* NEG.L (xxx).W */ @@ -13807,7 +13372,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2823; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13823,7 +13388,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 4); -endlabel2823: ; return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).L */ @@ -13832,7 +13396,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2824; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -13848,7 +13412,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (srca,dst); }}}}}}} m68k_incpc (regs, 6); -endlabel2824: ; return 28 * CYCLE_UNIT / 2; } /* MV2SR.B Dn */ @@ -13872,7 +13435,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2826; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -13882,7 +13445,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel2826: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.B (An)+ */ @@ -13892,7 +13454,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2827; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -13903,7 +13465,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel2827: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.B -(An) */ @@ -13914,7 +13475,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2828; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -13925,7 +13486,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel2828: ; return 18 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,An) */ @@ -13935,7 +13495,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2829; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -13945,7 +13505,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2829: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,An,Xn) */ @@ -13956,7 +13515,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2830; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -13966,7 +13525,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2830: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).W */ @@ -13975,7 +13533,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2831; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -13985,7 +13543,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2831: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).L */ @@ -13994,7 +13551,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2832; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -14004,7 +13561,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); MakeFromSR(regs); }}}} m68k_incpc (regs, 6); -endlabel2832: ; return 24 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,PC) */ @@ -14014,7 +13570,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2833; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -14024,7 +13580,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2833: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,PC,Xn) */ @@ -14036,7 +13591,7 @@ unsigned long REGPARAM2 CPUFUNC(op_44fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2834; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); MakeSR(regs); @@ -14046,7 +13601,6 @@ unsigned long REGPARAM2 CPUFUNC(op_44fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2834: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.B #.B */ @@ -14213,7 +13767,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4650_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2845; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -14224,7 +13778,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4650_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2845: ; return 12 * CYCLE_UNIT / 2; } /* NOT.W (An)+ */ @@ -14234,7 +13787,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4658_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2846; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -14246,7 +13799,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4658_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2846: ; return 12 * CYCLE_UNIT / 2; } /* NOT.W -(An) */ @@ -14257,7 +13809,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4660_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2847; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -14269,7 +13821,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4660_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2847: ; return 14 * CYCLE_UNIT / 2; } /* NOT.W (d16,An) */ @@ -14279,7 +13830,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4668_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2848; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -14290,7 +13841,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4668_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2848: ; return 16 * CYCLE_UNIT / 2; } /* NOT.W (d8,An,Xn) */ @@ -14301,7 +13851,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4670_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2849; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -14312,7 +13862,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4670_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2849: ; return 18 * CYCLE_UNIT / 2; } /* NOT.W (xxx).W */ @@ -14321,7 +13870,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4678_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2850; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -14332,7 +13881,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4678_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2850: ; return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).L */ @@ -14341,7 +13889,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4679_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2851; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -14352,7 +13900,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4679_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(dst)) < 0); put_word (srca,dst); }}}}} m68k_incpc (regs, 6); -endlabel2851: ; return 20 * CYCLE_UNIT / 2; } /* NOT.L Dn */ @@ -14377,7 +13924,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4690_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2853; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -14388,7 +13935,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4690_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2853: ; return 20 * CYCLE_UNIT / 2; } /* NOT.L (An)+ */ @@ -14398,7 +13944,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4698_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2854; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -14410,7 +13956,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4698_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2854: ; return 20 * CYCLE_UNIT / 2; } /* NOT.L -(An) */ @@ -14421,7 +13966,7 @@ unsigned long REGPARAM2 CPUFUNC(op_46a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2855; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -14433,7 +13978,6 @@ unsigned long REGPARAM2 CPUFUNC(op_46a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 2); -endlabel2855: ; return 22 * CYCLE_UNIT / 2; } /* NOT.L (d16,An) */ @@ -14443,7 +13987,7 @@ unsigned long REGPARAM2 CPUFUNC(op_46a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2856; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -14454,7 +13998,6 @@ unsigned long REGPARAM2 CPUFUNC(op_46a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2856: ; return 24 * CYCLE_UNIT / 2; } /* NOT.L (d8,An,Xn) */ @@ -14465,7 +14008,7 @@ unsigned long REGPARAM2 CPUFUNC(op_46b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2857; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -14476,7 +14019,6 @@ unsigned long REGPARAM2 CPUFUNC(op_46b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2857: ; return 26 * CYCLE_UNIT / 2; } /* NOT.L (xxx).W */ @@ -14485,7 +14027,7 @@ unsigned long REGPARAM2 CPUFUNC(op_46b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2858; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -14496,7 +14038,6 @@ unsigned long REGPARAM2 CPUFUNC(op_46b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 4); -endlabel2858: ; return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).L */ @@ -14505,7 +14046,7 @@ unsigned long REGPARAM2 CPUFUNC(op_46b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2859; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -14516,32 +14057,30 @@ unsigned long REGPARAM2 CPUFUNC(op_46b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); put_long (srca,dst); }}}}} m68k_incpc (regs, 6); -endlabel2859: ; return 28 * CYCLE_UNIT / 2; } /* MV2SR.W Dn */ unsigned long REGPARAM2 CPUFUNC(op_46c0_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2860; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = m68k_dreg(regs, srcreg); regs->sr = src; regs->ir = regs->irc; get_word_prefetch (regs, 4); MakeFromSR(regs); }}} m68k_incpc (regs, 2); -endlabel2860: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ unsigned long REGPARAM2 CPUFUNC(op_46d0_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2861; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2861; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14549,18 +14088,17 @@ unsigned long REGPARAM2 CPUFUNC(op_46d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}}} m68k_incpc (regs, 2); -endlabel2861: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ unsigned long REGPARAM2 CPUFUNC(op_46d8_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2862; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2862; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -14569,19 +14107,18 @@ unsigned long REGPARAM2 CPUFUNC(op_46d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}}} m68k_incpc (regs, 2); -endlabel2862: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ unsigned long REGPARAM2 CPUFUNC(op_46e0_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2863; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2863; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -14590,18 +14127,17 @@ unsigned long REGPARAM2 CPUFUNC(op_46e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); MakeFromSR(regs); }}}}} m68k_incpc (regs, 2); -endlabel2863: ; return 18 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ unsigned long REGPARAM2 CPUFUNC(op_46e8_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2864; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2864; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14609,19 +14145,18 @@ unsigned long REGPARAM2 CPUFUNC(op_46e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}}} m68k_incpc (regs, 4); -endlabel2864: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46f0_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2865; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2865; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14629,17 +14164,16 @@ unsigned long REGPARAM2 CPUFUNC(op_46f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}}} m68k_incpc (regs, 4); -endlabel2865: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ unsigned long REGPARAM2 CPUFUNC(op_46f8_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2866; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2866; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14647,17 +14181,16 @@ unsigned long REGPARAM2 CPUFUNC(op_46f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}}} m68k_incpc (regs, 4); -endlabel2866: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ unsigned long REGPARAM2 CPUFUNC(op_46f9_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2867; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2867; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14665,18 +14198,17 @@ unsigned long REGPARAM2 CPUFUNC(op_46f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); MakeFromSR(regs); }}}}} m68k_incpc (regs, 6); -endlabel2867: ; return 24 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ unsigned long REGPARAM2 CPUFUNC(op_46fa_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2868; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_getpc (regs) + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2868; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14684,20 +14216,19 @@ unsigned long REGPARAM2 CPUFUNC(op_46fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}}} m68k_incpc (regs, 4); -endlabel2868: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46fb_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2869; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc(regs) + 2; srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2869; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->sr = src; @@ -14705,20 +14236,18 @@ unsigned long REGPARAM2 CPUFUNC(op_46fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); MakeFromSR(regs); }}}}} m68k_incpc (regs, 4); -endlabel2869: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_46fc_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2870; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word_prefetch (regs, 4); regs->sr = src; regs->ir = regs->irc; get_word_prefetch (regs, 6); MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel2870: ; return 16 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ @@ -14938,14 +14467,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4850_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2880; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; regs->ir = regs->irc; get_word_prefetch (regs, 4); put_long (dsta,srca); }}}} m68k_incpc (regs, 2); -endlabel2880: ; return 12 * CYCLE_UNIT / 2; } /* PEA.L (d16,An) */ @@ -14957,14 +14485,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4868_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2881; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; regs->ir = regs->irc; get_word_prefetch (regs, 6); put_long (dsta,srca); }}}} m68k_incpc (regs, 4); -endlabel2881: ; return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,An,Xn) */ @@ -14977,14 +14504,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4870_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2882; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; regs->ir = regs->irc; get_word_prefetch (regs, 6); put_long (dsta,srca); }}}} m68k_incpc (regs, 4); -endlabel2882: ; return 20 * CYCLE_UNIT / 2; } /* PEA.L (xxx).W */ @@ -14995,14 +14521,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4878_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2883; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; put_long (dsta,srca); regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}} m68k_incpc (regs, 4); -endlabel2883: ; return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).L */ @@ -15013,14 +14538,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4879_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 6, dsta); - goto endlabel2884; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; put_long (dsta,srca); regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2884: ; return 20 * CYCLE_UNIT / 2; } /* PEA.L (d16,PC) */ @@ -15032,14 +14556,13 @@ unsigned long REGPARAM2 CPUFUNC(op_487a_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2885; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; regs->ir = regs->irc; get_word_prefetch (regs, 6); put_long (dsta,srca); }}}} m68k_incpc (regs, 4); -endlabel2885: ; return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,PC,Xn) */ @@ -15053,14 +14576,13 @@ unsigned long REGPARAM2 CPUFUNC(op_487b_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, 7) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 4, dsta); - goto endlabel2886; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = dsta; regs->ir = regs->irc; get_word_prefetch (regs, 6); put_long (dsta,srca); }}}} m68k_incpc (regs, 4); -endlabel2886: ; return 20 * CYCLE_UNIT / 2; } /* EXT.W Dn */ @@ -15087,7 +14609,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4890_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2888; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15095,7 +14617,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4890_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_word(srca, m68k_areg(regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; writecycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2888: ; +}}}} return (writecycles + 8) * CYCLE_UNIT / 2; } /* MVMLE.W #.W,-(An) */ @@ -15108,7 +14630,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, dstreg) - 0; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2889; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 4); { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; @@ -15124,7 +14646,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48a0_11)(uae_u32 opcode, struct regstruct *re m68k_areg(regs, dstreg) = srca; regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2889: ; +}}}} return (writecycles + 8) * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d16,An) */ @@ -15136,7 +14658,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2890; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15144,7 +14666,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48a8_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_word(srca, m68k_areg(regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; writecycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2890: ; +}}}} return (writecycles + 12) * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d8,An,Xn) */ @@ -15157,7 +14679,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2891; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15165,7 +14687,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b0_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_word(srca, m68k_areg(regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; writecycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2891: ; +}}}} return (writecycles + 14) * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).W */ @@ -15176,7 +14698,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2892; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15184,7 +14706,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b8_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_word(srca, m68k_areg(regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; writecycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2892: ; +}}}} return (writecycles + 12) * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).L */ @@ -15195,7 +14717,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = get_long_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2893; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 8); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15203,7 +14725,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48b9_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_word(srca, m68k_areg(regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; writecycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2893: ; +}}}} return (writecycles + 16) * CYCLE_UNIT / 2; } /* EXT.L Dn */ @@ -15230,7 +14752,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48d0_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2895; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15238,7 +14760,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48d0_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_long(srca, m68k_areg(regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; writecycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2895: ; +}}}} return (writecycles + 8) * CYCLE_UNIT / 2; } /* MVMLE.L #.W,-(An) */ @@ -15251,7 +14773,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, dstreg) - 0; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2896; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 4); { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; @@ -15267,7 +14789,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48e0_11)(uae_u32 opcode, struct regstruct *re m68k_areg(regs, dstreg) = srca; regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2896: ; +}}}} return (writecycles + 8) * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d16,An) */ @@ -15279,7 +14801,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48e8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2897; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15287,7 +14809,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48e8_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_long(srca, m68k_areg(regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; writecycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2897: ; +}}}} return (writecycles + 12) * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d8,An,Xn) */ @@ -15300,7 +14822,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2898; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15308,7 +14830,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48f0_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_long(srca, m68k_areg(regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; writecycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2898: ; +}}}} return (writecycles + 14) * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).W */ @@ -15319,7 +14841,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48f8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2899; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 6); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15327,7 +14849,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48f8_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_long(srca, m68k_areg(regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; writecycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2899: ; +}}}} return (writecycles + 12) * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).L */ @@ -15338,7 +14860,7 @@ unsigned long REGPARAM2 CPUFUNC(op_48f9_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = get_long_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2900; + return 50 * CYCLE_UNIT / 2; } { m68k_incpc (regs, 8); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; @@ -15346,24 +14868,9 @@ unsigned long REGPARAM2 CPUFUNC(op_48f9_11)(uae_u32 opcode, struct regstruct *re while (amask) { put_long(srca, m68k_areg(regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; writecycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}endlabel2900: ; +}}}} return (writecycles + 16) * CYCLE_UNIT / 2; } -/* EXT.B Dn */ -unsigned long REGPARAM2 CPUFUNC(op_49c0_11)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{{ uae_s32 src = m68k_dreg(regs, srcreg); - regs->ir = regs->irc; - get_word_prefetch (regs, 4); -{ uae_u32 dst = (uae_s32)(uae_s8)src; - CLEAR_CZNV (®s->ccrflags); - SET_ZFLG (®s->ccrflags, ((uae_s32)(dst)) == 0); - SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); - m68k_dreg(regs, srcreg) = (dst); -}}} m68k_incpc (regs, 2); -return 4 * CYCLE_UNIT / 2; -} /* TST.B Dn */ unsigned long REGPARAM2 CPUFUNC(op_4a00_11)(uae_u32 opcode, struct regstruct *regs) { @@ -15497,7 +15004,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a50_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2911; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -15506,7 +15013,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a50_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2911: ; return 8 * CYCLE_UNIT / 2; } /* TST.W (An)+ */ @@ -15516,7 +15022,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a58_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2912; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -15526,7 +15032,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a58_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2912: ; return 8 * CYCLE_UNIT / 2; } /* TST.W -(An) */ @@ -15537,7 +15042,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a60_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2913; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -15547,7 +15052,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a60_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2913: ; return 10 * CYCLE_UNIT / 2; } /* TST.W (d16,An) */ @@ -15557,7 +15061,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a68_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2914; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -15566,7 +15070,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a68_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2914: ; return 12 * CYCLE_UNIT / 2; } /* TST.W (d8,An,Xn) */ @@ -15577,7 +15080,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a70_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2915; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -15586,7 +15089,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a70_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2915: ; return 14 * CYCLE_UNIT / 2; } /* TST.W (xxx).W */ @@ -15595,7 +15097,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a78_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2916; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -15604,7 +15106,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a78_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2916: ; return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).L */ @@ -15613,7 +15114,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a79_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2917; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); regs->ir = regs->irc; @@ -15622,7 +15123,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a79_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s16)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s16)(src)) < 0); }}}} m68k_incpc (regs, 6); -endlabel2917: ; return 16 * CYCLE_UNIT / 2; } /* TST.L Dn */ @@ -15645,7 +15145,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a90_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2919; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -15654,7 +15154,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a90_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2919: ; return 12 * CYCLE_UNIT / 2; } /* TST.L (An)+ */ @@ -15664,7 +15163,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4a98_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2920; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -15674,7 +15173,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4a98_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2920: ; return 12 * CYCLE_UNIT / 2; } /* TST.L -(An) */ @@ -15685,7 +15183,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4aa0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2921; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -15695,7 +15193,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4aa0_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 2); -endlabel2921: ; return 14 * CYCLE_UNIT / 2; } /* TST.L (d16,An) */ @@ -15705,7 +15202,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4aa8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2922; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -15714,7 +15211,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4aa8_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2922: ; return 16 * CYCLE_UNIT / 2; } /* TST.L (d8,An,Xn) */ @@ -15725,7 +15221,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2923; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -15734,7 +15230,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab0_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2923: ; return 18 * CYCLE_UNIT / 2; } /* TST.L (xxx).W */ @@ -15743,7 +15238,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2924; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -15752,7 +15247,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab8_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 4); -endlabel2924: ; return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).L */ @@ -15761,7 +15255,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel2925; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); regs->ir = regs->irc; @@ -15770,7 +15264,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4ab9_11)(uae_u32 opcode, struct regstruct *re SET_ZFLG (®s->ccrflags, ((uae_s32)(src)) == 0); SET_NFLG (®s->ccrflags, ((uae_s32)(src)) < 0); }}}} m68k_incpc (regs, 6); -endlabel2925: ; return 20 * CYCLE_UNIT / 2; } /* TAS.B Dn */ @@ -15912,14 +15405,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4c90_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2934; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}} m68k_incpc (regs, 4); -endlabel2934: ; return (readcycles + 12) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(An)+ */ @@ -15932,7 +15424,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4c98_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2935; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } @@ -15940,7 +15432,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4c98_11)(uae_u32 opcode, struct regstruct *re regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}} m68k_incpc (regs, 4); -endlabel2935: ; return (readcycles + 12) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,An) */ @@ -15953,14 +15444,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ca8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2936; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2936: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,An,Xn) */ @@ -15974,14 +15464,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cb0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2937; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2937: ; return (readcycles + 18) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).W */ @@ -15993,14 +15482,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cb8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2938; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2938: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).L */ @@ -16012,14 +15500,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cb9_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = get_long_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2939; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 10); }}}} m68k_incpc (regs, 8); -endlabel2939: ; return (readcycles + 20) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,PC) */ @@ -16033,14 +15520,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2940; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2940: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,PC,Xn) */ @@ -16056,14 +15542,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cbb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2941; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; dmask = movem_next[dmask]; readcycles += 4; } while (amask) { m68k_areg(regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word(srca); srca += 2; amask = movem_next[amask]; readcycles += 4; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2941: ; return (readcycles + 18) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An) */ @@ -16076,14 +15561,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cd0_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2942; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}} m68k_incpc (regs, 4); -endlabel2942: ; return (readcycles + 12) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An)+ */ @@ -16096,7 +15580,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4cd8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2943; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } @@ -16104,7 +15588,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4cd8_11)(uae_u32 opcode, struct regstruct *re regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}} m68k_incpc (regs, 4); -endlabel2943: ; return (readcycles + 12) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,An) */ @@ -16117,14 +15600,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ce8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2944; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2944: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,An,Xn) */ @@ -16138,14 +15620,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cf0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2945; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2945: ; return (readcycles + 18) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).W */ @@ -16157,14 +15638,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cf8_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2946; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2946: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).L */ @@ -16176,14 +15656,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cf9_11)(uae_u32 opcode, struct regstruct *re { uaecptr srca = get_long_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2947; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 10); }}}} m68k_incpc (regs, 8); -endlabel2947: ; return (readcycles + 20) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,PC) */ @@ -16197,14 +15676,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cfa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 6); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2948; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2948: ; return (readcycles + 16) * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,PC,Xn) */ @@ -16220,14 +15698,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4cfb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 6)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 4, srca); - goto endlabel2949; + return 50 * CYCLE_UNIT / 2; } {{ while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = get_long(srca); srca += 4; dmask = movem_next[dmask]; readcycles += 8; } while (amask) { m68k_areg(regs, movem_index1[amask]) = get_long(srca); srca += 4; amask = movem_next[amask]; readcycles += 8; } regs->ir = regs->irc; get_word_prefetch (regs, 8); }}}} m68k_incpc (regs, 6); -endlabel2949: ; return (readcycles + 18) * CYCLE_UNIT / 2; } /* TRAP.L # */ @@ -16237,7 +15714,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e40_11)(uae_u32 opcode, struct regstruct *re {{ uae_u32 src = srcreg; m68k_incpc (regs, 2); Exception (src + 32, regs, 0); -}}return 0 * CYCLE_UNIT / 2; +}}return 34 * CYCLE_UNIT / 2; } /* LINK.W An,#.W */ unsigned long REGPARAM2 CPUFUNC(op_4e50_11)(uae_u32 opcode, struct regstruct *regs) @@ -16247,7 +15724,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e50_11)(uae_u32 opcode, struct regstruct *re olda = m68k_areg(regs, 7) - 4; if (olda & 1) { exception3 (opcode, m68k_getpc(regs) + 2, olda); - goto endlabel2951; + return 50 * CYCLE_UNIT / 2; } { m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg(regs, srcreg); @@ -16258,7 +15735,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4e50_11)(uae_u32 opcode, struct regstruct *re regs->ir = regs->irc; get_word_prefetch (regs, 6); }}}}} m68k_incpc (regs, 4); -endlabel2951: ; return 16 * CYCLE_UNIT / 2; } /* UNLK.L An */ @@ -16270,7 +15746,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e58_11)(uae_u32 opcode, struct regstruct *re { uaecptr olda = m68k_areg(regs, 7); if (olda & 1) { exception3 (opcode, m68k_getpc(regs) + 2, olda); - goto endlabel2952; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 old = get_long (olda); m68k_areg(regs, 7) += 4; @@ -16278,44 +15754,40 @@ unsigned long REGPARAM2 CPUFUNC(op_4e58_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_areg(regs, srcreg) = (old); }}}}} m68k_incpc (regs, 2); -endlabel2952: ; return 12 * CYCLE_UNIT / 2; } /* MVR2USP.L An */ unsigned long REGPARAM2 CPUFUNC(op_4e60_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2953; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s32 src = m68k_areg(regs, srcreg); regs->ir = regs->irc; get_word_prefetch (regs, 4); regs->usp = src; }}} m68k_incpc (regs, 2); -endlabel2953: ; return 4 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ unsigned long REGPARAM2 CPUFUNC(op_4e68_11)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2954; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ regs->ir = regs->irc; get_word_prefetch (regs, 4); m68k_areg(regs, srcreg) = (regs->usp); }}} m68k_incpc (regs, 2); -endlabel2954: ; return 4 * CYCLE_UNIT / 2; } /* RESET.L */ unsigned long REGPARAM2 CPUFUNC(op_4e70_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); return 4 * CYCLE_UNIT / 2; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { regs->ir = regs->irc; get_word_prefetch (regs, 4); cpureset(); regs->irc = get_iword(regs, 4); }} m68k_incpc (regs, 2); -endlabel2955: ; return 132 * CYCLE_UNIT / 2; } /* NOP.L */ @@ -16329,7 +15801,7 @@ return 4 * CYCLE_UNIT / 2; /* STOP.L #.W */ unsigned long REGPARAM2 CPUFUNC(op_4e72_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2957; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word_prefetch (regs, 4); regs->sr = src; MakeFromSR(regs); @@ -16338,24 +15810,24 @@ unsigned long REGPARAM2 CPUFUNC(op_4e72_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2957: ; +}}} return 8 * CYCLE_UNIT / 2; } /* RTE.L */ unsigned long REGPARAM2 CPUFUNC(op_4e73_11)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2958; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr sra = m68k_areg(regs, 7); if (sra & 1) { exception3 (opcode, m68k_getpc(regs) + 2, sra); - goto endlabel2958; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 sr = get_word (sra); m68k_areg(regs, 7) += 2; { uaecptr pca = m68k_areg(regs, 7); if (pca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, pca); - goto endlabel2958; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 pc = get_long (pca); m68k_areg(regs, 7) += 4; @@ -16364,7 +15836,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e73_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}}}endlabel2958: ; +}}}}}}}} return 20 * CYCLE_UNIT / 2; } /* RTD.L #.W */ @@ -16373,20 +15845,23 @@ unsigned long REGPARAM2 CPUFUNC(op_4e74_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr pca = m68k_areg(regs, 7); if (pca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, pca); - goto endlabel2959; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 pc = get_long (pca); m68k_areg(regs, 7) += 4; { uae_s16 offs = get_word_prefetch (regs, 4); m68k_areg(regs, 7) += offs; if (pc & 1) + { exception3 (0x4E74, m68k_getpc(regs), pc); + return 50 * CYCLE_UNIT / 2; + } else m68k_setpc(regs, pc); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}endlabel2959: ; +}}}}} return 14 * CYCLE_UNIT / 2; } /* RTS.L */ @@ -16404,11 +15879,11 @@ unsigned long REGPARAM2 CPUFUNC(op_4e76_11)(uae_u32 opcode, struct regstruct *re { m68k_incpc (regs, 2); if (GET_VFLG (®s->ccrflags)) { Exception (7, regs, m68k_getpc (regs)); - goto endlabel2961; + return 34 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); -}endlabel2961: ; +} return 4 * CYCLE_UNIT / 2; } /* RTR.L */ @@ -16418,14 +15893,14 @@ unsigned long REGPARAM2 CPUFUNC(op_4e77_11)(uae_u32 opcode, struct regstruct *re { uaecptr sra = m68k_areg(regs, 7); if (sra & 1) { exception3 (opcode, m68k_getpc(regs) + 2, sra); - goto endlabel2962; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 sr = get_word (sra); m68k_areg(regs, 7) += 2; { uaecptr pca = m68k_areg(regs, 7); if (pca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, pca); - goto endlabel2962; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 pc = get_long (pca); m68k_areg(regs, 7) += 4; @@ -16435,7 +15910,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e77_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}}}}}endlabel2962: ; +}}}}}}} return 24 * CYCLE_UNIT / 2; } /* JSR.L (An) */ @@ -16446,7 +15921,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e90_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 2; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2963; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16454,7 +15929,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e90_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2963: ; +}}} return 20 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ @@ -16465,7 +15940,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ea8_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2964; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16473,7 +15948,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ea8_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2964: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ @@ -16485,7 +15960,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb0_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2965; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16493,7 +15968,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb0_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2965: ; +}}} return 22 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ @@ -16503,7 +15978,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb8_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2966; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16511,7 +15986,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb8_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2966: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ @@ -16523,7 +15998,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb9_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 6; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2967; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16531,7 +16006,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb9_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2967: ; +}}} return 20 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ @@ -16542,7 +16017,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eba_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2968; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16550,7 +16025,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4eba_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2968: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ @@ -16563,7 +16038,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ebb_11)(uae_u32 opcode, struct regstruct *re { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2969; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); get_word_prefetch (regs, 0); @@ -16571,7 +16046,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4ebb_11)(uae_u32 opcode, struct regstruct *re put_long (m68k_areg (regs, 7), oldpc); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel2969: ; +}}} return 22 * CYCLE_UNIT / 2; } /* JMP.L (An) */ @@ -16581,13 +16056,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ed0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2970; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2970: ; +}} return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ @@ -16597,13 +16072,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ee8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)regs->irc; if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2971; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2971: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ @@ -16614,13 +16089,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), regs->irc); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2972; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2972: ; +}} return 14 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ @@ -16629,13 +16104,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)regs->irc; if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2973; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2973: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ @@ -16646,13 +16121,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef9_11)(uae_u32 opcode, struct regstruct *re srca |= regs->irc; if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2974; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2974: ; +}} return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ @@ -16662,13 +16137,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4efa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)regs->irc; if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2975; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2975: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ @@ -16680,13 +16155,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4efb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, regs->irc); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2976; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel2976: ; +}} return 14 * CYCLE_UNIT / 2; } /* ADD.B #,Dn */ @@ -16919,7 +16394,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5050_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2987; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -16935,7 +16410,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5050_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2987: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W #,(An)+ */ @@ -16947,7 +16421,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5058_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2988; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -16964,7 +16438,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5058_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2988: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W #,-(An) */ @@ -16977,7 +16450,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5060_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2989; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -16994,7 +16467,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5060_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2989: ; return 14 * CYCLE_UNIT / 2; } /* ADD.W #,(d16,An) */ @@ -17006,7 +16478,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5068_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2990; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17022,7 +16494,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5068_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2990: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W #,(d8,An,Xn) */ @@ -17035,7 +16506,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5070_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2991; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17051,7 +16522,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5070_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2991: ; return 18 * CYCLE_UNIT / 2; } /* ADD.W #,(xxx).W */ @@ -17062,7 +16532,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5078_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2992; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17078,7 +16548,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5078_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2992: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W #,(xxx).L */ @@ -17089,7 +16558,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5079_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2993; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17105,7 +16574,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5079_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel2993: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L #,Dn */ @@ -17156,7 +16624,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5090_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2996; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17172,7 +16640,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5090_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2996: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L #,(An)+ */ @@ -17184,7 +16651,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5098_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2997; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -17201,7 +16668,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5098_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2997: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L #,-(An) */ @@ -17214,7 +16680,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2998; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -17231,7 +16697,6 @@ unsigned long REGPARAM2 CPUFUNC(op_50a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel2998: ; return 22 * CYCLE_UNIT / 2; } /* ADD.L #,(d16,An) */ @@ -17243,7 +16708,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel2999; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17259,7 +16724,6 @@ unsigned long REGPARAM2 CPUFUNC(op_50a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel2999: ; return 24 * CYCLE_UNIT / 2; } /* ADD.L #,(d8,An,Xn) */ @@ -17272,7 +16736,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3000; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17288,7 +16752,6 @@ unsigned long REGPARAM2 CPUFUNC(op_50b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3000: ; return 26 * CYCLE_UNIT / 2; } /* ADD.L #,(xxx).W */ @@ -17299,7 +16762,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3001; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17315,7 +16778,6 @@ unsigned long REGPARAM2 CPUFUNC(op_50b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3001: ; return 24 * CYCLE_UNIT / 2; } /* ADD.L #,(xxx).L */ @@ -17326,7 +16788,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3002; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17342,7 +16804,6 @@ unsigned long REGPARAM2 CPUFUNC(op_50b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3002: ; return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ @@ -17371,7 +16832,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3004; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -17383,7 +16844,7 @@ unsigned long REGPARAM2 CPUFUNC(op_50c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3004: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -17709,7 +17170,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3022; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17725,7 +17186,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5150_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3022: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W #,(An)+ */ @@ -17737,7 +17197,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3023; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -17754,7 +17214,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5158_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3023: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W #,-(An) */ @@ -17767,7 +17226,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3024; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -17784,7 +17243,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5160_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3024: ; return 14 * CYCLE_UNIT / 2; } /* SUB.W #,(d16,An) */ @@ -17796,7 +17254,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3025; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17812,7 +17270,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5168_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3025: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W #,(d8,An,Xn) */ @@ -17825,7 +17282,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3026; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17841,7 +17298,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5170_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3026: ; return 18 * CYCLE_UNIT / 2; } /* SUB.W #,(xxx).W */ @@ -17852,7 +17308,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3027; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17868,7 +17324,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5178_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3027: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W #,(xxx).L */ @@ -17879,7 +17334,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3028; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -17895,7 +17350,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5179_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3028: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L #,Dn */ @@ -17943,7 +17397,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3031; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -17959,7 +17413,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5190_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3031: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L #,(An)+ */ @@ -17971,7 +17424,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3032; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -17988,7 +17441,6 @@ unsigned long REGPARAM2 CPUFUNC(op_5198_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3032: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L #,-(An) */ @@ -18001,7 +17453,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3033; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -18018,7 +17470,6 @@ unsigned long REGPARAM2 CPUFUNC(op_51a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3033: ; return 22 * CYCLE_UNIT / 2; } /* SUB.L #,(d16,An) */ @@ -18030,7 +17481,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3034; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -18046,7 +17497,6 @@ unsigned long REGPARAM2 CPUFUNC(op_51a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3034: ; return 24 * CYCLE_UNIT / 2; } /* SUB.L #,(d8,An,Xn) */ @@ -18059,7 +17509,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3035; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -18075,7 +17525,6 @@ unsigned long REGPARAM2 CPUFUNC(op_51b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3035: ; return 26 * CYCLE_UNIT / 2; } /* SUB.L #,(xxx).W */ @@ -18086,7 +17535,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3036; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -18102,7 +17551,6 @@ unsigned long REGPARAM2 CPUFUNC(op_51b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3036: ; return 24 * CYCLE_UNIT / 2; } /* SUB.L #,(xxx).L */ @@ -18113,7 +17561,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3037; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -18129,7 +17577,6 @@ unsigned long REGPARAM2 CPUFUNC(op_51b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3037: ; return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ @@ -18158,7 +17605,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3039; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18170,7 +17617,7 @@ unsigned long REGPARAM2 CPUFUNC(op_51c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3039: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18294,7 +17741,7 @@ unsigned long REGPARAM2 CPUFUNC(op_52c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3048; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18306,7 +17753,7 @@ unsigned long REGPARAM2 CPUFUNC(op_52c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3048: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18430,7 +17877,7 @@ unsigned long REGPARAM2 CPUFUNC(op_53c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3057; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18442,7 +17889,7 @@ unsigned long REGPARAM2 CPUFUNC(op_53c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3057: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18566,7 +18013,7 @@ unsigned long REGPARAM2 CPUFUNC(op_54c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3066; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18578,7 +18025,7 @@ unsigned long REGPARAM2 CPUFUNC(op_54c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3066: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18702,7 +18149,7 @@ unsigned long REGPARAM2 CPUFUNC(op_55c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3075; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18714,7 +18161,7 @@ unsigned long REGPARAM2 CPUFUNC(op_55c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3075: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18838,7 +18285,7 @@ unsigned long REGPARAM2 CPUFUNC(op_56c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3084; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18850,7 +18297,7 @@ unsigned long REGPARAM2 CPUFUNC(op_56c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3084: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -18974,7 +18421,7 @@ unsigned long REGPARAM2 CPUFUNC(op_57c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3093; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -18986,7 +18433,7 @@ unsigned long REGPARAM2 CPUFUNC(op_57c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3093: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19110,7 +18557,7 @@ unsigned long REGPARAM2 CPUFUNC(op_58c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3102; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19122,7 +18569,7 @@ unsigned long REGPARAM2 CPUFUNC(op_58c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3102: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19246,7 +18693,7 @@ unsigned long REGPARAM2 CPUFUNC(op_59c8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3111; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19258,7 +18705,7 @@ unsigned long REGPARAM2 CPUFUNC(op_59c8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3111: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19382,7 +18829,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5ac8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3120; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19394,7 +18841,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5ac8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3120: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19518,7 +18965,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5bc8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3129; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19530,7 +18977,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5bc8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3129: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19654,7 +19101,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5cc8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3138; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19666,7 +19113,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5cc8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3138: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19790,7 +19237,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5dc8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3147; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19802,7 +19249,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5dc8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3147: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -19926,7 +19373,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5ec8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3156; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -19938,7 +19385,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5ec8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3156: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -20062,7 +19509,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5fc8_11)(uae_u32 opcode, struct regstruct *re if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel3165; + return 50 * CYCLE_UNIT / 2; } regs->ir = regs->irc; get_word_prefetch (regs, 2); @@ -20074,7 +19521,7 @@ unsigned long REGPARAM2 CPUFUNC(op_5fc8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}}endlabel3165: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -20177,19 +19624,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6000_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3173; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3173: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20200,18 +19647,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6001_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3174; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3174: ; +}} return 8 * CYCLE_UNIT / 2; } /* BSR.W #.W */ @@ -20222,13 +19669,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6100_11)(uae_u32 opcode, struct regstruct *re s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel3176; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 4, s); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3176: ; +}} return 18 * CYCLE_UNIT / 2; } /* BSR.B # */ @@ -20240,13 +19687,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6101_11)(uae_u32 opcode, struct regstruct *re s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel3177; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 2, s); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3177: ; +}} return 18 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20256,19 +19703,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6200_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3179; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3179: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20279,18 +19726,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6201_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3180; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3180: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20300,19 +19747,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6300_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3182; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3182: ; +}} return 12 * CYCLE_UNIT / 2; } #endif @@ -20326,18 +19773,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6301_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3183; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3183: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20347,19 +19794,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6400_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3185; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3185: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20370,18 +19817,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6401_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3186; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3186: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20391,19 +19838,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6500_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3188; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3188: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20414,18 +19861,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6501_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3189; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3189: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20435,19 +19882,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6600_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3191; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3191: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20458,18 +19905,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6601_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3192; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3192: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20479,19 +19926,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6700_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3194; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3194: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20502,18 +19949,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6701_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3195; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3195: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20523,19 +19970,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6800_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3197; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3197: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20546,18 +19993,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6801_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3198; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3198: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20567,19 +20014,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6900_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3200; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3200: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20590,18 +20037,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6901_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3201; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3201: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20611,19 +20058,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6a00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3203; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3203: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20634,18 +20081,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6a01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3204; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3204: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20655,19 +20102,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6b00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3206; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3206: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20678,18 +20125,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6b01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3207; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3207: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20699,19 +20146,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6c00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3209; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3209: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20722,18 +20169,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6c01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3210; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3210: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20743,19 +20190,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6d00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3212; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3212: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20766,18 +20213,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6d01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3213; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3213: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20787,19 +20234,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6e00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3215; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3215: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20810,18 +20257,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6e01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3216; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3216: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -20831,19 +20278,19 @@ unsigned long REGPARAM2 CPUFUNC(op_6f00_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3218; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3218: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -20854,18 +20301,18 @@ unsigned long REGPARAM2 CPUFUNC(op_6f01_11)(uae_u32 opcode, struct regstruct *re if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel3219; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); get_word_prefetch (regs, 0); regs->ir = regs->irc; get_word_prefetch (regs, 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); regs->ir = regs->irc; get_word_prefetch (regs, 2); -}}endlabel3219: ; +}} return 8 * CYCLE_UNIT / 2; } /* MOVE.L #,Dn */ @@ -21107,7 +20554,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3234; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21119,7 +20566,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8050_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3234: ; return 8 * CYCLE_UNIT / 2; } /* OR.W (An)+,Dn */ @@ -21130,7 +20576,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3235; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -21143,7 +20589,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8058_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3235: ; return 8 * CYCLE_UNIT / 2; } /* OR.W -(An),Dn */ @@ -21155,7 +20600,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3236; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -21168,7 +20613,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8060_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3236: ; return 10 * CYCLE_UNIT / 2; } /* OR.W (d16,An),Dn */ @@ -21179,7 +20623,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3237; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21191,7 +20635,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8068_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3237: ; return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,An,Xn),Dn */ @@ -21203,7 +20646,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3238; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21215,7 +20658,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8070_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3238: ; return 14 * CYCLE_UNIT / 2; } /* OR.W (xxx).W,Dn */ @@ -21225,7 +20667,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3239; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21237,7 +20679,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8078_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3239: ; return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).L,Dn */ @@ -21247,7 +20688,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3240; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21259,7 +20700,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8079_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 6); -endlabel3240: ; return 16 * CYCLE_UNIT / 2; } /* OR.W (d16,PC),Dn */ @@ -21270,7 +20710,7 @@ unsigned long REGPARAM2 CPUFUNC(op_807a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3241; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21282,7 +20722,6 @@ unsigned long REGPARAM2 CPUFUNC(op_807a_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3241: ; return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,PC,Xn),Dn */ @@ -21295,7 +20734,7 @@ unsigned long REGPARAM2 CPUFUNC(op_807b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3242; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -21307,7 +20746,6 @@ unsigned long REGPARAM2 CPUFUNC(op_807b_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3242: ; return 14 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ @@ -21351,7 +20789,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3245; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21363,7 +20801,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8090_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3245: ; return 14 * CYCLE_UNIT / 2; } /* OR.L (An)+,Dn */ @@ -21374,7 +20811,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3246; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -21387,7 +20824,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8098_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3246: ; return 14 * CYCLE_UNIT / 2; } /* OR.L -(An),Dn */ @@ -21399,7 +20835,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3247; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -21412,7 +20848,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3247: ; return 16 * CYCLE_UNIT / 2; } /* OR.L (d16,An),Dn */ @@ -21423,7 +20858,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3248; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21435,7 +20870,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3248: ; return 18 * CYCLE_UNIT / 2; } /* OR.L (d8,An,Xn),Dn */ @@ -21447,7 +20881,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3249; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21459,7 +20893,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3249: ; return 20 * CYCLE_UNIT / 2; } /* OR.L (xxx).W,Dn */ @@ -21469,7 +20902,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3250; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21481,7 +20914,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3250: ; return 18 * CYCLE_UNIT / 2; } /* OR.L (xxx).L,Dn */ @@ -21491,7 +20923,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3251; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21503,7 +20935,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 6); -endlabel3251: ; return 22 * CYCLE_UNIT / 2; } /* OR.L (d16,PC),Dn */ @@ -21514,7 +20945,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3252; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21526,7 +20957,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80ba_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3252: ; return 18 * CYCLE_UNIT / 2; } /* OR.L (d8,PC,Xn),Dn */ @@ -21539,7 +20969,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3253; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21551,7 +20981,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80bb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3253: ; return 20 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ @@ -21582,7 +21011,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 38 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21600,7 +21029,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3255: ; return getDivu68kCycles(dst, src) * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ @@ -21612,7 +21040,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21620,7 +21048,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21638,7 +21066,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3256: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ @@ -21650,7 +21077,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -21659,7 +21086,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21677,7 +21104,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3257: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ @@ -21690,7 +21116,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 10 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -21699,7 +21125,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 10 * CYCLE_UNIT / 2; + return 44 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21717,7 +21143,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3258: ; return (getDivu68kCycles(dst, src) + 6) * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ @@ -21729,7 +21154,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21737,7 +21162,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21755,7 +21180,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3259: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ @@ -21768,7 +21192,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21776,7 +21200,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21794,7 +21218,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3260: ; return (getDivu68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ @@ -21805,7 +21228,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21813,7 +21236,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21831,7 +21254,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3261: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ @@ -21842,7 +21264,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21850,7 +21272,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21868,7 +21290,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_incpc (regs, 6); } -endlabel3262: ; return (getDivu68kCycles(dst, src) + 12) * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ @@ -21880,7 +21301,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21888,7 +21309,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21906,7 +21327,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3263: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ @@ -21920,7 +21340,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -21928,7 +21348,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 52 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21946,7 +21366,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3264: ; return (getDivu68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ @@ -21960,7 +21379,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -21978,7 +21397,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3265: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ @@ -22174,7 +21592,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3275; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -22185,7 +21603,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8150_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3275: ; return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,(An)+ */ @@ -22197,7 +21614,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3276; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -22209,7 +21626,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8158_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3276: ; return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,-(An) */ @@ -22222,7 +21638,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3277; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -22234,7 +21650,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8160_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3277: ; return 14 * CYCLE_UNIT / 2; } /* OR.W Dn,(d16,An) */ @@ -22246,7 +21661,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3278; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -22257,7 +21672,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8168_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3278: ; return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(d8,An,Xn) */ @@ -22270,7 +21684,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3279; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -22281,7 +21695,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8170_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3279: ; return 18 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).W */ @@ -22292,7 +21705,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3280; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -22303,7 +21716,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8178_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3280: ; return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).L */ @@ -22314,7 +21726,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3281; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src |= dst; @@ -22325,7 +21737,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8179_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3281: ; return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,(An) */ @@ -22337,7 +21748,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3282; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -22348,7 +21759,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8190_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3282: ; return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,(An)+ */ @@ -22360,7 +21770,7 @@ unsigned long REGPARAM2 CPUFUNC(op_8198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3283; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -22372,7 +21782,6 @@ unsigned long REGPARAM2 CPUFUNC(op_8198_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3283: ; return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,-(An) */ @@ -22385,7 +21794,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3284; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -22397,7 +21806,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3284: ; return 22 * CYCLE_UNIT / 2; } /* OR.L Dn,(d16,An) */ @@ -22409,7 +21817,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3285; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -22420,7 +21828,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3285: ; return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(d8,An,Xn) */ @@ -22433,7 +21840,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3286; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -22444,7 +21851,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3286: ; return 26 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).W */ @@ -22455,7 +21861,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3287; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -22466,7 +21872,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3287: ; return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).L */ @@ -22477,7 +21882,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3288; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src |= dst; @@ -22488,7 +21893,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3288: ; return 28 * CYCLE_UNIT / 2; } /* DIVS.W Dn,Dn */ @@ -22503,7 +21907,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 38 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22522,7 +21926,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3289: ; return (getDivs68kCycles(dst, src) + 0) * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ @@ -22534,7 +21937,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22542,7 +21945,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22561,7 +21964,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3290: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ @@ -22573,7 +21975,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -22582,7 +21984,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22601,7 +22003,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3291: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ @@ -22614,7 +22015,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 10 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -22623,7 +22024,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 10 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22642,7 +22043,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_incpc (regs, 2); } -endlabel3292: ; return (getDivs68kCycles(dst, src) + 6) * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ @@ -22654,7 +22054,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22662,7 +22062,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22681,7 +22081,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3293: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ @@ -22694,7 +22093,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22702,7 +22101,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 52 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22721,7 +22120,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3294: ; return (getDivs68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ @@ -22732,7 +22130,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22740,7 +22138,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22759,7 +22157,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3295: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ @@ -22770,7 +22167,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22778,7 +22175,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 16 * CYCLE_UNIT / 2; + return 54 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22797,7 +22194,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_incpc (regs, 6); } -endlabel3296: ; return (getDivs68kCycles(dst, src) + 12) * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ @@ -22809,7 +22205,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22817,7 +22213,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22836,7 +22232,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3297: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ @@ -22850,7 +22245,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); uae_s32 dst = m68k_dreg(regs, dstreg); @@ -22858,7 +22253,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 52 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22877,7 +22272,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3298: ; return (getDivs68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ @@ -22891,7 +22285,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_11)(uae_u32 opcode, struct regstruct *re if (src == 0) { m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -22910,7 +22304,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_incpc (regs, 4); } -endlabel3299: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ @@ -23219,7 +22612,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3313; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23236,7 +22629,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9050_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3313: ; return 8 * CYCLE_UNIT / 2; } /* SUB.W (An)+,Dn */ @@ -23247,7 +22639,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3314; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -23265,7 +22657,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9058_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3314: ; return 8 * CYCLE_UNIT / 2; } /* SUB.W -(An),Dn */ @@ -23277,7 +22668,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3315; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -23295,7 +22686,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9060_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3315: ; return 10 * CYCLE_UNIT / 2; } /* SUB.W (d16,An),Dn */ @@ -23306,7 +22696,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3316; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23323,7 +22713,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9068_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3316: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,An,Xn),Dn */ @@ -23335,7 +22724,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3317; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23352,7 +22741,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9070_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3317: ; return 14 * CYCLE_UNIT / 2; } /* SUB.W (xxx).W,Dn */ @@ -23362,7 +22750,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3318; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23379,7 +22767,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9078_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3318: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).L,Dn */ @@ -23389,7 +22776,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3319; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23406,7 +22793,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9079_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 6); -endlabel3319: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W (d16,PC),Dn */ @@ -23417,7 +22803,7 @@ unsigned long REGPARAM2 CPUFUNC(op_907a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3320; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23434,7 +22820,6 @@ unsigned long REGPARAM2 CPUFUNC(op_907a_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3320: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,PC,Xn),Dn */ @@ -23447,7 +22832,7 @@ unsigned long REGPARAM2 CPUFUNC(op_907b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3321; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -23464,7 +22849,6 @@ unsigned long REGPARAM2 CPUFUNC(op_907b_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3321: ; return 14 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ @@ -23540,7 +22924,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3325; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23557,7 +22941,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9090_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3325: ; return 14 * CYCLE_UNIT / 2; } /* SUB.L (An)+,Dn */ @@ -23568,7 +22951,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3326; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -23586,7 +22969,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9098_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3326: ; return 14 * CYCLE_UNIT / 2; } /* SUB.L -(An),Dn */ @@ -23598,7 +22980,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3327; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -23616,7 +22998,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3327: ; return 16 * CYCLE_UNIT / 2; } /* SUB.L (d16,An),Dn */ @@ -23627,7 +23008,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3328; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23644,7 +23025,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3328: ; return 18 * CYCLE_UNIT / 2; } /* SUB.L (d8,An,Xn),Dn */ @@ -23656,7 +23036,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3329; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23673,7 +23053,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3329: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L (xxx).W,Dn */ @@ -23683,7 +23062,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3330; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23700,7 +23079,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3330: ; return 18 * CYCLE_UNIT / 2; } /* SUB.L (xxx).L,Dn */ @@ -23710,7 +23088,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3331; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23727,7 +23105,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3331: ; return 22 * CYCLE_UNIT / 2; } /* SUB.L (d16,PC),Dn */ @@ -23738,7 +23115,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3332; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23755,7 +23132,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90ba_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3332: ; return 18 * CYCLE_UNIT / 2; } /* SUB.L (d8,PC,Xn),Dn */ @@ -23768,7 +23144,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3333; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -23785,7 +23161,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90bb_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3333: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ @@ -23845,7 +23220,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3337; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23854,7 +23229,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90d0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3337: ; return 12 * CYCLE_UNIT / 2; } /* SUBA.W (An)+,An */ @@ -23865,7 +23239,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3338; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -23875,7 +23249,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90d8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3338: ; return 12 * CYCLE_UNIT / 2; } /* SUBA.W -(An),An */ @@ -23887,7 +23260,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3339; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -23897,7 +23270,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90e0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3339: ; return 14 * CYCLE_UNIT / 2; } /* SUBA.W (d16,An),An */ @@ -23908,7 +23280,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3340; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23917,7 +23289,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90e8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3340: ; return 16 * CYCLE_UNIT / 2; } /* SUBA.W (d8,An,Xn),An */ @@ -23929,7 +23300,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3341; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23938,7 +23309,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90f0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3341: ; return 18 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).W,An */ @@ -23948,7 +23318,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3342; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23957,7 +23327,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90f8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3342: ; return 16 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).L,An */ @@ -23967,7 +23336,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3343; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23976,7 +23345,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90f9_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 6); -endlabel3343: ; return 20 * CYCLE_UNIT / 2; } /* SUBA.W (d16,PC),An */ @@ -23987,7 +23355,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3344; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -23996,7 +23364,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90fa_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3344: ; return 16 * CYCLE_UNIT / 2; } /* SUBA.W (d8,PC,Xn),An */ @@ -24009,7 +23376,7 @@ unsigned long REGPARAM2 CPUFUNC(op_90fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3345; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24018,7 +23385,6 @@ unsigned long REGPARAM2 CPUFUNC(op_90fb_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3345: ; return 18 * CYCLE_UNIT / 2; } /* SUBA.W #.W,An */ @@ -24278,7 +23644,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9148_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3357; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -24286,7 +23652,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9148_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3357; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -24303,7 +23669,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9148_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (dsta,newv); }}}}}}}}} m68k_incpc (regs, 2); -endlabel3357: ; return 18 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An) */ @@ -24315,7 +23680,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3358; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -24331,7 +23696,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9150_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3358: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An)+ */ @@ -24343,7 +23707,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3359; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -24360,7 +23724,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9158_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3359: ; return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,-(An) */ @@ -24373,7 +23736,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3360; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -24390,7 +23753,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9160_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3360: ; return 14 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d16,An) */ @@ -24402,7 +23764,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3361; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -24418,7 +23780,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9168_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3361: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d8,An,Xn) */ @@ -24431,7 +23792,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3362; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -24447,7 +23808,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9170_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3362: ; return 18 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).W */ @@ -24458,7 +23818,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3363; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -24474,7 +23834,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9178_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3363: ; return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).L */ @@ -24485,7 +23844,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3364; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -24501,7 +23860,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9179_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3364: ; return 20 * CYCLE_UNIT / 2; } /* SUBX.L Dn,Dn */ @@ -24535,7 +23893,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9188_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3366; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -24543,7 +23901,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9188_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3366; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -24560,7 +23918,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9188_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (dsta,newv); }}}}}}}}} m68k_incpc (regs, 2); -endlabel3366: ; return 30 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An) */ @@ -24572,7 +23929,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3367; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -24588,7 +23945,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9190_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3367: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An)+ */ @@ -24600,7 +23956,7 @@ unsigned long REGPARAM2 CPUFUNC(op_9198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3368; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -24617,7 +23973,6 @@ unsigned long REGPARAM2 CPUFUNC(op_9198_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3368: ; return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,-(An) */ @@ -24630,7 +23985,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3369; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -24647,7 +24002,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3369: ; return 22 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d16,An) */ @@ -24659,7 +24013,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3370; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -24675,7 +24029,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3370: ; return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d8,An,Xn) */ @@ -24688,7 +24041,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3371; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -24704,7 +24057,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3371: ; return 26 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).W */ @@ -24715,7 +24067,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3372; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -24731,7 +24083,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3372: ; return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).L */ @@ -24742,7 +24093,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3373; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -24758,7 +24109,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3373: ; return 28 * CYCLE_UNIT / 2; } /* SUBA.L Dn,An */ @@ -24797,7 +24147,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3376; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24806,7 +24156,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91d0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3376: ; return 14 * CYCLE_UNIT / 2; } /* SUBA.L (An)+,An */ @@ -24817,7 +24166,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3377; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -24827,7 +24176,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91d8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3377: ; return 14 * CYCLE_UNIT / 2; } /* SUBA.L -(An),An */ @@ -24839,7 +24187,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3378; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -24849,7 +24197,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91e0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3378: ; return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d16,An),An */ @@ -24860,7 +24207,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3379; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24869,7 +24216,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91e8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3379: ; return 18 * CYCLE_UNIT / 2; } /* SUBA.L (d8,An,Xn),An */ @@ -24881,7 +24227,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3380; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24890,7 +24236,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91f0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3380: ; return 20 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).W,An */ @@ -24900,7 +24245,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3381; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24909,7 +24254,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91f8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3381: ; return 18 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).L,An */ @@ -24919,7 +24263,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3382; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24928,7 +24272,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91f9_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 6); -endlabel3382: ; return 22 * CYCLE_UNIT / 2; } /* SUBA.L (d16,PC),An */ @@ -24939,7 +24282,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3383; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24948,7 +24291,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91fa_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3383: ; return 18 * CYCLE_UNIT / 2; } /* SUBA.L (d8,PC,Xn),An */ @@ -24961,7 +24303,7 @@ unsigned long REGPARAM2 CPUFUNC(op_91fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3384; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -24970,7 +24312,6 @@ unsigned long REGPARAM2 CPUFUNC(op_91fb_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst - src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3384: ; return 20 * CYCLE_UNIT / 2; } /* SUBA.L #.L,An */ @@ -25266,7 +24607,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3399; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25281,7 +24622,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b050_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3399: ; return 8 * CYCLE_UNIT / 2; } /* CMP.W (An)+,Dn */ @@ -25292,7 +24632,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3400; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -25308,7 +24648,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b058_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3400: ; return 8 * CYCLE_UNIT / 2; } /* CMP.W -(An),Dn */ @@ -25320,7 +24659,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3401; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -25336,7 +24675,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b060_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3401: ; return 10 * CYCLE_UNIT / 2; } /* CMP.W (d16,An),Dn */ @@ -25347,7 +24685,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3402; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25362,7 +24700,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b068_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3402: ; return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,An,Xn),Dn */ @@ -25374,7 +24711,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3403; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25389,7 +24726,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b070_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3403: ; return 14 * CYCLE_UNIT / 2; } /* CMP.W (xxx).W,Dn */ @@ -25399,7 +24735,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3404; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25414,7 +24750,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b078_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3404: ; return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).L,Dn */ @@ -25424,7 +24759,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3405; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25439,7 +24774,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b079_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel3405: ; return 16 * CYCLE_UNIT / 2; } /* CMP.W (d16,PC),Dn */ @@ -25450,7 +24784,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b07a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3406; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25465,7 +24799,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b07a_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3406: ; return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,PC,Xn),Dn */ @@ -25478,7 +24811,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b07b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3407; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -25493,7 +24826,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b07b_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3407: ; return 14 * CYCLE_UNIT / 2; } /* CMP.W #.W,Dn */ @@ -25563,7 +24895,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3411; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25578,7 +24910,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b090_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3411: ; return 14 * CYCLE_UNIT / 2; } /* CMP.L (An)+,Dn */ @@ -25589,7 +24920,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3412; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -25605,7 +24936,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b098_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3412: ; return 14 * CYCLE_UNIT / 2; } /* CMP.L -(An),Dn */ @@ -25617,7 +24947,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3413; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -25633,7 +24963,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0a0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3413: ; return 16 * CYCLE_UNIT / 2; } /* CMP.L (d16,An),Dn */ @@ -25644,7 +24973,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3414; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25659,7 +24988,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0a8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3414: ; return 18 * CYCLE_UNIT / 2; } #endif @@ -25674,7 +25002,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3415; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25689,7 +25017,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3415: ; return 20 * CYCLE_UNIT / 2; } /* CMP.L (xxx).W,Dn */ @@ -25699,7 +25026,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3416; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25714,7 +25041,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3416: ; return 18 * CYCLE_UNIT / 2; } /* CMP.L (xxx).L,Dn */ @@ -25724,7 +25050,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3417; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25739,7 +25065,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0b9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel3417: ; return 22 * CYCLE_UNIT / 2; } /* CMP.L (d16,PC),Dn */ @@ -25750,7 +25075,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3418; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25765,7 +25090,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0ba_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3418: ; return 18 * CYCLE_UNIT / 2; } /* CMP.L (d8,PC,Xn),Dn */ @@ -25778,7 +25102,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3419; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -25793,7 +25117,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0bb_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3419: ; return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,Dn */ @@ -25863,7 +25186,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3423; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -25878,7 +25201,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0d0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3423: ; return 10 * CYCLE_UNIT / 2; } /* CMPA.W (An)+,An */ @@ -25889,7 +25211,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3424; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -25905,7 +25227,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0d8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3424: ; return 10 * CYCLE_UNIT / 2; } /* CMPA.W -(An),An */ @@ -25917,7 +25238,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3425; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -25933,7 +25254,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0e0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3425: ; return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d16,An),An */ @@ -25944,7 +25264,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3426; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -25959,7 +25279,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0e8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3426: ; return 14 * CYCLE_UNIT / 2; } /* CMPA.W (d8,An,Xn),An */ @@ -25971,7 +25290,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3427; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -25986,7 +25305,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3427: ; return 16 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).W,An */ @@ -25996,7 +25314,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3428; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26011,7 +25329,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3428: ; return 14 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).L,An */ @@ -26021,7 +25338,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3429; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26036,7 +25353,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0f9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel3429: ; return 18 * CYCLE_UNIT / 2; } /* CMPA.W (d16,PC),An */ @@ -26047,7 +25363,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3430; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26062,7 +25378,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0fa_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3430: ; return 14 * CYCLE_UNIT / 2; } /* CMPA.W (d8,PC,Xn),An */ @@ -26075,7 +25390,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b0fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3431; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26090,7 +25405,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b0fb_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3431: ; return 16 * CYCLE_UNIT / 2; } /* CMPA.W #.W,An */ @@ -26306,14 +25620,14 @@ unsigned long REGPARAM2 CPUFUNC(op_b148_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3443; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3443; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -26328,7 +25642,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b148_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}}}} m68k_incpc (regs, 2); -endlabel3443: ; return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An) */ @@ -26340,7 +25653,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3444; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -26351,7 +25664,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b150_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3444: ; return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An)+ */ @@ -26363,7 +25675,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3445; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -26375,7 +25687,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b158_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3445: ; return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,-(An) */ @@ -26388,7 +25699,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3446; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -26400,7 +25711,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b160_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3446: ; return 14 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d16,An) */ @@ -26412,7 +25722,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3447; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -26423,7 +25733,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b168_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3447: ; return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d8,An,Xn) */ @@ -26436,7 +25745,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3448; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -26447,7 +25756,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b170_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3448: ; return 18 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).W */ @@ -26458,7 +25766,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3449; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -26469,7 +25777,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b178_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3449: ; return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).L */ @@ -26480,7 +25787,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3450; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src ^= dst; @@ -26491,7 +25798,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b179_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3450: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,Dn */ @@ -26519,14 +25825,14 @@ unsigned long REGPARAM2 CPUFUNC(op_b188_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3452; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3452; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -26541,7 +25847,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b188_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}}}} m68k_incpc (regs, 2); -endlabel3452: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An) */ @@ -26553,7 +25858,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3453; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -26564,7 +25869,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b190_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3453: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An)+ */ @@ -26576,7 +25880,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3454; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -26588,7 +25892,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b198_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3454: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,-(An) */ @@ -26601,7 +25904,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3455; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -26613,7 +25916,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3455: ; return 22 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d16,An) */ @@ -26625,7 +25927,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3456; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -26636,7 +25938,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3456: ; return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d8,An,Xn) */ @@ -26649,7 +25950,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3457; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -26660,7 +25961,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3457: ; return 26 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).W */ @@ -26671,7 +25971,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3458; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -26682,7 +25982,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3458: ; return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).L */ @@ -26693,7 +25992,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3459; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src ^= dst; @@ -26704,7 +26003,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3459: ; return 28 * CYCLE_UNIT / 2; } /* CMPA.L Dn,An */ @@ -26755,7 +26053,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3462; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26770,7 +26068,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1d0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3462: ; return 14 * CYCLE_UNIT / 2; } /* CMPA.L (An)+,An */ @@ -26781,7 +26078,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3463; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -26797,7 +26094,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1d8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3463: ; return 14 * CYCLE_UNIT / 2; } /* CMPA.L -(An),An */ @@ -26809,7 +26105,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3464; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -26825,7 +26121,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1e0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 2); -endlabel3464: ; return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d16,An),An */ @@ -26836,7 +26131,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3465; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26851,7 +26146,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1e8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3465: ; return 18 * CYCLE_UNIT / 2; } /* CMPA.L (d8,An,Xn),An */ @@ -26863,7 +26157,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3466; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26878,7 +26172,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3466: ; return 20 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).W,An */ @@ -26888,7 +26181,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3467; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26903,7 +26196,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3467: ; return 18 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).L,An */ @@ -26913,7 +26205,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3468; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26928,7 +26220,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1f9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 6); -endlabel3468: ; return 22 * CYCLE_UNIT / 2; } /* CMPA.L (d16,PC),An */ @@ -26939,7 +26230,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3469; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26954,7 +26245,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1fa_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3469: ; return 18 * CYCLE_UNIT / 2; } /* CMPA.L (d8,PC,Xn),An */ @@ -26967,7 +26257,7 @@ unsigned long REGPARAM2 CPUFUNC(op_b1fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3470; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -26982,7 +26272,6 @@ unsigned long REGPARAM2 CPUFUNC(op_b1fb_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, ((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (®s->ccrflags, flgn != 0); }}}}}}}} m68k_incpc (regs, 4); -endlabel3470: ; return 20 * CYCLE_UNIT / 2; } /* CMPA.L #.L,An */ @@ -27228,7 +26517,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3484; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27240,7 +26529,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c050_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3484: ; return 8 * CYCLE_UNIT / 2; } /* AND.W (An)+,Dn */ @@ -27251,7 +26539,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3485; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -27264,7 +26552,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c058_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3485: ; return 8 * CYCLE_UNIT / 2; } /* AND.W -(An),Dn */ @@ -27276,7 +26563,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3486; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -27289,7 +26576,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c060_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 2); -endlabel3486: ; return 10 * CYCLE_UNIT / 2; } /* AND.W (d16,An),Dn */ @@ -27300,7 +26586,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3487; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27312,7 +26598,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c068_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3487: ; return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,An,Xn),Dn */ @@ -27324,7 +26609,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3488; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27336,7 +26621,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c070_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3488: ; return 14 * CYCLE_UNIT / 2; } /* AND.W (xxx).W,Dn */ @@ -27346,7 +26630,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3489; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27358,7 +26642,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c078_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3489: ; return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).L,Dn */ @@ -27368,7 +26651,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3490; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27380,7 +26663,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c079_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 6); -endlabel3490: ; return 16 * CYCLE_UNIT / 2; } /* AND.W (d16,PC),Dn */ @@ -27391,7 +26673,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c07a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3491; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27403,7 +26685,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c07a_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3491: ; return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,PC,Xn),Dn */ @@ -27416,7 +26697,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c07b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3492; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27428,7 +26709,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c07b_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (regs, 4); -endlabel3492: ; return 14 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ @@ -27472,7 +26752,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3495; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27484,7 +26764,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c090_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3495: ; return 14 * CYCLE_UNIT / 2; } /* AND.L (An)+,Dn */ @@ -27495,7 +26774,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3496; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -27508,7 +26787,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c098_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3496: ; return 14 * CYCLE_UNIT / 2; } /* AND.L -(An),Dn */ @@ -27520,7 +26798,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3497; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -27533,7 +26811,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 2); -endlabel3497: ; return 16 * CYCLE_UNIT / 2; } /* AND.L (d16,An),Dn */ @@ -27544,7 +26821,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3498; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27556,7 +26833,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3498: ; return 18 * CYCLE_UNIT / 2; } /* AND.L (d8,An,Xn),Dn */ @@ -27568,7 +26844,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3499; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27580,7 +26856,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3499: ; return 20 * CYCLE_UNIT / 2; } /* AND.L (xxx).W,Dn */ @@ -27590,7 +26865,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3500; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27602,7 +26877,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3500: ; return 18 * CYCLE_UNIT / 2; } /* AND.L (xxx).L,Dn */ @@ -27612,7 +26886,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3501; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27624,7 +26898,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 6); -endlabel3501: ; return 22 * CYCLE_UNIT / 2; } /* AND.L (d16,PC),Dn */ @@ -27635,7 +26908,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3502; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27647,7 +26920,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0ba_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3502: ; return 18 * CYCLE_UNIT / 2; } /* AND.L (d8,PC,Xn),Dn */ @@ -27660,7 +26932,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3503; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -27672,7 +26944,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c0bb_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); m68k_dreg(regs, dstreg) = (src); }}}}} m68k_incpc (regs, 4); -endlabel3503: ; return 20 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ @@ -27716,7 +26987,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0d0_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27728,7 +26999,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0d0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 2); -}}endlabel3506: ; +}} return (42 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (An)+,Dn */ @@ -27739,7 +27010,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0d8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -27752,7 +27023,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0d8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 2); -}}endlabel3507: ; +}} return (42 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W -(An),Dn */ @@ -27764,7 +27035,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 10 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -27777,7 +27048,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0e0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 2); -}}endlabel3508: ; +}} return (44 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (d16,An),Dn */ @@ -27788,7 +27059,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0e8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27800,7 +27071,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0e8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 4); -}}endlabel3509: ; +}} return (46 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (d8,An,Xn),Dn */ @@ -27812,7 +27083,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27824,7 +27095,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 4); -}}endlabel3510: ; +}} return (48 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (xxx).W,Dn */ @@ -27834,7 +27105,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27846,7 +27117,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 4); -}}endlabel3511: ; +}} return (46 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (xxx).L,Dn */ @@ -27856,7 +27127,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f9_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27868,7 +27139,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0f9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 6); -}}endlabel3512: ; +}} return (50 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (d16,PC),Dn */ @@ -27879,7 +27150,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27891,7 +27162,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0fa_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 4); -}}endlabel3513: ; +}} return (46 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W (d8,PC,Xn),Dn */ @@ -27904,7 +27175,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -27916,7 +27187,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c0fb_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); m68k_incpc (regs, 4); -}}endlabel3514: ; +}} return (48 + bitset_count(src & 0xFFFF) * 2) * CYCLE_UNIT / 2; } /* MULU.W #.W,Dn */ @@ -28158,7 +27429,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3527; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -28169,7 +27440,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c150_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3527: ; return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,(An)+ */ @@ -28181,7 +27451,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3528; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -28193,7 +27463,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c158_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3528: ; return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,-(An) */ @@ -28206,7 +27475,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3529; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -28218,7 +27487,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c160_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_word (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3529: ; return 14 * CYCLE_UNIT / 2; } /* AND.W Dn,(d16,An) */ @@ -28230,7 +27498,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3530; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -28241,7 +27509,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c168_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3530: ; return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(d8,An,Xn) */ @@ -28254,7 +27521,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3531; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -28265,7 +27532,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c170_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3531: ; return 18 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).W */ @@ -28276,7 +27542,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3532; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -28287,7 +27553,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c178_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_word (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3532: ; return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).L */ @@ -28298,7 +27563,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3533; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); src &= dst; @@ -28309,7 +27574,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c179_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_word (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3533: ; return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,An */ @@ -28335,7 +27599,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3535; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -28346,7 +27610,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c190_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3535: ; return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,(An)+ */ @@ -28358,7 +27621,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3536; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -28370,7 +27633,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c198_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3536: ; return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,-(An) */ @@ -28383,7 +27645,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3537; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -28395,7 +27657,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1a0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 4); put_long (dsta,src); }}}}} m68k_incpc (regs, 2); -endlabel3537: ; return 22 * CYCLE_UNIT / 2; } /* AND.L Dn,(d16,An) */ @@ -28407,7 +27668,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3538; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -28418,7 +27679,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1a8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3538: ; return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(d8,An,Xn) */ @@ -28431,7 +27691,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3539; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -28442,7 +27702,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b0_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3539: ; return 26 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).W */ @@ -28453,7 +27712,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3540; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -28464,7 +27723,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b8_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 6); put_long (dsta,src); }}}}} m68k_incpc (regs, 4); -endlabel3540: ; return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).L */ @@ -28475,7 +27733,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3541; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); src &= dst; @@ -28486,7 +27744,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1b9_11)(uae_u32 opcode, struct regstruct *re get_word_prefetch (regs, 8); put_long (dsta,src); }}}}} m68k_incpc (regs, 6); -endlabel3541: ; return 28 * CYCLE_UNIT / 2; } /* MULS.W Dn,Dn */ @@ -28514,7 +27771,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1d0_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28526,7 +27783,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1d0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 2); -endlabel3543: ; return (42 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (An)+,Dn */ @@ -28537,7 +27793,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1d8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 8 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -28550,7 +27806,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1d8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 2); -endlabel3544: ; return (42 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W -(An),Dn */ @@ -28562,7 +27817,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 10 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -28575,7 +27830,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1e0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 2); -endlabel3545: ; return (44 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (d16,An),Dn */ @@ -28586,7 +27840,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1e8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28598,7 +27852,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1e8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 4); -endlabel3546: ; return (46 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (d8,An,Xn),Dn */ @@ -28610,7 +27863,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28622,7 +27875,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 4); -endlabel3547: ; return (48 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (xxx).W,Dn */ @@ -28632,7 +27884,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f8_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28644,7 +27896,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 4); -endlabel3548: ; return (46 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (xxx).L,Dn */ @@ -28654,7 +27905,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f9_11)(uae_u32 opcode, struct regstruct *re uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28666,7 +27917,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1f9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 6); -endlabel3549: ; return (50 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (d16,PC),Dn */ @@ -28677,7 +27927,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 12 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28689,7 +27939,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1fa_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 4); -endlabel3550: ; return (46 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W (d8,PC,Xn),Dn */ @@ -28702,7 +27951,7 @@ unsigned long REGPARAM2 CPUFUNC(op_c1fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - return 14 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -28714,7 +27963,6 @@ unsigned long REGPARAM2 CPUFUNC(op_c1fb_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); m68k_dreg(regs, dstreg) = (newv); }} m68k_incpc (regs, 4); -endlabel3551: ; return (48 + bitset_count(src ^ (src << 1)) * 2) * CYCLE_UNIT / 2; } /* MULS.W #.W,Dn */ @@ -29039,7 +28287,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d050_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3566; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29056,7 +28304,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d050_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3566: ; return 8 * CYCLE_UNIT / 2; } /* ADD.W (An)+,Dn */ @@ -29067,7 +28314,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d058_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3567; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -29085,7 +28332,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d058_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3567: ; return 8 * CYCLE_UNIT / 2; } /* ADD.W -(An),Dn */ @@ -29097,7 +28343,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d060_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3568; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -29115,7 +28361,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d060_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 2); -endlabel3568: ; return 10 * CYCLE_UNIT / 2; } /* ADD.W (d16,An),Dn */ @@ -29126,7 +28371,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d068_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3569; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29143,7 +28388,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d068_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3569: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,An,Xn),Dn */ @@ -29155,7 +28399,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d070_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3570; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29172,7 +28416,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d070_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3570: ; return 14 * CYCLE_UNIT / 2; } /* ADD.W (xxx).W,Dn */ @@ -29182,7 +28425,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d078_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3571; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29199,7 +28442,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d078_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3571: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).L,Dn */ @@ -29209,7 +28451,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d079_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3572; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29226,7 +28468,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d079_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 6); -endlabel3572: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W (d16,PC),Dn */ @@ -29237,7 +28478,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d07a_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3573; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29254,7 +28495,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d07a_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3573: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,PC,Xn),Dn */ @@ -29267,7 +28507,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d07b_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3574; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg(regs, dstreg); @@ -29284,7 +28524,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d07b_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (regs, 4); -endlabel3574: ; return 14 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ @@ -29360,7 +28599,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d090_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3578; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29377,7 +28616,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d090_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3578: ; return 14 * CYCLE_UNIT / 2; } /* ADD.L (An)+,Dn */ @@ -29388,7 +28626,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d098_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3579; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -29406,7 +28644,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d098_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3579: ; return 14 * CYCLE_UNIT / 2; } /* ADD.L -(An),Dn */ @@ -29418,7 +28655,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0a0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3580; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -29436,7 +28673,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3580: ; return 16 * CYCLE_UNIT / 2; } /* ADD.L (d16,An),Dn */ @@ -29447,7 +28683,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0a8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3581; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29464,7 +28700,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3581: ; return 18 * CYCLE_UNIT / 2; } /* ADD.L (d8,An,Xn),Dn */ @@ -29476,7 +28711,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3582; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29493,7 +28728,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3582: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L (xxx).W,Dn */ @@ -29503,7 +28737,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3583; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29520,7 +28754,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3583: ; return 18 * CYCLE_UNIT / 2; } /* ADD.L (xxx).L,Dn */ @@ -29530,7 +28763,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3584; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29547,7 +28780,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3584: ; return 22 * CYCLE_UNIT / 2; } /* ADD.L (d16,PC),Dn */ @@ -29558,7 +28790,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0ba_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3585; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29575,7 +28807,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0ba_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3585: ; return 18 * CYCLE_UNIT / 2; } /* ADD.L (d8,PC,Xn),Dn */ @@ -29588,7 +28819,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0bb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3586; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg(regs, dstreg); @@ -29605,7 +28836,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0bb_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); m68k_dreg(regs, dstreg) = (newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3586: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ @@ -29665,7 +28895,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3590; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29674,7 +28904,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0d0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3590: ; return 12 * CYCLE_UNIT / 2; } /* ADDA.W (An)+,An */ @@ -29685,7 +28914,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3591; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; @@ -29695,7 +28924,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0d8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3591: ; return 12 * CYCLE_UNIT / 2; } /* ADDA.W -(An),An */ @@ -29707,7 +28935,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3592; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -29717,7 +28945,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0e0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3592: ; return 14 * CYCLE_UNIT / 2; } /* ADDA.W (d16,An),An */ @@ -29728,7 +28955,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3593; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29737,7 +28964,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0e8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3593: ; return 16 * CYCLE_UNIT / 2; } /* ADDA.W (d8,An,Xn),An */ @@ -29749,7 +28975,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3594; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29758,7 +28984,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3594: ; return 18 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).W,An */ @@ -29768,7 +28993,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3595; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29777,7 +29002,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3595: ; return 16 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).L,An */ @@ -29787,7 +29011,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3596; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29796,7 +29020,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0f9_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 6); -endlabel3596: ; return 20 * CYCLE_UNIT / 2; } /* ADDA.W (d16,PC),An */ @@ -29807,7 +29030,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3597; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29816,7 +29039,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0fa_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3597: ; return 16 * CYCLE_UNIT / 2; } /* ADDA.W (d8,PC,Xn),An */ @@ -29829,7 +29051,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d0fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3598; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -29838,7 +29060,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d0fb_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3598: ; return 18 * CYCLE_UNIT / 2; } /* ADDA.W #.W,An */ @@ -30098,7 +29319,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d148_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3610; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; @@ -30106,7 +29327,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d148_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3610; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -30123,7 +29344,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d148_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s16)(newv)) < 0); put_word (dsta,newv); }}}}}}}}} m68k_incpc (regs, 2); -endlabel3610: ; return 18 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An) */ @@ -30135,7 +29355,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d150_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3611; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -30151,7 +29371,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d150_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3611: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An)+ */ @@ -30163,7 +29382,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d158_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3612; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg(regs, dstreg) += 2; @@ -30180,7 +29399,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d158_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3612: ; return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,-(An) */ @@ -30193,7 +29411,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d160_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3613; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; @@ -30210,7 +29428,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d160_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3613: ; return 14 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d16,An) */ @@ -30222,7 +29439,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d168_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3614; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -30238,7 +29455,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d168_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3614: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d8,An,Xn) */ @@ -30251,7 +29467,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d170_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3615; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -30267,7 +29483,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d170_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3615: ; return 18 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).W */ @@ -30278,7 +29493,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d178_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3616; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -30294,7 +29509,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d178_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3616: ; return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).L */ @@ -30305,7 +29519,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d179_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3617; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 dst = get_word (dsta); regs->ir = regs->irc; @@ -30321,7 +29535,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d179_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_word (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3617: ; return 20 * CYCLE_UNIT / 2; } /* ADDX.L Dn,Dn */ @@ -30355,7 +29568,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d188_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3619; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -30363,7 +29576,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d188_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3619; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -30380,7 +29593,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d188_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, ((uae_s32)(newv)) < 0); put_long (dsta,newv); }}}}}}}}} m68k_incpc (regs, 2); -endlabel3619: ; return 30 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An) */ @@ -30392,7 +29604,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d190_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3620; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -30408,7 +29620,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d190_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3620: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An)+ */ @@ -30420,7 +29631,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d198_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3621; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg(regs, dstreg) += 4; @@ -30437,7 +29648,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d198_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3621: ; return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,-(An) */ @@ -30450,7 +29660,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1a0_11)(uae_u32 opcode, struct regstruct *re dsta = m68k_areg(regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3622; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; @@ -30467,7 +29677,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1a0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 2); -endlabel3622: ; return 22 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d16,An) */ @@ -30479,7 +29688,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1a8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3623; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -30495,7 +29704,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1a8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3623: ; return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d8,An,Xn) */ @@ -30508,7 +29716,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b0_11)(uae_u32 opcode, struct regstruct *re dsta = get_disp_ea_000(regs, m68k_areg(regs, dstreg), get_word_prefetch (regs, 4)); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3624; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -30524,7 +29732,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b0_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3624: ; return 26 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).W */ @@ -30535,7 +29742,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b8_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3625; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -30551,7 +29758,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b8_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 4); -endlabel3625: ; return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).L */ @@ -30562,7 +29768,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b9_11)(uae_u32 opcode, struct regstruct *re { uaecptr dsta = get_long_prefetch (regs, 4); if (dsta & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dsta); - goto endlabel3626; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 dst = get_long (dsta); regs->ir = regs->irc; @@ -30578,7 +29784,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1b9_11)(uae_u32 opcode, struct regstruct *re SET_NFLG (®s->ccrflags, flgn != 0); put_long (dsta,newv); }}}}}}}} m68k_incpc (regs, 6); -endlabel3626: ; return 28 * CYCLE_UNIT / 2; } /* ADDA.L Dn,An */ @@ -30617,7 +29822,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3629; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30626,7 +29831,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1d0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3629: ; return 14 * CYCLE_UNIT / 2; } /* ADDA.L (An)+,An */ @@ -30637,7 +29841,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3630; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg(regs, srcreg) += 4; @@ -30647,7 +29851,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1d8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3630: ; return 14 * CYCLE_UNIT / 2; } /* ADDA.L -(An),An */ @@ -30659,7 +29862,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1e0_11)(uae_u32 opcode, struct regstruct *re srca = m68k_areg(regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3631; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; @@ -30669,7 +29872,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1e0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 2); -endlabel3631: ; return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d16,An),An */ @@ -30680,7 +29882,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3632; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30689,7 +29891,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1e8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3632: ; return 18 * CYCLE_UNIT / 2; } /* ADDA.L (d8,An,Xn),An */ @@ -30701,7 +29902,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f0_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3633; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30710,7 +29911,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f0_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3633: ; return 20 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).W,An */ @@ -30720,7 +29920,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3634; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30729,7 +29929,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f8_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3634: ; return 18 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).L,An */ @@ -30739,7 +29938,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr srca = get_long_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3635; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30748,7 +29947,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1f9_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 6); -endlabel3635: ; return 22 * CYCLE_UNIT / 2; } /* ADDA.L (d16,PC),An */ @@ -30759,7 +29957,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1fa_11)(uae_u32 opcode, struct regstruct *re srca += (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3636; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30768,7 +29966,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1fa_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3636: ; return 18 * CYCLE_UNIT / 2; } /* ADDA.L (d8,PC,Xn),An */ @@ -30781,7 +29978,7 @@ unsigned long REGPARAM2 CPUFUNC(op_d1fb_11)(uae_u32 opcode, struct regstruct *re srca = get_disp_ea_000(regs, tmppc, get_word_prefetch (regs, 4)); if (srca & 1) { exception3 (opcode, m68k_getpc(regs) + 2, srca); - goto endlabel3637; + return 50 * CYCLE_UNIT / 2; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg(regs, dstreg); @@ -30790,7 +29987,6 @@ unsigned long REGPARAM2 CPUFUNC(op_d1fb_11)(uae_u32 opcode, struct regstruct *re { uae_u32 newv = dst + src; m68k_areg(regs, dstreg) = (newv); }}}}}} m68k_incpc (regs, 4); -endlabel3637: ; return 20 * CYCLE_UNIT / 2; } /* ADDA.L #.L,An */ @@ -31521,7 +30717,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3663; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -31537,7 +30733,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0d0_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3663: ; return 12 * CYCLE_UNIT / 2; } /* ASRW.W (An)+ */ @@ -31547,7 +30742,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3664; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -31564,7 +30759,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0d8_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3664: ; return 12 * CYCLE_UNIT / 2; } /* ASRW.W -(An) */ @@ -31575,7 +30769,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3665; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -31592,7 +30786,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0e0_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3665: ; return 14 * CYCLE_UNIT / 2; } /* ASRW.W (d16,An) */ @@ -31602,7 +30795,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3666; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -31618,7 +30811,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0e8_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3666: ; return 16 * CYCLE_UNIT / 2; } /* ASRW.W (d8,An,Xn) */ @@ -31629,7 +30821,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3667; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -31645,7 +30837,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f0_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3667: ; return 18 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).W */ @@ -31654,7 +30845,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3668; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -31670,7 +30861,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f8_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3668: ; return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).L */ @@ -31679,7 +30869,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3669; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -31695,7 +30885,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e0f9_11)(uae_u32 opcode, struct regstruct *re COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3669: ; return 20 * CYCLE_UNIT / 2; } /* ASL.B #,Dn */ @@ -32407,7 +31596,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3694; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32425,7 +31614,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1d0_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3694: ; return 12 * CYCLE_UNIT / 2; } /* ASLW.W (An)+ */ @@ -32435,7 +31623,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3695; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -32454,7 +31642,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1d8_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3695: ; return 12 * CYCLE_UNIT / 2; } /* ASLW.W -(An) */ @@ -32465,7 +31652,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3696; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -32484,7 +31671,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1e0_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3696: ; return 14 * CYCLE_UNIT / 2; } /* ASLW.W (d16,An) */ @@ -32494,7 +31680,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3697; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32512,7 +31698,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1e8_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3697: ; return 16 * CYCLE_UNIT / 2; } /* ASLW.W (d8,An,Xn) */ @@ -32523,7 +31708,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3698; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32541,7 +31726,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f0_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3698: ; return 18 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).W */ @@ -32550,7 +31734,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3699; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32568,7 +31752,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f8_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3699: ; return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).L */ @@ -32577,7 +31760,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3700; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32595,7 +31778,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e1f9_11)(uae_u32 opcode, struct regstruct *re SET_VFLG (®s->ccrflags, GET_VFLG (®s->ccrflags) | (sign2 != sign)); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3700: ; return 20 * CYCLE_UNIT / 2; } /* LSRW.W (An) */ @@ -32605,7 +31787,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3701; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32620,7 +31802,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3701: ; return 12 * CYCLE_UNIT / 2; } /* LSRW.W (An)+ */ @@ -32630,7 +31811,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3702; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -32646,7 +31827,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3702: ; return 12 * CYCLE_UNIT / 2; } /* LSRW.W -(An) */ @@ -32657,7 +31837,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3703; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -32673,7 +31853,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3703: ; return 14 * CYCLE_UNIT / 2; } /* LSRW.W (d16,An) */ @@ -32683,7 +31862,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3704; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32698,7 +31877,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3704: ; return 16 * CYCLE_UNIT / 2; } /* LSRW.W (d8,An,Xn) */ @@ -32709,7 +31887,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3705; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32724,7 +31902,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3705: ; return 18 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).W */ @@ -32733,7 +31910,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3706; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32748,7 +31925,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3706: ; return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).L */ @@ -32757,7 +31933,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e2f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3707; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32772,7 +31948,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3707: ; return 20 * CYCLE_UNIT / 2; } /* LSLW.W (An) */ @@ -32782,7 +31957,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3708; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32797,7 +31972,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3708: ; return 12 * CYCLE_UNIT / 2; } /* LSLW.W (An)+ */ @@ -32807,7 +31981,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3709; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -32823,7 +31997,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3709: ; return 12 * CYCLE_UNIT / 2; } /* LSLW.W -(An) */ @@ -32834,7 +32007,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3710; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -32850,7 +32023,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3710: ; return 14 * CYCLE_UNIT / 2; } /* LSLW.W (d16,An) */ @@ -32860,7 +32032,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3711; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32875,7 +32047,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3711: ; return 16 * CYCLE_UNIT / 2; } /* LSLW.W (d8,An,Xn) */ @@ -32886,7 +32057,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3712; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32901,7 +32072,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3712: ; return 18 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).W */ @@ -32910,7 +32080,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3713; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32925,7 +32095,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3713: ; return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).L */ @@ -32934,7 +32103,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e3f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3714; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32949,7 +32118,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3714: ; return 20 * CYCLE_UNIT / 2; } /* ROXRW.W (An) */ @@ -32959,7 +32127,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3715; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -32975,7 +32143,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3715: ; return 12 * CYCLE_UNIT / 2; } /* ROXRW.W (An)+ */ @@ -32985,7 +32152,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3716; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -33002,7 +32169,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3716: ; return 12 * CYCLE_UNIT / 2; } /* ROXRW.W -(An) */ @@ -33013,7 +32179,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3717; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -33030,7 +32196,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3717: ; return 14 * CYCLE_UNIT / 2; } /* ROXRW.W (d16,An) */ @@ -33040,7 +32205,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3718; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33056,7 +32221,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3718: ; return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (d8,An,Xn) */ @@ -33067,7 +32231,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3719; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33083,7 +32247,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3719: ; return 18 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).W */ @@ -33092,7 +32255,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3720; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33108,7 +32271,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3720: ; return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).L */ @@ -33117,7 +32279,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e4f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3721; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33133,7 +32295,6 @@ SET_CFLG (®s->ccrflags, carry); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3721: ; return 20 * CYCLE_UNIT / 2; } /* ROXLW.W (An) */ @@ -33143,7 +32304,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3722; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33159,7 +32320,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3722: ; return 12 * CYCLE_UNIT / 2; } /* ROXLW.W (An)+ */ @@ -33169,7 +32329,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3723; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -33186,7 +32346,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3723: ; return 12 * CYCLE_UNIT / 2; } /* ROXLW.W -(An) */ @@ -33197,7 +32356,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3724; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -33214,7 +32373,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3724: ; return 14 * CYCLE_UNIT / 2; } /* ROXLW.W (d16,An) */ @@ -33224,7 +32382,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3725; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33240,7 +32398,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3725: ; return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (d8,An,Xn) */ @@ -33251,7 +32408,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3726; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33267,7 +32424,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3726: ; return 18 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).W */ @@ -33276,7 +32432,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3727; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33292,7 +32448,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3727: ; return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).L */ @@ -33301,7 +32456,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e5f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3728; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33317,7 +32472,6 @@ SET_CFLG (®s->ccrflags, carry >> 15); COPY_CARRY (®s->ccrflags); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3728: ; return 20 * CYCLE_UNIT / 2; } /* RORW.W (An) */ @@ -33327,7 +32481,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3729; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33342,7 +32496,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6d0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3729: ; return 12 * CYCLE_UNIT / 2; } /* RORW.W (An)+ */ @@ -33352,7 +32505,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3730; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -33368,7 +32521,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6d8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3730: ; return 12 * CYCLE_UNIT / 2; } /* RORW.W -(An) */ @@ -33379,7 +32531,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3731; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -33395,7 +32547,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6e0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3731: ; return 14 * CYCLE_UNIT / 2; } /* RORW.W (d16,An) */ @@ -33405,7 +32556,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3732; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33420,7 +32571,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6e8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3732: ; return 16 * CYCLE_UNIT / 2; } /* RORW.W (d8,An,Xn) */ @@ -33431,7 +32581,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3733; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33446,7 +32596,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3733: ; return 18 * CYCLE_UNIT / 2; } /* RORW.W (xxx).W */ @@ -33455,7 +32604,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3734; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33470,7 +32619,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3734: ; return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).L */ @@ -33479,7 +32627,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3735; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33494,7 +32642,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e6f9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3735: ; return 20 * CYCLE_UNIT / 2; } /* ROLW.W (An) */ @@ -33504,7 +32651,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7d0_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3736; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33519,7 +32666,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7d0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3736: ; return 12 * CYCLE_UNIT / 2; } /* ROLW.W (An)+ */ @@ -33529,7 +32675,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7d8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3737; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg(regs, srcreg) += 2; @@ -33545,7 +32691,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7d8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3737: ; return 12 * CYCLE_UNIT / 2; } /* ROLW.W -(An) */ @@ -33556,7 +32701,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7e0_11)(uae_u32 opcode, struct regstruct *re dataa = m68k_areg(regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3738; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; @@ -33572,7 +32717,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7e0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 2); -endlabel3738: ; return 14 * CYCLE_UNIT / 2; } /* ROLW.W (d16,An) */ @@ -33582,7 +32726,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7e8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3739; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33597,7 +32741,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7e8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3739: ; return 16 * CYCLE_UNIT / 2; } /* ROLW.W (d8,An,Xn) */ @@ -33608,7 +32751,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f0_11)(uae_u32 opcode, struct regstruct *re dataa = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_word_prefetch (regs, 4)); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3740; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33623,7 +32766,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f0_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3740: ; return 18 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).W */ @@ -33632,7 +32774,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f8_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3741; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33647,7 +32789,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f8_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 4); -endlabel3741: ; return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).L */ @@ -33656,7 +32797,7 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f9_11)(uae_u32 opcode, struct regstruct *re {{ uaecptr dataa = get_long_prefetch (regs, 4); if (dataa & 1) { exception3 (opcode, m68k_getpc(regs) + 2, dataa); - goto endlabel3742; + return 50 * CYCLE_UNIT / 2; } {{ uae_s16 data = get_word (dataa); regs->ir = regs->irc; @@ -33671,7 +32812,6 @@ unsigned long REGPARAM2 CPUFUNC(op_e7f9_11)(uae_u32 opcode, struct regstruct *re SET_CFLG (®s->ccrflags, carry >> 15); put_word (dataa,val); }}}}} m68k_incpc (regs, 6); -endlabel3742: ; return 20 * CYCLE_UNIT / 2; } #endif diff --git a/src/cpuemu_4.cpp b/src/cpuemu_4.cpp index 2bb8e5de..92c02247 100644 --- a/src/cpuemu_4.cpp +++ b/src/cpuemu_4.cpp @@ -270,13 +270,12 @@ return 24 * CYCLE_UNIT / 2; /* ORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_007c_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel18; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr |= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel18: ; return 20 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ @@ -1313,13 +1312,12 @@ return 24 * CYCLE_UNIT / 2; /* ANDSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_027c_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel96; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr &= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel96: ; return 20 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ @@ -3235,13 +3233,12 @@ return 24 * CYCLE_UNIT / 2; /* EORSR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_0a7c_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel234; } +{if (!regs->s) { Exception(8, regs, 0);return 34 * CYCLE_UNIT / 2; } { MakeSR(regs); { uae_s16 src = get_iword (regs, 2); regs->sr ^= src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel234: ; return 20 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ @@ -8782,342 +8779,91 @@ return 28 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_40c0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel645; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ MakeSR(regs); m68k_dreg(regs, srcreg) = (m68k_dreg(regs, srcreg) & ~0xffff) | ((regs->sr) & 0xffff); }}} m68k_incpc (regs, 2); -endlabel645: ; return 6 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ unsigned long REGPARAM2 CPUFUNC(op_40d0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel646; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel646: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ unsigned long REGPARAM2 CPUFUNC(op_40d8_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel647; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); m68k_areg(regs, srcreg) += 2; MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel647: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ unsigned long REGPARAM2 CPUFUNC(op_40e0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel648; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 2); -endlabel648: ; return 14 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ unsigned long REGPARAM2 CPUFUNC(op_40e8_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel649; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel649: ; return 16 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_40f0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2019; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_iword (regs, 2)); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel2019: ; return 18 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ unsigned long REGPARAM2 CPUFUNC(op_40f8_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel651; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 4); -endlabel651: ; return 16 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ unsigned long REGPARAM2 CPUFUNC(op_40f9_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel652; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = get_ilong (regs, 2); MakeSR(regs); put_word (srca,regs->sr); }}} m68k_incpc (regs, 6); -endlabel652: ; return 20 * CYCLE_UNIT / 2; } -/* CHK.L Dn,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4100_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uae_s32 src = m68k_dreg(regs, srcreg); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel653; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel653; - } -}}}endlabel653: ; -return 8 * CYCLE_UNIT / 2; -} -/* CHK.L (An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4110_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel654; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel654; - } -}}}}endlabel654: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (An)+,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4118_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg); -{ uae_s32 src = get_long (srca); - m68k_areg(regs, srcreg) += 4; -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel655; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel655; - } -}}}}endlabel655: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L -(An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4120_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca; - srca = m68k_areg(regs, srcreg) - 4; -{ uae_s32 src = get_long (srca); - m68k_areg (regs, srcreg) = srca; -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 2); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel656; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel656; - } -}}}}endlabel656: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d16,An),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4128_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel657; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel657; - } -}}}}endlabel657: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d8,An,Xn),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4130_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca; - srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_iword (regs, 2)); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2020; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2020; - } -}}}}endlabel2020: ; -return 24 * CYCLE_UNIT / 2; -} -/* CHK.L (xxx).W,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4138_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel659; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel659; - } -}}}}endlabel659: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (xxx).L,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_4139_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = get_ilong (regs, 2); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 6); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel660; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel660; - } -}}}}endlabel660: ; -return 12 * CYCLE_UNIT / 2; -} -/* CHK.L (d16,PC),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413a_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr srca = m68k_getpc (regs) + 2; - srca += (uae_s32)(uae_s16)get_iword (regs, 2); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel661; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel661; - } -}}}}endlabel661: ; -return 13 * CYCLE_UNIT / 2; -} -/* CHK.L (d8,PC,Xn),Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413b_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uaecptr tmppc; - uaecptr srca; - tmppc = m68k_getpc(regs) + 2; - srca = get_disp_ea_000(regs, tmppc, get_iword (regs, 2)); -{ uae_s32 src = get_long (srca); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 4); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel2021; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel2021; - } -}}}}endlabel2021: ; -return 24 * CYCLE_UNIT / 2; -} -/* CHK.L #.L,Dn */ -unsigned long REGPARAM2 CPUFUNC(op_413c_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 dstreg = (opcode >> 9) & 7; -{ uaecptr oldpc = m68k_getpc(regs); -{ uae_s32 src = get_ilong (regs, 2); -{ uae_s32 dst = m68k_dreg(regs, dstreg); - m68k_incpc (regs, 6); - if ((uae_s32)dst < 0) { - SET_NFLG (®s->ccrflags, 1); - Exception (6, regs, oldpc); - goto endlabel663; - } else if (dst > src) { - SET_NFLG (®s->ccrflags, 0); - Exception (6, regs, oldpc); - goto endlabel663; - } -}}}endlabel663: ; -return 12 * CYCLE_UNIT / 2; -} /* CHK.W Dn,Dn */ unsigned long REGPARAM2 CPUFUNC(op_4180_4)(uae_u32 opcode, struct regstruct *regs) { @@ -9130,13 +8876,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4180_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel664; + return 40 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel664; + return 40 * CYCLE_UNIT / 2; } -}}}endlabel664: ; +}}} return 10 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ @@ -9152,13 +8898,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4190_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel665; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel665; + return 44 * CYCLE_UNIT / 2; } -}}}}endlabel665: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ @@ -9175,13 +8921,13 @@ unsigned long REGPARAM2 CPUFUNC(op_4198_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel666; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel666; + return 44 * CYCLE_UNIT / 2; } -}}}}endlabel666: ; +}}}} return 14 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ @@ -9199,13 +8945,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a0_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel667; + return 46 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel667; + return 46 * CYCLE_UNIT / 2; } -}}}}endlabel667: ; +}}}} return 16 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ @@ -9221,13 +8967,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41a8_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel668; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel668; + return 48 * CYCLE_UNIT / 2; } -}}}}endlabel668: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ @@ -9244,13 +8990,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b0_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2022; + return 50 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2022; + return 50 * CYCLE_UNIT / 2; } -}}}}endlabel2022: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ @@ -9265,13 +9011,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b8_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel670; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel670; + return 48 * CYCLE_UNIT / 2; } -}}}}endlabel670: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ @@ -9286,13 +9032,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41b9_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel671; + return 52 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel671; + return 52 * CYCLE_UNIT / 2; } -}}}}endlabel671: ; +}}}} return 22 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ @@ -9308,13 +9054,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41ba_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel672; + return 48 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel672; + return 48 * CYCLE_UNIT / 2; } -}}}}endlabel672: ; +}}}} return 18 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ @@ -9332,13 +9078,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bb_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel2023; + return 50 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel2023; + return 50 * CYCLE_UNIT / 2; } -}}}}endlabel2023: ; +}}}} return 20 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ @@ -9352,13 +9098,13 @@ unsigned long REGPARAM2 CPUFUNC(op_41bc_4)(uae_u32 opcode, struct regstruct *reg if ((uae_s32)dst < 0) { SET_NFLG (®s->ccrflags, 1); Exception (6, regs, oldpc); - goto endlabel674; + return 44 * CYCLE_UNIT / 2; } else if (dst > src) { SET_NFLG (®s->ccrflags, 0); Exception (6, regs, oldpc); - goto endlabel674; + return 44 * CYCLE_UNIT / 2; } -}}}endlabel674: ; +}}} return 14 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ @@ -10750,46 +10496,43 @@ return 28 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_46c0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel773; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = m68k_dreg(regs, srcreg); regs->sr = src; MakeFromSR(regs); }}} m68k_incpc (regs, 2); -endlabel773: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ unsigned long REGPARAM2 CPUFUNC(op_46d0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel774; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel774: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ unsigned long REGPARAM2 CPUFUNC(op_46d8_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel775; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg(regs, srcreg) += 2; regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel775: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ unsigned long REGPARAM2 CPUFUNC(op_46e0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel776; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; { uae_s16 src = get_word (srca); @@ -10797,77 +10540,71 @@ unsigned long REGPARAM2 CPUFUNC(op_46e0_4)(uae_u32 opcode, struct regstruct *reg regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 2); -endlabel776: ; return 18 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ unsigned long REGPARAM2 CPUFUNC(op_46e8_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel777; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel777: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46f0_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2038; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca; srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_iword (regs, 2)); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2038: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ unsigned long REGPARAM2 CPUFUNC(op_46f8_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel779; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel779: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ unsigned long REGPARAM2 CPUFUNC(op_46f9_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel780; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = get_ilong (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 6); -endlabel780: ; return 24 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ unsigned long REGPARAM2 CPUFUNC(op_46fa_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel781; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr srca = m68k_getpc (regs) + 2; srca += (uae_s32)(uae_s16)get_iword (regs, 2); { uae_s16 src = get_word (srca); regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel781: ; return 20 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ unsigned long REGPARAM2 CPUFUNC(op_46fb_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2039; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc(regs) + 2; @@ -10876,18 +10613,16 @@ unsigned long REGPARAM2 CPUFUNC(op_46fb_4)(uae_u32 opcode, struct regstruct *reg regs->sr = src; MakeFromSR(regs); }}}} m68k_incpc (regs, 4); -endlabel2039: ; return 22 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ unsigned long REGPARAM2 CPUFUNC(op_46fc_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel783; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); regs->sr = src; MakeFromSR(regs); }}} m68k_incpc (regs, 4); -endlabel783: ; return 16 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ @@ -11363,19 +11098,6 @@ unsigned long REGPARAM2 CPUFUNC(op_48f9_4)(uae_u32 opcode, struct regstruct *reg }}} m68k_incpc (regs, 8); return (writecycles + 16) * CYCLE_UNIT / 2; } -/* EXT.B Dn */ -unsigned long REGPARAM2 CPUFUNC(op_49c0_4)(uae_u32 opcode, struct regstruct *regs) -{ - uae_u32 srcreg = (opcode & 7); -{{ uae_s32 src = m68k_dreg(regs, srcreg); -{ uae_u32 dst = (uae_s32)(uae_s8)src; - CLEAR_CZNV (®s->ccrflags); - SET_ZFLG (®s->ccrflags, ((uae_s32)(dst)) == 0); - SET_NFLG (®s->ccrflags, ((uae_s32)(dst)) < 0); - m68k_dreg(regs, srcreg) = (dst); -}}} m68k_incpc (regs, 2); -return 4 * CYCLE_UNIT / 2; -} /* TST.B Dn */ unsigned long REGPARAM2 CPUFUNC(op_4a00_4)(uae_u32 opcode, struct regstruct *regs) { @@ -12003,7 +11725,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e40_4)(uae_u32 opcode, struct regstruct *reg {{ uae_u32 src = srcreg; m68k_incpc (regs, 2); Exception (src + 32, regs, 0); -}}return 4 * CYCLE_UNIT / 2; +}}return 34 * CYCLE_UNIT / 2; } /* LINK.W An,#.W */ unsigned long REGPARAM2 CPUFUNC(op_4e50_4)(uae_u32 opcode, struct regstruct *regs) @@ -12037,30 +11759,27 @@ return 12 * CYCLE_UNIT / 2; unsigned long REGPARAM2 CPUFUNC(op_4e60_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel901; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s32 src = m68k_areg(regs, srcreg); regs->usp = src; }}} m68k_incpc (regs, 2); -endlabel901: ; return 4 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ unsigned long REGPARAM2 CPUFUNC(op_4e68_4)(uae_u32 opcode, struct regstruct *regs) { uae_u32 srcreg = (opcode & 7); -{if (!regs->s) { Exception(8, regs, 0); goto endlabel902; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ m68k_areg(regs, srcreg) = (regs->usp); }}} m68k_incpc (regs, 2); -endlabel902: ; return 4 * CYCLE_UNIT / 2; } /* RESET.L */ unsigned long REGPARAM2 CPUFUNC(op_4e70_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); return 4 * CYCLE_UNIT / 2; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { cpureset(); }} m68k_incpc (regs, 2); -endlabel903: ; return 132 * CYCLE_UNIT / 2; } /* NOP.L */ @@ -12072,19 +11791,19 @@ return 4 * CYCLE_UNIT / 2; /* STOP.L #.W */ unsigned long REGPARAM2 CPUFUNC(op_4e72_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel905; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); regs->sr = src; MakeFromSR(regs); m68k_setstopped(regs, 1); m68k_incpc (regs, 4); -}}}endlabel905: ; +}}} return 4 * CYCLE_UNIT / 2; } /* RTE.L */ unsigned long REGPARAM2 CPUFUNC(op_4e73_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel906; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } { uae_u16 newsr; uae_u32 newpc; for (;;) { { uaecptr sra = m68k_areg(regs, 7); { uae_s16 sr = get_word (sra); @@ -12099,20 +11818,24 @@ unsigned long REGPARAM2 CPUFUNC(op_4e73_4)(uae_u32 opcode, struct regstruct *reg if ((format & 0xF000) == 0x0000) { break; } else if ((format & 0xF000) == 0x1000) { ; } else if ((format & 0xF000) == 0x2000) { m68k_areg(regs, 7) += 4; break; } + else if ((format & 0xF000) == 0x4000) { m68k_areg(regs, 7) += 8; break; } else if ((format & 0xF000) == 0x7000) { m68k_areg(regs, 7) += 52; break; } else if ((format & 0xF000) == 0x8000) { m68k_areg(regs, 7) += 50; break; } else if ((format & 0xF000) == 0x9000) { m68k_areg(regs, 7) += 12; break; } else if ((format & 0xF000) == 0xa000) { m68k_areg(regs, 7) += 24; break; } else if ((format & 0xF000) == 0xb000) { m68k_areg(regs, 7) += 84; break; } - else { Exception(14, regs, 0); goto endlabel906; } + else { Exception(14, regs, 0); return 50 * CYCLE_UNIT / 2; } regs->sr = newsr; MakeFromSR(regs); } }}}}}} regs->sr = newsr; MakeFromSR(regs); if (newpc & 1) + { exception3 (0x4E73, m68k_getpc(regs), newpc); + return 50 * CYCLE_UNIT / 2; + } else m68k_setpc(regs, newpc); -}}endlabel906: ; +}} return 20 * CYCLE_UNIT / 2; } /* RTD.L #.W */ @@ -12124,7 +11847,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4e74_4)(uae_u32 opcode, struct regstruct *reg { uae_s16 offs = get_iword (regs, 2); m68k_areg(regs, 7) += offs; if (pc & 1) + { exception3 (0x4E74, m68k_getpc(regs), pc); + return 50 * CYCLE_UNIT / 2; + } else m68k_setpc(regs, pc); }}}}return 10 * CYCLE_UNIT / 2; @@ -12141,9 +11867,9 @@ unsigned long REGPARAM2 CPUFUNC(op_4e76_4)(uae_u32 opcode, struct regstruct *reg { m68k_incpc (regs, 2); if (GET_VFLG (®s->ccrflags)) { Exception (7, regs, m68k_getpc (regs)); - goto endlabel909; + return 34 * CYCLE_UNIT / 2; } -}endlabel909: ; +} return 4 * CYCLE_UNIT / 2; } /* RTR.L */ @@ -12164,7 +11890,7 @@ unsigned long REGPARAM2 CPUFUNC(op_4e77_4)(uae_u32 opcode, struct regstruct *reg /* MOVEC2.L #.W */ unsigned long REGPARAM2 CPUFUNC(op_4e7a_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel911; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs->regs + regno; @@ -12176,7 +11902,7 @@ return 6 * CYCLE_UNIT / 2; /* MOVE2C.L #.W */ unsigned long REGPARAM2 CPUFUNC(op_4e7b_4)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel912; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uae_s16 src = get_iword (regs, 2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs->regs + regno; @@ -12193,12 +11919,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4e90_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 2; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel913; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel913: ; +}}} return 16 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ @@ -12209,12 +11935,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4ea8_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel914; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel914: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ @@ -12226,12 +11952,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb0_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2053; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel2053: ; +}}} return 22 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ @@ -12241,12 +11967,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb8_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel916; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel916: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ @@ -12256,12 +11982,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eb9_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 6; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel917; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel917: ; +}}} return 20 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ @@ -12272,12 +11998,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4eba_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel918; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel918: ; +}}} return 18 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ @@ -12290,12 +12016,12 @@ unsigned long REGPARAM2 CPUFUNC(op_4ebb_4)(uae_u32 opcode, struct regstruct *reg { uaecptr oldpc = m68k_getpc(regs) + 4; if (srca & 1) { exception3i (opcode, oldpc, srca); - goto endlabel2054; + return 50 * CYCLE_UNIT / 2; } m68k_setpc (regs, srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); -}}}endlabel2054: ; +}}} return 22 * CYCLE_UNIT / 2; } /* JMP.L (An) */ @@ -12305,10 +12031,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ed0_4)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = m68k_areg(regs, srcreg); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel920; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel920: ; +}} return 8 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ @@ -12318,10 +12044,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ee8_4)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel921; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel921: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ @@ -12332,10 +12058,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef0_4)(uae_u32 opcode, struct regstruct *reg srca = get_disp_ea_000(regs, m68k_areg(regs, srcreg), get_iword (regs, 2)); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2055; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel2055: ; +}} return 14 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ @@ -12344,10 +12070,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef8_4)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel923; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel923: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ @@ -12356,10 +12082,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4ef9_4)(uae_u32 opcode, struct regstruct *reg {{ uaecptr srca = get_ilong (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel924; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel924: ; +}} return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ @@ -12369,10 +12095,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4efa_4)(uae_u32 opcode, struct regstruct *reg srca += (uae_s32)(uae_s16)get_iword (regs, 2); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel925; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel925: ; +}} return 10 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ @@ -12384,10 +12110,10 @@ unsigned long REGPARAM2 CPUFUNC(op_4efb_4)(uae_u32 opcode, struct regstruct *reg srca = get_disp_ea_000(regs, tmppc, get_iword (regs, 2)); if (srca & 1) { exception3i (opcode, m68k_getpc(regs) + 6, srca); - goto endlabel2056; + return 50 * CYCLE_UNIT / 2; } m68k_setpc(regs, srca); -}}endlabel2056: ; +}} return 14 * CYCLE_UNIT / 2; } /* ADD.B #,Dn */ @@ -12943,14 +12669,14 @@ unsigned long REGPARAM2 CPUFUNC(op_50c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel954; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel954: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -13578,14 +13304,14 @@ unsigned long REGPARAM2 CPUFUNC(op_51c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel992; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel992: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -13684,14 +13410,14 @@ unsigned long REGPARAM2 CPUFUNC(op_52c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1004; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1004: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -13790,14 +13516,14 @@ unsigned long REGPARAM2 CPUFUNC(op_53c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1016; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1016: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -13896,14 +13622,14 @@ unsigned long REGPARAM2 CPUFUNC(op_54c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1028; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1028: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14002,14 +13728,14 @@ unsigned long REGPARAM2 CPUFUNC(op_55c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1040; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1040: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14108,14 +13834,14 @@ unsigned long REGPARAM2 CPUFUNC(op_56c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1052; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1052: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14214,14 +13940,14 @@ unsigned long REGPARAM2 CPUFUNC(op_57c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1064; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1064: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14320,14 +14046,14 @@ unsigned long REGPARAM2 CPUFUNC(op_58c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1076; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1076: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14426,14 +14152,14 @@ unsigned long REGPARAM2 CPUFUNC(op_59c8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1088; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1088: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14532,14 +14258,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5ac8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1100; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1100: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14638,14 +14364,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5bc8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1112; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1112: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14744,14 +14470,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5cc8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1124; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1124: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14850,14 +14576,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5dc8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1136; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1136: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -14956,14 +14682,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5ec8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1148; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1148: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -15062,14 +14788,14 @@ unsigned long REGPARAM2 CPUFUNC(op_5fc8_4)(uae_u32 opcode, struct regstruct *reg if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)offs + 2); - goto endlabel1160; + return 50 * CYCLE_UNIT / 2; } return 10 * CYCLE_UNIT / 2; } } else { } m68k_setpc (regs, oldpc + 4); -}}}endlabel1160: ; +}}} return 14 * CYCLE_UNIT / 2; } /* Scc.B (An) */ @@ -15151,13 +14877,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6000_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1171; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1171: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15168,13 +14894,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6001_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1172; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1172: ; +}} return 8 * CYCLE_UNIT / 2; } /* BSR.W #.W */ @@ -15185,10 +14911,10 @@ unsigned long REGPARAM2 CPUFUNC(op_6100_4)(uae_u32 opcode, struct regstruct *reg s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel1174; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 4, s); -}}endlabel1174: ; +}} return 18 * CYCLE_UNIT / 2; } /* BSR.B # */ @@ -15200,10 +14926,10 @@ unsigned long REGPARAM2 CPUFUNC(op_6101_4)(uae_u32 opcode, struct regstruct *reg s = (uae_s32)src + 2; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + s); - goto endlabel1175; + return 50 * CYCLE_UNIT / 2; } m68k_do_bsr (regs, m68k_getpc(regs) + 2, s); -}}endlabel1175: ; +}} return 18 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15213,13 +14939,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6200_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1177; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1177: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15230,13 +14956,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6201_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1178; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1178: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15246,13 +14972,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6300_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1180; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1180: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15263,13 +14989,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6301_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1181; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1181: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15279,13 +15005,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6400_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1183; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1183: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15296,13 +15022,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6401_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1184; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1184: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15312,13 +15038,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6500_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1186; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1186: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15329,13 +15055,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6501_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1187; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1187: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15345,13 +15071,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6600_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1189; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1189: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15362,13 +15088,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6601_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1190; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1190: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15378,13 +15104,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6700_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1192; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1192: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15395,13 +15121,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6701_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1193; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1193: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15411,13 +15137,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6800_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1195; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1195: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15428,13 +15154,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6801_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1196; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1196: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15444,13 +15170,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6900_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1198; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1198: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15461,13 +15187,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6901_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1199; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1199: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15477,13 +15203,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6a00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1201; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1201: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15494,13 +15220,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6a01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1202; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1202: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15510,13 +15236,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6b00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1204; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1204: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15527,13 +15253,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6b01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1205; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1205: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15543,13 +15269,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6c00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1207; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1207: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15560,13 +15286,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6c01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1208; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1208: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15576,13 +15302,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6d00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1210; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1210: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15593,13 +15319,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6d01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1211; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1211: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15609,13 +15335,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6e00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1213; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1213: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15626,13 +15352,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6e01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1214; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1214: ; +}} return 8 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ @@ -15642,13 +15368,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6f00_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1216; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 4); -}}endlabel1216: ; +}} return 12 * CYCLE_UNIT / 2; } /* Bcc.B # */ @@ -15659,13 +15385,13 @@ unsigned long REGPARAM2 CPUFUNC(op_6f01_4)(uae_u32 opcode, struct regstruct *reg if (!cctrue(®s->ccrflags, 15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc(regs) + 2, m68k_getpc(regs) + 2 + (uae_s32)src); - goto endlabel1217; + return 50 * CYCLE_UNIT / 2; } m68k_incpc (regs, (uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; -didnt_jump:; +didnt_jump: m68k_incpc (regs, 2); -}}endlabel1217: ; +}} return 8 * CYCLE_UNIT / 2; } /* MOVE.L #,Dn */ @@ -16226,7 +15952,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 38 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16242,7 +15968,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80c0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1253: ; return getDivu68kCycles(dst, src) * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ @@ -16260,7 +15985,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16276,7 +16001,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1254: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ @@ -16295,7 +16019,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16311,7 +16035,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80d8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1255: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ @@ -16331,7 +16054,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 10 * CYCLE_UNIT / 2; + return 44 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16347,7 +16070,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1256: ; return (getDivu68kCycles(dst, src) + 6) * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ @@ -16365,7 +16087,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16381,7 +16103,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80e8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1257: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ @@ -16400,7 +16121,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16416,7 +16137,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel2100: ; return (getDivu68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ @@ -16433,7 +16153,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16449,7 +16169,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1259: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ @@ -16466,7 +16185,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16482,7 +16201,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80f9_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 6); } -endlabel1260: ; return (getDivu68kCycles(dst, src) + 12) * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ @@ -16500,7 +16218,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16516,7 +16234,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fa_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1261: ; return (getDivu68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ @@ -16536,7 +16253,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16552,7 +16269,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fb_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel2101: ; return (getDivu68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ @@ -16568,7 +16284,7 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_4)(uae_u32 opcode, struct regstruct *reg if (dst < 0) SET_NFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; @@ -16584,7 +16300,6 @@ unsigned long REGPARAM2 CPUFUNC(op_80fc_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1263: ; return (getDivu68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ @@ -16995,7 +16710,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 4 * CYCLE_UNIT / 2; + return 38 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17012,7 +16727,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81c0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1291: ; return (getDivs68kCycles(dst, src) + 0) * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ @@ -17030,7 +16744,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17047,7 +16761,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1292: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ @@ -17066,7 +16779,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17083,7 +16796,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81d8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1293: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ @@ -17103,7 +16815,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 2); Exception (5, regs, oldpc); - return 10 * CYCLE_UNIT / 2; + return 44 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17120,7 +16832,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 2); } -endlabel1294: ; return (getDivs68kCycles(dst, src) + 6) * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ @@ -17138,7 +16849,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17155,7 +16866,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81e8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1295: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ @@ -17174,7 +16884,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17191,7 +16901,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f0_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel2105: ; return (getDivs68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ @@ -17208,7 +16917,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17225,7 +16934,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f8_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1297: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ @@ -17242,7 +16950,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 6); Exception (5, regs, oldpc); - return 16 * CYCLE_UNIT / 2; + return 50 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17259,7 +16967,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81f9_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 6); } -endlabel1298: ; return (getDivs68kCycles(dst, src) + 12) * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ @@ -17277,7 +16984,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 12 * CYCLE_UNIT / 2; + return 46 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17294,7 +17001,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fa_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1299: ; return (getDivs68kCycles(dst, src) + 8) * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ @@ -17314,7 +17020,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 14 * CYCLE_UNIT / 2; + return 48 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17331,7 +17037,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fb_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel2106: ; return (getDivs68kCycles(dst, src) + 10) * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ @@ -17347,7 +17052,7 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_4)(uae_u32 opcode, struct regstruct *reg SET_ZFLG (®s->ccrflags, 1); m68k_incpc (regs, 4); Exception (5, regs, oldpc); - return 8 * CYCLE_UNIT / 2; + return 42 * CYCLE_UNIT / 2; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; @@ -17364,7 +17069,6 @@ unsigned long REGPARAM2 CPUFUNC(op_81fc_4)(uae_u32 opcode, struct regstruct *reg } m68k_incpc (regs, 4); } -endlabel1301: ; return (getDivs68kCycles(dst, src) + 4) * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ @@ -25988,7 +25692,7 @@ return 20 * CYCLE_UNIT / 2; /* RTE.L */ unsigned long REGPARAM2 CPUFUNC(op_4e73_5)(uae_u32 opcode, struct regstruct *regs) { -{if (!regs->s) { Exception(8, regs, 0); goto endlabel2175; } +{if (!regs->s) { Exception(8, regs, 0); return 34 * CYCLE_UNIT / 2; } {{ uaecptr sra = m68k_areg(regs, 7); { uae_s16 sr = get_word (sra); m68k_areg(regs, 7) += 2; @@ -25997,6 +25701,6 @@ unsigned long REGPARAM2 CPUFUNC(op_4e73_5)(uae_u32 opcode, struct regstruct *reg m68k_areg(regs, 7) += 4; regs->sr = sr; m68k_setpc(regs, pc); MakeFromSR(regs); -}}}}}}endlabel2175: ; +}}}}}} return 20 * CYCLE_UNIT / 2; } diff --git a/src/cpustbl.cpp b/src/cpustbl.cpp index 50f32245..7195772a 100644 --- a/src/cpustbl.cpp +++ b/src/cpustbl.cpp @@ -827,17 +827,39 @@ const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_40f0_0), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4100_0), 16640 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4110_0), 16656 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4118_0), 16664 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4120_0), 16672 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4128_0), 16680 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4130_0), 16688 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4138_0), 16696 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4139_0), 16697 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413a_0), 16698 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413b_0), 16699 }, /* CHK */ +#endif +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413c_0), 16700 }, /* CHK */ +#endif { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ @@ -1010,7 +1032,9 @@ const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_48f0_0), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ +#ifndef CPUEMU_68000_ONLY { CPUFUNC(op_49c0_0), 18880 }, /* EXT */ +#endif { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ @@ -2282,37 +2306,37 @@ const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP30A */ +{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP30A */ +{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP30A */ +{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP30A */ +{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP30A */ +{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP30A */ +{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP30A */ +{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP30A */ +{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP30A */ +{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP30A */ +{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP30A */ +{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f200_0), 61952 }, /* FPP */ @@ -2495,7 +2519,28 @@ const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_f43f_0), 62527 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f500_0), 62720 }, /* MMUOP */ +{ CPUFUNC(op_f500_0), 62720 }, /* PFLUSHN */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f508_0), 62728 }, /* PFLUSH */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f510_0), 62736 }, /* PFLUSHAN */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f518_0), 62744 }, /* PFLUSHA */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f548_0), 62792 }, /* PTESTR */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f568_0), 62824 }, /* PTESTW */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f588_0), 62856 }, /* PLPAR */ +#endif +#ifndef CPUEMU_68000_ONLY +{ CPUFUNC(op_f5c8_0), 62920 }, /* PLPAW */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f600_0), 62976 }, /* MOVE16 */ @@ -2513,37 +2558,7 @@ const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_f620_0), 63008 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f800_0), 63488 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f808_0), 63496 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f810_0), 63504 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f818_0), 63512 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f820_0), 63520 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f828_0), 63528 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f830_0), 63536 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f838_0), 63544 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f839_0), 63545 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f83a_0), 63546 }, /* MMUOP30B */ -#endif -#ifndef CPUEMU_68000_ONLY -{ CPUFUNC(op_f83b_0), 63547 }, /* MMUOP30B */ +{ CPUFUNC(op_f800_0), 63488 }, /* LPSTOP */ #endif { 0, 0 }}; #endif /* CPUEMU_0 */ @@ -4349,17 +4364,17 @@ const struct cputbl CPUFUNC(op_smalltbl_1)[] = { { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ -{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP30A */ -{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP30A */ -{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP30A */ -{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP30A */ -{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP30A */ -{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP30A */ -{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP30A */ -{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP30A */ -{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP30A */ -{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP30A */ -{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP30A */ +{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ +{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ +{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ +{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ +{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ +{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ +{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ +{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ +{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ +{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP030 */ +{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP030 */ { CPUFUNC(op_f200_0), 61952 }, /* FPP */ { CPUFUNC(op_f208_0), 61960 }, /* FPP */ { CPUFUNC(op_f210_0), 61968 }, /* FPP */ @@ -4420,23 +4435,17 @@ const struct cputbl CPUFUNC(op_smalltbl_1)[] = { { CPUFUNC(op_f43d_0), 62525 }, /* CPUSHA */ { CPUFUNC(op_f43e_0), 62526 }, /* CPUSHA */ { CPUFUNC(op_f43f_0), 62527 }, /* CPUSHA */ -{ CPUFUNC(op_f500_0), 62720 }, /* MMUOP */ +{ CPUFUNC(op_f500_0), 62720 }, /* PFLUSHN */ +{ CPUFUNC(op_f508_0), 62728 }, /* PFLUSH */ +{ CPUFUNC(op_f510_0), 62736 }, /* PFLUSHAN */ +{ CPUFUNC(op_f518_0), 62744 }, /* PFLUSHA */ +{ CPUFUNC(op_f548_0), 62792 }, /* PTESTR */ +{ CPUFUNC(op_f568_0), 62824 }, /* PTESTW */ { CPUFUNC(op_f600_0), 62976 }, /* MOVE16 */ { CPUFUNC(op_f608_0), 62984 }, /* MOVE16 */ { CPUFUNC(op_f610_0), 62992 }, /* MOVE16 */ { CPUFUNC(op_f618_0), 63000 }, /* MOVE16 */ { CPUFUNC(op_f620_0), 63008 }, /* MOVE16 */ -{ CPUFUNC(op_f800_0), 63488 }, /* MMUOP30B */ -{ CPUFUNC(op_f808_0), 63496 }, /* MMUOP30B */ -{ CPUFUNC(op_f810_0), 63504 }, /* MMUOP30B */ -{ CPUFUNC(op_f818_0), 63512 }, /* MMUOP30B */ -{ CPUFUNC(op_f820_0), 63520 }, /* MMUOP30B */ -{ CPUFUNC(op_f828_0), 63528 }, /* MMUOP30B */ -{ CPUFUNC(op_f830_0), 63536 }, /* MMUOP30B */ -{ CPUFUNC(op_f838_0), 63544 }, /* MMUOP30B */ -{ CPUFUNC(op_f839_0), 63545 }, /* MMUOP30B */ -{ CPUFUNC(op_f83a_0), 63546 }, /* MMUOP30B */ -{ CPUFUNC(op_f83b_0), 63547 }, /* MMUOP30B */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY @@ -6241,17 +6250,17 @@ const struct cputbl CPUFUNC(op_smalltbl_2)[] = { { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ -{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP30A */ -{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP30A */ -{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP30A */ -{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP30A */ -{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP30A */ -{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP30A */ -{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP30A */ -{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP30A */ -{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP30A */ -{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP30A */ -{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP30A */ +{ CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ +{ CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ +{ CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ +{ CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ +{ CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ +{ CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ +{ CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ +{ CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ +{ CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ +{ CPUFUNC(op_f03a_0), 61498 }, /* MMUOP030 */ +{ CPUFUNC(op_f03b_0), 61499 }, /* MMUOP030 */ { CPUFUNC(op_f200_0), 61952 }, /* FPP */ { CPUFUNC(op_f208_0), 61960 }, /* FPP */ { CPUFUNC(op_f210_0), 61968 }, /* FPP */ @@ -6292,17 +6301,6 @@ const struct cputbl CPUFUNC(op_smalltbl_2)[] = { { CPUFUNC(op_f379_0), 62329 }, /* FRESTORE */ { CPUFUNC(op_f37a_0), 62330 }, /* FRESTORE */ { CPUFUNC(op_f37b_0), 62331 }, /* FRESTORE */ -{ CPUFUNC(op_f800_0), 63488 }, /* MMUOP30B */ -{ CPUFUNC(op_f808_0), 63496 }, /* MMUOP30B */ -{ CPUFUNC(op_f810_0), 63504 }, /* MMUOP30B */ -{ CPUFUNC(op_f818_0), 63512 }, /* MMUOP30B */ -{ CPUFUNC(op_f820_0), 63520 }, /* MMUOP30B */ -{ CPUFUNC(op_f828_0), 63528 }, /* MMUOP30B */ -{ CPUFUNC(op_f830_0), 63536 }, /* MMUOP30B */ -{ CPUFUNC(op_f838_0), 63544 }, /* MMUOP30B */ -{ CPUFUNC(op_f839_0), 63545 }, /* MMUOP30B */ -{ CPUFUNC(op_f83a_0), 63546 }, /* MMUOP30B */ -{ CPUFUNC(op_f83b_0), 63547 }, /* MMUOP30B */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY @@ -8723,17 +8721,6 @@ const struct cputbl CPUFUNC(op_smalltbl_4)[] = { { CPUFUNC(op_40f0_4), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_4), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_4), 16633 }, /* MVSR2 */ -{ CPUFUNC(op_4100_4), 16640 }, /* CHK */ -{ CPUFUNC(op_4110_4), 16656 }, /* CHK */ -{ CPUFUNC(op_4118_4), 16664 }, /* CHK */ -{ CPUFUNC(op_4120_4), 16672 }, /* CHK */ -{ CPUFUNC(op_4128_4), 16680 }, /* CHK */ -{ CPUFUNC(op_4130_4), 16688 }, /* CHK */ -{ CPUFUNC(op_4138_4), 16696 }, /* CHK */ -{ CPUFUNC(op_4139_4), 16697 }, /* CHK */ -{ CPUFUNC(op_413a_4), 16698 }, /* CHK */ -{ CPUFUNC(op_413b_4), 16699 }, /* CHK */ -{ CPUFUNC(op_413c_4), 16700 }, /* CHK */ { CPUFUNC(op_4180_4), 16768 }, /* CHK */ { CPUFUNC(op_4190_4), 16784 }, /* CHK */ { CPUFUNC(op_4198_4), 16792 }, /* CHK */ @@ -8884,7 +8871,6 @@ const struct cputbl CPUFUNC(op_smalltbl_4)[] = { { CPUFUNC(op_48f0_4), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_4), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_4), 18681 }, /* MVMLE */ -{ CPUFUNC(op_49c0_4), 18880 }, /* EXT */ { CPUFUNC(op_4a00_4), 18944 }, /* TST */ { CPUFUNC(op_4a10_4), 18960 }, /* TST */ { CPUFUNC(op_4a18_4), 18968 }, /* TST */ @@ -10288,17 +10274,6 @@ const struct cputbl CPUFUNC(op_smalltbl_5)[] = { { CPUFUNC(op_40f0_5), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_5), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_5), 16633 }, /* MVSR2 */ -{ CPUFUNC(op_4100_4), 16640 }, /* CHK */ -{ CPUFUNC(op_4110_4), 16656 }, /* CHK */ -{ CPUFUNC(op_4118_4), 16664 }, /* CHK */ -{ CPUFUNC(op_4120_4), 16672 }, /* CHK */ -{ CPUFUNC(op_4128_4), 16680 }, /* CHK */ -{ CPUFUNC(op_4130_4), 16688 }, /* CHK */ -{ CPUFUNC(op_4138_4), 16696 }, /* CHK */ -{ CPUFUNC(op_4139_4), 16697 }, /* CHK */ -{ CPUFUNC(op_413a_4), 16698 }, /* CHK */ -{ CPUFUNC(op_413b_4), 16699 }, /* CHK */ -{ CPUFUNC(op_413c_4), 16700 }, /* CHK */ { CPUFUNC(op_4180_4), 16768 }, /* CHK */ { CPUFUNC(op_4190_4), 16784 }, /* CHK */ { CPUFUNC(op_4198_4), 16792 }, /* CHK */ @@ -10441,7 +10416,6 @@ const struct cputbl CPUFUNC(op_smalltbl_5)[] = { { CPUFUNC(op_48f0_4), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_4), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_4), 18681 }, /* MVMLE */ -{ CPUFUNC(op_49c0_4), 18880 }, /* EXT */ { CPUFUNC(op_4a00_4), 18944 }, /* TST */ { CPUFUNC(op_4a10_4), 18960 }, /* TST */ { CPUFUNC(op_4a18_4), 18968 }, /* TST */ @@ -11843,17 +11817,6 @@ const struct cputbl CPUFUNC(op_smalltbl_11)[] = { { CPUFUNC(op_40f0_11), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_11), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_11), 16633 }, /* MVSR2 */ -{ CPUFUNC(op_4100_11), 16640 }, /* CHK */ -{ CPUFUNC(op_4110_11), 16656 }, /* CHK */ -{ CPUFUNC(op_4118_11), 16664 }, /* CHK */ -{ CPUFUNC(op_4120_11), 16672 }, /* CHK */ -{ CPUFUNC(op_4128_11), 16680 }, /* CHK */ -{ CPUFUNC(op_4130_11), 16688 }, /* CHK */ -{ CPUFUNC(op_4138_11), 16696 }, /* CHK */ -{ CPUFUNC(op_4139_11), 16697 }, /* CHK */ -{ CPUFUNC(op_413a_11), 16698 }, /* CHK */ -{ CPUFUNC(op_413b_11), 16699 }, /* CHK */ -{ CPUFUNC(op_413c_11), 16700 }, /* CHK */ { CPUFUNC(op_4180_11), 16768 }, /* CHK */ { CPUFUNC(op_4190_11), 16784 }, /* CHK */ { CPUFUNC(op_4198_11), 16792 }, /* CHK */ @@ -11996,7 +11959,6 @@ const struct cputbl CPUFUNC(op_smalltbl_11)[] = { { CPUFUNC(op_48f0_11), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_11), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_11), 18681 }, /* MVMLE */ -{ CPUFUNC(op_49c0_11), 18880 }, /* EXT */ { CPUFUNC(op_4a00_11), 18944 }, /* TST */ { CPUFUNC(op_4a10_11), 18960 }, /* TST */ { CPUFUNC(op_4a18_11), 18968 }, /* TST */ diff --git a/src/crc32.cpp b/src/crc32.cpp index 421107ad..f0d39223 100644 --- a/src/crc32.cpp +++ b/src/crc32.cpp @@ -6,7 +6,7 @@ static unsigned long crc_table32[256]; static unsigned short crc_table16[256]; -static void make_crc_table() +static void make_crc_table (void) { unsigned long c; unsigned short w; @@ -22,6 +22,14 @@ static void make_crc_table() crc_table16[n] = w; } } +uae_u32 get_crc32_val (uae_u8 v, uae_u32 crc) +{ + if (!crc_table32[1]) + make_crc_table(); + crc ^= 0xffffffff; + crc = crc_table32[(crc ^ v) & 0xff] ^ (crc >> 8); + return crc ^ 0xffffffff; +} uae_u32 get_crc32 (uae_u8 *buf, int len) { uae_u32 crc; diff --git a/src/custom.cpp b/src/custom.cpp index 99ba403c..aa93d6c5 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -8,9 +8,6 @@ * Copyright 2000-2008 Toni Wilen */ -#define SPR0_HPOS 0x15 -#define MAX_SPRITES 8 - #include "sysconfig.h" #include "sysdeps.h" #include @@ -30,7 +27,6 @@ #include "xwin.h" #include "inputdevice.h" #include "keybuf.h" -#include "osemu.h" #include "autoconf.h" #include "traps.h" #include "gui.h" @@ -40,6 +36,15 @@ #include "filesys.h" #include +#ifdef NEWHSYNC +#define SPR0_HPOS 0x19 +#else +#define SPR0_HPOS 0x15 +#endif +#define MAX_SPRITES 8 + +#define SPRBORDER 0 + STATIC_INLINE int nocustom(void) { if (picasso_on && currprefs.picasso96_nocustom) @@ -80,7 +85,7 @@ extern uae_u8* compiled_code; int vpos; int hack_vpos; static uae_u16 lof; -static int next_lineno; +static int next_lineno, prev_lineno; static int lof_changed = 0; static uae_u32 sprtaba[256],sprtabb[256]; @@ -106,7 +111,7 @@ int minfirstline = VBLANK_ENDLINE_PAL; int vblank_hz = VBLANK_HZ_PAL; frame_time_t syncbase; static int fmode; -unsigned int beamcon0, new_beamcon0; +uae_u16 beamcon0, new_beamcon0; uae_u16 vtotal = MAXVPOS_PAL, htotal = MAXHPOS_PAL; static uae_u16 hsstop, hbstrt, hbstop, vsstop, vbstrt, vbstop, hsstrt, vsstrt, hcenter; @@ -142,7 +147,7 @@ static uaecptr bplpt[8]; static struct color_entry current_colors; static unsigned int bplcon0, bplcon1, bplcon2, bplcon3, bplcon4; -static unsigned int planes_bplcon0, res_bplcon0, planes_limit_bplcon0; +static unsigned int bplcon0_res, bplcon0_planes, bplcon0_planes_limit; static unsigned int diwstrt, diwstop, diwhigh; static int diwhigh_written; static unsigned int ddfstrt, ddfstop, ddfstrt_old_hpos, ddfstrt_old_vpos; @@ -155,7 +160,8 @@ enum diw_states }; static int plffirstline, plflastline; -static int plfstrt, plfstop; +static int plfstrt_start, plfstrt, plfstop; +static int sprite_minx, sprite_maxx; static int last_diw_pix_hpos; static int last_decide_line_hpos, last_sprite_decide_line_hpos; static int last_fetch_hpos, last_sprite_hpos; @@ -167,21 +173,16 @@ static unsigned int clxdat, clxcon, clxcon2, clxcon_bpl_enable, clxcon_bpl_match enum copper_states { COP_stop, - COP_read1_in2, - COP_read1_wr_in4, - COP_read1_wr_in2, COP_read1, - COP_read2_wr_in2, COP_read2, COP_bltwait, - COP_wait_in4, COP_wait_in2, - COP_skip_in4, COP_skip_in2, COP_wait1, COP_wait, COP_skip1, - COP_strobe_delay + COP_strobe_delay1, + COP_strobe_delay2 }; struct copper { @@ -190,7 +191,7 @@ struct copper { unsigned int saved_i1, saved_i2; enum copper_states state, state_prev; /* Instruction pointer. */ - uaecptr ip, saved_ip; + uaecptr ip; int hpos, vpos; unsigned int ignore_next; int vcmp, hcmp; @@ -202,6 +203,7 @@ struct copper { unsigned int regtypes_modified; int strobe; /* COPJMP1 / COPJMP2 accessed */ + int moveaddr, movedata, movedelay; }; #define REGTYPE_NONE 0 @@ -246,7 +248,17 @@ static int next_color_change; static int next_color_entry, remembered_color_entry; static struct decision thisline_decision; -static int passed_plfstop, fetch_cycle, fetch_modulo_cycle; +static int fetch_cycle, fetch_modulo_cycle; + +enum plfstate +{ + plf_idle, + plf_start, + plf_active, + plf_passed_stop, + plf_passed_stop2, + plf_end +} plfstate; enum fetchstate { fetch_not_started, @@ -258,6 +270,11 @@ enum fetchstate { * helper functions */ +STATIC_INLINE int ecsshres(void) +{ + return bplcon0_res == RES_SUPERHIRES && (currprefs.chipset_mask & CSMASK_ECS_DENISE) && !(currprefs.chipset_mask & CSMASK_AGA); +} + #define nodraw() (framecnt != 0) uae_u32 get_copper_address (int copno) @@ -378,11 +395,16 @@ static int real_bitplane_number[3][3][9]; /* Disable bitplane DMA if planes > available DMA slots. This is needed e.g. by the Sanity WOC demo (at the "Party Effect"). */ -#define GET_PLANES_LIMIT() real_bitplane_number[fetchmode][res_bplcon0][planes_bplcon0] +#define GET_PLANES_LIMIT() real_bitplane_number[fetchmode][bplcon0_res][bplcon0_planes] +#ifdef NEWHSYNC +#define HARD_DDF_STOP 0xd8 +#define HARD_DDF_START 0x18 +#else /* The HRM says 0xD8, but that can't work... */ #define HARD_DDF_STOP 0xd4 #define HARD_DDF_START 0x18 +#endif static __inline__ void add_modulos(void) { @@ -398,7 +420,7 @@ static __inline__ void add_modulos(void) m2 = bpl2mod; } - switch (planes_limit_bplcon0) { + switch (bplcon0_planes_limit) { case 8: bplpt[7] += m2; case 7: bplpt[6] += m1; case 6: bplpt[5] += m2; @@ -439,7 +461,7 @@ static const int fm_maxplanes[] = { 3,2,1,0, 3,3,2,0, 3,3,3,0 }; static int cycle_diagram_table[3][3][9][32]; static int cycle_diagram_free_cycles[3][3][9]; static int cycle_diagram_total_cycles[3][3][9]; -static int *curr_diagram; +static int *curr_diagram, curr_diagram_change; static const int cycle_sequences[3 * 8] = { 2,1,2,1,2,1,2,1, 4,2,3,1,4,2,3,1, 8,4,6,2,7,3,5,1 }; static void create_cycle_diagram_table(void) @@ -489,7 +511,7 @@ static int cycle_diagram_shift; static void estimate_last_fetch_cycle (int hpos) { - if (! passed_plfstop) { + if (plfstate < plf_passed_stop) { int stop = plfstop < hpos || plfstop > HARD_DDF_STOP ? HARD_DDF_STOP : plfstop; /* We know that fetching is up-to-date up until hpos, so we can use fetch_cycle. */ int fetch_cycle_at_stop = fetch_cycle + (stop - hpos); @@ -498,7 +520,7 @@ static void estimate_last_fetch_cycle (int hpos) estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit; } else { int starting_last_block_at = (fetch_cycle + fetchunit - 1) & ~fetchunit_mask; - if (passed_plfstop == 2) + if (plfstate == plf_passed_stop2) starting_last_block_at -= fetchunit; estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit; @@ -531,12 +553,28 @@ static int delayoffset; STATIC_INLINE void compute_delay_offset (void) { - delayoffset = (16 << fetchmode) - (((plfstrt - HARD_DDF_START) & fetchstart_mask) << 1); +#ifdef NEWHSYNC + int v = 4; +#else + int v = 0; +#endif + delayoffset = (16 << fetchmode) - (((plfstrt - v - HARD_DDF_START) & fetchstart_mask) << 1); +} + +static void record_color_change2 (int hpos, int regno, unsigned long value) +{ + curr_color_changes[next_color_change].linepos = hpos; + curr_color_changes[next_color_change].regno = regno; + curr_color_changes[next_color_change++].value = value; + curr_color_changes[next_color_change].regno = -1; } static void expand_fmodes (void) { - int fm_index = fetchmode * 4 + res_bplcon0; + bplcon0_res = GET_RES (bplcon0); + bplcon0_planes = GET_PLANES (bplcon0); + bplcon0_planes_limit = GET_PLANES_LIMIT (); + int fm_index = fetchmode * 4 + bplcon0_res; fetchunit = fetchunits[fm_index]; fetchunit_mask = fetchunit - 1; int fetchstart_shift = fetchstarts[fm_index]; @@ -544,7 +582,7 @@ static void expand_fmodes (void) fetchstart_mask = fetchstart - 1; int fm_maxplane_shift = fm_maxplanes[fm_index]; fm_maxplane = 1 << fm_maxplane_shift; - curr_diagram = cycle_diagram_table[fetchmode][res_bplcon0][planes_limit_bplcon0]; + curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; fetch_modulo_cycle = fetchunit - fetchstart; } @@ -559,15 +597,15 @@ static __inline__ void compute_toscr_delay_1 (void) delay1 += delayoffset; delay2 += delayoffset; toscr_delay1x = (delay1 & (delaymask >> toscr_res)) << toscr_res; - toscr_delay1x |= shdelay1 >> (2 - toscr_res); + toscr_delay1x |= shdelay1 >> (RES_MAX - toscr_res); toscr_delay2x = (delay2 & (delaymask >> toscr_res)) << toscr_res; - toscr_delay2x |= shdelay2 >> (2 - toscr_res); + toscr_delay2x |= shdelay2 >> (RES_MAX - toscr_res); } STATIC_INLINE void compute_toscr_delay () { - toscr_res = res_bplcon0; - toscr_nr_planes = planes_limit_bplcon0; + toscr_res = bplcon0_res; + toscr_nr_planes = bplcon0_planes_limit; toscr_res2 = 2 << toscr_res; compute_toscr_delay_1 (); } @@ -583,42 +621,42 @@ STATIC_INLINE void maybe_first_bpl1dat (int hpos) STATIC_INLINE void fetch (int nr, int fm) { - uaecptr p; - if (nr >= toscr_nr_planes) - return; - p = bplpt[nr]; - switch (fm) { - case 0: + if (nr < toscr_nr_planes) { + uaecptr p = bplpt[nr]; + switch (fm) + { + case 0: fetched[nr] = last_custom_value = CHIPMEM_AGNUS_WGET_CUSTOM (p); bplpt[nr] += 2; break; - case 1: + case 1: fetched_aga0[nr] = CHIPMEM_LGET_CUSTOM (p); last_custom_value = (uae_u16)fetched_aga0[nr]; bplpt[nr] += 4; break; - case 2: + case 2: fetched_aga1[nr] = CHIPMEM_LGET_CUSTOM (p); fetched_aga0[nr] = CHIPMEM_LGET_CUSTOM (p + 4); last_custom_value = (uae_u16)fetched_aga0[nr]; bplpt[nr] += 8; break; - } - if (passed_plfstop == 2 && fetch_cycle >= (fetch_cycle & ~fetchunit_mask) + fetch_modulo_cycle) { - int mod; - if (fmode & 0x4000) { + } + if (plfstate == plf_passed_stop2 && fetch_cycle >= (fetch_cycle & ~fetchunit_mask) + fetch_modulo_cycle) { + int mod; + if (fmode & 0x4000) { if (((diwstrt >> 8) ^ vpos) & 1) - mod = bpl2mod; + mod = bpl2mod; else - mod = bpl1mod; - } else if (nr & 1) + mod = bpl1mod; + } else if (nr & 1) mod = bpl2mod; - else + else mod = bpl1mod; - bplpt[nr] += mod; + bplpt[nr] += mod; + } } if (nr == 0) - fetch_state = fetch_was_plane0; + fetch_state = fetch_was_plane0; } STATIC_INLINE void update_toscr_planes (void) @@ -789,6 +827,14 @@ STATIC_INLINE int flush_plane_data (int fm) i += 32; toscr_1 (16, fm); toscr_1 (16, fm); + + if (fm == 2) { + /* flush AGA full 64-bit shift register */ + i += 32; + toscr_1 (16, fm); + toscr_1 (16, fm); + } + return i >> (1 + toscr_res); } @@ -1147,32 +1193,32 @@ static void do_long_fetch (int nwords, int dma, int fm) /* make sure fetch that goes beyond maxhpos is finished */ -STATIC_INLINE void finish_final_fetch (int i, int fm) +STATIC_INLINE void finish_final_fetch (int pos, int fm) { - if ((thisline_decision.plfleft == -1) || - (passed_plfstop == 3)) + if (thisline_decision.plfleft == -1) return; - - passed_plfstop = 3; - + if (plfstate == plf_end) + return; + plfstate = plf_end; ddfstate = DIW_waiting_start; - i += flush_plane_data (fm); - thisline_decision.plfright = i; + pos += flush_plane_data (fm); + thisline_decision.plfright = pos; thisline_decision.plflinelen = out_offs; finish_playfield_line (); } -STATIC_INLINE int one_fetch_cycle_0 (int i, int ddfstop_to_test, int dma, int fm) +STATIC_INLINE int one_fetch_cycle_0 (int pos, int ddfstop_to_test, int dma, int fm) { - if (! passed_plfstop && (i == ddfstop_to_test)) - passed_plfstop = 1; + if (plfstate < plf_passed_stop && pos == ddfstop_to_test) + plfstate = plf_passed_stop; + if ((fetch_cycle & fetchunit_mask) == 0) { - if (passed_plfstop == 2) { - finish_final_fetch (i, fm); + if (plfstate == plf_passed_stop2) { + finish_final_fetch (pos, fm); return 1; } - if (passed_plfstop) - passed_plfstop++; + if (plfstate >= plf_passed_stop) + plfstate = (enum plfstate)((int)plfstate + 1); } if (dma) { /* fetchstart_mask can be larger than fm_maxplane if FMODE > 0. This means @@ -1217,16 +1263,16 @@ STATIC_INLINE int one_fetch_cycle_0 (int i, int ddfstop_to_test, int dma, int fm return 0; } -static int one_fetch_cycle_fm0 (int i, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (i, ddfstop_to_test, dma, 0); } -static int one_fetch_cycle_fm1 (int i, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (i, ddfstop_to_test, dma, 1); } -static int one_fetch_cycle_fm2 (int i, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (i, ddfstop_to_test, dma, 2); } +static int one_fetch_cycle_fm0 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 0); } +static int one_fetch_cycle_fm1 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 1); } +static int one_fetch_cycle_fm2 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 2); } -STATIC_INLINE int one_fetch_cycle (int i, int ddfstop_to_test, int dma, int fm) +STATIC_INLINE int one_fetch_cycle (int pos, int ddfstop_to_test, int dma, int fm) { switch (fm) { - case 0: return one_fetch_cycle_fm0 (i, ddfstop_to_test, dma); - case 1: return one_fetch_cycle_fm1 (i, ddfstop_to_test, dma); - case 2: return one_fetch_cycle_fm2 (i, ddfstop_to_test, dma); + case 0: return one_fetch_cycle_fm0 (pos, ddfstop_to_test, dma); + case 1: return one_fetch_cycle_fm1 (pos, ddfstop_to_test, dma); + case 2: return one_fetch_cycle_fm2 (pos, ddfstop_to_test, dma); } } @@ -1236,7 +1282,7 @@ static void update_fetch (int until, int fm) int dma = dmaen (DMA_BITPLANE); int ddfstop_to_test; - if (nodraw() || passed_plfstop == 3) + if (nodraw() || plfstate == plf_end) return; /* We need an explicit test against HARD_DDF_STOP here to guard against @@ -1273,11 +1319,11 @@ static void update_fetch (int until, int fm) return; } - if (! passed_plfstop && (ddf_change != vpos) && (ddf_change + 1 != vpos) + if (plfstate < plf_passed_stop && ddf_change != vpos && ddf_change + 1 != vpos && dma - && ((fetch_cycle & fetchstart_mask) == (fm_maxplane & fetchstart_mask)) - && ((toscr_delay[0] == toscr_delay1x) && (toscr_delay[1] == toscr_delay2x)) - && (toscr_nr_planes == thisline_decision.nr_planes)) + && (fetch_cycle & fetchstart_mask) == (fm_maxplane & fetchstart_mask) + && toscr_delay[0] == toscr_delay1x && toscr_delay[1] == toscr_delay2x + && toscr_nr_planes == thisline_decision.nr_planes) { int offs = (pos - fetch_cycle) & fetchunit_mask; int ddf2 = ((ddfstop_to_test - offs + fetchunit - 1) & ~fetchunit_mask) + offs; @@ -1302,9 +1348,9 @@ static void update_fetch (int until, int fm) maybe_first_bpl1dat (pos); if (pos <= ddfstop_to_test && pos + count > ddfstop_to_test) - passed_plfstop = 1; + plfstate = plf_passed_stop; if (pos <= ddfstop_to_test && pos + count > ddf2) - passed_plfstop = 2; + plfstate = plf_passed_stop2; if (pos <= ddf2 && pos + count >= ddf2 + fm_maxplane) add_modulos (); pos += count; @@ -1313,8 +1359,10 @@ static void update_fetch (int until, int fm) } for (; pos < until; pos++) { - if (fetch_state == fetch_was_plane0) + if (fetch_state == fetch_was_plane0) { beginning_of_plane_block (pos, fm); + estimate_last_fetch_cycle (pos); + } fetch_state = fetch_started; if (one_fetch_cycle (pos, ddfstop_to_test, dma, fm)) return; @@ -1351,7 +1399,7 @@ static __inline__ void start_bpl_dma (int hstart) out_nbits = 0; out_offs = 0; toscr_nbits = 0; - thisline_decision.bplres = res_bplcon0; + thisline_decision.bplres = bplcon0_res; ddfstate = DIW_waiting_stop; compute_toscr_delay (); @@ -1386,7 +1434,7 @@ static __inline__ void maybe_start_bpl_dma (int hpos) if (hpos > plfstop - fetchunit) return; if (ddfstate != DIW_waiting_start) - passed_plfstop = 1; + plfstate = plf_passed_stop; start_bpl_dma (hpos); } @@ -1403,34 +1451,41 @@ STATIC_INLINE void decide_line (int hpos) ddf_change = vpos; } - if (hpos <= last_decide_line_hpos) - return; - if (fetch_state != fetch_not_started) - return; + if (hpos <= last_decide_line_hpos) + return; + if (fetch_state != fetch_not_started) + return; - /* Test if we passed the start of the DDF window. */ + if (dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) { + int ok = 0; + if (last_decide_line_hpos < plfstrt_start && hpos >= plfstrt_start) { + if (plfstate == plf_idle) + plfstate = plf_start; + } if (last_decide_line_hpos < plfstrt && hpos >= plfstrt) { - /* If DMA isn't on by the time we reach plfstrt, then there's no - bitplane DMA at all for the whole line. */ - if (dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) { - /* hack warning.. Writing to DDFSTRT when DMA should start must be ignored - * (correct fix would be emulate this delay for every custom register, but why bother..) */ - if ((hpos - 2 != ddfstrt_old_hpos) || (ddfstrt_old_vpos != vpos)) - { - start_bpl_dma (plfstrt); - estimate_last_fetch_cycle (plfstrt); - last_decide_line_hpos = hpos; - do_sprites (plfstrt); - return; - } - } - } + if (plfstate == plf_start) + plfstate = plf_active; + if (plfstate == plf_active) + ok = 1; + /* hack warning.. Writing to DDFSTRT when DMA should start must be ignored + * (correct fix would be emulate this delay for every custom register, but why bother..) */ + if (hpos - 2 == ddfstrt_old_hpos && ddfstrt_old_vpos == vpos) + ok = 0; + } + if (ok) { + start_bpl_dma (plfstrt); + estimate_last_fetch_cycle (plfstrt); + last_decide_line_hpos = hpos; + do_sprites (plfstrt); + return; + } + } - if (last_sprite_decide_line_hpos < SPR0_HPOS + 4 * MAX_SPRITES) - do_sprites (hpos); - last_sprite_decide_line_hpos = hpos; + if (last_sprite_decide_line_hpos < SPR0_HPOS + 4 * MAX_SPRITES) + do_sprites (hpos); + last_sprite_decide_line_hpos = hpos; - last_decide_line_hpos = hpos; + last_decide_line_hpos = hpos; } /* Called when a color is about to be changed (write to a color register), @@ -1449,20 +1504,32 @@ static void record_color_change (int hpos, int regno, unsigned long value) if (thisline_decision.ctable == -1) remember_ctable (); - curr_color_changes[next_color_change].linepos = hpos; - curr_color_changes[next_color_change].regno = regno; - curr_color_changes[next_color_change++].value = value; - curr_color_changes[next_color_change].regno = -1; + if (regno < 0x1000 && hpos < HBLANK_OFFSET && !(beamcon0 & 0x80) && prev_lineno >= 0) { + struct draw_info *pdip = curr_drawinfo + prev_lineno; + int idx = pdip->last_color_change; + /* Move color changes in horizontal cycles 0 to HBLANK_OFFSET to end of previous line. + * Cycles 0 to HBLANK_OFFSET are visible in right border on real Amigas. (because of late hsync) + */ + pdip->last_color_change++; + pdip->nr_color_changes++; + curr_color_changes[idx].linepos = hpos + maxhpos + 1; + curr_color_changes[idx].regno = regno; + curr_color_changes[idx].value = value; + curr_color_changes[idx + 1].regno = -1; + } + record_color_change2 (hpos, regno, value); } static void record_register_change (int hpos, int regno, unsigned long value) { if (regno == 0x100) { + if (plfstate >= plf_end) + return; if (value & 0x800) thisline_decision.ham_seen = 1; if (hpos < HARD_DDF_START || hpos < plfstrt + 0x20) { thisline_decision.bplcon0 = value; - thisline_decision.bplres = res_bplcon0; + thisline_decision.bplres = bplcon0_res; } } record_color_change (hpos, regno + 0x1000, value); @@ -1515,7 +1582,7 @@ static int expand_sprres (uae_u16 con0, uae_u16 con3) /* handle very rarely needed playfield collision (CLXDAT bit 0) */ static void do_playfield_collisions (void) { - int bplres = res_bplcon0; + int bplres = bplcon0_res; hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres; hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword); hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword); @@ -1563,7 +1630,7 @@ static void do_sprite_collisions (void) int first = curr_drawinfo[next_lineno].first_sprite_entry; int i; unsigned int collision_mask = clxmask[clxcon >> 12]; - int bplres = res_bplcon0; + int bplres = bplcon0_res; hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres; hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword); hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword); @@ -1625,24 +1692,49 @@ static void do_sprite_collisions (void) } } -STATIC_INLINE void record_sprite_1 (uae_u16 *_GCCRES_ buf, uae_u32 datab, int num, int dbl, +STATIC_INLINE void record_sprite_1 (int sprxp, uae_u16 *_GCCRES_ buf, uae_u32 datab, int num, int dbl, unsigned int mask, int do_collisions, uae_u32 collision_mask) { int j = 0; while (datab) { - unsigned int tmp = *buf; - unsigned int col = (datab & 3) << (2 * num); - tmp |= col; - if ((j & mask) == 0) + unsigned int col = 0; + unsigned int coltmp = 0; + + if ((sprxp >= sprite_minx && sprxp < sprite_maxx) || (bplcon3 & 2)) + col = (datab & 3) << (2 * num); + if ((j & mask) == 0) { + unsigned int tmp = (*buf) | col; *buf++ = tmp; - if (dbl > 0) + if (do_collisions) + coltmp |= tmp; + sprxp++; + } + if (dbl > 0) { + unsigned int tmp = (*buf) | col; *buf++ = tmp; + if (do_collisions) + coltmp |= tmp; + sprxp++; + } + if (dbl > 1) { + unsigned int tmp; + tmp = (*buf) | col; + *buf++ = tmp; + if (do_collisions) + coltmp |= tmp; + tmp = (*buf) | col; + *buf++ = tmp; + if (do_collisions) + coltmp |= tmp; + sprxp++; + sprxp++; + } j++; datab >>= 2; if (do_collisions) { - tmp &= collision_mask; - if (tmp) { - unsigned int shrunk_tmp = sprite_ab_merge[tmp & 255] | (sprite_ab_merge[tmp >> 8] << 2); + coltmp &= collision_mask; + if (coltmp) { + unsigned int shrunk_tmp = sprite_ab_merge[coltmp & 255] | (sprite_ab_merge[coltmp >> 8] << 2); clxdat |= sprclx[shrunk_tmp]; } } @@ -1655,30 +1747,32 @@ STATIC_INLINE void record_sprite_1 (uae_u16 *_GCCRES_ buf, uae_u32 datab, int nu This function assumes that for all sprites in a given line, SPRXP either stays equal or increases between successive calls. - The data is recorded either in lores pixels (if ECS), or in hires pixels - (if AGA). No support for SHRES sprites. */ + The data is recorded either in lores pixels (if OCS/ECS), or in hires or + superhires pixels (if AGA). */ static void record_sprite (int line, int num, int sprxp, uae_u16 *_GCCRES_ data, uae_u16 *_GCCRES_ datb, unsigned int ctl) { struct sprite_entry *e = curr_sprite_entries + next_sprite_entry; int i; int word_offs; - uae_u16 *buf; uae_u32 collision_mask; int width, dbl, half; - unsigned int mask; + unsigned int mask = 0; + int attachment; half = 0; dbl = sprite_buffer_res - sprres; if (dbl < 0) { half = -dbl; dbl = 0; + if (ecsshres () || (sprite_buffer_res < RES_SUPERHIRES && sprres == RES_SUPERHIRES)) + mask = 1; /* need to halve horizontal size */ } - mask = sprres == RES_SUPERHIRES ? 1 : 0; width = (sprite_width << sprite_buffer_res) >> sprres; - - /* Try to coalesce entries if they aren't too far apart. */ - if (! next_sprite_forced && e[-1].max + 16 >= sprxp) { + attachment = (spr[num & ~1].armed && ((sprctl[num | 1] & 0x80) || (!(currprefs.chipset_mask & CSMASK_AGA) && (sprctl[num & ~1] & 0x80)))); + + /* Try to coalesce entries if they aren't too far apart */ + if (! next_sprite_forced && e[-1].max + sprite_width >= sprxp) { e--; } else { next_sprite_entry++; @@ -1702,18 +1796,19 @@ static void record_sprite (int line, int num, int sprxp, uae_u16 *_GCCRES_ data, uae_u32 datab = ((sprtaba[da & 0xFF] << 16) | sprtaba[da >> 8] | (sprtabb[db & 0xFF] << 16) | sprtabb[db >> 8]); - buf = spixels + word_offs + ((i << dbl) >> half); + int off = (i << dbl) >> half; + uae_u16 *buf = spixels + word_offs + off; if (currprefs.collision_level > 0 && collision_mask) - record_sprite_1 (buf, datab, num, dbl, mask, 1, collision_mask); + record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 1, collision_mask); else - record_sprite_1 (buf, datab, num, dbl, mask, 0, collision_mask); + record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 0, collision_mask); data++; datb++; } /* We have 8 bits per pixel in spixstate, two for every sprite pair. The low order bit records whether the attach bit was set for this pair. */ - if (spr[num & ~1].armed && ((sprctl[num | 1] & 0x80) || (!(currprefs.chipset_mask & CSMASK_AGA) && (sprctl[num & ~1] & 0x80)))) { + if (attachment) { uae_u8 state = 0x03 << (num & ~1); uae_u8 *stb1 = spixstate.bytes + word_offs; for (i = 0; i < width; i += 8) { @@ -1731,58 +1826,103 @@ static void record_sprite (int line, int num, int sprxp, uae_u16 *_GCCRES_ data, } } +static void add_sprite (int *countp, int num, int sprxp, int posns[], int nrs[]) +{ + int count = *countp; + int j, bestp; + + /* Sort the sprites in order of ascending X position before recording them. */ + for (bestp = 0; bestp < count; bestp++) { + if (posns[bestp] > sprxp) + break; + if (posns[bestp] == sprxp && nrs[bestp] < num) + break; + } + for (j = count; j > bestp; j--) { + posns[j] = posns[j-1]; + nrs[j] = nrs[j - 1]; + } + posns[j] = sprxp; + nrs[j] = num; + count++; + *countp = count; +} + +static int tospritexdiw (int diw) +{ + return coord_window_to_hw_x (diw - (DIW_DDF_OFFSET << lores_shift)) << sprite_buffer_res; +} +static int tospritexddf (int ddf) +{ + return (ddf * 2) << sprite_buffer_res; +} + +static void calcsprite (void) +{ + sprite_maxx = 0x7fff; + sprite_minx = 0; + if (thisline_decision.diwlastword >= 0) + sprite_maxx = tospritexdiw (thisline_decision.diwlastword); + if (thisline_decision.diwfirstword >= 0) + sprite_minx = tospritexdiw (thisline_decision.diwfirstword); + if (thisline_decision.plfleft >= 0) { + int min, max; + min = tospritexddf (thisline_decision.plfleft); + max = tospritexddf (thisline_decision.plfright); + if (min > sprite_minx && min < max) /* min < max = full line ddf */ + sprite_minx = min; + /* sprites are visible from first BPL0DAT write to end of line + * (another undocumented feature) + */ + } +} + static void decide_sprites (int hpos) { - int nrs[MAX_SPRITES], posns[MAX_SPRITES]; + int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2]; int count, i; /* apparantly writes to custom registers happen in the 3/4th of cycle * and sprite xpos comparator sees it immediately */ int point = hpos * 2 - 3; int width = sprite_width; - int window_width = width >> sprres; + int sscanmask = 0x100 << sprite_buffer_res; + if (thisline_decision.nr_planes == 0 && !(bplcon3 & 2)) + return; + if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point) return; decide_diw (hpos); decide_line (hpos); + calcsprite (); count = 0; for (i = 0; i < MAX_SPRITES; i++) { - int sprxp = spr[i].xpos; + int sprxp = (fmode & 0x8000) ? (spr[i].xpos & ~sscanmask) : spr[i].xpos; int hw_xp = sprxp >> sprite_buffer_res; - int window_xp = coord_hw_to_window_x (hw_xp) + (DIW_DDF_OFFSET); - int j, bestp; + if (spr[i].xpos < 0) + continue; + if (! spr[i].armed) continue; - if (sprxp < 0 || hw_xp <= last_sprite_point || hw_xp > point) - continue; + if (hw_xp > last_sprite_point && hw_xp <= point) + add_sprite (&count, i, sprxp, posns, nrs); - if ( !(bplcon3 & 2) && /* sprites outside playfields enabled? */ - ((thisline_decision.diwfirstword >= 0 && window_xp + window_width < thisline_decision.diwfirstword) - || (thisline_decision.diwlastword >= 0 && window_xp > thisline_decision.diwlastword))) - continue; - - /* Sort the sprites in order of ascending X position before recording them. */ - for (bestp = 0; bestp < count; bestp++) { - if (posns[bestp] > sprxp) - break; - if (posns[bestp] == sprxp && nrs[bestp] < i) - break; - } - for (j = count; j > bestp; j--) { - posns[j] = posns[j-1]; - nrs[j] = nrs[j-1]; - } - posns[j] = sprxp; - nrs[j] = i; - count++; + /* SSCAN2-bit is fun.. */ + if ((fmode & 0x8000) && !(sprxp & sscanmask)) { + sprxp |= sscanmask; + hw_xp = sprxp >> sprite_buffer_res; + if (hw_xp > last_sprite_point && hw_xp <= point) + add_sprite (&count, MAX_SPRITES + i, sprxp, posns, nrs); + } } + for (i = 0; i < count; i++) { - int nr = nrs[i]; - record_sprite (next_lineno, nr, spr[nr].xpos, sprdata[nr], sprdatb[nr], sprctl[nr]); + int nr = nrs[i] & (MAX_SPRITES - 1); + record_sprite (next_lineno, nr, posns[i], sprdata[nr], sprdatb[nr], sprctl[nr]); } last_sprite_point = point; } @@ -1817,8 +1957,7 @@ static __inline__ void finish_decisions (void) if (hdiwstate == DIW_waiting_stop || thisline_decision.diwlastword > max_diwlastword) thisline_decision.diwlastword = max_diwlastword; - if (thisline_decision.plfleft != -1 || (bplcon3 & 2)) - decide_sprites (hpos + 1); + decide_sprites (hpos + 1); dip = curr_drawinfo + next_lineno; @@ -1833,6 +1972,9 @@ static __inline__ void finish_decisions (void) dip->nr_sprites = next_sprite_entry - dip->first_sprite_entry; line_decisions[next_lineno] = thisline_decision; + + /* leave free space for possible extra color changes at the end of line */ + next_color_change += (HBLANK_OFFSET + 1) / 2; } /* Set the state of all decisions to "undecided" for a new scanline. */ @@ -1841,7 +1983,9 @@ static __inline__ void reset_decisions (void) if (nodraw ()) return; - thisline_decision.bplres = res_bplcon0; + curr_diagram_change = -1; + toscr_nr_planes = 0; + thisline_decision.bplres = bplcon0_res; thisline_decision.nr_planes = 0; thisline_decision.plfleft = -1; @@ -1863,7 +2007,11 @@ static __inline__ void reset_decisions (void) last_sprite_point = 0; fetch_state = fetch_not_started; - passed_plfstop = 0; + + if (plfstate > plf_active) + plfstate = plf_idle; + if (plfstate == plf_active && !(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) + plfstate = plf_idle; { register int i; @@ -1912,6 +2060,11 @@ static __inline__ void reset_decisions (void) thisline_decision.bplcon4 = bplcon4; } +STATIC_INLINE int isvsync (void) +{ + return 1; +} + void compute_vsynctime (void) { if (currprefs.chipset_refreshrate) { @@ -1930,8 +2083,12 @@ void init_hz (void) if ((beamcon0 & 0xA0) != (new_beamcon0 & 0xA0)) hzc = 1; + if (beamcon0 & 0x80) + hack_vpos = -1; beamcon0 = new_beamcon0; - isntsc = beamcon0 & 0x20 ? 0 : 1; + isntsc = (beamcon0 & 0x20) ? 0 : 1; + if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) + isntsc = currprefs.ntscmode ? 1 : 0; if (hack_vpos > 0) { if (maxvpos == hack_vpos) return; @@ -1980,8 +2137,9 @@ void init_hz (void) eventtab[ev_hsync].oldcycles = get_cycles (); eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME; events_schedule (); - if (hzc) + if (hzc) { reset_drawing (); + } compute_vsynctime (); #ifdef PICASSO96 init_hz_p96 (); @@ -2020,13 +2178,23 @@ static void calcdiw (void) plfstrt = ddfstrt; plfstop = ddfstop; - /* probably not the correct place.. */ - /* ECS/AGA and ddfstop > maxhpos = always-on display */ +#ifdef NEWHSYNC + plfstrt += 4; + plfstop += 4; +#endif + /* probably not the correct place.. should use plfstate instead */ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { - if (ddfstop > maxhpos) + /* ECS/AGA and ddfstop > maxhpos == always-on display */ + if (plfstop > maxhpos) plfstrt = 0; if (plfstrt < HARD_DDF_START) plfstrt = HARD_DDF_START; + plfstrt_start = plfstrt - 4; + } else { + /* OCS and ddfstrt >= ddfstop == ddfstop = max */ + if (plfstrt >= plfstop && plfstrt >= HARD_DDF_START) + plfstop = 0xff; + plfstrt_start = HARD_DDF_START - 2; } } @@ -2117,8 +2285,16 @@ static void VPOSW (uae_u16 v) STATIC_INLINE uae_u16 VHPOSR (void) { - uae_u16 vp = vpos << 8; + uae_u16 vp = vpos; uae_u16 hp = current_hpos (); + hp++; // hack.. + if (hp >= maxhpos) { + hp -= maxhpos; + vp++; + if (vp >= maxvpos) + vp = 0; + } + vp <<= 8; vp |= hp; return vp; } @@ -2379,9 +2555,13 @@ static __inline__ int is_bitplane_dma (int hpos) { if (fetch_state == fetch_not_started || hpos < thisline_decision.plfleft) return 0; - if ((passed_plfstop == 3 && hpos >= thisline_decision.plfright) + if ((plfstate == plf_end && hpos >= thisline_decision.plfright) || hpos >= estimated_last_fetch_cycle) return 0; + if (curr_diagram_change >= 0 && hpos >= curr_diagram_change) { + curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; + curr_diagram_change = -1; + } return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask]; } @@ -2389,7 +2569,7 @@ static void BPLxPTH (int hpos, uae_u16 v, int num) { decide_line (hpos); decide_fetch (hpos); - bplpt[num] = (bplpt[num] & 0xffff) | ((uae_u32)v << 16); + bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16); } static void BPLxPTL (int hpos, uae_u16 v, int num) @@ -2399,9 +2579,10 @@ static void BPLxPTL (int hpos, uae_u16 v, int num) decide_fetch (hpos); /* fix for "bitplane dma fetch at the same time while updating BPLxPTL" */ /* fixes "3v Demo" by Cave and "New Year Demo" by Phoenix */ - if (is_bitplane_dma(hpos - 1) == num + 1 && num > 0) + if (is_bitplane_dma(hpos - 1) == num + 1 && num > 0) { delta = 2 << fetchmode; - bplpt[num] = (bplpt[num] & ~0xffff) | ((v + delta) & 0xfffe); + } + bplpt[num] = (bplpt[num] & 0xffff0000) | ((v + delta) & 0x0000fffe); } static void BPLCON0 (int hpos, uae_u16 v) @@ -2410,7 +2591,11 @@ static void BPLCON0 (int hpos, uae_u16 v) v &= ~0x00F1; else if (! (currprefs.chipset_mask & CSMASK_AGA)) v &= ~0x00B1; + v &= ~(0x0200 | 0x0100 | 0x0080 | 0x0020); +#if SPRBORDER + v |= 1; +#endif if (bplcon0 == v) return; @@ -2419,15 +2604,12 @@ static void BPLCON0 (int hpos, uae_u16 v) decide_fetch (hpos); bplcon0 = v; - res_bplcon0 = GET_RES(v); - if(res_bplcon0 == RES_SUPERHIRES) + bplcon0_res = GET_RES(v); + if(bplcon0_res == RES_SUPERHIRES) { printf("RES_SUPERHIRES not supported...\n"); abort(); } - planes_bplcon0 = GET_PLANES(v); - planes_limit_bplcon0 = GET_PLANES_LIMIT(); - record_register_change (hpos, 0x100, v); if (currprefs.chipset_mask & CSMASK_ECS_DENISE) { decide_sprites (hpos); @@ -2435,8 +2617,22 @@ static void BPLCON0 (int hpos, uae_u16 v) } expand_fmodes (); + + if (fetch_state == fetch_not_started || diwstate != DIW_waiting_stop) { + record_register_change (hpos, 0x100, v); + } + else + record_color_change2 (hpos, 0x100 + 0x1000, v); + calcdiw (); estimate_last_fetch_cycle (hpos); + + curr_diagram_change = -1; + if (fetch_state == fetch_started && diwstate == DIW_waiting_stop) { + curr_diagram_change = hpos + fm_maxplane - (fetch_cycle & fetchstart_mask); + } else { + curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; + } } STATIC_INLINE void BPLCON1 (int hpos, uae_u16 v) @@ -2467,9 +2663,12 @@ STATIC_INLINE void BPLCON3 (int hpos, uae_u16 v) if (! (currprefs.chipset_mask & CSMASK_ECS_DENISE)) return; if (!(currprefs.chipset_mask & CSMASK_AGA)) { - v &= 0x3f; + v &= 0x003f; v |= 0x0c00; } +#if SPRBORDER + v |= 2; +#endif if (bplcon3 == v) return; decide_line (hpos); @@ -2603,7 +2802,6 @@ static void FMODE (uae_u16 v) delaymask = 63; // (16 << fetchmode) - 1; break; } - planes_limit_bplcon0 = GET_PLANES_LIMIT(); expand_fmodes (); calcdiw (); } @@ -2921,8 +3119,13 @@ static void COLOR_WRITE (int hpos, uae_u16 v, int num) STATIC_INLINE int copper_cant_read (int hpos) { +#ifdef NEWHSYNC + if (hpos == 0) + return 1; +#else if (hpos + 1 >= maxhpos) return 1; +#endif return is_bitplane_dma (hpos); } @@ -2958,15 +3161,13 @@ static void predict_copper (void) unsigned int w1, w2, cycle_count; switch (state) { - case COP_read1_wr_in2: - case COP_read2_wr_in2: - case COP_read1_wr_in4: + case COP_read1: + case COP_read2: if (dangerous_reg (cop_state.saved_i1)) return; - state = state == COP_read2_wr_in2 ? COP_read2 : COP_read1; break; - case COP_read1_in2: + case COP_strobe_delay2: c_hpos += 2; state = COP_read1; break; @@ -2974,19 +3175,13 @@ static void predict_copper (void) case COP_stop: case COP_bltwait: case COP_wait1: - case COP_skip_in4: case COP_skip_in2: case COP_skip1: - case COP_strobe_delay: + case COP_strobe_delay1: return; - case COP_wait_in4: - c_hpos += 2; - /* fallthrough */ case COP_wait_in2: c_hpos += 2; - /* fallthrough */ - case COP_wait: state = COP_wait; break; @@ -3006,12 +3201,11 @@ static void predict_copper (void) if (w1 & 1) { w2 = CHIPMEM_AGNUS_WGET_CUSTOM (ip); if (w2 & 1) - goto done; + return; state = COP_wait; c_hpos += 4; } else if (dangerous_reg (w1)) { - c_hpos += 4; - goto done; + return; } else { cop_state.regtypes_modified |= regtypes[w1 & 0x1FE]; state = COP_read1; @@ -3057,7 +3251,7 @@ static void predict_copper (void) c_hpos = hcmp; } /* If this is the current instruction, remember that we don't - need to sync CPU and copper anytime soon. */ + need to sync CPU and copper anytime soon. */ if (cop_state.ip == ip) { cop_state.first_sync = c_hpos; } @@ -3066,7 +3260,6 @@ static void predict_copper (void) return; } - done: cycle_count = c_hpos - cop_state.hpos; if (cycle_count >= 8) { unset_special (®s, SPCFLAG_COPPER); @@ -3077,24 +3270,21 @@ static void predict_copper (void) } } -static __inline__ void perform_copper_write (int old_hpos) +static __inline__ void perform_copper_write (int old_hpos, int address, int data) { - unsigned int address = cop_state.saved_i1 & 0x1FE; - if (test_copper_dangerous(address)) return; - if (address == 0x88) { cop_state.ip = cop1lc; - cop_state.state = COP_strobe_delay; + cop_state.state = COP_strobe_delay1; } else if (address == 0x8A) { cop_state.ip = cop2lc; - cop_state.state = COP_strobe_delay; + cop_state.state = COP_strobe_delay1; } else { - custom_wput_1 (old_hpos, cop_state.saved_i1, cop_state.saved_i2, 0); + custom_wput_1 (old_hpos, address, data, 0); old_hpos++; - if (!nocustom() && cop_state.saved_i1 >= 0x140 && cop_state.saved_i1 < 0x180 && old_hpos >= SPR0_HPOS && old_hpos < SPR0_HPOS + 4 * MAX_SPRITES) { - //write_log ("%d:%d %04.4X:%04.4X\n", vpos, old_hpos, cop_state.saved_i1, cop_state.saved_i2); + if (!nocustom() && address >= 0x140 && address < 0x180 && old_hpos >= SPR0_HPOS && old_hpos < SPR0_HPOS + 4 * MAX_SPRITES) { + //write_log ("%d:%d %04X:%04X\n", vpos, old_hpos, cop_state.saved_i1, cop_state.saved_i2); do_sprites (old_hpos); } } @@ -3160,94 +3350,88 @@ static void update_copper (int until_hpos) /* So we know about the fetch state. */ decide_line (c_hpos); - switch (cop_state.state) { - case COP_read1_in2: - cop_state.state = COP_read1; - break; - case COP_read1_wr_in2: - cop_state.state = COP_read1; - perform_copper_write (old_hpos); - /* That could have turned off the copper. */ - if (! copper_enabled_thisline) - goto out; - - break; - case COP_read1_wr_in4: - cop_state.state = COP_read1_wr_in2; - break; - case COP_read2_wr_in2: - cop_state.state = COP_read2; - perform_copper_write (old_hpos); - /* That could have turned off the copper. */ - if (! copper_enabled_thisline) - goto out; - - break; - case COP_wait_in2: - cop_state.state = COP_wait1; - break; - case COP_wait_in4: - cop_state.state = COP_wait_in2; - break; - case COP_skip_in2: - cop_state.state = COP_skip1; - break; - case COP_skip_in4: - cop_state.state = COP_skip_in2; - break; - case COP_strobe_delay: - cop_state.state = COP_read1_in2; - break; - default: - break; - } - + if (cop_state.movedelay > 0) { + cop_state.movedelay--; + if (cop_state.movedelay == 0) { + perform_copper_write (old_hpos, cop_state.moveaddr, cop_state.movedata); + if (! copper_enabled_thisline) + goto out; + } + } + c_hpos += 2; if (cop_state.strobe) { cop_state.ip = cop_state.strobe == 1 ? cop1lc : cop2lc; cop_state.strobe = 0; } - switch (cop_state.state) { - case COP_read1_wr_in4: - return; - - case COP_read1_wr_in2: + switch (cop_state.state) + { + case COP_wait_in2: + if (copper_cant_read (old_hpos)) + continue; + cop_state.state = COP_wait1; + break; + case COP_skip_in2: + if (copper_cant_read (old_hpos)) + continue; + cop_state.state = COP_skip1; + break; + case COP_strobe_delay1: + cop_state.state = COP_strobe_delay2; + break; + case COP_strobe_delay2: + if (copper_cant_read (old_hpos)) + continue; + cop_state.state = COP_read1; + break; + case COP_read1: if (copper_cant_read (old_hpos)) continue; cop_state.i1 = CHIPMEM_AGNUS_WGET_CUSTOM (cop_state.ip); cop_state.ip += 2; - cop_state.state = cop_state.state == COP_read1 ? COP_read2 : COP_read2_wr_in2; + cop_state.state = COP_read2; break; - case COP_read2_wr_in2: - return; - case COP_read2: if (copper_cant_read (old_hpos)) continue; cop_state.i2 = CHIPMEM_AGNUS_WGET_CUSTOM (cop_state.ip); cop_state.ip += 2; - if (cop_state.ignore_next) { - cop_state.ignore_next = 0; - cop_state.state = COP_read1; - break; - } cop_state.saved_i1 = cop_state.i1; cop_state.saved_i2 = cop_state.i2; - cop_state.saved_ip = cop_state.ip; if (cop_state.i1 & 1) { + cop_state.ignore_next = 0; if (cop_state.i2 & 1) - cop_state.state = COP_skip_in4; + cop_state.state = COP_skip_in2; else - cop_state.state = COP_wait_in4; + cop_state.state = COP_wait_in2; } else { unsigned int reg = cop_state.i1 & 0x1FE; - cop_state.state = isagnus[reg >> 1] ? COP_read1_wr_in2 : COP_read1_wr_in4; - } + cop_state.state = COP_read1; + cop_state.movedata = cop_state.i2; + if (cop_state.ignore_next) { + test_copper_dangerous (reg); + if (! copper_enabled_thisline) + goto out; + reg = 0x1fe; + cop_state.ignore_next = 0; + } + cop_state.moveaddr = reg; + cop_state.movedelay = 0; + if (reg == 0x88) { + cop_state.ip = cop1lc; + cop_state.state = COP_strobe_delay1; + } else if (reg == 0x8A) { + cop_state.ip = cop2lc; + cop_state.state = COP_strobe_delay1; + } else { + cop_state.movedelay = isagnus[reg >> 1] ? 1 : 2; + } + } break; case COP_wait1: @@ -3288,8 +3472,6 @@ static void update_copper (int until_hpos) /* fall through */ case COP_wait: - if (vp < cop_state.vcmp) - return; if (copper_cant_read (old_hpos)) continue; @@ -3330,29 +3512,19 @@ static void update_copper (int until_hpos) if (c_hpos >= (maxhpos & ~1)) break; + if (copper_cant_read (old_hpos)) + continue; vcmp = (cop_state.saved_i1 & (cop_state.saved_i2 | 0x8000)) >> 8; hcmp = (cop_state.saved_i1 & cop_state.saved_i2 & 0xFE); vp1 = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); hp1 = c_hpos & (cop_state.saved_i2 & 0xFE); - if ((vp1 > vcmp || (vp1 == vcmp && hp1 >= hcmp)) - && ((cop_state.saved_i2 & 0x8000) != 0 || ! (DMACONR() & 0x4000))) + if ((vp1 > vcmp || (vp1 == vcmp && hp1 >= hcmp)) && ((cop_state.saved_i2 & 0x8000) != 0 || ! (DMACONR() & 0x4000))) cop_state.ignore_next = 1; - if (CHIPMEM_AGNUS_WGET_CUSTOM (cop_state.ip) & 1) { /* FIXME: HACK!!! */ - /* copper never skips if following instruction is WAIT or another SKIP... */ - cop_state.ignore_next = 0; - } cop_state.state = COP_read1; - if (cop_state.ignore_next && (CHIPMEM_AGNUS_WGET_CUSTOM (cop_state.ip) & 1) == 0) { - /* another undocumented copper feature: - copper stops if skipped instruction is MOVE to dangerous register... - */ - test_copper_dangerous (CHIPMEM_AGNUS_WGET_CUSTOM(cop_state.ip)); - } - break; } default: @@ -3414,8 +3586,7 @@ void blitter_done_notify (void) cop_state.hpos = current_hpos () & ~1; cop_state.vpos = vpos; - /* apparently there is small delay until copper wakes up.. */ - cop_state.state = COP_wait_in2; + cop_state.state = COP_read1; compute_spcflag_copper (); } @@ -3477,6 +3648,10 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos) } if (vpos == s->vstop || vpos == sprite_vblank_endline) { s->dmastate = 0; + if (vpos == s->vstop) { + spr_arm (num, 0); + //return; + } } if (!dmaen (DMA_SPRITE)) return; @@ -3571,7 +3746,7 @@ static void do_sprites (int hpos) return; maxspr = hpos; - minspr = last_sprite_hpos; + minspr = last_sprite_hpos + 1; if (minspr >= SPR0_HPOS + MAX_SPRITES * 4 || maxspr < SPR0_HPOS) return; @@ -3581,7 +3756,7 @@ static void do_sprites (int hpos) if (minspr < SPR0_HPOS) minspr = SPR0_HPOS; - for (i = minspr; i < maxspr; i++) { + for (i = minspr; i <= maxspr; i++) { int cycle = -1; int num = (i - SPR0_HPOS) / 4; switch ((i - SPR0_HPOS) & 3) @@ -3594,7 +3769,7 @@ static void do_sprites (int hpos) cycle = 1; break; } - if (cycle >= 0) + if (cycle >= 0 && num >= 0 && num < MAX_SPRITES) do_sprites_1 (num, cycle, i); } last_sprite_hpos = hpos; @@ -3609,6 +3784,7 @@ static void init_sprites (void) static void init_hardware_frame (void) { next_lineno = 0; + prev_lineno = -1; diwstate = DIW_waiting_start; hdiwstate = DIW_waiting_start; ddfstate = DIW_waiting_start; @@ -3647,6 +3823,10 @@ static void framewait (void) frame_time_t curr_time; frame_time_t start; + if (isvsync ()) { + vsyncmintime = vsynctime; + return; + } for (;;) { double v = rpt_vsync () / (syncbase / 1000.0); if (v >= -4) @@ -3654,6 +3834,8 @@ static void framewait (void) sleep_millis (2); } curr_time = start = read_processor_time(); + while (rpt_vsync () < 0); + curr_time = read_processor_time (); vsyncmintime = curr_time + vsynctime; // idletime += read_processor_time() - start; } @@ -3700,7 +3882,7 @@ static void vsync_handler (void) frame_time_t curr_time = read_processor_time (); if (rpt_did_reset) vsyncmintime = curr_time + vsynctime; - rpt_did_reset = 0; + rpt_did_reset = 0; } } @@ -3711,9 +3893,7 @@ static void vsync_handler (void) lof ^= 0x8000; #ifdef PICASSO96 - /* And now let's update the Picasso palette, if required */ - if (picasso_on) - picasso_handle_vsync (); + picasso_handle_vsync (); #endif if (quit_program > 0) { @@ -3769,7 +3949,7 @@ static void vsync_handler (void) #define N_LINES 8 -static __inline__ int trigger_frh(int v) +STATIC_INLINE int trigger_frh (int v) { return (v & (N_LINES - 1)) == 0; } @@ -3831,21 +4011,21 @@ static void hsync_handler (void) #endif // Slows down emulation without improving compatability a lot -// if ((currprefs.chipset_mask & CSMASK_AGA) || (!currprefs.chipset_mask & CSMASK_ECS_AGNUS)) -// last_custom_value = uaerand (); +// if (currprefs.chipset_mask & CSMASK_AGA) +// last_custom_value = 0xffff; // else -// last_custom_value = 0xffff; +// last_custom_value = uaerand (); if (currprefs.produce_sound) audio_hsync (1); -/* blitter_slowdown doesn't work at the moment (causes gfx glitches in Shadow of the Beast) - if (bltstate != BLT_done && dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) { + if (!nocustom()) { + if (bltstate != BLT_done && dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) { blitter_slowdown (thisline_decision.plfleft, thisline_decision.plfright - (16 << fetchmode), - cycle_diagram_total_cycles[fetchmode][res_bplcon0][planes_limit_bplcon0], - cycle_diagram_free_cycles[fetchmode][res_bplcon0][planes_limit_bplcon0]); - } -*/ + cycle_diagram_total_cycles[fetchmode][bplcon0_res][bplcon0_planes_limit], + cycle_diagram_free_cycles[fetchmode][bplcon0_res][bplcon0_planes_limit]); + } + } /* 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, @@ -3875,13 +4055,14 @@ static void hsync_handler (void) } } else { #endif - is_lastline = vpos + 1 == maxvpos + (lof == 0 ? 0 : 1) - LAST_SPEEDUP_LINE && currprefs.m68k_speed == -1 && ! rpt_did_reset; + is_lastline = vpos + 1 == maxvpos + (lof == 0 ? 0 : 1) - LAST_SPEEDUP_LINE && currprefs.m68k_speed == -1; #ifdef JIT } #endif if (!nocustom()) { int lineno = vpos; + prev_lineno = next_lineno; next_lineno = lineno; reset_decisions (); } @@ -4093,9 +4274,6 @@ void customreset (int hardreset) DSKLEN (0, 0); bplcon0 = 0; - planes_bplcon0 = 0; - planes_limit_bplcon0 = 0; - res_bplcon0 = 0; bplcon4 = 0x0011; /* Get AGA chipset into ECS compatibility mode */ bplcon3 = 0x0C00; diwhigh = 0; @@ -4175,7 +4353,6 @@ void customreset (int hardreset) init_regtypes (); - sprite_buffer_res = (currprefs.chipset_mask & CSMASK_AGA) ? RES_HIRES : RES_LORES; if (savestate_state == STATE_RESTORE) { uae_u16 v; uae_u32 vv; @@ -4379,8 +4556,6 @@ STATIC_INLINE uae_u32 REGPARAM2 custom_wget_1 (uaecptr addr, int noput) case 0x01E: v = INTREQR (); break; case 0x07C: v = DENISEID (); break; - case 0x02E: v = 0xffff; break; /* temporary hack */ - case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: @@ -4391,13 +4566,27 @@ STATIC_INLINE uae_u32 REGPARAM2 custom_wget_1 (uaecptr addr, int noput) break; default: - /* reading write-only register causes write with last value in bus */ + /* OCS/ECS: + * reading write-only register causes write with last value in chip + * bus (custom registers, chipram, slowram) + * and finally returns all ones + * AGA: + * only writes to custom registers change last value, read returns + * last value which then changes to all ones (following read will return + * all ones) + */ v = last_custom_value; if (!noput) { int hpos = current_hpos (); decide_line (hpos); decide_fetch (hpos); - custom_wput_1 (hpos, addr, v, 1); + custom_wput_1 (hpos, addr, last_custom_value, 1); + if (currprefs.chipset_mask & CSMASK_AGA) { + v = last_custom_value; + last_custom_value = 0xffff; + } else { + v = 0xffff; + } } return v; } @@ -4626,8 +4815,6 @@ static int REGPARAM2 custom_wput_1 (int hpos, uaecptr addr, uae_u32 value, int n default: if (!noget) custom_wget_1 (addr, 1); - if (!(currprefs.chipset_mask & CSMASK_AGA) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) - last_custom_value = 0xffff; return 1; } return 0; @@ -4772,7 +4959,7 @@ uae_u8 *restore_custom (uae_u8 *src) dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */ ru16=RW; CLXCON(ru16); /* 098 CLXCON */ intena = RW; /* 09A INTENA */ - intreq = intreqr = RW; /* 09C INTREQ */ + intreq = intreqr = RW | 0x20; /* 09C INTREQ */ adkcon = RW; /* 09E ADKCON */ /* 0A0 - 0DE Audio regs */ for (i = 0; i < 8; i++) @@ -4828,9 +5015,6 @@ uae_u8 *restore_custom (uae_u8 *src) DISK_restore_custom (dskpt, dsklen, dskbytr); - res_bplcon0 = GET_RES(bplcon0); - planes_bplcon0 = GET_PLANES(bplcon0); - planes_limit_bplcon0 = GET_PLANES_LIMIT(); FMODE (fmode); return src; @@ -5010,7 +5194,7 @@ uae_u8 *save_custom_agacolors (int *len, uae_u8 *dstptr) if (dstptr) dstbak = dst = dstptr; else - dstbak = dst = (uae_u8 *)malloc (256*4); + dstbak = dst = (uae_u8 *)xmalloc (256*4); for (i = 0; i < 256; i++) SL (current_colors.color_regs_aga[i]); *len = dst - dstbak; @@ -5041,7 +5225,7 @@ uae_u8 *save_custom_sprite(int num, int *len, uae_u8 *dstptr) if (dstptr) dstbak = dst = dstptr; else - dstbak = dst = (uae_u8 *)malloc (30); + dstbak = dst = (uae_u8 *)xmalloc (30); SL (spr[num].pt); /* 120-13E SPRxPT */ SW (sprpos[num]); /* 1x0 SPRxPOS */ SW (sprctl[num]); /* 1x2 SPRxPOS */ diff --git a/src/disk.cpp b/src/disk.cpp index 7f8d83bd..1386ed6a 100644 --- a/src/disk.cpp +++ b/src/disk.cpp @@ -36,8 +36,8 @@ static int longwritemode = 0; /* support HD floppies */ #define FLOPPY_DRIVE_HD -/* writable track length with normal 2us bitcell/300RPM motor (PAL) */ -#define FLOPPY_WRITE_LEN (currprefs.ntscmode ? (12798 / 2) : (12668 / 2)) /* 12667 PAL, 12797 NTSC */ +/* writable track length with normal 2us bitcell/300RPM motor, 12667 PAL, 12797 NTSC */ +#define FLOPPY_WRITE_LEN (currprefs.floppy_write_length > 256 ? currprefs.floppy_write_length / 2 : (currprefs.ntscmode ? (12798 / 2) : (12668 / 2))) #define FLOPPY_WRITE_MAXLEN 0x3800 /* This works out to 350 */ #define FLOPPY_GAP_LEN (FLOPPY_WRITE_LEN - 11 * 544) @@ -51,6 +51,7 @@ static int longwritemode = 0; #else #define DDHDMULT 1 #endif +#define MAX_SECTORS (DDHDMULT * 11) /* UAE-1ADF (ADF_EXT2) * W reserved @@ -65,7 +66,7 @@ static int longwritemode = 0; static int side, direction; static uae_u8 selected = 15, disabled = 0; -static uae_u8 writebuffer[544 * 11 * DDHDMULT]; +static uae_u8 writebuffer[544 * MAX_SECTORS]; #define DISK_INDEXSYNC 1 #define DISK_WORDSYNC 2 @@ -142,6 +143,7 @@ typedef struct { int dskready; int dskready_time; int dskready_down_time; + int writtento; int steplimit; frame_time_t steplimitcycle; int indexhack, indexhackmode; @@ -800,6 +802,7 @@ static int drive_insert (drive *drv, struct uae_prefs *p, int dnum, const char * trackid *tid; int num_tracks, size; + gui_disk_image_change (dnum, fname); drive_image_free (drv); drv->diskfile = DISK_validate_filename (fname, 1, &drv->wrprot, &drv->crc32); drv->ddhd = 1; @@ -1117,7 +1120,7 @@ static void decode_pcdos (drive *drv) crc16 = get_crc16(secbuf + 56, 3 + 1 + 512); secbuf[60 + 512] = crc16 >> 8; secbuf[61 + 512] = crc16 & 0xff; - memset(secbuf + 512 + 62, 0x4e, (tracklen / 2 - 96) / drv->num_secs - 574); + memset(secbuf + 512 + 62, 0x4e, (tracklen / 2 - 96) / drv->num_secs - 574 / drv->ddhd); dstmfmbuf = mfmcoder(secbuf, mfm2, 60 + 512 + 2 + 76 / drv->ddhd); mfm2[12] = 0x4489; mfm2[13] = 0x4489; @@ -1313,7 +1316,7 @@ static uae_u32 getmfmlong (uae_u16 *mbuf, int shift) return ((getmfmword (mbuf, shift) << 16) | getmfmword (mbuf + 1, shift)) & MFMMASK; } -static int decode_buffer (uae_u16 *mbuf, int cyl, int drvsec, int ddhd, int filetype, int *drvsecp, int checkmode) +static int decode_buffer (uae_u16 *mbuf, int cyl, int drvsec, int ddhd, int filetype, int *drvsecp, int *sectable, int checkmode) { int i, secwritten = 0; int fwlen = FLOPPY_WRITE_LEN * ddhd; @@ -1322,10 +1325,9 @@ static int decode_buffer (uae_u16 *mbuf, int cyl, int drvsec, int ddhd, int file uae_u8 *secdata; uae_u8 secbuf[544]; uae_u16 *mend = mbuf + length; - char sectable[22]; int shift = 0; - memset (sectable, 0, sizeof (sectable)); + memset (sectable, 0, MAX_SECTORS * sizeof (int)); memcpy (mbuf + fwlen, mbuf, fwlen * sizeof (uae_u16)); mend -= (4 + 16 + 8 + 512); while (secwritten < drvsec) { @@ -1438,7 +1440,7 @@ static int drive_write_pcdos (drive *drv) uae_u16 *mbuf = drv->bigmfmbuf; uae_u16 *mend = mbuf + length; int secwritten = 0, shift = 0, sector = -1; - char sectable[18]; + int sectable[18]; uae_u8 secbuf[3 + 1 + 512]; uae_u8 mark; uae_u16 crc; @@ -1506,8 +1508,9 @@ static int drive_write_pcdos (drive *drv) static int drive_write_adf_amigados (drive * drv) { int drvsec, i; + int sectable[MAX_SECTORS]; - if (decode_buffer (drv->bigmfmbuf, drv->cyl, drv->num_secs, drv->ddhd, drv->filetype, &drvsec, 0)) + if (decode_buffer (drv->bigmfmbuf, drv->cyl, drv->num_secs, drv->ddhd, drv->filetype, &drvsec, sectable, 0)) return 2; if (!drvsec) return 2; @@ -1587,6 +1590,7 @@ static void drive_write_data (drive * drv) static void drive_eject (drive * drv) { + gui_disk_image_change (drv - floppy, NULL); drive_image_free (drv); drv->dskchange = 1; drv->ddhd = 1; @@ -2068,7 +2072,7 @@ static void disk_doupdate_write (drive * drv, int floppybits) floppy[dr].mfmpos %= drv->tracklen; } } - if ((dmacon & 0x210) == 0x210 && dskdmaen == 3 && dsklength > 0) { + if ((dmacon & 0x210) == 0x210 && dskdmaen == 3 && dsklength > 0 && (!(adkcon &0x400) || dma_enable)) { bitoffset++; bitoffset &= 15; if (!bitoffset) { @@ -2078,6 +2082,7 @@ static void disk_doupdate_write (drive * drv, int floppybits) if (drives[dr]) { drv2->bigmfmbuf[drv2->mfmpos >> 4] = w; drv2->bigmfmbuf[(drv2->mfmpos >> 4) + 1] = 0x5555; + drv2->writtento = 1; } } dskpt += 2; @@ -2086,6 +2091,7 @@ static void disk_doupdate_write (drive * drv, int floppybits) disk_dmafinished (); for (dr = 0; dr < MAX_FLOPPY_DRIVES ; dr++) { drive *drv2 = &floppy[dr]; + drv2->writtento = 0; if (drives[dr]) drive_write_data (drv2); } @@ -2130,7 +2136,7 @@ static void disk_doupdate_predict (drive * drv, int startcycle) else tword |= getonebit (drv->bigmfmbuf, mfmpos); } - if ((tword & 0xffff) == dsksync) + if ((tword & 0xffff) == dsksync && dsksync != 0) diskevent_flag |= DISK_WORDSYNC; } mfmpos++; @@ -2203,7 +2209,7 @@ static void disk_doupdate_read (drive * drv, int floppybits) else word |= getonebit (drv->bigmfmbuf, drv->mfmpos); } - //write_log ("%08.8X bo=%d mfmpos=%d dma=%d\n", (word & 0xffffff), bitoffset, drv->mfmpos,dma_enable); + //write_log ("%08X bo=%d so=%d mfmpos=%d dma=%d\n", (word & 0xffffff), bitoffset, syncoffset, drv->mfmpos,dma_enable); drv->mfmpos++; drv->mfmpos %= drv->tracklen; if (drv->mfmpos == drv->indexoffset) { @@ -2280,7 +2286,6 @@ static void DISK_start (void) } drv->floppybitcounter = 0; } - dma_enable = (adkcon & 0x400) ? 0 : 1; } static int linecounter; @@ -2330,7 +2335,8 @@ void DISK_update (int tohpos) drv->floppybitcounter %= drv->trackspeed; continue; } - drive_fill_bigbuf (drv, 0); + if (drv->diskfile) + drive_fill_bigbuf (drv, 0); drv->mfmpos %= drv->tracklen; } didread = 0; @@ -2366,10 +2372,21 @@ void DSKLEN (uae_u16 v, int hpos) if ((v & 0x8000) && (dsklen & 0x8000)) { dskdmaen = 2; DISK_start (); + if (!(v & 0x4000)) + dma_enable = (adkcon & 0x400) ? 0 : 1; } if (!(v & 0x8000)) { if (dskdmaen) { - /* Megalomania and Knightmare does this */ + /* Megalomania and Knightmare does this */ + if (dskdmaen == 3) { + // did program write something that needs to be stored to file? + for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { + drive *drv2 = &floppy[dr]; + if (!drv2->writtento) + continue; + drive_write_data (drv2); + } + } dskdmaen = 0; } } @@ -2396,6 +2413,7 @@ void DSKLEN (uae_u16 v, int hpos) motormask = 0; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; + drv->writtento = 0; if (drv->motoroff) continue; motormask |= 1 << dr; @@ -2566,6 +2584,7 @@ int DISK_examine_image (struct uae_prefs *p, int num, uae_u32 *crc32) drive *drv = &floppy[num]; uae_u32 dos, crc, crc2; int wasdelayed = drv->dskchange_time; + int sectable[MAX_SECTORS]; ret = 0; drv->cyl = 0; @@ -2576,7 +2595,8 @@ int DISK_examine_image (struct uae_prefs *p, int num, uae_u32 *crc32) if (!drv->diskfile) return 1; *crc32 = zfile_crc32 (drv->diskfile); - if (decode_buffer (drv->bigmfmbuf, drv->cyl, 11, drv->ddhd, drv->filetype, &drvsec, 1)) { + decode_buffer (drv->bigmfmbuf, drv->cyl, 11, drv->ddhd, drv->filetype, &drvsec, sectable, 1); + if (sectable[0] == 0 || sectable[1] == 0) { ret = 2; goto end; } diff --git a/src/drawing.cpp b/src/drawing.cpp index e6f161f1..95f2c5f9 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -43,12 +43,14 @@ #include "picasso96.h" #include "drawing.h" #ifdef JIT -#include "compemu.h" +#include "jit/compemu.h" #endif #include "savestate.h" +#include "statusline.h" #include #include +extern int sprite_buffer_res; int lores_shift; @@ -98,7 +100,8 @@ struct vidbuf_description gfxvidinfo; /* OCS/ECS color lookup table. */ xcolnr xcolors[4096]; -static uae_u8 spritepixels[MAX_PIXELS_PER_LINE * 2]; /* used when sprite resolution > lores */ +static uae_u8 spritepixels[MAX_PIXELS_PER_LINE * 5]; /* used when sprite resolution > lores */ +static int sprite_aga_first_x, sprite_aga_last_x; #ifdef AGA /* AGA mode color lookup tables */ @@ -169,8 +172,9 @@ static int extra_y_adjust; /* These are generated by the drawing code from the line_decisions array for each line that needs to be drawn. These are basically extracted out of bit fields in the hardware registers. */ -static int bplehb, bplham, bpldualpf, bpldualpfpri, bpldualpf2of, bplplanecnt, bplres; -static int plf1pri, plf2pri; +static int bplehb, bplham, bpldualpf, bpldualpfpri, bpldualpf2of, bplplanecnt; +static int bplres; +static int plf1pri, plf2pri, bplxor; static uae_u32 plf_sprite_mask; static int sbasecol[2] = { 16, 16 }; @@ -187,16 +191,16 @@ int idletime_frames = 0; unsigned long idletime_time = 0; int idletime_percent = 0; #define IDLETIME_FRAMES 25 -unsigned long time_per_frame = 20000; // Default for PAL (50 Hz): 20000 ns +unsigned long time_per_frame = 20000; // Default for PAL (50 Hz): 20000 microsecs -void adjust_idletime(unsigned long ns_waited) +void adjust_idletime(unsigned long ms_waited) { idletime_frames++; - idletime_time += ns_waited; + idletime_time += ms_waited; if(idletime_frames >= IDLETIME_FRAMES) { - unsigned long ns_per_frames = time_per_frame * idletime_frames * (1 + currprefs.gfx_framerate); - idletime_percent = idletime_time * 100 / ns_per_frames; + unsigned long ms_per_frames = time_per_frame * idletime_frames * (1 + currprefs.gfx_framerate); + idletime_percent = idletime_time * 100 / ms_per_frames; if(idletime_percent < 0) idletime_percent = 0; else if(idletime_percent > 100) @@ -392,8 +396,20 @@ static void pfield_init_linetoscr (void) if (playfield_end > visible_right_border) playfield_end = visible_right_border; - /* Now, compute some offsets. */ + if (sprite_aga_first_x < sprite_aga_last_x) { + uae_u8 *p = spritepixels + sprite_aga_first_x; + int len = sprite_aga_last_x - sprite_aga_first_x + 1; + int i; + /* clear previous sprite data storage line */ + for (i = 0; i < (1 << (res_shift < 0 ? 0 : res_shift)); i++) { + memset (p, 0, len); + p += MAX_PIXELS_PER_LINE; + } + sprite_aga_last_x = 0; + sprite_aga_first_x = MAX_PIXELS_PER_LINE; + } + /* Now, compute some offsets. */ res_shift = lores_shift - bplres; ddf_left -= DISPLAY_LEFT_SHIFT; ddf_left <<= bplres; @@ -464,7 +480,7 @@ static void init_ham_decoding (void) ham_decode_pixel = src_pixel; ham_lastcolor = color_reg_get (&colors_for_drawing, 0); - if (! bplham || (bplplanecnt != 6 && ((currprefs.chipset_mask & CSMASK_AGA) == 0 || bplplanecnt != 8))) { + if (!bplham) { if (unpainted_amiga > 0) { int pv = pixdata.apixels[ham_decode_pixel + unpainted_amiga - 1]; if (currprefs.chipset_mask & CSMASK_AGA) @@ -473,20 +489,22 @@ static void init_ham_decoding (void) ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; } } else if (currprefs.chipset_mask & CSMASK_AGA) { - if (bplplanecnt == 8) { /* AGA mode HAM8 */ + if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++]; - switch (pv & 0x3) { + switch (pv & 0x3) + { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break; } } - } else if (bplplanecnt == 6) { /* AGA mode HAM6 */ + } else { /* AGA mode HAM6 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++]; - switch (pv & 0x30) { + switch (pv & 0x30) + { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; break; case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break; case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break; @@ -495,15 +513,15 @@ static void init_ham_decoding (void) } } } else { - if (bplplanecnt == 6) { /* OCS/ECS mode HAM6 */ - while (unpainted_amiga-- > 0) { - int pv = pixdata.apixels[ham_decode_pixel++]; - switch (pv & 0x30) { - case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; - case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; - case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; - case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; - } + /* OCS/ECS mode HAM6 */ + while (unpainted_amiga-- > 0) { + int pv = pixdata.apixels[ham_decode_pixel++]; + switch (pv & 0x30) + { + case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; + case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; + case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; + case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } } } @@ -513,7 +531,7 @@ static void decode_ham (int pix, int stoppos) { int todraw_amiga = res_shift_from_window (stoppos - pix); - if (! bplham || (bplplanecnt != 6 && ((currprefs.chipset_mask & CSMASK_AGA) == 0 || bplplanecnt != 8))) { + if (!bplham) { while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; if (currprefs.chipset_mask & CSMASK_AGA) @@ -524,10 +542,11 @@ static void decode_ham (int pix, int stoppos) ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } else if (currprefs.chipset_mask & CSMASK_AGA) { - if (bplplanecnt == 8) { /* AGA mode HAM8 */ + if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; - switch (pv & 0x3) { + switch (pv & 0x3) + { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; @@ -535,10 +554,11 @@ static void decode_ham (int pix, int stoppos) } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } - } else if (bplplanecnt == 6) { /* AGA mode HAM6 */ + } else { /* AGA mode HAM6 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; - switch (pv & 0x30) { + switch (pv & 0x30) + { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; break; case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break; case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break; @@ -548,17 +568,17 @@ static void decode_ham (int pix, int stoppos) } } } else { - if (bplplanecnt == 6) { /* OCS/ECS mode HAM6 */ - while (todraw_amiga-- > 0) { - int pv = pixdata.apixels[ham_decode_pixel]; - switch (pv & 0x30) { - case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; - case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; - case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; - case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; - } - ham_linebuf[ham_decode_pixel++] = ham_lastcolor; + /* OCS/ECS mode HAM6 */ + while (todraw_amiga-- > 0) { + int pv = pixdata.apixels[ham_decode_pixel]; + switch (pv & 0x30) + { + case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; + case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; + case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; + case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } + ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } } @@ -1040,17 +1060,20 @@ STATIC_INLINE void draw_sprites_aga_1 (struct sprite_entry *e, int ham, int dual uae_u16 *buf = spixels + e->first_pixel; uae_u8 *stbuf = spixstate.bytes + e->first_pixel; int pos, window_pos; - uae_u8 xor_val = (uae_u8)(dp_for_drawing->bplcon4 >> 8); buf -= e->pos; stbuf -= e->pos; - window_pos = e->pos + ((DIW_DDF_OFFSET - DISPLAY_LEFT_SHIFT) << 1); + window_pos = e->pos + ((DIW_DDF_OFFSET - DISPLAY_LEFT_SHIFT) << sprite_buffer_res); if (skip) window_pos >>= 1; else if (doubling) window_pos <<= 1; window_pos += pixels_offset; + + if (window_pos < sprite_aga_first_x) + sprite_aga_first_x = window_pos; + for (pos = e->pos; pos < e->max; pos += 1 << skip) { int maskshift, plfmask; unsigned int v = buf[pos]; @@ -1080,12 +1103,12 @@ STATIC_INLINE void draw_sprites_aga_1 (struct sprite_entry *e, int ham, int dual spritepixels[window_pos + 1] = col; } else if (ham) { col = color_reg_get (&colors_for_drawing, col); - col ^= xor_val; + col ^= bplxor; ham_linebuf[window_pos] = col; if (doubling) ham_linebuf[window_pos + 1] = col; } else { - col ^= xor_val; + col ^= bplxor; if (doubling) pixdata.apixels_w[window_pos >> 1] = col | (col << 8); else @@ -1095,6 +1118,9 @@ STATIC_INLINE void draw_sprites_aga_1 (struct sprite_entry *e, int ham, int dual window_pos += 1 << doubling; } + + if (window_pos > sprite_aga_last_x) + sprite_aga_last_x = window_pos; } // ENTRY, ham, dualpf, doubling, skip, has_attach @@ -1147,7 +1173,7 @@ static __inline__ void decide_draw_sprites(void) { if (currprefs.chipset_mask & CSMASK_AGA) { - int diff = RES_HIRES - bplres; + int diff = sprite_buffer_res - bplres; if (diff > 0) { // doubling = 0, skip = 1 if(bpldualpf) @@ -1497,13 +1523,13 @@ static void init_aspect_maps (void) return; if (native2amiga_line_map) - free (native2amiga_line_map); + xfree (native2amiga_line_map); if (amiga2aspect_line_map) - free (amiga2aspect_line_map); + xfree (amiga2aspect_line_map); /* At least for this array the +1 is necessary. */ - amiga2aspect_line_map = (int *)malloc (sizeof (int) * (MAXVPOS + 1) * 2 + 1); - native2amiga_line_map = (int *)malloc (sizeof (int) * gfxvidinfo.height); + amiga2aspect_line_map = (int *)xmalloc (sizeof (int) * (MAXVPOS + 1) * 2 + 1); + native2amiga_line_map = (int *)xmalloc (sizeof (int) * gfxvidinfo.height); maxl = (MAXVPOS + 1); min_ypos_for_screen = minfirstline; @@ -1552,6 +1578,7 @@ static void pfield_expand_dp_bplcon (void) bpldualpf2of = (dp_for_drawing->bplcon3 >> 10) & 7; sbasecol[0] = ((dp_for_drawing->bplcon4 >> 4) & 15) << 4; sbasecol[1] = ((dp_for_drawing->bplcon4 >> 0) & 15) << 4; + bplxor = dp_for_drawing->bplcon4 >> 8; } else if (currprefs.chipset_mask & CSMASK_ECS_DENISE) bplehb = (dp_for_drawing->bplcon0 & 0xFC00) == 0x6000 && !(dp_for_drawing->bplcon2 & 0x200); else @@ -1582,7 +1609,7 @@ static void pfield_expand_dp_bplcon2(int regno, int v) case 0x106: dp_for_drawing->bplcon3 = v; break; - case 0x108: + case 0x10c: dp_for_drawing->bplcon4 = v; break; } @@ -1722,10 +1749,7 @@ static void pfield_draw_line (int lineno, int gfx_ypos) void center_image (void) { int deltaToBorder; - if(gfxvidinfo.width > 600) - deltaToBorder = (gfxvidinfo.width >> 1) - 320; - else - deltaToBorder = gfxvidinfo.width - 320; + deltaToBorder = (gfxvidinfo.width >> currprefs.gfx_resolution) - 320; visible_left_border = 73 - (deltaToBorder >> 1); visible_right_border = 393 + (deltaToBorder >> 1); @@ -1752,23 +1776,6 @@ static void init_drawing_frame (void) /* * Some code to put status information on the screen. */ -#define TD_PADX 10 -#define TD_PADY 2 -#define TD_WIDTH 32 -#define TD_LED_WIDTH 24 -#define TD_LED_HEIGHT 4 - -#define TD_RIGHT 1 -#define TD_BOTTOM 2 - -static int td_pos = (TD_RIGHT|TD_BOTTOM); - -#define TD_NUM_WIDTH 7 -#define TD_NUM_HEIGHT 7 - -#define TD_TOTAL_HEIGHT (TD_PADY * 2 + TD_NUM_HEIGHT) - -#define NUMBERS_NUM 16 static const char *numbers = { /* ugly 0123456789CHD%+- */ "+++++++--++++-+++++++++++++++++-++++++++++++++++++++++++++++++++++++++++++++-++++++-++++----++---+--------------" @@ -1791,13 +1798,13 @@ static const char *letters = { /* ugly */ }; -STATIC_INLINE void putpixel (int x, xcolnr c8) +STATIC_INLINE void putpixel (uae_u8 *buf, int x, xcolnr c8) { - uae_u16 *p = (uae_u16 *)xlinebuffer + x; + uae_u16 *p = (uae_u16 *)buf + x; *p = (uae_u16)c8; } -static void write_tdnumber (int x, int y, int num) +static void write_tdnumber (uae_u8 *buf, int x, int y, int num) { int j; const char *numptr; @@ -1805,14 +1812,14 @@ static void write_tdnumber (int x, int y, int num) numptr = numbers + num * TD_NUM_WIDTH + NUMBERS_NUM * TD_NUM_WIDTH * y; for (j = 0; j < TD_NUM_WIDTH; j++) { if (*numptr == 'x') - putpixel (x + j, xcolors[0xfff]); + putpixel (buf, x + j, xcolors[0xfff]); else if (*numptr == '+') - putpixel (x + j, xcolors[0x000]); + putpixel (buf, x + j, xcolors[0x000]); numptr++; } } -static void write_tdletter (int x, int y, char ch) +static void write_tdletter (uae_u8 *buf, int x, int y, char ch) { int j; uae_u8 *numptr; @@ -1820,7 +1827,7 @@ static void write_tdletter (int x, int y, char ch) numptr = (uae_u8 *)(letters + (ch-65) * TD_NUM_WIDTH + 26 * TD_NUM_WIDTH * y); for (j = 0; j < TD_NUM_WIDTH; j++) { - putpixel (x + j, *numptr == 'x' ? xcolors[0xfff] : xcolors[0x000]); + putpixel (buf, x + j, *numptr == 'x' ? xcolors[0xfff] : xcolors[0x000]); numptr++; } } @@ -1852,18 +1859,19 @@ static void draw_status_line (int line) y = line - (gfxvidinfo.height - TD_TOTAL_HEIGHT); xlinebuffer = row_map[line]; } + buf = xlinebuffer; x+=100 - (TD_WIDTH*(currprefs.nr_floppies-1)) - TD_WIDTH; #ifdef PICASSO96 if(picasso_on) #ifdef RASPBERRY - memset (xlinebuffer + (x - 4) * 2, 0, (picasso_vidinfo.width - x + 4) * 2); + memset (buf + (x - 4) * 2, 0, (picasso_vidinfo.width - x + 4) * 2); #else - memset (xlinebuffer + (x - 4) * 2, 0, (prSDLScreen->w - x + 4) * 2); + memset (buf + (x - 4) * 2, 0, (prSDLScreen->w - x + 4) * 2); #endif else #endif - memset (xlinebuffer + (x - 4) * gfxvidinfo.pixbytes, 0, (gfxvidinfo.width - x + 4) * gfxvidinfo.pixbytes); + memset (buf + (x - 4) * gfxvidinfo.pixbytes, 0, (gfxvidinfo.width - x + 4) * gfxvidinfo.pixbytes); for (led = -2; led < (currprefs.nr_floppies+1); led++) { int track; @@ -1911,7 +1919,7 @@ static void draw_status_line (int line) c = xcolors[on ? on_rgb : off_rgb]; for (j = 0; j < TD_LED_WIDTH; j++) - putpixel (x + j, c); + putpixel (buf, x + j, c); if (y >= TD_PADY && y - TD_PADY < TD_NUM_HEIGHT) { if (track >= 0) { @@ -1919,16 +1927,16 @@ static void draw_status_line (int line) int offs = (TD_LED_WIDTH - tn * TD_NUM_WIDTH) / 2; if(track >= 100) { - write_tdnumber (x + offs, y - TD_PADY, track / 100); + write_tdnumber (buf, x + offs, y - TD_PADY, track / 100); offs += TD_NUM_WIDTH; } - write_tdnumber (x + offs, y - TD_PADY, (track / 10) % 10); - write_tdnumber (x + offs + TD_NUM_WIDTH, y - TD_PADY, track % 10); + write_tdnumber (buf, x + offs, y - TD_PADY, (track / 10) % 10); + write_tdnumber (buf, x + offs + TD_NUM_WIDTH, y - TD_PADY, track % 10); } else if (nr_units() > 0) { int offs = (TD_LED_WIDTH - 2 * TD_NUM_WIDTH) / 2; - write_tdletter(x + offs, y - TD_PADY, 'H'); - write_tdletter(x + offs + TD_NUM_WIDTH, y - TD_PADY, 'D'); + write_tdletter(buf, x + offs, y - TD_PADY, 'H'); + write_tdletter(buf, x + offs + TD_NUM_WIDTH, y - TD_PADY, 'D'); } } x += TD_WIDTH; @@ -2003,7 +2011,7 @@ STATIC_INLINE void check_picasso (void) { #ifdef PICASSO96 if (picasso_on && picasso_redraw_necessary) - picasso_refresh (1); + picasso_refresh (); picasso_redraw_necessary = 0; if (picasso_requested_on == picasso_on) @@ -2045,17 +2053,23 @@ void vsync_handle_redraw (int long_frame, int lof_changed) finish_drawing_frame (); } #ifdef PICASSO96 - else if(picasso_on && currprefs.leds_on_screen) + else if(picasso_on) { - int i; - for (i = 0; i < TD_TOTAL_HEIGHT; i++) { + if(currprefs.leds_on_screen) + { + int i; + gfx_lock_picasso(); + for (i = 0; i < TD_TOTAL_HEIGHT; i++) { #ifdef RASPBERRY - int line = picasso_vidinfo.height - TD_TOTAL_HEIGHT + i; + int line = picasso_vidinfo.height - TD_TOTAL_HEIGHT + i; #else - int line = prSDLScreen->h - TD_TOTAL_HEIGHT + i; + int line = prSDLScreen->h - TD_TOTAL_HEIGHT + i; #endif - draw_status_line (line); - } + draw_status_line (line); + } + gfx_unlock_picasso(); + } + flush_screen(); } #endif /* At this point, we have finished both the hardware and the @@ -2156,6 +2170,12 @@ void reset_drawing (void) init_drawing_frame (); notice_screen_contents_lost (); + + sprite_buffer_res = (currprefs.chipset_mask & CSMASK_AGA) ? RES_SUPERHIRES : RES_LORES; + if (sprite_buffer_res > currprefs.gfx_resolution) + sprite_buffer_res = currprefs.gfx_resolution; + if (sprite_buffer_res > RES_SUPERHIRES) + sprite_buffer_res = RES_SUPERHIRES; } void drawing_init (void) diff --git a/src/ersatz.cpp b/src/ersatz.cpp index 91f31fce..579c88bb 100644 --- a/src/ersatz.cpp +++ b/src/ersatz.cpp @@ -35,6 +35,17 @@ static int already_failed = 0; void init_ersatz_rom (uae_u8 *data) { + uae_u8 *end = data + 262144 - 16; + /* cpu emulation uses these now */ + end[1] = 0x18; + end[3] = 0x19; + end[5] = 0x1a; + end[7] = 0x1b; + end[9] = 0x1c; + end[11] = 0x1d; + end[13] = 0x1e; + end[15] = 0x1f; + *data++ = 0x00; *data++ = 0x08; /* initial SP */ *data++ = 0x00; *data++ = 0x00; *data++ = 0x00; *data++ = 0xF8; /* initial PC */ @@ -68,6 +79,12 @@ void init_ersatz_rom (uae_u8 *data) *data++ = 0x4E; *data++ = 0x75; } +void ersatz_chipcopy (void) +{ + /* because CPU emulation is updated and retrieves SP and PC from chip ram */ + memcpy (chipmemory, kickmemory, 256); +} + static void ersatz_failed (void) { if (already_failed) diff --git a/src/expansion.cpp b/src/expansion.cpp index f3e1b0e2..2b5880dd 100644 --- a/src/expansion.cpp +++ b/src/expansion.cpp @@ -130,7 +130,7 @@ int uae_boot_rom, uae_boot_rom_size; /* size = code size only */ static void (*card_init[MAX_EXPANSION_BOARDS]) (void); static void (*card_map[MAX_EXPANSION_BOARDS]) (void); -static int ecard; +static int ecard, cardno; static uae_u16 uae_id; @@ -161,30 +161,6 @@ static uae_u8 expamem[65536]; static uae_u8 expamem_lo; static uae_u16 expamem_hi; -/* - * Dummy entries to show that there's no card in a slot - */ - -static void expamem_map_clear (void) -{ - write_log ("expamem_map_clear() got called. Shouldn't happen.\n"); -} - -static void expamem_init_clear (void) -{ - memset (expamem, 0xff, sizeof expamem); -} -static void expamem_init_clear2 (void) -{ - expamem_init_clear(); - ecard = MAX_EXPANSION_BOARDS - 1; -} - -static void expamem_init_last (void) -{ - expamem_init_clear(); -} - static uae_u32 REGPARAM3 expamem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 expamem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 expamem_bget (uaecptr) REGPARAM; @@ -199,6 +175,32 @@ addrbank expamem_bank = { dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; +static void expamem_map_clear (void) +{ + write_log ("expamem_map_clear() got called. Shouldn't happen.\n"); +} + +static void expamem_init_clear (void) +{ + memset (expamem, 0xff, sizeof expamem); +} +/* autoconfig area is "non-existing" after last device */ +static void expamem_init_clear_zero (void) +{ + map_banks (&dummy_bank, 0xe8, 1, 0); +} + +static void expamem_init_clear2 (void) +{ + expamem_init_clear_zero(); + ecard = cardno; +} + +static void expamem_init_last (void) +{ + expamem_init_clear2(); +} + static uae_u32 REGPARAM2 expamem_lget (uaecptr addr) { write_log ("warning: READ.L from address $%lx PC=%x\n", addr, M68K_GETPC); @@ -207,8 +209,9 @@ static uae_u32 REGPARAM2 expamem_lget (uaecptr addr) static uae_u32 REGPARAM2 expamem_wget (uaecptr addr) { - write_log ("warning: READ.W from address $%lx PC=%x\n", addr, M68K_GETPC); - return (expamem_bget (addr) << 8) | expamem_bget (addr + 1); + uae_u32 v = (expamem_bget (addr) << 8) | expamem_bget (addr + 1); + write_log ("warning: READ.W from address $%lx=%04x PC=%x\n", addr, v & 0xffff, M68K_GETPC); + return v; } static uae_u32 REGPARAM2 expamem_bget (uaecptr addr) @@ -219,7 +222,7 @@ static uae_u32 REGPARAM2 expamem_bget (uaecptr addr) #endif addr &= 0xFFFF; b = expamem[addr]; - //write_log("%08x=%02.2X\n", addr, b); + //write_log("%08x=%02X\n", addr, b); return b; } @@ -257,31 +260,36 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) special_mem |= S_WRITE; #endif value &= 0xffff; + if (ecard >= cardno) + return; if (expamem_type() != zorroIII) write_log ("warning: WRITE.W to address $%lx : value $%x\n", addr, value); else { switch (addr & 0xff) { case 0x44: if (expamem_type() == zorroIII) { + uae_u32 p1, p2; // +Bernd Roesch & Toni Wilen + p1 = get_word (regs.regs[11] + 0x20); if (expamem[0] & add_memory) { // Z3 RAM expansion - value = z3fastmem_start >> 16; - } else -#ifdef PICASSO96 - { + p2 = z3fastmem_start >> 16; + } else { // Z3 P96 RAM - value = p96ram_start >> 16; - } +#ifdef PICASSO96 + p2 = p96ram_start >> 16; #endif - put_word (regs.regs[11] + 0x20, value); - put_word (regs.regs[11] + 0x28, value); + } + put_word (regs.regs[11] + 0x20, p2); + put_word (regs.regs[11] + 0x28, p2); // -Bernd Roesch - expamem_hi = value; + expamem_hi = p2; (*card_map[ecard]) (); - write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); - ++ecard; - if (ecard < MAX_EXPANSION_BOARDS) + ecard++; + if (p1 != p2) + write_log (" Card %d remapped %04x0000 -> %04x0000\n", ecard, p1, p2); + write_log (" Card %d (Zorro%s) done.\n", ecard, expamem_type() == 0xc0 ? "II" : "III"); + if (ecard < cardno) (*card_init[ecard]) (); else expamem_init_clear2 (); @@ -296,6 +304,8 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) #ifdef JIT special_mem |= S_WRITE; #endif + if (ecard >= cardno) + return; value &= 0xff; switch (addr & 0xff) { case 0x30: @@ -311,7 +321,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) (*card_map[ecard]) (); write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; - if (ecard < MAX_EXPANSION_BOARDS) + if (ecard < cardno) (*card_init[ecard]) (); else expamem_init_clear2 (); @@ -327,7 +337,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) case 0x4c: write_log (" Card %d (Zorro %s) had no success.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; - if (ecard < MAX_EXPANSION_BOARDS) + if (ecard < cardno) (*card_init[ecard]) (); else expamem_init_clear2 (); @@ -517,19 +527,8 @@ static addrbank filesys_bank = { * Z3fastmem Memory */ - static uae_u32 z3fastmem_mask; - -static uae_u32 REGPARAM3 z3fastmem_lget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 z3fastmem_wget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 z3fastmem_bget (uaecptr) REGPARAM; -static void REGPARAM3 z3fastmem_lput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 z3fastmem_wput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 z3fastmem_bput (uaecptr, uae_u32) REGPARAM; -static int REGPARAM3 z3fastmem_check (uaecptr addr, uae_u32 size) REGPARAM; -static uae_u8 *REGPARAM3 z3fastmem_xlate (uaecptr addr) REGPARAM; - -uaecptr z3fastmem_start; /* Determined by the OS */ +uaecptr z3fastmem_start; static uae_u8 *z3fastmem; static uae_u32 REGPARAM2 z3fastmem_lget (uaecptr addr) @@ -729,40 +728,45 @@ static void expamem_init_filesys (void) * Zorro III expansion memory */ -static void expamem_map_z3fastmem (void) +static void expamem_map_z3fastmem_2 (addrbank *bank, int *startp, uae_u32 size, uae_u32 allocated) { int z3fs = ((expamem_hi | (expamem_lo >> 4)) << 16); + int start = *startp; - if (z3fastmem_start != z3fs) { - write_log("WARNING: Z3FAST mapping changed from $%lx to $%lx\n", z3fastmem_start, z3fs); - map_banks(&dummy_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, - allocated_z3fastmem); - z3fastmem_start = z3fs; - map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, - allocated_z3fastmem); + if (start != z3fs) { + write_log("WARNING: Z3FAST mapping changed from $%08x to $%08x\n", start, z3fs); + map_banks(&dummy_bank, start >> 16, size >> 16, + allocated); + *startp = z3fs; + map_banks (bank, start >> 16, size >> 16, + allocated); } - - write_log ("Fastmem (32bit): mapped @$%lx: %d MB Zorro III fast memory \n", - z3fastmem_start, allocated_z3fastmem / 0x100000); + write_log ("Fastmem (32bit): mapped @$%08x: %d MB Zorro III fast memory \n", + start, allocated / 0x100000); } -static void expamem_init_z3fastmem (void) +static void expamem_map_z3fastmem (void) { - int code = (allocated_z3fastmem == 0x100000 ? Z2_MEM_1MB - : allocated_z3fastmem == 0x200000 ? Z2_MEM_2MB - : allocated_z3fastmem == 0x400000 ? Z2_MEM_4MB - : allocated_z3fastmem == 0x800000 ? Z2_MEM_8MB - : allocated_z3fastmem == 0x1000000 ? Z2_MEM_16MB - : allocated_z3fastmem == 0x2000000 ? Z2_MEM_32MB - : allocated_z3fastmem == 0x4000000 ? Z2_MEM_64MB - : allocated_z3fastmem == 0x8000000 ? Z2_MEM_128MB - : allocated_z3fastmem == 0x10000000 ? Z2_MEM_256MB - : allocated_z3fastmem == 0x20000000 ? Z2_MEM_512MB + expamem_map_z3fastmem_2 (&z3fastmem_bank, (int *)&z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem); +} + +static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 size, uae_u32 allocated) +{ + int code = (allocated == 0x100000 ? Z2_MEM_1MB + : allocated == 0x200000 ? Z2_MEM_2MB + : allocated == 0x400000 ? Z2_MEM_4MB + : allocated == 0x800000 ? Z2_MEM_8MB + : allocated == 0x1000000 ? Z2_MEM_16MB + : allocated == 0x2000000 ? Z2_MEM_32MB + : allocated == 0x4000000 ? Z2_MEM_64MB + : allocated == 0x8000000 ? Z2_MEM_128MB + : allocated == 0x10000000 ? Z2_MEM_256MB + : allocated == 0x20000000 ? Z2_MEM_512MB : Z2_MEM_1GB); expamem_init_clear(); expamem_write (0x00, add_memory | zorroIII | code); - expamem_write (0x08, care_addr | no_shutup | force_z3 | (allocated_z3fastmem > 0x800000 ? ext_size : Z3_MEM_AUTO)); + expamem_write (0x08, care_addr | no_shutup | force_z3 | (allocated > 0x800000 ? ext_size : Z3_MEM_AUTO)); expamem_write (0x04, 3); @@ -779,8 +783,11 @@ static void expamem_init_z3fastmem (void) expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ - map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, - allocated_z3fastmem); + map_banks (bank, start >> 16, size >> 16, allocated); +} +static void expamem_init_z3fastmem (void) +{ + expamem_init_z3fastmem_2 (&z3fastmem_bank, z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem); } #ifdef PICASSO96 @@ -793,7 +800,7 @@ uaecptr p96ram_start; static void expamem_map_gfxcard (void) { gfxmem_start = (expamem_hi | (expamem_lo >> 4)) << 16; - map_banks (&gfxmem_bank, gfxmem_start >> 16, allocated_gfxmem >> 16, allocated_gfxmem); + map_banks (&gfxmem_bankx, gfxmem_start >> 16, allocated_gfxmem >> 16, allocated_gfxmem); write_log ("UAEGFX-card: mapped @$%lx, %d MB RTG RAM\n", gfxmem_start, allocated_gfxmem / 0x100000); } @@ -909,7 +916,6 @@ static void allocate_expamem (void) z3fastmem_bank.baseaddr = z3fastmem; fastmem_bank.baseaddr = fastmemory; #ifdef PICASSO96 - gfxmem_bank.baseaddr = NULL; gfxmem_bankx.baseaddr = gfxmemory; #endif @@ -928,7 +934,7 @@ static void allocate_expamem (void) #ifdef PICASSO96 if (allocated_gfxmem > 0 && gfxmem_start > 0) { restore_ram (p96_filepos, gfxmemory); - map_banks (&gfxmem_bank, gfxmem_start >> 16, currprefs.gfxmem_size >> 16, + map_banks (&gfxmem_bankx, gfxmem_start >> 16, currprefs.gfxmem_size >> 16, allocated_gfxmem); } #endif @@ -938,20 +944,18 @@ static void allocate_expamem (void) static uaecptr check_boot_rom (void) { - int i; - uaecptr b = 0xf00000; + uaecptr b = RTAREA_DEFAULT; addrbank *ab; - ab = &get_mem_bank (0xf00000); + ab = &get_mem_bank (RTAREA_DEFAULT); if (ab) { - if (valid_address (0xf00000, 65536)) - b = 0xe70000; + if (valid_address (RTAREA_DEFAULT, 65536)) + b = RTAREA_BACKUP; } - for (i = 0; i < currprefs.mountitems; i++) { - struct uaedev_config_info *uci = &currprefs.mountconfig[i]; - if (uci->controller == 0) + if (nr_directory_units (NULL)) + return b; + if (nr_directory_units (&currprefs)) return b; - } if (currprefs.gfxmem_size) return b; if (currprefs.chipmem_size > 2 * 1024 * 1024) @@ -975,7 +979,7 @@ void expamem_next(void) expamem_init_clear(); map_banks (&expamem_bank, 0xE8, 1, 0); ++ecard; - if (ecard < MAX_EXPANSION_BOARDS) + if (ecard < cardno) (*card_init[ecard]) (); else expamem_init_clear2 (); @@ -989,8 +993,9 @@ void p96memstart(void) void expamem_reset (void) { int do_mount = 1; - int cardno = 0; + ecard = 0; + cardno = 0; uae_id = hackers_id; @@ -1013,9 +1018,12 @@ void expamem_reset (void) card_init[cardno] = expamem_init_fastcard; card_map[cardno++] = expamem_map_fastcard; } + + z3fastmem_start = currprefs.z3fastmem_start; if (z3fastmem != NULL) { card_init[cardno] = expamem_init_z3fastmem; card_map[cardno++] = expamem_map_z3fastmem; + map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, allocated_z3fastmem); } #ifdef PICASSO96 if (gfxmemory != NULL) { @@ -1033,16 +1041,11 @@ void expamem_reset (void) card_init[cardno] = expamem_init_last; card_map[cardno++] = expamem_map_clear; } - while (cardno < MAX_EXPANSION_BOARDS) { - card_init[cardno] = expamem_init_clear; - card_map[cardno++] = expamem_map_clear; - } - z3fastmem_start = currprefs.z3fastmem_start; -#ifdef PICASSO96 - p96memstart(); -#endif - (*card_init[0]) (); + if (cardno == 0) + expamem_init_clear_zero (); + else + (*card_init[0]) (); } void expansion_init (void) @@ -1120,7 +1123,7 @@ uae_u8 *save_fram (int *len) return fastmemory; } -uae_u8 *save_zram (int *len) +uae_u8 *save_zram (int *len, int num) { *len = allocated_z3fastmem; return z3fastmem; @@ -1138,7 +1141,7 @@ void restore_fram (uae_u32 len, size_t filepos) changed_prefs.fastmem_size = len; } -void restore_zram (uae_u32 len, size_t filepos) +void restore_zram (uae_u32 len, size_t filepos, int num) { z3_filepos = filepos; changed_prefs.z3fastmem_size = len; @@ -1170,7 +1173,9 @@ uae_u8 *restore_expansion (uae_u8 *src) fastmem_start = restore_u32 (); z3fastmem_start = restore_u32 (); gfxmem_start = restore_u32 (); - restore_u32(); + rtarea_base = restore_u32 (); + if (rtarea_base != 0 && rtarea_base != RTAREA_DEFAULT && rtarea_base != RTAREA_BACKUP) + rtarea_base = 0; return src; } diff --git a/src/filesys.asm b/src/filesys.asm index 270a1bee..ab514382 100644 --- a/src/filesys.asm +++ b/src/filesys.asm @@ -1366,7 +1366,7 @@ createio: jsr AllocMem(a6) move.l d0,a0 move.b #10,8(a0) ;NT_MESSAGE - move.l d2,18(a0) + move.w d2,18(a0) move.l a2,14(a0) .f tst.l d0 movem.l (sp)+,d2/a2/a6 @@ -1586,7 +1586,7 @@ mousehackint: move.l 12(a1),a1 move.l 4.w,a6 jsr -$0144(a6) ; Signal -.l2 lea $dff000,a0 +.l2 lea $dff000,a0 moveq #0,d0 rts diff --git a/src/filesys.cpp b/src/filesys.cpp index ca7aa0be..2d629d45 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -41,6 +41,7 @@ #include "zfile.h" #include "gui.h" #include "savestate.h" +#include "uaeresource.h" #define TRACING_ENABLED 0 #if TRACING_ENABLED @@ -107,6 +108,23 @@ int nr_units (void) return cnt; } +int nr_directory_units (struct uae_prefs *p) +{ + int i, cnt = 0; + if (p) { + for (i = 0; i < p->mountitems; i++) { + if (p->mountconfig[i].controller == 0) + cnt++; + } + } else { + for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { + if (mountinfo.ui[i].open && mountinfo.ui[i].controller == 0) + cnt++; + } + } + return cnt; +} + int is_hardfile (int unit_no) { if (mountinfo.ui[unit_no].volname || mountinfo.ui[unit_no].wasisempty) @@ -339,14 +357,7 @@ static int set_filesys_unit_1 (int nr, } ui = &mountinfo.ui[nr]; - ui->open = 0; - ui->devname = 0; - ui->volname = 0; - ui->rootdir = 0; - ui->unit_pipe = 0; - ui->back_pipe = 0; - ui->hf.fd = 0; - ui->bootpri = 0; + memset (ui, 0, sizeof (UnitInfo)); if (volname != NULL) { int flags = 0; @@ -460,7 +471,8 @@ int kill_filesys_unitconfig (struct uae_prefs *p, int nr) if (nr < 0) return 0; uci = &p->mountconfig[nr]; - if (uci->configoffset >= 0) + hardfile_do_disk_change (uci, 0); + if (uci->configoffset >= 0 && uci->controller == 0) filesys_media_change (uci->rootdir, 0, uci); while (nr < MOUNT_CONFIG_SIZE) { memmove (&p->mountconfig[nr], &p->mountconfig[nr + 1], sizeof (struct uaedev_config_info)); @@ -1903,7 +1915,7 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) /* write_comm_pipe_int (unit->ui.unit_pipe, -1, 1);*/ - write_log ("FS: %s (flags=%08.8X) starting..\n", unit->ui.volname, unit->volflags); + write_log ("FS: %s (flags=%08X) starting..\n", unit->ui.volname, unit->volflags); /* fill in our process in the device node */ devnode = get_long (pkt + dp_Arg3) << 2; @@ -2010,17 +2022,15 @@ static void free_key (Unit *unit, Key *k) static Key *lookup_key (Unit *unit, uae_u32 uniq) { Key *k; + unsigned int total = 0; /* It's hardly worthwhile to optimize this - most of the time there are * only one or zero keys. */ for (k = unit->keys; k; k = k->next) { + total++; if (uniq == k->uniq) return k; } - write_log ("Error: couldn't find key!\n"); - - /* There isn't much hope we will recover. Unix would kill the process, - * AmigaOS gets killed by it. */ - write_log ("Better reset that Amiga - the system is messed up.\n"); + write_log ("Error: couldn't find key %u / %u!\n", uniq, total); return 0; } @@ -3363,7 +3373,7 @@ action_read (Unit *unit, dpacket packet) if (size > filesize) size = filesize; - buf = (char *)malloc(size); + buf = (char *)xmalloc(size); if (!buf) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_NO_FREE_STORE); @@ -4159,7 +4169,6 @@ action_inhibit (Unit *unit, dpacket packet) PUT_PCK_RES1 (packet, DOS_TRUE); flush_cache(unit, 0); unit->inhibited = GET_PCK_ARG1 (packet); - write_log("ACTION_INHIBIT %d:%d\n", unit->unit, unit->inhibited); } static void @@ -4563,15 +4572,10 @@ void filesys_free_handles(void) } } -void filesys_reset (void) +static void filesys_reset2 (void) { Unit *u, *u1; - /* We get called once from customreset at the beginning of the program - * before filesys_start_threads has been called. Survive that. */ - if (savestate_state == STATE_RESTORE) - return; - filesys_free_handles(); for (u = units; u; u = u1) { u1 = u->next; @@ -4584,14 +4588,19 @@ void filesys_reset (void) initialize_mountinfo(); } -void filesys_prepare_reset (void) +void filesys_reset (void) +{ + if (savestate_state == STATE_RESTORE) + return; + filesys_reset2 (); +} + +static void filesys_prepare_reset2 (void) { UnitInfo *uip; Unit *u; int i; - if (savestate_state == STATE_RESTORE) - return; uip = mountinfo.ui; #ifdef UAE_FILESYS_THREADS for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { @@ -4622,6 +4631,13 @@ void filesys_prepare_reset (void) } } +void filesys_prepare_reset (void) +{ + if (savestate_state == STATE_RESTORE) + return; + filesys_prepare_reset2 (); +} + static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) { uaecptr resaddr = m68k_areg (&context->regs, 2) + 0x10; @@ -4656,6 +4672,7 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) * Resident structures and call InitResident() for them at the end of the * diag entry. */ + resaddr = uaeres_startup (resaddr); /* scan for Residents and return pointer to array of them */ residents = resaddr; while (tmp < residents && tmp > start) { @@ -4821,7 +4838,7 @@ static void get_new_device (int type, uaecptr parmpacket, char **devname, uaecpt if (type == FILESYS_VIRTUAL) write_log ("FS: mounted virtual unit %s (%s)\n", buffer, mountinfo.ui[unit_no].rootdir); else - write_log ("FS: mounted HDF unit %s (%04.4x-%08.8x, %s)\n", buffer, + write_log ("FS: mounted HDF unit %s (%04x-%08x, %s)\n", buffer, (uae_u32)(mountinfo.ui[unit_no].hf.size >> 32), (uae_u32)(mountinfo.ui[unit_no].hf.size), mountinfo.ui[unit_no].rootdir); @@ -5266,7 +5283,7 @@ static uae_u8 *restore_notify(UnitInfo *ui, Unit *u, uae_u8 *src) hash = notifyhash (n->fullname); n->next = u->notifyhash[hash]; u->notifyhash[hash] = n; - write_log("FS: notify %08.8X '%s' '%s'\n", n->notifyrequest, n->fullname, n->partname); + write_log ("FS: notify %08X '%s' '%s'\n", n->notifyrequest, n->fullname, n->partname); return src; } @@ -5404,7 +5421,7 @@ static uae_u8 *save_notify (UnitInfo *ui, uae_u8 *dst, Notify *n) if (strlen(s) >= strlen(ui->volname) && !memcmp(n->fullname, ui->volname, strlen(ui->volname))) s = n->fullname + strlen(ui->volname) + 1; save_string(s); - write_log("FS: notify %08.8X '%s'\n", n->notifyrequest, n->fullname); + write_log ("FS: notify %08X '%s'\n", n->notifyrequest, n->fullname); return dst; } @@ -5496,7 +5513,8 @@ uae_u8 *restore_filesys_common (uae_u8 *src) { if (restore_u32 () != 2) return src; - free_mountinfo(); + filesys_prepare_reset2 (); + filesys_reset2 (); a_uniq = restore_u64 (); key_uniq = restore_u64 (); return src; @@ -5555,8 +5573,11 @@ uae_u8 *restore_filesys (uae_u8 *src) ui = &mountinfo.ui[devno]; ui->startup = restore_u32 (); filesys_configdev = restore_u32 (); - if (type == FILESYS_HARDFILE) + if (type == FILESYS_HARDFILE) { src = restore_filesys_hardfile(ui, src); + xfree (volname); + volname = NULL; + } if (set_filesys_unit (devno, devname, volname, rootdir, readonly, ui->hf.secspertrack, ui->hf.surfaces, ui->hf.reservedblocks, ui->hf.blocksize, bootpri, 0, 1, filesysdir[0] ? filesysdir : NULL, 0, 0) < 0) { @@ -5565,6 +5586,7 @@ uae_u8 *restore_filesys (uae_u8 *src) } if (type == FILESYS_VIRTUAL) src = restore_filesys_virtual (ui, src, devno); + write_log ("'%s' restored\n", rootdir); end: xfree (rootdir); xfree (devname); diff --git a/src/filesys_bootrom.c b/src/filesys_bootrom.c index 298a46ca..e19ba0e8 100644 --- a/src/filesys_bootrom.c +++ b/src/filesys_bootrom.c @@ -398,7 +398,7 @@ db(0x67); db(0x20); db(0x24); db(0x40); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); - db(0x00); db(0x08); db(0x21); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); + db(0x00); db(0x08); db(0x31); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x70); db(0x61); db(0x00); diff --git a/src/fpp.cpp b/src/fpp.cpp index 0b0f7e7a..dfacbef8 100644 --- a/src/fpp.cpp +++ b/src/fpp.cpp @@ -146,6 +146,7 @@ static void fpu_op_illg (uae_u32 opcode, struct regstruct *regs, int pcoffset) * Line F exception with different stack frame.. */ uaecptr newpc = m68k_getpc(regs); uaecptr oldpc = newpc - pcoffset; + regs->t0 = regs->t1 = 0; MakeSR(regs); if (!regs->s) { regs->usp = m68k_areg(regs, 7); @@ -500,7 +501,7 @@ STATIC_INLINE int put_fp_value (struct regstruct *regs, fptype value, uae_u32 op #if DEBUG_FPP if (!isinrom ()) - write_log ("PUTFP: %f %04.4X %04.4X\n", value, opcode, extra); + write_log ("PUTFP: %f %04X %04X\n", value, opcode, extra); #endif if (!(extra & 0x4000)) { regs->fp[(extra >> 10) & 7] = value; @@ -1614,6 +1615,7 @@ uae_u8 *restore_fpu (uae_u8 *src) regs.fp[i] = to_exten (w1, w2, w3); } regs.fpcr = restore_u32 (); + native_set_fpucw (regs.fpcr); regs.fpsr = restore_u32 (); regs.fpiar = restore_u32 (); if (flags & 0x80000000) { diff --git a/src/gencpu.c b/src/gencpu.c index 16b93a6c..55d76382 100644 --- a/src/gencpu.c +++ b/src/gencpu.c @@ -55,7 +55,7 @@ static FILE *headerfile; static FILE *stblfile; -static int using_prefetch, using_indirect; +static int using_prefetch, using_indirect, using_mmu; static int using_exception_3; static int cpu_level; @@ -220,6 +220,9 @@ static void gen_nextilong (char *type, char *name, int norefill) } else if (using_indirect) { 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); } else { insn_n_cycles += 8; printf ("\t%s %s = get_ilong (regs, %d);\n", type, name, r); @@ -242,6 +245,9 @@ static const char *gen_nextiword (int norefill) } else if (using_indirect) { sprintf (buffer, "get_iwordi(%d)", r); insn_n_cycles += 4; + } else if (using_mmu) { + sprintf (buffer, "get_iword_mmu (regs, %d)", r); + insn_n_cycles += 4; } else { sprintf (buffer, "get_iword (regs, %d)", r); insn_n_cycles += 4; @@ -255,7 +261,6 @@ static const char *gen_nextibyte (int norefill) int r = m68k_pc_offset; m68k_pc_offset += 2; - insn_n_cycles += 4; if (using_prefetch) { if (norefill) { sprintf (buffer, "(uae_u8)regs->irc", r); @@ -266,6 +271,9 @@ static const char *gen_nextibyte (int norefill) } else if (using_indirect) { sprintf (buffer, "get_ibytei (%d)", r); insn_n_cycles += 4; + } else if (using_mmu) { + sprintf (buffer, "get_ibyte_mmu (%d)", r); + insn_n_cycles += 4; } else { sprintf (buffer, "get_ibyte (regs, %d)", r); insn_n_cycles += 4; @@ -443,7 +451,10 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; - printf ("\t%sa = get_disp_ea_020(regs, m68k_areg(regs, %s), next_iword(regs));\n", name, reg); + if (using_mmu) + printf ("\t%sa = get_disp_ea_020 (regs, m68k_areg (regs, %s), next_iword_mmu (regs));\n", name, reg); + else + printf ("\t%sa = get_disp_ea_020(regs, m68k_areg(regs, %s), next_iword(regs));\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)); } @@ -466,7 +477,10 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; printf ("\ttmppc = m68k_getpc(regs);\n"); - printf ("\t%sa = get_disp_ea_020(regs, tmppc, next_iword(regs));\n", name); + if (using_mmu) + printf ("\t%sa = get_disp_ea_020 (regs, tmppc, next_iword_mmu (regs));\n", name); + else + printf ("\t%sa = get_disp_ea_020(regs, tmppc, next_iword(regs));\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)); @@ -541,12 +555,21 @@ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int g if (getv == GENA_GETV_FETCH) { start_brace (); + if (using_mmu) { + switch (size) { + case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = uae_mmu_get_byte (%sa);\n", name, name); break; + case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = uae_mmu_get_word (%sa);\n", name, name); break; + case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = uae_mmu_get_long (%sa);\n", name, name); break; + default: abort (); + } + } else { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = get_byte (%sa);\n", name, name); break; case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = get_word (%sa);\n", name, name); break; case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = get_long (%sa);\n", name, name); break; default: abort (); } + } } /* We now might have to fix up the register for pre-dec or post-inc @@ -624,6 +647,28 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha case absl: case PC16: case PC8r: + if (using_mmu) { + switch (size) { + case sz_byte: + insn_n_cycles += 4; + printf ("\uae_mmu_put_byte (%sa,%s);\n", to, from); + break; + case sz_word: + insn_n_cycles += 4; + if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) + abort (); + printf ("\uae_mmu_put_word (%sa,%s);\n", to, from); + break; + case sz_long: + insn_n_cycles += 8; + if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) + abort (); + printf ("\uae_mmu_put_long (%sa,%s);\n", to, from); + break; + default: + abort (); + } + } else { switch (size) { case sz_byte: insn_n_cycles += 4; @@ -643,6 +688,7 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha break; default: abort (); + } } break; case imm: @@ -672,12 +718,19 @@ static void genmovemel (uae_u16 opcode) char getcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; - if (table68k[opcode].size == sz_long) { - strcpy (getcode, "get_long(srca)"); + if (using_mmu) { + if (table68k[opcode].size == sz_long) { + strcpy (getcode, "uae_mmu_get_long (srca)"); + } else { + strcpy (getcode, "(uae_s32)(uae_s16)uae_mmu_get_word (srca)"); + } } else { - strcpy (getcode, "(uae_s32)(uae_s16)get_word(srca)"); + if (table68k[opcode].size == sz_long) { + strcpy (getcode, "get_long(srca)"); + } else { + strcpy (getcode, "(uae_s32)(uae_s16)get_word(srca)"); + } } - printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); printf ("\tunsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_NO_INC, 0); @@ -695,10 +748,18 @@ static void genmovemle (uae_u16 opcode) { char putcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; - if (table68k[opcode].size == sz_long) { - strcpy (putcode, "put_long(srca"); + if (using_mmu) { + if (table68k[opcode].size == sz_long) { + strcpy (putcode, "uae_mmu_put_long (srca"); + } else { + strcpy (putcode, "uae_mmu_put_word (srca"); + } } else { - strcpy (putcode, "put_word(srca"); + if (table68k[opcode].size == sz_long) { + strcpy (putcode, "put_long(srca"); + } else { + strcpy (putcode, "put_word(srca"); + } } printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); @@ -1043,6 +1104,7 @@ static void gen_opcode (unsigned long int opcode) break; case i_ORSR: case i_EORSR: + insn_n_cycles += 12; printf ("\tMakeSR(regs);\n"); genamode (curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); if (curi->size == sz_byte) { @@ -1053,6 +1115,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tMakeFromSR(regs);\n"); break; case i_ANDSR: + insn_n_cycles += 12; printf ("\tMakeSR(regs);\n"); genamode (curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); if (curi->size == sz_byte) { @@ -1296,6 +1359,7 @@ static void gen_opcode (unsigned long int opcode) /* The next two are coded a little unconventional, but they are doing * weird things... */ case i_MVPRM: + insn_n_cycles += 4; genamode (curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); printf ("\tuaecptr memp = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0)); @@ -1308,6 +1372,7 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next (); break; case i_MVPMR: + insn_n_cycles += 4; printf ("\tuaecptr memp = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0)); genamode (curi->dmode, "dstreg", curi->size, "dst", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC, 0); if (curi->size == sz_word) { @@ -1443,6 +1508,19 @@ static void gen_opcode (unsigned long int opcode) sync_m68k_pc (); fill_prefetch_full (); break; + case i_LPSTOP: /* 68060 */ + printf ("\tuae_u16 sw = get_iword (regs, 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, 1);\n"); + m68k_pc_offset += 4; + sync_m68k_pc (); + fill_prefetch_full (); + break; case i_RTE: if (cpu_level == 0) { genamode (Aipi, "7", sz_word, "sr", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, GF_NOREFILL); @@ -1461,6 +1539,7 @@ static void gen_opcode (unsigned long int opcode) printf ("\tif ((format & 0xF000) == 0x0000) { break; }\n"); printf ("\telse if ((format & 0xF000) == 0x1000) { ; }\n"); printf ("\telse if ((format & 0xF000) == 0x2000) { m68k_areg(regs, 7) += 4; break; }\n"); + printf ("\telse if ((format & 0xF000) == 0x4000) { m68k_areg(regs, 7) += 8; break; }\n"); printf ("\telse if ((format & 0xF000) == 0x7000) { m68k_areg(regs, 7) += 52; break; }\n"); printf ("\telse if ((format & 0xF000) == 0x8000) { m68k_areg(regs, 7) += 50; break; }\n"); printf ("\telse if ((format & 0xF000) == 0x9000) { m68k_areg(regs, 7) += 12; break; }\n"); @@ -1471,7 +1550,7 @@ static void gen_opcode (unsigned long int opcode) pop_braces (old_brace_level); printf ("\tregs->sr = newsr; MakeFromSR(regs);\n"); printf ("\tif (newpc & 1)\n"); - printf ("\t\texception3 (0x%04.4X, m68k_getpc(regs), newpc);\n", opcode); + printf ("\t\texception3 (0x%04X, m68k_getpc(regs), newpc);\n", opcode); printf ("\telse\n"); printf ("\t\tm68k_setpc(regs, newpc);\n"); need_endlabel = 1; @@ -1485,7 +1564,7 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->smode, "srcreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); printf ("\tm68k_areg(regs, 7) += offs;\n"); printf ("\tif (pc & 1)\n"); - printf ("\t\texception3 (0x%04.4X, m68k_getpc(regs), pc);\n", opcode); + printf ("\t\texception3 (0x%04X, m68k_getpc(regs), pc);\n", opcode); printf ("\telse\n"); printf ("\t\tm68k_setpc(regs, pc);\n"); /* PC is set and prefetch filled. */ @@ -2485,8 +2564,18 @@ static void gen_opcode (unsigned long int opcode) genamode (curi->smode, "srcreg", curi->size, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); genflags (flag_logical, curi->size, "src", "", ""); fill_prefetch_next (); + if (1 || cpu_level >= 2 || curi->smode == Dreg) { printf ("\tsrc |= 0x80;\n"); + if (next_cpu_level < 2) + next_cpu_level = 2 - 1; genastore ("src", curi->smode, "srcreg", curi->size, "src"); + } else { + /* not exactly like this either.. */ + printf ("\tif (src >= 0x200000 || (src >= 0xc00000 && src < 0xe00000)) {\n"); + printf ("\t src |= 0x80; \n"); + genastore ("src", curi->smode, "srcreg", curi->size, "src"); + printf ("\t}\n"); + } break; case i_FPP: fpulimit(); @@ -2597,13 +2686,20 @@ static void gen_opcode (unsigned long int opcode) } break; - case i_MMUOP: + case i_PFLUSHN: + case i_PFLUSH: + case i_PFLUSHAN: + case i_PFLUSHA: + case i_PLPAR: + case i_PLPAW: + case i_PTESTR: + case i_PTESTW: genamode (curi->smode, "srcreg", curi->size, "extra", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); sync_m68k_pc (); swap_opcode (); printf ("\tmmu_op(opcode, regs, extra);\n"); break; - case i_MMUOP30A: + case i_MMUOP030: printf ("\tuaecptr pc = m68k_getpc (regs);\n"); if (curi->smode == Areg || curi->smode == Dreg) printf("\tuae_u16 extraa = 0;\n"); @@ -2613,13 +2709,6 @@ static void gen_opcode (unsigned long int opcode) swap_opcode (); printf ("\tmmu_op30(pc, opcode, regs, 1, extraa);\n"); break; - case i_MMUOP30B: - printf ("\tuaecptr pc = m68k_getpc (regs);\n"); - genamode (curi->smode, "srcreg", curi->size, "extra", GENA_GETV_NO_FETCH, GENA_MOVEM_DO_INC, 0); - sync_m68k_pc (); - swap_opcode (); - printf ("\tmmu_op30(pc, opcode, regs, 0, 0);\n"); - break; default: abort (); break; @@ -2959,10 +3048,10 @@ int main (int argc, char **argv) read_table68k (); do_merges (); - opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); + opcode_map = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_last_postfix = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_next_clev = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + counts = (unsigned long *) malloc (65536 * sizeof (unsigned long)); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of @@ -2992,6 +3081,7 @@ int main (int argc, char **argv) freopen (fname, "wb", stdout); generate_includes (stdout); } + using_mmu = 0; cpu_level = 5 - i; if (i == 11 || i == 12) { cpu_level = 0; diff --git a/src/gfxutil.cpp b/src/gfxutil.cpp index 44b8a910..b093ee97 100644 --- a/src/gfxutil.cpp +++ b/src/gfxutil.cpp @@ -13,6 +13,7 @@ #include "uae.h" #include "memory.h" #include "custom.h" +#include "rtgmodes.h" #include "keyboard.h" #include "xwin.h" #include "keybuf.h" @@ -58,6 +59,105 @@ static unsigned int doColor(int i, int bits, int shift) return (i >> shift2) << shift; } +static uae_u32 lowbits (int v, int shift, int lsize) +{ + v >>= shift; + v &= (1 << lsize) - 1; + return v; +} + +#ifdef PICASSO96 +void alloc_colors_picasso (int rw, int gw, int bw, int rs, int gs, int bs, int rgbfmt) +{ + int byte_swap = 0; + int i; + int red_bits = 0, green_bits, blue_bits; + int red_shift, green_shift, blue_shift; + + int bpp = rw + gw + bw; + + switch (rgbfmt) + { + case RGBFB_R5G6B5PC: + red_bits = 5; + green_bits = 6; + blue_bits = 5; + red_shift = 11; + green_shift = 5; + blue_shift = 0; + break; + case RGBFB_R5G5B5PC: + red_bits = green_bits = blue_bits = 5; + red_shift = 10; + green_shift = 5; + blue_shift = 0; + break; + case RGBFB_R5G6B5: + red_bits = 5; + green_bits = 6; + blue_bits = 5; + red_shift = 11; + green_shift = 5; + blue_shift = 0; + byte_swap = 1; + break; + case RGBFB_R5G5B5: + red_bits = green_bits = blue_bits = 5; + red_shift = 10; + green_shift = 5; + blue_shift = 0; + byte_swap = 1; + break; + case RGBFB_B5G6R5PC: + red_bits = 5; + green_bits = 6; + blue_bits = 5; + red_shift = 0; + green_shift = 5; + blue_shift = 11; + break; + case RGBFB_B5G5R5PC: + red_bits = 5; + green_bits = 5; + blue_bits = 5; + red_shift = 0; + green_shift = 5; + blue_shift = 10; + break; + default: + red_bits = rw; + green_bits = gw; + blue_bits = bw; + red_shift = rs; + green_shift = gs; + blue_shift = bs; + break; + } + + memset (p96_rgbx16, 0, sizeof p96_rgbx16); + + if (red_bits) { + int lrbits = 8 - red_bits; + int lgbits = 8 - green_bits; + int lbbits = 8 - blue_bits; + int lrmask = (1 << red_bits) - 1; + int lgmask = (1 << green_bits) - 1; + int lbmask = (1 << blue_bits) - 1; + for (i = 65535; i >= 0; i--) { + uae_u32 r, g, b, c; + uae_u32 j = byte_swap ? bswap_16 (i) : i; + r = (((j >> red_shift) & lrmask) << lrbits) | lowbits (j, red_shift, lrbits); + g = (((j >> green_shift) & lgmask) << lgbits) | lowbits (j, green_shift, lgbits); + b = (((j >> blue_shift) & lbmask) << lbbits) | lowbits (j, blue_shift, lbbits); + c = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs); + if (bpp <= 16) + c *= 0x00010001; + p96_rgbx16[i] = c; + } + } +} +#endif + void alloc_colors64k (int rw, int gw, int bw, int rs, int gs, int bs, int byte_swap) { int i; diff --git a/src/hardfile.cpp b/src/hardfile.cpp index 94635b4f..8556c0d8 100644 --- a/src/hardfile.cpp +++ b/src/hardfile.cpp @@ -23,43 +23,7 @@ #include "native2amiga.h" #include "gui.h" #include "uae.h" - -#define CMD_INVALID 0 -#define CMD_RESET 1 -#define CMD_READ 2 -#define CMD_WRITE 3 -#define CMD_UPDATE 4 -#define CMD_CLEAR 5 -#define CMD_STOP 6 -#define CMD_START 7 -#define CMD_FLUSH 8 -#define CMD_MOTOR 9 -#define CMD_SEEK 10 -#define CMD_FORMAT 11 -#define CMD_REMOVE 12 -#define CMD_CHANGENUM 13 -#define CMD_CHANGESTATE 14 -#define CMD_PROTSTATUS 15 -#define CMD_GETDRIVETYPE 18 -#define CMD_GETNUMTRACKS 19 -#define CMD_ADDCHANGEINT 20 -#define CMD_REMCHANGEINT 21 -#define CMD_GETGEOMETRY 22 -#define HD_SCSICMD 28 - -/* Trackdisk64 support */ -#define TD_READ64 24 -#define TD_WRITE64 25 -#define TD_SEEK64 26 -#define TD_FORMAT64 27 - -/* New Style Devices (NSD) support */ -#define DRIVE_NEWSTYLE 0x4E535459L /* 'NSTY' */ -#define NSCMD_DEVICEQUERY 0x4000 -#define NSCMD_TD_READ64 0xc000 -#define NSCMD_TD_WRITE64 0xc001 -#define NSCMD_TD_SEEK64 0xc002 -#define NSCMD_TD_FORMAT64 0xc003 +#include "execio.h" #define MAX_ASYNC_REQUESTS 50 #define ASYNC_REQUEST_NONE 0 @@ -71,7 +35,6 @@ struct hardfileprivdata { volatile int d_request_type[MAX_ASYNC_REQUESTS]; volatile uae_u32 d_request_data[MAX_ASYNC_REQUESTS]; smp_comm_pipe requests; - uae_thread_id tid; int thread_running; uae_sem_t sync_sem; uaecptr base; @@ -87,7 +50,7 @@ static uae_u32 nscmd_cmd; static uae_u64 cmd_readx (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len) { gui_hd_led (1); - write_log ("cmd_read: %p %04.4x-%08.8x (%d) %08.8x (%d)\n", + write_log ("cmd_read: %p %04x-%08x (%d) %08x (%d)\n", dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize)); fseek (hfd->fd, offset, SEEK_SET); return fread (dataptr, 1, len, hfd->fd); @@ -102,7 +65,7 @@ static uae_u64 cmd_read (struct hardfiledata *hfd, uaecptr dataptr, uae_u64 offs static uae_u64 cmd_writex (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len) { gui_hd_led (2); - write_log ("cmd_write: %p %04.4x-%08.8x %08.8x\n", dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize)); + write_log ("cmd_write: %p %04x-%08x %08x\n", dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize)); fseek (hfd->fd, offset, SEEK_SET); return fwrite (dataptr, 1, len, hfd->fd); } @@ -122,8 +85,9 @@ static int nodisk (struct hardfiledata *hfd) return 0; } -void hardfile_do_disk_change (int fsid, int insert) +void hardfile_do_disk_change (struct uaedev_config_info *uci, int insert) { + int fsid = uci->configoffset; int j; int newstate = insert ? 0 : 1; struct hardfiledata *hfd; @@ -209,7 +173,7 @@ static void abort_async (struct hardfileprivdata *hfpd, uaecptr request, int err } i = release_async_request (hfpd, request); if (i >= 0) - write_log ("asyncronous request=%08.8X aborted, error=%d\n", request, errcode); + write_log ("asyncronous request=%08X aborted, error=%d\n", request, errcode); } static void *hardfile_thread (void *devs); @@ -223,7 +187,7 @@ static int start_thread (TrapContext *context, int unit) hfpd->base = m68k_areg(&context->regs, 6); init_comm_pipe (&hfpd->requests, 100, 1); uae_sem_init (&hfpd->sync_sem, 0, 0); - uae_start_thread ("hardfile", hardfile_thread, hfpd, &hfpd->tid); + uae_start_thread ("hardfile", hardfile_thread, hfpd, NULL); uae_sem_wait (&hfpd->sync_sem); return hfpd->thread_running; } @@ -241,29 +205,35 @@ static int mangleunit (int unit) static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) { - uaecptr tmp1 = m68k_areg(&context->regs, 1); /* IOReq */ - int unit = mangleunit(m68k_dreg (&context->regs, 0)); - struct hardfileprivdata *hfpd = &hardfpd[unit]; - int err = -1; + uaecptr ioreq = m68k_areg(&context->regs, 1); /* IOReq */ + int unit = mangleunit(m68k_dreg (&context->regs, 0)); + struct hardfileprivdata *hfpd = &hardfpd[unit]; + int err = IOERR_OPENFAIL; + int size = get_word (ioreq + 0x12); + /* boot device port size == 0!? KS 1.x size = 12??? */ + if (size >= IOSTDREQ_SIZE || size == 0 || kickstart_version == 0xffff || kickstart_version < 39) { /* Check unit number */ if (unit >= 0) { - struct hardfiledata *hfd = get_hardfile_data (unit); - if (hfd && hfd->fd != 0 && start_thread (context, unit)) { - put_word (hfpd->base + 32, get_word (hfpd->base + 32) + 1); - put_long (tmp1 + 24, unit); /* io_Unit */ - put_byte (tmp1 + 31, 0); /* io_Error */ - put_byte (tmp1 + 8, 7); /* ln_type = NT_REPLYMSG */ - write_log ("hardfile_open, unit %d (%d), OK\n", unit, m68k_dreg (&context->regs, 0)); - return 0; - } + struct hardfiledata *hfd = get_hardfile_data (unit); + if (hfd && hfd->fd != 0 && start_thread (context, unit)) { + put_word (hfpd->base + 32, get_word (hfpd->base + 32) + 1); + put_long (ioreq + 24, unit); /* io_Unit */ + put_byte (ioreq + 31, 0); /* io_Error */ + put_byte (ioreq + 8, 7); /* ln_type = NT_REPLYMSG */ + write_log ("hardfile_open, unit %d (%d), OK\n", unit, m68k_dreg (&context->regs, 0)); + return 0; + } } if (unit < 1000 || is_hardfile(unit) == FILESYS_VIRTUAL) - err = 50; /* HFERR_NoBoard */ - write_log ("hardfile_open, unit %d (%d), ERR=%d\n", unit, m68k_dreg (&context->regs, 0), err); - put_long (tmp1 + 20, (uae_u32)err); - put_byte (tmp1 + 31, (uae_u8)err); - return (uae_u32)err; + err = 50; /* HFERR_NoBoard */ + } else { + err = IOERR_BADLENGTH; + } + write_log ("hardfile_open, unit %d (%d), ERR=%d\n", unit, m68k_dreg (&context->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) @@ -287,13 +257,13 @@ static uae_u32 REGPARAM2 hardfile_expunge (TrapContext *context) static void outofbounds (int cmd, uae_u64 offset, uae_u64 len, uae_u64 max) { - write_log ("UAEHF: cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X > %08.8X-%08.8X\n", cmd, + write_log ("UAEHF: cmd %d: out of bounds, %08X-%08X + %08X-%08X > %08X-%08X\n", cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, (uae_u32)(max >> 32),(uae_u32)max); } static void unaligned (int cmd, uae_u64 offset, uae_u64 len, int blocksize) { - write_log ("UAEHF: cmd %d: unaligned access, %08.8X-%08.8X, %08.8X-%08.8X, %08.8X\n", cmd, + write_log ("UAEHF: cmd %d: unaligned access, %08X-%08X, %08X-%08X, %08X\n", cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, blocksize); } @@ -316,13 +286,17 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata goto no_disk; offset = get_long (request + 44); len = get_long (request + 36); /* io_Length */ - if ((offset & bmask) || (len & bmask)) { + if ((offset & bmask) || dataptr == 0) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_command; } + if (len & bmask) { + unaligned (cmd, offset, len, hfd->blocksize); + goto bad_len; + } if (len + offset > hfd->size) { outofbounds (cmd, offset, len, hfd->size); - goto bad_command; + goto bad_len; } actual = (uae_u32)cmd_read (hfd, dataptr, offset, len); break; @@ -333,13 +307,17 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata goto no_disk; offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); len = get_long (request + 36); /* io_Length */ - if ((offset64 & bmask) || (len & bmask)) { + if ((offset64 & bmask) || dataptr == 0) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_command; + } + if (len & bmask) { + unaligned (cmd, offset64, len, hfd->blocksize); + goto bad_len; } if (len + offset64 > hfd->size) { outofbounds (cmd, offset64, len, hfd->size); - goto bad_command; + goto bad_len; } actual = (uae_u32)cmd_read (hfd, dataptr, offset64, len); break; @@ -353,13 +331,17 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata } else { offset = get_long (request + 44); len = get_long (request + 36); /* io_Length */ - if ((offset & bmask) || (len & bmask)) { + if ((offset & bmask) || dataptr == 0) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_command; + } + if (len & bmask) { + unaligned (cmd, offset, len, hfd->blocksize); + goto bad_len; } if (len + offset > hfd->size) { outofbounds (cmd, offset, len, hfd->size); - goto bad_command; + goto bad_len; } actual = (uae_u32)cmd_write (hfd, dataptr, offset, len); } @@ -376,28 +358,35 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata } else { offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); len = get_long (request + 36); /* io_Length */ - if ((offset64 & bmask) || (len & bmask)) { + if ((offset64 & bmask) || dataptr == 0) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_command; + } + if (len & bmask) { + unaligned (cmd, offset64, len, hfd->blocksize); + goto bad_len; } if (len + offset64 > hfd->size) { outofbounds (cmd, offset64, len, hfd->size); - goto bad_command; + goto bad_len; } put_long (request + 32, (uae_u32)cmd_write (hfd, dataptr, offset64, len)); } break; bad_command: - error = -5; /* IOERR_BADADDRESS */ + error = IOERR_BADADDRESS; break; + bad_len: + error = IOERR_BADLENGTH; no_disk: error = 29; /* no disk */ break; case NSCMD_DEVICEQUERY: + put_long (dataptr + 0, 0); put_long (dataptr + 4, 16); /* size */ - put_word (dataptr + 8, 5); /* NSDEVTYPE_TRACKDISK */ + put_word (dataptr + 8, NSDEVTYPE_TRACKDISK); put_word (dataptr + 10, 0); put_long (dataptr + 12, nscmd_cmd); actual = 16; @@ -452,14 +441,14 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata // if (hfd->nrcyls == 0) { // error = handle_scsi (request, hfd); // } else { /* we don't want users trashing their "partition" hardfiles with hdtoolbox */ - error = -3; /* io_Error */ -// write_log ("UAEHF: HD_SCSICMD tried on regular HDF, unit %d", unit); + error = IOERR_NOCMD; +// write_log ("UAEHF: HD_SCSICMD tried on regular HDF, unit %d\n", unit); // } break; default: /* Command not understood. */ - error = -3; /* IOERR_NOCMD */ + error = IOERR_NOCMD; break; } put_long (request + 32, actual); @@ -486,7 +475,7 @@ static uae_u32 REGPARAM2 hardfile_abortio (TrapContext *context) return get_byte (request + 31); } put_byte (request + 31, -2); - write_log ("unit=%d, request=%08.8X\n", unit, request); + write_log ("unit=%d, request=%08X\n", unit, request); abort_async (hfpd, request, -2, 0); return 0; } @@ -567,7 +556,7 @@ static void *hardfile_thread (void *devs) release_async_request (hfpd, request); uae_ReplyMsg (request); } else { - write_log ("async request %08.8X\n", request); + write_log ("async request %08X\n", request); } uae_sem_post (&change_sem); } diff --git a/src/include/autoconf.h b/src/include/autoconf.h index 4795b2bf..b3f9cff1 100644 --- a/src/include/autoconf.h +++ b/src/include/autoconf.h @@ -7,6 +7,9 @@ */ +#define RTAREA_DEFAULT 0xf00000 +#define RTAREA_BACKUP 0xef0000 + extern uae_u32 addr (int); extern void db (uae_u8); extern void dw (uae_u16); @@ -15,9 +18,11 @@ extern uae_u32 ds (const char *); extern void calltrap (uae_u32); extern void org (uae_u32); extern uae_u32 here (void); +extern uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev); #define deftrap(f) define_trap((f), 0, "") -# define deftrap2(f, mode, str) define_trap((f), (mode), (str)) +#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); @@ -39,6 +44,7 @@ extern uaecptr filesys_initcode; extern int is_hardfile (int unit_no); extern int nr_units (void); +extern int nr_directory_units (struct uae_prefs*); extern uaecptr need_uae_boot_rom (void); struct mountedinfo @@ -80,7 +86,4 @@ extern void expansion_init (void); extern void expansion_cleanup (void); extern void expansion_clear (void); -#define TRAPFLAG_NO_REGSAVE 1 -#define TRAPFLAG_NO_RETVAL 2 -#define TRAPFLAG_EXTRA_STACK 4 -#define TRAPFLAG_DORET 8 +extern void uaegfx_install_code (void); diff --git a/src/include/blitter.h b/src/include/blitter.h index b64bfddc..2ef8433e 100644 --- a/src/include/blitter.h +++ b/src/include/blitter.h @@ -33,6 +33,7 @@ extern void build_blitfilltable (void); extern void do_blitter (void); extern void blitter_done_notify (void); extern void blitter_slowdown (int, int, int, int); + extern void blitter_check_start (void); typedef void blitter_func(uaecptr, uaecptr, uaecptr, uaecptr, struct bltinfo *_GCCRES_); diff --git a/src/include/bsdsocket.h b/src/include/bsdsocket.h deleted file mode 100644 index b73218dd..00000000 --- a/src/include/bsdsocket.h +++ /dev/null @@ -1,4 +0,0 @@ - /* - * NO bsdsocket.library - */ - diff --git a/src/include/cfgfile.h b/src/include/cfgfile.h deleted file mode 100644 index 7743d224..00000000 --- a/src/include/cfgfile.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CFGFILE_H_ -#define CFGFILE_H_ - -extern char *cfgfile_subst_path (const char *path, const char *subst, const char *file); -extern char * make_hard_dir_cfg_line (char *src, char *dst); -extern char * make_hard_file_cfg_line (char *src, char *dst); -extern void parse_filesys_spec (int readonly, char *spec); -extern void parse_hardfile_spec (char *spec); - -#endif diff --git a/src/include/cpu_prefetch.h b/src/include/cpu_prefetch.h index 3205a254..1b5d68f7 100644 --- a/src/include/cpu_prefetch.h +++ b/src/include/cpu_prefetch.h @@ -13,51 +13,71 @@ STATIC_INLINE uae_u32 get_long_prefetch (struct regstruct *regs, int o) } #ifdef CPUEMU_12 +#define CE_MEMBANK_FAST 0 +#define CE_MEMBANK_CHIP 1 +#define CE_MEMBANK_CIA 2 +extern uae_u8 ce_banktype[256]; STATIC_INLINE uae_u32 mem_access_delay_word_read (uaecptr addr) { - if (addr < 0x200000 || (addr >= 0xc00000 && addr < 0xe00000 && !currprefs.cs_slowmemisfast)) { + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); - } else if (!(addr >= 0xa00000 && addr < 0xc00000)) { + case CE_MEMBANK_FAST: do_cycles_ce (4 * CYCLE_UNIT / 2); + break; } return get_word (addr); } STATIC_INLINE uae_u32 mem_access_delay_wordi_read (uaecptr addr) { - if (addr < 0x200000 || (addr >= 0xc00000 && addr < 0xe00000 && !currprefs.cs_slowmemisfast)) { + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); - } else if (!(addr >= 0xa00000 && addr < 0xc00000)) { + case CE_MEMBANK_FAST: do_cycles_ce (4 * CYCLE_UNIT / 2); + break; } return get_wordi (addr); } STATIC_INLINE uae_u32 mem_access_delay_byte_read (uaecptr addr) { - if (addr < 0x200000 || (addr >= 0xc00000 && addr < 0xe00000 && !currprefs.cs_slowmemisfast)) { + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 0); - } else if (!(addr >= 0xa00000 && addr < 0xc00000)) { + case CE_MEMBANK_FAST: do_cycles_ce (4 * CYCLE_UNIT / 2); + break; } return get_byte (addr); } STATIC_INLINE void mem_access_delay_byte_write (uaecptr addr, uae_u32 v) { - if (addr < 0x200000 || (addr >= 0xc00000 && addr < 0xe00000 && !currprefs.cs_slowmemisfast)) { + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: wait_cpu_cycle_write (addr, 0, v); return; - } else if (!(addr >= 0xa00000 && addr < 0xc00000)) { + case CE_MEMBANK_FAST: do_cycles_ce (4 * CYCLE_UNIT / 2); + break; } put_byte (addr, v); } STATIC_INLINE void mem_access_delay_word_write (uaecptr addr, uae_u32 v) { - if (addr < 0x200000 || (addr >= 0xc00000 && addr < 0xe00000 && !currprefs.cs_slowmemisfast)) { + switch (ce_banktype[(addr >> 16) & 0xff]) + { + case CE_MEMBANK_CHIP: wait_cpu_cycle_write (addr, 1, v); return; - } else if (!(addr >= 0xa00000 && addr < 0xc00000)) { + break; + case CE_MEMBANK_FAST: do_cycles_ce (4 * CYCLE_UNIT / 2); + break; } put_word (addr, v); } diff --git a/src/include/cputbl.h b/src/include/cputbl.h index 38e45d40..02e4960a 100644 --- a/src/include/cputbl.h +++ b/src/include/cputbl.h @@ -3742,6 +3742,20 @@ extern cpuop_func op_f43f_0_nf; extern cpuop_func op_f43f_0_ff; extern cpuop_func op_f500_0_nf; extern cpuop_func op_f500_0_ff; +extern cpuop_func op_f508_0_nf; +extern cpuop_func op_f508_0_ff; +extern cpuop_func op_f510_0_nf; +extern cpuop_func op_f510_0_ff; +extern cpuop_func op_f518_0_nf; +extern cpuop_func op_f518_0_ff; +extern cpuop_func op_f548_0_nf; +extern cpuop_func op_f548_0_ff; +extern cpuop_func op_f568_0_nf; +extern cpuop_func op_f568_0_ff; +extern cpuop_func op_f588_0_nf; +extern cpuop_func op_f588_0_ff; +extern cpuop_func op_f5c8_0_nf; +extern cpuop_func op_f5c8_0_ff; extern cpuop_func op_f600_0_nf; extern cpuop_func op_f600_0_ff; extern cpuop_func op_f608_0_nf; @@ -3754,26 +3768,6 @@ extern cpuop_func op_f620_0_nf; extern cpuop_func op_f620_0_ff; extern cpuop_func op_f800_0_nf; extern cpuop_func op_f800_0_ff; -extern cpuop_func op_f808_0_nf; -extern cpuop_func op_f808_0_ff; -extern cpuop_func op_f810_0_nf; -extern cpuop_func op_f810_0_ff; -extern cpuop_func op_f818_0_nf; -extern cpuop_func op_f818_0_ff; -extern cpuop_func op_f820_0_nf; -extern cpuop_func op_f820_0_ff; -extern cpuop_func op_f828_0_nf; -extern cpuop_func op_f828_0_ff; -extern cpuop_func op_f830_0_nf; -extern cpuop_func op_f830_0_ff; -extern cpuop_func op_f838_0_nf; -extern cpuop_func op_f838_0_ff; -extern cpuop_func op_f839_0_nf; -extern cpuop_func op_f839_0_ff; -extern cpuop_func op_f83a_0_nf; -extern cpuop_func op_f83a_0_ff; -extern cpuop_func op_f83b_0_nf; -extern cpuop_func op_f83b_0_ff; extern cpuop_func op_4800_2_nf; extern cpuop_func op_4800_2_ff; extern cpuop_func op_4810_2_nf; @@ -4941,28 +4935,6 @@ extern cpuop_func op_40f8_4_nf; extern cpuop_func op_40f8_4_ff; extern cpuop_func op_40f9_4_nf; extern cpuop_func op_40f9_4_ff; -extern cpuop_func op_4100_4_nf; -extern cpuop_func op_4100_4_ff; -extern cpuop_func op_4110_4_nf; -extern cpuop_func op_4110_4_ff; -extern cpuop_func op_4118_4_nf; -extern cpuop_func op_4118_4_ff; -extern cpuop_func op_4120_4_nf; -extern cpuop_func op_4120_4_ff; -extern cpuop_func op_4128_4_nf; -extern cpuop_func op_4128_4_ff; -extern cpuop_func op_4130_4_nf; -extern cpuop_func op_4130_4_ff; -extern cpuop_func op_4138_4_nf; -extern cpuop_func op_4138_4_ff; -extern cpuop_func op_4139_4_nf; -extern cpuop_func op_4139_4_ff; -extern cpuop_func op_413a_4_nf; -extern cpuop_func op_413a_4_ff; -extern cpuop_func op_413b_4_nf; -extern cpuop_func op_413b_4_ff; -extern cpuop_func op_413c_4_nf; -extern cpuop_func op_413c_4_ff; extern cpuop_func op_4180_4_nf; extern cpuop_func op_4180_4_ff; extern cpuop_func op_4190_4_nf; @@ -5263,8 +5235,6 @@ extern cpuop_func op_48f8_4_nf; extern cpuop_func op_48f8_4_ff; extern cpuop_func op_48f9_4_nf; extern cpuop_func op_48f9_4_ff; -extern cpuop_func op_49c0_4_nf; -extern cpuop_func op_49c0_4_ff; extern cpuop_func op_4a00_4_nf; extern cpuop_func op_4a00_4_ff; extern cpuop_func op_4a10_4_nf; @@ -8081,28 +8051,6 @@ extern cpuop_func op_40f8_11_nf; extern cpuop_func op_40f8_11_ff; extern cpuop_func op_40f9_11_nf; extern cpuop_func op_40f9_11_ff; -extern cpuop_func op_4100_11_nf; -extern cpuop_func op_4100_11_ff; -extern cpuop_func op_4110_11_nf; -extern cpuop_func op_4110_11_ff; -extern cpuop_func op_4118_11_nf; -extern cpuop_func op_4118_11_ff; -extern cpuop_func op_4120_11_nf; -extern cpuop_func op_4120_11_ff; -extern cpuop_func op_4128_11_nf; -extern cpuop_func op_4128_11_ff; -extern cpuop_func op_4130_11_nf; -extern cpuop_func op_4130_11_ff; -extern cpuop_func op_4138_11_nf; -extern cpuop_func op_4138_11_ff; -extern cpuop_func op_4139_11_nf; -extern cpuop_func op_4139_11_ff; -extern cpuop_func op_413a_11_nf; -extern cpuop_func op_413a_11_ff; -extern cpuop_func op_413b_11_nf; -extern cpuop_func op_413b_11_ff; -extern cpuop_func op_413c_11_nf; -extern cpuop_func op_413c_11_ff; extern cpuop_func op_4180_11_nf; extern cpuop_func op_4180_11_ff; extern cpuop_func op_4190_11_nf; @@ -8387,8 +8335,6 @@ extern cpuop_func op_48f8_11_nf; extern cpuop_func op_48f8_11_ff; extern cpuop_func op_48f9_11_nf; extern cpuop_func op_48f9_11_ff; -extern cpuop_func op_49c0_11_nf; -extern cpuop_func op_49c0_11_ff; extern cpuop_func op_4a00_11_nf; extern cpuop_func op_4a00_11_ff; extern cpuop_func op_4a10_11_nf; diff --git a/src/include/crc32.h b/src/include/crc32.h index 0cc269c7..e33972a9 100644 --- a/src/include/crc32.h +++ b/src/include/crc32.h @@ -1,5 +1,6 @@ extern uae_u32 get_crc32 (uae_u8 *p, int size); extern uae_u16 get_crc16 (uae_u8 *p, int size); +extern uae_u32 get_crc32_val (uae_u8 v, uae_u32 crc); extern void get_sha1 (uae_u8 *p, int size, uae_u8 *out); extern char *get_sha1_txt (uae_u8 *p, int size); #define SHA1_SIZE 20 diff --git a/src/include/custom.h b/src/include/custom.h index 7b05694c..68eaf870 100644 --- a/src/include/custom.h +++ b/src/include/custom.h @@ -56,7 +56,7 @@ extern int n_frames; #define SPCFLAG_EXTRA_CYCLES 32 #define SPCFLAG_TRACE 64 #define SPCFLAG_DOTRACE 128 -#define SPCFLAG_DOINT 256 +#define SPCFLAG_DOINT 256 /* arg, JIT fails without this.. */ #define SPCFLAG_BLTNASTY 512 #define SPCFLAG_EXEC 1024 #define SPCFLAG_ACTION_REPLAY 2048 @@ -85,8 +85,8 @@ extern uae_u16 INTREQR (void); #define MAXHPOS_NTSC 227 #define MAXVPOS_PAL 312 #define MAXVPOS_NTSC 262 -#define VBLANK_ENDLINE_PAL 27 -#define VBLANK_ENDLINE_NTSC 28 +#define VBLANK_ENDLINE_PAL 26 +#define VBLANK_ENDLINE_NTSC 21 #define VBLANK_SPRITE_PAL 25 #define VBLANK_SPRITE_NTSC 20 #define VBLANK_HZ_PAL 50 @@ -108,7 +108,7 @@ extern int vblank_hz; #define DMA_MASTER 0x0200 #define DMA_BLITPRI 0x0400 -extern uae_u16 htotal, vtotal; +extern uae_u16 htotal, vtotal, beamcon0; /* 100 words give you 1600 horizontal pixels. Should be more than enough for * superhires. Don't forget to update the definition in genp2c.c as well. @@ -127,6 +127,7 @@ extern unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256]; #define RES_LORES 0 #define RES_HIRES 1 #define RES_SUPERHIRES 2 +#define RES_MAX 2 /* calculate shift depending on resolution (replaced "decided_hires ? 4 : 8") */ #define RES_SHIFT(res) ((res) == RES_LORES ? 8 : (res) == RES_HIRES ? 4 : 2) diff --git a/src/include/drawing.h b/src/include/drawing.h index 970818e8..f61876e5 100644 --- a/src/include/drawing.h +++ b/src/include/drawing.h @@ -8,13 +8,24 @@ #define MAX_PLANES 8 +//#define NEWHSYNC + +#ifdef NEWHSYNC +#define DIW_DDF_OFFSET 9 +/* this many cycles starting from hpos=0 are visible on right border */ +#define HBLANK_OFFSET 13 +#define DISPLAY_LEFT_SHIFT 0x40 +#else /* According to the HRM, pixel data spends a couple of cycles somewhere in the chips before it appears on-screen. */ #define DIW_DDF_OFFSET 9 - +/* this many cycles starting from hpos=0 are visible on right border */ +#define HBLANK_OFFSET 9 /* We ignore that many lores pixels at the start of the display. These are * invisible anyway due to hardware DDF limits. */ #define DISPLAY_LEFT_SHIFT 0x40 +#endif + #define PIXEL_XPOS(HPOS) ((((HPOS)<<1) - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1) ) #define max_diwlastword (PIXEL_XPOS(0x1d4>> 1)) diff --git a/src/include/driveclick.h b/src/include/driveclick.h deleted file mode 100644 index 2cd70aef..00000000 --- a/src/include/driveclick.h +++ /dev/null @@ -1,40 +0,0 @@ - /* - * UAE - The Un*x Amiga Emulator - * - * Drive Click emulation stuff - * - * Copyright 2004 James Bagg, Toni Wilen - */ - - -struct drvsample { - int len; - int pos; - uae_s16 *p; -}; - -#define DS_CLICK 0 -#define DS_SPIN 1 -#define DS_SPINND 2 -#define DS_START 3 -#define DS_SNATCH 4 -#define DS_END 5 - -extern void driveclick_click(int drive, int startOffset); -extern void driveclick_motor(int drive, int running); -extern void driveclick_insert(int drive, int eject); -extern void driveclick_init(void); -extern void driveclick_free(void); -extern void driveclick_reset(void); -extern void driveclick_mix(uae_s16*, int); -extern int driveclick_loadresource(struct drvsample*, int); -extern void driveclick_check_prefs (void); -extern uae_s16 *decodewav (uae_u8 *s, int *len); - -#define DS_BUILD_IN_SOUNDS 1 -#define DS_NAME_CLICK "drive_click_" -#define DS_NAME_SPIN "drive_spin_" -#define DS_NAME_SPIN_ND "drive_spinnd_" -#define DS_NAME_START "drive_start_" -#define DS_NAME_SNATCH "drive_snatch_" - diff --git a/src/include/ersatz.h b/src/include/ersatz.h index 4929db55..2833e4ba 100644 --- a/src/include/ersatz.h +++ b/src/include/ersatz.h @@ -7,5 +7,6 @@ */ extern void init_ersatz_rom (uae_u8 *data); +extern void ersatz_chipcopy (void); extern void ersatz_perform (uae_u16); extern void DISK_ersatz_read (int,int, uaecptr); diff --git a/src/include/events_jit.h b/src/include/events_jit.h index 9f26cd81..8f7eb1a6 100644 --- a/src/include/events_jit.h +++ b/src/include/events_jit.h @@ -28,8 +28,8 @@ extern signed long pissoff; STATIC_INLINE void cycles_do_special (void) { - if (pissoff >= 0) - pissoff = -1; + if (pissoff > 0) + pissoff = 0; } STATIC_INLINE void do_extra_cycles (unsigned long cycles_to_add) @@ -49,7 +49,7 @@ STATIC_INLINE void set_cycles (unsigned long int x) STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add) { - if ((pissoff -= cycles_to_add) >= 0) + if ((pissoff -= cycles_to_add) > 0) return; cycles_to_add = -pissoff; @@ -65,6 +65,7 @@ STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add) return; } } + while ((nextevent - currcycle) <= cycles_to_add) { int i; cycles_to_add -= (nextevent - currcycle); diff --git a/src/include/execio.h b/src/include/execio.h new file mode 100644 index 00000000..edc7966a --- /dev/null +++ b/src/include/execio.h @@ -0,0 +1,63 @@ +#define IOERR_OPENFAIL -1 +#define IOERR_ABORTED -2 +#define IOERR_NOCMD -3 +#define IOERR_BADLENGTH -4 +#define IOERR_BADADDRESS -5 +#define IOERR_UNITBUSY -6 +#define IOERR_SELFTEST -7 + +#define CMD_INVALID 0 +#define CMD_RESET 1 +#define CMD_READ 2 +#define CMD_WRITE 3 +#define CMD_UPDATE 4 +#define CMD_CLEAR 5 +#define CMD_STOP 6 +#define CMD_START 7 +#define CMD_FLUSH 8 + +#define IOSTDREQ_SIZE 48 + +#define DRIVE_NEWSTYLE 0x4E535459L /* 'NSTY' */ +#define NSCMD_DEVICEQUERY 0x4000 + +#define NSDEVTYPE_UNKNOWN 0 +#define NSDEVTYPE_GAMEPORT 1 +#define NSDEVTYPE_TIMER 2 +#define NSDEVTYPE_KEYBOARD 3 +#define NSDEVTYPE_INPUT 4 +#define NSDEVTYPE_TRACKDISK 5 +#define NSDEVTYPE_CONSOLE 6 +#define NSDEVTYPE_SANA2 7 +#define NSDEVTYPE_AUDIO 8 +#define NSDEVTYPE_CLIPBOARD 9 +#define NSDEVTYPE_PRINTER 10 +#define NSDEVTYPE_SERIAL 11 +#define NSDEVTYPE_PARALLEL 12 + +#define CMD_MOTOR 9 +#define CMD_SEEK 10 +#define CMD_FORMAT 11 +#define CMD_REMOVE 12 +#define CMD_CHANGENUM 13 +#define CMD_CHANGESTATE 14 +#define CMD_PROTSTATUS 15 +#define CMD_GETDRIVETYPE 18 +#define CMD_GETNUMTRACKS 19 +#define CMD_ADDCHANGEINT 20 +#define CMD_REMCHANGEINT 21 +#define CMD_GETGEOMETRY 22 +#define HD_SCSICMD 28 + +/* Trackdisk64 support */ +#define TD_READ64 24 +#define TD_WRITE64 25 +#define TD_SEEK64 26 +#define TD_FORMAT64 27 + +/* New Style Devices (NSD) support */ +#define NSCMD_TD_READ64 0xc000 +#define NSCMD_TD_WRITE64 0xc001 +#define NSCMD_TD_SEEK64 0xc002 +#define NSCMD_TD_FORMAT64 0xc003 + diff --git a/src/include/execlib.h b/src/include/execlib.h index 362bc6ce..c1fe0513 100644 --- a/src/include/execlib.h +++ b/src/include/execlib.h @@ -32,6 +32,8 @@ #define NT_LIBRARY 9 #define NT_SIGNALSEM 15 +#define SIZEOF_LIBRARY 34 + #ifndef MEMF_PUBLIC /* protection for AmigaDOS */ #define MEMF_PUBLIC 1 #define MEMF_CHIP 2 diff --git a/src/include/filesys.h b/src/include/filesys.h index 897751a1..0029374f 100644 --- a/src/include/filesys.h +++ b/src/include/filesys.h @@ -59,4 +59,4 @@ extern struct uaedev_mount_info options_mountinfo; extern struct hardfiledata *get_hardfile_data (int nr); extern int get_native_path(uae_u32 lock, char *out); -extern void hardfile_do_disk_change (int fsid, int insert); +extern void hardfile_do_disk_change (struct uaedev_config_info *uci, int insert); diff --git a/src/include/gui.h b/src/include/gui.h index 13f51745..73cf6c8d 100644 --- a/src/include/gui.h +++ b/src/include/gui.h @@ -18,6 +18,7 @@ extern void gui_lock (void); extern void gui_unlock (void); extern void gui_hd_led (int); extern void gui_cd_led (int); +extern void gui_disk_image_change (int, const char *); extern unsigned int gui_ledstate; extern int no_gui; diff --git a/src/include/identify.h b/src/include/identify.h deleted file mode 100644 index ebe083d0..00000000 --- a/src/include/identify.h +++ /dev/null @@ -1,24 +0,0 @@ - /* - * UAE - The Un*x Amiga Emulator - * - * Tables for labelling amiga internals. - * - */ - -struct mem_labels -{ - const char *name; - uae_u32 adr; -}; - -struct customData -{ - const char *name; - uae_u32 adr; -}; - - -extern const struct mem_labels mem_labels[]; -extern const struct mem_labels int_labels[]; -extern const struct mem_labels trap_labels[]; - diff --git a/src/include/inputdevice.h b/src/include/inputdevice.h index c13bd807..551b4796 100644 --- a/src/include/inputdevice.h +++ b/src/include/inputdevice.h @@ -30,7 +30,6 @@ enum mousestate { mousehack_unknown, mousehack_normal, mousehack_dontcare, mouse extern void mousehack_set (enum mousestate); extern int mousehack_get (void); extern void mousehack_handle (int sprctl, int sprpos); -extern int mousehack_alive (void); extern int mousehack_allowed (void); extern void inputdevice_updateconfig (struct uae_prefs *prefs); diff --git a/src/include/memory.h b/src/include/memory.h index d528106c..cfcbb1a2 100644 --- a/src/include/memory.h +++ b/src/include/memory.h @@ -60,7 +60,7 @@ extern uaecptr p96ram_start; extern uaecptr fastmem_start; extern int ersatzkickfile; -extern int cloanto_rom; +extern int cloanto_rom, kickstart_rom; extern uae_u16 kickstart_version; extern int uae_boot_rom, uae_boot_rom_size; extern uaecptr rtarea_base; @@ -107,6 +107,7 @@ extern addrbank fastmem_bank; extern addrbank gfxmem_bank, gfxmem_bankx; extern void rtarea_init (void); +extern void rtarea_init_mem (void); extern void rtarea_setup (void); extern void expamem_init (void); extern void expamem_reset (void); @@ -313,25 +314,29 @@ extern void clearexec (void); extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size); -#define ROMTYPE_KICK 1 -#define ROMTYPE_KICKCD32 2 -#define ROMTYPE_EXTCD32 4 -#define ROMTYPE_EXTCDTV 8 -#define ROMTYPE_A2091BOOT 16 -#define ROMTYPE_A4091BOOT 32 -#define ROMTYPE_AR 64 -#define ROMTYPE_SUPERIV 128 -#define ROMTYPE_KEY 256 -#define ROMTYPE_ARCADIABIOS 512 -#define ROMTYPE_ARCADIAGAME 1024 -#define ROMTYPE_HRTMON 2048 -#define ROMTYPE_NORDIC 4096 -#define ROMTYPE_XPOWER 8192 -#define ROMTYPE_CD32CART 16384 -#define ROMTYPE_EVEN 131072 -#define ROMTYPE_ODD 262144 -#define ROMTYPE_BYTESWAP 524288 -#define ROMTYPE_SCRAMBLED 1048576 +#define ROMTYPE_KICK 0x000001 +#define ROMTYPE_KICKCD32 0x000002 +#define ROMTYPE_EXTCD32 0x000004 +#define ROMTYPE_EXTCDTV 0x000008 +#define ROMTYPE_A2091BOOT 0x000010 +#define ROMTYPE_A4091BOOT 0x000020 +#define ROMTYPE_AR 0x000040 +#define ROMTYPE_SUPERIV 0x000080 +#define ROMTYPE_KEY 0x000100 +#define ROMTYPE_ARCADIABIOS 0x000200 +#define ROMTYPE_ARCADIAGAME 0x000400 +#define ROMTYPE_HRTMON 0x000800 +#define ROMTYPE_NORDIC 0x001000 +#define ROMTYPE_XPOWER 0x002000 +#define ROMTYPE_CD32CART 0x004000 +#define ROMTYPE_SPECIALKICK 0x008000 +#define ROMTYPE_MASK 0x01ffff +#define ROMTYPE_EVEN 0x020000 +#define ROMTYPE_ODD 0x040000 +#define ROMTYPE_8BIT 0x080000 +#define ROMTYPE_BYTESWAP 0x100000 +#define ROMTYPE_CD32 0x200000 +#define ROMTYPE_SCRAMBLED 0x400000 struct romheader { char *name; @@ -350,6 +355,7 @@ struct romdata { int type; int group; int title; + char *partnumber; uae_u32 crc32; uae_u32 sha1[5]; char *configname; @@ -364,6 +370,7 @@ extern struct romdata *getromdatabypath(char *path); extern struct romdata *getromdatabycrc (uae_u32 crc32); extern struct romdata *getromdatabydata (uae_u8 *rom, int size); extern struct romdata *getromdatabyid (int id); +extern struct romdata *getromdatabyidgroup (int id, int group, int subitem); extern struct romdata *getromdatabyzfile (struct zfile *f); extern struct romlist **getarcadiaroms (void); extern struct romdata *getarcadiarombyname (char *name); @@ -376,6 +383,8 @@ extern struct romlist *getromlistbyromdata(struct romdata *rd); extern void romlist_add (char *path, struct romdata *rd); extern char *romlist_get (struct romdata *rd); extern void romlist_clear (void); +extern struct zfile *read_rom (struct romdata **rd); +extern struct zfile *read_rom_name (const char *filename); extern int load_keyring (struct uae_prefs *p, char *path); extern uae_u8 *target_load_keyfile (struct uae_prefs *p, char *path, int *size, char *name); @@ -383,7 +392,7 @@ extern void free_keyring (void); extern int get_keyring (void); uaecptr strcpyha_safe (uaecptr dst, const char *src); -extern char *strcpyah_safe (char *dst, uaecptr src); +extern char *strcpyah_safe (char *dst, uaecptr src, int maxsize); void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size); void memcpyha (uaecptr dst, const uae_u8 *src, int size); void memcpyah_safe (uae_u8 *dst, uaecptr src, int size); diff --git a/src/include/newcpu.h b/src/include/newcpu.h index a4b71b49..97c893b0 100644 --- a/src/include/newcpu.h +++ b/src/include/newcpu.h @@ -153,6 +153,7 @@ extern struct regstruct uae_u16 wb3_status; int mmu_enabled; int mmu_pagesize_8k; + uae_u32 fault_pc; #endif uae_u32 pcr; @@ -163,23 +164,6 @@ extern struct regstruct } regs, lastint_regs; -typedef struct { - uae_u16* location; - uae_u8 cycles; - uae_u8 specmem; - uae_u8 dummy2; - uae_u8 dummy3; -} cpu_history; - -struct blockinfo_t; - -typedef union { - cpuop_func* handler; - struct blockinfo_t* bi; -} cacheline; - -extern signed long pissoff; - STATIC_INLINE uae_u32 munge24(uae_u32 x) { return x & regs.address_space_mask; @@ -367,7 +351,6 @@ extern uae_u32 fpp_get_fpsr (const struct regstruct *regs); extern void exception3 (uae_u32 opcode, uaecptr addr, uaecptr fault); extern void exception3i (uae_u32 opcode, uaecptr addr, uaecptr fault); -extern void exception2 (uaecptr addr, uaecptr fault); extern void cpureset (void); extern void fill_prefetch_slow (struct regstruct *regs); @@ -393,18 +376,6 @@ extern const struct cputbl op_smalltbl_12_ff[]; extern cpuop_func *cpufunctbl[65536] ASM_SYM_FOR_FUNC ("cpufunctbl"); - -/* Flags for Bernie during development/debugging. Should go away eventually */ -#define DISTRUST_CONSISTENT_MEM 0 -#define TAGMASK 0x000fffff -#define TAGSIZE (TAGMASK+1) -#define MAXRUN 1024 - -extern uae_u8* start_pc_p; -extern uae_u32 start_pc; - -#define cacheline(x) (((uintptr)x)&TAGMASK) - void newcpu_showstate(void); #ifdef JIT diff --git a/src/include/options.h b/src/include/options.h index 6ade935e..2e8d9091 100644 --- a/src/include/options.h +++ b/src/include/options.h @@ -8,8 +8,8 @@ */ #define UAEMAJOR 1 -#define UAEMINOR 4 -#define UAESUBREV 6 +#define UAEMINOR 5 +#define UAESUBREV 3 extern long int version; @@ -75,6 +75,7 @@ struct uae_prefs { struct wh gfx_size_win; struct wh gfx_size_fs; struct wh gfx_size; + int gfx_resolution; #ifdef RASPBERRY int gfx_correct_aspect; @@ -89,6 +90,7 @@ struct uae_prefs { int fast_copper; int cpu_idle; int floppy_speed; + int floppy_write_length; int tod_hack; int cs_a1000ram; @@ -108,6 +110,7 @@ struct uae_prefs { int cpu_compatible; int address_space_24; int picasso96_nocustom; + int picasso96_modeflags; uae_u32 z3fastmem_size; uae_u32 z3fastmem_start; diff --git a/src/include/picasso96.h b/src/include/picasso96.h index 9890a156..9e000ff0 100644 --- a/src/include/picasso96.h +++ b/src/include/picasso96.h @@ -5,31 +5,55 @@ * * Copyright 1997 Brian King */ +#ifndef __PICASSO96_H__ +#define __PICASSO96_H__ +#include "rtgmodes.h" -/* Seems the same routines copy back and forth ;-) */ -#define PIC_READ (S_READ|S_WRITE) -#define PIC_WRITE (S_READ|S_WRITE) +struct ScreenResolution +{ + uae_u32 width; /* in pixels */ + uae_u32 height; /* in pixels */ +}; -typedef enum { - BLIT_FALSE, - BLIT_NOR, - BLIT_ONLYDST, - BLIT_NOTSRC, - BLIT_ONLYSRC, - BLIT_NOTDST, - BLIT_EOR, - BLIT_NAND, - BLIT_AND, - BLIT_NEOR, - BLIT_DST, - BLIT_NOTONLYSRC, - BLIT_SRC, - BLIT_NOTONLYDST, - BLIT_OR, - BLIT_TRUE, - BLIT_LAST -} BLIT_OPCODE; +#define MAX_PICASSO_MODES 100 +#define MAX_REFRESH_RATES 10 +struct PicassoResolution +{ + struct ScreenResolution res; + int depth; /* depth in bytes-per-pixel */ + int residx; + int refresh[MAX_REFRESH_RATES]; /* refresh-rates in Hz */ + char name[25]; + /* Bit mask of RGBFF_xxx values. */ + uae_u32 colormodes; +}; +extern struct PicassoResolution *DisplayModes; + +typedef struct _RECT +{ + uae_s32 left; + uae_s32 top; + uae_s32 right; + uae_s32 bottom; +} RECT; + +#define MAX_DISPLAYS 4 +struct MultiDisplay { + int primary, disabled, gdi; + char *name; + char *name2; + struct PicassoResolution *DisplayModes; + RECT rect; +}; +extern struct MultiDisplay Displays[MAX_DISPLAYS]; + +extern int GetSurfacePixelFormat(void); +extern void picasso_InitResolutions (void); + +#ifdef PICASSO96 + +#define NOSIGNAL 0xFFFFFFFF /************************************************************************/ /* Types for BoardType Identification @@ -60,93 +84,27 @@ typedef enum { BT_MaxBoardTypes } BTYPE; -struct ScreenResolution -{ - uae_u32 width; /* in pixels */ - uae_u32 height; /* in pixels */ -}; - -#define MAX_PICASSO_MODES 64 -#define MAX_REFRESH_RATES 100 - -struct PicassoResolution -{ - struct ScreenResolution res; - int depth; - int refresh; - char name[25]; -}; -extern struct PicassoResolution DisplayModes[MAX_PICASSO_MODES]; - - -/* Types for RGBFormat used */ +/************************************************************************/ +/* Types for PaletteChipType Identification + */ typedef enum { - RGBFB_NONE, /* no valid RGB format (should not happen) */ - RGBFB_CLUT, /* palette mode, set colors when opening screen using - tags or use SetRGB32/LoadRGB32(...) */ - RGBFB_R8G8B8, /* TrueColor RGB (8 bit each) */ - RGBFB_B8G8R8, /* TrueColor BGR (8 bit each) */ - RGBFB_R5G6B5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), - format: gggbbbbbrrrrrggg */ - RGBFB_R5G5B5PC, /* HiColor15 (5 bit each), format: gggbbbbb0rrrrrgg */ - RGBFB_A8R8G8B8, /* 4 Byte TrueColor ARGB (A unused alpha channel) */ - RGBFB_A8B8G8R8, /* 4 Byte TrueColor ABGR (A unused alpha channel) */ - RGBFB_R8G8B8A8, /* 4 Byte TrueColor RGBA (A unused alpha channel) */ - RGBFB_B8G8R8A8, /* 4 Byte TrueColor BGRA (A unused alpha channel) */ - RGBFB_R5G6B5, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), - format: rrrrrggggggbbbbb */ - RGBFB_R5G5B5, /* HiColor15 (5 bit each), format: 0rrrrrgggggbbbbb */ - RGBFB_B5G6R5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), - format: gggrrrrrbbbbbggg */ - RGBFB_B5G5R5PC, /* HiColor15 (5 bit each), format: gggrrrrr0bbbbbbgg */ - - /* By now, the following formats are for use with a hardware window only - (bitmap operations may be implemented incompletely) */ - - RGBFB_Y4U2V2, /* 2 Byte TrueColor YUV (CCIR recommendation CCIR601). - Each two-pixel unit is stored as one longword - containing luminance (Y) for each of the two pixels, - and chrominance (U,V) for alternate pixels. - The missing chrominance values are generated by - interpolation. (Y1-U0-Y0-V0) */ - RGBFB_Y4U1V1, /* 1 Byte TrueColor ACCUPAK. Four adjacent pixels form - a packet of 5 bits Y (luminance) each pixel and 6 bits - U and V (chrominance) shared by the four pixels */ - - RGBFB_MaxFormats -} RGBFTYPE; - -#define RGBFF_NONE (1<> 8) | (((x) & 0xFF) << 8)) + #endif diff --git a/src/include/traps.h b/src/include/traps.h index 05262653..d9923648 100644 --- a/src/include/traps.h +++ b/src/include/traps.h @@ -26,6 +26,7 @@ typedef struct TrapContext #define TRAPFLAG_NO_RETVAL 2 #define TRAPFLAG_EXTRA_STACK 4 #define TRAPFLAG_DORET 8 +#define TRAPFLAG_UAERES 16 /* * A function which handles a 68k trap @@ -39,6 +40,7 @@ typedef uae_u32 (REGPARAM3 *TrapHandler) (TrapContext *) REGPARAM; extern void REGPARAM3 m68k_handle_trap (unsigned int trap_num, struct regstruct *) REGPARAM; unsigned int define_trap (TrapHandler handler_func, int flags, const char *name); +uaecptr find_trap (const char *name); /* * Call a 68k Library function from an extended trap diff --git a/src/include/uaeexe.h b/src/include/uaeexe.h deleted file mode 100644 index 4d335230..00000000 --- a/src/include/uaeexe.h +++ /dev/null @@ -1,4 +0,0 @@ -/* - * NO launch executable in UAE - */ - diff --git a/src/include/uaeresource.h b/src/include/uaeresource.h new file mode 100644 index 00000000..69af2a23 --- /dev/null +++ b/src/include/uaeresource.h @@ -0,0 +1,3 @@ + +uaecptr uaeres_startup (uaecptr resaddr); +void uaeres_install (void); \ No newline at end of file diff --git a/src/include/xwin.h b/src/include/xwin.h index efba50e4..b6969b36 100644 --- a/src/include/xwin.h +++ b/src/include/xwin.h @@ -11,6 +11,7 @@ typedef long int xcolnr; typedef int (*allocfunc_type)(int, int, int, xcolnr *); extern xcolnr xcolors[4096]; +extern uae_u32 p96_rgbx16[65536]; extern int buttonstate[3]; extern int newmousecounters; @@ -40,6 +41,7 @@ extern int mask_shift (unsigned long mask); extern unsigned int doMask (int p, int bits, int shift); extern unsigned int doMask256 (int p, int bits, int shift); extern void alloc_colors64k (int, int, int, int, int, int, int); +extern void alloc_colors_picasso (int rw, int gw, int bw, int rs, int gs, int bs, int rgbfmt); struct vidbuf_description { diff --git a/src/include/zfile.h b/src/include/zfile.h index e8ba3b98..f7d11a71 100644 --- a/src/include/zfile.h +++ b/src/include/zfile.h @@ -11,6 +11,7 @@ struct zvolume; typedef int (*zfile_callback)(struct zfile*, void*); extern struct zfile *zfile_fopen (const char *, const char *); +extern struct zfile *zfile_fopen_nozip (const char *, const char *); extern struct zfile *zfile_fopen_empty (const char *name, int size); extern struct zfile *zfile_fopen_data (const char *name, int size, uae_u8 *data); extern int zfile_exists (const char *name); @@ -48,6 +49,7 @@ extern int iszip (struct zfile *z); #define ZFILE_HDF 5 #define ZFILE_STATEFILE 6 #define ZFILE_NVR 7 +#define ZFILE_HDFRDB 8 extern const char *uae_archive_extensions[]; extern const char *uae_ignoreextensions[]; diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp index 9b19056c..7d905d94 100644 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -76,7 +76,6 @@ static int sprvbfl; int lastmx, lastmy; int newmousecounters; static int mouse_x, mouse_y; -static int ievent_alive = 0; static enum mousestate mousestate; @@ -146,11 +145,6 @@ int mousehack_get (void) return mousestate; } -int mousehack_alive (void) -{ - return ievent_alive > 0; -} - void togglemouse (void) { switch (mousestate) { @@ -175,11 +169,6 @@ void do_mouse_hack (void) int spr0y = ((spr0pos >> 8) | ((spr0ctl & 4) << 6)) << 1; int diffx, diffy; - if (ievent_alive > 0) - { - mouse_x = mouse_y = 0; - return; - } switch (mousestate) { case mousehack_normal: diffx = lastmx - lastsampledmx; @@ -336,9 +325,6 @@ void inputdevice_vsync (void) back_joy0button= joy0button; buttonstate[0]= joy0button & 0x01; } - - if (ievent_alive > 0) - ievent_alive--; } @@ -352,7 +338,6 @@ void inputdevice_reset (void) mousehack_set (mousehack_dontcare); else mousehack_set (mousehack_normal); - ievent_alive = 0; } void inputdevice_updateconfig (struct uae_prefs *prefs) diff --git a/src/codegen_arm.cpp b/src/jit/codegen_arm.cpp similarity index 100% rename from src/codegen_arm.cpp rename to src/jit/codegen_arm.cpp diff --git a/src/include/codegen_arm.h b/src/jit/codegen_arm.h similarity index 100% rename from src/include/codegen_arm.h rename to src/jit/codegen_arm.h diff --git a/src/compemu.cpp b/src/jit/compemu.cpp similarity index 99% rename from src/compemu.cpp rename to src/jit/compemu.cpp index fab286d5..6d12d54c 100644 --- a/src/compemu.cpp +++ b/src/jit/compemu.cpp @@ -19913,7 +19913,7 @@ unsigned long REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); @@ -19952,7 +19952,7 @@ unsigned long REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { @@ -19992,7 +19992,7 @@ unsigned long REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); @@ -20031,7 +20031,7 @@ unsigned long REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { @@ -20064,7 +20064,7 @@ unsigned long REGPARAM2 op_4cb8_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { @@ -20097,7 +20097,7 @@ unsigned long REGPARAM2 op_4cb9_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { @@ -20131,7 +20131,7 @@ unsigned long REGPARAM2 op_4cba_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -20167,7 +20167,7 @@ unsigned long REGPARAM2 op_4cbb_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -20208,7 +20208,7 @@ unsigned long REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); @@ -20246,7 +20246,7 @@ unsigned long REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { @@ -20285,7 +20285,7 @@ unsigned long REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); @@ -20323,7 +20323,7 @@ unsigned long REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { @@ -20355,7 +20355,7 @@ unsigned long REGPARAM2 op_4cf8_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { @@ -20387,7 +20387,7 @@ unsigned long REGPARAM2 op_4cf9_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { @@ -20420,7 +20420,7 @@ unsigned long REGPARAM2 op_4cfa_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -20455,7 +20455,7 @@ unsigned long REGPARAM2 op_4cfb_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -57536,7 +57536,7 @@ unsigned long REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); @@ -57575,7 +57575,7 @@ unsigned long REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { @@ -57615,7 +57615,7 @@ unsigned long REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); @@ -57654,7 +57654,7 @@ unsigned long REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { @@ -57687,7 +57687,7 @@ unsigned long REGPARAM2 op_4cb8_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { @@ -57720,7 +57720,7 @@ unsigned long REGPARAM2 op_4cb9_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { @@ -57754,7 +57754,7 @@ unsigned long REGPARAM2 op_4cba_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -57790,7 +57790,7 @@ unsigned long REGPARAM2 op_4cbb_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -57831,7 +57831,7 @@ unsigned long REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); @@ -57869,7 +57869,7 @@ unsigned long REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { @@ -57908,7 +57908,7 @@ unsigned long REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); @@ -57946,7 +57946,7 @@ unsigned long REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { @@ -57978,7 +57978,7 @@ unsigned long REGPARAM2 op_4cf8_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { @@ -58010,7 +58010,7 @@ unsigned long REGPARAM2 op_4cf9_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { @@ -58043,7 +58043,7 @@ unsigned long REGPARAM2 op_4cfa_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -58078,7 +58078,7 @@ unsigned long REGPARAM2 op_4cfb_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; - int offset=0; + signed char offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; diff --git a/src/include/compemu.h b/src/jit/compemu.h similarity index 94% rename from src/include/compemu.h rename to src/jit/compemu.h index 98fd444a..0b0bcba6 100644 --- a/src/include/compemu.h +++ b/src/jit/compemu.h @@ -50,6 +50,34 @@ typedef uae_u32 uintptr; #define USE_CHECKSUM_INFO 1 #endif +/* Flags for Bernie during development/debugging. Should go away eventually */ +#define DISTRUST_CONSISTENT_MEM 0 +#define TAGMASK 0x000fffff +#define TAGSIZE (TAGMASK+1) +#define MAXRUN 1024 + +extern uae_u8* start_pc_p; +extern uae_u32 start_pc; + +#define cacheline(x) (((uae_u32)x)&TAGMASK) + +typedef struct { + uae_u16* location; + uae_u8 cycles; + uae_u8 specmem; + uae_u8 dummy2; + uae_u8 dummy3; +} cpu_history; + +struct blockinfo_t; + +typedef union { + cpuop_func* handler; + struct blockinfo_t* bi; +} cacheline; + +extern signed long pissoff; + #define USE_ALIAS 1 #define USE_F_ALIAS 1 #define USE_OFFSET 0 diff --git a/src/compemu_fpp.cpp b/src/jit/compemu_fpp.cpp similarity index 100% rename from src/compemu_fpp.cpp rename to src/jit/compemu_fpp.cpp diff --git a/src/compemu_midfunc_arm.cpp b/src/jit/compemu_midfunc_arm.cpp similarity index 100% rename from src/compemu_midfunc_arm.cpp rename to src/jit/compemu_midfunc_arm.cpp diff --git a/src/include/compemu_midfunc_arm.h b/src/jit/compemu_midfunc_arm.h similarity index 100% rename from src/include/compemu_midfunc_arm.h rename to src/jit/compemu_midfunc_arm.h diff --git a/src/compemu_support.cpp b/src/jit/compemu_support.cpp similarity index 97% rename from src/compemu_support.cpp rename to src/jit/compemu_support.cpp index 1e370b14..4bc4c71c 100644 --- a/src/compemu_support.cpp +++ b/src/jit/compemu_support.cpp @@ -88,7 +88,7 @@ static int untranslated_compfn(const void *e1, const void *e2) // %%% BRIAN KING WAS HERE %%% #include - +extern void jit_abort(const char*,...); static compop_func *compfunctbl[65536]; static compop_func *nfcompfunctbl[65536]; #ifdef NOFLAGS_SUPPORT @@ -441,8 +441,7 @@ STATIC_INLINE void create_jmpdep(blockinfo* bi, int i, uae_u32* jmpaddr, uae_u32 blockinfo* tbi=get_blockinfo_addr((void*)(uintptr)target); Dif(!tbi) { - D(panicbug("Could not create jmpdep!\n")); - abort(); + jit_abort ("JIT: Could not create jmpdep!\n"); } bi->dep[i].jmp_off=jmpaddr; bi->dep[i].source=bi; @@ -480,8 +479,7 @@ STATIC_INLINE void mark_callers_recompile(blockinfo * bi) blockinfo *cbi = x->source; Dif(cbi->status == BI_INVALID) { - panicbug("invalid block in dependency list\n"); // FIXME? - abort(); + jit_abort("invalid block in dependency list\n"); // FIXME? } if (cbi->status == BI_ACTIVE || cbi->status == BI_NEED_CHECK) { block_need_recompile(cbi); @@ -522,8 +520,7 @@ STATIC_INLINE blockinfo* get_blockinfo_addr_new(void* addr, int setstate) } } if (!bi) { - panicbug("Looking for blockinfo, can't find free one\n"); - abort(); + jit_abort ("JIT: Looking for blockinfo, can't find free one\n"); } return bi; } @@ -581,8 +578,7 @@ T * LazyBlockAllocator::acquire() // chunks into the free list Pool * newPool = (Pool *)malloc(sizeof(Pool)); if (newPool == NULL) { - panicbug("FATAL: Could not allocate block pool!\n"); - abort(); + jit_abort("FATAL: Could not allocate block pool!\n"); } for (T * chunk = &newPool->chunk[0]; chunk < &newPool->chunk[kPoolSize]; chunk++) { chunk->next = mChunks; @@ -833,15 +829,6 @@ STATIC_INLINE void reset_data_buffer(void) ********************************************************************/ void emit_trace_pc(uae_u8 i); -#ifndef USE_ARMNEON -extern "C" { -void TRACE_Start(void) -{ -// TBD for non neon platform... -} -} -#endif - #if defined(CPU_arm) #include "codegen_arm.cpp" #else @@ -860,7 +847,9 @@ int start_trace = 0; void trace_func(void) { +#ifdef USE_ARMNEON TRACE_Start(); +#endif write_log("r0 =0x%08x, r1 =0x%08x, r2 =0x%08x, r3 =0x%08x\n", (&TRACE_mem)[0], (&TRACE_mem)[1], (&TRACE_mem)[2], (&TRACE_mem)[3]); write_log("r4 =0x%08x, r5 =0x%08x, r6 =0x%08x, r7 =0x%08x\n", (&TRACE_mem)[4], (&TRACE_mem)[5], (&TRACE_mem)[6], (&TRACE_mem)[7]); write_log("r8 =0x%08x, r9 =0x%08x, r10=0x%08x, r11=0x%08x\n", (&TRACE_mem)[8], (&TRACE_mem)[9], (&TRACE_mem)[10], (&TRACE_mem)[11]); @@ -923,8 +912,7 @@ static void make_flags_live_internal(void) if (live.flags_in_flags==VALID) return; Dif (live.flags_on_stack==TRASH) { - panicbug("Want flags, got something on stack, but it is TRASH\n"); - abort(); + jit_abort ("JIT: Want flags, got something on stack, but it is TRASH\n"); } if (live.flags_on_stack==VALID) { int tmp; @@ -935,9 +923,8 @@ static void make_flags_live_internal(void) live.flags_in_flags=VALID; return; } - panicbug("Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live\n", + jit_abort ("JIT: Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live\n", live.flags_in_flags,live.flags_on_stack); - abort(); } static void flags_to_stack(void) @@ -949,7 +936,7 @@ static void flags_to_stack(void) return; } Dif (live.flags_in_flags!=VALID) - abort(); + jit_abort("flags_to_stack != VALID"); else { int tmp; tmp=writereg_specific(FLAGTMP,4,FLAG_NREG1); @@ -1129,8 +1116,7 @@ STATIC_INLINE void writeback_const(int r) if (!isconst(r)) return; Dif (live.state[r].needflush==NF_HANDLER) { - panicbug("Trying to write back constant NF_HANDLER!\n"); - abort(); + jit_abort ("JIT: Trying to write back constant NF_HANDLER!\n"); } compemu_raw_mov_l_mi((uintptr)live.state[r].mem,live.state[r].val); @@ -1159,8 +1145,7 @@ static void evict(int r) Dif (live.nat[rr].locked && live.nat[rr].nholds==1) { - panicbug("register %d in nreg %d is locked!\n",r,live.state[r].realreg); - abort(); + jit_abort ("JIT: register %d in nreg %d is locked!\n",r,live.state[r].realreg); } live.nat[rr].nholds--; @@ -1187,8 +1172,7 @@ STATIC_INLINE void free_nreg(int r) evict(vr); } Dif (live.nat[r].nholds!=0) { - panicbug("Failed to free nreg %d, nholds is %d\n",r,live.nat[r].nholds); - abort(); + jit_abort ("JIT: Failed to free nreg %d, nholds is %d\n",r,live.nat[r].nholds); } } @@ -1251,7 +1235,7 @@ static int alloc_reg_hinted(int r, int size, int willclobber, int hint) } } Dif (bestreg==-1) - abort(); + jit_abort("alloc_reg_hinted bestreg=-1"); if (live.nat[bestreg].nholds>0) { free_nreg(bestreg); @@ -1261,9 +1245,9 @@ static int alloc_reg_hinted(int r, int size, int willclobber, int hint) /* This will happen if we read a partially dirty register at a bigger size */ Dif (willclobber || live.state[r].validsize>=size) - abort(); + jit_abort("willclobber || live.state[r].validsize>=size"); Dif (live.nat[rr].nholds!=1) - abort(); + jit_abort("live.nat[rr].nholds!=1"); if (size==4 && live.state[r].validsize==2) { log_isused(bestreg); log_visused(r); @@ -1351,7 +1335,7 @@ static int alloc_reg(int r, int size, int willclobber) static void unlock2(int r) { Dif (!live.nat[r].locked) - abort(); + jit_abort("unlock %d not locked", r); live.nat[r].locked--; } @@ -1417,9 +1401,8 @@ STATIC_INLINE void make_exclusive(int r, int size, int spec) } } Dif (live.nat[rr].nholds!=1) { - panicbug("natreg %d holds %d vregs, %d not exclusive\n", + jit_abort ("JIT: natreg %d holds %d vregs, %d not exclusive\n", rr,live.nat[rr].nholds,r); - abort(); } return; } @@ -1479,8 +1462,7 @@ STATIC_INLINE void remove_offset(int r, int spec) alloc_reg_hinted(r,4,0,spec); Dif (live.state[r].validsize!=4) { - panicbug("Validsize=%d in remove_offset\n",live.state[r].validsize); - abort(); + jit_abort ("JIT: Validsize=%d in remove_offset\n",live.state[r].validsize); } make_exclusive(r,0,-1); /* make_exclusive might have done the job already */ @@ -1497,8 +1479,7 @@ STATIC_INLINE void remove_offset(int r, int spec) set_status(r,DIRTY); return; } - panicbug("Failed in remove_offset\n"); - abort(); + jit_abort ("JIT: Failed in remove_offset\n"); } STATIC_INLINE void remove_all_offsets(void) @@ -1601,7 +1582,7 @@ STATIC_INLINE int writereg_general(int r, int size, int spec) n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) - abort(); + jit_abort("live.nat[%d].nholds!=1", n); switch(size) { case 1: if (live.nat[n].canbyte || spec>=0) { @@ -1648,8 +1629,7 @@ STATIC_INLINE int writereg_general(int r, int size, int spec) } else { Dif (live.state[r].val) { - panicbug("Problem with val\n"); - abort(); + jit_abort ("JIT: Problem with val\n"); } } set_status(r,DIRTY); @@ -1672,19 +1652,18 @@ STATIC_INLINE int rmw_general(int r, int wsize, int rsize, int spec) int answer=-1; if (live.state[r].status==UNDEF) { - D(panicbug("WARNING: Unexpected read of undefined register %d\n",r)); + D(panicbug("JIT: WARNING: Unexpected read of undefined register %d\n",r)); } remove_offset(r,spec); make_exclusive(r,0,spec); Dif (wsize=rsize) { n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) - abort(); + jit_abort("live.nat[n].nholds!=1", n); switch(rsize) { case 1: @@ -1726,8 +1705,7 @@ STATIC_INLINE int rmw_general(int r, int wsize, int rsize, int spec) live.nat[answer].touched=touchcnt++; Dif (live.state[r].val) { - D(panicbug("Problem with val(rmw)\n")); - abort(); + jit_abort ("JIT: Problem with val(rmw)\n"); } return answer; } @@ -1803,8 +1781,7 @@ static void f_evict(int r) Dif (live.fat[rr].locked && live.fat[rr].nholds==1) { - D(panicbug("FPU register %d in nreg %d is locked!\n",r,live.fate[r].realreg)); - abort(); + jit_abort ("JIT: FPU register %d in nreg %d is locked!\n",r,live.fate[r].realreg); } live.fat[rr].nholds--; if (live.fat[rr].nholds!=live.fate[r].realind) { /* Was not last */ @@ -1829,8 +1806,7 @@ STATIC_INLINE void f_free_nreg(int r) f_evict(vr); } Dif (live.fat[r].nholds!=0) { - D(panicbug("Failed to free nreg %d, nholds is %d\n",r,live.fat[r].nholds)); - abort(); + jit_abort ("JIT: Failed to free nreg %d, nholds is %d\n",r,live.fat[r].nholds); } } @@ -1906,7 +1882,7 @@ static int f_alloc_reg(int r, int willclobber) static void f_unlock(int r) { Dif (!live.fat[r].locked) - abort(); + jit_abort("unlock %d", r); live.fat[r].locked--; } @@ -1968,7 +1944,7 @@ STATIC_INLINE void f_make_exclusive(int r, int clobber) live.fate[live.fat[rr].holds[i]].realreg, live.fate[live.fat[rr].holds[i]].realind)); } - abort(); + jit_abort("x"); } return; } @@ -2080,8 +2056,7 @@ int kill_rodent(int r) uae_u32 get_const(int r) { Dif (!isconst(r)) { - D(panicbug("Register %d should be constant, but isn't\n",r)); - abort(); + jit_abort("Register %d should be constant, but isn't\n",r); } return live.state[r].val; } @@ -2916,7 +2891,7 @@ static void recompile_block(void) blockinfo* bi=get_blockinfo_addr(regs.pc_p); Dif (!bi) - abort(); + jit_abort("recompile_block"); raise_in_cl_list(bi); execute_normal(); return; @@ -2936,8 +2911,7 @@ static void cache_miss(void) } #if COMP_DEBUG Dif (!bi2 || bi==bi2) { - D(panicbug("Unexplained cache miss %p %p\n",bi,bi2)); - abort(); + jit_abort ("Unexplained cache miss %p %p\n",bi,bi2); } #endif raise_in_cl_list(bi); @@ -3528,14 +3502,15 @@ void compile_block(cpu_history* pc_hist, int blocklen, int totcycles) Dif (bi!=bi2) { /* I don't think it can happen anymore. Shouldn't, in any case. So let's make sure... */ - panicbug("WOOOWOO count=%d, ol=%d %p %p\n", bi->count,bi->optlevel,bi->handler_to_use, cache_tags[cl].handler); - abort(); + jit_abort ("JIT: WOOOWOO count=%d, ol=%d %p %p\n", + bi->count,bi->optlevel,bi->handler_to_use, + cache_tags[cl].handler); } Dif (bi->count!=-1 && bi->status!=BI_NEED_RECOMP) { panicbug("bi->count=%d, bi->status=%d,bi->optlevel=%d\n",bi->count,bi->status,bi->optlevel); /* What the heck? We are not supposed to be here! */ - abort(); + jit_abort("BI_TARGETTED"); } } if (bi->count==-1) { diff --git a/src/compstbl.cpp b/src/jit/compstbl.cpp similarity index 98% rename from src/compstbl.cpp rename to src/jit/compstbl.cpp index 94ffaac0..1b9573bb 100644 --- a/src/compstbl.cpp +++ b/src/jit/compstbl.cpp @@ -1809,17 +1809,17 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000000, 61424 }, /* BFINS */ { NULL, 0x00000000, 61432 }, /* BFINS */ { NULL, 0x00000000, 61433 }, /* BFINS */ -{ NULL, 0x00000001, 61440 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61448 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61456 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61464 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61472 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61480 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61488 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61496 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61497 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61498 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61499 }, /* MMUOP30A */ +{ NULL, 0x00000001, 61440 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61448 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61456 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61464 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61472 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61480 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61488 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61496 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61497 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61498 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61499 }, /* MMUOP030 */ { NULL, 0x00000020, 61952 }, /* FPP */ { NULL, 0x00000020, 61960 }, /* FPP */ { NULL, 0x00000020, 61968 }, /* FPP */ @@ -1880,23 +1880,20 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 62525 }, /* CPUSHA */ { NULL, 0x00000001, 62526 }, /* CPUSHA */ { NULL, 0x00000001, 62527 }, /* CPUSHA */ -{ NULL, 0x00000001, 62720 }, /* MMUOP */ +{ NULL, 0x00000001, 62720 }, /* PFLUSHN */ +{ NULL, 0x00000001, 62728 }, /* PFLUSH */ +{ NULL, 0x00000001, 62736 }, /* PFLUSHAN */ +{ NULL, 0x00000001, 62744 }, /* PFLUSHA */ +{ NULL, 0x00000001, 62792 }, /* PTESTR */ +{ NULL, 0x00000001, 62824 }, /* PTESTW */ +{ NULL, 0x00000001, 62856 }, /* PLPAR */ +{ NULL, 0x00000001, 62920 }, /* PLPAW */ { op_f600_0_comp_ff, 0x00000002, 62976 }, /* MOVE16 */ { op_f608_0_comp_ff, 0x00000002, 62984 }, /* MOVE16 */ { op_f610_0_comp_ff, 0x00000002, 62992 }, /* MOVE16 */ { op_f618_0_comp_ff, 0x00000002, 63000 }, /* MOVE16 */ { op_f620_0_comp_ff, 0x00000002, 63008 }, /* MOVE16 */ -{ NULL, 0x00000001, 63488 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63496 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63504 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63512 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63520 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63528 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63536 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63544 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63545 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63546 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63547 }, /* MMUOP30B */ +{ NULL, 0x00000001, 63488 }, /* LPSTOP */ { 0, 0,65536 }}; extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_0_0_comp_nf, 0x00000002, 0 }, /* OR */ @@ -3699,17 +3696,17 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000000, 61424 }, /* BFINS */ { NULL, 0x00000000, 61432 }, /* BFINS */ { NULL, 0x00000000, 61433 }, /* BFINS */ -{ NULL, 0x00000001, 61440 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61448 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61456 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61464 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61472 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61480 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61488 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61496 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61497 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61498 }, /* MMUOP30A */ -{ NULL, 0x00000001, 61499 }, /* MMUOP30A */ +{ NULL, 0x00000001, 61440 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61448 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61456 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61464 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61472 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61480 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61488 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61496 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61497 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61498 }, /* MMUOP030 */ +{ NULL, 0x00000001, 61499 }, /* MMUOP030 */ { NULL, 0x00000020, 61952 }, /* FPP */ { NULL, 0x00000020, 61960 }, /* FPP */ { NULL, 0x00000020, 61968 }, /* FPP */ @@ -3770,22 +3767,19 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 62525 }, /* CPUSHA */ { NULL, 0x00000001, 62526 }, /* CPUSHA */ { NULL, 0x00000001, 62527 }, /* CPUSHA */ -{ NULL, 0x00000001, 62720 }, /* MMUOP */ +{ NULL, 0x00000001, 62720 }, /* PFLUSHN */ +{ NULL, 0x00000001, 62728 }, /* PFLUSH */ +{ NULL, 0x00000001, 62736 }, /* PFLUSHAN */ +{ NULL, 0x00000001, 62744 }, /* PFLUSHA */ +{ NULL, 0x00000001, 62792 }, /* PTESTR */ +{ NULL, 0x00000001, 62824 }, /* PTESTW */ +{ NULL, 0x00000001, 62856 }, /* PLPAR */ +{ NULL, 0x00000001, 62920 }, /* PLPAW */ { op_f600_0_comp_nf, 0x00000002, 62976 }, /* MOVE16 */ { op_f608_0_comp_nf, 0x00000002, 62984 }, /* MOVE16 */ { op_f610_0_comp_nf, 0x00000002, 62992 }, /* MOVE16 */ { op_f618_0_comp_nf, 0x00000002, 63000 }, /* MOVE16 */ { op_f620_0_comp_nf, 0x00000002, 63008 }, /* MOVE16 */ -{ NULL, 0x00000001, 63488 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63496 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63504 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63512 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63520 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63528 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63536 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63544 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63545 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63546 }, /* MMUOP30B */ -{ NULL, 0x00000001, 63547 }, /* MMUOP30B */ +{ NULL, 0x00000001, 63488 }, /* LPSTOP */ { 0, 0,65536 }}; #endif diff --git a/src/include/comptbl.h b/src/jit/comptbl.h similarity index 100% rename from src/include/comptbl.h rename to src/jit/comptbl.h diff --git a/src/gencomp.c b/src/jit/gencomp.c similarity index 98% rename from src/gencomp.c rename to src/jit/gencomp.c index 183d27c5..c8529767 100644 --- a/src/gencomp.c +++ b/src/jit/gencomp.c @@ -2797,9 +2797,16 @@ gen_opcode (unsigned long int opcode) genmov16(opcode,curi); break; - case i_MMUOP: - case i_MMUOP30A: - case i_MMUOP30B: + case i_MMUOP030: + case i_PFLUSHN: + case i_PFLUSH: + case i_PFLUSHAN: + case i_PFLUSHA: + case i_PLPAR: + case i_PLPAW: + case i_PTESTR: + case i_PTESTW: + case i_LPSTOP: isjump; failure; break; @@ -3076,19 +3083,19 @@ main (int argc, char **argv) read_table68k (); do_merges (); - opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); + opcode_map = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_last_postfix = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_next_clev = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + counts = (unsigned long *) malloc (65536 * sizeof (unsigned long)); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of * cputbl.h that way), but cpuopti can't cope. That could be fixed, but * I don't dare to touch the 68k version. */ - headerfile = fopen ("comptbl.h", "wb"); - stblfile = fopen ("compstbl.c", "wb"); - freopen ("compemu.c", "wb", stdout); + headerfile = fopen ("jit/comptbl.h", "wb"); + stblfile = fopen ("jit/compstbl.c", "wb"); + freopen ("jit/compemu.c", "wb", stdout); generate_includes (stdout); generate_includes (stblfile); @@ -3098,23 +3105,23 @@ main (int argc, char **argv) noflags=0; generate_func (noflags); - xfree(opcode_map); - xfree(opcode_last_postfix); - xfree(opcode_next_clev); - xfree(counts); + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); - opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); + opcode_map = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_last_postfix = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_next_clev = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + counts = (unsigned long *) malloc (65536 * sizeof (unsigned long)); read_counts (); noflags=1; generate_func (noflags); - xfree(opcode_map); - xfree(opcode_last_postfix); - xfree(opcode_next_clev); - xfree(counts); + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); printf ("#endif\n"); fprintf (stblfile, "#endif\n"); diff --git a/src/gencomp_arm.c b/src/jit/gencomp_arm.c similarity index 98% rename from src/gencomp_arm.c rename to src/jit/gencomp_arm.c index ee8404ab..b68ad403 100644 --- a/src/gencomp_arm.c +++ b/src/jit/gencomp_arm.c @@ -610,7 +610,8 @@ static void genmov16(uae_u32 opcode, struct instr *curi) comprintf("\tuae_u16 dstreg=((%s)>>12)&0x07;\n", gen_nextiword()); comprintf("\tmov_l_rr(src,8+srcreg);\n"); comprintf("\tmov_l_rr(dst,8+dstreg);\n"); - } else { + } + else { /* Other variants */ genamode (curi->smode, "srcreg", curi->size, "src", 0, 2); genamode (curi->dmode, "dstreg", curi->size, "dst", 0, 2); @@ -626,7 +627,8 @@ static void genmov16(uae_u32 opcode, struct instr *curi) comprintf("\tif (srcreg != dstreg)\n"); comprintf("\tarm_ADD_l_ri8(srcreg+8,16);\n"); comprintf("\tarm_ADD_l_ri8(dstreg+8,16);\n"); - } else if ((opcode & 0xfff8) == 0xf600) + } + else if ((opcode & 0xfff8) == 0xf600) comprintf("\tarm_ADD_l_ri8(srcreg+8,16);\n"); else if ((opcode & 0xfff8) == 0xf608) comprintf("\tarm_ADD_l_ri8(dstreg+8,16);\n"); @@ -673,7 +675,7 @@ genmovemel (uae_u16 opcode) comprintf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); comprintf ("\tint native=scratchie++;\n"); comprintf ("\tint i;\n"); - comprintf ("\tint offset=0;\n"); + comprintf ("\tsigned char offset=0;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); comprintf("\tif (1 && !special_mem) {\n"); @@ -768,7 +770,8 @@ genmovemle (uae_u16 opcode) break; default: abort(); } - } else { /* Pre-decrement */ + } + else { /* Pre-decrement */ comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { @@ -869,8 +872,8 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) { char* op; switch(type) { - case flag_add: op="add"; break; - case flag_sub: op="sub"; break; + case flag_add: op="add"; break; // nf + case flag_sub: op="sub"; break; // nf default: abort(); } switch (size) @@ -896,7 +899,7 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) case sz_byte: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); - comprintf("\tor_l_ri(scratchie,0xffffff00);\n"); + comprintf("\tor_l_ri(scratchie,0xffffff00);\n"); // nf comprintf("\tarm_AND_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" @@ -905,7 +908,7 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) case sz_word: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_16_rr(scratchie,%s);\n",src); - comprintf("\tor_l_ri(scratchie,0xffff0000);\n"); + comprintf("\tor_l_ri(scratchie,0xffff0000);\n"); // nf comprintf("\tarm_AND_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" @@ -924,7 +927,7 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) case sz_byte: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); - comprintf("\tand_l_ri(%s,0xffffff00);\n",dst); + comprintf("\tand_l_ri(%s,0xffffff00);\n",dst); // nf comprintf("\tarm_ORR_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" @@ -933,7 +936,7 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) case sz_word: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_16_rr(scratchie,%s);\n",src); - comprintf("\tand_l_ri(%s,0xffff0000);\n",dst); + comprintf("\tand_l_ri(%s,0xffff0000);\n",dst); // nf comprintf("\tarm_ORR_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" @@ -952,8 +955,8 @@ genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) { char* op; switch(type) { - case flag_or: op="ORR"; break; - case flag_eor: op="EOR"; break; + case flag_or: op="ORR"; break; // nf + case flag_eor: op="EOR"; break; // nf default: abort(); } switch (size) @@ -1749,7 +1752,8 @@ gen_opcode (unsigned long int opcode) default: abort(); /* Seems this only comes in word flavour */ } comprintf("\tsub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); - comprintf("\tarm_ADD_l_ri(offs,(uintptr)comp_pc_p);\n"); /* New PC, + comprintf("\tarm_ADD_l_ri(offs,(uintptr)comp_pc_p);\n"); + /* New PC, once the offset_68k is * also added */ @@ -2747,9 +2751,16 @@ gen_opcode (unsigned long int opcode) genmov16(opcode,curi); break; - case i_MMUOP: - case i_MMUOP30A: - case i_MMUOP30B: + case i_MMUOP030: + case i_PFLUSHN: + case i_PFLUSH: + case i_PFLUSHAN: + case i_PFLUSHA: + case i_PLPAR: + case i_PLPAW: + case i_PTESTR: + case i_PTESTW: + case i_LPSTOP: isjump; failure; break; @@ -3027,19 +3038,19 @@ main (int argc, char **argv) read_table68k (); do_merges (); - opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); + opcode_map = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_last_postfix = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_next_clev = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + counts = (unsigned long *) malloc (65536 * sizeof (unsigned long)); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of * cputbl.h that way), but cpuopti can't cope. That could be fixed, but * I don't dare to touch the 68k version. */ - headerfile = fopen ("comptbl.h", "wb"); - stblfile = fopen ("compstbl.cpp", "wb"); - freopen ("compemu.cpp", "wb", stdout); + headerfile = fopen ("jit/comptbl.h", "wb"); + stblfile = fopen ("jit/compstbl.cpp", "wb"); + freopen ("jit/compemu.cpp", "wb", stdout); generate_includes (stdout); generate_includes (stblfile); @@ -3049,23 +3060,23 @@ main (int argc, char **argv) noflags=0; generate_func (noflags); - xfree(opcode_map); - xfree(opcode_last_postfix); - xfree(opcode_next_clev); - xfree(counts); + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); - opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); - counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); + opcode_map = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_last_postfix = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + opcode_next_clev = (int *) malloc (sizeof (int) * nr_cpuop_funcs); + counts = (unsigned long *) malloc (65536 * sizeof (unsigned long)); read_counts (); noflags=1; generate_func (noflags); - xfree(opcode_map); - xfree(opcode_last_postfix); - xfree(opcode_next_clev); - xfree(counts); + free(opcode_map); + free(opcode_last_postfix); + free(opcode_next_clev); + free(counts); printf ("#endif\n"); fprintf (stblfile, "#endif\n"); diff --git a/src/linetoscr.c b/src/linetoscr.c index bc90a0c5..66760e27 100644 --- a/src/linetoscr.c +++ b/src/linetoscr.c @@ -409,7 +409,7 @@ static int NOINLINE linetoscr_16_shrink1 (int spix, int dpix, int stoppos) static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) { uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = (uae_u8)(dp_for_drawing->bplcon4 >> 8); + uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; @@ -453,7 +453,6 @@ static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) uae_u32 dpix_val; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -477,7 +476,6 @@ static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) if (spritepixels[spix]) { out_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -489,7 +487,6 @@ static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) spix++; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -514,7 +511,6 @@ static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) uae_u32 dpix_val; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -628,7 +624,7 @@ static int NOINLINE linetoscr_16_aga (int spix, int dpix, int stoppos) static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int stoppos) { uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = (uae_u8)(dp_for_drawing->bplcon4 >> 8); + uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < stoppos) { @@ -656,7 +652,6 @@ static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int stoppos) if (spritepixels[spix]) { out_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -724,7 +719,7 @@ static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int stoppos) static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int stoppos) { uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = (uae_u8)(dp_for_drawing->bplcon4 >> 8); + uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; @@ -768,7 +763,6 @@ static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int stoppos) uae_u32 dpix_val; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -792,7 +786,6 @@ static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int stoppos) if (spritepixels[spix]) { out_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -804,7 +797,6 @@ static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int stoppos) spix += 2; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; @@ -829,7 +821,6 @@ static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int stoppos) uae_u32 dpix_val; if (spritepixels[spix]) { dpix_val = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix] = 0; } else { spix_val = pixdata.apixels[spix]; unsigned int val = lookup[spix_val]; diff --git a/src/linetoscr.h b/src/linetoscr.h deleted file mode 100644 index 7f29509b..00000000 --- a/src/linetoscr.h +++ /dev/null @@ -1,110 +0,0 @@ - -static __inline__ int LNAME (int spix, int dpix, int stoppos) -{ - TYPE *buf = ((TYPE *)xlinebuffer); -#if AGA_LTS - uae_u8 xor_val; -#endif - -#if AGA_LTS - xor_val = (uae_u8)(dp_for_drawing->bplcon4 >> 8); -#endif - if (dp_for_drawing->ham_seen) { - /* HAM 6 / HAM 8 */ - while (dpix < stoppos) { -#if AGA_LTS - TYPE d = CONVERT_RGB (ham_linebuf[spix]); -#else - TYPE d = xcolors[ham_linebuf[spix]]; -#endif - spix += SRC_INC; - buf[dpix++] = d; -#if HDOUBLE - buf[dpix++] = d; -#endif - } - } else if (bpldualpf) { -#if AGA_LTS - /* AGA Dual playfield */ - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < stoppos) { - int pixcol = pixdata.apixels[spix]; - TYPE d; - if (spritepixels[spix]) { - d = colors_for_drawing.acolors[spritepixels[spix]]; - spritepixels[spix]=0; - } else { - int val = lookup[pixcol]; - if (lookup_no[pixcol] == 2) val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - d = colors_for_drawing.acolors[val]; - } - spix += SRC_INC; - buf[dpix++] = d; -#if HDOUBLE - buf[dpix++] = d; -#endif - } -#else - /* OCS/ECS Dual playfield */ - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < stoppos) { - int pixcol = pixdata.apixels[spix]; - TYPE d = colors_for_drawing.acolors[lookup[pixcol]]; - spix += SRC_INC; - buf[dpix++] = d; -#if HDOUBLE - buf[dpix++] = d; -#endif - } -#endif - } else if (bplehb) { - while (dpix < stoppos) { -#if AGA_LTS - /* AGA EHB playfield */ - int p = pixdata.apixels[spix]^xor_val; - TYPE d; - spix += SRC_INC; - if (p>= 32 && p < 64) { - int c = (colors_for_drawing.color_regs_aga[(p-32)] >> 1) & 0x7F7F7F; - d = CONVERT_RGB(c); - } - else - d = colors_for_drawing.acolors[p]; -#else - /* OCS/ECS EHB playfield */ - int p = pixdata.apixels[spix]; - TYPE d; - spix += SRC_INC; - if (p >= 32) - d = xcolors[(colors_for_drawing.color_regs_ecs[p-32] >> 1) & 0x777]; - else - d = colors_for_drawing.acolors[p]; -#endif - buf[dpix++] = d; -#if HDOUBLE - buf[dpix++] = d; -#endif - } - } else { - while (dpix < stoppos) { -#if AGA_LTS - TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]^xor_val]; -#else - TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]]; -#endif - spix += SRC_INC; - buf[dpix++] = d; -#if HDOUBLE - buf[dpix++] = d; -#endif - } - } - return spix; -} - -#undef LNAME -#undef HDOUBLE -#undef SRC_INC -#undef AGA_LTS diff --git a/src/main.cpp b/src/main.cpp index c784771d..d3f93e5c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,8 +34,9 @@ #include "native2amiga.h" #include "savestate.h" #include "filesys.h" +#include "uaeresource.h" #ifdef JIT -#include "compemu.h" +#include "jit/compemu.h" #endif #ifdef USE_SDL @@ -47,6 +48,7 @@ struct uae_prefs currprefs, changed_prefs; int no_gui = 0; int cloanto_rom = 0; +int kickstart_rom = 1; struct gui_info gui_data; @@ -66,9 +68,9 @@ void discard_prefs (struct uae_prefs *p, int type) while (*ps) { struct strlist *s = *ps; *ps = s->next; - free (s->value); - free (s->option); - free (s); + xfree (s->value); + xfree (s->option); + xfree (s); } #ifdef FILESYS filesys_cleanup (); @@ -96,11 +98,13 @@ void fixup_cpu(struct uae_prefs *p) { case 68000: p->address_space_24 = 1; - p->fpu_model = 0; + if (p->cpu_compatible) + p->fpu_model = 0; break; case 68010: p->address_space_24 = 1; - p->fpu_model = 0; + if (p->cpu_compatible) + p->fpu_model = 0; break; case 68020: break; @@ -127,7 +131,7 @@ void fixup_prefs (struct uae_prefs *p) fixup_cpu(p); - if ((p->chipmem_size & (p->chipmem_size - 1)) != 0 + if (((p->chipmem_size & (p->chipmem_size - 1)) != 0 && p->chipmem_size != 0x180000) || p->chipmem_size < 0x20000 || p->chipmem_size > 0x800000) { @@ -308,6 +312,9 @@ extern int debug_frame_end; } else if (strncmp (argv[i], "-config=", 8) == 0) { currprefs.mountitems = 0; target_cfgfile_load (&currprefs, argv[i] + 8, -1, 1); + } else if (strncmp (argv[i], "-statefile=", 11) == 0) { + savestate_state = STATE_DORESTORE; + strcpy (savestate_fname, argv[++i]); } /* Check for new-style "-f xxx" argument, where xxx is config-file */ else if (strcmp (argv[i], "-f") == 0) { @@ -350,6 +357,10 @@ static void parse_cmdline_and_init_file (int argc, char **argv) void reset_all_systems (void) { init_eventtab (); + +#ifdef PICASSO96 + picasso_reset (); +#endif #ifdef FILESYS filesys_prepare_reset (); filesys_reset (); @@ -489,6 +500,7 @@ static void real_main2 (int argc, char **argv) #endif #ifdef FILESYS rtarea_init (); + uaeres_install (); hardfile_install(); #endif keybuf_init (); /* Must come after init_joystick */ diff --git a/src/md-pandora/maccess.h b/src/md-pandora/maccess.h index 77d0339b..1d12787f 100644 --- a/src/md-pandora/maccess.h +++ b/src/md-pandora/maccess.h @@ -106,4 +106,6 @@ STATIC_INLINE void do_put_mem_byte(uae_u8 *_GCCRES_ a, uae_u8 v) #undef MD_HAVE_MEM_1_FUNCS +#define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3) + #endif diff --git a/src/md-pandora/rpt.h b/src/md-pandora/rpt.h index 7bb051fb..73d76887 100644 --- a/src/md-pandora/rpt.h +++ b/src/md-pandora/rpt.h @@ -13,6 +13,7 @@ typedef unsigned long frame_time_t; extern int64_t g_uae_epoch; +/* Returns elapsed time in microseconds since start of emulator. */ static __inline__ frame_time_t read_processor_time (void) { int64_t time; diff --git a/src/memory.cpp b/src/memory.cpp index ddfe7325..b99c33a0 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -54,18 +54,20 @@ static int last_address_space_24; static struct romlist *rl; static int romlist_cnt; -void romlist_add (char *path, struct romdata *rd) +char *romlist_get (struct romdata *rd) { - struct romlist *rl2; + int i; - romlist_cnt++; - rl = (struct romlist *) realloc (rl, sizeof (struct romlist) * romlist_cnt); - rl2 = rl + romlist_cnt - 1; - rl2->path = my_strdup (path); - rl2->rd = rd; + if (!rd) + return 0; + for (i = 0; i < romlist_cnt; i++) { + if (rl[i].rd->id == rd->id) + return rl[i].path; + } + return 0; } -char *romlist_get (struct romdata *rd) +static struct romlist *romlist_getrl (struct romdata *rd) { int i; @@ -73,18 +75,28 @@ char *romlist_get (struct romdata *rd) return 0; for (i = 0; i < romlist_cnt; i++) { if (rl[i].rd == rd) - return rl[i].path; + return &rl[i]; } return 0; } -void romlist_clear (void) +static void romlist_cleanup (void); +void romlist_add (char *path, struct romdata *rd) { - xfree (rl); - rl = 0; - romlist_cnt = 0; + struct romlist *rl2; + + if (path == NULL || rd == NULL) { + romlist_cleanup (); + return; + } + romlist_cnt++; + rl = (struct romlist *)realloc (rl, sizeof (struct romlist) * romlist_cnt); + rl2 = rl + romlist_cnt - 1; + rl2->path = my_strdup (path); + rl2->rd = rd; } + struct romdata *getromdatabypath(char *path) { int i; @@ -109,146 +121,185 @@ static struct romheader romheaders[] = { }; #define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \ - { "X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, crc32, a, b, c, d, e }, + { "X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e }, +#define ALTROMPN(id,grp,num,size,flags,pn,crc32,a,b,c,d,e) \ + { "X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e }, static struct romdata roms[] = { - { "Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, + { "Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL, 0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 }, - { "Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, + { "Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL, 0xb01c4b56, 0xbba8e5cd,0x118b8d92,0xafed5693,0x5eeb9770,0x2a662d8f }, - { "KS ROM v1.0 (A1000)(NTSC)", 1, 0, 1, 0, "A1000\0", 262144, 1, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.0 (A1000)(NTSC)", 1, 0, 1, 0, "A1000\0", 262144, 1, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x299790ff, 0x00C15406,0xBEB4B8AB,0x1A16AA66,0xC05860E1,0xA7C1AD79 }, - { "KS ROM v1.1 (A1000)(NTSC)", 1, 1, 31, 34, "A1000\0", 262144, 2, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.1 (A1000)(NTSC)", 1, 1, 31, 34, "A1000\0", 262144, 2, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xd060572a, 0x4192C505,0xD130F446,0xB2ADA6BD,0xC91DAE73,0x0ACAFB4C}, - { "KS ROM v1.1 (A1000)(PAL)", 1, 1, 31, 34, "A1000\0", 262144, 3, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.1 (A1000)(PAL)", 1, 1, 31, 34, "A1000\0", 262144, 3, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xec86dae2, 0x16DF8B5F,0xD524C5A1,0xC7584B24,0x57AC15AF,0xF9E3AD6D }, - { "KS ROM v1.2 (A1000)", 1, 2, 33, 166, "A1000\0", 262144, 4, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.2 (A1000)", 1, 2, 33, 166, "A1000\0", 262144, 4, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x9ed783d0, 0x6A7BFB5D,0xBD6B8F17,0x9F03DA84,0xD8D95282,0x67B6273B }, - { "KS ROM v1.2 (A500,A1000,A2000)", 1, 2, 33, 180, "A500\0A1000\0A2000\0", 262144, 5, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.2 (A500,A1000,A2000)", 1, 2, 33, 180, "A500\0A1000\0A2000\0", 262144, 5, 0, 0, ROMTYPE_KICK, 0, 0, "315093-01", 0xa6ce1636, 0x11F9E62C,0xF299F721,0x84835B7B,0x2A70A163,0x33FC0D88 }, - { "KS ROM v1.3 (A500,A1000,A2000)", 1, 3, 34, 5, "A500\0A1000\0A2000\0", 262144, 6, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.3 (A500,A1000,A2000)", 1, 3, 34, 5, "A500\0A1000\0A2000\0", 262144, 6, 0, 0, ROMTYPE_KICK, 0, 0, "315093-02", 0xc4f0f55f, 0x891E9A54,0x7772FE0C,0x6C19B610,0xBAF8BC4E,0xA7FCB785 }, - { "KS ROM v1.3 (A3000)(SK)", 1, 3, 34, 5, "A3000\0", 262144, 32, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.3 (A3000)(SK)", 1, 3, 34, 5, "A3000\0", 262144, 32, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xe0f37258, 0xC39BD909,0x4D4E5F4E,0x28C1411F,0x30869504,0x06062E87 }, - { "KS ROM v1.4 (A3000)", 1, 4, 36, 16, "A3000\0", 524288, 59, 3, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v1.4 (A3000)", 1, 4, 36, 16, "A3000\0", 524288, 59, 3, 0, ROMTYPE_KICK, 0, 0, NULL, 0xbc0ec13f, 0xF76316BF,0x36DFF14B,0x20FA349E,0xD02E4B11,0xDD932B07 }, - - { "KS ROM v2.04 (A500+)", 2, 4, 37, 175, "A500+\0", 524288, 7, 0, 0, ROMTYPE_KICK, 0, 0, + ALTROMPN(59, 1, 1, 262144, ROMTYPE_EVEN, "390629-02", 0x58327536,0xd1713d7f,0x31474a59,0x48e6d488,0xe3368606,0x1cf3d1e2) + ALTROMPN(59, 1, 2, 262144, ROMTYPE_ODD , "390630-02", 0xfe2f7fb9,0xc05c9c52,0xd014c66f,0x9019152b,0x3f2a2adc,0x2c678794) + { "KS ROM v2.04 (A500+)", 2, 4, 37, 175, "A500+\0", 524288, 7, 0, 0, ROMTYPE_KICK, 0, 0, "390979-01", 0xc3bdb240, 0xC5839F5C,0xB98A7A89,0x47065C3E,0xD2F14F5F,0x42E334A1 }, - { "KS ROM v2.05 (A600)", 2, 5, 37, 299, "A600\0", 524288, 8, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v2.05 (A600)", 2, 5, 37, 299, "A600\0", 524288, 8, 0, 0, ROMTYPE_KICK, 0, 0, "391388-01", 0x83028fb5, 0x87508DE8,0x34DC7EB4,0x7359CEDE,0x72D2E3C8,0xA2E5D8DB }, - { "KS ROM v2.05 (A600HD)", 2, 5, 37, 300, "A600HD\0A600\0", 524288, 9, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v2.05 (A600HD)", 2, 5, 37, 300, "A600HD\0A600\0", 524288, 9, 0, 0, ROMTYPE_KICK, 0, 0, "391304-01", 0x64466c2a, 0xF72D8914,0x8DAC39C6,0x96E30B10,0x859EBC85,0x9226637B }, - { "KS ROM v2.05 (A600HD)", 2, 5, 37, 350, "A600HD\0A600\0", 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v2.05 (A600HD)", 2, 5, 37, 350, "A600HD\0A600\0", 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, "391304-02", 0x43b0df7b, 0x02843C42,0x53BBD29A,0xBA535B0A,0xA3BD9A85,0x034ECDE4 }, - { "KS ROM v2.04 (A3000)", 2, 4, 37, 132, "A3000\0", 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v2.04 (A3000)", 2, 4, 37, 175, "A3000\0", 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, NULL, 0x234a7233, 0xd82ebb59,0xafc53540,0xddf2d718,0x7ecf239b,0x7ea91590 }, - ALTROM(71, 1, 1, 262144, ROMTYPE_EVEN, 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c) - ALTROM(71, 1, 2, 262144, ROMTYPE_ODD , 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f) + ALTROMPN(71, 1, 1, 262144, ROMTYPE_EVEN, "390629-03", 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c) + ALTROMPN(71, 1, 2, 262144, ROMTYPE_ODD , "390630-03", 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f) - { "KS ROM v3.0 (A1200)", 3, 0, 39, 106, "A1200\0", 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v3.0 (A1200)", 3, 0, 39, 106, "A1200\0", 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x6c9b07d2, 0x70033828,0x182FFFC7,0xED106E53,0x73A8B89D,0xDA76FAA5 }, - { "KS ROM v3.0 (A4000)", 3, 0, 39, 106, "A4000\0", 524288, 12, 2 | 4, 0, ROMTYPE_KICK, 0, 0, + ALTROMPN(11, 1, 1, 262144, ROMTYPE_EVEN, "391523-01", 0xc742a412,0x999eb81c,0x65dfd07a,0x71ee1931,0x5d99c7eb,0x858ab186) + ALTROMPN(11, 1, 2, 262144, ROMTYPE_ODD , "391524-01", 0xd55c6ec6,0x3341108d,0x3a402882,0xb5ef9d3b,0x242cbf3c,0x8ab1a3e9) + { "KS ROM v3.0 (A4000)", 3, 0, 39, 106, "A4000\0", 524288, 12, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x9e6ac152, 0xF0B4E9E2,0x9E12218C,0x2D5BD702,0x0E4E7852,0x97D91FD7 }, - { "KS ROM v3.1 (A4000)", 3, 1, 40, 70, "A4000\0", 524288, 13, 2 | 4, 0, ROMTYPE_KICK, 0, 0, + ALTROMPN(12, 1, 1, 262144, ROMTYPE_EVEN, "391513-02", 0x36f64dd0,0x196e9f3f,0x9cad934e,0x181c07da,0x33083b1f,0x0a3c702f) + ALTROMPN(12, 1, 2, 262144, ROMTYPE_ODD , "391514-02", 0x17266a55,0x42fbed34,0x53d1f11c,0xcbde89a9,0x826f2d11,0x75cca5cc) + { "KS ROM v3.1 (A4000)", 3, 1, 40, 70, "A4000\0", 524288, 13, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x2b4566f1, 0x81c631dd,0x096bbb31,0xd2af9029,0x9c76b774,0xdb74076c }, - { "KS ROM v3.1 (A500,A600,A2000)", 3, 1, 40, 63, "A500\0A600\0A2000\0", 524288, 14, 0, 0, ROMTYPE_KICK, 0, 0, + ALTROM(13, 1, 1, 262144, ROMTYPE_EVEN, 0xf9cbecc9,0x138d8cb4,0x3b8312fe,0x16d69070,0xde607469,0xb3d4078e) + ALTROM(13, 1, 2, 262144, ROMTYPE_ODD , 0xf8248355,0xc2379547,0x9fae3910,0xc185512c,0xa268b82f,0x1ae4fe05) + { "KS ROM v3.1 (A500,A600,A2000)", 3, 1, 40, 63, "A500\0A600\0A2000\0", 524288, 14, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xfc24ae0d, 0x3B7F1493,0xB27E2128,0x30F989F2,0x6CA76C02,0x049F09CA }, - { "KS ROM v3.1 (A1200)", 3, 1, 40, 68, "A1200\0", 524288, 15, 1, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v3.1 (A1200)", 3, 1, 40, 68, "A1200\0", 524288, 15, 1, 0, ROMTYPE_KICK, 0, 0, NULL, 0x1483a091, 0xE2154572,0x3FE8374E,0x91342617,0x604F1B3D,0x703094F1 }, - { "KS ROM v3.1 (A3000)", 3, 1, 40, 68, "A3000\0", 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, + ALTROMPN(15, 1, 1, 262144, ROMTYPE_EVEN, "391773-01", 0x08dbf275,0xb8800f5f,0x90929810,0x9ea69690,0xb1b8523f,0xa22ddb37) + ALTROMPN(15, 1, 2, 262144, ROMTYPE_ODD , "391774-01", 0x16c07bf8,0x90e331be,0x1970b0e5,0x3f53a9b0,0x390b51b5,0x9b3869c2) + { "KS ROM v3.1 (A3000)", 3, 1, 40, 68, "A3000\0", 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL, 0xefb239cc, 0xF8E210D7,0x2B4C4853,0xE0C9B85D,0x223BA20E,0x3D1B36EE }, - { "KS ROM v3.1 (A4000)(Cloanto)", 3, 1, 40, 68, "A4000\0", 524288, 31, 2 | 4, 1, ROMTYPE_KICK, 0, 0, + ALTROM(61, 1, 1, 262144, ROMTYPE_EVEN, 0x286b9a0d,0x6763a225,0x8ec493f7,0x408cf663,0x110dae9a,0x17803ad1) + ALTROM(61, 1, 2, 262144, ROMTYPE_ODD , 0x0b8cde6a,0x5f02e97b,0x48ebbba8,0x7d516a56,0xb0400c6f,0xc3434d8d) + { "KS ROM v3.1 (A4000)(Cloanto)", 3, 1, 40, 68, "A4000\0", 524288, 31, 2 | 4, 1, ROMTYPE_KICK, 0, 0, NULL, 0x43b6dd22, 0xC3C48116,0x0866E60D,0x085E436A,0x24DB3617,0xFF60B5F9 }, - { "KS ROM v3.1 (A4000)", 3, 1, 40, 68, "A4000\0", 524288, 16, 2 | 4, 0, ROMTYPE_KICK, 0, 0, + { "KS ROM v3.1 (A4000)", 3, 1, 40, 68, "A4000\0", 524288, 16, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0xd6bae334, 0x5FE04842,0xD04A4897,0x20F0F4BB,0x0E469481,0x99406F49 }, - { "KS ROM v3.1 (A4000T)", 3, 1, 40, 70, "A4000T\0", 524288, 17, 2 | 4, 0, ROMTYPE_KICK, 0, 0, + ALTROM(16, 1, 1, 262144, ROMTYPE_EVEN, 0xb2af34f8,0x24e52b5e,0xfc020495,0x17387ab7,0xb1a1475f,0xc540350e) + ALTROM(16, 1, 2, 262144, ROMTYPE_ODD , 0xe65636a3,0x313c7cbd,0xa5779e56,0xf19a41d3,0x4e760f51,0x7626d882) + { "KS ROM v3.1 (A4000T)", 3, 1, 40, 70, "A4000T\0", 524288, 17, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x75932c3a, 0xB0EC8B84,0xD6768321,0xE01209F1,0x1E6248F2,0xF5281A21 }, - { "KS ROM v3.X (A4000)(Cloanto)", 3, 10, 45, 57, "A4000\0", 524288, 46, 2 | 4, 0, ROMTYPE_KICK, 0, 0, - 0x08b69382, 0x81D3AEA3,0x0DB7FBBB,0x4AFEE41C,0x21C5ED66,0x2B70CA53 }, + ALTROMPN(17, 1, 1, 262144, ROMTYPE_EVEN, "391657-01", 0x0ca94f70,0xb3806eda,0xcb3362fc,0x16a154ce,0x1eeec5bf,0x5bc24789) + ALTROMPN(17, 1, 2, 262144, ROMTYPE_ODD , "391658-01", 0xdfe03120,0xcd7a706c,0x431b04d8,0x7814d3a2,0xd8b39710,0x0cf44c0c) + { "KS ROM v3.X (A4000)(Cloanto)", 3, 10, 45, 57, "A4000\0", 524288, 46, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, + 0x3ac99edc, 0x3cbfc9e1,0xfe396360,0x157bd161,0xde74fc90,0x1abee7ec }, - { "CD32 KS ROM v3.1", 3, 1, 40, 60, "CD32\0", 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, + { "CD32 KS ROM v3.1", 3, 1, 40, 60, "CD32\0", 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, NULL, 0x1e62d4a5, 0x3525BE88,0x87F79B59,0x29E017B4,0x2380A79E,0xDFEE542D }, - { "CD32 extended ROM", 3, 1, 40, 60, "CD32\0", 524288, 19, 1, 0, ROMTYPE_EXTCD32, 0, 0, + { "CD32 extended ROM", 3, 1, 40, 60, "CD32\0", 524288, 19, 1, 0, ROMTYPE_EXTCD32, 0, 0, NULL, 0x87746be2, 0x5BEF3D62,0x8CE59CC0,0x2A66E6E4,0xAE0DA48F,0x60E78F7F }, - { "CD32 ROM (KS + extended)", 3, 1, 40, 60, "CD32\0", 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32, 0, 0, - 0xd3837ae4, 0x06807db3,0x18163745,0x5f4d4658,0x2d9972af,0xec8956d9 }, - { "CD32 MPEG Cartridge ROM", 3, 1, 40, 30, "CD32\0", 262144, 72, 1, 0, ROMTYPE_CD32CART, 0, 0, + + /* plain CD32 rom */ + { "CD32 ROM (KS + extended)", 3, 1, 40, 60, "CD32\0", 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32 | ROMTYPE_CD32, 0, 0, NULL, + 0xf5d4f3c8, 0x9fa14825,0xc40a2475,0xa2eba5cf,0x325bd483,0xc447e7c1 }, + /* real CD32 rom dump 391640-03 */ + ALTROMPN(64, 1, 1, 2 * 524288, ROMTYPE_CD32, "391640-03", 0xa4fbc94a, 0x816ce6c5,0x07787585,0x0c7d4345,0x2230a9ba,0x3a2902db ) + + { "CD32 MPEG Cartridge ROM", 3, 1, 40, 30, "CD32FMV\0", 262144, 23, 1, 0, ROMTYPE_CD32CART, 0, 0, NULL, 0xc35c37bf, 0x03ca81c7,0xa7b259cf,0x64bc9582,0x863eca0f,0x6529f435 }, - { "CDTV extended ROM v1.00", 1, 0, 1, 0, "CDTV\0", 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, + { "CDTV extended ROM v1.00", 1, 0, 1, 0, "CDTV\0", 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL, 0x42baa124, 0x7BA40FFA,0x17E500ED,0x9FED041F,0x3424BD81,0xD9C907BE }, - ALTROM(20, 1, 1, 131072, ROMTYPE_EVEN, 0x791cb14b,0x277a1778,0x92449635,0x3ffe56be,0x68063d2a,0x334360e4) - ALTROM(20, 1, 2, 131072, ROMTYPE_ODD, 0xaccbbc2e,0x41b06d16,0x79c6e693,0x3c3378b7,0x626025f7,0x641ebc5c) - { "CDTV extended ROM v2.07", 2, 7, 2, 7, "CDTV\0", 262144, 22, 0, 0, ROMTYPE_EXTCDTV, 0, 0, + ALTROMPN(20, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, "252606-01", 0x791cb14b,0x277a1778,0x92449635,0x3ffe56be,0x68063d2a,0x334360e4) + ALTROMPN(20, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, "252607-01", 0xaccbbc2e,0x41b06d16,0x79c6e693,0x3c3378b7,0x626025f7,0x641ebc5c) + { "CDTV extended ROM v2.07", 2, 7, 2, 7, "CDTV\0", 262144, 22, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL, 0xceae68d2, 0x5BC114BB,0xA29F60A6,0x14A31174,0x5B3E2464,0xBFA06846 }, - { "CDTV extended ROM v2.30", 2, 30, 2, 30, "CDTV\0", 262144, 21, 0, 0, ROMTYPE_EXTCDTV, 0, 0, + ALTROM(22, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x36d73cb8,0x9574e546,0x4b390697,0xf28f9a43,0x4e604e5e,0xf5e5490a) + ALTROM(22, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x6e84dce7,0x01a0679e,0x895a1a0f,0x559c7253,0xf539606b,0xd447b54f) + { "CDTV/A570 extended ROM v2.30", 2, 30, 2, 30, "CDTV\0", 262144, 21, 0, 0, ROMTYPE_EXTCDTV, 0, 0, "391298-01", 0x30b54232, 0xED7E461D,0x1FFF3CDA,0x321631AE,0x42B80E3C,0xD4FA5EBB }, + ALTROM(21, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x48e4d74f,0x54946054,0x2269e410,0x36018402,0xe1f6b855,0xfd89092b) + ALTROM(21, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x8a54f362,0x03df800f,0x032046fd,0x892f6e7e,0xec08b76d,0x33981e8c) - { "A1000 bootstrap ROM", 0, 0, 0, 0, "A1000\0", 8192, 23, 0, 0, ROMTYPE_KICK, 0, 0, - 0x62f11c04, 0xC87F9FAD,0xA4EE4E69,0xF3CCA0C3,0x6193BE82,0x2B9F5FE6 }, - { "A1000 bootstrap ROM", 0, 0, 0, 0, "A1000\0", 65536, 24, 0, 0, ROMTYPE_KICK, 0, 0, + { "A1000 bootstrap ROM", 0, 0, 0, 0, "A1000\0", 65536, 24, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x0b1ad2d0, 0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7 }, - ALTROM(23, 1, 1, 65536, 0, 0x0b1ad2d0,0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7) - ALTROM(23, 2, 1, 4096, ROMTYPE_EVEN, 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b) - ALTROM(23, 2, 2, 4096, ROMTYPE_ODD , 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3) + ALTROM(24, 1, 1, 8192, 0, 0x62f11c04, 0xC87F9FAD,0xA4EE4E69,0xF3CCA0C3,0x6193BE82,0x2B9F5FE6) + ALTROMPN(24, 2, 1, 4096, ROMTYPE_EVEN | ROMTYPE_8BIT, "252179-01", 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b) + ALTROMPN(24, 2, 2, 4096, ROMTYPE_ODD | ROMTYPE_8BIT, "252180-01", 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3) - { "Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, "AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, + { "The Diagnostic 2.0 (Logica)", 2, 0, 2, 0, "LOGICA\0", 524288, 72, 0, 0, ROMTYPE_KICK | ROMTYPE_SPECIALKICK, 0, 0, NULL, + 0x8484f426, 0xba10d161,0x66b2e2d6,0x177c979c,0x99edf846,0x2b21651e }, + + { "Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, "AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x2d921771, 0x1EAD9DDA,0x2DAD2914,0x6441F5EF,0x72183750,0x22E01248 }, - { "Freezer: Action Replay Mk I v1.50", 1, 50, 1, 50, "AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 0, 1, + ALTROM(52, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x82d6eb87, 0x7c9bac11,0x28666017,0xeee6f019,0x63fb3890,0x7fbea355) + ALTROM(52, 1, 2, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, 0x40ae490c, 0x81d8e432,0x01b73fd9,0x2e204ebd,0x68af8602,0xb62ce397) + { "Freezer: Action Replay Mk I v1.50", 1, 50, 1, 50, "AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0xd4ce0675, 0x843B433B,0x2C56640E,0x045D5FDC,0x854DC6B1,0xA4964E7C }, - { "Freezer: Action Replay Mk II v2.05", 2, 5, 2, 5, "AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 0, 1, + ALTROM(25, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x7fbd6de2, 0xb5f71a5c,0x09d65ecc,0xa8a3bc93,0x93558461,0xca190228) + ALTROM(25, 1, 2, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, 0x43018069, 0xad8ff242,0xb2cbf125,0x1fc53a73,0x581cf57a,0xb69cee00) + { "Freezer: Action Replay Mk II v2.05", 2, 5, 2, 5, "AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x1287301f, 0xF6601DE8,0x888F0050,0x72BF562B,0x9F533BBC,0xAF1B0074 }, - { "Freezer: Action Replay Mk II v2.12", 2, 12, 2, 12, "AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 0, 1, + { "Freezer: Action Replay Mk II v2.12", 2, 12, 2, 12, "AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x804d0361, 0x3194A07A,0x0A82D8B5,0xF2B6AEFA,0x3CA581D6,0x8BA8762B }, - { "Freezer: Action Replay Mk II v2.14", 2, 14, 2, 14, "AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 0, 1, + { "Freezer: Action Replay Mk II v2.14", 2, 14, 2, 14, "AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x49650e4f, 0x255D6DF6,0x3A4EAB0A,0x838EB1A1,0x6A267B09,0x59DFF634 }, - { "Freezer: Action Replay Mk III v3.09", 3, 9, 3, 9, "AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 0, 1, + { "Freezer: Action Replay Mk III v3.09", 3, 9, 3, 9, "AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x0ed9b5aa, 0x0FF3170A,0xBBF0CA64,0xC9DD93D6,0xEC0C7A01,0xB5436824 }, - { "Freezer: Action Replay Mk III v3.17", 3, 17, 3, 17, "AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 0, 1, + ALTROM(29, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2b84519f, 0x7841873b,0xf009d834,0x1dfa2794,0xb3751bac,0xf86adcc8) + ALTROM(29, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x1d35bd56, 0x6464be16,0x26b51949,0x9e76e4e3,0x409e8016,0x515d48b6) + { "Freezer: Action Replay Mk III v3.17", 3, 17, 3, 17, "AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0xc8a16406, 0x5D4987C2,0xE3FFEA8B,0x1B02E314,0x30EF190F,0x2DB76542 }, - { "Freezer: Action Replay 1200", 0, 0, 0, 0, "AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 0, 1, + { "Freezer: Action Replay 1200", 0, 0, 0, 0, "AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x8d760101, 0x0F6AB834,0x2810094A,0xC0642F62,0xBA42F78B,0xC0B07E6A }, - { "Freezer: Action Cartridge Super IV Professional", 0, 0, 0, 0, "SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 0, 1, + { "Freezer: Action Cartridge Super IV Professional", 0, 0, 0, 0, "SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL, 0xffffffff, 0, 0, 0, 0, 0, "SuperIV" }, - { "Freezer: Action Cart. Super IV Pro (+ROM v4.3)", 4, 3, 4, 3, "SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 0, 1, + { "Freezer: Action Cart. Super IV Pro (+ROM v4.3)", 4, 3, 4, 3, "SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL, 0xe668a0be, 0x633A6E65,0xA93580B8,0xDDB0BE9C,0x9A64D4A1,0x7D4B4801 }, - { "Freezer: X-Power Professional 500 v1.2", 1, 2, 1, 2, "XPOWER\0", 131072, 65, 0, 0, ROMTYPE_XPOWER, 0, 1, + { "Freezer: X-Power Professional 500 v1.2", 1, 2, 1, 2, "XPOWER\0", 131072, 65, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL, 0x9e70c231, 0xa2977a1c,0x41a8ca7d,0x4af4a168,0x726da542,0x179d5963 }, - ALTROM(65, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0xf98742e4,0xe8e683ba,0xd8b38d1f,0x79f3ad83,0xa9e67c6f,0xa91dc96c) - ALTROM(65, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED, 0xdfb9984b,0x8d6bdd49,0x469ec8e2,0x0143fbb3,0x72e92500,0x99f07910) - { "Freezer: X-Power Professional 500 v1.3", 1, 2, 1, 2, "XPOWER\0", 131072, 68, 0, 0, ROMTYPE_XPOWER, 0, 1, + ALTROM(65, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf98742e4,0xe8e683ba,0xd8b38d1f,0x79f3ad83,0xa9e67c6f,0xa91dc96c) + ALTROM(65, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdfb9984b,0x8d6bdd49,0x469ec8e2,0x0143fbb3,0x72e92500,0x99f07910) + { "Freezer: X-Power Professional 500 v1.3", 1, 2, 1, 2, "XPOWER\0", 131072, 68, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL, 0x31e057f0, 0x84650266,0x465d1859,0x7fd71dee,0x00775930,0xb7e450ee }, - ALTROM(68, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0x0b2ce0c7,0x45ad5456,0x89192404,0x956f47ce,0xf66a5274,0x57ace33b) - ALTROM(68, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED, 0x34580c35,0x8ad42566,0x7364f238,0x978f4381,0x08f8d5ec,0x470e72ea) - { "Freezer: Nordic Power v1.5", 1, 5, 1, 5, "NPOWER\0", 65536, 69, 0, 0, ROMTYPE_NORDIC, 0, 1, + ALTROM(68, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x0b2ce0c7,0x45ad5456,0x89192404,0x956f47ce,0xf66a5274,0x57ace33b) + ALTROM(68, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x34580c35,0x8ad42566,0x7364f238,0x978f4381,0x08f8d5ec,0x470e72ea) + { "Freezer: Nordic Power v1.5", 1, 5, 1, 5, "NPOWER\0", 65536, 69, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0x83b4b21c, 0xc56ced25,0x506a5aab,0x3fa13813,0x4fc9e5ae,0x0f9d3709 }, - ALTROM(69, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0xdd207174,0xae67652d,0x64f5db20,0x0f4b2110,0xee59567f,0xfbd90a1b) - ALTROM(69, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED, 0x8f93d85d,0x73c62d21,0x40c0c092,0x6315b702,0xdd5d0f05,0x3dad7fab) - { "Freezer: Nordic Power v2.0", 2, 0, 2, 0, "NPOWER\0", 65536, 67, 0, 0, ROMTYPE_NORDIC, 0, 1, + ALTROM(69, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdd207174,0xae67652d,0x64f5db20,0x0f4b2110,0xee59567f,0xfbd90a1b) + ALTROM(69, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x8f93d85d,0x73c62d21,0x40c0c092,0x6315b702,0xdd5d0f05,0x3dad7fab) + { "Freezer: Nordic Power v2.0", 2, 0, 2, 0, "NPOWER\0", 65536, 67, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0xa4db2906, 0x0aec68f7,0x25470c89,0x6b699ff4,0x6623dec5,0xc777466e }, - ALTROM(67, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0xb21be46c,0x50dc607c,0xce976bbd,0x3841eaf0,0x591ddc7e,0xa1939ad2) - ALTROM(67, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED, 0x96057aed,0xdd9209e2,0x1d5edfc1,0xcdb52abe,0x93de0f35,0xc43da696) - { "Freezer: Nordic Power v3.0", 3, 0, 3, 0, "NPOWER\0", 65536, 70, 0, 0, ROMTYPE_NORDIC, 0, 1, + ALTROM(67, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xb21be46c,0x50dc607c,0xce976bbd,0x3841eaf0,0x591ddc7e,0xa1939ad2) + ALTROM(67, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x96057aed,0xdd9209e2,0x1d5edfc1,0xcdb52abe,0x93de0f35,0xc43da696) + { "Freezer: Nordic Power v3.0", 3, 0, 3, 0, "NPOWER\0", 65536, 70, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0x72850aef, 0x59c91d1f,0xa8f118f9,0x0bdba05a,0x9ae788d7,0x7a6cc7c9 }, - ALTROM(70, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0xf3330e1f,0x3a597db2,0xb7d11b6c,0xb8e13496,0xc215f223,0x88c4ca3c) - ALTROM(70, 1, 2, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED, 0xee58e0f9,0x4148f4cb,0xb42cec33,0x8ca144de,0xd4f54118,0xe0f185dd) - { "Freezer: HRTMon v2.30 (built-in)", 0, 0, 0, 0, "HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, + ALTROM(70, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf3330e1f,0x3a597db2,0xb7d11b6c,0xb8e13496,0xc215f223,0x88c4ca3c) + ALTROM(70, 1, 2, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xee58e0f9,0x4148f4cb,0xb42cec33,0x8ca144de,0xd4f54118,0xe0f185dd) + { "Freezer: HRTMon v2.30 (built-in)", 0, 0, 0, 0, "HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL, 0xffffffff, 0, 0, 0, 0, 0, "HRTMon" }, - { "A590/A2091 SCSI boot ROM", 0, 0, 6, 0, "A590\0A2091\0", 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0, 0, + { "A590/A2091 SCSI boot ROM", 6, 0, 6, 0, "A590\0A2091\0", 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x8396cf4e, 0x5E03BC61,0x8C862ABE,0x7BF79723,0xB4EEF4D2,0x1859A0F2 }, - { "A590/A2091 SCSI boot ROM", 0, 0, 6, 6, "A590\0A2091\0", 16384, 54, 0, 0, ROMTYPE_A2091BOOT, 0, 0, + ALTROM(53, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, 0xb0b8cf24,0xfcf40175,0x05f4d441,0x814b45d5,0x59c19eab,0x43816b30) + ALTROM(53, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2e77bbff,0x8a098845,0x068f32cf,0xa4d34a27,0x8cd290f6,0x1d35a52c) + { "A590/A2091 SCSI boot ROM", 6, 6, 6, 6, "A590\0A2091\0", 16384, 54, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x33e00a7a, 0x739BB828,0xE874F064,0x9360F59D,0x26B5ED3F,0xBC99BB66 }, - { "A590/A2091 SCSI boot ROM", 0, 0, 7, 0, "A590\0A2091\0", 16384, 55, 0, 0, ROMTYPE_A2091BOOT, 0, 0, + ALTROM(54, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, 0xe536bbb2,0xfd7f8a6d,0xa18c1b02,0xd07eb990,0xc2467a24,0x183ede12) + ALTROM(54, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0xc0871d25,0xe155f18a,0xbb90cf82,0x0589c15e,0x70559d3b,0x6b391af8) + { "A590/A2091 SCSI boot ROM", 7, 0, 7, 0, "A590\0A2091\0", 16384, 55, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x714a97a2, 0xE50F01BA,0xF2899892,0x85547863,0x72A82C33,0x3C91276E }, - { "A590/A2091 SCSI Guru boot ROM", 0, 0, 6, 14, "A590\0A2091\0", 32768, 56, 0, 0, ROMTYPE_A2091BOOT, 0, 0, + ALTROM(55, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, 0xa9ccffed,0x149f5bd5,0x2e2d2990,0x4e3de483,0xb9ad7724,0x48e9278e) + ALTROM(55, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2942747a,0xdbd7648e,0x79c75333,0x7ff3e4f4,0x91de224b,0xf05e6bb6) + { "A590/A2091 SCSI Guru boot ROM", 6, 14, 6, 14, "A590\0A2091\0", 32768, 56, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x04e52f93, 0x6DA21B6F,0x5E8F8837,0xD64507CD,0x8A4D5CDC,0xAC4F426B }, - { "A4091 SCSI boot ROM", 0, 0, 40, 9, "A4091\0", 32768, 57, 0, 0, ROMTYPE_A4091BOOT, 0, 0, + { "A4091 SCSI boot ROM", 40, 9, 40, 9, "A4091\0", 32768, 57, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL, 0x00000000, 0, 0, 0, 0, 0 }, - { "A4091 SCSI boot ROM", 0, 0, 40, 13, "A4091\0", 32768, 58, 0, 0, ROMTYPE_A4091BOOT, 0, 0, + { "A4091 SCSI boot ROM", 40, 13, 40, 13, "A4091\0", 32768, 58, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL, 0x54cb9e85, 0x3CE66919,0xF6FD6797,0x4923A12D,0x91B730F1,0xFFB4A7BA }, { "Arcadia OnePlay 2.11", 0, 0, 0, 0, "ARCADIA\0", 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, @@ -272,6 +323,83 @@ static struct romdata roms[] = { { NULL } }; +void romlist_clear (void) +{ + int i; + int mask = 0; + struct romdata *parent; + char *pn; + + xfree (rl); + rl = 0; + romlist_cnt = 0; + parent = 0; + pn = NULL; + for (i = 0; roms[i].name; i++) { + struct romdata *rd = &roms[i]; + if (rd->group == 0) { + parent = rd; + mask = rd->type; + pn = parent->partnumber; + } else { + rd->type &= ~ROMTYPE_MASK; + rd->type |= mask & ROMTYPE_MASK; + if (rd->partnumber && !pn) { + char *newpn; + if (parent->partnumber == NULL) + parent->partnumber = my_strdup (""); + newpn = (char *)xcalloc (strlen (parent->partnumber) + 1 + strlen (rd->partnumber) + 1, 1); + if (strlen (parent->partnumber) > 0) { + strcpy (newpn, parent->partnumber); + strcat (newpn, "/"); + } + strcat (newpn, rd->partnumber); + xfree (parent->partnumber); + parent->partnumber = newpn; + } + } + } +} + +/* remove rom entries that need 2 or more roms but not everyone is present */ +static void romlist_cleanup (void) +{ + int i = 0; + while (roms[i].name) { + struct romdata *rd = &roms[i]; + int grp = rd->group >> 16; + int ok = 1; + int j = i; + int k = i; + while (rd->name && (rd->group >> 16) == grp && grp > 0) { + struct romlist *rl = romlist_getrl (rd); + if (!rl) + ok = 0; + rd++; + j++; + } + if (ok == 0) { + while (i < j) { + struct romlist *rl = romlist_getrl (&roms[i]); + if (rl) { + int cnt = romlist_cnt - i - 1; + write_log ("%d '%s' removed from romlist\n", roms[k].name, rl->path); + xfree (rl->path); + if (cnt > 0) + memmove (rl, rl + 1, cnt * sizeof (struct romlist)); + romlist_cnt--; + } + i++; + } + } + i++; + } + for (i = 0; i < romlist_cnt; i++) { + struct romlist *rll = &rl[i]; + //write_log ("%s (%s)\n", rll->rd->name, rll->path); + } +} + struct romlist **getromlistbyident(int ver, int rev, int subver, int subrev, char *model, int all) { int i, j, ok, out, max; @@ -418,73 +546,69 @@ struct rom_key { static struct rom_key keyring[ROM_KEY_NUM]; -int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size) +static void addkey (uae_u8 *key, int size, const char *name) { - int cnt, t, i, keysize; - uae_u8 *key; - - for (i = ROM_KEY_NUM - 1; i >= 0; i--) { - keysize = keyring[i].size; - key = keyring[i].key; - if (!key) - continue; - for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { - mem[cnt] ^= key[t]; - if (real_size == cnt + 1) - t = keysize - 1; - } - if ((mem[2] == 0x4e && mem[3] == 0xf9) || (mem[0] == 0x11 && (mem[1] == 0x11 || mem[1] == 0x14))) - return 1; - for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { - mem[cnt] ^= key[t]; - if (real_size == cnt + 1) - t = keysize - 1; - } - } - return get_keyring(); -} - -static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size) -{ - uae_u32 d1 = 0xdeadfeed, d0; int i; - for (i = 0; i < size / 8; i++) { - d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]); - d1 = d1 ^ d0; - mem[i * 8 + 0] = d1 >> 24; - mem[i * 8 + 1] = d1 >> 16; - mem[i * 8 + 2] = d1 >> 8; - mem[i * 8 + 3] = d1; - d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]); - d0 = d0 ^ d1; - mem[i * 8 + 4] = d0 >> 24; - mem[i * 8 + 5] = d0 >> 16; - mem[i * 8 + 6] = d0 >> 8; - mem[i * 8 + 7] = d0; - } - return 1; -} - -static void addkey(int *pkeyid, uae_u8 *key, int size, const char *name) -{ - int keyid = *pkeyid; - int i; - - if (key == NULL || size == 0 || keyid >= ROM_KEY_NUM) { + if (key == NULL || size == 0) { xfree (key); return; } - for (i = 0; i < keyid; i++) { + for (i = 0; i < ROM_KEY_NUM; i++) { if (keyring[i].key && keyring[i].size == size && !memcmp (keyring[i].key, key, size)) { xfree (key); return; } } - keyring[keyid].key = key; - keyring[keyid++].size = size; + for (i = 0; i < ROM_KEY_NUM; i++) { + if (keyring[i].key == NULL) + break; + } + if (i == ROM_KEY_NUM) { + xfree (key); + return; + } + keyring[i].key = key; + keyring[i].size = size; write_log ("ROM KEY '%s' %d bytes loaded\n", name, size); - *pkeyid = keyid; +} + +static void addkeyfile (const char *path) +{ + struct zfile *f; + int keysize; + uae_u8 *keybuf; + + f = zfile_fopen (path, "rb"); + if (!f) + return; + zfile_fseek (f, 0, SEEK_END); + keysize = zfile_ftell (f); + if (keysize > 0) { + zfile_fseek (f, 0, SEEK_SET); + keybuf = (uae_u8 *)xmalloc (keysize); + zfile_fread (keybuf, 1, keysize, f); + addkey (keybuf, keysize, path); + } + zfile_fclose (f); +} + +static void addkeydir (const char *path) +{ + char tmp[MAX_DPATH]; + + strcpy (tmp, path); + if (zfile_exists (tmp)) { + int i; + for (i = strlen (tmp) - 1; i > 0; i--) { + if (tmp[i] == '\\' || tmp[i] == '/') + break; + } + tmp[i] = 0; + } + strcat (tmp, "/"); + strcat (tmp, "rom.key"); + addkeyfile (tmp); } int get_keyring (void) @@ -499,37 +623,22 @@ int get_keyring (void) int load_keyring (struct uae_prefs *p, char *path) { - struct zfile *f; uae_u8 *keybuf; int keysize; char tmp[MAX_PATH], *d; int keyids[] = { 0, 48, -1 }; - int keyid; int cnt, i; free_keyring(); - keyid = 0; keybuf = target_load_keyfile(p, path, &keysize, tmp); - addkey(&keyid, keybuf, keysize, tmp); - for (i = 0; keyids[i] >= 0 && keyid < ROM_KEY_NUM; i++) { + addkey (keybuf, keysize, tmp); + for (i = 0; keyids[i] >= 0; i++) { struct romdata *rd = getromdatabyid (keyids[i]); char *s; if (rd) { s = romlist_get (rd); - if (s) { - f = zfile_fopen (s, "rb"); - if (f) { - zfile_fseek (f, 0, SEEK_END); - keysize = zfile_ftell (f); - if (keysize > 0) { - zfile_fseek (f, 0, SEEK_SET); - keybuf = (uae_u8*)xmalloc (keysize); - zfile_fread (keybuf, 1, keysize, f); - addkey(&keyid, keybuf, keysize, s); - } - zfile_fclose (f); - } - } + if (s) + addkeyfile (s); } } @@ -580,23 +689,12 @@ int load_keyring (struct uae_prefs *p, char *path) } break; case 6: - return keyid; + return cnt; } cnt++; if (!tmp[0]) continue; - f = zfile_fopen(tmp, "rb"); - if (!f) - continue; - zfile_fseek (f, 0, SEEK_END); - keysize = zfile_ftell (f); - if (keysize > 0) { - zfile_fseek (f, 0, SEEK_SET); - keybuf = (uae_u8*)xmalloc (keysize); - zfile_fread (keybuf, 1, keysize, f); - addkey (&keyid, keybuf, keysize, tmp); - } - zfile_fclose (f); + addkeyfile (tmp); } } void free_keyring (void) @@ -607,23 +705,6 @@ void free_keyring (void) memset(keyring, 0, sizeof (struct rom_key) * ROM_KEY_NUM); } -static int decode_rom (uae_u8 *mem, int size, int mode, int real_size) -{ - if (mode == 1) { - if (!decode_cloanto_rom_do (mem, size, real_size)) { -#ifndef SINGLEFILE - notify_user (NUMSG_NOROMKEY); -#endif - return 0; - } - return 1; - } else if (mode == 2) { - decode_rekick_rom_do (mem, size, real_size); - return 1; - } - return 0; -} - struct romdata *getromdatabyname (char *name) { char tmp[MAX_PATH]; @@ -650,6 +731,18 @@ struct romdata *getromdatabyid (int id) return 0; } +struct romdata *getromdatabyidgroup (int id, int group, int subitem) +{ + int i = 0; + group = (group << 16) | subitem; + while (roms[i].name) { + if (id == roms[i].id && roms[i].group == group) + return &roms[i]; + i++; + } + return 0; +} + STATIC_INLINE int notcrc32(uae_u32 crc32) { if (crc32 == 0xffffffff || crc32 == 0x00000000) @@ -697,6 +790,83 @@ static struct romdata *checkromdata(uae_u8 *sha1, int size, uae_u32 mask) return NULL; } +int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size) +{ + int cnt, t, i; + + for (i = ROM_KEY_NUM - 1; i >= 0; i--) { + uae_u8 sha1[SHA1_SIZE]; + struct romdata *rd; + int keysize = keyring[i].size; + uae_u8 *key = keyring[i].key; + if (!key) + continue; + for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { + mem[cnt] ^= key[t]; + if (real_size == cnt + 1) + t = keysize - 1; + } + if ((mem[2] == 0x4e && mem[3] == 0xf9) || (mem[0] == 0x11 && (mem[1] == 0x11 || mem[1] == 0x14))) { + cloanto_rom = 1; + return 1; + } + get_sha1 (mem, size, sha1); + rd = checkromdata (sha1, size, -1); + if (rd) { + if (rd->cloanto) + cloanto_rom = 1; + return 1; + } + if (i == 0) + break; + for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { + mem[cnt] ^= key[t]; + if (real_size == cnt + 1) + t = keysize - 1; + } + } + return 0; +} + +static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size) +{ + uae_u32 d1 = 0xdeadfeed, d0; + int i; + + for (i = 0; i < size / 8; i++) { + d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]); + d1 = d1 ^ d0; + mem[i * 8 + 0] = d1 >> 24; + mem[i * 8 + 1] = d1 >> 16; + mem[i * 8 + 2] = d1 >> 8; + mem[i * 8 + 3] = d1; + d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]); + d0 = d0 ^ d1; + mem[i * 8 + 4] = d0 >> 24; + mem[i * 8 + 5] = d0 >> 16; + mem[i * 8 + 6] = d0 >> 8; + mem[i * 8 + 7] = d0; + } + return 1; +} + +static int decode_rom (uae_u8 *mem, int size, int mode, int real_size) +{ + if (mode == 1) { + if (!decode_cloanto_rom_do (mem, size, real_size)) { +#ifndef SINGLEFILE + notify_user (NUMSG_NOROMKEY); +#endif + return 0; + } + return 1; + } else if (mode == 2) { + decode_rekick_rom_do (mem, size, real_size); + return 1; + } + return 0; +} + struct romdata *getromdatabydata (uae_u8 *rom, int size) { uae_u8 sha1[SHA1_SIZE]; @@ -756,11 +926,15 @@ void getromname (struct romdata *rd, char *name) name[0] = 0; if (!rd) return; + while (rd->group) + rd--; strcat (name, rd->name); if ((rd->subrev || rd->subver) && rd->subver != rd->ver) sprintf (name + strlen (name), " rev %d.%d", rd->subver, rd->subrev); if (rd->size > 0) sprintf (name + strlen (name), " (%dk)", (rd->size + 1023) / 1024); + if (rd->partnumber && strlen (rd->partnumber) > 0) + sprintf (name + strlen (name), " [%s]", rd->partnumber); } struct romlist *getromlistbyromdata(struct romdata *rd) @@ -782,7 +956,7 @@ struct romlist *getromlistbyids(int *ids) rd = getromdatabyid (ids[i]); if (rd) { for (j = 0; j < romlist_cnt; j++) { - if (rl[j].rd == rd) + if (rl[j].rd->id == rd->id) return &rl[j]; } } @@ -1504,15 +1678,199 @@ static int kickstart_checksum (uae_u8 *mem, int size) return 1; } +static int read_rom_file (uae_u8 *buf, struct romdata *rd) +{ + struct zfile *zf; + struct romlist *rl = romlist_getrl (rd); + char tmp[11]; + + if (!rl || strlen (rl->path) == 0) + return 0; + zf = zfile_fopen (rl->path, "rb"); + if (!zf) + return 0; + addkeydir (rl->path); + zfile_fread (tmp, sizeof tmp, 1, zf); + if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) { + zfile_fread (buf, rd->size, 1, zf); + decode_cloanto_rom_do (buf, rd->size, rd->size); + } else { + memcpy (buf, tmp, sizeof tmp); + zfile_fread (buf + sizeof tmp, rd->size - sizeof (tmp), 1, zf); + } + zfile_fclose (zf); + return 1; +} + +static void byteswap (uae_u8 *buf, int size) +{ + int i; + for (i = 0; i < size; i += 2) { + uae_u8 t = buf[i]; + buf[i] = buf[i + 1]; + buf[i + 1] = t; + } +} +static void mergecd32 (uae_u8 *dst, uae_u8 *src, int size) +{ + int i, k; + k = 0; + for (i = 0; i < size / 2; i += 2) { + int j = i + size / 2; + dst[k + 1] = src[i + 0]; + dst[k + 0] = src[i + 1]; + dst[k + 3] = src[j + 0]; + dst[k + 2] = src[j + 1]; + k += 4; + } +#if 0 + { + struct zfile *f; + f = zfile_fopen ("c:\\d\\1.rom","wb"); + zfile_fwrite (dst, 1, size, f); + zfile_fclose(f); + } +#endif +} + +static void descramble (struct romdata *rd, uae_u8 *data, int size, int odd) +{ +} + +struct zfile *read_rom (struct romdata **prd) +{ + struct romdata *rd2 = *prd; + struct romdata *rd = *prd; + const char *name; + int id = rd->id; + uae_u32 crc32; + int size; + uae_u8 *buf, *buf2; + + /* find parent node */ + for (;;) { + if (rd2 == &roms[0]) + break; + if (rd2[-1].id != id) + break; + rd2--; + } + *prd = rd2; + size = rd2->size; + crc32 = rd2->crc32; + name = rd->name; + buf = (uae_u8 *)xmalloc (size * 2); + if (!buf) + return NULL; + buf2 = buf + size; + while (rd->id == id) { + int i; + int ok = 0; + uae_u32 flags = rd->type; + int odd = (flags & ROMTYPE_ODD) ? 1 : 0; + + for (i = 0; i < 2; i++) { + memset (buf, 0, size); + if (!(flags & (ROMTYPE_EVEN | ROMTYPE_ODD))) { + read_rom_file (buf, rd); + if (flags & ROMTYPE_CD32) { + memcpy (buf2, buf, size); + mergecd32 (buf, buf2, size); + } + rd++; + i++; + } else { + int romsize = size / 2; + if (i) + odd = !odd; + read_rom_file (buf2, rd); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd, buf2, romsize, odd); + for (i = 0; i < size; i += 2) + buf[i + odd] = buf2[i / 2]; + read_rom_file (buf2, rd + 1); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd + 1, buf2, romsize, !odd); + for (i = 0; i < size; i += 2) + buf[i + (1 - odd)] = buf2[i / 2]; + rd += 2; + } + if (get_crc32 (buf, size) == crc32) { + ok = 1; + } else { + /* perhaps it is byteswapped without byteswap entry? */ + byteswap (buf, size); + if (get_crc32 (buf, size) == crc32) + ok = 1; + } + if (ok) { + struct zfile *zf = zfile_fopen_empty (name, size); + if (zf) { + zfile_fwrite (buf, size, 1, zf); + zfile_fseek (zf, 0, SEEK_SET); + } + xfree (buf); + return zf; + } + } + + } + xfree (buf); + return NULL; +} + +struct zfile *read_rom_name (const char *filename) +{ + int i; + struct zfile *f; + + for (i = 0; i < romlist_cnt; i++) { + if (!strcmpi (filename, rl[i].path)) { + struct romdata *rd = rl[i].rd; + f = read_rom (&rd); + if (f) + return f; + } + } + f = zfile_fopen (filename, "rb"); + if (f) { + uae_u8 tmp[11]; + zfile_fread (tmp, sizeof tmp, 1, f); + if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) { + struct zfile *df; + int size; + uae_u8 *buf; + addkeydir (filename); + zfile_fseek (f, 0, SEEK_END); + size = zfile_ftell (f) - sizeof tmp; + zfile_fseek (f, sizeof tmp, SEEK_SET); + buf = (uae_u8 *)xmalloc (size); + zfile_fread (buf, size, 1, f); + df = zfile_fopen_empty ("tmp.rom", size); + decode_cloanto_rom_do (buf, size, size); + zfile_fwrite (buf, size, 1, df); + zfile_fclose (f); + xfree (buf); + zfile_fseek (df, 0, SEEK_SET); + f = df; + } else { + zfile_fseek (f, -((int)sizeof tmp), SEEK_CUR); + } + } + return f; +} + static char *kickstring = "exec.library"; -static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int *cloanto_rom, int noalias) +static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int noalias) { unsigned char buffer[20]; int i, j, oldpos; int cr = 0, kickdisk = 0; - if (cloanto_rom) - *cloanto_rom = 0; if (size < 0) { zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f) & ~0x3ff; @@ -1526,12 +1884,10 @@ static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksu } else if (strncmp ((char *) buffer, "AMIROMTYPE1", 11) != 0) { zfile_fseek (f, oldpos, SEEK_SET); } else { + cloanto_rom = 1; cr = 1; } - if (cloanto_rom) - *cloanto_rom = cr; - i = zfile_fread (mem, 1, size, f); if (kickdisk && i > 262144) i = 262144; @@ -1577,7 +1933,7 @@ static int load_extendedkickstart (void) if (strlen (currprefs.romextfile) == 0) return 0; - f = zfile_fopen (currprefs.romextfile, "rb"); + f = read_rom_name (currprefs.romextfile); if (!f) { notify_user (NUMSG_NOEXTROM); return 0; @@ -1589,8 +1945,6 @@ static int load_extendedkickstart (void) off = 0; if (size > 300000) { extendedkickmem_type = EXTENDED_ROM_CD32; - if (size >= 524288 * 2) - off = 524288; } else { extendedkickmem_type = EXTENDED_ROM_CDTV; } @@ -1609,7 +1963,7 @@ static int load_extendedkickstart (void) break; } - read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 0, 1); + read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1); extendedkickmem_mask = extendedkickmem_size - 1; zfile_fclose (f); return 1; @@ -1657,7 +2011,7 @@ static int patch_residents (uae_u8 *kickmemory, int size) j = 0; while (residents[j]) { if (!memcmp (residents[j], kickmemory + addr - base, strlen (residents[j]) + 1)) { - write_log ("KSPatcher: '%s' at %08.8X disabled\n", residents[j], i + base); + write_log ("KSPatcher: '%s' at %08X disabled\n", residents[j], i + base); kickmemory[i] = 0x4b; /* destroy RTC_MATCHWORD */ patched++; break; @@ -1685,10 +2039,12 @@ static void patch_kick(void) static int load_kickstart (void) { - struct zfile *f = zfile_fopen(currprefs.romfile, "rb"); + struct zfile *f; char tmprom[MAX_DPATH], tmprom2[MAX_DPATH]; int patched = 0; + cloanto_rom = 0; + f = read_rom_name (currprefs.romfile); strcpy (tmprom, currprefs.romfile); if (f == NULL) { sprintf (tmprom2, "%s%s", start_path_data, currprefs.romfile); @@ -1704,6 +2060,7 @@ static int load_kickstart (void) strcpy (currprefs.romfile, tmprom2); } } + addkeydir (currprefs.romfile); if( f == NULL ) { /* still no luck */ #if defined(AMIGA)||defined(__POS__) #define USE_UAE_ERSATZ "USE_UAE_ERSATZ" @@ -1739,10 +2096,6 @@ static int load_kickstart (void) } if (filesize >= 524288 * 2) { struct romdata *rd = getromdatabyzfile(f); - if (rd && rd->id == 64) { - kspos = 0; - extpos = 524288; - } zfile_fseek (f, kspos, SEEK_SET); } if (filesize >= 524288 * 4) { @@ -1750,7 +2103,7 @@ static int load_kickstart (void) extpos = 0; zfile_fseek (f, kspos, SEEK_SET); } - size = read_kickstart (f, kickmemory, maxsize, 1, &cloanto_rom, 0); + size = read_kickstart (f, kickmemory, maxsize, 1, 0); if (size == 0) goto err; kickmem_mask = size - 1; @@ -1761,7 +2114,7 @@ static int load_kickstart (void) extendedkickmemory = (uae_u8 *) mapped_malloc (extendedkickmem_size, "rom_e0"); extendedkickmem_bank.baseaddr = (uae_u8 *) extendedkickmemory; zfile_fseek (f, extpos, SEEK_SET); - read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 0, 1); + read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1); extendedkickmem_mask = extendedkickmem_size - 1; } if (filesize > 524288 * 2) { @@ -1769,9 +2122,9 @@ static int load_kickstart (void) extendedkickmemory2 = mapped_malloc (extendedkickmem2_size, "rom_a8"); extendedkickmem2_bank.baseaddr = extendedkickmemory2; zfile_fseek (f, extpos + 524288, SEEK_SET); - read_kickstart (f, extendedkickmemory2, 524288, 0, 0, 1); + read_kickstart (f, extendedkickmemory2, 524288, 0, 1); zfile_fseek (f, extpos + 524288 * 2, SEEK_SET); - read_kickstart (f, extendedkickmemory2 + 524288, 524288, 0, 0, 1); + read_kickstart (f, extendedkickmemory2 + 524288, 524288, 0, 1); extendedkickmem2_mask = extendedkickmem2_size - 1; } } @@ -1809,6 +2162,8 @@ static void allocate_memory (void) chipmem_full_mask = chipmem_mask = allocated_chipmem - 1; if (memsize < 0x100000) memsize = 0x100000; + if (memsize > 0x100000 && memsize < 0x200000) + memsize = 0x200000; chipmemory = mapped_malloc (memsize, "chip"); if (chipmemory == 0) { @@ -1819,12 +2174,16 @@ static void allocate_memory (void) if (memsize != allocated_chipmem) memset (chipmemory + allocated_chipmem, 0xff, memsize - allocated_chipmem); } - } currprefs.chipset_mask = changed_prefs.chipset_mask; chipmem_full_mask = allocated_chipmem - 1; - if ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) && allocated_chipmem < 0x100000) + if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { + if (allocated_chipmem < 0x100000) chipmem_full_mask = 0x100000 - 1; + if (allocated_chipmem > 0x100000 && allocated_chipmem < 0x200000) + chipmem_full_mask = chipmem_mask = 0x200000 - 1; + } + } if (allocated_bogomem != currprefs.bogomem_size) { if (bogomemory) @@ -1850,26 +2209,34 @@ static void allocate_memory (void) } if (savestate_state == STATE_RESTORE) { - restore_ram (bootrom_filepos, rtarea); + if (bootrom_filepos) { + restore_ram (bootrom_filepos, rtarea); + } restore_ram (chip_filepos, chipmemory); if (allocated_bogomem > 0) restore_ram (bogo_filepos, bogomemory); } chipmem_bank.baseaddr = chipmemory; bogomem_bank.baseaddr = bogomemory; + bootrom_filepos = 0; + chip_filepos = 0; + bogo_filepos = 0; } void map_overlay (int chip) { - int i = allocated_chipmem > 0x200000 ? (allocated_chipmem >> 16) : 32; + int size; addrbank *cb; int currPC = m68k_getpc(®s); + size = allocated_chipmem >= 0x180000 ? (allocated_chipmem >> 16) : 32; cb = &chipmem_bank; if (chip) { - map_banks (cb, 0, i, allocated_chipmem); + map_banks (cb, 0, size, allocated_chipmem); } else { addrbank *rb = NULL; + if (size < 32) + size = 32; cb = &get_mem_bank (0xf00000); if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xf00000) == 0x1114) rb = cb; @@ -1878,7 +2245,7 @@ void map_overlay (int chip) rb = cb; if (!rb) rb = &kickmem_bank; - map_banks (rb, 0, i, 0x80000); + map_banks (rb, 0, size, 0x80000); } if (savestate_state != STATE_RESTORE && valid_address (regs.pc, 4)) m68k_setpc(®s, currPC); @@ -1905,6 +2272,7 @@ void memory_reset (void) if (strcmp (currprefs.romfile, changed_prefs.romfile) != 0 || strcmp (currprefs.romextfile, changed_prefs.romextfile) != 0) { + kickstart_rom = 1; ersatzkickfile = 0; a1000_handle_kickstart (0); xfree (a1000_bootrom); @@ -1923,11 +2291,13 @@ void memory_reset (void) kickmem_mask = 524288 - 1; if (!load_kickstart ()) { if (strlen (currprefs.romfile) > 0) { - write_log ("%s\n", currprefs.romfile); + write_log ("Failed to open '%s'\n", currprefs.romfile); notify_user (NUMSG_NOROM); } #ifdef AUTOCONFIG init_ersatz_rom (kickmemory); + kickmem_mask = 262144 - 1; + kickmem_size = 262144; ersatzkickfile = 1; #else uae_restart (-1, NULL); @@ -1947,7 +2317,10 @@ void memory_reset (void) } if (rd->cloanto) cloanto_rom = 1; - } + kickstart_rom = 0; + if ((rd->type & ROMTYPE_SPECIALKICK | ROMTYPE_KICK) == ROMTYPE_KICK) + kickstart_rom = 1; + } } patch_kick (); } @@ -2022,17 +2395,13 @@ void memory_init (void) chipmemory = 0; bogomemory = 0; + init_mem_banks (); + kickmemory = mapped_malloc (0x80000, "kick"); memset (kickmemory, 0, 0x80000); kickmem_bank.baseaddr = kickmemory; strcpy (currprefs.romfile, ""); currprefs.romextfile[0] = 0; -#ifdef AUTOCONFIG - init_ersatz_rom (kickmemory); - ersatzkickfile = 1; -#endif - - init_mem_banks (); } void memory_cleanup (void) @@ -2077,7 +2446,7 @@ void map_banks (addrbank *bank, int start, int size, int realsize) realsize = size << 16; if ((size << 16) < realsize) { - gui_message ("Broken mapping, size=%x, realsize=%x\nStart is %x\n", + write_log ("Broken mapping, size=%x, realsize=%x\nStart is %x\n", size, realsize, start); } @@ -2249,7 +2618,7 @@ uae_u8 *save_rom (int first, int *len, uae_u8 *dstptr) if (dstptr) dstbak = dst = dstptr; else - dstbak = dst = (uae_u8 *)malloc (4 + 4 + 4 + 4 + 4 + 256 + 256 + mem_size); + dstbak = dst = (uae_u8 *)xmalloc (4 + 4 + 4 + 4 + 4 + 256 + 256 + mem_size); save_u32 (mem_start); save_u32 (mem_size); save_u32 (mem_type); @@ -2295,7 +2664,7 @@ void memcpyah (uae_u8 *dst, uaecptr src, int size) while (size--) *dst++ = get_byte(src++); } -char *strcpyah_safe (char *dst, uaecptr src) +char *strcpyah_safe (char *dst, uaecptr src, int maxsize) { char *res = dst; uae_u8 b; @@ -2304,6 +2673,11 @@ char *strcpyah_safe (char *dst, uaecptr src) return res; b = get_byte(src++); *dst++ = b; + maxsize--; + if (maxsize <= 1) { + *dst++= 0; + break; + } } while (b); return res; } diff --git a/src/newcpu.cpp b/src/newcpu.cpp index 74574423..964994f1 100644 --- a/src/newcpu.cpp +++ b/src/newcpu.cpp @@ -54,7 +54,7 @@ #ifdef JIT extern uae_u8* compiled_code; -#include "compemu.h" +#include "jit/compemu.h" #include /* For faster cycles handling */ signed long pissoff=0; @@ -76,6 +76,7 @@ static int last_writeaccess_for_exception_3; static int last_instructionaccess_for_exception_3; int mmu_enabled, mmu_triggered; int cpu_cycles; + static uaecptr last_trace_ad = 0; const int areg_byteinc[] = { 1,1,1,1,1,1,1,2 }; @@ -152,8 +153,7 @@ static unsigned long REGPARAM3 op_illg_1 (uae_u32 opcode, struct regstruct *regs static unsigned long REGPARAM2 op_illg_1 (uae_u32 opcode, struct regstruct *regs) { - op_illg (opcode, regs); - return 4; + return op_illg (opcode, regs); } static void build_cpufunctbl (void) @@ -209,11 +209,26 @@ static void build_cpufunctbl (void) for (i = 0; tbl[i].handler != NULL; i++) cpufunctbl[tbl[i].opcode] = tbl[i].handler; + /* hack fpu to 68000/68010 mode */ + if (currprefs.fpu_model && currprefs.cpu_model < 68020) { + tbl = op_smalltbl_3_ff; + for (i = 0; tbl[i].handler != NULL; i++) { + if ((tbl[i].opcode & 0xfe00) == 0xf200) + cpufunctbl[tbl[i].opcode] = tbl[i].handler; + } + } for (opcode = 0; opcode < 65536; opcode++) { cpuop_func *f; - if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > lvl) + if (table68k[opcode].mnemo == i_ILLG) continue; + if (currprefs.fpu_model && currprefs.cpu_model < 68020) { + /* more hack fpu to 68000/68010 mode */ + if (table68k[opcode].clev > lvl && (opcode & 0xfe00) != 0xf200) + continue; + } else if (table68k[opcode].clev > lvl) { + continue; + } if (table68k[opcode].handler != -1) { f = cpufunctbl[table68k[opcode].handler]; @@ -238,19 +253,6 @@ void fill_prefetch_slow (struct regstruct *regs) unsigned long cycles_shift; unsigned long cycles_shift_2; -static void update_68k_cycles (void) -{ - cycles_shift = 0; - cycles_shift_2 = 0; - if(currprefs.m68k_speed == M68K_SPEED_14MHZ_CYCLES) - cycles_shift = 1; - else if(currprefs.m68k_speed == M68K_SPEED_25MHZ_CYCLES) - { - cycles_shift = 2; - cycles_shift_2 = 5; - } -} - STATIC_INLINE unsigned long adjust_cycles(unsigned long cycles) { unsigned long res = cycles >> cycles_shift; @@ -260,6 +262,19 @@ STATIC_INLINE unsigned long adjust_cycles(unsigned long cycles) return res; } +static void update_68k_cycles (void) +{ + cycles_shift = 0; + cycles_shift_2 = 0; + if(currprefs.m68k_speed == M68K_SPEED_14MHZ_CYCLES) + cycles_shift = 1; + else if(currprefs.m68k_speed == M68K_SPEED_25MHZ_CYCLES) + { + cycles_shift = 2; + cycles_shift_2 = 5; + } +} + void check_prefs_changed_adr24 (void) { @@ -634,13 +649,20 @@ kludge_me_do: STATIC_INLINE void do_interrupt(int nr, struct regstruct *regs) { - regs->stopped = 0; - unset_special (regs, SPCFLAG_STOP); - assert(nr < 8 && nr >= 0); - Exception (nr + 24, regs, 0); + int vector; + regs->stopped = 0; + unset_special (regs, SPCFLAG_STOP); + assert(nr < 8 && nr >= 0); - regs->intmask = nr; - doint(); + if (currprefs.cpu_model <= 68010) + vector = get_byte (0x00fffff1 | (nr << 1)); + else + vector = nr + 24; + + Exception (vector, regs, 0); + + regs->intmask = nr; + doint(); } void NMI(void) @@ -685,8 +707,7 @@ int movec_illg (int regno) int m68k_move2c (int regno, uae_u32 *regp) { if (movec_illg (regno)) { - op_illg (0x4E7B, ®s); - return 0; + return op_illg (0x4E7B, ®s); } else { switch (regno) { case 0: regs.sfc = *regp & 7; break; @@ -741,18 +762,16 @@ int m68k_move2c (int regno, uae_u32 *regp) } break; default: - op_illg (0x4E7B, ®s); - return 0; + return op_illg (0x4E7B, ®s); } } - return 1; + return 0; } int m68k_movec2 (int regno, uae_u32 *regp) { if (movec_illg (regno)) { - op_illg (0x4E7A, ®s); - return 0; + return op_illg (0x4E7A, ®s); } else { switch (regno) { case 0: *regp = regs.sfc; break; @@ -790,11 +809,10 @@ int m68k_movec2 (int regno, uae_u32 *regp) case 0x808: *regp = regs.pcr; break; default: - op_illg (0x4E7A, ®s); - return 0; + return op_illg (0x4E7A, ®s); } } - return 1; + return 0; } STATIC_INLINE int @@ -825,10 +843,11 @@ div_unsigned(uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae_u32 *quot, uae_u32 void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) { #if defined(uae_s64) - if (src == 0) { - Exception (5, ®s, oldpc); - return; - } + // Done in caller + //if (src == 0) { + // Exception (5, ®s, oldpc); + // return; + //} if (extra & 0x800) { /* signed variant */ uae_s64 a = (uae_s64)(uae_s32)m68k_dreg(®s, (extra >> 12) & 7); @@ -880,10 +899,11 @@ void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra, uaecptr oldpc) } } #else - if (src == 0) { - Exception (5, ®s, oldpc); - return; - } + // Done in caller + //if (src == 0) { + // Exception (5, ®s, oldpc); + // return; + //} if (extra & 0x800) { /* signed variant */ uae_s32 lo = (uae_s32)m68k_dreg(®s, (extra >> 12) & 7); @@ -1108,8 +1128,9 @@ void m68k_reset (int hardreset) */ regs.pcr = 0; if (currprefs.cpu_model == 68060) { - regs.pcr = currprefs.fpu_model ? MC68060_PCR : MC68EC060_PCR; - regs.pcr |= 2; + regs.pcr = currprefs.fpu_model == 68060 ? MC68060_PCR : MC68EC060_PCR; + if (kickstart_rom) + regs.pcr |= 2; /* disable FPU */ } fill_prefetch_slow (®s); } @@ -1134,7 +1155,7 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode, struct regstruct *regs) m68k_dreg (regs, (opcode >> 9) & 7) = (uae_s8)(opcode & 0xFF); m68k_incpc (regs, 2); fill_prefetch_slow (regs); - return 4; + return 4 * CYCLE_UNIT / 2; } if (opcode == 0x4E7B && inrom && get_long (0x10) == 0) { @@ -1150,11 +1171,11 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode, struct regstruct *regs) m68k_incpc (regs, 4); ersatz_perform (arg); fill_prefetch_slow (regs); - return 4; + return 4 * CYCLE_UNIT / 2; } else if (inrt) { /* User-mode STOP replacement */ m68k_setstopped (regs, 1); - return 4; + return 4 * CYCLE_UNIT / 2; } } @@ -1163,20 +1184,23 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode, struct regstruct *regs) m68k_incpc(regs, 2); m68k_handle_trap (opcode & 0xFFF, regs); fill_prefetch_slow (regs); - return 4; + return 4 * CYCLE_UNIT / 2; } #endif - if ((opcode & 0xF000) == 0xF000) { - Exception(0xB, regs, 0); - return 4; - } - if ((opcode & 0xF000) == 0xA000) { - Exception(0xA, regs, 0); - return 4; - } + if ((opcode & 0xF000) == 0xF000) { + Exception(0xB, regs, 0); + } + else if ((opcode & 0xF000) == 0xA000) { + Exception(0xA, regs, 0); + } + else Exception (4, regs, 0); - return 4; + + if(currprefs.cpu_model <= 68010) + return 34 * CYCLE_UNIT / 2; + else + return 27 * CYCLE_UNIT / 2; } #ifdef CPUEMU_0 @@ -1301,11 +1325,6 @@ void mmu_op(uae_u32 opcode, struct regstruct *regs, uae_u32 extra) if (currprefs.cpu_model == 68060) { return; } - } else if (opcode == 0xff00 && extra == 0x01c0) { - /* LPSTOP */ - if (currprefs.cpu_model == 68060) { - return; - } } m68k_setpc (regs, m68k_getpc (regs) - 2); op_illg (opcode, regs); @@ -1323,7 +1342,7 @@ static void do_trace (void) m68k_setpc (®s, m68k_getpc (®s)); fill_prefetch_slow (®s); opcode = get_word (regs.pc); - if (opcode == 0x4e72 /* RTE */ + if (opcode == 0x4e73 /* RTE */ || opcode == 0x4e74 /* RTD */ || opcode == 0x4e75 /* RTS */ || opcode == 0x4e77 /* RTR */ @@ -1352,8 +1371,10 @@ static void do_trace (void) STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) { + do + { if (regs->spcflags & SPCFLAG_COPPER) - do_copper (); + do_copper (); /*n_spcinsns++;*/ #ifdef JIT @@ -1361,70 +1382,85 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) #endif while ((regs->spcflags & SPCFLAG_BLTNASTY) && dmaen (DMA_BLITTER) && cycles > 0) { - int c = blitnasty(); - if (c > 0) { - cycles -= c * CYCLE_UNIT * 2; - if (cycles < CYCLE_UNIT) - cycles = 0; - } else - c = 4; - do_cycles (c * CYCLE_UNIT); - if (regs->spcflags & SPCFLAG_COPPER) - do_copper (); + int c = blitnasty(); + if (c > 0) { + cycles -= c * CYCLE_UNIT * 2; + if (cycles < CYCLE_UNIT) + cycles = 0; + } else + c = 4; + do_cycles (c * CYCLE_UNIT); + if (regs->spcflags & SPCFLAG_COPPER) + do_copper (); } + cycles = 0; - if (regs->spcflags & SPCFLAG_DOTRACE) - Exception (9, regs, last_trace_ad); - if (regs->spcflags & SPCFLAG_TRAP) { - unset_special (regs, SPCFLAG_TRAP); - Exception (3, regs, 0); + if (regs->spcflags & SPCFLAG_DOTRACE) { + Exception (9, regs, last_trace_ad); + cycles = adjust_cycles(34 * CYCLE_UNIT / 2); // 68020 is 32 cycles, but who cares... } + // There is no line where this flag is set... + //if (regs->spcflags & SPCFLAG_TRAP) { + // unset_special (regs, SPCFLAG_TRAP); + // Exception (3, regs, 0); + //} while (regs->spcflags & SPCFLAG_STOP) { - do_cycles (4 * CYCLE_UNIT); - if (regs->spcflags & SPCFLAG_COPPER) - do_copper (); - if (regs->spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { - int intr = intlev (); - unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); - if (intr != -1 && intr > regs->intmask) - do_interrupt (intr, regs); - } - if ((regs->spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { - unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); - return 1; - } - - 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 (vpos != lvpos) { - sleepcnt--; -#ifdef JIT - if (pissoff == 0 && compiled_code && --zerocnt < 0) { - sleepcnt = -1; - zerocnt = IDLETIME / 4; + do_cycles (4 * CYCLE_UNIT); + if (regs->spcflags & SPCFLAG_COPPER) + do_copper (); + if (regs->spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { + int intr = intlev (); + unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); + if (intr != -1 && intr > regs->intmask) { + do_interrupt (intr, regs); + if(currprefs.cpu_model <= 68010) + cycles = adjust_cycles(44 * CYCLE_UNIT / 2); + else + cycles = adjust_cycles(33 * CYCLE_UNIT / 2); } -#endif - lvpos = vpos; - if (sleepcnt < 0) { - sleepcnt = IDLETIME / 2; - sleep_millis (1); - } - } } - } + if ((regs->spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { + unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); + return 1; + } + + // currprefs.cpu_idle always 0 in UAE4ARM + //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 (vpos != lvpos) { + // sleepcnt--; +#ifdef JIT + // if (pissoff == 0 && compiled_code && --zerocnt < 0) { + // sleepcnt = -1; + // zerocnt = IDLETIME / 4; + // } +#endif + // lvpos = vpos; + // if (sleepcnt < 0) { + // sleepcnt = IDLETIME / 2; + // sleep_millis (1); + // } + // } + // } + //} } if (regs->spcflags & SPCFLAG_TRACE) - do_trace (); + do_trace (); if (regs->spcflags & SPCFLAG_INT) { - int intr = intlev (); - unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); - if (intr != -1 && (intr > regs->intmask || intr == 7)) - do_interrupt (intr, regs); + int intr = intlev (); + unset_special (regs, SPCFLAG_INT | SPCFLAG_DOINT); + if (intr != -1 && (intr > regs->intmask || intr == 7)) { + do_interrupt (intr, regs); + if(currprefs.cpu_model <= 68010) + cycles = adjust_cycles(44 * CYCLE_UNIT / 2); + else + cycles = adjust_cycles(33 * CYCLE_UNIT / 2); + } } if (regs->spcflags & SPCFLAG_DOINT) { unset_special (regs, SPCFLAG_DOINT); @@ -1432,10 +1468,14 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) } if ((regs->spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { - unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); - return 1; + unset_special (regs, SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); + return 1; } - return 0; + + cpu_cycles += cycles; // Handle cycles from exceptions and IRQs also in do_cycles() in caller + } while(cycles > 0); + + return 0; } void doint (void) @@ -1603,22 +1643,22 @@ static void m68k_run_2p (void) /* Same thing, but don't use prefetch to get opcode. */ static void m68k_run_2 (void) { - struct regstruct *r = ®s; + struct regstruct *r = ®s; - for (;;) { - uae_u32 opcode = get_iword (r, 0); + for (;;) { + uae_u32 opcode = get_iword (r, 0); - do_cycles (cpu_cycles); + do_cycles (cpu_cycles); #ifdef DEBUG_M68K - m68k_dumpstate(); + m68k_dumpstate(); #endif - cpu_cycles = (*cpufunctbl[opcode])(opcode, r); - cpu_cycles = adjust_cycles(cpu_cycles); - if (r->spcflags) { + cpu_cycles = (*cpufunctbl[opcode])(opcode, r); + cpu_cycles = adjust_cycles(cpu_cycles); + if (r->spcflags) { if (do_specialties (cpu_cycles, r)) - return; - } - } + return; + } + } } /* "MMU" 68k */ @@ -1809,7 +1849,7 @@ uae_u8 *restore_cpu (uae_u8 *src) if (khz > 0 && khz < 800000) currprefs.m68k_speed = changed_prefs.m68k_speed = 0; } - write_log ("CPU %d%s%03d, PC=%08.8X\n", + write_log ("CPU %d%s%03d, PC=%08X\n", model / 1000, flags & 1 ? "EC" : "", model % 1000, regs.pc); return src; @@ -1909,20 +1949,6 @@ void exception3i (uae_u32 opcode, uaecptr addr, uaecptr fault) exception3f (opcode, addr, fault, 0, 1); } -void exception2 (uaecptr addr, uaecptr fault) -{ - write_log ("delayed exception2!\n"); - regs.panic_pc = m68k_getpc (®s); - regs.panic_addr = addr; - regs.panic = 2; - set_special (®s, SPCFLAG_BRK); - m68k_setpc (®s, 0xf80000); -#ifdef JIT - set_special(®s, SPCFLAG_END_COMPILE); -#endif - fill_prefetch_slow (®s); -} - void cpureset (void) { uaecptr pc; diff --git a/src/od-pandora/gui/CreateFilesysHardfile.cpp b/src/od-pandora/gui/CreateFilesysHardfile.cpp index 8825fc37..515d57fa 100644 --- a/src/od-pandora/gui/CreateFilesysHardfile.cpp +++ b/src/od-pandora/gui/CreateFilesysHardfile.cpp @@ -304,7 +304,7 @@ bool CreateFilesysHardfile(void) 32, (size / 1024) + 1, 2, 512, bp, 0, 0, 0); if (uci) - hardfile_do_disk_change (uci->configoffset, 1); + hardfile_do_disk_change (uci, 1); } return dialogResult; diff --git a/src/od-pandora/gui/EditFilesysHardfile.cpp b/src/od-pandora/gui/EditFilesysHardfile.cpp index af430a6d..5fa286a0 100644 --- a/src/od-pandora/gui/EditFilesysHardfile.cpp +++ b/src/od-pandora/gui/EditFilesysHardfile.cpp @@ -363,7 +363,7 @@ bool EditFilesysHardfile(int unit_no) atoi(txtReserved->getText().c_str()), atoi(txtBlocksize->getText().c_str()), bp, 0, 0, 0); if (uci) - hardfile_do_disk_change (uci->configoffset, 1); + hardfile_do_disk_change (uci, 1); } return dialogResult; } diff --git a/src/od-pandora/gui/PanelSavestate.cpp b/src/od-pandora/gui/PanelSavestate.cpp index 4af17c92..96ea809a 100644 --- a/src/od-pandora/gui/PanelSavestate.cpp +++ b/src/od-pandora/gui/PanelSavestate.cpp @@ -63,7 +63,7 @@ class SavestateActionListener : public gcn::ActionListener if (f) { fclose(f); - savestate_initsave(savestate_fname, 2); + savestate_initsave(savestate_fname, 2, 0); savestate_state = STATE_DORESTORE; gui_running = false; } @@ -81,7 +81,7 @@ class SavestateActionListener : public gcn::ActionListener //------------------------------------------ if(emulating) { - savestate_initsave(savestate_fname, 2); + savestate_initsave(savestate_fname, 2, 0); save_state (savestate_fname, "..."); savestate_state = STATE_DOSAVE; // Just to create the screenshot delay_savestate_frame = 1; diff --git a/src/od-pandora/neon_helper.s b/src/od-pandora/neon_helper.s index c87f2958..258a893c 100644 --- a/src/od-pandora/neon_helper.s +++ b/src/od-pandora/neon_helper.s @@ -4,8 +4,8 @@ .global TRACE_Start .global TRACE_mem -.global pixcpy_swap16 -.global pixcpy_swap32 +.global copy_screen_16bit_swap +.global copy_screen_32bit_to_16bit_neon .global ARM_doline_n1 .global NEON_doline_n2 .global NEON_doline_n3 @@ -62,49 +62,66 @@ TRACE_Start: @---------------------------------------------------------------- -@ pixcpy_swap16 +@ copy_screen_16bit_swap @ -@ r0: uae_u16 *dstp -@ r1: uae_u16 *srcp -@ r2: int cols +@ r0: uae_u8 *dst +@ r1: uae_u8 *src +@ r2: int bytes always a multiple of 128: even number of lines, 2 bytes per pixel, number of pixel per line is multiple of 32 (320, 640, 800, 1024, 1152, 1280) @ -@ void pixcpy_swap16(uae_u16 *dstp, uae_u16 *srcp, int cols); +@ void copy_screen_16bit_swap(uae_u8 *dst, uae_u8 *src, int bytes); @ @---------------------------------------------------------------- -pixcpy_swap16: - subs r2, r2, #1 - bxmi lr -pixcpy_swap16_1: - ldrh r3, [r1], #2 - rev16 r3, r3 - strh r3, [r0], #2 - subs r2, r2, #1 - bge pixcpy_swap16_1 - bx lr +copy_screen_16bit_swap: + pld [r1, #192] + vldmia r1!, {q8, q9} + vrev16.8 q8, q8 + vldmia r1!, {q10} + vrev16.8 q9, q9 + vldmia r1!, {q11} + vrev16.8 q10, q10 + vldmia r1!, {q12} + vrev16.8 q11, q11 + vldmia r1!, {q13} + vrev16.8 q12, q12 + vldmia r1!, {q14} + vrev16.8 q13, q13 + vldmia r1!, {q15} + vrev16.8 q14, q14 + vrev16.8 q15, q15 + subs r2, r2, #128 @ we handle 16 * 8 bytes per loop + vstmia r0!, {q8-q15} + bne copy_screen_16bit_swap + bx lr @---------------------------------------------------------------- -@ pixcpy_swap32 +@ copy_screen_32bit_to_16bit_neon @ -@ r0: uae_u32 *dstp -@ r1: uae_u32 *srcp -@ r2: int cols +@ r0: uae_u8 *dst - Format (bits): rrrr rggg gggb bbbb +@ r1: uae_u8 *src - Format (bytes) in memory rgba +@ r2: int bytes @ -@ void pixcpy_swap32(uae_u32 *dstp, uae_u32 *srcp, int cols); +@ void copy_screen_32bit_to_16bit_neon(uae_u8 *dst, uae_u8 *src, int bytes); @ @---------------------------------------------------------------- -pixcpy_swap32: - subs r2, r2, #1 - bxmi lr -pixcpy_swap32_1: - ldr r3, [r1], #4 - rev r3, r3 - str r3, [r0], #4 - subs r2, r2, #1 - bge pixcpy_swap32_1 - bx lr - - +copy_screen_32bit_to_16bit_neon: + pld [r1, #192] + vld4.8 {d18-d21}, [r1]! + vld4.8 {d22-d25}, [r1]! + vswp d19, d22 + vswp d21, d24 @ -> q9=r, q10=b, q11=g, q12=a + vsri.i8 q9, q11, #5 @ q9: rrrr rggg + vshr.u8 q8, q10, #3 @ q8: 000b bbbb + vshr.u8 q11, q11, #2 @ q11: 00gg gggg + vsli.i8 q8, q11, #5 @ q8: gggb bbbb + vswp d17, d18 + subs r2, r2, #64 @ processd 4 (bytes per pixel) * 16 (pixel) + vst2.8 {d16-d17}, [r0]! + vst2.8 {d18-d19}, [r0]! + bne copy_screen_32bit_to_16bit_neon + bx lr + + @---------------------------------------------------------------- @ ARM_doline_n1 @ diff --git a/src/od-pandora/pandora.cpp b/src/od-pandora/pandora.cpp index c0b97a91..49f0e13f 100644 --- a/src/od-pandora/pandora.cpp +++ b/src/od-pandora/pandora.cpp @@ -36,6 +36,8 @@ #include "newcpu.h" #include "traps.h" #include "native2amiga.h" +#include "rtgmodes.h" +#include "uaeresource.h" #include #include "gp2x.h" @@ -98,6 +100,7 @@ void reinit_amiga(void) #endif #ifdef FILESYS rtarea_init (); + uaeres_install (); hardfile_install(); #endif @@ -217,6 +220,8 @@ void target_default_options (struct uae_prefs *p, int type) p->pandora_button2 = GP2X_BUTTON_A; p->pandora_autofireButton1 = GP2X_BUTTON_B; p->pandora_jump = -1; + + p->picasso96_modeflags = RGBFF_R5G6B5 | RGBFF_R8G8B8A8; } @@ -656,7 +661,7 @@ int main (int argc, char *argv[]) printf("Failed to set signal handler (SIGILL).\n"); abort(); } - + alloc_AmigaMem(); RescanROMs(); real_main (argc, argv); @@ -905,7 +910,8 @@ void handle_events (void) else { int mouseScale = currprefs.input_joymouse_multiplier / 2; - + if(rEvent.motion.xrel > 20 || rEvent.motion.xrel < -20 || rEvent.motion.yrel > 20 || rEvent.motion.yrel < -20) + break; lastmx += rEvent.motion.xrel * mouseScale; lastmy += rEvent.motion.yrel * mouseScale; if(rEvent.motion.x == 0) diff --git a/src/od-pandora/pandora_gfx.cpp b/src/od-pandora/pandora_gfx.cpp index faef528e..1a91a365 100644 --- a/src/od-pandora/pandora_gfx.cpp +++ b/src/od-pandora/pandora_gfx.cpp @@ -17,10 +17,6 @@ #include #include -#include -#include -#include - #ifdef ANDROIDSDL #include #endif @@ -39,11 +35,10 @@ static int y_size_table[MAX_SCREEN_MODES] = { 400, 480, 480, 768, 864, 960 }; static int red_bits, green_bits, blue_bits; static int red_shift, green_shift, blue_shift; -int screen_is_picasso; -static int picasso_maxw = 0, picasso_maxh = 0; - -static int bitdepth, bit_unit; +struct PicassoResolution *DisplayModes; +struct MultiDisplay Displays[MAX_DISPLAYS]; +int screen_is_picasso = 0; static int curr_layer_width = 0; @@ -74,18 +69,10 @@ static unsigned long previous_synctime = 0; static unsigned long next_synctime = 0; -static int fbdevice = -1; -static inline void WaitForVSync(void) -{ - int arg = 0; - if(fbdevice != -1) - ioctl(fbdevice, FBIO_WAITFORVSYNC, &arg); -} - - int graphics_setup (void) { #ifdef PICASSO96 + picasso_InitResolutions(); InitPicasso96(); #endif return 1; @@ -110,11 +97,6 @@ void graphics_subshutdown (void) { SDL_FreeSurface(prSDLScreen); prSDLScreen = NULL; - if(fbdevice != -1) - { - close(fbdevice); - fbdevice = -1; - } } @@ -124,6 +106,7 @@ static void CalcPandoraWidth(struct uae_prefs *p) int amigaHeight = p->gfx_size.height; int pandHeight = 480; + p->gfx_resolution = p->gfx_size.width > 600 ? 1 : 0; if(amigaWidth > 600) amigaWidth = amigaWidth / 2; // Hires selected, but we calc in lores int pandWidth = (amigaWidth * pandHeight) / amigaHeight; @@ -156,7 +139,10 @@ static void open_screen(struct uae_prefs *p) } else { - snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); + if(picasso_vidinfo.height < 480) + snprintf(layersize, 20, "%dx480", picasso_vidinfo.width); + else + snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); #ifndef WIN32 setenv("SDL_OMAP_LAYER_SIZE", layersize, 1); #endif @@ -181,9 +167,7 @@ static void open_screen(struct uae_prefs *p) } else { - prSDLScreen = SDL_SetVideoMode(picasso_vidinfo.width, picasso_vidinfo.height, 16, SDL_SWSURFACE|SDL_FULLSCREEN); - if(fbdevice == -1) - fbdevice = open("/dev/fb0", O_RDWR); // We have to wait for vsync by hand when no SDL_DOUBLEBUF... + prSDLScreen = SDL_SetVideoMode(picasso_vidinfo.width, picasso_vidinfo.height, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); } if(prSDLScreen != NULL) { @@ -209,12 +193,14 @@ int check_prefs_changed_gfx (void) if(currprefs.gfx_size.height != changed_prefs.gfx_size.height || currprefs.gfx_size.width != changed_prefs.gfx_size.width || - currprefs.gfx_size_fs.width != changed_prefs.gfx_size_fs.width) + currprefs.gfx_size_fs.width != changed_prefs.gfx_size_fs.width || + currprefs.gfx_resolution != changed_prefs.gfx_resolution) { cfgfile_configuration_change(1); currprefs.gfx_size.height = changed_prefs.gfx_size.height; currprefs.gfx_size.width = changed_prefs.gfx_size.width; currprefs.gfx_size_fs.width = changed_prefs.gfx_size_fs.width; + currprefs.gfx_resolution = changed_prefs.gfx_resolution; update_display(&currprefs); changed = 1; } @@ -268,18 +254,12 @@ void flush_screen () unsigned long start = read_processor_time(); if(start < next_synctime && next_synctime - start > time_per_frame - 1000) usleep((next_synctime - start) - 750); - if(screen_is_picasso) - { - WaitForVSync(); - last_synctime = read_processor_time(); - SDL_Flip(prSDLScreen); - } - else - { - SDL_Flip(prSDLScreen); - last_synctime = read_processor_time(); + + SDL_Flip(prSDLScreen); + last_synctime = read_processor_time(); + + if(!screen_is_picasso) gfxvidinfo.bufmem = (uae_u8 *)prSDLScreen->pixels; - } if(last_synctime - next_synctime > time_per_frame - 1000) adjust_idletime(0); @@ -421,6 +401,20 @@ static int get_display_depth (void) } +int GetSurfacePixelFormat(void) +{ + int depth = get_display_depth(); + int unit = (depth + 1) & 0xF8; + + return (unit == 8 ? RGBFB_CHUNKY + : depth == 15 && unit == 16 ? RGBFB_R5G5B5 + : depth == 16 && unit == 16 ? RGBFB_R5G6B5 + : unit == 24 ? RGBFB_B8G8R8 + : unit == 32 ? RGBFB_R8G8B8A8 + : RGBFB_NONE); +} + + int graphics_init (void) { int i,j; @@ -553,102 +547,103 @@ static int save_thumb(char *path) #ifdef PICASSO96 -uae_u16 picasso96_pixel_format = RGBFF_CHUNKY; - -void DX_Invalidate (int x, int y, int width, int height) +static int resolution_compare (const void *a, const void *b) { - // We draw everything direct to the frame buffer + struct PicassoResolution *ma = (struct PicassoResolution *)a; + struct PicassoResolution *mb = (struct PicassoResolution *)b; + if (ma->res.width < mb->res.width) + return -1; + if (ma->res.width > mb->res.width) + return 1; + if (ma->res.height < mb->res.height) + return -1; + if (ma->res.height > mb->res.height) + return 1; + return ma->depth - mb->depth; } - -int DX_BitsPerCannon (void) +static void sortmodes (void) { - return 8; -} - -static int palette_update_start = 256; -static int palette_update_end = 0; - -void DX_SetPalette (int start, int count) -{ - if (! screen_is_picasso || picasso96_state.RGBFormat != RGBFB_CHUNKY) - return; - - if (picasso_vidinfo.pixbytes != 1) { - /* This is the case when we're emulating a 256 color display. */ - while (count-- > 0) { - int r = picasso96_state.CLUT[start].Red; - int g = picasso96_state.CLUT[start].Green; - int b = picasso96_state.CLUT[start].Blue; - picasso_vidinfo.clut[start++] = - (doMask256 (r, red_bits, red_shift) - | doMask256 (g, green_bits, green_shift) - | doMask256 (b, blue_bits, blue_shift)); + int i = 0, idx = -1; + int pw = -1, ph = -1; + while (DisplayModes[i].depth >= 0) + i++; + qsort (DisplayModes, i, sizeof (struct PicassoResolution), resolution_compare); + for (i = 0; DisplayModes[i].depth >= 0; i++) { + if (DisplayModes[i].res.height != ph || DisplayModes[i].res.width != pw) { + ph = DisplayModes[i].res.height; + pw = DisplayModes[i].res.width; + idx++; } - notice_screen_contents_lost(); + DisplayModes[i].residx = idx; } } -int DX_Fill (int dstx, int dsty, int width, int height, uae_u32 color, RGBFTYPE rgbtype) +static void modesList (void) { - int result = 0; + int i, j; - SDL_Rect rect = {dstx, dsty, width, height}; - - if (SDL_FillRect (prSDLScreen, &rect, color) == 0) { - DX_Invalidate (dstx, dsty, width, height); - result = 1; + i = 0; + while (DisplayModes[i].depth >= 0) { + write_log ("%d: %s (", i, DisplayModes[i].name); + j = 0; + while (DisplayModes[i].refresh[j] > 0) { + if (j > 0) + write_log (","); + write_log ("%d", DisplayModes[i].refresh[j]); + j++; } - - return result; + write_log (")\n"); + i++; + } } -int DX_FillResolutions (uae_u16 *ppixel_format) +void picasso_InitResolutions (void) { + struct MultiDisplay *md1; int i, count = 0; - int w = 0; - int h = 0; - int emulate_chunky = 0; - - /* In the new scheme of things, this function is called *before* graphics_init. - * Hence, we need to find the display depth ourselves - Rich */ - bitdepth = get_display_depth (); - bit_unit = (bitdepth + 1) & 0xF8; - - picasso_vidinfo.rgbformat = (bit_unit == 8 ? RGBFB_CHUNKY - : bitdepth == 15 && bit_unit == 16 ? RGBFB_R5G5B5 - : bitdepth == 16 && bit_unit == 16 ? RGBFB_R5G6B5 - : bit_unit == 24 ? RGBFB_B8G8R8 - : bit_unit == 32 ? RGBFB_A8R8G8B8 - : RGBFB_NONE); - - *ppixel_format = 1 << picasso_vidinfo.rgbformat; - if (bit_unit == 16 || bit_unit == 32) { - *ppixel_format |= RGBFF_CHUNKY; -// emulate_chunky = 1; - } + char tmp[200]; + int bitdepth; + + Displays[0].primary = 1; + Displays[0].disabled = 0; + Displays[0].rect.left = 0; + Displays[0].rect.top = 0; + Displays[0].rect.right = 800; + Displays[0].rect.bottom = 640; + sprintf (tmp, "%s (%d*%d)", "Display", Displays[0].rect.right, Displays[0].rect.bottom); + Displays[0].name = my_strdup(tmp); + Displays[0].name2 = my_strdup("Display"); + md1 = Displays; + DisplayModes = md1->DisplayModes = (struct PicassoResolution*) xmalloc (sizeof (struct PicassoResolution) * MAX_PICASSO_MODES); for (i = 0; i < MAX_SCREEN_MODES && count < MAX_PICASSO_MODES; i++) { - int j; - if (SDL_VideoModeOK (x_size_table[i], y_size_table[i], bitdepth, SDL_SWSURFACE)) - { - for (j = 0; j <= emulate_chunky && count < MAX_PICASSO_MODES; j++) { - if (x_size_table[i] > picasso_maxw) - picasso_maxw = x_size_table[i]; - if (y_size_table[i] > picasso_maxh) - picasso_maxh = y_size_table[i]; - DisplayModes[count].res.width = x_size_table[i]; - DisplayModes[count].res.height = y_size_table[i]; - DisplayModes[count].depth = j == 1 ? 1 : bit_unit >> 3; - DisplayModes[count].refresh = 50; - - count++; - } + for(bitdepth = 16; bitdepth <= 32; bitdepth += 16) { + int bit_unit = (bitdepth + 1) & 0xF8; + int rgbFormat = (bitdepth == 16 ? RGBFB_R5G6B5 : RGBFB_R8G8B8A8); + int pixelFormat = 1 << rgbFormat; + pixelFormat |= RGBFF_CHUNKY; + + if (SDL_VideoModeOK (x_size_table[i], y_size_table[i], bitdepth, SDL_SWSURFACE)) + { + DisplayModes[count].res.width = x_size_table[i]; + DisplayModes[count].res.height = y_size_table[i]; + DisplayModes[count].depth = bit_unit >> 3; + DisplayModes[count].refresh[0] = 50; + DisplayModes[count].refresh[1] = 60; + DisplayModes[count].refresh[2] = 0; + DisplayModes[count].colormodes = pixelFormat; + sprintf(DisplayModes[count].name, "%dx%d, %d-bit", + DisplayModes[count].res.width, DisplayModes[count].res.height, DisplayModes[count].depth * 8); + + count++; + } } } DisplayModes[count].depth = -1; - - return count; + sortmodes(); + modesList(); + DisplayModes = Displays[0].DisplayModes; } void gfx_set_picasso_modeinfo (uae_u32 w, uae_u32 h, uae_u32 depth, RGBFTYPE rgbfmt) @@ -682,8 +677,6 @@ void gfx_set_picasso_state (int on) screen_is_picasso = on; open_screen(&currprefs); picasso_vidinfo.rowbytes = prSDLScreen->pitch; - if (on) - DX_SetPalette (0, 256); } uae_u8 *gfx_lock_picasso (void) diff --git a/src/od-pandora/pandora_gui.cpp b/src/od-pandora/pandora_gui.cpp index d6ffa3cc..09b75157 100644 --- a/src/od-pandora/pandora_gui.cpp +++ b/src/od-pandora/pandora_gui.cpp @@ -157,11 +157,22 @@ static struct romdata *scan_single_rom_2 (struct zfile *f) return 0; zfile_fread (rombuf, 1, size, f); if (cl > 0) { - if(decode_cloanto_rom_do (rombuf, size, size)) - cl = 0; + decode_cloanto_rom_do (rombuf, size, size); + cl = 0; } - if (!cl) + if (!cl) { rd = getromdatabydata (rombuf, size); + if (!rd && (size & 65535) == 0) { + /* check byteswap */ + int i; + for (i = 0; i < size; i+=2) { + uae_u8 b = rombuf[i]; + rombuf[i] = rombuf[i + 1]; + rombuf[i + 1] = b; + } + rd = getromdatabydata (rombuf, size); + } + } free (rombuf); return rd; } @@ -1302,6 +1313,10 @@ void gui_handle_events (void) } } +void gui_disk_image_change (int unitnum, const char *name) +{ +} + void gui_hd_led (int led) { static int resetcounter; diff --git a/src/od-pandora/picasso96.cpp b/src/od-pandora/picasso96.cpp index 0c162d55..85c8f317 100644 --- a/src/od-pandora/picasso96.cpp +++ b/src/od-pandora/picasso96.cpp @@ -3,9 +3,8 @@ * * Picasso96 Support Module * - * Copyright 1997-2001 Brian King - * Copyright 2000-2001 Bernd Roesch - * Copyright 2003-2005 Richard Drummond +* Copyright 1997-2001 Brian King +* Copyright 2000-2001 Bernd Roesch <> * * Theory of operation: * On the Amiga side, a Picasso card consists mainly of a memory area that @@ -31,38 +30,62 @@ * programs started from a Picasso workbench. */ +/* + * Note: This is the Pandora specific version of Picasso96: + * - only 16 bit color mode is available (R5G6B5) in hardware + * - we simulate R8G8B8A8 on Amiga side and use Neon-code to convert to R5G6B5 + * - we have no hardware sprite for mouse pointer + * I removed some code which handled unsupported modes and formats to make code + * easier to read. + */ + #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" -#include "uae.h" +#include "td-sdl/thread.h" #include "memory.h" #include "custom.h" +#include "events.h" #include "newcpu.h" #include "xwin.h" #include "savestate.h" #include "autoconf.h" #include "traps.h" +#include "native2amiga.h" -#ifdef PICASSO96 +#if defined(PICASSO96) #include "picasso96.h" #include -int have_done_picasso; /* For the JIT compiler */ +#define NOBLITTER 0 +#define NOBLITTER_BLIT 0 + +static int picasso96_BT = BT_uaegfx; +static int picasso96_GCT = GCT_Unknown; +static int picasso96_PCT = PCT_Unknown; + +int have_done_picasso = 1; /* For the JIT compiler */ static int p96syncrate; +int p96hsync_counter, full_refresh; -int palette_changed; +#ifdef PICASSO96 -static uae_u32 REGPARAM2 gfxmem_lget (uaecptr) REGPARAM; -static uae_u32 REGPARAM2 gfxmem_wget (uaecptr) REGPARAM; -static uae_u32 REGPARAM2 gfxmem_bget (uaecptr) REGPARAM; -static void REGPARAM2 gfxmem_lput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 gfxmem_wput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 gfxmem_bput (uaecptr, uae_u32) REGPARAM; -static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size) REGPARAM; -static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr) REGPARAM; +#define P96TRACING_ENABLED 0 +#define P96TRACING_LEVEL 0 + +static void flushpixels(void); +#if P96TRACING_ENABLED +#define P96TRACE(x) do { write_log x; } while(0) +#else +#define P96TRACE(x) +#endif + +static void REGPARAM2 gfxmem_lputx (uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 gfxmem_wputx (uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 gfxmem_bputx (uaecptr, uae_u32) REGPARAM; static uae_u8 all_ones_bitmap, all_zeros_bitmap; /* yuk */ @@ -70,6 +93,8 @@ struct picasso96_state_struct picasso96_state; struct picasso_vidbuf_description picasso_vidinfo; static struct PicassoResolution *newmodes = NULL; +static int picasso_convert, host_mode; + /* These are the maximum resolutions... They are filled in by GetSupportedResolutions() */ /* have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects /* data here. */ @@ -79,6 +104,39 @@ static struct ScreenResolution hicolour = { 640, 480 }; static struct ScreenResolution truecolour = { 640, 480 }; static struct ScreenResolution alphacolour = { 640, 480 }; +uae_u32 p96_rgbx16[65536]; + +static int cursorwidth, cursorheight; +static uaecptr boardinfo; +static int interrupt_enabled; +int p96vblank; + +static uaecptr uaegfx_resname, + uaegfx_resid, + uaegfx_init, + uaegfx_base, + uaegfx_rom; + +typedef enum { + BLIT_FALSE, + BLIT_NOR, + BLIT_ONLYDST, + BLIT_NOTSRC, + BLIT_ONLYSRC, + BLIT_NOTDST, + BLIT_EOR, + BLIT_NAND, + BLIT_AND, + BLIT_NEOR, + BLIT_DST, + BLIT_NOTONLYSRC, + BLIT_SRC, + BLIT_NOTONLYDST, + BLIT_OR, + BLIT_TRUE, + BLIT_LAST +} BLIT_OPCODE; + #define UAE_RTG_LIBRARY_VERSION 40 #define UAE_RTG_LIBRARY_REVISION 3994 static void checkrtglibrary(void) @@ -101,7 +159,6 @@ static void checkrtglibrary(void) uae_u16 ver = get_word(v + 20); uae_u16 rev = get_word(v + 22); if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) { - char msg[2000]; write_log("installed rtg.library: %d.%d, required: %d.%d\n", ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION); } else { write_log("P96: rtg.library %d.%d detected\n", ver, rev); @@ -111,19 +168,167 @@ static void checkrtglibrary(void) } } -struct PicassoResolution DisplayModes[MAX_PICASSO_MODES]; - -static int mode_count = 0; - static uae_u32 p2ctab[256][2]; static int set_gc_called = 0, init_picasso_screen_called = 0; +//fastscreen +static uaecptr oldscr = 0; +static void endianswap (uae_u32 *vp, int bpp) +{ + uae_u32 v = *vp; + switch (bpp) + { + case 2: + *vp = (((v >> 8) & 0x00ff) | (v << 8)) & 0xffff; + break; + case 4: + *vp = ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000); + break; + } +} + +#if P96TRACING_ENABLED +/* +* Debugging dumps +*/ +static void DumpModeInfoStructure (uaecptr amigamodeinfoptr) +{ + write_log ("ModeInfo Structure Dump:\n"); + write_log (" Node.ln_Succ = 0x%x\n", get_long (amigamodeinfoptr)); + write_log (" Node.ln_Pred = 0x%x\n", get_long (amigamodeinfoptr + 4)); + write_log (" Node.ln_Type = 0x%x\n", get_byte (amigamodeinfoptr + 8)); + write_log (" Node.ln_Pri = %d\n", get_byte (amigamodeinfoptr + 9)); + /*write_log (" Node.ln_Name = %s\n", uaememptr->Node.ln_Name); */ + write_log (" OpenCount = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_OpenCount)); + write_log (" Active = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Active)); + write_log (" Width = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Width)); + write_log (" Height = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Height)); + write_log (" Depth = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Depth)); + write_log (" Flags = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Flags)); + write_log (" HorTotal = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorTotal)); + write_log (" HorBlankSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize)); + write_log (" HorSyncStart = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart)); + write_log (" HorSyncSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize)); + write_log (" HorSyncSkew = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew)); + write_log (" HorEnableSkew = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew)); + write_log (" VerTotal = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerTotal)); + write_log (" VerBlankSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize)); + write_log (" VerSyncStart = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart)); + write_log (" VerSyncSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize)); + write_log (" Clock = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_first_union)); + write_log (" ClockDivide = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_second_union)); + write_log (" PixelClock = %d\n", get_long (amigamodeinfoptr + PSSO_ModeInfo_PixelClock)); +} + +static void DumpLibResolutionStructure (uaecptr amigalibresptr) +{ + int i; + + uaecptr amigamodeinfoptr; + struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr + PSSO_LibResolution_P96ID).xlateaddr(amigalibresptr + PSSO_LibResolution_P96ID); + + write_log ("LibResolution Structure Dump:\n"); + + if (get_long (amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) { + write_log (" Finished With LibResolutions...\n"); + } else { + write_log (" Name = %s\n", uaememptr->P96ID); + write_log (" DisplayID = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_DisplayID)); + write_log (" Width = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Width)); + write_log (" Height = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Height)); + write_log (" Flags = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Flags)); + for (i = 0; i < MAXMODES; i++) { + amigamodeinfoptr = get_long (amigalibresptr + PSSO_LibResolution_Modes + i*4); + write_log (" ModeInfo[%d] = 0x%x\n", i, amigamodeinfoptr); + if (amigamodeinfoptr) + DumpModeInfoStructure (amigamodeinfoptr); + } + write_log (" BoardInfo = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_BoardInfo)); + } +} + +static char binary_byte[9] = { 0,0,0,0,0,0,0,0,0 }; + +static char *BuildBinaryString (uae_u8 value) +{ + int i; + for (i = 0; i < 8; i++) { + binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; + } + return binary_byte; +} + +static void DumpPattern (struct Pattern *patt) +{ + uae_u8 *mem; + int row, col; + for (row = 0; row < (1 << patt->Size); row++) { + mem = (uae_u8 *)patt->Memory + row * 2; + for (col = 0; col < 2; col++) { + write_log ("%s ", BuildBinaryString (*mem++)); + } + write_log ("\n"); + } +} + +static void DumpTemplate (struct Template *tmp, unsigned long w, unsigned long h) +{ + uae_u8 *mem = (uae_u8 *)tmp->Memory; + unsigned int row, col, width; + width = (w + 7) >> 3; + write_log ("xoffset = %d, bpr = %d\n", tmp->XOffset, tmp->BytesPerRow); + for (row = 0; row < h; row++) { + mem = (uae_u8 *)tmp->Memory + row * tmp->BytesPerRow; + for (col = 0; col < width; col++) { + write_log ("%s ", BuildBinaryString (*mem++)); + } + write_log ("\n"); + } +} + +static void DumpLine(struct Line *line) +{ + if (line) { + write_log ("Line->X = %d\n", line->X); + write_log ("Line->Y = %d\n", line->Y); + write_log ("Line->Length = %d\n", line->Length); + write_log ("Line->dX = %d\n", line->dX); + write_log ("Line->dY = %d\n", line->dY); + write_log ("Line->sDelta = %d\n", line->sDelta); + write_log ("Line->lDelta = %d\n", line->lDelta); + write_log ("Line->twoSDminusLD = %d\n", line->twoSDminusLD); + write_log ("Line->LinePtrn = %d\n", line->LinePtrn); + write_log ("Line->PatternShift = %d\n", line->PatternShift); + write_log ("Line->FgPen = 0x%x\n", line->FgPen); + write_log ("Line->BgPen = 0x%x\n", line->BgPen); + write_log ("Line->Horizontal = %d\n", line->Horizontal); + write_log ("Line->DrawMode = %d\n", line->DrawMode); + write_log ("Line->Xorigin = %d\n", line->Xorigin); + write_log ("Line->Yorigin = %d\n", line->Yorigin); + } +} + +static void ShowSupportedResolutions (void) +{ + int i = 0; + + write_log ("-----------------\n"); + while (newmodes[i].depth >= 0) { + write_log ("%s\n", newmodes[i].name); + i++; + } + write_log ("-----------------\n"); +} + +#endif + +extern uae_u8 *natmem_offset; + static uae_u8 GetBytesPerPixel (uae_u32 RGBfmt) { - static int bFailure = 0; - - switch (RGBfmt) { + switch (RGBfmt) + { case RGBFB_CLUT: return 1; @@ -144,17 +349,6 @@ static uae_u8 GetBytesPerPixel (uae_u32 RGBfmt) case RGBFB_B5G6R5PC: case RGBFB_B5G5R5PC: return 2; - default: - write_log ("ERROR - GetBytesPerPixel() was unsuccessful with 0x%x?!\n", RGBfmt); - if( !bFailure ) - { - bFailure = 1; - return GetBytesPerPixel(picasso_vidinfo.rgbformat); - } - else - { - abort(); - } } return 0; } @@ -194,12 +388,15 @@ static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern return 0; } -static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim) +static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim, int Bpp) { int i; cim->ColorMask = get_long (amigamemptr); - for (i = 0; i < 256; i++, amigamemptr += 4) - cim->Colors[i] = get_long (amigamemptr + 4); + for (i = 0; i < 256; i++, amigamemptr += 4) { + uae_u32 v = get_long (amigamemptr + 4); + endianswap (&v, Bpp); + cim->Colors[i] = v; + } } static int CopyBitMapStructureA2U (uaecptr amigamemptr, struct BitMap *bm) @@ -262,410 +459,238 @@ static void AmigaListAddTail (uaecptr l, uaecptr n) put_long (l + 8, n); // l->lh_TailPred = n; } -/* - * Functions to perform an action on the real screen - */ - -/* - * Fill a rectangle on the screen. src points to the start of a line of the - * filled rectangle in the frame buffer; it can be used as a memcpy source if - * there is no OS specific function to fill the rectangle. - */ - -static void do_fillrect (uae_u8 *src, unsigned int x, unsigned int y, - unsigned int width, unsigned int height, - uae_u32 pen, int Bpp, RGBFTYPE rgbtype) -{ - uae_u8 *dst; - - /* Try OS specific fillrect function here; and return if successful. Make sure we adjust for - * the pen values if we're doing 8-bit display-emulation on a 16-bit or higher screen. */ - if( picasso_vidinfo.rgbformat == picasso96_state.RGBFormat ) - { - if( DX_Fill( x, y, width, height, pen, rgbtype ) ) - return; - } - else - { - if(DX_Fill(x, y, width, height, picasso_vidinfo.clut[pen], rgbtype)) - return; - } - - if (y + height > picasso_vidinfo.height) - height = picasso_vidinfo.height - y; - if (x + width > picasso_vidinfo.width) - width = picasso_vidinfo.width - x; - - DX_Invalidate (x, y, width, height); - if (!picasso_vidinfo.extra_mem) - return; - - dst = gfx_lock_picasso (); - - if (!dst) - goto out; - - width *= Bpp; - dst += y * picasso_vidinfo.rowbytes + x * picasso_vidinfo.pixbytes; - if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) - { - if (Bpp == 1) - { - while (height-- > 0) - { - memset (dst, pen, width); - dst += picasso_vidinfo.rowbytes; - } - } - else - { - // Set first line - if (Bpp == 2) { - for(int i=0; i 0) - { - memcpy (dst, src, width); - dst += picasso_vidinfo.rowbytes; - } - } - } - else - { - int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat); - if (picasso96_state.RGBFormat != RGBFB_CHUNKY) - { - write_log ("ERROR - do_fillrect() failure1 (%d)\n", picasso96_state.RGBFormat); - abort (); - } - - while (height-- > 0) - { - unsigned int i; - switch (psiz) - { - case 2: - for (i = 0; i < width; i++) - *((uae_u16 *) dst + i) = picasso_vidinfo.clut[src[i]]; - break; - case 4: - for (i = 0; i < width; i++) - *((uae_u32 *) dst + i) = picasso_vidinfo.clut[src[i]]; - break; - default: - write_log ("ERROR - do_fillrect() failure2 (%d), psize\n"); - abort (); - break; - } - dst += picasso_vidinfo.rowbytes; - } - } -out: - gfx_unlock_picasso (); -} - -/* - * This routine modifies the real screen buffer after a blit has been - * performed in the save area. If can_do_blit is nonzero, the blit can - * be performed within the real screen buffer; otherwise, this routine - * must do it by hand using the data in the frame-buffer, calculated using - * the RenderInfo data and our coordinates. - */ - -static void do_blit (struct RenderInfo *ri, int Bpp, - unsigned int srcx, unsigned int srcy, unsigned int dstx, unsigned int dsty, - unsigned int width, unsigned int height, BLIT_OPCODE opcode, int can_do_blit) -{ - uae_u8 *dstp, *srcp; - - dstx = dstx - picasso96_state.XOffset; - dsty = dsty - picasso96_state.YOffset; - if ((int)dstx <= 0) { - srcx=srcx-dstx; - dstx = 0; - } - if ((int)dsty <= 0) { - srcy=srcy-dsty; - dsty = 0; - } - - /* Is our x/y origin on-screen? */ - if( dsty >= picasso_vidinfo.height ) - return; - if( dstx >= picasso_vidinfo.width ) - return; - - /* Is our area in-range? */ - if (dsty + height >= picasso_vidinfo.height) - height = picasso_vidinfo.height - dsty; - if (dstx + width >= picasso_vidinfo.width) - width = picasso_vidinfo.width - dstx; - - srcp = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow; - - DX_Invalidate (dstx, dsty, width, height); - if (!picasso_vidinfo.extra_mem) - { - return; - } - - dstp = gfx_lock_picasso (); - if (dstp == 0) - { - goto out; - } - - /* The areas can't overlap: the source is always in the Picasso frame buffer, - * and the destination is a different buffer owned by the graphics code. */ - dstp += dsty * picasso_vidinfo.rowbytes + dstx * picasso_vidinfo.pixbytes; - - if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) - { - while (height-- > 0) - { - switch (Bpp) - { - case 2: - pixcpy_swap16((uae_u16*)dstp, (uae_u16*)srcp, width); - break; - case 4: - pixcpy_swap32((uae_u32*)dstp, (uae_u32*)srcp, width); - break; - default: - memcpy (dstp, srcp, width); - } - srcp += ri->BytesPerRow; - dstp += picasso_vidinfo.rowbytes; - } - } - else - { - int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat); - if (picasso96_state.RGBFormat != RGBFB_CHUNKY) - { - write_log ("ERROR: do_blit() failure, %d!\n", picasso96_state.RGBFormat); - abort (); - } - while (height-- > 0) - { - unsigned int i; - switch (psiz) - { - case 2: - for (i = 0; i < width; i++) - *((uae_u16 *) dstp + i) = picasso_vidinfo.clut[srcp[i]]; - break; - case 4: - for (i = 0; i < width; i++) - *((uae_u32 *) dstp + i) = picasso_vidinfo.clut[srcp[i]]; - break; - default: - write_log ("ERROR - do_blit() failure2, %d!\n", psiz); - abort (); - break; - } - srcp += ri->BytesPerRow; - dstp += picasso_vidinfo.rowbytes; - } - } -out: - gfx_unlock_picasso (); -} - -/* -* Invert a rectangle on the screen. a render-info is given, -* so that do_blit can be used if -* there is no OS specific function to invert the rectangle. - */ - -static void do_invertrect (struct RenderInfo *ri, int Bpp, int x, int y, int width, int height) -{ - do_blit (ri, Bpp, x, y, x, y, width, height, BLIT_SRC, 0); -} - -static uaecptr wgfx_linestart; -static uaecptr wgfx_lineend; -static uaecptr wgfx_min, wgfx_max; -static unsigned long wgfx_y; - -static void wgfx_do_flushline (void) -{ - uae_u8 *src, *dstp; - - /* Mark these lines as "dirty" */ - DX_Invalidate (0, wgfx_y, picasso_vidinfo.width, 1); - - if (!picasso_vidinfo.extra_mem) /* The "out" will flush the dirty lines directly */ - goto out; - - dstp = gfx_lock_picasso (); - if (dstp == 0) - goto out; - - src = gfxmemory + wgfx_min; - - if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) - { - dstp += wgfx_y * picasso_vidinfo.rowbytes + wgfx_min - wgfx_linestart; -// memcpy (dstp, src, wgfx_max - wgfx_min); - switch (GetBytesPerPixel(picasso_vidinfo.rgbformat)) - { - case 2: - pixcpy_swap16((uae_u16*)dstp, (uae_u16*)src, wgfx_max - wgfx_min); - break; - case 4: - pixcpy_swap32((uae_u32*)dstp, (uae_u32*)src, wgfx_max - wgfx_min); - break; - default: - memcpy (dstp, src, wgfx_max - wgfx_min); - } - } - else - { - int width = wgfx_max - wgfx_min; - int i; - int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat); - - if (picasso96_state.RGBFormat != RGBFB_CHUNKY) - { - write_log ("ERROR - wgfx_do_flushline() failure, %d!\n", picasso96_state.RGBFormat); - abort (); - } - - dstp += wgfx_y * picasso_vidinfo.rowbytes + (wgfx_min - wgfx_linestart) * psiz; - switch (psiz) { - case 2: - for (i = 0; i < width; i++) - *((uae_u16 *) dstp + i) = picasso_vidinfo.clut[src[i]]; - break; - case 4: - for (i = 0; i < width; i++) - *((uae_u32 *) dstp + i) = picasso_vidinfo.clut[src[i]]; - break; - default: - write_log ("ERROR - wgfx_do_flushline() failure2, %d!\n", psiz); - abort (); - break; - } - } - -out: - gfx_unlock_picasso (); - wgfx_linestart = 0xFFFFFFFF; -} - -STATIC_INLINE void wgfx_flushline (void) -{ - if (wgfx_linestart == 0xFFFFFFFF || !picasso_on) - return; - wgfx_do_flushline (); -} - -static int renderinfo_is_current_screen (struct RenderInfo *ri) -{ - if (!picasso_on) - return 0; - if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start)) - return 0; - - return 1; -} - /* * Fill a rectangle in the screen. -*/ -STATIC_INLINE void do_fillrect_frame_buffer (struct RenderInfo *ri, int X, int Y, - int Width, int Height, uae_u32 Pen, int Bpp, - RGBFTYPE RGBFormat) + */ +static void do_fillrect_frame_buffer (struct RenderInfo *ri, int X, int Y, + int Width, int Height, uae_u32 Pen, int Bpp) { - int cols; - uae_u8 *start, *oldstart; - uae_u8 *src, *dst; - int lines; + int cols; + uae_u8 *dst; + int lines; + int bpr = ri->BytesPerRow; - /* Do our virtual frame-buffer memory. First, we do a single line fill by hand */ - oldstart = start = src = ri->Memory + X * Bpp + Y * ri->BytesPerRow; - - switch (Bpp) - { - case 1: - memset (start, Pen, Width); - break; - case 2: - for (cols = 0; cols < Width; cols++) - { - do_put_mem_word ((uae_u16 *)start, (uae_u16)Pen); - start += 2; + dst = ri->Memory + X * Bpp + Y * ri->BytesPerRow; + endianswap (&Pen, Bpp); + switch (Bpp) + { + case 1: + for (lines = 0; lines < Height; lines++, dst += bpr) { + memset (dst, Pen, Width); } - break; - case 3: - for (cols = 0; cols < Width; cols++) - { - do_put_mem_byte (start, (uae_u8)Pen); - start++; - *(uae_u16 *)(start) = (Pen & 0x00FFFF00) >> 8; - start+=2; + break; + case 2: + Pen |= Pen << 16; + for (lines = 0; lines < Height; lines++, dst += bpr) { + uae_u32 *p = (uae_u32*)dst; + for (cols = 0; cols < Width / 2; cols++) + *p++ = Pen; + if (Width & 1) + ((uae_u16*)p)[0] = Pen; } - break; - case 4: - for (cols = 0; cols < Width; cols++) - { - /**start = Pen; */ - do_put_mem_long ((uae_u32 *)start, Pen); - start += 4; + break; + case 3: + for (lines = 0; lines < Height; lines++, dst += bpr) { + uae_u8 *p = (uae_u8*)dst; + for (cols = 0; cols < Width; cols++) { + *p++ = Pen >> 0; + *p++ = Pen >> 8; + *p++ = Pen >> 16; + } } - break; - } + break; + case 4: + for (lines = 0; lines < Height; lines++, dst += bpr) { + uae_u32 *p = (uae_u32*)dst; + for (cols = 0; cols < Width; cols++) + *p++ = Pen; + } + break; + } +} - src = oldstart; - dst = src + ri->BytesPerRow; +static int framecnt; +int p96skipmode = -1; +static int doskip (void) +{ + if (framecnt >= currprefs.gfx_framerate) + framecnt = 0; + return framecnt > 0; +} - /* next, we do the remaining line fills via memcpy() for > 1 BPP, otherwise some more memset() calls */ - if (Bpp > 1) - { - for (lines = 0; lines < Height - 1; lines++, dst += ri->BytesPerRow) - memcpy (dst, src, Width * Bpp); - } - else - { - for (lines = 0; lines < Height - 1; lines++, dst += ri->BytesPerRow) - memset( dst, Pen, Width ); - } +static void picasso_trigger_vblank (void) +{ + if (!boardinfo || !uaegfx_base || !interrupt_enabled) { + return; + } + put_long (uaegfx_base + CARD_VBLANKCODE + 6 + 2, boardinfo + PSSO_BoardInfo_SoftInterrupt); + put_byte (uaegfx_base + CARD_VBLANKFLAG, 1); + INTREQ_f (0x8000 | 0x2000); } void picasso_handle_vsync (void) { - DX_Invalidate(-1, -1, -1, -1); //so a flushpixel is done every vsync if pixel are in buffer + picasso_trigger_vblank(); - if (uae_boot_rom) - rtarea[get_long (rtarea_base + 36) + 12 - 1]++; + if (!picasso_on) + return; - if (palette_changed) { - DX_SetPalette (0, 256); - palette_changed = 0; - } + framecnt++; - flush_screen (); + if (doskip () && p96skipmode == 0) { + ; + } else { + flushpixels (); + } + gfx_unlock_picasso (); } static int set_panning_called = 0; + +enum { + + /* DEST = RGBFB_B8G8R8A8,32 */ + RGBFB_A8R8G8B8_32 = 1, + RGBFB_A8B8G8R8_32, + RGBFB_R8G8B8A8_32, + RGBFB_B8G8R8A8_32, + RGBFB_R8G8B8_32, + RGBFB_B8G8R8_32, + RGBFB_R5G6B5PC_32, + RGBFB_R5G5B5PC_32, + RGBFB_R5G6B5_32, + RGBFB_R5G5B5_32, + RGBFB_B5G6R5PC_32, + RGBFB_B5G5R5PC_32, + RGBFB_CLUT_RGBFB_32, + + /* DEST = RGBFB_R5G6B5PC,16 */ + RGBFB_A8R8G8B8_16, + RGBFB_A8B8G8R8_16, + RGBFB_R8G8B8A8_16, + RGBFB_B8G8R8A8_16, + RGBFB_R8G8B8_16, + RGBFB_B8G8R8_16, + RGBFB_R5G6B5PC_16, + RGBFB_R5G5B5PC_16, + RGBFB_R5G6B5_16, + RGBFB_R5G5B5_16, + RGBFB_B5G6R5PC_16, + RGBFB_B5G5R5PC_16, + RGBFB_CLUT_RGBFB_16, + + /* DEST = RGBFB_CLUT,8 */ + RGBFB_CLUT_8 +}; + +static void setconvert (void) +{ + int d = picasso_vidinfo.pixbytes; + int v; + + v = 0; + switch (picasso96_state.RGBFormat) + { + case RGBFB_CLUT: + if (d == 1) + v = RGBFB_CLUT_8; + else if (d == 2) + v = RGBFB_CLUT_RGBFB_16; + else if (d == 4) + v = RGBFB_CLUT_RGBFB_32; + break; + + case RGBFB_B5G6R5PC: + if (d == 2) + v = RGBFB_B5G6R5PC_16; + else if (d == 4) + v = RGBFB_B5G6R5PC_32; + break; + case RGBFB_R5G6B5PC: + if (d == 2) + v = RGBFB_R5G6B5PC_16; + else if (d == 4) + v = RGBFB_R5G6B5PC_32; + break; + + case RGBFB_R5G5B5PC: + if (d == 4) + v = RGBFB_R5G5B5PC_32; + else if (d == 2) + v = RGBFB_R5G5B5PC_16; + break; + case RGBFB_R5G6B5: + if (d == 4) + v = RGBFB_R5G6B5_32; + else + v = RGBFB_R5G6B5_16; + break; + case RGBFB_R5G5B5: + if (d == 4) + v = RGBFB_R5G5B5_32; + else + v = RGBFB_R5G5B5_16; + break; + case RGBFB_B5G5R5PC: + if (d == 4) + v = RGBFB_B5G5R5PC_32; + else + v = RGBFB_B5G5R5PC_16; + break; + + case RGBFB_A8R8G8B8: + if (d == 2) + v = RGBFB_A8R8G8B8_16; + else if (d == 4) + v = RGBFB_A8R8G8B8_32; + break; + case RGBFB_R8G8B8: + if (d == 2) + v = RGBFB_R8G8B8_16; + else if (d == 4) + v = RGBFB_R8G8B8_32; + break; + case RGBFB_B8G8R8: + if (d == 2) + v = RGBFB_B8G8R8_16; + else if (d == 4) + v = RGBFB_B8G8R8_32; + break; + case RGBFB_A8B8G8R8: + if (d == 2) + v = RGBFB_A8B8G8R8_16; + else if (d == 4) + v = RGBFB_A8B8G8R8_32; + break; + case RGBFB_B8G8R8A8: + if (d == 2) + v = RGBFB_B8G8R8A8_16; + else if (d == 4) + v = RGBFB_B8G8R8A8_32; + break; + case RGBFB_R8G8B8A8: + if (d == 2) + v = RGBFB_R8G8B8A8_16; + else if (d == 4) + v = RGBFB_R8G8B8A8_32; + break; + } + picasso_convert = v; + host_mode = GetSurfacePixelFormat(); + write_log ("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d\n", d, host_mode, picasso96_state.RGBFormat, v); + full_refresh = 1; +} + /* Clear our screen, since we've got a new Picasso screen-mode, and refresh with the proper contents * This is called on several occasions: * 1. Amiga-->Picasso transition, via SetSwitch() * 2. Picasso-->Picasso transition, via SetPanning(). * 3. whenever the graphics code notifies us that the screen contents have been lost. */ -extern unsigned int new_beamcon0; +extern uae_u16 new_beamcon0; -void picasso_refresh ( int call_setpalette ) +void picasso_refresh (void) { struct RenderInfo ri; static int beamcon0_before, p96refresh_was; @@ -673,277 +698,436 @@ void picasso_refresh ( int call_setpalette ) if (!picasso_on) return; - have_done_picasso=1; + full_refresh = 1; + setconvert (); /* Make sure that the first time we show a Picasso video mode, we don't blit any crap. * We can do this by checking if we have an Address yet. */ if (picasso96_state.Address) { - unsigned int width, height; /* blit the stuff from our static frame-buffer to the gfx-card */ ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start); ri.BytesPerRow = picasso96_state.BytesPerRow; ri.RGBFormat = (RGBFTYPE)picasso96_state.RGBFormat; - if (set_panning_called) - { - width = ( picasso96_state.VirtualWidth < picasso96_state.Width ) ? - picasso96_state.VirtualWidth : picasso96_state.Width; - height = ( picasso96_state.VirtualHeight < picasso96_state.Height ) ? - picasso96_state.VirtualHeight : picasso96_state.Height; - } - else - { - width = picasso96_state.Width; - height = picasso96_state.Height; - } - - do_blit (&ri, picasso96_state.BytesPerPixel, 0, 0, 0, 0, width, height, BLIT_SRC, 0); - } - else - { + flushpixels (); + } else { write_log ("ERROR - picasso_refresh() can't refresh!\n"); } } +#define BLT_SIZE 4 +#define BLT_MULT 1 +#define BLT_NAME BLIT_FALSE_32 +#define BLT_FUNC(s,d) *d = 0 +#include "p96_blit.c" +#define BLT_NAME BLIT_NOR_32 +#define BLT_FUNC(s,d) *d = ~(*s | * d) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYDST_32 +#define BLT_FUNC(s,d) *d = (*d) & ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTSRC_32 +#define BLT_FUNC(s,d) *d = ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYSRC_32 +#define BLT_FUNC(s,d) *d = (*s) & ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTDST_32 +#define BLT_FUNC(s,d) *d = ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_EOR_32 +#define BLT_FUNC(s,d) *d = (*s) ^ (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NAND_32 +#define BLT_FUNC(s,d) *d = ~((*s) & (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_AND_32 +#define BLT_FUNC(s,d) *d = (*s) & (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NEOR_32 +#define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYSRC_32 +#define BLT_FUNC(s,d) *d = ~(*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYDST_32 +#define BLT_FUNC(s,d) *d = ~(*d) | (*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_OR_32 +#define BLT_FUNC(s,d) *d = (*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_TRUE_32 +#define BLT_FUNC(s,d) *d = 0xffffffff +#include "p96_blit.c" +#define BLT_NAME BLIT_30_32 +#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; +#define BLT_TEMP +#include "p96_blit.c" +#undef BLT_SIZE +#undef BLT_MULT + +#define BLT_SIZE 3 +#define BLT_MULT 1 +#define BLT_NAME BLIT_FALSE_24 +#define BLT_FUNC(s,d) *d = 0 +#include "p96_blit.c" +#define BLT_NAME BLIT_NOR_24 +#define BLT_FUNC(s,d) *d = ~(*s | * d) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYDST_24 +#define BLT_FUNC(s,d) *d = (*d) & ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTSRC_24 +#define BLT_FUNC(s,d) *d = ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYSRC_24 +#define BLT_FUNC(s,d) *d = (*s) & ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTDST_24 +#define BLT_FUNC(s,d) *d = ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_EOR_24 +#define BLT_FUNC(s,d) *d = (*s) ^ (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NAND_24 +#define BLT_FUNC(s,d) *d = ~((*s) & (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_AND_24 +#define BLT_FUNC(s,d) *d = (*s) & (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NEOR_24 +#define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYSRC_24 +#define BLT_FUNC(s,d) *d = ~(*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYDST_24 +#define BLT_FUNC(s,d) *d = ~(*d) | (*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_OR_24 +#define BLT_FUNC(s,d) *d = (*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_TRUE_24 +#define BLT_FUNC(s,d) *d = 0xffffffff +#include "p96_blit.c" +#define BLT_NAME BLIT_30_24 +#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; +#define BLT_TEMP +#include "p96_blit.c" +#undef BLT_SIZE +#undef BLT_MULT + +#define BLT_SIZE 2 +#define BLT_MULT 2 +#define BLT_NAME BLIT_FALSE_16 +#define BLT_FUNC(s,d) *d = 0 +#include "p96_blit.c" +#define BLT_NAME BLIT_NOR_16 +#define BLT_FUNC(s,d) *d = ~(*s | * d) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYDST_16 +#define BLT_FUNC(s,d) *d = (*d) & ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTSRC_16 +#define BLT_FUNC(s,d) *d = ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYSRC_16 +#define BLT_FUNC(s,d) *d = (*s) & ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTDST_16 +#define BLT_FUNC(s,d) *d = ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_EOR_16 +#define BLT_FUNC(s,d) *d = (*s) ^ (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NAND_16 +#define BLT_FUNC(s,d) *d = ~((*s) & (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_AND_16 +#define BLT_FUNC(s,d) *d = (*s) & (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NEOR_16 +#define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYSRC_16 +#define BLT_FUNC(s,d) *d = ~(*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYDST_16 +#define BLT_FUNC(s,d) *d = ~(*d) | (*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_OR_16 +#define BLT_FUNC(s,d) *d = (*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_TRUE_16 +#define BLT_FUNC(s,d) *d = 0xffffffff +#include "p96_blit.c" +#define BLT_NAME BLIT_30_16 +#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; +#define BLT_TEMP +#include "p96_blit.c" +#undef BLT_SIZE +#undef BLT_MULT + +#define BLT_SIZE 1 +#define BLT_MULT 4 +#define BLT_NAME BLIT_FALSE_8 +#define BLT_FUNC(s,d) *d = 0 +#include "p96_blit.c" +#define BLT_NAME BLIT_NOR_8 +#define BLT_FUNC(s,d) *d = ~(*s | * d) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYDST_8 +#define BLT_FUNC(s,d) *d = (*d) & ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTSRC_8 +#define BLT_FUNC(s,d) *d = ~(*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_ONLYSRC_8 +#define BLT_FUNC(s,d) *d = (*s) & ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTDST_8 +#define BLT_FUNC(s,d) *d = ~(*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_EOR_8 +#define BLT_FUNC(s,d) *d = (*s) ^ (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NAND_8 +#define BLT_FUNC(s,d) *d = ~((*s) & (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_AND_8 +#define BLT_FUNC(s,d) *d = (*s) & (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NEOR_8 +#define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYSRC_8 +#define BLT_FUNC(s,d) *d = ~(*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_NOTONLYDST_8 +#define BLT_FUNC(s,d) *d = ~(*d) | (*s) +#include "p96_blit.c" +#define BLT_NAME BLIT_OR_8 +#define BLT_FUNC(s,d) *d = (*s) | (*d) +#include "p96_blit.c" +#define BLT_NAME BLIT_TRUE_8 +#define BLT_FUNC(s,d) *d = 0xffffffff +#include "p96_blit.c" +#define BLT_NAME BLIT_30_8 +#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; +#define BLT_TEMP +#include "p96_blit.c" +#undef BLT_SIZE +#undef BLT_MULT + +#define PARMS width, height, src, dst, ri->BytesPerRow, dstri->BytesPerRow + /* * Functions to perform an action on the frame-buffer */ -STATIC_INLINE void do_blitrect_frame_buffer (struct RenderInfo *ri, struct +static int do_blitrect_frame_buffer (struct RenderInfo *ri, struct RenderInfo *dstri, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode) { - uae_u8 *src, *dst, *tmp, *tmp2, *tmp3; + uae_u8 *src, *dst; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); unsigned long total_width = width * Bpp; - unsigned long linewidth = (total_width + 15) & ~15; - unsigned long lines; - int can_do_visible_blit = 0; src = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow; dst = dstri->Memory + dstx*Bpp + dsty*dstri->BytesPerRow; - if (mask != 0xFF && Bpp > 1) - { + if (mask != 0xFF && Bpp > 1) { write_log ("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n", mask, Bpp); } - if (mask == 0xFF || Bpp > 1) - { - if( opcode == BLIT_SRC ) - { + P96TRACE (("(%dx%d)=(%dx%d)=(%dx%d)=%d\n", srcx, srcy, dstx, dsty, width, height, opcode)); + if (mask == 0xFF || Bpp > 1) { + + if(opcode == BLIT_SRC) { /* handle normal case efficiently */ - if (ri->Memory == dstri->Memory && dsty == srcy) - { + if (ri->Memory == dstri->Memory && dsty == srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memmove (dst, src, total_width); - } - else if (dsty < srcy) - { + } else if (dsty < srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memcpy (dst, src, total_width); - } - else - { + } else { unsigned long i; src += (height-1) * ri->BytesPerRow; dst += (height-1) * dstri->BytesPerRow; for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) memcpy (dst, src, total_width); } - return; - } - else - { - uae_u8 *src2 = src; - uae_u8 *dst2 = dst; - uae_u32 *src2_32 = (uae_u32*)src; - uae_u32 *dst2_32 = (uae_u32*)dst; - unsigned int y; + return 1; + + } else if (Bpp == 4) { + + /* 32-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: BLIT_FALSE_32 (PARMS); break; + case BLIT_NOR: BLIT_NOR_32 (PARMS); break; + case BLIT_ONLYDST: BLIT_ONLYDST_32 (PARMS); break; + case BLIT_NOTSRC: BLIT_NOTSRC_32 (PARMS); break; + case BLIT_ONLYSRC: BLIT_ONLYSRC_32 (PARMS); break; + case BLIT_NOTDST: BLIT_NOTDST_32 (PARMS); break; + case BLIT_EOR: BLIT_EOR_32 (PARMS); break; + case BLIT_NAND: BLIT_NAND_32 (PARMS); break; + case BLIT_AND: BLIT_AND_32 (PARMS); break; + case BLIT_NEOR: BLIT_NEOR_32 (PARMS); break; + case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_32 (PARMS); break; + case BLIT_NOTONLYDST: BLIT_NOTONLYDST_32 (PARMS); break; + case BLIT_OR: BLIT_OR_32 (PARMS); break; + case BLIT_TRUE: BLIT_TRUE_32 (PARMS); break; + case 30: BLIT_30_32 (PARMS); break; + } + } else if (Bpp == 3) { + + /* 24-bit (not very) optimized */ + switch (opcode) + { + case BLIT_FALSE: BLIT_FALSE_24 (PARMS); break; + case BLIT_NOR: BLIT_NOR_24 (PARMS); break; + case BLIT_ONLYDST: BLIT_ONLYDST_24 (PARMS); break; + case BLIT_NOTSRC: BLIT_NOTSRC_24 (PARMS); break; + case BLIT_ONLYSRC: BLIT_ONLYSRC_24 (PARMS); break; + case BLIT_NOTDST: BLIT_NOTDST_24 (PARMS); break; + case BLIT_EOR: BLIT_EOR_24 (PARMS); break; + case BLIT_NAND: BLIT_NAND_24 (PARMS); break; + case BLIT_AND: BLIT_AND_24 (PARMS); break; + case BLIT_NEOR: BLIT_NEOR_24 (PARMS); break; + case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_24 (PARMS); break; + case BLIT_NOTONLYDST: BLIT_NOTONLYDST_24 (PARMS); break; + case BLIT_OR: BLIT_OR_24 (PARMS); break; + case BLIT_TRUE: BLIT_TRUE_24 (PARMS); break; + case 30: BLIT_30_24 (PARMS); break; + } + + } else if (Bpp == 2) { + + /* 16-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: BLIT_FALSE_16 (PARMS); break; + case BLIT_NOR: BLIT_NOR_16 (PARMS); break; + case BLIT_ONLYDST: BLIT_ONLYDST_16 (PARMS); break; + case BLIT_NOTSRC: BLIT_NOTSRC_16 (PARMS); break; + case BLIT_ONLYSRC: BLIT_ONLYSRC_16 (PARMS); break; + case BLIT_NOTDST: BLIT_NOTDST_16 (PARMS); break; + case BLIT_EOR: BLIT_EOR_16 (PARMS); break; + case BLIT_NAND: BLIT_NAND_16 (PARMS); break; + case BLIT_AND: BLIT_AND_16 (PARMS); break; + case BLIT_NEOR: BLIT_NEOR_16 (PARMS); break; + case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_16 (PARMS); break; + case BLIT_NOTONLYDST: BLIT_NOTONLYDST_16 (PARMS); break; + case BLIT_OR: BLIT_OR_16 (PARMS); break; + case BLIT_TRUE: BLIT_TRUE_16 (PARMS); break; + case 30: BLIT_30_16 (PARMS); break; + } + + } else if (Bpp == 1) { + + /* 8-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: BLIT_FALSE_8 (PARMS); break; + case BLIT_NOR: BLIT_NOR_8 (PARMS); break; + case BLIT_ONLYDST: BLIT_ONLYDST_8 (PARMS); break; + case BLIT_NOTSRC: BLIT_NOTSRC_8 (PARMS); break; + case BLIT_ONLYSRC: BLIT_ONLYSRC_8 (PARMS); break; + case BLIT_NOTDST: BLIT_NOTDST_8 (PARMS); break; + case BLIT_EOR: BLIT_EOR_8 (PARMS); break; + case BLIT_NAND: BLIT_NAND_8 (PARMS); break; + case BLIT_AND: BLIT_AND_8 (PARMS); break; + case BLIT_NEOR: BLIT_NEOR_8 (PARMS); break; + case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_8 (PARMS); break; + case BLIT_NOTONLYDST: BLIT_NOTONLYDST_8 (PARMS); break; + case BLIT_OR: BLIT_OR_8 (PARMS); break; + case BLIT_TRUE: BLIT_TRUE_8 (PARMS); break; + case 30: BLIT_30_8 (PARMS); break; + } - for (y = 0; y < height; y++) /* Vertical lines */ - { - uae_u8* bound = src + total_width - 4; - //copy now the longs - for( src2_32 = (uae_u32 *)src, dst2_32 = (uae_u32 *)dst; src2_32 < (uae_u32 *)bound; src2_32++, dst2_32++ ) /* Horizontal bytes */ - { - switch( opcode ) - { - case BLIT_FALSE: - *dst2_32 = 0; - break; - case BLIT_NOR: - *dst2_32 = ~(*src2_32 | *dst2_32); - break; - case BLIT_ONLYDST: - *dst2_32 = *dst2_32 & ~(*src2_32); - break; - case BLIT_NOTSRC: - *dst2_32 = ~(*src2_32); - break; - case BLIT_ONLYSRC: - *dst2_32 = *src2_32 & ~(*dst2_32); - break; - case BLIT_NOTDST: - *dst2_32 = ~(*dst2_32); - break; - case BLIT_EOR: - *dst2_32 = *src2_32 ^ *dst2_32; - break; - case BLIT_NAND: - *dst2_32 = ~(*src2_32 & *dst2_32); - break; - case BLIT_AND: - *dst2_32 = *src2_32 & *dst2_32; - break; - case BLIT_NEOR: - *dst2_32 = ~(*src2_32 ^ *dst2_32); - break; - case BLIT_DST: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_DST!\n"); - break; - case BLIT_NOTONLYSRC: - *dst2_32 = ~(*src2_32) | *dst2_32; - break; - case BLIT_SRC: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n"); - break; - case BLIT_NOTONLYDST: - *dst2_32 = ~(*dst2_32) | *src2_32; - break; - case BLIT_OR: - *dst2_32 = *src2_32 | *dst2_32; - break; - case BLIT_TRUE: - *dst2_32 = 0xFFFFFFFF; - break; - case 30: //code for swap source with dest in byte - { - uae_u32 temp; - temp = *src2_32; - *src2_32 = *dst2_32; - *dst2_32 = temp; - } - break; - case BLIT_LAST: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n"); - break; - } /* switch opcode */ - } // for end - //now copy the rest few bytes - for (src2 = (uae_u8 *)src2_32, dst2 = (uae_u8 *)dst2_32; src2 < src + total_width; src2++, dst2++ ) /* Horizontal bytes */ - { - switch( opcode ) - { - case BLIT_FALSE: - *dst2 = 0; - break; - case BLIT_NOR: - *dst2 = ~(*src2 | *dst2); - break; - case BLIT_ONLYDST: - *dst2 = *dst2 & ~(*src2); - break; - case BLIT_NOTSRC: - *dst2 = ~(*src2); - break; - case BLIT_ONLYSRC: - *dst2 = *src2 & ~(*dst2); - break; - case BLIT_NOTDST: - *dst2 = ~(*dst2); - break; - case BLIT_EOR: - *dst2 = *src2 ^ *dst2; - break; - case BLIT_NAND: - *dst2 = ~(*src2 & *dst2); - break; - case BLIT_AND: - *dst2 = *src2 & *dst2; - break; - case BLIT_NEOR: - *dst2 = ~(*src2 ^ *dst2); - break; - case BLIT_DST: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_DST!\n"); - break; - case BLIT_NOTONLYSRC: - *dst2 = ~(*src2) | *dst2; - break; - case BLIT_SRC: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n"); - break; - case BLIT_NOTONLYDST: - *dst2 = ~(*dst2) | *src2; - break; - case BLIT_OR: - *dst2 = *src2 | *dst2; - break; - case BLIT_TRUE: - *dst2 = 0xFF; - break; - case BLIT_LAST: - write_log( "do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n"); - break; - case 30: //code for swap source with dest in long - { - uae_u8 temp; - temp = *src2; - *src2 = *dst2; - *dst2 = temp; - } - break; - } /* switch opcode */ - } /* for width */ - src += ri->BytesPerRow; - dst += dstri->BytesPerRow; - } /* for height */ } - return; + return 1; } - - tmp3 = tmp2 = tmp = (uae_u8 *)xmalloc (linewidth * height); /* allocate enough memory for the src-rect */ - if (!tmp) - return; - - /* copy the src-rect into our temporary buffer space */ - for (lines = 0; lines < height; lines++, src += ri->BytesPerRow, tmp2 += linewidth) - { - memcpy (tmp2, src, total_width); - } - - /* copy the temporary buffer to the destination */ - for (lines = 0; lines < height; lines++, dst += dstri->BytesPerRow, tmp += linewidth) - { - unsigned long cols; - for (cols = 0; cols < width; cols++) - { - dst[cols] &= ~mask; - dst[cols] |= tmp[cols] & mask; - } - } - /* free the temp-buf */ - free (tmp3); + return 0; } /* -DrawLine: -Synopsis: DrawLine(bi, ri, line, Mask, RGBFormat); -Inputs: a0: struct BoardInfo *bi -a1: struct RenderInfo *ri -a2: struct Line *line -d0.b: Mask -d7.l: RGBFormat +SetSpritePosition: +Synopsis: SetSpritePosition(bi, RGBFormat); +Inputs: a0: struct BoardInfo *bi +d7: RGBFTYPE RGBFormat -This function is used to paint a line on the board memory possibly using the blitter. It is called by Draw -and obeyes the destination RGBFormat as well as ForeGround and BackGround pens and draw modes. */ -uae_u32 REGPARAM2 picasso_DrawLine (struct regstruct *regs) +static uae_u32 REGPARAM2 picasso_SetSpritePosition (TrapContext *ctx) { - return 0; + return 0; +} + + +/* +SetSpriteColor: +Synopsis: SetSpriteColor(bi, index, red, green, blue, RGBFormat); +Inputs: a0: struct BoardInfo *bi +d0.b: index +d1.b: red +d2.b: green +d3.b: blue +d7: RGBFTYPE RGBFormat + +This function changes one of the possible three colors of the hardware sprite. +*/ +static uae_u32 REGPARAM2 picasso_SetSpriteColor (TrapContext *ctx) +{ + return 0; +} + + +/* +SetSpriteImage: +Synopsis: SetSpriteImage(bi, RGBFormat); +Inputs: a0: struct BoardInfo *bi +d7: RGBFTYPE RGBFormat + +This function gets new sprite image data from the MouseImage field of the BoardInfo structure and writes +it to the board. + +There are three possible cases: + +BIB_HIRESSPRITE is set: +skip the first two long words and the following sprite data is arranged as an array of two longwords. Those form the +two bit planes for one image line respectively. + +BIB_HIRESSPRITE and BIB_BIGSPRITE are not set: +skip the first two words and the following sprite data is arranged as an array of two words. Those form the two +bit planes for one image line respectively. + +BIB_HIRESSPRITE is not set and BIB_BIGSPRITE is set: +skip the first two words and the following sprite data is arranged as an array of two words. Those form the two bit +planes for one image line respectively. You have to double each pixel horizontally and vertically. All coordinates +used in this case already assume a zoomed sprite, only the sprite data is not zoomed yet. You will have to +compensate for this when accounting for hotspot offsets and sprite dimensions. +*/ +static uae_u32 REGPARAM2 picasso_SetSpriteImage (TrapContext *ctx) +{ + return 0; +} + +/* +SetSprite: +Synopsis: SetSprite(bi, activate, RGBFormat); +Inputs: a0: struct BoardInfo *bi +d0: BOOL activate +d7: RGBFTYPE RGBFormat + +This function activates or deactivates the hardware sprite. +*/ +static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) +{ + return 0; } /* @@ -961,10 +1145,15 @@ uae_u32 REGPARAM2 picasso_DrawLine (struct regstruct *regs) * BoardInfo struct supplied by the caller, the rtg.library, for example * the MemoryBase, MemorySize and RegisterBase fields. */ -uae_u32 REGPARAM2 picasso_FindCard (struct regstruct *regs) +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 */ + if (!uaegfx_base) + return 0; + put_long (uaegfx_base + CARD_BOARDINFO, AmigaBoardInfo); + boardinfo = AmigaBoardInfo; if (allocated_gfxmem && !picasso96_state.CardFound) { /* Fill in MemoryBase, MemorySize */ @@ -978,18 +1167,20 @@ uae_u32 REGPARAM2 picasso_FindCard (struct regstruct *regs) return 0; } -static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, struct PicassoResolution *dm) +static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, int width, int height, int depth) { int i; - switch (dm->depth) { - case 1: + switch (depth) + { + case 8: res->Modes[CHUNKY] = amigamemptr; break; - case 2: + case 15: + case 16: res->Modes[HICOLOR] = amigamemptr; break; - case 3: + case 24: res->Modes[TRUECOLOR] = amigamemptr; break; default: @@ -999,18 +1190,18 @@ static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, struc for (i = 0; i < PSSO_ModeInfo_sizeof; i++) put_byte (amigamemptr + i, 0); - put_word (amigamemptr + PSSO_ModeInfo_Width, dm->res.width); - put_word (amigamemptr + PSSO_ModeInfo_Height, dm->res.height); - put_byte (amigamemptr + PSSO_ModeInfo_Depth, dm->depth * 8); + put_word (amigamemptr + PSSO_ModeInfo_Width, width); + put_word (amigamemptr + PSSO_ModeInfo_Height, height); + put_byte (amigamemptr + PSSO_ModeInfo_Depth, depth); put_byte (amigamemptr + PSSO_ModeInfo_Flags, 0); - put_word (amigamemptr + PSSO_ModeInfo_HorTotal, dm->res.width); + put_word (amigamemptr + PSSO_ModeInfo_HorTotal, width); put_word (amigamemptr + PSSO_ModeInfo_HorBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncSize, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0); - put_word (amigamemptr + PSSO_ModeInfo_VerTotal, dm->res.height); + put_word (amigamemptr + PSSO_ModeInfo_VerTotal, height); put_word (amigamemptr + PSSO_ModeInfo_VerBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncSize, 0); @@ -1019,7 +1210,7 @@ static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, struc put_byte (amigamemptr + PSSO_ModeInfo_second_union, 14); put_long (amigamemptr + PSSO_ModeInfo_PixelClock, - dm->res.width * dm->res.height * (currprefs.ntscmode ? 60 : 50)); + width * height * (currprefs.ntscmode ? 60 : 50)); } struct modeids { @@ -1089,19 +1280,17 @@ static struct modeids mi[] = -1,-1,0 }; -static int AssignModeID(int dm, int count, int *unkcnt) +static int AssignModeID(int w, int h, int *unkcnt) { - int i, w, h; + int i; - w = newmodes[dm].res.width; - h = newmodes[dm].res.height; for (i = 0; mi[i].width > 0; i++) { if (w == mi[i].width && h == mi[i].height) return 0x50001000 | (mi[i].id * 0x10000); } (*unkcnt)++; write_log("P96: Non-unique mode %dx%d\n", w, h); - return 0x51000000 - (*unkcnt) * 0x10000; + return 0x51001000 - (*unkcnt) * 0x10000; } static uaecptr picasso96_amem, picasso96_amemend; @@ -1124,23 +1313,67 @@ static void CopyLibResolutionStructureU2A (struct LibResolution *libres, uaecptr put_long (amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); } +static void init_alloc (void) +{ + picasso96_amem = picasso96_amemend = 0; + if (uaegfx_base) { + int size = get_long (uaegfx_base + CARD_RESLISTSIZE); + picasso96_amem = get_long (uaegfx_base + CARD_RESLIST); + picasso96_amemend = picasso96_amem + size; + write_log("P96 RESINFO: %08X-%08X (%d,%d)\n", picasso96_amem, picasso96_amemend, size / PSSO_ModeInfo_sizeof, size); + } +} + +static int p96depth (int depth) +{ + uae_u32 f = currprefs.picasso96_modeflags; + int ok = 0; + + if (depth == 8 && (f & RGBFF_CLUT)) + ok = 1; + if (depth == 15 && (f & (RGBFF_R5G5B5PC | RGBFF_R5G5B5 | RGBFF_B5G5R5PC))) + ok = 2; + if (depth == 16 && (f & (RGBFF_R5G6B5PC | RGBFF_R5G6B5 | RGBFF_B5G6R5PC))) + ok = 2; + if (depth == 24 && (f & (RGBFF_R8G8B8 | RGBFF_B8G8R8))) + ok = 3; + if (depth == 32 && (f & (RGBFF_A8R8G8B8 | RGBFF_A8B8G8R8 | RGBFF_R8G8B8A8 | RGBFF_B8G8R8A8))) + ok = 4; + return ok; +} + static int missmodes[] = { 640, 400, 640, 480, 800, 480, -1 }; +static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 size); + void picasso96_alloc (TrapContext *ctx) { int i, j, size, cnt; - int misscnt; + int misscnt, depths; - if(newmodes != 0) - xfree (newmodes); + uaegfx_resname = ds ("uaegfx.card"); + xfree (newmodes); newmodes = NULL; picasso96_amem = picasso96_amemend = 0; - if (currprefs.gfxmem_size == 0) + if (allocated_gfxmem == 0) return; misscnt = 0; cnt = 0; newmodes = (struct PicassoResolution*) xmalloc (sizeof (struct PicassoResolution) * MAX_PICASSO_MODES); size = 0; + + depths = 0; + if (p96depth (8)) + depths++; + if (p96depth (15)) + depths++; + if (p96depth (16)) + depths++; + if (p96depth (24)) + depths++; + if (p96depth (32)) + depths++; + i = 0; while (DisplayModes[i].depth >= 0) { for (j = 0; missmodes[j * 2] >= 0; j++) { @@ -1159,43 +1392,39 @@ void picasso96_alloc (TrapContext *ctx) while (missmodes[misscnt * 2] == 0) misscnt++; if (missmodes[misscnt * 2] >= 0) { - int oldi = i; - if (DisplayModes[i].res.width > missmodes[misscnt * 2 + 0] || DisplayModes[i].res.height > missmodes[misscnt * 2 + 1]) { - int w = DisplayModes[i].res.width; - int h = DisplayModes[i].res.height; - do { + int w = DisplayModes[i].res.width; + int h = DisplayModes[i].res.height; + if (w > missmodes[misscnt * 2 + 0] || (w == missmodes[misscnt * 2 + 0] && h > missmodes[misscnt * 2 + 1])) { struct PicassoResolution *pr = &newmodes[cnt]; memcpy (pr, &DisplayModes[i], sizeof (struct PicassoResolution)); pr->res.width = missmodes[misscnt * 2 + 0]; pr->res.height = missmodes[misscnt * 2 + 1]; - sprintf (pr->name, "%dx%dx%d FAKE", pr->res.width, pr->res.height, pr->depth * 8); - size += PSSO_ModeInfo_sizeof; - i++; + sprintf (pr->name, "%dx%d FAKE", pr->res.width, pr->res.height); + size += PSSO_ModeInfo_sizeof * depths; cnt++; - } while (DisplayModes[i].depth >= 0 - && w == DisplayModes[i].res.width - && h == DisplayModes[i].res.height); - - i = oldi; misscnt++; continue; } } - do { memcpy (&newmodes[cnt], &DisplayModes[i], sizeof (struct PicassoResolution)); - size += PSSO_ModeInfo_sizeof; + size += PSSO_ModeInfo_sizeof * depths; i++; cnt++; - } while (DisplayModes[i].depth >= 0 + while (DisplayModes[i].depth >= 0 && DisplayModes[i].res.width == DisplayModes[j].res.width - && DisplayModes[i].res.height == DisplayModes[j].res.height); + && DisplayModes[i].res.height == DisplayModes[j].res.height) + i++; } + for (i = 0; Displays[i].name; i++) + size += PSSO_ModeInfo_sizeof * depths; newmodes[cnt].depth = -1; for (i = 0; i < cnt; i++) { -// sprintf (DisplayModes[i].name, "%dx%d, %d-bit, %d Hz", -// DisplayModes[i].res.width, DisplayModes[i].res.height, DisplayModes[i].depth * 8, DisplayModes[i].refresh); - switch (newmodes[i].depth) { + int depth; + for (depth = 8; depth <= 32; depth++) { + if (!p96depth (depth)) + continue; + switch (depth) { case 1: if (newmodes[i].res.width > chunky.width) chunky.width = newmodes[i].res.width; @@ -1220,94 +1449,136 @@ void picasso96_alloc (TrapContext *ctx) if (newmodes[i].res.height > alphacolour.height) alphacolour.height = newmodes[i].res.height; break; - } + } } + } - m68k_dreg (&ctx->regs, 0) = size; - m68k_dreg (&ctx->regs, 1) = 65536 + 1; - picasso96_amem = CallLib (ctx, get_long (4), -0xC6); /* AllocMem */ - picasso96_amemend = picasso96_amem + size; + uaegfx_card_install (ctx, size); + init_alloc (); } +static uaecptr inituaegfxfuncs (uaecptr start, uaecptr ABI); +static void inituaegfx (uaecptr ABI) +{ + uae_u32 flags; + + write_log ("RTG mode mask: %x\n", currprefs.picasso96_modeflags); + put_word (ABI + PSSO_BoardInfo_BitsPerCannon, 8); + put_word (ABI + PSSO_BoardInfo_RGBFormats, currprefs.picasso96_modeflags); + put_long (ABI + PSSO_BoardInfo_BoardType, picasso96_BT); + put_long (ABI + PSSO_BoardInfo_GraphicsControllerType, picasso96_GCT); + put_long (ABI + PSSO_BoardInfo_PaletteChipType, picasso96_PCT); + put_long (ABI + PSSO_BoardInfo_BoardName, uaegfx_resname); + put_long (ABI + PSSO_BoardInfo_BoardType, 1); + + /* only 1 clock */ + put_long (ABI + PSSO_BoardInfo_PixelClockCount + PLANAR * 4, 1); + put_long (ABI + PSSO_BoardInfo_PixelClockCount + CHUNKY * 4, 1); + put_long (ABI + PSSO_BoardInfo_PixelClockCount + HICOLOR * 4, 1); + put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUECOLOR * 4, 1); + put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUEALPHA * 4, 1); + + /* we have 16 bits for horizontal and vertical timings - hack */ + put_word (ABI + PSSO_BoardInfo_MaxHorValue + PLANAR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxHorValue + CHUNKY * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxHorValue + HICOLOR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUECOLOR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUEALPHA * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxVerValue + PLANAR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxVerValue + CHUNKY * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxVerValue + HICOLOR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUECOLOR * 2, 0xffff); + put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUEALPHA * 2, 0xffff); + + flags = get_long (ABI + PSSO_BoardInfo_Flags); + flags &= 0xffff0000; + flags |= BIF_BLITTER | BIF_NOMEMORYMODEMIX; + + if (flags & BIF_NOBLITTER) + write_log ("P96: blitter disabled in devs:monitors/uaegfx!\n"); + + flags |= BIF_VBLANKINTERRUPT; + + put_long (ABI + PSSO_BoardInfo_Flags, flags); + + put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); + put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); + put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); + put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); + put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); + put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); + put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); + put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); + put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); + put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); + inituaegfxfuncs (uaegfx_rom, ABI); +} + +static void addmode (uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution *res, int w, int h, const char *name, int id, int *unkcnt) +{ + int depth; + + res->DisplayID = id > 0 ? id : AssignModeID (w, h, unkcnt); + res->BoardInfo = AmigaBoardInfo; + res->Width = w; + res->Height = h; + res->Flags = P96F_PUBLIC; + memcpy (res->P96ID, "P96-0:", 6); + if (name) + strcpy (res->Name, name); + else + sprintf (res->Name, "UAE:%4dx%4d", w, h); + + for (depth = 8; depth <= 32; depth++) { + if (!p96depth (depth)) + continue; + if(allocated_gfxmem >= w * h * (depth + 7) / 8) { + FillBoardInfo (*amem, res, w, h, depth); + *amem += PSSO_ModeInfo_sizeof; + } + } +} /**************************************** * InitCard() * * a2: BoardInfo structure ptr - Amiga-based address in Intel endian-format * -* Job - fill in the following structure members: -* gbi_RGBFormats: the pixel formats that the host-OS of UAE supports -* If UAE is running in a window, it should ONLY report the pixel format of the host-OS desktop -* If UAE is running full-screen, it should report ALL pixel formats that the host-OS can handle in full-screen -* NOTE: If full-screen, and the user toggles to windowed-mode, all hell will break loose visually. Must inform -* user that they're doing something stupid (unless their desktop and full-screen colour modes match). -* gbi_SoftSpriteFlags: should be the same as above for now, until actual cursor support is added -* gbi_BitsPerCannon: could be 6 or 8 or ???, depending on the host-OS gfx-card -* gbi_MaxHorResolution: fill this in for all modes (even if you don't support them) -* gbi_MaxVerResolution: fill this in for all modes (even if you don't support them) */ -uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs) +static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) { - struct LibResolution res; - int ModeInfoStructureCount = 1, LibResolutionStructureCount = 0; + struct regstruct *regs = &ctx->regs; + int LibResolutionStructureCount = 0; int i, j, unkcnt; uaecptr amem; - uaecptr AmigaBoardInfo = m68k_areg (regs, 2); + uaecptr AmigaBoardInfo = m68k_areg (regs, 0); + if (!picasso96_amem) { write_log ("P96: InitCard() but no resolution memory!\n"); return 0; } amem = picasso96_amem; - put_word (AmigaBoardInfo + PSSO_BoardInfo_BitsPerCannon, DX_BitsPerCannon ()); - put_word (AmigaBoardInfo + PSSO_BoardInfo_RGBFormats, picasso96_pixel_format); - put_long (AmigaBoardInfo + PSSO_BoardInfo_BoardType, BT_uaegfx); - put_word (AmigaBoardInfo + PSSO_BoardInfo_SoftSpriteFlags, picasso96_pixel_format); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); - put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); + inituaegfx (AmigaBoardInfo); i = 0; unkcnt = 0; while (newmodes[i].depth >= 0) { + struct LibResolution res = { 0 }; j = i; - /* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */ - res.DisplayID = AssignModeID (i, LibResolutionStructureCount, &unkcnt); - res.BoardInfo = AmigaBoardInfo; - res.Width = newmodes[i].res.width; - res.Height = newmodes[i].res.height; - res.Flags = P96F_PUBLIC; - memcpy (res.P96ID, "P96-0:", 6); - sprintf (res.Name, "uaegfx:%dx%d", res.Width, res.Height); - res.Modes[PLANAR] = 0; - res.Modes[CHUNKY] = 0; - res.Modes[HICOLOR] = 0; - res.Modes[TRUECOLOR] = 0; - res.Modes[TRUEALPHA] = 0; - - do { - /* Handle this display mode's depth */ - /* New: Only add the modes when there is enough P96 RTG memory to hold the bitmap */ - if (allocated_gfxmem >= newmodes[i].res.width * newmodes[i].res.height * newmodes[i].depth) { - ModeInfoStructureCount++; - FillBoardInfo (amem, &res, &newmodes[i]); - amem += PSSO_ModeInfo_sizeof; - } - i++; - } while (newmodes[i].depth >= 0 + addmode (AmigaBoardInfo, &amem, &res, newmodes[i].res.width, newmodes[i].res.height, NULL, 0, &unkcnt); + write_log ("%08X %4dx%4d %s\n", res.DisplayID, res.Width, res.Height, res.Name); + while (newmodes[i].depth >= 0 && newmodes[i].res.width == newmodes[j].res.width - && newmodes[i].res.height == newmodes[j].res.height); + && newmodes[i].res.height == newmodes[j].res.height) + i++; LibResolutionStructureCount++; CopyLibResolutionStructureU2A (&res, amem); +#if P96TRACING_ENABLED && P96TRACING_LEVEL > 1 + DumpLibResolutionStructure(amem); +#endif AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); amem += PSSO_LibResolution_sizeof; } @@ -1329,15 +1600,22 @@ uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs) * * NOTE: Return the opposite of the switch-state. BDK */ -uae_u32 REGPARAM2 picasso_SetSwitch (struct regstruct *regs) +static uae_u32 REGPARAM2 picasso_SetSwitch (TrapContext *ctx) { + struct regstruct *regs = &ctx->regs; uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF; + char p96text[100]; /* Do not switch immediately. Tell the custom chip emulation about the * desired state, and wait for custom.c to call picasso_enablescreen * whenever it is ready to change the screen state. */ picasso_requested_on = flag; - write_log ("SetSwitch() - trying to show %s screen\n", flag ? "picasso96":"amiga"); + p96text[0] = 0; + if (flag) + sprintf (p96text, "Picasso96 %dx%dx%d (%dx%dx%d)", + picasso96_state.Width, picasso96_state.Height, picasso96_state.BytesPerPixel * 8, + picasso_vidinfo.width, picasso_vidinfo.height, picasso_vidinfo.pixbytes * 8); + write_log ("SetSwitch() - %s\n", flag ? p96text : "amiga"); /* Put old switch-state in D0 */ return !flag; @@ -1348,9 +1626,8 @@ void picasso_enablescreen (int on) { if (!init_picasso_screen_called) init_picasso_screen(); - wgfx_linestart = 0xFFFFFFFF; - picasso_refresh (1); - write_log ("picasso_enablescreen() showing %s screen\n", on ? "picasso96": "amiga"); + + picasso_refresh (); checkrtglibrary(); } @@ -1367,30 +1644,38 @@ void picasso_enablescreen (int on) * per cannon your board has. So you might have to shift the colors * before writing them to the hardware. */ -uae_u32 REGPARAM2 picasso_SetColorArray (struct regstruct *regs) +static int updateclut (uaecptr clut, int start, int count) { - /* 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 */ - uae_u16 start = m68k_dreg (regs, 0); - uae_u16 count = m68k_dreg (regs, 1); - int i; - uaecptr boardinfo = m68k_areg (regs, 0); - uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT + start * 3; - + int i, changed = 0; + clut += start * 3; for (i = start; i < start + count; i++) { int r = get_byte (clut); int g = get_byte (clut + 1); int b = get_byte (clut + 2); - palette_changed |= (picasso96_state.CLUT[i].Red != r - || picasso96_state.CLUT[i].Green != g - || picasso96_state.CLUT[i].Blue != b); + changed |= (picasso96_state.CLUT[i].Red != r + || picasso96_state.CLUT[i].Green != g + || picasso96_state.CLUT[i].Blue != b); picasso96_state.CLUT[i].Red = r; picasso96_state.CLUT[i].Green = g; picasso96_state.CLUT[i].Blue = b; clut += 3; } + return changed; +} +static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) +{ + /* Fill in some static UAE related structure about this new CLUT setting + * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */ + struct regstruct *regs = &ctx->regs; + uae_u16 start = m68k_dreg (regs, 0); + uae_u16 count = m68k_dreg (regs, 1); + uaecptr boardinfo = m68k_areg (regs, 0); + uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT; + if (updateclut (clut, start, count)) + full_refresh = 1; + P96TRACE(("SetColorArray(%d,%d)\n", start, count)); return 1; } @@ -1402,11 +1687,9 @@ uae_u32 REGPARAM2 picasso_SetColorArray (struct regstruct *regs) * e.g. from chunky to TrueColor. Usually, all you have to do is to set * the RAMDAC of your board accordingly. */ -uae_u32 REGPARAM2 picasso_SetDAC (struct regstruct *regs) +static uae_u32 REGPARAM2 picasso_SetDAC (TrapContext *ctx) { - /* 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 */ - + P96TRACE(("SetDAC()\n")); return 1; } @@ -1415,20 +1698,20 @@ static void init_picasso_screen (void) if (set_panning_called) { picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; } - if (set_gc_called) { gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, (RGBFTYPE) picasso96_state.RGBFormat); + set_gc_called = 0; } if( ( picasso_vidinfo.width == picasso96_state.Width ) && ( picasso_vidinfo.height == picasso96_state.Height ) && ( picasso_vidinfo.depth == (picasso96_state.GC_Depth >> 3) ) && ( picasso_vidinfo.selected_rgbformat == picasso96_state.RGBFormat) ) { - DX_SetPalette (0, 256); - picasso_refresh (1); + picasso_refresh (); } init_picasso_screen_called = 1; + } /* @@ -1442,12 +1725,17 @@ static void init_picasso_screen (void) * or linear start adress. They will be set when appropriate by their * own functions. */ -uae_u32 REGPARAM2 picasso_SetGC (struct regstruct *regs) +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); uaecptr modeinfo = m68k_areg (regs, 1); + put_long (AmigaBoardInfo + PSSO_BoardInfo_ModeInfo, modeinfo); + put_word (AmigaBoardInfo + PSSO_BoardInfo_Border, border); + picasso96_state.Width = get_word (modeinfo + PSSO_ModeInfo_Width); picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */ @@ -1457,6 +1745,7 @@ uae_u32 REGPARAM2 picasso_SetGC (struct regstruct *regs) picasso96_state.GC_Depth = get_byte (modeinfo + PSSO_ModeInfo_Depth); picasso96_state.GC_Flags = get_byte (modeinfo + PSSO_ModeInfo_Flags); + P96TRACE(("SetGC(%d,%d,%d,%d)\n", picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, border)); set_gc_called = 1; picasso96_state.HostAddress = NULL; @@ -1492,40 +1781,68 @@ static void picasso_SetPanningInit(void) { picasso96_state.XYOffset = picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel) + (picasso96_state.YOffset * picasso96_state.BytesPerRow); - picasso96_state.BytesPerRow = picasso96_state.VirtualWidth * picasso96_state.BytesPerPixel; } -uae_u32 REGPARAM2 picasso_SetPanning (struct regstruct *regs) +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); uaecptr bmeptr = get_long (bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ uae_u16 bme_width, bme_height; + if(oldscr == 0) { + oldscr = start_of_screen; + } + if (oldscr != start_of_screen) { + oldscr = start_of_screen; + } + bme_width = get_word (bmeptr + PSSO_BitMapExtra_Width); bme_height = get_word (bmeptr + PSSO_BitMapExtra_Height); picasso96_state.Address = start_of_screen; /* Amiga-side address */ picasso96_state.XOffset = (uae_s16) (m68k_dreg (regs, 1) & 0xFFFF); picasso96_state.YOffset = (uae_s16) (m68k_dreg (regs, 2) & 0xFFFF); + put_word (bi + PSSO_BoardInfo_XOffset, picasso96_state.XOffset); + put_word (bi + PSSO_BoardInfo_YOffset, picasso96_state.YOffset); picasso96_state.VirtualWidth = bme_width; picasso96_state.VirtualHeight = bme_height; picasso96_state.RGBFormat = m68k_dreg (regs, 7); picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat); + picasso96_state.BytesPerRow = picasso96_state.VirtualWidth * picasso96_state.BytesPerPixel; picasso_SetPanningInit(); + + full_refresh = 1; set_panning_called = 1; + P96TRACE(("SetPanning(%d, %d, %d) Start 0x%x, BPR %d Bpp %d RGBF %d\n", + Width, picasso96_state.XOffset, picasso96_state.YOffset, + start_of_screen, picasso96_state.BytesPerRow, picasso96_state.BytesPerPixel, picasso96_state.RGBFormat)); init_picasso_screen (); set_panning_called = 0; return 1; } -static void do_xor8 (uae_u8 * ptr, long len, uae_u32 val) +static void do_xor8 (uae_u8 *p, int w, uae_u32 v) { - int i; - for (i = 0; i < len; i++, ptr++) { - do_put_mem_byte (ptr, (uae_u8)(do_get_mem_byte (ptr) ^ val)); + while (ALIGN_POINTER_TO32 (p) != 3 && w) { + *p ^= v; + p++; + w--; + } + while (w >= 2 * 4) { + *((uae_u32*)p) ^= v; + p += 4; + *((uae_u32*)p) ^= v; + p += 4; + w -= 2 * 4; + } + while (w) { + *p ^= v; + p++; + w--; } } @@ -1545,8 +1862,9 @@ static void do_xor8 (uae_u8 * ptr, long len, uae_u32 val) * This function is used to invert a rectangular area on the board. It is called by BltBitMap, * BltPattern and BltTemplate. */ -uae_u32 REGPARAM2 picasso_InvertRect (struct regstruct *regs) +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); @@ -1561,14 +1879,13 @@ uae_u32 REGPARAM2 picasso_InvertRect (struct regstruct *regs) unsigned long width_in_bytes; uae_u32 result = 0; - wgfx_flushline (); + if (NOBLITTER) + return 0; + if (CopyRenderInfoStructureA2U (renderinfo, &ri)) { + P96TRACE(("InvertRect %dbpp 0x%lx\n", Bpp, (long)mask)); - if (CopyRenderInfoStructureA2U (renderinfo, &ri)) - { - if (mask != 0xFF && Bpp > 1) - { + if (mask != 0xFF && Bpp > 1) mask = 0xFF; - } xorval = 0x01010101 * (mask & 0xFF); width_in_bytes = Bpp * Width; @@ -1576,15 +1893,9 @@ uae_u32 REGPARAM2 picasso_InvertRect (struct regstruct *regs) for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow) do_xor8 (uae_mem, width_in_bytes, xorval); - - if (renderinfo_is_current_screen (&ri)) { - if (mask == 0xFF) - do_invertrect (&ri, Bpp, X, Y, Width, Height); - else - do_blit( &ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0); - } result = 1; } + return result; /* 1 if supported, 0 otherwise */ } @@ -1601,8 +1912,9 @@ FillRect: * d5: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ -uae_u32 REGPARAM2 picasso_FillRect (struct regstruct *regs) +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); @@ -1611,90 +1923,49 @@ uae_u32 REGPARAM2 picasso_FillRect (struct regstruct *regs) uae_u32 Pen = m68k_dreg (regs, 4); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 5); RGBFTYPE RGBFormat = (RGBFTYPE) m68k_dreg (regs, 7); - - uae_u8 *src; uae_u8 *oldstart; int Bpp; struct RenderInfo ri; uae_u32 result = 0; - if (Width * Height <= 2500) + if (NOBLITTER) return 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif - - wgfx_flushline (); - - if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF) - { - if (ri.RGBFormat != RGBFormat) - write_log ("Weird Stuff!\n"); - + if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF) { Bpp = GetBytesPerPixel (RGBFormat); + P96TRACE(("FillRect(%d, %d, %d, %d) Pen 0x%x BPP %d BPR %d Mask 0x%x\n", + X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask)); + if (Bpp > 1) Mask = 0xFF; - if (Mask == 0xFF) - { + if (Mask == 0xFF) { /* Do the fill-rect in the frame-buffer */ - do_fillrect_frame_buffer (&ri, X, Y, Width, Height, Pen, Bpp, RGBFormat); - - /* Now we do the on-screen display, if renderinfo points to it */ - if (renderinfo_is_current_screen (&ri)) - { - src = ri.Memory + X * Bpp + Y * ri.BytesPerRow; - X = X - picasso96_state.XOffset; - Y = Y - picasso96_state.YOffset; - if ((int)X < 0) { Width = Width + X; X = 0; } - if ((int)Width < 1) return 1; - if ((int)Y < 0) { Height = Height + Y; Y = 0; } - if ((int)Height < 1) return 1; - - /* Argh - why does P96Speed do this to me, with FillRect only?! */ - if ((X < picasso96_state.Width) && - (Y < picasso96_state.Height)) - { - if (X + Width > picasso96_state.Width) - Width = picasso96_state.Width - X; - if (Y+Height > picasso96_state.Height) - Height = picasso96_state.Height - Y; - - do_fillrect (src, X, Y, Width, Height, Pen, Bpp, RGBFormat); - } - } + do_fillrect_frame_buffer (&ri, X, Y, Width, Height, Pen, Bpp); result = 1; - } - else - { + + } else { + /* We get here only if Mask != 0xFF */ - if (Bpp != 1) - { + if (Bpp != 1) { write_log( "WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n", Mask, Bpp); - } - else - { + } else { Pen &= Mask; Mask = ~Mask; oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp; { uae_u8 *start = oldstart; uae_u8 *end = start + Height * ri.BytesPerRow; - for (; start != end; start += ri.BytesPerRow) - { + for (; start != end; start += ri.BytesPerRow) { uae_u8 *p = start; unsigned long cols; - for (cols = 0; cols < Width; cols++) - { + for (cols = 0; cols < Width; cols++) { uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask; do_put_mem_byte (p + cols, (uae_u8)(Pen | tmpval)); } } } - if (renderinfo_is_current_screen (&ri)) - do_blit( &ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0); result = 1; } } @@ -1755,12 +2026,8 @@ STATIC_INLINE int BlitRectHelper( void ) BLIT_OPCODE opcode = blitrectdata.opcode; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); - unsigned long total_width = width * Bpp; - unsigned long linewidth = (total_width + 15) & ~15; - int can_do_visible_blit = 0; - if (opcode == BLIT_DST) - { + if (opcode == BLIT_DST) { write_log( "WARNING: BlitRect() being called with opcode of BLIT_DST\n" ); return 1; } @@ -1773,33 +2040,14 @@ STATIC_INLINE int BlitRectHelper( void ) * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete() * and we need to put the results on the screen from the frame-buffer. */ - if (dstri == NULL || dstri->Memory == ri->Memory) - { + if (dstri == NULL || dstri->Memory == ri->Memory) { if (mask != 0xFF && Bpp > 1) - { mask = 0xFF; - } dstri = ri; - can_do_visible_blit = 1; } /* Do our virtual frame-buffer memory first */ - do_blitrect_frame_buffer (ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); - /* Now we do the on-screen display, if renderinfo points to it */ - - if (renderinfo_is_current_screen (dstri)) - { - if (mask == 0xFF || Bpp > 1) { - if (can_do_visible_blit) - do_blit (dstri, Bpp, srcx, srcy, dstx, dsty, width, height, opcode, 1); - else - do_blit (dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0); - } else { - do_blit (dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0); - } - } - - return 1; + return do_blitrect_frame_buffer (ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); } STATIC_INLINE int BlitRect (uaecptr ri, uaecptr dstri, @@ -1810,13 +2058,10 @@ STATIC_INLINE int BlitRect (uaecptr ri, uaecptr dstri, CopyRenderInfoStructureA2U( ri, &blitrectdata.ri_struct ); blitrectdata.ri = &blitrectdata.ri_struct; - if (dstri) - { + if (dstri) { CopyRenderInfoStructureA2U( dstri, &blitrectdata.dstri_struct ); blitrectdata.dstri = &blitrectdata.dstri_struct; - } - else - { + } else { blitrectdata.dstri = NULL; } blitrectdata.srcx = srcx; @@ -1845,8 +2090,9 @@ BlitRect: * d6: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ -uae_u32 REGPARAM2 picasso_BlitRect (struct regstruct *regs) +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); @@ -1857,14 +2103,10 @@ uae_u32 REGPARAM2 picasso_BlitRect (struct regstruct *regs) uae_u8 Mask = (uae_u8) m68k_dreg (regs, 6); uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif - - wgfx_flushline (); - + if (NOBLITTER_BLIT) + return 0; + P96TRACE(("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n", srcx, srcy, dstx, dsty, width, height, Mask)); result = BlitRect (renderinfo, (uaecptr)NULL, srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC); - return result; } @@ -1886,8 +2128,9 @@ BlitRectNoMaskComplete: * because the RGBFormat or opcode aren't supported. * OTHERWISE return 1 ***********************************************************/ -uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (struct regstruct *regs) +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); @@ -1900,58 +2143,36 @@ uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (struct regstruct *regs) uae_u32 RGBFmt = m68k_dreg (regs, 7); uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif - - wgfx_flushline (); + if (NOBLITTER_BLIT) + return 0; + P96TRACE(("BlitRectNoMaskComplete() op 0x%02x, %08x:(%4d,%4d) --> %08x:(%4d,%4d), wh(%4d,%4d)\n", + OpCode, get_long (srcri + PSSO_RenderInfo_Memory), srcx, srcy, get_long (dstri + PSSO_RenderInfo_Memory), dstx, dsty, width, height)); result = BlitRect (srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, (BLIT_OPCODE)OpCode); return result; } -/* This utility function is used both by BlitTemplate() and BlitPattern() */ -STATIC_INLINE void PixelWrite1 (uae_u8 * mem, int bits, uae_u32 fgpen, uae_u32 mask) +/* NOTE: fgpen MUST be in host byte order */ +STATIC_INLINE void PixelWrite (uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, uae_u32 mask) { - if (mask != 0xFF) - fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask); - do_put_mem_byte (mem + bits, fgpen); -} - -STATIC_INLINE void PixelWrite2 (uae_u8 * mem, int bits, uae_u32 fgpen) -{ - do_put_mem_word (((uae_u16 *) mem) + bits, fgpen); -} - -STATIC_INLINE void PixelWrite3 (uae_u8 * mem, int bits, uae_u32 fgpen) -{ - do_put_mem_byte (mem + bits * 3, fgpen & 0x000000FF); - *(uae_u16 *) (mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8; -} - -STATIC_INLINE void PixelWrite4 (uae_u8 * mem, int bits, uae_u32 fgpen) -{ - do_put_mem_long (((uae_u32 *) mem) + bits, fgpen); -} - -STATIC_INLINE void PixelWrite (uae_u8 * mem, int bits, uae_u32 fgpen, uae_u8 Bpp, uae_u32 mask) -{ - switch (Bpp) { + switch (Bpp) + { case 1: if (mask != 0xFF) - fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask); - do_put_mem_byte (mem + bits, (uae_u8)fgpen); + fgpen = (fgpen & mask) | (mem[bits] & ~mask); + mem[bits] = (uae_u8)fgpen; break; case 2: - do_put_mem_word (((uae_u16 *) mem) + bits, (uae_u16)fgpen); + ((uae_u16 *)mem)[bits] = (uae_u16)fgpen; break; case 3: - do_put_mem_byte (mem + bits * 3, (uae_u8)fgpen); - *(uae_u16 *) (mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8; + mem[bits * 3 + 0] = fgpen >> 0; + mem[bits * 3 + 1] = fgpen >> 8; + mem[bits * 3 + 2] = fgpen >> 16; break; case 4: - do_put_mem_long (((uae_u32 *) mem) + bits, fgpen); + ((uae_u32 *)mem)[bits] = fgpen; break; } } @@ -1978,8 +2199,9 @@ STATIC_INLINE void PixelWrite (uae_u8 * mem, int bits, uae_u32 fgpen, uae_u8 Bpp * always 16 pixels (one word) and the height is calculated as 2^Size. The data must be shifted up * and to the left by XOffset and YOffset pixels at the beginning. */ -uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs) +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); @@ -1993,20 +2215,15 @@ uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs) struct RenderInfo ri; struct Pattern pattern; unsigned long rows; - uae_u32 fgpen; uae_u8 *uae_mem; int xshift; unsigned long ysize_mask; uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif + if (NOBLITTER) + return 1; - wgfx_flushline (); - - if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) - { + if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) { Bpp = GetBytesPerPixel (ri.RGBFormat); uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset with address */ @@ -2015,30 +2232,30 @@ uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs) pattern.DrawMode &= 0x03; - if (Mask != 0xFF) - { + if (Mask != 0xFF) { if( Bpp > 1 ) Mask = 0xFF; - - if( pattern.DrawMode == COMP) - { - write_log ("WARNING - BlitPattern() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask); - } - else - { result = 1; - } - } - else - { + } else { result = 1; } - if (result) - { + if (result) { + uae_u32 fgpen, bgpen; + P96TRACE(("BlitPattern() xy(%d,%d), wh(%d,%d) draw 0x%x, off(%d,%d), ph %d fg 0x%x bg 0x%x\n", + X, Y, W, H, pattern.DrawMode, pattern.XOffset, pattern.YOffset, 1 << pattern.Size, pattern.FgPen, pattern.BgPen)); + +#if P96TRACING_ENABLED + DumpPattern(&pattern); +#endif ysize_mask = (1 << pattern.Size) - 1; xshift = pattern.XOffset & 15; + fgpen = pattern.FgPen; + endianswap (&fgpen, Bpp); + bgpen = pattern.BgPen; + endianswap (&bgpen, Bpp); + for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) { unsigned long prow = (rows + pattern.YOffset) & ysize_mask; unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow); @@ -2048,8 +2265,7 @@ uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs) if (xshift != 0) d = (d << xshift) | (d >> (16 - xshift)); - for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp << 4) - { + for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp << 4) { long bits; long max = W - cols; unsigned int data = d; @@ -2057,70 +2273,74 @@ uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs) if (max > 16) max = 16; - for (bits = 0; bits < max; bits++) - { - int bit_set = data & 0x8000; - data <<= 1; - switch (pattern.DrawMode) { - case JAM1: + switch (pattern.DrawMode) + { + case JAM1: + { + for (bits = 0; bits < max; bits++) { + int bit_set = data & 0x8000; + data <<= 1; if (inversion) bit_set = !bit_set; if (bit_set) - PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask); - break; - case JAM2: + PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); + } + break; + } + case JAM2: + { + for (bits = 0; bits < max; bits++) { + int bit_set = data & 0x8000; + data <<= 1; if (inversion) bit_set = !bit_set; - if (bit_set) - PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask); - else - PixelWrite (uae_mem2, bits, pattern.BgPen, Bpp, Mask); - break; - case COMP: + PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); + } + break; + } + case COMP: + { + for (bits = 0; bits < max; bits++) { + int bit_set = data & 0x8000; + data <<= 1; if (bit_set) { - fgpen = pattern.FgPen; - - switch (Bpp) { + switch (Bpp) + { case 1: - { - uae_u8 *addr = uae_mem2 + bits; - do_put_mem_byte (addr, (uae_u8)(do_get_mem_byte (addr) ^ 0xff)); - } - break; + { + uae_mem2[bits] ^= 0xff & Mask; + } + break; case 2: - { - uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits; - do_put_mem_word (addr, (uae_u16)(do_get_mem_word (addr) ^ fgpen)); - } - break; + { + uae_u16 *addr = (uae_u16 *)uae_mem2; + addr[bits] ^= 0xffff; + } + break; case 3: - { - uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); - do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF)); - } - break; + { + uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); + do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00ffffff); + } + break; case 4: - { - uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits; - do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen); - } - break; + { + uae_u32 *addr = (uae_u32 *)uae_mem2; + addr[bits] ^= 0xffffffff; + } + break; } } - break; + } + break; } } } } - - /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */ - if (picasso_vidinfo.extra_mem && renderinfo_is_current_screen (&ri)) { - do_blit( &ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0); - } - result = 1; } } + return result; } @@ -2143,8 +2363,9 @@ BlitTemplate: * using a single plane of image data which will be expanded to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. ***********************************************************************************/ -uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs) +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); @@ -2157,19 +2378,14 @@ uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs) struct RenderInfo ri; unsigned long rows; int bitoffset; - uae_u32 fgpen; uae_u8 *uae_mem, Bpp; uae_u8 *tmpl_base; uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif + if (NOBLITTER) + return 0; - wgfx_flushline (); - - if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp)) - { + if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp)) { Bpp = GetBytesPerPixel (ri.RGBFormat); uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset into address */ @@ -2178,39 +2394,40 @@ uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs) tmp.DrawMode &= 0x03; - if (Mask != 0xFF) - { + if (Mask != 0xFF) { if (Bpp > 1) Mask = 0xFF; - if (tmp.DrawMode == COMP) - { + if (tmp.DrawMode == COMP) { write_log ("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask); return 0; - } - else - { + } else { result = 1; } - } - else - { + } else { result = 1; } -#if 1 - if (tmp.DrawMode == COMP) { - /* workaround, let native blitter handle COMP mode */ - return 0; - } -#endif - if (result) - { + if (result) { + uae_u32 fgpen, bgpen; + + P96TRACE(("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n", + X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen)); + bitoffset = tmp.XOffset % 8; +#if P96TRACING_ENABLED && P96TRACING_LEVEL > 0 + DumpTemplate(&tmp, W, H); +#endif + tmpl_base = (uae_u8 *)tmp.Memory + tmp.XOffset / 8; + fgpen = tmp.FgPen; + endianswap (&fgpen, Bpp); + bgpen = tmp.BgPen; + endianswap (&bgpen, Bpp); + for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) { unsigned long cols; uae_u8 *tmpl_mem = tmpl_base; @@ -2230,73 +2447,76 @@ uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs) byte = data >> (8 - bitoffset); - for (bits = 0; bits < max; bits++) { - int bit_set = (byte & 0x80); - byte <<= 1; - switch (tmp.DrawMode) { - case JAM1: - if (inversion) - bit_set = !bit_set; - if (bit_set) { - fgpen = tmp.FgPen; - PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); - } - break; - case JAM2: - if (inversion) - bit_set = !bit_set; - fgpen = tmp.BgPen; - if (bit_set) - fgpen = tmp.FgPen; - PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); - break; - case COMP: - if (bit_set) { - fgpen = tmp.FgPen; - - switch (Bpp) { - case 1: - { - uae_u8 *addr = uae_mem2 + bits; - do_put_mem_byte (addr, (uae_u8) (do_get_mem_byte (addr) ^ 0xff)); - } - break; - case 2: - { - uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits; - do_put_mem_word (addr, (uae_u16) (do_get_mem_word (addr) ^ fgpen)); - } - break; - case 3: - { - uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); - do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF)); - } - break; - case 4: - { - uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits; - do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen); - } - break; - } - } - break; + switch (tmp.DrawMode) + { + case JAM1: + { + for (bits = 0; bits < max; bits++) { + int bit_set = (byte & 0x80); + byte <<= 1; + if (inversion) + bit_set = !bit_set; + if (bit_set) + PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); } + break; + } + case JAM2: + { + for (bits = 0; bits < max; bits++) { + int bit_set = (byte & 0x80); + byte <<= 1; + if (inversion) + bit_set = !bit_set; + PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); + } + break; + } + case COMP: + { + for (bits = 0; bits < max; bits++) { + int bit_set = (byte & 0x80); + byte <<= 1; + if (bit_set) { + switch (Bpp) + { + case 1: + { + uae_u8 *addr = uae_mem2; + addr[bits] ^= 0xff; + } + break; + case 2: + { + uae_u16 *addr = (uae_u16 *)uae_mem2; + addr[bits] ^= 0xffff; + } + break; + case 3: + { + uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); + do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00FFFFFF); + } + break; + case 4: + { + uae_u32 *addr = (uae_u32 *)uae_mem2; + addr[bits] ^= 0xffffffff; + } + break; + } + } + } + break; + } } - } - } + } + } + result = 1; + } + } - /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */ - if (picasso_vidinfo.extra_mem && renderinfo_is_current_screen (&ri)) { - do_blit (&ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0); - } - - result = 1; - } - } - - return 1; + return 1; } /* @@ -2307,8 +2527,9 @@ uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs) * This function calculates the amount of bytes needed for a line of * "Width" pixels in the given RGBFormat. */ -uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (struct regstruct *regs) +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); @@ -2324,14 +2545,17 @@ uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (struct regstruct *regs) * * NOTE: return the opposite of the state */ -uae_u32 REGPARAM2 picasso_SetDisplay (struct regstruct *regs) +static uae_u32 REGPARAM2 picasso_SetDisplay (TrapContext *ctx) { + struct regstruct *regs = &ctx->regs; uae_u32 state = m68k_dreg (regs, 0); + P96TRACE (("SetDisplay(%d)\n", state)); return !state; } void init_hz_p96 (void) { + p96vblank = currprefs.ntscmode ? 60 : 50; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ @@ -2348,9 +2572,6 @@ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, unsigned long rows, bitoffset = srcx & 7; long eol_offset; - /* if (mask != 0xFF) - write_log ("P2C - pixel-width = %d, bit-offset = %d\n", width, bitoffset); */ - /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; @@ -2422,8 +2643,9 @@ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, * on the board. Watch out for plane pointers that are 0x00000000 (represents a plane with all bits "0") * or 0xffffffff (represents a plane with all bits "1"). */ -uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (struct regstruct *regs) +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); @@ -2438,24 +2660,17 @@ uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (struct regstruct *regs) struct BitMap local_bm; uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif - - wgfx_flushline (); + if (NOBLITTER) + return 0; if (minterm != 0x0C) { write_log ("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n", minterm); - } - else if (CopyRenderInfoStructureA2U (ri, &local_ri) && - CopyBitMapStructureA2U (bm, &local_bm)) - { + } else if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { + P96TRACE(("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n", + srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth)); + P96TRACE(("P2C - BitMap has %d BPR, %d rows\n", local_bm.BytesPerRow, local_bm.Rows)); PlanarToChunky (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask); - if (renderinfo_is_current_screen (&local_ri)) - { - do_blit (&local_ri, GetBytesPerPixel (local_ri.RGBFormat), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0); - } result = 1; } @@ -2507,18 +2722,20 @@ static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, } } - switch (bpp) { + switch (bpp) + { case 2: - do_put_mem_word ((uae_u16 *) image2, (uae_u16)(cim->Colors[v])); + ((uae_u16 *)image2)[0] = (uae_u16)(cim->Colors[v]); image2 += 2; break; case 3: - do_put_mem_byte (image2++, (uae_u8)cim->Colors[v]); - do_put_mem_word ((uae_u16 *) image2, (uae_u16)((cim->Colors[v] & 0x00FFFF00) >> 8)); - image2 += 2; + image2[0] = cim->Colors[v] >> 0; + image2[1] = cim->Colors[v] >> 8; + image2[2] = cim->Colors[v] >> 16; + image2 += 3; break; case 4: - do_put_mem_long ((uae_u32 *) image2, cim->Colors[v]); + ((uae_u32 *)image2)[0] = cim->Colors[v]; image2 += 4; break; } @@ -2570,8 +2787,9 @@ static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, * BlitTemplate(). */ -uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (struct regstruct *regs) +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); @@ -2588,151 +2806,54 @@ uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (struct regstruct *regs) struct ColorIndexMapping local_cim; uae_u32 result = 0; -#ifdef JIT - special_mem|=S_WRITE|S_READ; -#endif - - wgfx_flushline (); + if (NOBLITTER) + return 0; if (minterm != 0x0C) { - write_log ("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n", - minterm); + write_log ("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n", minterm); + return 0; } - else if (CopyRenderInfoStructureA2U (ri, &local_ri) && - CopyBitMapStructureA2U (bm, &local_bm)) - { + if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { Mask = 0xFF; - CopyColorIndexMappingA2U (cim, &local_cim); - + CopyColorIndexMappingA2U (cim, &local_cim, GetBytesPerPixel (local_ri.RGBFormat)); + P96TRACE(("BlitPlanar2Direct(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n", + srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth)); PlanarToDirect (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim); - if (renderinfo_is_current_screen (&local_ri)) - do_blit( &local_ri, GetBytesPerPixel( local_ri.RGBFormat ), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0); result = 1; } return result; } -STATIC_INLINE void write_gfx_x (uaecptr addr, uae_u32 value, int size) +static void copyall (uae_u8 *src, uae_u8 *dst) { - int y; - uaecptr oldaddr = addr; + if (picasso96_state.RGBFormat == RGBFB_R5G6B5) + copy_screen_16bit_swap(dst, src, picasso96_state.Width * picasso96_state.Height * 2); + else + copy_screen_32bit_to_16bit_neon(dst, src, picasso96_state.Width * picasso96_state.Height * 4); +} - if (!picasso_on) - return; - - /* - * Several writes to successive memory locations are a common access pattern. - * Try to optimize it. - */ - if (addr >= wgfx_linestart && addr + size <= wgfx_lineend) { - if (addr < wgfx_min) - wgfx_min = addr; - if (addr + size > wgfx_max) - wgfx_max = addr + size; +static void flushpixels (void) +{ + uae_u8 *src = p96ram_start + natmem_offset; + int off = picasso96_state.XYOffset - gfxmem_start; + uae_u8 *src_start = src + off; + uae_u8 *src_end = src + off + picasso96_state.BytesPerRow * picasso96_state.Height; + uae_u8 *dst; + + if (!picasso_vidinfo.extra_mem || src_start >= src_end) return; - } else - wgfx_flushline (); - addr += gfxmem_start; - /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */ - if (addr < picasso96_state.Address || addr + size >= picasso96_state.Extent) - return; + if (doskip () && p96skipmode == 1) + return; - addr -= picasso96_state.Address+(picasso96_state.XOffset*picasso96_state.BytesPerPixel) - +(picasso96_state.YOffset*picasso96_state.BytesPerRow); - - y = addr / picasso96_state.BytesPerRow; - - if (y >= picasso96_state.Height) - return; - wgfx_linestart = picasso96_state.Address - gfxmem_start + y * picasso96_state.BytesPerRow; - wgfx_lineend = wgfx_linestart + picasso96_state.BytesPerRow; - wgfx_y = y; - wgfx_min = oldaddr; - wgfx_max = oldaddr + size; -} - -static uae_u32 REGPARAM2 gfxmem_lget (uaecptr addr) -{ - uae_u32 *m; - -#ifdef JIT - special_mem |= S_READ; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u32 *)(gfxmemory + addr); - return do_get_mem_long(m); -} - -static uae_u32 REGPARAM2 gfxmem_wget (uaecptr addr) -{ - uae_u16 *m; -#ifdef JIT - special_mem |= S_READ; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u16 *)(gfxmemory + addr); - return do_get_mem_word(m); -} - -static uae_u32 REGPARAM2 gfxmem_bget (uaecptr addr) -{ - uae_u8 *m; -#ifdef JIT - special_mem |= S_READ; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u8 *)(gfxmemory + addr); - return do_get_mem_byte(m); -} - -static void REGPARAM2 gfxmem_lput (uaecptr addr, uae_u32 l) -{ - uae_u32 *m; -#ifdef JIT - special_mem |= S_WRITE; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u32 *)(gfxmemory + addr); - do_put_mem_long(m, l); - - /* write the long-word to our displayable memory */ - write_gfx_x (addr, l, 4); -} - -static void REGPARAM2 gfxmem_wput (uaecptr addr, uae_u32 w) -{ - uae_u16 *m; -#ifdef JIT - special_mem |= S_WRITE; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u16 *)(gfxmemory + addr); - do_put_mem_word(m, (uae_u16)w); - - /* write the word to our displayable memory */ - write_gfx_x (addr, (uae_u16) w, 2); -} - -static void REGPARAM2 gfxmem_bput (uaecptr addr, uae_u32 b) -{ - uae_u8 *m; -#ifdef JIT - special_mem |= S_WRITE; -#endif - addr -= gfxmem_start; - addr &= gfxmem_mask; - m = (uae_u8 *)(gfxmemory + addr); - do_put_mem_byte(m, b); - - /* write the byte to our displayable memory */ - write_gfx_x (addr, (uae_u8) b, 1); + dst = gfx_lock_picasso (); + if (dst != NULL) + { + copyall (src + off, dst); + gfx_unlock_picasso (); + full_refresh = 0; + } } static uae_u32 REGPARAM2 gfxmem_lgetx (uaecptr addr) @@ -2800,13 +2921,6 @@ static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr) return gfxmemory + addr; } -addrbank gfxmem_bank = { - gfxmem_lget, gfxmem_wget, gfxmem_bget, - gfxmem_lput, gfxmem_wput, gfxmem_bput, - gfxmem_xlate, gfxmem_check, NULL, "RTG RAM", - dummy_lgeti, dummy_wgeti, ABFLAG_RAM -}; - addrbank gfxmem_bankx = { gfxmem_lgetx, gfxmem_wgetx, gfxmem_bgetx, gfxmem_lputx, gfxmem_wputx, gfxmem_bputx, @@ -2814,21 +2928,6 @@ addrbank gfxmem_bankx = { dummy_lgeti, dummy_wgeti, ABFLAG_RAM }; -static int resolution_compare (const void *a, const void *b) -{ - struct PicassoResolution *ma = (struct PicassoResolution *) a; - struct PicassoResolution *mb = (struct PicassoResolution *) b; - if (ma->res.width > mb->res.width) - return -1; - if (ma->res.width < mb->res.width) - return 1; - if (ma->res.height > mb->res.height) - return -1; - if (ma->res.height < mb->res.height) - return 1; - return ma->depth - mb->depth; -} - /* Call this function first, near the beginning of code flow * Place in InitGraphics() which seems reasonable... * Also put it in reset_drawing() for safe-keeping. */ @@ -2836,8 +2935,9 @@ void InitPicasso96 (void) { int i; - have_done_picasso = 0; - palette_changed = 0; +//fastscreen + oldscr = 0; +//fastscreen memset (&picasso96_state, 0, sizeof (struct picasso96_state_struct)); for (i = 0; i < 256; i++) { @@ -2850,15 +2950,352 @@ void InitPicasso96 (void) | ((i & 2) ? 0x0100 : 0) | ((i & 1) ? 0x01 : 0)); } - mode_count = DX_FillResolutions (&picasso96_pixel_format); - qsort (DisplayModes, mode_count, sizeof (struct PicassoResolution), resolution_compare); } +#endif +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; + //write_log ("Picasso_SetInterrupt(%08x,%d)\n", bi, onoff); + return onoff; +} + +#define PUTABI(func) \ + if (ABI) \ + put_long (ABI + func, here ()); + +#define RTGCALL(func,funcdef,call) \ + PUTABI (func); \ + dl (0x48e78000); \ + calltrap (deftrap (call)); \ + dw (0x4a80); \ + dl (0x4cdf0001);\ + dw (0x6604); \ + dw (0x2f28); \ + dw (funcdef); \ + dw (RTS); + +#define RTGCALL2(func,call) \ + PUTABI (func); \ + calltrap (deftrap (call)); \ + dw (RTS); + +#define RTGCALLDEFAULT(func,funcdef) \ + PUTABI (func); \ + dw (0x2f28); \ + dw (funcdef); \ + dw (RTS); + +#define RTGNONE(func) \ + if (ABI) \ + put_long (ABI + func, start); + + +static uaecptr inituaegfxfuncs (uaecptr start, uaecptr ABI) +{ + uaecptr old = here (); + uaecptr ptr; + + org (start); + + dw (RTS); + /* ResolvePixelClock + move.l D0,gmi_PixelClock(a1) ; pass the pixelclock through + moveq #0,D0 ; index is 0 + move.b #98,gmi_Numerator(a1) ; whatever + move.b #14,gmi_Denominator(a1) ; whatever + rts + */ + PUTABI (PSSO_BoardInfo_ResolvePixelClock); + dl (0x2340002c); + dw (0x7000); + dl (0x137c0062); dw (0x002a); + dl (0x137c000e); dw (0x002b); + dw (RTS); + + /* GetPixelClock + move.l #CLOCK,D0 ; fill in D0 with our one true pixel clock + rts + */ + PUTABI (PSSO_BoardInfo_GetPixelClock); + dw (0x203c); + dl (100227260); + dw (RTS); + + /* CalculateMemory + ; this is simple, because we're not supporting planar modes in UAE + move.l a1,d0 + rts + */ + PUTABI (PSSO_BoardInfo_CalculateMemory); + dw (0x2009); + dw (RTS); + + /* GetCompatibleFormats + ; all formats can coexist without any problems, since we don't support planar stuff in UAE + move.l #~RGBFF_PLANAR,d0 + rts + */ + PUTABI (PSSO_BoardInfo_GetCompatibleFormats); + dw (0x203c); + dl (0xfffffffe); + dw (RTS); + + /* CalculateBytesPerRow (optimized) */ + PUTABI (PSSO_BoardInfo_CalculateBytesPerRow); + dl (0x0c400140); // cmp.w #320,d0 + dw (0x6504); // bcs.s .l1 + calltrap (deftrap (picasso_CalculateBytesPerRow)); + dw (RTS); + dw (0x0c87); dl (0x00000010); // l1: cmp.l #10,d7 + dw (0x640a); // bcc.s .l2 + dw (0x7200); // moveq #0,d1 + dl (0x123b7010); // move.b table(pc,d7.w),d1 + dw (0x6b04); // bmi.s l3 + dw (0xe368); // lsl.w d1,d0 + dw (RTS); // .l2 + dw (0x3200); // .l3 move.w d0,d1 + dw (0xd041); // add.w d1,d0 + dw (0xd041); // add.w d1,d0 + dw (RTS); + dl (0x0000ffff); // table + dl (0x01010202); + dl (0x02020101); + dl (0x01010100); + + RTGNONE(PSSO_BoardInfo_SetClock); + RTGNONE(PSSO_BoardInfo_SetMemoryMode); + RTGNONE(PSSO_BoardInfo_SetWriteMask); + RTGNONE(PSSO_BoardInfo_SetClearMask); + RTGNONE(PSSO_BoardInfo_SetReadPlane); + +#if 1 + RTGNONE(PSSO_BoardInfo_WaitVerticalSync); +#else + PUTABI (PSSO_BoardInfo_WaitVerticalSync); + dl (0x48e7203e); // movem.l d2/a5/a6,-(sp) + dl (0x2c68003c); + dw (0x93c9); + dl (0x4eaefeda); + dw (0x2440); + dw (0x70ff); + dl (0x4eaefeb6); + dw (0x7400); + dw (0x1400); + dw (0x6b40); + dw (0x49f9); + dl (uaegfx_base + CARD_VSYNCLIST); + dw (0x47f9); + dl (uaegfx_base + CARD_VSYNCLIST + CARD_VSYNCMAX * 8); + dl (0x4eaeff88); + dw (0xb9cb); + dw (0x6606); + dl (0x4eaeff82); + dw (0x601c); + dw (0x4a94); + dw (0x6704); + dw (0x508c); + dw (0x60ee); + dw (0x288a); + dl (0x29420004); + dl (0x4eaeff82); + dw (0x7000); + dw (0x05c0); + dl (0x4eaefec2); + dw (0x4294); + dw (0x7000); + dw (0x1002); + dw (0x6b04); + dl (0x4eaefeb0); + dl (0x4cdf7c04); + dw (RTS); +#endif + RTGNONE(PSSO_BoardInfo_WaitBlitter); + +#if 0 + RTGCALL2(PSSO_BoardInfo_, picasso_); + RTGCALL(PSSO_BoardInfo_, PSSO_BoardInfo_Default, picasso_); + RTGCALLDEFAULT(PSSO_BoardInfo_, PSSO_BoardInfo_Default); +#endif + + RTGCALL(PSSO_BoardInfo_BlitPlanar2Direct, PSSO_BoardInfo_BlitPlanar2DirectDefault, picasso_BlitPlanar2Direct); + RTGCALL(PSSO_BoardInfo_FillRect, PSSO_BoardInfo_FillRectDefault, picasso_FillRect); + RTGCALL(PSSO_BoardInfo_BlitRect, PSSO_BoardInfo_BlitRectDefault, picasso_BlitRect); + RTGCALL(PSSO_BoardInfo_BlitPlanar2Chunky, PSSO_BoardInfo_BlitPlanar2ChunkyDefault, picasso_BlitPlanar2Chunky); + RTGCALL(PSSO_BoardInfo_BlitTemplate, PSSO_BoardInfo_BlitTemplateDefault, picasso_BlitTemplate); + RTGCALL(PSSO_BoardInfo_InvertRect, PSSO_BoardInfo_InvertRectDefault, picasso_InvertRect); + RTGCALL(PSSO_BoardInfo_BlitRectNoMaskComplete, PSSO_BoardInfo_BlitRectNoMaskCompleteDefault, picasso_BlitRectNoMaskComplete); + RTGCALL(PSSO_BoardInfo_BlitPattern, PSSO_BoardInfo_BlitPatternDefault, picasso_BlitPattern); + + RTGCALL2(PSSO_BoardInfo_SetSwitch, picasso_SetSwitch); + RTGCALL2(PSSO_BoardInfo_SetColorArray, picasso_SetColorArray); + RTGCALL2(PSSO_BoardInfo_SetDAC, picasso_SetDAC); + RTGCALL2(PSSO_BoardInfo_SetGC, picasso_SetGC); + RTGCALL2(PSSO_BoardInfo_SetPanning, picasso_SetPanning); + RTGCALL2(PSSO_BoardInfo_SetDisplay, picasso_SetDisplay); + + RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite); + RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition); + RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage); + RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor); + + RTGCALLDEFAULT(PSSO_BoardInfo_ScrollPlanar, PSSO_BoardInfo_ScrollPlanarDefault); + RTGCALLDEFAULT(PSSO_BoardInfo_UpdatePlanar, PSSO_BoardInfo_UpdatePlanarDefault); + RTGCALLDEFAULT(PSSO_BoardInfo_DrawLine, PSSO_BoardInfo_DrawLineDefault); + + RTGCALL2(PSSO_BoardInfo_SetInterrupt, picasso_SetInterrupt); + + write_log ("uaegfx.card magic code: %08X-%08X ABI=%08X\n", start, here (), ABI); + + ptr = here (); + org (old); + return ptr; +} + +void picasso_reset (void) +{ + uaegfx_base = 0; + interrupt_enabled = 0; +} + +void uaegfx_install_code (void) +{ + uaecptr start = here (); + uaegfx_rom = start; + org (inituaegfxfuncs (start, 0)); +} + +#define UAEGFX_VERSION 3 +#define UAEGFX_REVISION 0 + +static uae_u32 REGPARAM2 gfx_open (TrapContext *context) +{ + put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) + 1); + return uaegfx_base; +} +static uae_u32 REGPARAM2 gfx_close (TrapContext *context) +{ + put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) - 1); + return 0; +} +static uae_u32 REGPARAM2 gfx_expunge (TrapContext *context) +{ + return 0; +} + +static uaecptr uaegfx_vblankname; +static void initvblankirq (TrapContext *ctx, uaecptr base) +{ + uaecptr p = base + CARD_VBLANKIRQ; + uaecptr c = base + CARD_VBLANKCODE; + + put_word (p + 8, 0x020a); + put_long (p + 10, uaegfx_vblankname); + put_long (p + 18, c); + + put_word (c, 0x41f9); c += 2; // lea CARD_VBLANKLAG,a0 + put_long (c, base + CARD_VBLANKFLAG); c += 4; + put_word (c, 0x43f9); c += 2; // lea uaegfx_base + PSSO_BoardInfo_SoftInterrupt,a1 + put_long (c, 0); c += 4; + put_word (c, 0x4a10); c += 2; // tst.b (a0) + put_word (c, 0x670a); c += 2; // beq.s label + put_word (c, 0x4210); c += 2; // clr.b (a0) + put_long (c, 0x2c780004); c += 4; // move.l 4.w,a6 + put_long (c, 0x4eaeff4c); c += 4; // jsr Cause(a6) + put_word (c, 0x7000); c += 2; // label: moveq #0,d0 + put_word (c, RTS); c += 2; // rts + m68k_areg (&ctx->regs, 1) = p; + m68k_dreg (&ctx->regs, 0) = 13; /* EXTER */ + CallLib (ctx, get_long (4), -168); /* AddIntServer */ +} + +static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 extrasize) +{ + uae_u32 functable, datatable, a2; + uaecptr openfunc, closefunc, expungefunc; + uaecptr findcardfunc, initcardfunc; + uaecptr exec = get_long (4); + + uaegfx_resid = ds ("UAE Graphics Card 3.1"); + uaegfx_vblankname = ds ("UAE Graphics Card VBLANK"); + + /* Open */ + openfunc = here (); + calltrap (deftrap (gfx_open)); dw (RTS); + + /* Close */ + closefunc = here (); + calltrap (deftrap (gfx_close)); dw (RTS); + + /* Expunge */ + expungefunc = here (); + calltrap (deftrap (gfx_expunge)); dw (RTS); + + /* FindCard */ + findcardfunc = here (); + calltrap (deftrap (picasso_FindCard)); dw (RTS); + + /* InitCard */ + initcardfunc = here (); + calltrap (deftrap (picasso_InitCard)); dw (RTS); + + functable = here (); + dl (openfunc); + dl (closefunc); + dl (expungefunc); + dl (EXPANSION_nullfunc); + dl (findcardfunc); + dl (initcardfunc); + dl (0xFFFFFFFF); /* end of table */ + + 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; + uaegfx_base = CallLib (ctx, exec, -0x54); /* MakeLibrary */ + m68k_areg (&ctx->regs, 2) = a2; + if (!uaegfx_base) + return 0; + m68k_areg (&ctx->regs, 1) = uaegfx_base; + CallLib (ctx, exec, -0x18c); /* AddLibrary */ + m68k_areg (&ctx->regs, 1) = EXPANSION_explibname; + m68k_dreg (&ctx->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); + put_long (uaegfx_base + CARD_RESLIST, uaegfx_base + CARD_SIZEOF); + put_long (uaegfx_base + CARD_RESLISTSIZE, extrasize); + + initvblankirq (ctx, uaegfx_base); + + write_log ("uaegfx.card %d.%d init @%08X\n", UAEGFX_VERSION, UAEGFX_REVISION, uaegfx_base); + return uaegfx_base; +} + +void restore_p96_finish (void) +{ + init_alloc (); + if (uaegfx_rom && boardinfo) + inituaegfxfuncs (uaegfx_rom, boardinfo); + if (set_gc_called) { + init_picasso_screen (); + init_hz_p96 (); + } +} uae_u8 *restore_p96 (uae_u8 *src) { uae_u32 flags; - if (restore_u32 () != 1) + int i; + + if (restore_u32 () != 2) return src; InitPicasso96(); flags = restore_u32(); @@ -2868,6 +3305,7 @@ uae_u8 *restore_p96 (uae_u8 *src) init_picasso_screen_called = 0; set_gc_called = !!(flags & 2); set_panning_called = !!(flags & 4); + interrupt_enabled = !!(flags & 32); changed_prefs.gfxmem_size = restore_u32(); picasso96_state.Address = restore_u32(); picasso96_state.RGBFormat = restore_u32(); @@ -2881,19 +3319,21 @@ uae_u8 *restore_p96 (uae_u8 *src) picasso96_state.GC_Flags = restore_u8(); picasso96_state.BytesPerRow = restore_u16(); picasso96_state.BytesPerPixel = restore_u8(); + uaegfx_base = restore_u32 (); + uaegfx_rom = restore_u32 (); + boardinfo = restore_u32 (); + for (i = 0; i < 4; i++) + restore_u32 (); picasso96_state.HostAddress = NULL; picasso_SetPanningInit(); picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; - if (set_gc_called) { - init_picasso_screen (); - init_hz_p96 (); - } return src; } uae_u8 *save_p96 (int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; + int i; if (currprefs.gfxmem_size == 0) return NULL; @@ -2901,8 +3341,9 @@ uae_u8 *save_p96 (int *len, uae_u8 *dstptr) dstbak = dst = dstptr; else dstbak = dst = (uae_u8 *)malloc (1000); - save_u32 (1); - save_u32 ((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0)); + save_u32 (2); + save_u32 ((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0) | + (interrupt_enabled ? 32 : 0)); save_u32 (currprefs.gfxmem_size); save_u32 (picasso96_state.Address); save_u32 (picasso96_state.RGBFormat); @@ -2916,8 +3357,13 @@ uae_u8 *save_p96 (int *len, uae_u8 *dstptr) save_u8 (picasso96_state.GC_Flags); save_u16 (picasso96_state.BytesPerRow); save_u8 (picasso96_state.BytesPerPixel); + save_u32 (uaegfx_base); + save_u32 (uaegfx_rom); + save_u32 (boardinfo); + for (i = 0; i < 4; i++) + save_u32 (0); *len = dst - dstbak; return dstbak; } -#endif //picasso96 +#endif diff --git a/src/od-pandora/sigsegv_handler.cpp b/src/od-pandora/sigsegv_handler.cpp index 3f0540c4..cd0c2f9b 100644 --- a/src/od-pandora/sigsegv_handler.cpp +++ b/src/od-pandora/sigsegv_handler.cpp @@ -31,8 +31,8 @@ #include "include/memory.h" #include "custom.h" #include "newcpu.h" -#include "comptbl.h" -#include "compemu.h" +#include "jit/comptbl.h" +#include "jit/compemu.h" #include #include diff --git a/src/od-pandora/sysconfig.h b/src/od-pandora/sysconfig.h index dce5ad2d..0af906e8 100644 --- a/src/od-pandora/sysconfig.h +++ b/src/od-pandora/sysconfig.h @@ -31,6 +31,7 @@ /* #define ACTION_REPLAY */ /* Action Replay 1/2/3 support */ #if !defined(RASPBERRY) #define PICASSO96 /* Picasso96 display card emulation */ +#define UAEGFX_INTERNAL /* built-in libs:picasso96/uaegfx.card */ #endif /* #define BSDSOCKET */ /* bsdsocket.library emulation */ /* #define CAPS */ /* CAPS-image support */ diff --git a/src/od-pandora/writelog.cpp b/src/od-pandora/writelog.cpp index 2688b552..8399b355 100644 --- a/src/od-pandora/writelog.cpp +++ b/src/od-pandora/writelog.cpp @@ -7,6 +7,8 @@ */ #include "sysconfig.h" #include "sysdeps.h" +#include "uae.h" + #define WRITE_LOG_BUF_SIZE 4096 FILE *debugfile = NULL; @@ -42,3 +44,19 @@ void write_log (const char *format,...) #endif +void jit_abort (const char *format,...) +{ + static int happened; + int count; + char buffer[WRITE_LOG_BUF_SIZE]; + va_list parms; + va_start (parms, format); + + count = vsnprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms); + write_log (buffer); + va_end (parms); + if (!happened) + gui_message ("JIT: Serious error:\n%s", buffer); + happened = 1; + uae_reset (1); +} diff --git a/src/od-rasp/rasp_gfx.cpp b/src/od-rasp/rasp_gfx.cpp index 0ca001d9..f11cd51a 100644 --- a/src/od-rasp/rasp_gfx.cpp +++ b/src/od-rasp/rasp_gfx.cpp @@ -38,11 +38,10 @@ static int y_size_table[MAX_SCREEN_MODES] = { 400, 480, 480, 768, 864, 960 }; static int red_bits, green_bits, blue_bits; static int red_shift, green_shift, blue_shift; +struct PicassoResolution *DisplayModes; +struct MultiDisplay Displays[MAX_DISPLAYS]; + int screen_is_picasso = 0; -static int picasso_maxw = 0, picasso_maxh = 0; - -static int bitdepth, bit_unit; - static int curr_layer_width = 0; @@ -95,6 +94,7 @@ void vsync_callback(unsigned int a, void* b) int graphics_setup (void) { #ifdef PICASSO96 + picasso_InitResolutions(); InitPicasso96(); #endif bcm_host_init(); @@ -151,6 +151,7 @@ static void CalcPandoraWidth(struct uae_prefs *p) int amigaHeight = p->gfx_size.height; int pandHeight = 480; + p->gfx_resolution = p->gfx_size.width > 600 ? 1 : 0; if(amigaWidth > 600) amigaWidth = amigaWidth / 2; // Hires selected, but we calc in lores int pandWidth = (amigaWidth * pandHeight) / amigaHeight; @@ -206,7 +207,10 @@ static void open_screen(struct uae_prefs *p) #ifdef PICASSO96 else { - snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); + if(picasso_vidinfo.height < 480) + snprintf(layersize, 20, "%dx480", picasso_vidinfo.width); + else + snprintf(layersize, 20, "%dx%d", picasso_vidinfo.width, picasso_vidinfo.height); } #endif @@ -272,7 +276,7 @@ static void open_screen(struct uae_prefs *p) } else { - // 4/3 scrink. + // 4/3 shrink. vc_dispmanx_rect_set( &dst_rect, ((dispmanxdinfo.width * 13)/100) , (dispmanxdinfo.height * 2)/100 , (dispmanxdinfo.width - ((dispmanxdinfo.width * 26)/100)) , @@ -330,12 +334,14 @@ int check_prefs_changed_gfx (void) if(currprefs.gfx_size.height != changed_prefs.gfx_size.height || currprefs.gfx_size.width != changed_prefs.gfx_size.width || - currprefs.gfx_size_fs.width != changed_prefs.gfx_size_fs.width) + currprefs.gfx_size_fs.width != changed_prefs.gfx_size_fs.width || + currprefs.gfx_resolution != changed_prefs.gfx_resolution) { cfgfile_configuration_change(1); currprefs.gfx_size.height = changed_prefs.gfx_size.height; currprefs.gfx_size.width = changed_prefs.gfx_size.width; currprefs.gfx_size_fs.width = changed_prefs.gfx_size_fs.width; + currprefs.gfx_resolution = changed_prefs.gfx_resolution; update_display(&currprefs); changed = 1; } @@ -567,6 +573,19 @@ static int get_display_depth (void) return depth; } +int GetSurfacePixelFormat(void) +{ + int depth = get_display_depth(); + int unit = (depth + 1) & 0xF8; + + return (unit == 8 ? RGBFB_CHUNKY + : depth == 15 && unit == 16 ? RGBFB_R5G5B5 + : depth == 16 && unit == 16 ? RGBFB_R5G6B5 + : unit == 24 ? RGBFB_B8G8R8 + : unit == 32 ? RGBFB_R8G8B8A8 + : RGBFB_NONE); +} + int graphics_init (void) { @@ -706,104 +725,106 @@ static int save_thumb(char *path) #ifdef PICASSO96 -uae_u16 picasso96_pixel_format = RGBFF_CHUNKY; - -void DX_Invalidate (int x, int y, int width, int height) +static int resolution_compare (const void *a, const void *b) { - // We draw everything direct to the frame buffer + struct PicassoResolution *ma = (struct PicassoResolution *)a; + struct PicassoResolution *mb = (struct PicassoResolution *)b; + if (ma->res.width < mb->res.width) + return -1; + if (ma->res.width > mb->res.width) + return 1; + if (ma->res.height < mb->res.height) + return -1; + if (ma->res.height > mb->res.height) + return 1; + return ma->depth - mb->depth; } - -int DX_BitsPerCannon (void) +static void sortmodes (void) { - return 8; -} - -static int palette_update_start = 256; -static int palette_update_end = 0; - -void DX_SetPalette (int start, int count) -{ - if (! screen_is_picasso || picasso96_state.RGBFormat != RGBFB_CHUNKY) - return; - - if (picasso_vidinfo.pixbytes != 1) { - /* This is the case when we're emulating a 256 color display. */ - while (count-- > 0) { - int r = picasso96_state.CLUT[start].Red; - int g = picasso96_state.CLUT[start].Green; - int b = picasso96_state.CLUT[start].Blue; - picasso_vidinfo.clut[start++] = - (doMask256 (r, red_bits, red_shift) - | doMask256 (g, green_bits, green_shift) - | doMask256 (b, blue_bits, blue_shift)); + int i = 0, idx = -1; + int pw = -1, ph = -1; + while (DisplayModes[i].depth >= 0) + i++; + qsort (DisplayModes, i, sizeof (struct PicassoResolution), resolution_compare); + for (i = 0; DisplayModes[i].depth >= 0; i++) { + if (DisplayModes[i].res.height != ph || DisplayModes[i].res.width != pw) { + ph = DisplayModes[i].res.height; + pw = DisplayModes[i].res.width; + idx++; } - notice_screen_contents_lost(); + DisplayModes[i].residx = idx; } } -int DX_Fill (int dstx, int dsty, int width, int height, uae_u32 color, RGBFTYPE rgbtype) +static void modesList (void) { - int result = 0; + int i, j; - SDL_Rect rect = {dstx, dsty, width, height}; - - if (SDL_FillRect (prSDLScreen, &rect, color) == 0) { - DX_Invalidate (dstx, dsty, width, height); - result = 1; + i = 0; + while (DisplayModes[i].depth >= 0) { + write_log ("%d: %s (", i, DisplayModes[i].name); + j = 0; + while (DisplayModes[i].refresh[j] > 0) { + if (j > 0) + write_log (","); + write_log ("%d", DisplayModes[i].refresh[j]); + j++; } - - return result; + write_log (")\n"); + i++; + } } -int DX_FillResolutions (uae_u16 *ppixel_format) +void picasso_InitResolutions (void) { + struct MultiDisplay *md1; int i, count = 0; - int w = 0; - int h = 0; - int emulate_chunky = 0; - - /* In the new scheme of things, this function is called *before* graphics_init. - * Hence, we need to find the display depth ourselves - Rich */ - bitdepth = get_display_depth (); - bit_unit = (bitdepth + 1) & 0xF8; - - picasso_vidinfo.rgbformat = (bit_unit == 8 ? RGBFB_CHUNKY - : bitdepth == 15 && bit_unit == 16 ? RGBFB_R5G5B5 - : bitdepth == 16 && bit_unit == 16 ? RGBFB_R5G6B5 - : bit_unit == 24 ? RGBFB_B8G8R8 - : bit_unit == 32 ? RGBFB_A8R8G8B8 - : RGBFB_NONE); - - *ppixel_format = 1 << picasso_vidinfo.rgbformat; - if (bit_unit == 16 || bit_unit == 32) { - *ppixel_format |= RGBFF_CHUNKY; -// emulate_chunky = 1; - } + char tmp[200]; + int bitdepth; + + Displays[0].primary = 1; + Displays[0].disabled = 0; + Displays[0].rect.left = 0; + Displays[0].rect.top = 0; + Displays[0].rect.right = 800; + Displays[0].rect.bottom = 640; + sprintf (tmp, "%s (%d*%d)", "Display", Displays[0].rect.right, Displays[0].rect.bottom); + Displays[0].name = my_strdup(tmp); + Displays[0].name2 = my_strdup("Display"); + md1 = Displays; + DisplayModes = md1->DisplayModes = (struct PicassoResolution*) xmalloc (sizeof (struct PicassoResolution) * MAX_PICASSO_MODES); for (i = 0; i < MAX_SCREEN_MODES && count < MAX_PICASSO_MODES; i++) { - int j; - if (SDL_VideoModeOK (x_size_table[i], y_size_table[i], bitdepth, SDL_SWSURFACE)) - { - for (j = 0; j <= emulate_chunky && count < MAX_PICASSO_MODES; j++) { - if (x_size_table[i] > picasso_maxw) - picasso_maxw = x_size_table[i]; - if (y_size_table[i] > picasso_maxh) - picasso_maxh = y_size_table[i]; - DisplayModes[count].res.width = x_size_table[i]; - DisplayModes[count].res.height = y_size_table[i]; - DisplayModes[count].depth = j == 1 ? 1 : bit_unit >> 3; - DisplayModes[count].refresh = 50; - - count++; - } + for(bitdepth = 16; bitdepth <= 32; bitdepth += 16) { + int bit_unit = (bitdepth + 1) & 0xF8; + int rgbFormat = (bitdepth == 16 ? RGBFB_R5G6B5 : RGBFB_R8G8B8A8); + int pixelFormat = 1 << rgbFormat; + pixelFormat |= RGBFF_CHUNKY; + + if (SDL_VideoModeOK (x_size_table[i], y_size_table[i], bitdepth, SDL_SWSURFACE)) + { + DisplayModes[count].res.width = x_size_table[i]; + DisplayModes[count].res.height = y_size_table[i]; + DisplayModes[count].depth = bit_unit >> 3; + DisplayModes[count].refresh[0] = 50; + DisplayModes[count].refresh[1] = 60; + DisplayModes[count].refresh[2] = 0; + DisplayModes[count].colormodes = pixelFormat; + sprintf(DisplayModes[count].name, "%dx%d, %d-bit", + DisplayModes[count].res.width, DisplayModes[count].res.height, DisplayModes[count].depth * 8); + + count++; + } } } DisplayModes[count].depth = -1; - - return count; + sortmodes(); + modesList(); + DisplayModes = Displays[0].DisplayModes; } + void gfx_set_picasso_modeinfo (uae_u32 w, uae_u32 h, uae_u32 depth, RGBFTYPE rgbfmt) { depth >>= 3; @@ -835,8 +856,6 @@ void gfx_set_picasso_state (int on) screen_is_picasso = on; open_screen(&currprefs); picasso_vidinfo.rowbytes = prSDLScreen->pitch; - if (on) - DX_SetPalette (0, 256); } uae_u8 *gfx_lock_picasso (void) diff --git a/src/p96_blit.c b/src/p96_blit.c new file mode 100644 index 00000000..52953a8c --- /dev/null +++ b/src/p96_blit.c @@ -0,0 +1,141 @@ + +#if BLT_SIZE == 3 +static void NOINLINE BLT_NAME (unsigned int w, unsigned int h, uae_u8 *src, uae_u8 *dst, int srcpitch, int dstpitch) +{ + uae_u8 *src2 = src; + uae_u8 *dst2 = dst; + uae_u32 *src2_32 = (uae_u32*)src; + uae_u32 *dst2_32 = (uae_u32*)dst; + unsigned int y, x, ww, xxd; +#ifdef BLT_TEMP + uae_u32 tmp; +#endif + w *= BLT_SIZE; + ww = w / 4; + xxd = w - (ww * 4); + for(y = 0; y < h; y++) { + uae_u8 *src_8; + uae_u8 *dst_8; + uae_u32 *src_32 = (uae_u32*)src2; + uae_u32 *dst_32 = (uae_u32*)dst2; + for (x = 0; x < ww; x++) { + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + } + src_8 = (uae_u8*)src_32; + dst_8 = (uae_u8*)dst_32; + for (x = 0; x < xxd; x++) { + BLT_FUNC (src_8, dst_8); + src_8++; + dst_8++; + } + dst2 += dstpitch; + src2 += srcpitch; + } +} +#else +static void NOINLINE BLT_NAME (unsigned int w, unsigned int h, uae_u8 *src, uae_u8 *dst, int srcpitch, int dstpitch) +{ + uae_u8 *src2 = src; + uae_u8 *dst2 = dst; + uae_u32 *src2_32 = (uae_u32*)src; + uae_u32 *dst2_32 = (uae_u32*)dst; + unsigned int y, x, ww, xxd; +#ifdef BLT_TEMP +#if BLT_SIZE == 4 + uae_u32 tmp; +#elif BLT_SIZE == 2 + uae_u16 tmp; +#else + uae_u8 tmp; +#endif +#endif + + if (w < 8 * BLT_MULT) { + ww = w / BLT_MULT; + for(y = 0; y < h; y++) { + uae_u32 *src_32 = (uae_u32*)src2; + uae_u32 *dst_32 = (uae_u32*)dst2; + for (x = 0; x < ww; x++) { + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + } +#if BLT_SIZE == 2 + if (w & 1) { + uae_u16 *src_16 = (uae_u16*)src_32; + uae_u16 *dst_16 = (uae_u16*)dst_32; + BLT_FUNC (src_16, dst_16); + } +#elif BLT_SIZE == 1 + { + int wb = w & 3; + uae_u8 *src_8 = (uae_u8*)src_32; + uae_u8 *dst_8 = (uae_u8*)dst_32; + while (wb--) { + BLT_FUNC (src_8, dst_8); + src_8++; + dst_8++; + } + } +#endif + dst2 += dstpitch; + src2 += srcpitch; + } + return; + } + + ww = w / (8 * BLT_MULT); + xxd = (w - ww * (8 * BLT_MULT)) / BLT_MULT; + for(y = 0; y < h; y++) { + uae_u32 *src_32 = (uae_u32*)src2; + uae_u32 *dst_32 = (uae_u32*)dst2; + for (x = 0; x < ww; x++) { + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + } + for (x = 0; x < xxd; x++) { + BLT_FUNC (src_32, dst_32); + src_32++; dst_32++; + } +#if BLT_SIZE == 2 + if (w & 1) { + uae_u16 *src_16 = (uae_u16*)src_32; + uae_u16 *dst_16 = (uae_u16*)dst_32; + BLT_FUNC (src_16, dst_16); + } +#elif BLT_SIZE == 1 + { + int wb = w & 3; + uae_u8 *src_8 = (uae_u8*)src_32; + uae_u8 *dst_8 = (uae_u8*)dst_32; + while (wb--) { + BLT_FUNC (src_8, dst_8); + src_8++; + dst_8++; + } + } +#endif + dst2 += dstpitch; + src2 += srcpitch; + } +} +#endif +#undef BLT_NAME +#undef BLT_FUNC +#ifdef BLT_TEMP +#undef BLT_TEMP +#endif \ No newline at end of file diff --git a/src/readcpu.cpp b/src/readcpu.cpp index 4d24895c..12b190c8 100644 --- a/src/readcpu.cpp +++ b/src/readcpu.cpp @@ -63,8 +63,8 @@ struct mnemolookup lookuptab[] = { { i_SWAP, "SWAP" }, { i_EXG, "EXG" }, { i_EXT, "EXT" }, - { i_MVMEL, "MVMEL" }, - { i_MVMLE, "MVMLE" }, + { i_MVMEL, "MVMEL", "MOVEM" }, + { i_MVMLE, "MVMLE", "MOVEM" }, { i_TRAP, "TRAP" }, { i_MVR2USP, "MVR2USP" }, { i_MVUSP2R, "MVUSP2R" }, @@ -107,8 +107,8 @@ struct mnemolookup lookuptab[] = { { i_ROXLW, "ROXLW" }, { i_ROXRW, "ROXRW" }, - { i_MOVE2C, "MOVE2C" }, - { i_MOVEC2, "MOVEC2" }, + { i_MOVE2C, "MOVE2C", "MOVEC" }, + { i_MOVEC2, "MOVEC2", "MOVEC" }, { i_CAS, "CAS" }, { i_CAS2, "CAS2" }, { i_MULL, "MULL" }, @@ -149,9 +149,18 @@ struct mnemolookup lookuptab[] = { { i_EMULOP_RETURN, "EMULOP_RETURN" }, { i_EMULOP, "EMULOP" }, - { i_MMUOP30A, "MMUOP30A" }, - { i_MMUOP30B, "MMUOP30B" }, - { i_MMUOP, "MMUOP" }, + { i_MMUOP030, "MMUOP030" }, + { i_PFLUSHN, "PFLUSHN" }, + { i_PFLUSH, "PFLUSH" }, + { i_PFLUSHAN, "PFLUSHAN" }, + { i_PFLUSHA, "PFLUSHA" }, + + { i_PLPAR, "PLPAR" }, + { i_PLPAW, "PLPAW" }, + { i_PTESTR, "PTESTR" }, + { i_PTESTW, "PTESTW" }, + + { i_LPSTOP, "LPSTOP" }, {i_NATFEAT_ID, "NATFEAT_ID" }, {i_NATFEAT_CALL, "NATFEAT_CALL" }, @@ -413,6 +422,7 @@ static void build_insn (int insn) switch (opcstr[pos]) { case 'p': srcmode = Apdi; pos++; break; case 'P': srcmode = Aipi; pos++; break; + case 'a': srcmode = Aind; pos++; break; } break; #if 0 @@ -767,7 +777,8 @@ static void build_insn (int insn) table68k[opc].mnemo = lookuptab[find].mnemo; break; } - if (strlen(lookuptab[find].name) == 0) abort(); + if (strlen(lookuptab[find].name) == 0) + abort(); } } else { diff --git a/src/savestate.cpp b/src/savestate.cpp index 7e73ca67..6a37cdbe 100644 --- a/src/savestate.cpp +++ b/src/savestate.cpp @@ -61,7 +61,7 @@ int savestate_state = 0; struct zfile *savestate_file; -static int savestate_docompress, savestate_specialdump; +static int savestate_docompress, savestate_specialdump, savestate_nodialogs; char savestate_fname[MAX_DPATH]={ '/', 't', 'm', 'p', '/', 'n', 'u', 'l', 'l', '.', 'a', 's', 'f', '\0' @@ -212,8 +212,10 @@ static void save_chunk (struct zfile *f, uae_u8 *chunk, size_t len, char *name, /* chunk data */ if (compress) { int tmplen = len; + size_t opos; dst = &tmp[0]; save_u32 (len); + opos = zfile_ftell (f); zfile_fwrite (&tmp[0], 1, 4, f); len = zfile_zcompress (f, chunk, len); if (len > 0) { @@ -225,7 +227,7 @@ static void save_chunk (struct zfile *f, uae_u8 *chunk, size_t len, char *name, } else { len = tmplen; compress = 0; - zfile_fseek (f, -8, SEEK_CUR); + zfile_fseek (f, opos, SEEK_SET); dst = &tmp[0]; save_u32 (flags); zfile_fwrite (&tmp[0], 1, 4, f); @@ -314,6 +316,8 @@ void restore_ram (size_t filepos, uae_u8 *memory) int size, fullsize; uae_u32 flags; + if (filepos == 0 || memory == NULL) + return; zfile_fseek (savestate_file, filepos, SEEK_SET); zfile_fread (tmp, 1, sizeof(tmp), savestate_file); size = restore_u32(); @@ -354,13 +358,14 @@ static void restore_header (uae_u8 *src) /* restore all subsystems */ -void restore_state (char *filename) +void restore_state (const char *filename) { struct zfile *f; uae_u8 *chunk,*end; char name[5]; size_t len, totallen; size_t filepos, filesize; + int z3num; chunk = 0; f = zfile_fopen (filename, "rb"); @@ -382,6 +387,7 @@ void restore_state (char *filename) changed_prefs.chipmem_size = 0; changed_prefs.fastmem_size = 0; changed_prefs.z3fastmem_size = 0; + z3num = 0; savestate_state = STATE_RESTORE; for (;;) { name[0] = 0; @@ -401,7 +407,7 @@ void restore_state (char *filename) restore_fram (totallen, filepos); continue; } else if (!strcmp (name, "ZRAM")) { - restore_zram (totallen, filepos); + restore_zram (totallen, filepos, z3num++); continue; } else if (!strcmp (name, "BORO")) { restore_bootrom (totallen, filepos); @@ -484,13 +490,19 @@ void restore_state (char *filename) end = chunk + len; write_log ("unknown chunk '%s' size %d bytes\n", name, len); } - if (len != end - chunk) + if (end == NULL) + write_log ("Chunk '%s', size %d bytes was not accepted!\n", + name, len); + else if (len != end - chunk) write_log ("Chunk '%s' total size %d bytes but read %d bytes!\n", name, len, end - chunk); xfree (chunk); } restore_disk_finish(); restore_blitter_finish(); +#ifdef PICASSO96 + restore_p96_finish (); +#endif return; error: @@ -513,11 +525,19 @@ void savestate_restore_finish (void) } /* 1=compressed,2=not compressed,3=ram dump,4=audio dump */ -void savestate_initsave (char *filename, int mode) +void savestate_initsave (const char *filename, int mode, int nodialogs) { + if (filename == NULL) { + savestate_fname[0] = 0; + savestate_docompress = 0; + savestate_specialdump = 0; + savestate_nodialogs = 0; + return; + } strcpy (savestate_fname, filename); savestate_docompress = (mode == 1) ? 1 : 0; savestate_specialdump = (mode == 3) ? 1 : (mode == 4) ? 2 : 0; + savestate_nodialogs = nodialogs; } static void save_rams (struct zfile *f, int comp) @@ -526,28 +546,28 @@ static void save_rams (struct zfile *f, int comp) int len; dst = save_cram (&len); - save_chunk (f, dst, len, (char *)"CRAM", comp); + save_chunk (f, dst, len, "CRAM", comp); dst = save_bram (&len); - save_chunk (f, dst, len, (char *)"BRAM", comp); + save_chunk (f, dst, len, "BRAM", comp); #ifdef AUTOCONFIG dst = save_fram (&len); - save_chunk (f, dst, len, (char *)"FRAM", comp); - dst = save_zram (&len); - save_chunk (f, dst, len, (char *)"ZRAM", comp); + save_chunk (f, dst, len, "FRAM", comp); + dst = save_zram (&len, 0); + save_chunk (f, dst, len, "ZRAM", comp); dst = save_bootrom (&len); - save_chunk (f, dst, len, (char *)"BORO", comp); + save_chunk (f, dst, len, "BORO", comp); #endif #ifdef PICASSO96 dst = save_p96 (&len, 0); - save_chunk (f, dst, len, (char *)"P96 ", 0); + save_chunk (f, dst, len, "P96 ", 0); dst = save_pram (&len); - save_chunk (f, dst, len, (char *)"PRAM", comp); + save_chunk (f, dst, len, "PRAM", comp); #endif } /* Save all subsystems */ -int save_state (char *filename, const char *description) +int save_state (const char *filename, const char *description) { uae_u8 endhunk[] = { 'E', 'N', 'D', ' ', 0, 0, 0, 8 }; uae_u8 header[1000]; @@ -558,13 +578,14 @@ int save_state (char *filename, const char *description) char name[5]; int comp = savestate_docompress; - if (!savestate_specialdump) { + if (!savestate_specialdump && !savestate_nodialogs) { state_incompatible_warn(); if (!save_filesys_cando()) { gui_message("Filesystem active. Try again later"); return -1; } } + savestate_nodialogs = 0; custom_prepare_savestate (); f = zfile_fopen (filename, "w+b"); if (!f) @@ -583,14 +604,14 @@ int save_state (char *filename, const char *description) snprintf (tmp, 32, "%d.%d.%d", UAEMAJOR, UAEMINOR, UAESUBREV); save_string (tmp); save_string (description); - save_chunk (f, header, dst-header, (char *)"ASF ", 0); + save_chunk (f, header, dst-header, "ASF ", 0); dst = save_cpu (&len, 0); - save_chunk (f, dst, len, (char *)"CPU ", 0); + save_chunk (f, dst, len, "CPU ", 0); xfree (dst); #ifdef FPUEMU dst = save_fpu (&len, 0); - save_chunk (f, dst, len, (char *)"FPU ", 0); + save_chunk (f, dst, len, "FPU ", 0); xfree (dst); #endif @@ -604,22 +625,22 @@ int save_state (char *filename, const char *description) } } dst = save_floppy (&len, 0); - save_chunk (f, dst, len, (char *)"DISK", 0); + save_chunk (f, dst, len, "DISK", 0); xfree (dst); dst = save_blitter (&len, 0); - save_chunk (f, dst, len, (char *)"BLIT", 0); + save_chunk (f, dst, len, "BLIT", 0); xfree (dst); dst = save_custom (&len, 0, 0); - save_chunk (f, dst, len, (char *)"CHIP", 0); + save_chunk (f, dst, len, "CHIP", 0); xfree (dst); dst = save_custom_agacolors (&len, 0); - save_chunk (f, dst, len, (char *)"AGAC", 0); + save_chunk (f, dst, len, "AGAC", 0); xfree (dst); - strcpy (name, (char *)"SPRx"); + strcpy (name, "SPRx"); for (i = 0; i < 8; i++) { dst = save_custom_sprite (i, &len, 0); name[3] = i + '0'; @@ -627,7 +648,7 @@ int save_state (char *filename, const char *description) xfree (dst); } - strcpy (name, (char *)"AUDx"); + strcpy (name, "AUDx"); for (i = 0; i < 4; i++) { dst = save_audio (i, &len, 0); name[3] = i + '0'; @@ -636,20 +657,20 @@ int save_state (char *filename, const char *description) } dst = save_cia (0, &len, 0); - save_chunk (f, dst, len, (char *)"CIAA", 0); + save_chunk (f, dst, len, "CIAA", 0); xfree (dst); dst = save_cia (1, &len, 0); - save_chunk (f, dst, len, (char *)"CIAB", 0); + save_chunk (f, dst, len, "CIAB", 0); xfree (dst); dst = save_keyboard (&len); - save_chunk (f, dst, len, (char *)"KEYB", 0); + save_chunk (f, dst, len, "KEYB", 0); xfree (dst); #ifdef AUTOCONFIG dst = save_expansion (&len, 0); - save_chunk (f, dst, len, (char *)"EXPA", 0); + save_chunk (f, dst, len, "EXPA", 0); xfree (dst); #endif @@ -659,18 +680,18 @@ int save_state (char *filename, const char *description) do { if (!dst) break; - save_chunk (f, dst, len, (char *)"ROM ", 0); + save_chunk (f, dst, len, "ROM ", 0); xfree (dst); } while ((dst = save_rom (0, &len, 0))); #ifdef FILESYS dst = save_filesys_common (&len); if (dst) { - save_chunk (f, dst, len, (char *)"FSYC", 0); + save_chunk (f, dst, len, "FSYC", 0); for (i = 0; i < nr_units (); i++) { dst = save_filesys (i, &len); if (dst) { - save_chunk (f, dst, len, (char *)"FSYS", 0); + save_chunk (f, dst, len, "FSYS", 0); xfree (dst); } } diff --git a/src/scsi-none.cpp b/src/scsi-none.cpp deleted file mode 100644 index 96f199db..00000000 --- a/src/scsi-none.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "sysconfig.h" -#include "sysdeps.h" - -#include "scsidev.h" - -uaecptr scsidev_startup (uaecptr resaddr) { return resaddr; } -void scsidev_install (void) {} -void scsidev_reset (void) {} -void scsidev_start_threads (void) {} - diff --git a/src/sd-pandora/sound.cpp b/src/sd-pandora/sound.cpp index 986ca290..eb76a77b 100644 --- a/src/sd-pandora/sound.cpp +++ b/src/sd-pandora/sound.cpp @@ -34,7 +34,7 @@ uae_u16 *finish_sndbuff = sndbuffer[0] + SNDBUFFER_LEN*2; static int have_sound = 0; static int lastfreq; -extern unsigned int new_beamcon0; +extern uae_u16 new_beamcon0; static __inline__ void sound_default_evtime(int freq) { @@ -292,3 +292,7 @@ void reset_sound (void) memset(sndbuffer, 0, 2 * 4 * (SNDBUFFER_LEN+32)*DEFAULT_SOUND_CHANNELS); } + +void sound_volume (int dir) +{ +} diff --git a/src/sd-pandora/sound.h b/src/sd-pandora/sound.h index fd58adaa..5e9c255b 100644 --- a/src/sd-pandora/sound.h +++ b/src/sd-pandora/sound.h @@ -27,6 +27,7 @@ extern int setup_sound (void); extern void resume_sound (void); extern void pause_sound (void); extern void reset_sound (void); +extern void sound_volume (int); #define check_sound_buffers() { if (sndbufpt >= finish_sndbuff) finish_sound_buffer (); } diff --git a/src/sd-sdl/sound_sdl_new.cpp b/src/sd-sdl/sound_sdl_new.cpp index 0d037418..957e1d50 100644 --- a/src/sd-sdl/sound_sdl_new.cpp +++ b/src/sd-sdl/sound_sdl_new.cpp @@ -78,7 +78,7 @@ void restart_sound_buffer(void) { } static int have_sound = 0; static int lastfreq; -extern unsigned int new_beamcon0; +extern uae_u16 new_beamcon0; void sound_default_evtime(int freq) { @@ -436,5 +436,10 @@ void reset_sound (void) memset(sndbuffer, 0, 2 * 4 * (SNDBUFFER_LEN+32)*DEFAULT_SOUND_CHANNELS); } + +void sound_volume (int dir) +{ +} + #endif diff --git a/src/table68k b/src/table68k index 0c289ff8..33ddb990 100644 --- a/src/table68k +++ b/src/table68k @@ -26,6 +26,7 @@ % % Arp: --> -(Ar) % ArP: --> (Ar)+ +% Ara: --> (Ar) % L: --> (xxx.L) % % Fields on a line: @@ -129,7 +130,7 @@ 0100 1000 10dd dDDD:00:-----:-----:--:02: MVMLE.W #1,d[!Dreg,Areg,Aipi] 0100 1000 11dd dDDD:00:-NZ00:-----:--:30: EXT.L d[Dreg] 0100 1000 11dd dDDD:00:-----:-----:--:02: MVMLE.L #1,d[!Dreg,Areg,Aipi] -0100 1001 11dd dDDD:00:-NZ00:-----:--:30: EXT.B d[Dreg] +0100 1001 11dd dDDD:20:-NZ00:-----:--:30: EXT.B d[Dreg] 0100 1010 zzss sSSS:00:-NZ00:-----:--:10: TST.z s 0100 1010 11dd dDDD:00:-NZ00:-----:--:30: TAS.B d[!Areg] 0100 1010 1111 1100:00:-----:-----:T-:00: ILLEGAL @@ -153,7 +154,7 @@ 0100 1110 0111 1010:12:-----:-----:T-:10: MOVEC2 #1 0100 1110 0111 1011:12:-----:-----:T-:10: MOVE2C #1 0100 1110 10ss sSSS:00://///://///:-J:80: JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd] -0100 rrr1 00ss sSSS:00:-N???:-----:T-:11: CHK.L s[!Areg],Dr +0100 rrr1 00ss sSSS:20:-N???:-----:T-:11: CHK.L s[!Areg],Dr 0100 rrr1 10ss sSSS:00:-N???:-----:T-:11: CHK.W s[!Areg],Dr 0100 1110 11ss sSSS:00://///://///:-J:80: JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd] 0100 rrr1 11ss sSSS:00:-----:-----:--:02: LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar @@ -262,21 +263,30 @@ 1111 0011 01ss sSSS:22:-----:-----:--:10: FRESTORE s[!Dreg,Areg,Apdi,Immd] % 68030 MMU (allowed addressing modes not checked!) -1111 0000 00ss sSSS:30:?????:?????:T-:11: MMUOP30A s[!Immd],#1 -1111 1000 00ss sSSS:30:?????:?????:T-:11: MMUOP30B s[!Immd] -% Misc MMU -1111 0101 iiii iSSS:40:?????:?????:T-:11: MMUOP #i,s +1111 0000 00ss sSSS:32:?????:?????:T-:11: MMUOP030 s[!Immd],#1 -% 68040 instructions +% 68040/68060 instructions 1111 0100 pp00 1rrr:42:-----:-----:T-:02: CINVL #p,Ar 1111 0100 pp01 0rrr:42:-----:-----:T-:02: CINVP #p,Ar 1111 0100 pp01 1rrr:42:-----:-----:T-:00: CINVA #p 1111 0100 pp10 1rrr:42:-----:-----:T-:02: CPUSHL #p,Ar 1111 0100 pp11 0rrr:42:-----:-----:T-:02: CPUSHP #p,Ar 1111 0100 pp11 1rrr:42:-----:-----:T-:00: CPUSHA #p +1111 0101 0000 0rrr:42:-----:-----:T-:00: PFLUSHN Ara +1111 0101 0000 1rrr:42:-----:-----:T-:00: PFLUSH Ara +1111 0101 0001 0rrr:42:-----:-----:T-:00: PFLUSHAN Ara +1111 0101 0001 1rrr:42:-----:-----:T-:00: PFLUSHA Ara +1111 0101 0100 1rrr:42:-----:-----:T-:00: PTESTR Ara +1111 0101 0110 1rrr:42:-----:-----:T-:00: PTESTW Ara + % destination register number is encoded in the following word 1111 0110 0010 0rrr:40:-----:-----:--:12: MOVE16 ArP,AxP 1111 0110 00ss sSSS:40:-----:-----:--:12: MOVE16 s[Dreg-Aipi],Al 1111 0110 00dd dDDD:40:-----:-----:--:12: MOVE16 Al,d[Areg-Aipi] 1111 0110 00ss sSSS:40:-----:-----:--:12: MOVE16 s[Aind],Al 1111 0110 00dd dDDD:40:-----:-----:--:12: MOVE16 Al,d[Aipi-Aind] + +% 68060 +1111 1000 0000 0000:52:?????:?????:T-:10: LPSTOP #1 +1111 0101 1000 1rrr:52:-----:-----:T-:00: PLPAR Ara +1111 0101 1100 1rrr:52:-----:-----:T-:00: PLPAW Ara diff --git a/src/table68k.cpp b/src/table68k.cpp deleted file mode 100644 index 569a4bfb..00000000 --- a/src/table68k.cpp +++ /dev/null @@ -1,363 +0,0 @@ -#include "sysconfig.h" -#include "sysdeps.h" -#include "readcpu.h" -struct instr_def defs68k[] = { -/* ORSR.B */ -{0x003C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,"ORSR.B #1"}, -/* ORSR.W */ -{0x007C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"ORSR.W #1"}, -/* CHK2.z */ -{0x00C0, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xF9C0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"CHK2.z #1,s[!Dreg,Areg,Aipi,Apdi,Immd]"}, -/* OR.z */ -{0x0000, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"OR.z #z,d[!Areg]"}, -/* ANDSR.B */ -{0x023C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,"ANDSR.B #1"}, -/* ANDSR.W */ -{0x027C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"ANDSR.W #1"}, -/* AND.z */ -{0x0200, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"AND.z #z,d[!Areg]"}, -/* SUB.z */ -{0x0400, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"SUB.z #z,d[!Areg]"}, -/* ADD.z */ -{0x0600, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ADD.z #z,d[!Areg]"}, -/* CALLM */ -{0x06C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"CALLM s[!Dreg,Areg,Aipi,Apdi,Immd]"}, -/* RTM */ -{0x06C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"RTM s[Dreg,Areg]"}, -/* BTST */ -{0x0800, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},17,"BTST #1,s[!Areg]"}, -/* BCHG */ -{0x0840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BCHG #1,s[!Areg,Immd]"}, -/* BCLR */ -{0x0880, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BCLR #1,s[!Areg,Immd]"}, -/* BSET */ -{0x08C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BSET #1,s[!Areg,Immd]"}, -/* EORSR.B */ -{0x0A3C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,"EORSR.B #1"}, -/* EORSR.W */ -{0x0A7C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"EORSR.W #1"}, -/* EOR.z */ -{0x0A00, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"EOR.z #z,d[!Areg]"}, -/* CMP.z */ -{0x0C00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,"CMP.z #z,s[!Areg,Immd]"}, -/* CAS.B */ -{0x0AC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"CAS.B #1,s[!Dreg,Areg,Immd,PC8r,PC16]"}, -/* CAS.W */ -{0x0CC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"CAS.W #1,s[!Dreg,Areg,Immd,PC8r,PC16]"}, -/* CAS2.W */ -{0x0CFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"CAS2.W #2"}, -/* MOVES.z */ -{0x0E00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,2,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]"}, -/* CAS.L */ -{0x0EC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"CAS.L #1,s[!Dreg,Areg,Immd,PC8r,PC16]"}, -/* CAS2.L */ -{0x0EFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"CAS2.L #2"}, -/* MVPMR.W */ -{0x0100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MVPMR.W d[Areg-Ad16],Dr"}, -/* MVPMR.L */ -{0x0140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MVPMR.L d[Areg-Ad16],Dr"}, -/* MVPRM.W */ -{0x0180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MVPRM.W Dr,d[Areg-Ad16]"}, -/* MVPRM.L */ -{0x01C0, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MVPRM.L Dr,d[Areg-Ad16]"}, -/* BTST */ -{0x0100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},17,"BTST Dr,s[!Areg]"}, -/* BCHG */ -{0x0140, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BCHG Dr,s[!Areg,Immd]"}, -/* BCLR */ -{0x0180, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BCLR Dr,s[!Areg,Immd]"}, -/* BSET */ -{0x01C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,"BSET Dr,s[!Areg,Immd]"}, -/* MOVE.B */ -{0x1000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,"MOVE.B s,d[!Areg]"}, -/* MOVEA.L */ -{0x2000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVEA.L s,d[Areg]"}, -/* MOVE.L */ -{0x2000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,"MOVE.L s,d[!Areg]"}, -/* MOVEA.W */ -{0x3000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVEA.W s,d[Areg]"}, -/* MOVE.W */ -{0x3000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,"MOVE.W s,d[!Areg]"}, -/* NEGX.z */ -{0x4000, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},48,"NEGX.z d[!Areg]"}, -/* MVSR2.W */ -{0x40C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,1,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"MVSR2.W d[!Areg]"}, -/* CLR.z */ -{0x4200, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,2},{1,3},{1,2},{1,2}},32,"CLR.z d[!Areg]"}, -/* MVSR2.B */ -{0x42C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,1,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"MVSR2.B d[!Areg]"}, -/* NEG.z */ -{0x4400, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},48,"NEG.z d[!Areg]"}, -/* MV2SR.B */ -{0x44C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},16,"MV2SR.B s[!Areg]"}, -/* NOT.z */ -{0x4600, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,"NOT.z d[!Areg]"}, -/* MV2SR.W */ -{0x46C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"MV2SR.W s[!Areg]"}, -/* LINK.L */ -{0x4808, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,2,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},49,"LINK.L Ar,#2"}, -/* NBCD.B */ -{0x4800, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{0,0},{1,5},{0,0},{1,5},{1,0}},48,"NBCD.B d[!Areg]"}, -/* BKPT */ -{0x4848, 3,{ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"BKPT #k"}, -/* SWAP.W */ -{0x4840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,"SWAP.W s[Dreg]"}, -/* PEA.L */ -{0x4840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"PEA.L s[!Dreg,Areg,Aipi,Apdi,Immd]"}, -/* EXT.W */ -{0x4880, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,"EXT.W d[Dreg]"}, -/* MVMLE.W */ -{0x4880, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"MVMLE.W #1,d[!Dreg,Areg,Aipi]"}, -/* EXT.L */ -{0x48C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,"EXT.L d[Dreg]"}, -/* MVMLE.L */ -{0x48C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"MVMLE.L #1,d[!Dreg,Areg,Aipi]"}, -/* EXT.B */ -{0x49C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,"EXT.B d[Dreg]"}, -/* TST.z */ -{0x4A00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},16,"TST.z s"}, -/* TAS.B */ -{0x4AC0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},48,"TAS.B d[!Areg]"}, -/* ILLEGAL */ -{0x4AFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,"ILLEGAL"}, -/* MULL.L */ -{0x4C00, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},19,"MULL.L #1,s[!Areg]"}, -/* DIVL.L */ -{0x4C40, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"DIVL.L #1,s[!Areg]"}, -/* MVMEL.W */ -{0x4C80, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 1,"MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]"}, -/* MVMEL.L */ -{0x4CC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 1,"MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]"}, -/* TRAP */ -{0x4E40, 4,{ 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF0,0,0,{{0,1},{0,1},{0,1},{0,1},{0,1}},16,"TRAP #J"}, -/* LINK.W */ -{0x4E50, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},49,"LINK.W Ar,#1"}, -/* UNLK.L */ -{0x4E58, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},48,"UNLK.L Ar"}, -/* MVR2USP.L */ -{0x4E60, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}},16,"MVR2USP.L Ar"}, -/* MVUSP2R.L */ -{0x4E68, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}},32,"MVUSP2R.L Ar"}, -/* RESET */ -{0x4E70, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"RESET"}, -/* NOP */ -{0x4E71, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"NOP"}, -/* STOP */ -{0x4E72, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{1,0},{1,0},{1,0},{1,0},{1,0}},16,"STOP #1"}, -/* RTE */ -{0x4E73, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,2,{{1,0},{1,0},{1,0},{1,0},{1,0}}, 0,"RTE"}, -/* RTD */ -{0x4E74, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"RTD #1"}, -/* RTS */ -{0x4E75, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"RTS"}, -/* TRAPV */ -{0x4E76, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{0,1},{0,1},{0,1},{0,1},{0,1}}, 0,"TRAPV"}, -/* RTR */ -{0x4E77, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}}, 0,"RTR"}, -/* MOVEC2 */ -{0x4E7A, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,1,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"MOVEC2 #1"}, -/* MOVE2C */ -{0x4E7B, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,1,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"MOVE2C #1"}, -/* JSR.L */ -{0x4E80, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},128,"JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd]"}, -/* CHK.L */ -{0x4100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"CHK.L s[!Areg],Dr"}, -/* CHK.W */ -{0x4180, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"CHK.W s[!Areg],Dr"}, -/* JMP.L */ -{0x4EC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},128,"JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd]"}, -/* LEA.L */ -{0x41C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar"}, -/* ADDA.W */ -{0x5040, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"ADDA.W #j,d[Areg]"}, -/* ADDA.L */ -{0x5080, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"ADDA.L #j,d[Areg]"}, -/* ADD.z */ -{0x5000,11,{ 7, 7, 7,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ADD.z #j,d[!Areg]"}, -/* SUBA.W */ -{0x5140, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"SUBA.W #j,d[Areg]"}, -/* SUBA.L */ -{0x5180, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"SUBA.L #j,d[Areg]"}, -/* SUB.z */ -{0x5100,11,{ 7, 7, 7,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"SUB.z #j,d[!Areg]"}, -/* DBcc.W */ -{0x50C8, 7,{ 2, 2, 2, 2,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0F8,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},49,"DBcc.W Dr,#1"}, -/* Scc.B */ -{0x50C0,10,{ 2, 2, 2, 2,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0},0xF0C0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},32,"Scc.B d[!Areg]"}, -/* TRAPcc */ -{0x50FA, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"TRAPcc #1"}, -/* TRAPcc */ -{0x50FB, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"TRAPcc #2"}, -/* TRAPcc */ -{0x50FC, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,"TRAPcc"}, -/* BSR.W */ -{0x6100, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,"BSR.W #1"}, -/* BSR.B */ -{0x6100, 8,{ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,"BSR.B #i"}, -/* BSR.L */ -{0x61FF, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,"BSR.L #2"}, -/* Bcc.W */ -{0x6000, 4,{ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,"Bcc.W #1"}, -/* Bcc.B */ -{0x6000,12,{ 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0},0xF000,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,"Bcc.B #i"}, -/* Bcc.L */ -{0x60FF, 4,{ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,"Bcc.L #2"}, -/* MOVE.L */ -{0x7000,11,{15,15,15, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,"MOVE.L #i,Dr"}, -/* OR.z */ -{0x8000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"OR.z s[!Areg],Dr"}, -/* DIVU.W */ -{0x80C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"DIVU.W s[!Areg],Dr"}, -/* SBCD.B */ -{0x8100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,"SBCD.B d[Dreg],Dr"}, -/* SBCD.B */ -{0x8100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,"SBCD.B d[Areg-Apdi],Arp"}, -/* OR.z */ -{0x8100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"OR.z Dr,d[!Areg,Dreg]"}, -/* PACK */ -{0x8140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,"PACK d[Dreg],Dr"}, -/* PACK */ -{0x8140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,"PACK d[Areg-Apdi],Arp"}, -/* UNPK */ -{0x8180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,"UNPK d[Dreg],Dr"}, -/* UNPK */ -{0x8180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,"UNPK d[Areg-Apdi],Arp"}, -/* DIVS.W */ -{0x81C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"DIVS.W s[!Areg],Dr"}, -/* SUB.z */ -{0x9000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"SUB.z s,Dr"}, -/* SUBA.W */ -{0x90C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"SUBA.W s,Ar"}, -/* SUBX.z */ -{0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,"SUBX.z d[Dreg],Dr"}, -/* SUBX.z */ -{0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,"SUBX.z d[Areg-Apdi],Arp"}, -/* SUB.z */ -{0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"SUB.z Dr,d[!Areg,Dreg]"}, -/* SUBA.L */ -{0x91C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"SUBA.L s,Ar"}, -/* CMP.z */ -{0xB000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,"CMP.z s,Dr"}, -/* CMPA.W */ -{0xB0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,"CMPA.W s,Ar"}, -/* CMPA.L */ -{0xB1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,"CMPA.L s,Ar"}, -/* CMPM.z */ -{0xB100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,"CMPM.z d[Areg-Aipi],ArP"}, -/* EOR.z */ -{0xB100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"EOR.z Dr,d[!Areg]"}, -/* AND.z */ -{0xC000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"AND.z s[!Areg],Dr"}, -/* MULU.W */ -{0xC0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"MULU.W s[!Areg],Dr"}, -/* ABCD.B */ -{0xC100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,"ABCD.B d[Dreg],Dr"}, -/* ABCD.B */ -{0xC100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,"ABCD.B d[Areg-Apdi],Arp"}, -/* AND.z */ -{0xC100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"AND.z Dr,d[!Areg,Dreg]"}, -/* EXG.L */ -{0xC140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,"EXG.L Dr,d[Dreg]"}, -/* EXG.L */ -{0xC140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,"EXG.L Ar,d[Areg]"}, -/* EXG.L */ -{0xC180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,"EXG.L Dr,d[Areg]"}, -/* MULS.W */ -{0xC1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,"MULS.W s[!Areg],Dr"}, -/* ADD.z */ -{0xD000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ADD.z s,Dr"}, -/* ADDA.W */ -{0xD0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"ADDA.W s,Ar"}, -/* ADDX.z */ -{0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,"ADDX.z d[Dreg],Dr"}, -/* ADDX.z */ -{0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,"ADDX.z d[Areg-Apdi],Arp"}, -/* ADD.z */ -{0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ADD.z Dr,d[!Areg,Dreg]"}, -/* ADDA.L */ -{0xD1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,"ADDA.L s,Ar"}, -/* ASf.z */ -{0xE000, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ASf.z #j,DR"}, -/* LSf.z */ -{0xE008, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{1,0},{1,0},{1,0},{1,2},{1,0}},19,"LSf.z #j,DR"}, -/* ROXf.z */ -{0xE010, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,"ROXf.z #j,DR"}, -/* ROf.z */ -{0xE018, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,"ROf.z #j,DR"}, -/* ASf.z */ -{0xE020, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{0,0},{1,0},{1,0},{1,0},{1,0}},19,"ASf.z Dr,DR"}, -/* LSf.z */ -{0xE028, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,"LSf.z Dr,DR"}, -/* ROXf.z */ -{0xE030, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,"ROXf.z Dr,DR"}, -/* ROf.z */ -{0xE038, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,"ROf.z Dr,DR"}, -/* ASfW.W */ -{0xE0C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,"ASfW.W d[!Dreg,Areg]"}, -/* LSfW.W */ -{0xE2C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,{{1,0},{1,0},{1,0},{1,2},{1,0}},19,"LSfW.W d[!Dreg,Areg]"}, -/* ROXfW.W */ -{0xE4C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,"ROXfW.W d[!Dreg,Areg]"}, -/* ROfW.W */ -{0xE6C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,"ROfW.W d[!Dreg,Areg]"}, -/* BFTST */ -{0xE8C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"BFTST #1,s[!Areg,Apdi,Aipi,Immd]"}, -/* BFEXTU */ -{0xE9C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"BFEXTU #1,s[!Areg,Apdi,Aipi,Immd]"}, -/* BFCHG */ -{0xEAC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"BFCHG #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]"}, -/* BFEXTS */ -{0xEBC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"BFEXTS #1,s[!Areg,Apdi,Aipi,Immd]"}, -/* BFCLR */ -{0xECC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"BFCLR #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]"}, -/* BFFFO */ -{0xEDC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"BFFFO #1,s[!Areg,Apdi,Aipi,Immd]"}, -/* BFSET */ -{0xEEC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"BFSET #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]"}, -/* BFINS */ -{0xEFC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,"BFINS #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]"}, -/* FPP */ -{0xF200, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"FPP #1,s"}, -/* FDBcc */ -{0xF240, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"FDBcc #1,s[Areg-Dreg]"}, -/* FScc */ -{0xF240, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"FScc #1,s[!Areg,Immd,PC8r,PC16]"}, -/* FTRAPcc */ -{0xF27A, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"FTRAPcc #1"}, -/* FTRAPcc */ -{0xF27B, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"FTRAPcc #2"}, -/* FTRAPcc */ -{0xF27C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,"FTRAPcc"}, -/* FBcc */ -{0xF280, 6,{10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"FBcc #K,#1"}, -/* FBcc */ -{0xF2C0, 6,{10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"FBcc #K,#2"}, -/* FSAVE */ -{0xF300, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},32,"FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]"}, -/* FRESTORE */ -{0xF340, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,"FRESTORE s[!Dreg,Areg,Apdi,Immd]"}, -/* MMUOP */ -{0xF500, 8,{ 5, 5, 5, 5, 5,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,4,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,"MMUOP #i,s"}, -/* CINVL */ -{0xF408, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"CINVL #p,Ar"}, -/* CINVP */ -{0xF410, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"CINVP #p,Ar"}, -/* CINVA */ -{0xF418, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"CINVA #p"}, -/* CPUSHL */ -{0xF428, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"CPUSHL #p,Ar"}, -/* CPUSHP */ -{0xF430, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,"CPUSHP #p,Ar"}, -/* CPUSHA */ -{0xF438, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,"CPUSHA #p"}, -/* MOVE16 */ -{0xF620, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVE16 ArP,AxP"}, -/* MOVE16 */ -{0xF600, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVE16 s[Dreg-Aipi],L"}, -/* MOVE16 */ -{0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVE16 L,d[Areg-Aipi]"}, -/* MOVE16 */ -{0xF600, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVE16 s[Aind],L"}, -/* MOVE16 */ -{0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,"MOVE16 L,d[Aipi-Aind]"}}; -int n_defs68k = 179; diff --git a/src/td-sdl/thread.h b/src/td-sdl/thread.h index 0c61041b..933e9e9d 100644 --- a/src/td-sdl/thread.h +++ b/src/td-sdl/thread.h @@ -30,16 +30,20 @@ typedef SDL_Thread *uae_thread_id; STATIC_INLINE int uae_start_thread (const char *name, void *(*f) (void *), void *arg, uae_thread_id *foo) { - *foo = SDL_CreateThread ((int (*)(void *))f, arg); - write_log("uae_start_thread: %s, id=%d\n", name, *foo); - return *foo == 0; + uae_thread_id id = SDL_CreateThread ((int (*)(void *))f, arg); + if(foo != NULL) + *foo = id; + write_log("uae_start_thread: %s, id=%d\n", name, id); + return id == 0; } STATIC_INLINE int uae_start_thread_fast (void *(*f) (void *), void *arg, uae_thread_id *foo) { - *foo = SDL_CreateThread ((int (*)(void *))f, arg); - write_log("uae_start_thread_fast: arg=0x%08X, id=%d\n", arg, *foo); - return *foo == 0; + uae_thread_id id = SDL_CreateThread ((int (*)(void *))f, arg); + if(foo != NULL) + *foo = id; + write_log("uae_start_thread_fast: arg=0x%08X, id=%d\n", arg, id); + return id == 0; } STATIC_INLINE void uae_wait_thread (uae_thread_id thread) diff --git a/src/traps.cpp b/src/traps.cpp index d2c26d4e..bd31dc6e 100644 --- a/src/traps.cpp +++ b/src/traps.cpp @@ -66,6 +66,7 @@ struct Trap TrapHandler handler; /* Handler function to be invoked for this trap. */ int flags; /* Trap attributes. */ const char *name; /* For debugging purposes. */ + uaecptr addr; }; #define MAX_TRAPS 4096 @@ -80,6 +81,19 @@ static const int trace_traps = 0; static void trap_HandleExtendedTrap (TrapHandler, int has_retval); +uaecptr find_trap (const char *name) +{ + int i; + + for (i = 0; i < trap_count; i++) { + struct Trap *trap = &traps[i]; + if ((trap->flags & TRAPFLAG_UAERES) && trap->name && !strcmp (trap->name, name)) + return trap->addr; + } + return 0; +} + + /* * Define an emulator trap * @@ -102,6 +116,7 @@ unsigned int define_trap (TrapHandler handler_func, int flags, const char *name) trap->handler = handler_func; trap->flags = flags; trap->name = name; + trap->addr = here (); return trap_num; } diff --git a/src/uaelib.cpp b/src/uaelib.cpp index 86a12a7c..79a24970 100755 --- a/src/uaelib.cpp +++ b/src/uaelib.cpp @@ -348,7 +348,7 @@ static int native_dos_op (uae_u32 mode, uae_u32 p1, uae_u32 p2, uae_u32 p3) return 0; } -static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) +static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) { #define ARG0 (get_long (m68k_areg (&context->regs, 7) + 4)) #define ARG1 (get_long (m68k_areg (&context->regs, 7) + 8)) @@ -357,7 +357,8 @@ static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) #define ARG4 (get_long (m68k_areg (&context->regs, 7) + 20)) #define ARG5 (get_long (m68k_areg (&context->regs, 7) + 24)) - switch (ARG0) { + switch (ARG0) + { case 0: return emulib_GetVersion (); case 1: return emulib_GetUaeConfig (ARG1); case 2: return emulib_SetUaeConfig (ARG1); @@ -376,34 +377,6 @@ static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) case 14: return emulib_GetDisk (ARG1, ARG2); case 15: return emulib_Debug (); -#ifdef PICASSO96 - case 16: return picasso_FindCard (&context->regs); - case 17: return picasso_FillRect (&context->regs); - case 18: return picasso_SetSwitch (&context->regs); - case 19: return picasso_SetColorArray (&context->regs); - case 20: return picasso_SetDAC (&context->regs); - case 21: return picasso_SetGC (&context->regs); - case 22: return picasso_SetPanning (&context->regs); - case 23: return picasso_CalculateBytesPerRow (&context->regs); - case 24: return picasso_BlitPlanar2Chunky (&context->regs); - case 25: return picasso_BlitRect (&context->regs); - case 26: return picasso_SetDisplay (&context->regs); - case 27: return picasso_BlitTemplate (&context->regs); - case 28: return picasso_BlitRectNoMaskComplete (&context->regs); - case 29: return picasso_InitCard (&context->regs); - case 30: return picasso_BlitPattern (&context->regs); - case 31: return picasso_InvertRect (&context->regs); - case 32: return picasso_BlitPlanar2Direct (&context->regs); - /* case 34: return picasso_WaitVerticalSync (); handled in asm-code */ - case 35: return allocated_gfxmem ? 1 : 0; -#ifdef HARDWARE_SPRITE_EMULATION - case 36: return picasso_SetSprite (&context->regs); - case 37: return picasso_SetSpritePosition (&context->regs); - case 38: return picasso_SetSpriteImage (&context->regs); - case 39: return picasso_SetSpriteColor (&context->regs); -#endif - case 40: return picasso_DrawLine (&context->regs); -#endif case 68: return emulib_Minimize (); case 69: return emulib_ExecuteNativeCode (&context->regs); @@ -425,6 +398,19 @@ static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) return 0; } +static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) +{ + uae_u32 v; + struct regstruct *r = &context->regs; + + if (ARG0 >= 16 && ARG0 <= 39) { + write_log ("uaelib: obsolete Picasso96 uaelib hook called, call ignored\n"); + return 0; + } + v = uaelib_demux2 (context); + return v; +} + /* * Installs the UAE LIBRARY */ @@ -440,7 +426,7 @@ void emulib_install (void) dw ((rtarea_base >> 16) | get_word(rtarea_base + 36)); dw (get_word(rtarea_base + 38) + 12); #endif - calltrap (define_trap (uaelib_demux, 0, "")); + calltrap (deftrapres (uaelib_demux, 0, "uaelib_demux")); dw (RTS); org (a); } diff --git a/src/uaeresource.cpp b/src/uaeresource.cpp new file mode 100644 index 00000000..397a595e --- /dev/null +++ b/src/uaeresource.cpp @@ -0,0 +1,128 @@ + /* + * UAE - The Un*x Amiga Emulator + * + * uae.resource + * + */ + +#include "sysconfig.h" +#include "sysdeps.h" + +#include "options.h" +#include "memory.h" +#include "custom.h" +#include "newcpu.h" +#include "traps.h" +#include "autoconf.h" +#include "execlib.h" +#include "uaeresource.h" + +#if 0 + + #define UAERESNAME "uae.resource" + + #define UAERES_GETFUNC (LIB_BASE - 0*LIB_VECTSIZE) + + APTR GetFunc (const char *name); + + struct uaebase + { + struct Library uae_lib; + UWORD uae_version; + UWORD uae_revision; + UWORD uae_subrevision; + UWORD zero; + APTR uae_rombase; + }; + +#endif + +static uaecptr res_init, res_name, res_id, base; + +static uae_u32 REGPARAM2 res_getfunc (TrapContext *ctx) +{ + uaecptr funcname = m68k_areg (&ctx->regs, 0); + char tmp[256]; + if (funcname == 0) + return 0; + strcpyah_safe (tmp, funcname, sizeof tmp); + return find_trap (tmp); +} + +static uae_u32 REGPARAM2 res_initcode (TrapContext *ctx) +{ + uaecptr rb; + base = m68k_dreg (&ctx->regs, 0); + rb = base + SIZEOF_LIBRARY; + put_word (rb + 0, UAEMAJOR); + put_word (rb + 2, UAEMINOR); + put_word (rb + 4, UAESUBREV); + put_word (rb + 6, 0); + put_long (rb + 8, rtarea_base); + return base; +} + +uaecptr uaeres_startup (uaecptr resaddr) +{ + put_word (resaddr + 0x0, 0x4AFC); + put_long (resaddr + 0x2, resaddr); + put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ + put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ + put_word (resaddr + 0xC, 0x0878); /* NT_DEVICE; pri 05 */ + put_long (resaddr + 0xE, res_name); + put_long (resaddr + 0x12, res_id); + put_long (resaddr + 0x16, res_init); + resaddr += 0x1A; + return resaddr; +} + +void uaeres_install (void) +{ + uae_u32 functable, datatable; + uae_u32 initcode, getfunc; + char tmp[100]; + + sprintf (tmp, "UAE resource %d.%d.%d", UAEMAJOR, UAEMINOR, UAESUBREV); + res_name = ds ("uae.resource"); + res_id = ds (tmp); + + /* initcode */ + initcode = here (); + calltrap (deftrap (res_initcode)); dw (RTS); + /* getfunc */ + getfunc = here (); + calltrap (deftrap (res_getfunc)); dw (RTS); + + /* FuncTable */ + functable = here (); + dl (getfunc); /* getfunc */ + dl (0xFFFFFFFF); /* end of table */ + + /* DataTable */ + datatable = here (); + dw (0xE000); /* INITBYTE */ + dw (0x0008); /* LN_TYPE */ + dw (0x0800); /* NT_RESOURCE */ + dw (0xC000); /* INITLONG */ + dw (0x000A); /* LN_NAME */ + dl (res_name); + dw (0xE000); /* INITBYTE */ + dw (0x000E); /* LIB_FLAGS */ + dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ + dw (0xD000); /* INITWORD */ + dw (0x0014); /* LIB_VERSION */ + dw (UAEMAJOR); + dw (0xD000); /* INITWORD */ + dw (0x0016); /* LIB_REVISION */ + dw (UAEMINOR); + dw (0xC000); /* INITLONG */ + dw (0x0018); /* LIB_IDSTRING */ + dl (res_id); + dw (0x0000); /* end of table */ + + res_init = here (); + dl (SIZEOF_LIBRARY + 16); /* size of device base */ + dl (functable); + dl (datatable); + dl (initcode); +} diff --git a/src/zfile.cpp b/src/zfile.cpp index 19493428..31db27ab 100644 --- a/src/zfile.cpp +++ b/src/zfile.cpp @@ -58,7 +58,7 @@ static struct zfile *zfile_create (void) { struct zfile *z; - z = (struct zfile *)malloc (sizeof *z); + z = (struct zfile *)xmalloc (sizeof *z); if (!z) return 0; memset (z, 0, sizeof *z); @@ -122,7 +122,7 @@ int zfile_gettype (struct zfile *z) uae_u8 buf[8]; char *ext; - if (!z) + if (!z || !z->name) return ZFILE_UNKNOWN; ext = strrchr (z->name, '.'); if (ext != NULL) { @@ -132,28 +132,34 @@ int zfile_gettype (struct zfile *z) if (strcasecmp (ext, diskimages[i]) == 0) return ZFILE_DISKIMAGE; } - if (strcasecmp (ext, (char *)"roz") == 0) + if (strcasecmp (ext, "roz") == 0) return ZFILE_ROM; - if (strcasecmp (ext, (char *)"uss") == 0) + if (strcasecmp (ext, "uss") == 0) return ZFILE_STATEFILE; - if (strcasecmp (ext, (char *)"rom") == 0) + if (strcasecmp (ext, "rom") == 0) return ZFILE_ROM; - if (strcasecmp (ext, (char *)"key") == 0) + if (strcasecmp (ext, "key") == 0) return ZFILE_KEY; - if (strcasecmp (ext, (char *)"nvr") == 0) + if (strcasecmp (ext, "nvr") == 0) return ZFILE_NVR; - if (strcasecmp (ext, (char *)"uae") == 0) + if (strcasecmp (ext, "uae") == 0) return ZFILE_CONFIGURATION; - if (strcasecmp (ext, (char *)"hdf") == 0) - return ZFILE_HDF; - if (strcasecmp (ext, (char *)"hdz") == 0) - return ZFILE_HDF; } memset (buf, 0, sizeof (buf)); zfile_fread (buf, 8, 1, z); zfile_fseek (z, -8, SEEK_CUR); if (!memcmp (buf, exeheader, sizeof(buf))) return ZFILE_DISKIMAGE; + if (!memcmp (buf, "RDSK", 4)) + return ZFILE_HDFRDB; + if (!memcmp (buf, "DOS", 3)) + return ZFILE_HDF; + if (ext != NULL) { + if (strcasecmp (ext, "hdf") == 0) + return ZFILE_HDF; + if (strcasecmp (ext, "hdz") == 0) + return ZFILE_HDF; + } return ZFILE_UNKNOWN; } @@ -421,7 +427,7 @@ static struct zfile *zuncompress (struct zfile *z, int dodefault) return z; } -static struct zfile *zfile_fopen_nozip (const char *name, const char *mode) +struct zfile *zfile_fopen_nozip (const char *name, const char *mode) { struct zfile *l; FILE *f; @@ -565,7 +571,7 @@ struct zfile *zfile_dup (struct zfile *zf) if (!zf || !zf->data) return NULL; nzf = zfile_create(); - nzf->data = (uae_u8 *)malloc (zf->size); + nzf->data = (uae_u8 *)xmalloc (zf->size); memcpy (nzf->data, zf->data, zf->size); nzf->size = zf->size; return nzf; @@ -605,11 +611,10 @@ struct zfile *zfile_fopen_empty (const char *name, int size) l = zfile_create (); l->name = name ? strdup (name) : (char *)""; if (size) { - l->data = (uae_u8 *)malloc (size); + l->data = (uae_u8 *)xcalloc (size, 1); l->size = size; - memset (l->data, 0, size); } else { - l->data = (uae_u8*)calloc (1, 1); + l->data = (uae_u8*)xcalloc (1, 1); l->size = 0; } return l; @@ -620,7 +625,7 @@ struct zfile *zfile_fopen_data (const char *name, int size, uae_u8 *data) struct zfile *l; l = zfile_create (); l->name = name ? strdup (name) : (char *)""; - l->data = (uae_u8 *)malloc (size); + l->data = (uae_u8 *)xmalloc (size); l->size = size; memcpy (l->data, data, size); return l; @@ -1152,6 +1157,13 @@ struct znode *zvolume_adddir_abs(struct zvolume *zv, struct zarchive_info *zai) char *p, *p2; int i; + if (strlen (path) > 0) { + /* remove possible trailing / or \ */ + char last; + last = path[strlen (path) - 1]; + if (last == '/' || last == '\\') + path[strlen (path) - 1] = 0; + } zn2 = &zv->root; p = p2 = path; for (i = 0; path[i]; i++) { diff --git a/unlink_dirs.sh b/unlink_dirs.sh new file mode 100644 index 00000000..802234e1 --- /dev/null +++ b/unlink_dirs.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +cd ./src + +unlink config.h + +unlink sysconfig.h + +unlink target.h + +unlink osdep + +unlink threaddep + +unlink machdep + +unlink sounddep + +cd ..