static void hrtmon_unmap_banks (void);
void check_prefs_changed_carts (int in_memory_reset);
-int action_replay_unload (int in_memory_reset);
static int stored_picasso_on = -1;
_T("ACTION_REPLAY_HIDE"),
};
+ if (!armemory_rom && !hrtmemory)
+ return 0;
+
write_log_debug (_T("Action Replay State:(%s)\nHrtmon State:(%s)\n"),
state[action_replay_flag + 3], state[hrtmon_flag + 3]);
uaegfx_install_code (rtarea_base + RTAREA_RTG);
#endif
- org (RTAREA_TRAPS);
+ org (RTAREA_TRAPS | rtarea_base);
init_extended_traps ();
}
static void blitter_line (void)
{
uae_u16 blitahold = (blinea & blt_info.bltafwm) >> blinea_shift;
- uae_u16 blitbhold = blineb & 1 ? 0xFFFF : 0;
uae_u16 blitchold = blt_info.bltcdat;
+ blt_info.bltbhold = (blineb & 1) ? 0xFFFF : 0;
blitlinepixel = !blitsing || (blitsing && !blitonedot);
- blt_info.bltddat = blit_func (blitahold, blitbhold, blitchold, bltcon0 & 0xFF);
+ blt_info.bltddat = blit_func (blitahold, blt_info.bltbhold, blitchold, bltcon0 & 0xFF);
blitonedot++;
}
#endif
getnextch();
while (nextch != EOF) {
- int cpulevel, plevel, sduse;
+ int cpulevel, uncpulevel, plevel, sduse;
int i;
char patbits[16];
getnextch();
}
- while (isspace(nextch) || nextch == ':') /* Get CPU and privilege level */
+ while (isspace(nextch) || nextch == ':') /* Get CPU level, unimplemented level, and privilege level */
getnextch();
switch (nextch) {
}
getnextch();
+ switch (nextch) {
+ case '0': uncpulevel = 0; break;
+ case '1': uncpulevel = 1; break;
+ case '2': uncpulevel = 2; break;
+ case '3': uncpulevel = 3; break;
+ case '4': uncpulevel = 4; break;
+ case '5': uncpulevel = 5; break;
+ case '6': uncpulevel = 6; break;
+ case '7': uncpulevel = 7; break;
+ default: abort();
+ }
+ getnextch();
+
switch (nextch) {
case '0': plevel = 0; break;
case '1': plevel = 1; break;
if (j < 15)
printf(",");
}
- printf ("},0x%04X,%d,%d,{", bitmask, cpulevel, plevel);
+ printf ("},0x%04X,%d,%d,%d,{", bitmask, cpulevel, uncpulevel, plevel);
for(i = 0; i < 5; i++) {
printf("{%d,%d}%s", flaguse[i], flagset[i], i == 4 ? "" : ",");
}
processptr = 0;
xfree (processname);
processname = NULL;
- setsystime ();
}
void activate_debugger (void)
value &= 0xffff;
if (ecard >= cardno)
return;
- if (expamem_type() != zorroIII)
+ if (expamem_type () != zorroIII)
write_log (_T("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;
+ if (expamem_type () == zorroIII) {
+ uae_u32 p1, p2 = 0;
// +Bernd Roesch & Toni Wilen
p1 = get_word (regs.regs[11] + 0x20);
if (expamem[0] & add_memory) {
fastmemory = 0;
}
+static bool mapped_malloc_dynamic (uae_u32 *currpsize, uae_u32 *changedpsize, uae_u8 **memory, uae_u32 *allocated, uae_u32 *mask, int max, const TCHAR *name)
+{
+ int alloc = *currpsize;
+
+ *allocated = 0;
+ *memory = NULL;
+ *mask = 0;
+
+ if (!alloc)
+ return false;
+
+ while (alloc >= max * 1024 * 1024) {
+ uae_u8 *mem = mapped_malloc (alloc, name);
+ if (mem) {
+ *memory = mem;
+ *currpsize = alloc;
+ *changedpsize = alloc;
+ *mask = alloc - 1;
+ *allocated = alloc;
+ return true;
+ }
+ write_log (_T("Out of memory for %s, %d bytes.\n"), name, alloc);
+ alloc /= 2;
+ }
+
+ return false;
+}
+
+
static void allocate_expamem (void)
{
currprefs.fastmem_size = changed_prefs.fastmem_size;
currprefs.z3fastmem_size = changed_prefs.z3fastmem_size;
currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size;
currprefs.rtgmem_size = changed_prefs.rtgmem_size;
+ currprefs.rtgmem_type = changed_prefs.rtgmem_type;
currprefs.z3chipmem_size = changed_prefs.z3chipmem_size;
z3chipmem_start = currprefs.z3fastmem_start;
allocated_fastmem = 0;
}
}
- memory_hardreset ();
+ memory_hardreset (1);
}
if (allocated_z3fastmem != currprefs.z3fastmem_size) {
if (z3fastmem)
mapped_free (z3fastmem);
- z3fastmem = 0;
-
- allocated_z3fastmem = currprefs.z3fastmem_size;
- z3fastmem_mask = allocated_z3fastmem - 1;
-
- if (allocated_z3fastmem) {
- z3fastmem = mapped_malloc (allocated_z3fastmem, _T("z3"));
- if (z3fastmem == 0) {
- write_log (_T("Out of memory for 32 bit fast memory.\n"));
- allocated_z3fastmem = 0;
- }
- }
- memory_hardreset ();
+ mapped_malloc_dynamic (&currprefs.z3fastmem_size, &changed_prefs.z3fastmem_size, &z3fastmem, &allocated_z3fastmem, &z3fastmem_mask, 1, _T("z3"));
+ memory_hardreset (1);
}
if (allocated_z3fastmem2 != currprefs.z3fastmem2_size) {
if (z3fastmem2)
allocated_z3fastmem2 = 0;
}
}
- memory_hardreset ();
+ memory_hardreset (1);
}
if (allocated_z3chipmem != currprefs.z3chipmem_size) {
if (z3chipmem)
mapped_free (z3chipmem);
- z3chipmem = 0;
-
- allocated_z3chipmem = currprefs.z3chipmem_size;
- z3chipmem_mask = allocated_z3chipmem - 1;
-
- if (allocated_z3chipmem) {
- z3chipmem = mapped_malloc (allocated_z3chipmem, _T("z3_chip"));
- if (z3chipmem == 0) {
- write_log (_T("Out of memory for 32 bit chip memory.\n"));
- allocated_z3chipmem = 0;
- }
- }
- memory_hardreset ();
+ mapped_malloc_dynamic (&currprefs.z3chipmem_size, &changed_prefs.z3chipmem_size, &z3chipmem, &allocated_z3chipmem, &z3chipmem_mask, 16, _T("z3_chip"));
+ memory_hardreset (1);
}
#ifdef PICASSO96
if (allocated_gfxmem != currprefs.rtgmem_size) {
if (gfxmemory)
mapped_free (gfxmemory);
- gfxmemory = 0;
-
- allocated_gfxmem = currprefs.rtgmem_size;
- gfxmem_mask = allocated_gfxmem - 1;
-
- if (allocated_gfxmem) {
- gfxmemory = mapped_malloc (allocated_gfxmem, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
- if (gfxmemory == 0) {
- write_log (_T("Out of memory for graphics card memory\n"));
- allocated_gfxmem = 0;
- }
- }
- memory_hardreset ();
+ mapped_malloc_dynamic (&currprefs.rtgmem_size, &changed_prefs.rtgmem_size, &gfxmemory, &allocated_gfxmem, &gfxmem_mask, 1, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
+ memory_hardreset (1);
}
#endif
dc.l exter_server-start ;4 28
dc.l bootcode-start ;5 32
dc.l setup_exter-start ;6 36
- dc.l mh_e-start ;7 40
+ dc.l 0 ;7 40
dc.l clipboard_init-start ;8 44
;52
move.w #$0214,8(a1)
moveq.l #3,d0
jsr -168(a6) ; AddIntServer
- move.w mh_e(pc),d0
- beq.s .nomh
+
+ move.w #$FF38,d0
+ moveq #4,d1
+ bsr.w getrtbase
+ jsr (a0)
+ tst.l d0
+ beq.s .nomh
bsr.w mousehack_init
.nomh
movem.l (sp)+,d0-d1/a0-a1
movem.l (sp)+,d2-d7/a2-a6
rts
+clockreset:
+ move.w #$ff58,d0 ; fsmisc_helper
+ bsr.w getrtbase
+ moveq #3,d0 ; get time
+ jsr (a0)
+ move.l 168(a3),a1
+ move.l d0,32(a1)
+ beq.s .cr
+ moveq #0,d0
+ move.l d0,36(a1)
+ move.w #11,28(a1) ;TR_SETSYSTIME
+ move.b #1,30(a1) ;IOF_QUICK
+ jsr -$01c8(a6) ;DoIO
+.cr rts
+
filesys_mainloop:
move.l 4.w,a6
sub.l a1,a1
; 164: input.device ioreq (disk inserted/removed input message)
; 168: timer.device ioreq
; 172: disk change from host
+ ; 173: clock reset
; 176: my task
; 180: device node
move.l #12+20+(80+44+1)+(1+3)+4+4+4+(1+3)+4+4,d0
bset #13,d0 ; SIGBREAK_CTRL_D
jsr -$013e(a6) ;Wait
.msg
- ; SIGBREAK_CTRL_D = disk change notification from native code
+ ; SIGBREAK_CTRL_D checks
+ ; clock reset
+ tst.b 173(a3)
+ beq.s .noclk
+ bsr.w clockreset
+ clr.b 173(a3)
+.noclk
+ ; disk change notification from native code
tst.b 172(a3)
beq.s .nodc
; call filesys_media_change_reply (pre)
jsr -$01c8(a6) ;DoIO
rts
-; these shouldn't be here but it is easier this way..
-
-mh_e: dc.w 0
-mh_cnt: dc.w -1
-mh_maxx: dc.w 0
-mh_maxy: dc.w 0
-mh_maxz: dc.w 0
-mh_x: dc.w 0
-mh_y: dc.w 0
-mh_z: dc.w 0
-mh_resx: dc.w 0
-mh_resy: dc.w 0
-mh_maxax: dc.w 0
-mh_maxay: dc.w 0
-mh_maxaz: dc.w 0
-mh_ax: dc.w 0
-mh_ay: dc.w 0
-mh_az: dc.w 0
-mh_pressure: dc.w 0
-mh_buttonbits: dc.l 0
-mh_inproximity: dc.w 0
-mh_absx: dc.w 0
-mh_absy: dc.w 0
+MH_E = 0
+MH_CNT = 2
+MH_MAXX = 4
+MH_MAXY = 6
+MH_MAXZ = 8
+MH_X = 10
+MH_Y = 12
+MH_Z = 14
+MH_RESX = 16
+MH_RESY = 18
+MH_MAXAX = 20
+MH_MAXAY = 22
+MH_MAXAZ = 24
+MH_AX = 26
+MH_AY = 28
+MH_AZ = 30
+MH_PRESSURE = 32
+MH_BUTTONBITS = 34
+MH_INPROXIMITY = 38
+MH_ABSX = 40
+MH_ABSY = 42
+MH_DATA_SIZE = 44
MH_INT = 0
-
MH_FOO = (MH_INT+22)
MH_FOO_CNT = 0
MH_FOO_BUTTONS = 4
MH_IENTTAGS = (MH_IEPT+32) ;space for ient_TagList
MH_IO = (MH_IENTTAGS+16*4*2)
MH_TM = (MH_IO+4)
-MH_END = (MH_TM+4)
+MH_DATA = (MH_TM+4)
+MH_END = (MH_DATA+MH_DATA_SIZE)
MH_MOUSEHACK = 0
MH_TABLET = 1
mousehack_task:
move.l 4.w,a6
- move.w 20(a6),d7
+ move.w 20(a6),d7 ; KS version
moveq #-1,d0
jsr -$014a(a6) ;AllocSignal
moveq #-1,d0
move.w d0,MH_FOO_CNT(a3)
+ ; send data structure address
+ move.w #$FF38,d0
+ moveq #5,d1
+ bsr.w getrtbase
+ move.l a5,d0
+ add.l #MH_DATA,d0
+ jsr (a0)
+
lea MH_INT(a5),a1
move.b #2,8(a1) ;NT_INTERRUPT
move.b #5,9(a1) ;priority
move.l #22,36(a1) ;sizeof(struct InputEvent)
move.l a2,40(a1)
- move.b mh_e(pc),d0
+ move.b MH_E+MH_DATA(a5),d0
cmp.w #39,d7
bcs.w .notablet
btst #MH_TABLET,d0
clr.w 12(a0)
;IEQUALIFIER_MIDBUTTON=0x1000/IEQUALIFIER_RBUTTON=0x2000/IEQUALIFIER_LEFTBUTTON=0x4000
- move.l mh_buttonbits(pc),d1
+ move.l MH_BUTTONBITS+MH_DATA(a5),d1
and.w #7,d1
moveq #7,d0
sub.w d1,d0
lsl.w #4,d0
move.w d0,8(a2) ;ie_Qualifier
- move.w mh_x(pc),12+2(a0) ;ient_TabletX
+ move.w MH_X+MH_DATA(a5),12+2(a0) ;ient_TabletX
clr.w 16(a0)
- move.w mh_y(pc),16+2(a0) ;ient_TabletY
+ move.w MH_Y++MH_DATA(a5),16+2(a0) ;ient_TabletY
clr.w 20(a0)
- move.w mh_maxx(pc),20+2(a0) ;ient_RangeX
+ move.w MH_MAXX+MH_DATA(a5),20+2(a0) ;ient_RangeX
clr.w 24(a0)
- move.w mh_maxy(pc),24+2(a0) ;ient_RangeY
+ move.w MH_MAXY+MH_DATA(a5),24+2(a0) ;ient_RangeY
lea MH_IENTTAGS(a5),a1
move.l a1,28(a0) ;ient_TagList
move.l #TABLETA_Pressure,(a1)+
- move.w mh_pressure(pc),d0
+ move.w MH_PRESSURE+MH_DATA(a5),d0
ext.l d0
asl.l #8,d0
move.l d0,(a1)+
move.l #TABLETA_ButtonBits,(a1)+
- move.l mh_buttonbits(pc),(a1)+
+ move.l MH_BUTTONBITS+MH_DATA(a5),(a1)+
moveq #0,d0
- move.w mh_resx(pc),d0
+ move.w MH_RESX+MH_DATA(a5),d0
bmi.s .noresx
move.l #TABLETA_ResolutionX,(a1)+
move.l d0,(a1)+
.noresx
- move.w mh_resy(pc),d0
+ move.w MH_RESY+MH_DATA(a5),d0
bmi.s .noresy
move.l #TABLETA_ResolutionY,(a1)+
move.l d0,(a1)+
.noresy
- move.w mh_maxz(pc),d0
+ move.w MH_MAXZ+MH_DATA(a5),d0
bmi.s .noz
move.l #TABLETA_RangeZ,(a1)+
move.l d0,(a1)+
- move.w mh_z(pc),d0
+ move.w MH_Z+MH_DATA(a5),d0
move.l #TABLETA_TabletZ,(a1)+
move.l d0,(a1)+
.noz
- move.w mh_maxax(pc),d0
+ move.w MH_MAXAX+MH_DATA(a5),d0
bmi.s .noax
move.l #TABLETA_AngleX,(a1)+
- move.w mh_ax(pc),d0
+ move.w MH_AX+MH_DATA(a5),d0
ext.l d0
asl.l #8,d0
move.l d0,(a1)+
.noax
- move.w mh_maxay(pc),d0
+ move.w MH_MAXAY++MH_DATA(a5),d0
bmi.s .noay
move.l #TABLETA_AngleY,(a1)+
- move.w mh_ay(pc),d0
+ move.w MH_AY++MH_DATA(pc),d0
ext.l d0
asl.l #8,d0
move.l d0,(a1)+
.noay
- move.w mh_maxaz(pc),d0
+ move.w MH_MAXAZ++MH_DATA(a5),d0
bmi.s .noaz
move.l #TABLETA_AngleZ,(a1)+
- move.w mh_az(pc),d0
+ move.w MH_AZ+MH_DATA(a5),d0
ext.l d0
asl.l #8,d0
move.l d0,(a1)+
.noaz
moveq #0,d0
- move.w mh_inproximity(pc),d0
+ move.w MH_INPROXIMITY+MH_DATA(a5),d0
bmi.s .noproxi
move.l #TABLETA_InProximity,(a1)+
move.l d0,(a1)+
;create mouse button events if button state changed
move.w #$68,d3 ;IECODE_LBUTTON->IECODE_RBUTTON->IECODE_MBUTTON
moveq #1,d2
- move.l mh_buttonbits(pc),d4
+ move.l MH_BUTTONBITS+MH_DATA(a5),d4
.nextbut
move.l d4,d0
and.l d2,d0
.notablet
- move.b mh_e(pc),d0
+ move.b MH_E+MH_DATA(a5),d0
btst #MH_MOUSEHACK,d0
beq.w mhloop
move.l MH_FOO_INTBASE(a3),a0
- move.w mh_absx(pc),d0
+ move.w MH_ABSX+MH_DATA(a5),d0
move.w 34+14(a0),d1
add.w d1,d1
sub.w d1,d0
.xn
move.w d0,10(a2)
- move.w mh_absy(pc),d0
+ move.w MH_ABSY+MH_DATA(a5),d0
move.w 34+12(a0),d1
add.w d1,d1
sub.w d1,d0
beq.s .l1
tst.l MH_TM(a1)
beq.s .l1
- move.w mh_cnt(pc),d0
+ move.w MH_CNT+MH_DATA(a1),d0
cmp.w MH_FOO+MH_FOO_CNT(a1),d0
beq.s .l2
move.w d0,MH_FOO+MH_FOO_CNT(a1)
return;
Unit *u;
for (u = units; u; u = u->next) {
- if (is_virtual (u->unit)) {
+ if (is_virtual (u->unit) && filesys_isvolume (u)) {
put_byte (u->volume + 173 - 32, 1);
uae_Signal (get_long (u->volume + 176 - 32), 1 << 13);
break;
TRACE((_T("ACTION_CHANGE_FILE_POSITION64(%s,%lld,%d)\n"), k->aino->nname, pos, mode));
gui_flicker_led (LED_HD, unit->unit, 1);
- cur = fs_lseek64 (k->fd, 0, SEEK_CUR);
+ cur = k->file_pos;
{
uae_s64 temppos;
uae_s64 filesize = fs_fsize64 (k->fd);
} else {
PUT_PCK64_RES1 (packet, TRUE);
PUT_PCK64_RES2 (packet, 0);
- k->file_pos = cur;
+ k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR);
}
+ TRACE((_T("= oldpos %lld newpos %lld\n"), cur, k->file_pos));
}
PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK);
return;
}
- TRACE((_T("ACTION_GET_FILE_POSITION64(%s)\n"), k->aino->nname));
+ TRACE((_T("ACTION_GET_FILE_POSITION64(%s)=%lld\n"), k->aino->nname, k->file_pos));
PUT_PCK64_RES1 (packet, k->file_pos);
PUT_PCK64_RES2 (packet, 0);
}
PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK);
return;
}
- TRACE((_T("ACTION_GET_FILE_SIZE64(%s)\n"), k->aino->nname));
filesize = fs_fsize64 (k->fd);
+ TRACE((_T("ACTION_GET_FILE_SIZE64(%s)=%lld\n"), k->aino->nname, filesize));
if (filesize >= 0) {
PUT_PCK64_RES1 (packet, filesize);
PUT_PCK64_RES2 (packet, 0);
extern void action_replay_hide (void);
extern void action_replay_reset (void);
extern int action_replay_load (void);
+extern int action_replay_unload (int in_memory_reset);
extern void action_replay_memory_reset (void);
extern void action_replay_init (int);
extern void cache_free (uae_u8*);
#endif
-int init_shm (void);
-void preinit_shm (void);
+bool init_shm (void);
+bool preinit_shm (void);
extern bool canbang;
extern int candirect;
extern void memory_cleanup (void);
extern void map_banks (addrbank *bank, int first, int count, int realsize);
extern void map_overlay (int chip);
-extern void memory_hardreset (void);
+extern void memory_hardreset (int);
+extern void memory_clear (void);
extern void free_fastmemory (void);
#define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr))
uae_u8 bitpos[16];
unsigned int mask;
int cpulevel;
+ int unimpcpulevel;
int plevel;
struct {
unsigned int flaguse:3;
extern void start_program (void);
extern void leave_program (void);
extern void real_main (int, TCHAR **);
+extern void virtualdevice_init (void);
extern void usage (void);
extern void sleep_millis (int ms);
extern void sleep_millis_main (int ms);
filesys_prepare_reset ();
filesys_reset ();
#endif
+ init_shm ();
memory_reset ();
#if defined (BSDSOCKET)
bsdlib_reset ();
do_leave_program ();
}
+
+void virtualdevice_init (void)
+{
+#ifdef AUTOCONFIG
+ rtarea_setup ();
+#endif
+#ifdef FILESYS
+ rtarea_init ();
+ uaeres_install ();
+ hardfile_install ();
+#endif
+#ifdef SCSIEMU
+ scsi_reset ();
+ scsidev_install ();
+#endif
+#ifdef SANA2
+ netdev_install ();
+#endif
+#ifdef UAESERIAL
+ uaeserialdev_install ();
+#endif
+#ifdef AUTOCONFIG
+ expansion_init ();
+#endif
+#ifdef FILESYS
+ filesys_install ();
+#endif
+}
+
static int real_main2 (int argc, TCHAR **argv)
{
}
#ifdef NATMEM_OFFSET
- preinit_shm ();
+ //preinit_shm ();
#endif
if (restart_config[0])
/* force sound settings change */
currprefs.produce_sound = 0;
-#ifdef AUTOCONFIG
- rtarea_setup ();
-#endif
-#ifdef FILESYS
- rtarea_init ();
- uaeres_install ();
- hardfile_install ();
-#endif
savestate_init ();
-#ifdef SCSIEMU
- scsi_reset ();
- scsidev_install ();
-#endif
-#ifdef SANA2
- netdev_install ();
-#endif
-#ifdef UAESERIAL
- uaeserialdev_install ();
-#endif
keybuf_init (); /* Must come after init_joystick */
-#ifdef AUTOCONFIG
- expansion_init ();
-#endif
-#ifdef FILESYS
- filesys_install ();
-#endif
- memory_init ();
memory_reset ();
#ifdef AUTOCONFIG
/* Set by each memory handler that does not simply access real memory. */
int special_mem;
#endif
+static int mem_hardreset = 3;
static bool isdirectjit (void)
{
uae_u8 ce_banktype[65536];
uae_u8 ce_cachable[65536];
-#if defined(CPU_64_BIT)
-uae_u32 max_z3fastmem = 2048UL * 1024 * 1024;
-#else
-uae_u32 max_z3fastmem = 512 * 1024 * 1024;
-#endif
-
static size_t bootrom_filepos, chip_filepos, bogo_filepos, rom_filepos, a3000lmem_filepos, a3000hmem_filepos;
/* Set if we notice during initialization that settings changed,
static void delete_shmmaps (uae_u32 start, uae_u32 size)
{
+#if 0
if (!needmman ())
return;
+#endif
while (size) {
uae_u8 *base = mem_banks[bankindex (start)]->baseaddr;
shmpiece *y;
uae_u8 *base = what->baseaddr;
+#if 0
if (!needmman ())
return;
+#endif
if (!base)
return;
shmpiece *x;
static int recurse;
+#if 0
if (!needmman ()) {
nocanbang ();
return xcalloc (uae_u8, s + 4);
}
+#endif
id = shmget (IPC_PRIVATE, s, 0x1ff, file);
if (id == -1) {
return start + 2 * 1024 * 1024;
}
+void memory_clear (void)
+{
+ mem_hardreset = 0;
+ if (savestate_state == STATE_RESTORE)
+ return;
+ if (chipmemory)
+ memset (chipmemory, 0, allocated_chipmem);
+ if (bogomemory)
+ memset (bogomemory, 0, allocated_bogomem);
+ if (a3000lmemory)
+ memset (a3000lmemory, 0, allocated_a3000lmem);
+ if (a3000hmemory)
+ memset (a3000hmemory, 0, allocated_a3000hmem);
+ expansion_clear ();
+}
void memory_reset (void)
{
int bnk, bnk_end;
bool gayleorfatgary;
+ if (mem_hardreset > 2)
+ memory_init ();
+
be_cnt = 0;
currprefs.chipmem_size = changed_prefs.chipmem_size;
currprefs.bogomem_size = changed_prefs.bogomem_size;
allocate_memory ();
chipmem_setindirect ();
- if (_tcscmp (currprefs.romfile, changed_prefs.romfile) != 0
+ if (mem_hardreset > 1
+ || _tcscmp (currprefs.romfile, changed_prefs.romfile) != 0
|| _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0)
{
+ protect_roms (false);
write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile);
kickstart_rom = 1;
a1000_handle_kickstart (0);
}
patch_kick ();
write_log (_T("ROM loader end\n"));
+ protect_roms (true);
}
if (cloanto_rom && currprefs.maprom < 0x01000000)
}
#endif
#endif
+ if (mem_hardreset)
+ memory_clear ();
+
write_log (_T("memory init end\n"));
}
+
void memory_init (void)
{
+ virtualdevice_init ();
+
allocated_chipmem = 0;
allocated_bogomem = 0;
kickmemory = 0;
currprefs.romextfile[0] = 0;
#ifdef ACTION_REPLAY
+ action_replay_unload (0);
action_replay_load ();
action_replay_init (1);
#ifdef ACTION_REPLAY_HRTMON
#endif
}
-void memory_hardreset (void)
+void memory_hardreset (int mode)
{
- if (savestate_state == STATE_RESTORE)
- return;
- if (chipmemory)
- memset (chipmemory, 0, allocated_chipmem);
- if (bogomemory)
- memset (bogomemory, 0, allocated_bogomem);
- if (a3000lmemory)
- memset (a3000lmemory, 0, allocated_a3000lmem);
- if (a3000hmemory)
- memset (a3000hmemory, 0, allocated_a3000hmem);
- expansion_clear ();
+ if (mode + 1 > mem_hardreset)
+ mem_hardreset = mode + 1;
}
void map_banks (addrbank *bank, int start, int size, int realsize)
custom_reset (hardreset);
m68k_reset (hardreset);
if (hardreset) {
- memory_hardreset ();
+ memory_clear ();
write_log (_T("hardreset, memory cleared\n"));
}
#ifdef SAVESTATE
static uae_s16 axisold[MAX_INPUT_DEVICES][256];
int no_rawinput = 0;
-int no_directinput = 1;
+int no_directinput = 0;
static int dinput_enum_all;
int dinput_winmouse (void)
if (!rawhid_found)
rawinput_enabled_hid = 0;
- if (!no_directinput) {
+ if (!no_directinput || !rawinput_enabled_keyboard || !rawinput_enabled_mouse) {
hr = DirectInput8Create (hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID *)&g_lpdi, NULL);
if (FAILED (hr)) {
write_log (_T("DirectInput8Create failed, %s\n"), DXError (hr));
write_log (_T("DirectInput enumeration.. Pointing devices..\n"));
g_lpdi->EnumDevices (DI8DEVCLASS_POINTER, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
}
- write_log (_T("DirectInput enumeration.. Game controllers..\n"));
- g_lpdi->EnumDevices (DI8DEVCLASS_GAMECTRL, di_enumcallbackj, 0, DIEDFL_ATTACHEDONLY);
+ if (!no_directinput) {
+ write_log (_T("DirectInput enumeration.. Game controllers..\n"));
+ g_lpdi->EnumDevices (DI8DEVCLASS_GAMECTRL, di_enumcallbackj, 0, DIEDFL_ATTACHEDONLY);
+ }
}
}
}
#include "hq2x_d3d.h"
#include "zfile.h"
#include "uae.h"
+
extern int D3DEX, d3ddebug;
+int forcedframelatency = -1;
#include <d3d9.h>
#include <d3dx9.h>
write_log (_T("%s: CreateQuery(D3DQUERYTYPE_EVENT) failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
}
if (d3ddevex) {
- hr = d3ddevex->SetMaximumFrameLatency (vsync ? 1 : 0);
+ UINT v = 12345;
+ hr = d3ddevex->GetMaximumFrameLatency (&v);
+ //write_log (L"GetMaximumFrameLatency=%d\n", v);
+ if (FAILED (hr)) {
+ write_log (_T("%s: GetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
+ v = 1;
+ }
+ hr = S_OK;
+ if (forcedframelatency >= 0)
+ hr = d3ddevex->SetMaximumFrameLatency (forcedframelatency);
+ else if (v > 1 || !vsync)
+ hr = d3ddevex->SetMaximumFrameLatency (vsync ? 1 : 0);
if (FAILED (hr))
write_log (_T("%s: SetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
+ //v = 12345;
+ //hr = d3ddevex->GetMaximumFrameLatency (&v);
+ //write_log (L"GetMaximumFrameLatency=%d\n", v);
}
return 0;
//on my system it work ok with 10 but who
//know when windows rest for a while
//with sysex size of 40 win can 8 sec sleep
-#define INBUFFLEN 18000 //if this is not enough a warning come
+#define INBUFFLEN 120000 //if this is not enough a warning come
int midi_inbuflen = INBUFFLEN;
static int overflow,only_one_time;
for(i = 0; i < out_allocated; i++) {
if(outbuffer[i]) {
- free(outbuffer[i]);
+ xfree(outbuffer[i]);
outbufferlength[i] = 0;
outbuffer[i] = NULL;
}
#if defined(NATMEM_OFFSET)
+#define VAMODE 1
+
+uae_u32 max_z3fastmem;
+
/* JIT can access few bytes outside of memory block of it executes code at the very end of memory block */
#define BARRIER 32
static int p96mem_size;
static SYSTEM_INFO si;
int maxmem;
+uae_u32 natmem_size;
static uae_u8 *virtualallocwithlock (LPVOID addr, SIZE_T size, DWORD allocationtype, DWORD protect)
{
static uae_u64 size64;
typedef BOOL (CALLBACK* GLOBALMEMORYSTATUSEX)(LPMEMORYSTATUSEX);
-void preinit_shm (void)
+static void clear_shm (void)
+{
+ shm_start = NULL;
+ for (int i = 0; i < MAX_SHMID; i++) {
+ memset (&shmids[i], 0, sizeof (struct shmid_ds));
+ shmids[i].key = -1;
+ }
+}
+
+bool preinit_shm (void)
{
- int i;
uae_u64 total64;
uae_u64 totalphys64;
MEMORYSTATUS memstats;
p96mem_offset = NULL;
GetSystemInfo (&si);
- max_allowed_mman = 1536;
+ max_allowed_mman = 512;
if (os_64bit)
max_allowed_mman = 2048;
size64 = 8 * 1024 * 1024;
if (max_allowed_mman * 1024 * 1024 > size64)
max_allowed_mman = size64 / (1024 * 1024);
- max_z3fastmem = max_allowed_mman * 1024 * 1024;
- if (max_z3fastmem < 512 * 1024 * 1024)
- max_z3fastmem = 512 * 1024 * 1024;
- shm_start = 0;
- for (i = 0; i < MAX_SHMID; i++) {
- shmids[i].attached = 0;
- shmids[i].key = -1;
- shmids[i].size = 0;
- shmids[i].addr = NULL;
- shmids[i].name[0] = 0;
+ natmem_size = max_allowed_mman * 1024 * 1024;
+ if (natmem_size < 256 * 1024 * 1024)
+ natmem_size = 256 * 1024 * 1024;
+
+ write_log (_T("Total physical RAM %uM\n"), totalphys64 >> 20);
+ for (;;) {
+ natmem_offset = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE | (VAMODE == 1 ? MEM_WRITE_WATCH : 0), PAGE_READWRITE);
+ if (natmem_offset)
+ break;
+ natmem_size -= 128 * 1024 * 1024;
+ if (!natmem_size) {
+ write_log (_T("Can't allocate 256M of virtual address space!?\n"));
+ return false;
+ }
}
+ max_z3fastmem = natmem_size;
+ write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"),
+ natmem_offset, (uae_u8*)natmem_offset + natmem_size,
+ natmem_size, natmem_size >> 20);
+
+ clear_shm ();
+
+// write_log (_T("Max Z3FastRAM %dM. Total physical RAM %uM\n"), max_z3fastmem >> 20, totalphys64 >> 20);
- write_log (_T("Max Z3FastRAM %dM. Total physical RAM %uM\n"), max_z3fastmem >> 20, totalphys64 >> 20);
canbang = 1;
+ return true;
}
static void resetmem (void)
continue;
if (!s->natmembase)
continue;
+ if (s->fake)
+ continue;
+ if (((uae_u8*)s->attached - (uae_u8*)s->natmembase) >= 0x10000000)
+ continue;
shmaddr = natmem_offset + ((uae_u8*)s->attached - (uae_u8*)s->natmembase);
result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE);
if (result != shmaddr)
- write_log (_T("NATMEM: realloc(%p,%d,%d) failed, err=%x\n"), shmaddr, size, s->mode, GetLastError ());
+ write_log (_T("NATMEM: realloc(%p-%p,%d,%d,%s) failed, err=%d\n"), shmaddr, shmaddr + size, size, s->mode, s->name, GetLastError ());
else
- write_log (_T("NATMEM: rellocated(%p,%d,%s)\n"), shmaddr, size, s->name);
+ write_log (_T("NATMEM: rellocated(%p-%p,%d,%s)\n"), shmaddr, shmaddr + size, size, s->name);
}
}
static ULONG getz2rtgaddr (void)
{
ULONG start;
- start = currprefs.fastmem_size;
- while (start & (currprefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
+ start = changed_prefs.fastmem_size;
+ while (start & (changed_prefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
start += 1024 * 1024;
return start + 2 * 1024 * 1024;
}
+#if 0
int init_shm (void)
{
uae_u32 size, totalsize, z3size, natmemsize;
rtgbarrier = 0;
rtgextra = 0;
}
- blah = (uae_u8*)VirtualAlloc (NULL, natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize, MEM_RESERVE, PAGE_READWRITE);
+ natmem_size = natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize;
+ blah = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE, PAGE_READWRITE);
if (blah) {
natmem_offset = blah;
break;
}
+ natmem_size = 0;
write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"),
natmemsize >> 20, GetLastError (), (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20);
if (!lowmem ()) {
return canbang;
}
+#endif
+
+static uae_u8 *va (uae_u32 offset, uae_u32 len, DWORD alloc, DWORD protect)
+{
+ uae_u8 *addr;
+
+ addr = (uae_u8*)VirtualAlloc (natmem_offset + offset, len, alloc, protect);
+ if (addr) {
+ write_log (_T("VA(%p - %p, %4uM, %s)\n"),
+ natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED"));
+ return addr;
+ }
+ write_log (_T("VA(%p - %p, %4uM, %s) failed %d\n"),
+ natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED"), GetLastError ());
+ return NULL;
+}
+
+static int doinit_shm (void)
+{
+ uae_u32 size, totalsize, z3size, natmemsize;
+ uae_u32 rtgbarrier, z3chipbarrier, rtgextra;
+ int rounds = 0;
+ ULONG z3rtgmem_size = changed_prefs.rtgmem_type ? changed_prefs.rtgmem_size : 0;
+ for (;;) {
+ int lowround = 0;
+ uae_u8 *blah = NULL;
+ if (rounds > 0)
+ write_log (_T("NATMEM: retrying %d..\n"), rounds);
+ rounds++;
+
+ z3size = 0;
+ size = 0x1000000;
+ rtgextra = 0;
+ z3chipbarrier = 0;
+ rtgbarrier = si.dwPageSize;
+ if (changed_prefs.cpu_model >= 68020)
+ size = 0x10000000;
+ if (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size || changed_prefs.z3chipmem_size) {
+ z3size = changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size + (changed_prefs.z3fastmem_start - 0x10000000);
+ if (z3rtgmem_size) {
+ rtgbarrier = 16 * 1024 * 1024 - ((changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size) & 0x00ffffff);
+ }
+ if (changed_prefs.z3chipmem_size && (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size))
+ z3chipbarrier = 16 * 1024 * 1024;
+ } else {
+ rtgbarrier = 0;
+ }
+ totalsize = size + z3size + z3rtgmem_size;
+ while (totalsize > size64) {
+ int change = lowmem ();
+ if (!change)
+ return 0;
+ write_log (_T("NATMEM: %d, %dM > %dM = %dM\n"), ++lowround, totalsize >> 20, size64 >> 20, (totalsize - change) >> 20);
+ totalsize -= change;
+ }
+ if ((rounds > 1 && totalsize < 0x10000000) || rounds > 20) {
+ write_log (_T("NATMEM: No special area could be allocated (3)!\n"));
+ return 0;
+ }
+ natmemsize = size + z3size;
+
+ if (z3rtgmem_size) {
+ rtgextra = si.dwPageSize;
+ } else {
+ rtgbarrier = 0;
+ rtgextra = 0;
+ }
+ if (natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize <= natmem_size)
+ break;
+ write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"),
+ natmemsize >> 20, GetLastError (), (changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20);
+ if (!lowmem ()) {
+ write_log (_T("NATMEM: No special area could be allocated (2)!\n"));
+ return 0;
+ }
+ }
+
+#if VAMODE == 1
+
+ p96mem_offset = NULL;
+ p96mem_size = z3rtgmem_size;
+ if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) {
+ p96mem_offset = natmem_offset + natmemsize + rtgbarrier + z3chipbarrier;
+ } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) {
+ p96mem_offset = natmem_offset + getz2rtgaddr ();
+ }
+
+#else
+
+ if (p96mem_offset)
+ VirtualFree (p96mem_offset, 0, MEM_RELEASE);
+ p96mem_offset = NULL;
+ p96mem_size = z3rtgmem_size;
+ if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) {
+ uae_u32 s, l;
+ VirtualFree (natmem_offset, 0, MEM_RELEASE);
+
+ s = 0;
+ l = natmemsize + rtgbarrier + z3chipbarrier;
+ if (!va (s, l, MEM_RESERVE, PAGE_READWRITE))
+ return 0;
+
+ s = natmemsize + rtgbarrier + z3chipbarrier;
+ l = p96mem_size + rtgextra;
+ p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE);
+ if (!p96mem_offset) {
+ currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+ z3rtgmem_size = 0;
+ write_log (_T("NATMEM: failed to allocate special Picasso96 GFX RAM, err=%d\n"), GetLastError ());
+ }
+
+#if 0
+ s = natmemsize + rtgbarrier + z3chipbarrier + p96mem_size + rtgextra + 4096;
+ l = natmem_size - s - 4096;
+ if (natmem_size > l) {
+ if (!va (s, l, MEM_RESERVE, PAGE_READWRITE))
+ return 0;
+ }
+#endif
+
+ } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) {
+
+ uae_u32 s, l;
+ VirtualFree (natmem_offset, 0, MEM_RELEASE);
+ // Chip + Z2Fast
+ s = 0;
+ l = 2 * 1024 * 1024 + changed_prefs.fastmem_size;
+ if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) {
+ currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+ }
+ // After RTG
+ s = 2 * 1024 * 1024 + 8 * 1024 * 1024;
+ l = natmem_size - (2 * 1024 * 1024 + 8 * 1024 * 1024) + si.dwPageSize;
+ if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) {
+ currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+ }
+ // RTG
+ s = getz2rtgaddr ();
+ l = 10 * 1024 * 1024 - getz2rtgaddr ();
+ p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE);
+ if (!p96mem_offset) {
+ currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+ }
+
+ } else {
+
+ VirtualFree (natmem_offset, 0, MEM_RELEASE);
+ if (!VirtualAlloc (natmem_offset, natmem_size, MEM_RESERVE, PAGE_READWRITE)) {
+ write_log (_T("NATMEM: No special area could be reallocated! (1) err=%d\n"), GetLastError ());
+ return 0;
+ }
+ }
+#endif
+ if (!natmem_offset) {
+ write_log (_T("NATMEM: No special area could be allocated! err=%d\n"), GetLastError ());
+ } else {
+ write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"),
+ natmem_offset, (uae_u8*)natmem_offset + natmemsize,
+ natmemsize, natmemsize >> 20);
+ if (changed_prefs.rtgmem_size)
+ write_log (_T("NATMEM: P96 special area: 0x%p-0x%p (%08x %dM)\n"),
+ p96mem_offset, (uae_u8*)p96mem_offset + changed_prefs.rtgmem_size,
+ changed_prefs.rtgmem_size, changed_prefs.rtgmem_size >> 20);
+ canbang = 1;
+ if (p96mem_size)
+ natmem_offset_end = p96mem_offset + p96mem_size;
+ else
+ natmem_offset_end = natmem_offset + natmemsize;
+ }
+
+ return canbang;
+}
+
+bool init_shm (void)
+{
+ static uae_u32 oz3fastmem_size, oz3fastmem2_size;
+ static uae_u32 oz3chipmem_size;
+ static uae_u32 ortgmem_size;
+ static int ortgmem_type;
+
+ if (
+ oz3fastmem_size == changed_prefs.z3fastmem_size &&
+ oz3fastmem2_size == changed_prefs.z3fastmem2_size &&
+ oz3chipmem_size == changed_prefs.z3chipmem_size &&
+ ortgmem_size == changed_prefs.rtgmem_size &&
+ ortgmem_type == changed_prefs.rtgmem_type)
+ return false;
+
+ oz3fastmem_size = changed_prefs.z3fastmem_size;
+ oz3fastmem2_size = changed_prefs.z3fastmem2_size;
+ oz3chipmem_size = changed_prefs.z3chipmem_size;;
+ ortgmem_size = changed_prefs.rtgmem_size;
+ ortgmem_type = changed_prefs.rtgmem_type;
+
+ doinit_shm ();
+
+ resetmem ();
+ clear_shm ();
+
+ memory_hardreset (2);
+ return true;
+}
void mapped_free (uae_u8 *mem)
{
filesysptr = xcalloc (uae_u8, size);
result = filesysptr;
shmids[shmid].attached = result;
+ shmids[shmid].fake = true;
return result;
}
if(!_tcscmp (shmids[shmid].name, _T("custmem1"))) {
result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE);
if (result == NULL) {
result = (void*)-1;
- write_log (_T("VirtualAlloc %08X - %08X %x (%dk) failed %d\n"),
+ write_log (_T("VA %08X - %08X %x (%dk) failed %d\n"),
(uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size,
size, size >> 10, GetLastError ());
} else {
shmids[shmid].attached = result;
- write_log (_T("VirtualAlloc %08X - %08X %x (%dk) ok (%08X)%s\n"),
+ write_log (_T("VA %08X - %08X %x (%dk) ok (%08X)%s\n"),
(uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size,
size, size >> 10, shmaddr, p96special ? _T(" P96") : _T(""));
}
if (shm->mode != PAGE_READONLY)
continue;
if (!VirtualProtect (shm->attached, shm->rosize, protect ? PAGE_READONLY : PAGE_READWRITE, &old)) {
- write_log (_T("VirtualProtect %08X - %08X %x (%dk) failed %d\n"),
+ write_log (_T("VP %08X - %08X %x (%dk) failed %d\n"),
(uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size,
shm->size, shm->size >> 10, GetLastError ());
}
#define IDC_MBRAM2 1051
#define IDC_Z3CHIPMEM 1052
#define IDC_Z3CHIPRAM 1053
+#define IDC_Z3CHIPRAM2 1054
+#define IDC_MAX32RAM 1054
#define IDC_UAEHOME 1070
#define IDC_PICASSOHOME 1071
#define IDC_AMIGAHOME 1072
#define IDC_DF1WPTEXTQ 1794
#define IDC_RTG_Z2Z3 1794
#define IDC_RTG_BUFFERCNT 1795
-#define IDC_RTG_SCALE_ALLOW2 1796
#define IDC_RTG_VBINTERRUPT 1796
#define IDC_INPUTMAPLIST 1797
#define IDC_PORT1_REMAP 1798
CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,194,193,8,10\r
END\r
\r
-IDD_MEMORY DIALOGEX 0, 0, 300, 182\r
+IDD_MEMORY DIALOGEX 0, 0, 300, 205\r
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
EXSTYLE WS_EX_CONTEXTHELP\r
FONT 8, "MS Sans Serif", 0, 0, 0x1\r
BEGIN\r
- GROUPBOX "Memory Settings",IDC_STATIC,14,7,274,97\r
+ GROUPBOX "Memory Settings",IDC_STATIC,14,7,274,117\r
CONTROL "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20\r
EDITTEXT IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY\r
CONTROL "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20\r
EDITTEXT IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY\r
CONTROL "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20\r
EDITTEXT IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY\r
- GROUPBOX "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,110,274,65\r
- RTEXT "Motherboard Fast:",IDC_STATIC,48,126,129,10,SS_CENTERIMAGE\r
- CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,122,59,20\r
- EDITTEXT IDC_MBRAM1,244,125,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Processor Slot Fast:",IDC_STATIC,48,149,129,10,SS_CENTERIMAGE\r
- CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,145,59,20\r
- EDITTEXT IDC_MBRAM2,244,148,34,12,ES_CENTER | ES_READONLY\r
+ GROUPBOX "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,131,274,65\r
+ RTEXT "Motherboard Fast:",IDC_STATIC,48,147,129,10,SS_CENTERIMAGE\r
+ CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,143,59,20\r
+ EDITTEXT IDC_MBRAM1,244,146,34,12,ES_CENTER | ES_READONLY\r
+ RTEXT "Processor Slot Fast:",IDC_STATIC,48,170,129,10,SS_CENTERIMAGE\r
+ CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,166,59,20\r
+ EDITTEXT IDC_MBRAM2,244,169,34,12,ES_CENTER | ES_READONLY\r
RTEXT "Fast:",IDC_STATIC,19,49,32,15,SS_CENTERIMAGE\r
RTEXT "Chip:",IDC_STATIC,19,25,32,15,SS_CENTERIMAGE\r
RTEXT "Slow:",IDC_STATIC,144,25,32,15,SS_CENTERIMAGE\r
CONTROL "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,71,60,20\r
EDITTEXT IDC_Z3CHIPRAM,243,76,34,12,ES_CENTER | ES_READONLY\r
CONTROL "Autoconfig Fast RAM",IDC_FASTMEMAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,76,101,10\r
+ EDITTEXT IDC_MAX32RAM,29,98,249,12,ES_CENTER | ES_READONLY\r
END\r
\r
IDD_CPU DIALOGEX 0, 0, 300, 241\r
hr = IDirectSoundBuffer_SetVolume (s->lpDSBsecondary, vol);
if (FAILED (hr))
write_log (_T("DS: SetVolume(%d) failed: %s\n"), vol, DXError (hr));
- } else if (sd->devicetype == SOUND_DEVICE_WASAPI || sd->devicetype == SOUND_DEVICE_WASAPI_EXCLUSIVE) {
+ } else if (sd->devicetype == SOUND_DEVICE_WASAPI) {
if (s->pAudioVolume) {
float vol = 0.0;
if (volume < 100 && !mute)
s->pavolume = volume;
} else if (sd->devicetype == SOUND_DEVICE_XAUDIO2) {
s->xmaster->SetVolume (mute ? 0.0 : (float)(100 - volume) / 100.0);
+ } else if (sd->devicetype == SOUND_DEVICE_WASAPI_EXCLUSIVE) {
+ sd->softvolume = -1;
+ hr = s->pAudioVolume->SetMasterVolume (1.0, NULL);
+ if (FAILED (hr))
+ write_log (_T("AudioVolume->SetMasterVolume(1.0) failed: %08Xs\n"), hr);
+ if (volume < 100 && !mute) {
+ sd->softvolume = (100 - volume) * 32768 / 100.0;
+ if (sd->softvolume >= 32768)
+ sd->softvolume = -1;
+ }
+ if (mute || volume >= 100)
+ sd->softvolume = 0;
}
+
}
void set_volume (int volume, int mute)
LPWSTR name = NULL;
int rn[4], rncnt;
AUDCLNT_SHAREMODE sharemode;
- int size, v;
+ int v;
- sd->devicetype = SOUND_DEVICE_WASAPI;
+ sd->devicetype = exclusive ? SOUND_DEVICE_WASAPI_EXCLUSIVE : SOUND_DEVICE_WASAPI;
s->wasapiexclusive = exclusive;
if (s->wasapiexclusive)
}
sd->samplesize = sd->channels * 16 / 8;
- size = sd->sndbufsize * sd->samplesize;
- s->snd_configsize = size;
- sd->sndbufsize = size / 32;
- size /= sd->samplesize;
+ s->snd_configsize = sd->sndbufsize * sd->samplesize;
s->bufferFrameCount = (UINT32)( // frames =
1.0 * s->hnsRequestedDuration * // hns *
10000 // (hns / s) /
+ 0.5); // rounding
- if (s->bufferFrameCount < size) {
- s->bufferFrameCount = size;
+ if (s->bufferFrameCount < sd->sndbufsize) {
+ s->bufferFrameCount = sd->sndbufsize;
s->hnsRequestedDuration = // hns =
(REFERENCE_TIME)(
10000.0 * // (hns / ms) *
}
}
#endif
+ sd->sndbufsize = (s->bufferFrameCount / 8) * sd->samplesize;
v = s->bufferFrameCount * sd->samplesize;
v /= 2;
if (sd->sndbufsize > v)
if (size < 64)
size = 64;
+ sdp->softvolume = -1;
num = enumerate_sound_devices ();
if (currprefs.win32_soundcard >= num)
currprefs.win32_soundcard = changed_prefs.win32_soundcard = 0;
return;
if (sd->paused)
return;
+ if (sd->softvolume >= 0) {
+ uae_s16 *p = (uae_s16*)sndbuffer;
+ for (int i = 0; i < sd->sndbufsize / 2; i++) {
+ p[i] = p[i] * sd->softvolume / 32768;
+ }
+ }
if (type == SOUND_DEVICE_AL)
finish_sound_buffer_al (sd, sndbuffer);
else if (type == SOUND_DEVICE_DS)
int samplesize;
int sndbufsize;
int sndbufframes;
+ int softvolume;
struct sound_dp *data;
};
#define MAX_SHMID 256
-extern uae_u8 *natmem_offset, *natmem_offset_end;
+extern uae_u8 *natmem_offset;
typedef int key_t;
typedef USHORT ushort;
/* One shmid data structure for each shared memory segment in the system. */
struct shmid_ds {
- key_t key;
+ key_t key;
size_t size;
size_t rosize;
- void *addr;
- TCHAR name[MAX_PATH];
- void *attached;
- int mode;
- void *natmembase;
+ void *addr;
+ TCHAR name[MAX_PATH];
+ void *attached;
+ int mode;
+ void *natmembase;
+ bool fake;
};
int mprotect (void *addr, size_t len, int prot);
int shmdt (const void *shmaddr);
int shmget (key_t key, size_t size, int shmflg, const TCHAR*);
int shmctl (int shmid, int cmd, struct shmid_ds *buf);
-int init_shm (void);
+bool init_shm (void);
#define PROT_READ 0x01
#define PROT_WRITE 0x02
extern int log_bsd;
extern int inputdevice_logging;
extern int vsync_modechangetimeout;
-
+extern int forcedframelatency;
extern DWORD_PTR cpu_affinity, cpu_paffinity;
static DWORD_PTR original_affinity = -1;
extraframewait = getval (np);
return 2;
}
+ if (!_tcscmp (arg, _T("framelatency"))) {
+ forcedframelatency = getval (np);
+ return 2;
+ }
#ifdef RETROPLATFORM
if (!_tcscmp (arg, _T("rphost"))) {
rp_param = my_strdup (np);
for (i = 0; argv2[i]; i++)
write_log (_T("%d: '%s'\n"), i + 1, argv2[i]);
}
- if (WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
+ if (preinit_shm () && WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
DWORD i;
#ifdef RETROPLATFORM
#define LANG_DLL 1
//#define WINUAEBETA _T("")
-#define WINUAEBETA _T("6")
-#define WINUAEDATE MAKEBD(2012, 7, 10)
+#define WINUAEBETA _T("7")
+#define WINUAEDATE MAKEBD(2012, 7, 20)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
#define WINUAEREV _T("")
if (h) {
ShowWindow (h, SW_HIDE);
DestroyWindow (h);
+ blankwindows[i] = NULL;
}
}
}
ew (hDlg, IDC_MBRAM2, z3);
ew (hDlg, IDC_MBMEM2, z3);
- ew (hDlg, IDC_RTG_Z2Z3, full_property_sheet);
+ ew (hDlg, IDC_RTG_Z2Z3, z3);
ew (hDlg, IDC_RTG_8BIT, rtg);
ew (hDlg, IDC_RTG_16BIT, rtg);
ew (hDlg, IDC_RTG_24BIT, rtg);
ew (hDlg, IDC_RTG_DISPLAYSELECT, rtg2);
}
+extern uae_u32 natmem_size;
+static void setmax32bitram (HWND hDlg)
+{
+ TCHAR tmp[100];
+ uae_u32 size;
+
+ size = workprefs.z3fastmem_size + workprefs.z3fastmem2_size +
+ workprefs.z3chipmem_size + workprefs.rtgmem_size;
+ if (workprefs.z3chipmem_size && workprefs.z3fastmem_size)
+ size += 16 * 1024 * 1024;
+ if ((workprefs.z3fastmem_size || workprefs.z3chipmem_size) && workprefs.rtgmem_size)
+ size += 16 * 1024 * 1024;
+
+ _stprintf (tmp, L"Total configured 32-bit RAM: %dM, reserved: %dM",
+ size / (1024 * 1024), (natmem_size - 256 * 1024 * 1024) / (1024 * 1024));
+ SetDlgItemText (hDlg, IDC_MAX32RAM, tmp);
+}
+
+
static int manybits (int v, int mask)
{
int i, cnt;
}
SendDlgItemMessage (hDlg, IDC_MBMEM2, TBM_SETPOS, TRUE, mem_size);
SetDlgItemText (hDlg, IDC_MBRAM2, memsize_names[msi_gfx[mem_size]]);
+
+ setmax32bitram (hDlg);
+
}
static void fix_values_memorydlg (void)
SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_RESETCONTENT, 0, 0);
WIN32GUI_LoadUIString (IDS_HF_FS_CUSTOM, tmp, sizeof (tmp) / sizeof (TCHAR));
SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("OFS/FFS/RDB"));
+ SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("PFS3"));
+ SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("PDS3"));
SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("SFS"));
SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)tmp);
SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_SETCURSEL, 0, 0);
static void sethfdostype (HWND hDlg, int idx)
{
- if (idx == 1)
+ switch (idx)
+ {
+ case 1:
+ SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x50465300"));
+ break;
+ case 2:
+ SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x50445300"));
+ break;
+ case 3:
SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x53465300"));
- else
+ break;
+ default:
SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T(""));
+ break;
+ }
}
static void hardfile_testrdb (HWND hDlg, struct hfdlg_vals *hdf)
}
static RECT dialog_rect;
+static bool dodialogmousemove (void)
+{
+ if (full_property_sheet || isfullscreen () <= 0)
+ return false;
+ for (int i = 0; Displays[i].monitorid; i++) {
+ struct MultiDisplay *md = &Displays[i];
+ if (md->rect.right - md->rect.left >= 640 && md->rect.bottom - md->rect.top >= 480)
+ return false;
+ }
+ return true;
+}
static void dialogmousemove (HWND hDlg)
{
int xstart, ystart;
MONITORINFOEX pmi;
- if (full_property_sheet || isfullscreen () <= 0)
+ if (!dodialogmousemove ())
return;
pmi.cbSize = sizeof (pmi);
GetMonitorInfo (MonitorFromWindow (hAmigaWnd, MONITOR_DEFAULTTOPRIMARY), (LPMONITORINFO)&pmi);
- restore only single input target to default.
+Beta 7:
+
+- Directory filesystem 64-bit seek (ACTION_CHANGE_FILE_POSITION64) broke in 240b27
+- -nodirectinput mode was always enabled. (b6)
+- -nodirectinput does not anymore disable mouse/keyboard directinput enumeration if rawinput fails to initialize.
+- Syncronize clock enabled and loading new config crashed in some situations (b6)
+- Blitter emulation didn't leave correct data in blitter's B data register after linedraw finished, fixes
+ No Way demo by Academy that seems to use wrong minterm that requires correct static value in B data register.
+- WASAPI exclusive software volume control support. It seems normal WASAPI volume control does nothing in exclusive mode.
+- Added support for unimplemented integer instructions to 68k emulation code generators. Not yet in use.
+ (This is easy part, unimplemented floating point support is very difficult because it requires special FPU stack frame)
+
+- Experimental memory space rewrite. Now WinUAE reserves address space as much as possible (~1.6G if 64-bit OS, 512M if 32-bit, note
+ that this is only reserved space, actual memory is not yet allocated). Allows more stable on the fly memory size changes.
+ It is not guaranteed that this is safe to use and won't cause side-effects or other bad behavior or loss of performance,
+ please test and report.
+
Beta 6:
- PC raw MFM decoding improved (uaeunp, Amiga/ST/PC multiformat PC images didn't decode properly)
% 2: 68020
% 3: 68030
% 4: 68040
-% 5: 68060 (not used to produce a cputbl)
+% 5: 68060
% [Everything from 68020 possibly allows for FPU emulation]
+% Unimplemented after:
+% 0: Normal
+% 3: Not implemented in 68030 and later
+% 4: Not implemented in 68040 and later
+% 5: Not implemented in 68060
% privilege level 0: not privileged
% 1: unprivileged only on 68000 (check regs.s)
% 2: privileged (check regs.s)
% instruction
%
-0000 0000 0011 1100:00:XNZVC:XNZVC:10: ORSR.B #1
-0000 0000 0111 1100:02:?????:?????:10: ORSR.W #1
-0000 0zz0 11ss sSSS:20:?????:?????:11: CHK2.z #1,s[!Dreg,Areg,Aipi,Apdi,Immd]
-0000 0000 zzdd dDDD:00:-NZ00:-----:13: OR.z #z,d[!Areg]
-0000 0010 0011 1100:00:XNZVC:XNZVC:10: ANDSR.B #1
-0000 0010 0111 1100:02:?????:?????:10: ANDSR.W #1
-0000 0010 zzdd dDDD:00:-NZ00:-----:13: AND.z #z,d[!Areg]
-0000 0100 zzdd dDDD:00:XNZVC:-----:13: SUB.z #z,d[!Areg]
-0000 0110 zzdd dDDD:00:XNZVC:-----:13: ADD.z #z,d[!Areg]
-0000 0110 11ss sSSS:20:?????:?????:10: CALLM s[!Dreg,Areg,Aipi,Apdi,Immd]
-0000 0110 11ss sSSS:20:?????:?????:10: RTM s[Dreg,Areg]
-0000 1000 00ss sSSS:00:--Z--:-----:11: BTST #1,s[!Areg]
-0000 1000 01ss sSSS:00:--Z--:-----:13: BCHG #1,s[!Areg,Immd]
-0000 1000 10ss sSSS:00:--Z--:-----:13: BCLR #1,s[!Areg,Immd]
-0000 1000 11ss sSSS:00:--Z--:-----:13: BSET #1,s[!Areg,Immd]
-0000 1010 0011 1100:00:XNZVC:XNZVC:10: EORSR.B #1
-0000 1010 0111 1100:02:?????:?????:10: EORSR.W #1
-0000 1010 zzdd dDDD:00:-NZ00:-----:13: EOR.z #z,d[!Areg]
-0000 1100 zzss sSSS:00:-NZVC:-----:11: CMP.z #z,s[!Areg,Immd]
+0000 0000 0011 1100:000:XNZVC:XNZVC:10: ORSR.B #1
+0000 0000 0111 1100:002:?????:?????:10: ORSR.W #1
+0000 0zz0 11ss sSSS:250:?????:?????:11: CHK2.z #1,s[!Dreg,Areg,Aipi,Apdi,Immd]
+0000 0000 zzdd dDDD:000:-NZ00:-----:13: OR.z #z,d[!Areg]
+0000 0010 0011 1100:000:XNZVC:XNZVC:10: ANDSR.B #1
+0000 0010 0111 1100:002:?????:?????:10: ANDSR.W #1
+0000 0010 zzdd dDDD:000:-NZ00:-----:13: AND.z #z,d[!Areg]
+0000 0100 zzdd dDDD:000:XNZVC:-----:13: SUB.z #z,d[!Areg]
+0000 0110 zzdd dDDD:000:XNZVC:-----:13: ADD.z #z,d[!Areg]
+0000 0110 11ss sSSS:230:?????:?????:10: CALLM s[!Dreg,Areg,Aipi,Apdi,Immd]
+0000 0110 11ss sSSS:230:?????:?????:10: RTM s[Dreg,Areg]
+0000 1000 00ss sSSS:000:--Z--:-----:11: BTST #1,s[!Areg]
+0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG #1,s[!Areg,Immd]
+0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR #1,s[!Areg,Immd]
+0000 1000 11ss sSSS:000:--Z--:-----:13: BSET #1,s[!Areg,Immd]
+0000 1010 0011 1100:000:XNZVC:XNZVC:10: EORSR.B #1
+0000 1010 0111 1100:002:?????:?????:10: EORSR.W #1
+0000 1010 zzdd dDDD:000:-NZ00:-----:13: EOR.z #z,d[!Areg]
+0000 1100 zzss sSSS:000:-NZVC:-----:11: CMP.z #z,s[!Areg,Immd]
-0000 1010 11ss sSSS:20:?????:?????:13: CAS.B #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1100 11ss sSSS:20:?????:?????:13: CAS.W #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1100 1111 1100:20:?????:?????:10: CAS2.W #2
-0000 1110 zzss sSSS:22:?????:?????:13: MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1110 11ss sSSS:20:?????:?????:13: CAS.L #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1110 1111 1100:20:?????:?????:10: CAS2.L #2
+0000 1010 11ss sSSS:200:?????:?????:13: CAS.B #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1100 11ss sSSS:200:?????:?????:13: CAS.W #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1100 1111 1100:250:?????:?????:10: CAS2.W #2
+0000 1110 zzss sSSS:202:?????:?????:13: MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1110 11ss sSSS:250:?????:?????:13: CAS.L #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1110 1111 1100:250:?????:?????:10: CAS2.L #2
-0000 rrr1 00dd dDDD:00:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr
-0000 rrr1 01dd dDDD:00:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr
-0000 rrr1 10dd dDDD:00:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16]
-0000 rrr1 11dd dDDD:00:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16]
-0000 rrr1 00ss sSSS:00:--Z--:-----:11: BTST Dr,s[!Areg]
-0000 rrr1 01ss sSSS:00:--Z--:-----:13: BCHG Dr,s[!Areg,Immd]
-0000 rrr1 10ss sSSS:00:--Z--:-----:13: BCLR Dr,s[!Areg,Immd]
-0000 rrr1 11ss sSSS:00:--Z--:-----:13: BSET Dr,s[!Areg,Immd]
+0000 rrr1 00dd dDDD:000:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr
+0000 rrr1 01dd dDDD:000:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr
+0000 rrr1 10dd dDDD:000:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16]
+0000 rrr1 11dd dDDD:000:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16]
+0000 rrr1 00ss sSSS:000:--Z--:-----:11: BTST Dr,s[!Areg]
+0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG Dr,s[!Areg,Immd]
+0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR Dr,s[!Areg,Immd]
+0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET Dr,s[!Areg,Immd]
-0001 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.B s,d[!Areg]
-0010 DDDd ddss sSSS:00:-----:-----:12: MOVEA.L s,d[Areg]
-0010 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.L s,d[!Areg]
-0011 DDDd ddss sSSS:00:-----:-----:12: MOVEA.W s,d[Areg]
-0011 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.W s,d[!Areg]
+0001 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.B s,d[!Areg]
+0010 DDDd ddss sSSS:000:-----:-----:12: MOVEA.L s,d[Areg]
+0010 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.L s,d[!Areg]
+0011 DDDd ddss sSSS:000:-----:-----:12: MOVEA.W s,d[Areg]
+0011 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.W s,d[!Areg]
-0100 0000 zzdd dDDD:00:XxZxC:X-Z--:30: NEGX.z d[!Areg]
-0100 0000 11dd dDDD:01:?????:?????:10: MVSR2.W d[!Areg]
-0100 0010 zzdd dDDD:00:-0100:-----:20: CLR.z d[!Areg]
-0100 0010 11dd dDDD:10:?????:?????:10: MVSR2.B d[!Areg]
-0100 0100 zzdd dDDD:00:XNZVC:-----:30: NEG.z d[!Areg]
-0100 0100 11ss sSSS:00:XNZVC:-----:10: MV2SR.B s[!Areg]
-0100 0110 zzdd dDDD:00:-NZ00:-----:30: NOT.z d[!Areg]
-0100 0110 11ss sSSS:02:?????:?????:10: MV2SR.W s[!Areg]
-0100 1000 0000 1rrr:20:-----:-----:31: LINK.L Ar,#2
-0100 1000 00dd dDDD:00:X?Z?C:X-Z--:30: NBCD.B d[!Areg]
-0100 1000 0100 1kkk:20:?????:?????:10: BKPT #k
-0100 1000 01ss sSSS:00:-NZ00:-----:30: SWAP.W s[Dreg]
-0100 1000 01ss sSSS:00:-----:-----:00: PEA.L s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 1000 10dd dDDD:00:-NZ00:-----:30: EXT.W d[Dreg]
-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:20:-NZ00:-----:30: EXT.B d[Dreg]
-0100 1010 zzss sSSS:00:-NZ00:-----:10: TST.z s
-0100 1010 11dd dDDD:00:?????:?????:30: TAS.B d[!Areg]
-0100 1010 1111 1100:00:?????:?????:00: ILLEGAL
-0100 1100 00ss sSSS:20:-NZVC:-----:13: MULL.L #1,s[!Areg]
-0100 1100 01ss sSSS:20:?????:?????:13: DIVL.L #1,s[!Areg]
-0100 1100 10ss sSSS:00:-----:-----:01: MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]
-0100 1100 11ss sSSS:00:-----:-----:01: MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]
-0100 1110 0100 JJJJ:00:-----:XNZVC:10: TRAP #J
-0100 1110 0101 0rrr:00:-----:-----:31: LINK.W Ar,#1
-0100 1110 0101 1rrr:00:-----:-----:30: UNLK.L Ar
-0100 1110 0110 0rrr:02:-----:-----:10: MVR2USP.L Ar
-0100 1110 0110 1rrr:02:-----:-----:20: MVUSP2R.L Ar
-0100 1110 0111 0000:02:-----:-----:00: RESET
-0100 1110 0111 0001:00:-----:-----:00: NOP
-0100 1110 0111 0010:02:XNZVC:-----:10: STOP #1
-0100 1110 0111 0011:02:XNZVC:-----:00: RTE
-0100 1110 0111 0100:00:?????:?????:10: RTD #1
-0100 1110 0111 0101:00:-----:-----:00: RTS
-0100 1110 0111 0110:00:-----:XNZVC:00: TRAPV
-0100 1110 0111 0111:00:XNZVC:-----:00: RTR
-0100 1110 0111 1010:12:?????:?????:10: MOVEC2 #1
-0100 1110 0111 1011:12:?????:?????:10: MOVE2C #1
-0100 1110 10ss sSSS:00://///://///:80: JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 rrr1 00ss sSSS:20:?????:?????:11: CHK.L s[!Areg],Dr
-0100 rrr1 10ss sSSS:00:?????:?????:11: CHK.W s[!Areg],Dr
-0100 1110 11ss sSSS:00://///://///:80: JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 rrr1 11ss sSSS:00:-----:-----:02: LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar
+0100 0000 zzdd dDDD:000:XxZxC:X-Z--:30: NEGX.z d[!Areg]
+0100 0000 11dd dDDD:001:?????:?????:10: MVSR2.W d[!Areg]
+0100 0010 zzdd dDDD:000:-0100:-----:20: CLR.z d[!Areg]
+0100 0010 11dd dDDD:100:?????:?????:10: MVSR2.B d[!Areg]
+0100 0100 zzdd dDDD:000:XNZVC:-----:30: NEG.z d[!Areg]
+0100 0100 11ss sSSS:000:XNZVC:-----:10: MV2SR.B s[!Areg]
+0100 0110 zzdd dDDD:000:-NZ00:-----:30: NOT.z d[!Areg]
+0100 0110 11ss sSSS:002:?????:?????:10: MV2SR.W s[!Areg]
+0100 1000 0000 1rrr:200:-----:-----:31: LINK.L Ar,#2
+0100 1000 00dd dDDD:000:X?Z?C:X-Z--:30: NBCD.B d[!Areg]
+0100 1000 0100 1kkk:200:?????:?????:10: BKPT #k
+0100 1000 01ss sSSS:000:-NZ00:-----:30: SWAP.W s[Dreg]
+0100 1000 01ss sSSS:000:-----:-----:00: PEA.L s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 1000 10dd dDDD:000:-NZ00:-----:30: EXT.W d[Dreg]
+0100 1000 10dd dDDD:000:-----:-----:02: MVMLE.W #1,d[!Dreg,Areg,Aipi]
+0100 1000 11dd dDDD:000:-NZ00:-----:30: EXT.L d[Dreg]
+0100 1000 11dd dDDD:000:-----:-----:02: MVMLE.L #1,d[!Dreg,Areg,Aipi]
+0100 1001 11dd dDDD:200:-NZ00:-----:30: EXT.B d[Dreg]
+0100 1010 zzss sSSS:000:-NZ00:-----:10: TST.z s
+0100 1010 11dd dDDD:000:?????:?????:30: TAS.B d[!Areg]
+0100 1010 1111 1100:000:?????:?????:00: ILLEGAL
+0100 1100 00ss sSSS:250:-NZVC:-----:13: MULL.L #1,s[!Areg]
+0100 1100 01ss sSSS:250:?????:?????:13: DIVL.L #1,s[!Areg]
+0100 1100 10ss sSSS:000:-----:-----:01: MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]
+0100 1100 11ss sSSS:000:-----:-----:01: MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]
+0100 1110 0100 JJJJ:000:-----:XNZVC:10: TRAP #J
+0100 1110 0101 0rrr:000:-----:-----:31: LINK.W Ar,#1
+0100 1110 0101 1rrr:000:-----:-----:30: UNLK.L Ar
+0100 1110 0110 0rrr:002:-----:-----:10: MVR2USP.L Ar
+0100 1110 0110 1rrr:002:-----:-----:20: MVUSP2R.L Ar
+0100 1110 0111 0000:002:-----:-----:00: RESET
+0100 1110 0111 0001:000:-----:-----:00: NOP
+0100 1110 0111 0010:002:XNZVC:-----:10: STOP #1
+0100 1110 0111 0011:002:XNZVC:-----:00: RTE
+0100 1110 0111 0100:000:?????:?????:10: RTD #1
+0100 1110 0111 0101:000:-----:-----:00: RTS
+0100 1110 0111 0110:000:-----:XNZVC:00: TRAPV
+0100 1110 0111 0111:000:XNZVC:-----:00: RTR
+0100 1110 0111 1010:102:?????:?????:10: MOVEC2 #1
+0100 1110 0111 1011:102:?????:?????:10: MOVE2C #1
+0100 1110 10ss sSSS:000://///://///:80: JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 rrr1 00ss sSSS:200:?????:?????:11: CHK.L s[!Areg],Dr
+0100 rrr1 10ss sSSS:000:?????:?????:11: CHK.W s[!Areg],Dr
+0100 1110 11ss sSSS:000://///://///:80: JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 rrr1 11ss sSSS:000:-----:-----:02: LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar
-0101 jjj0 01dd dDDD:00:-----:-----:13: ADDA.W #j,d[Areg]
-0101 jjj0 10dd dDDD:00:-----:-----:13: ADDA.L #j,d[Areg]
-0101 jjj0 zzdd dDDD:00:XNZVC:-----:13: ADD.z #j,d[!Areg]
-0101 jjj1 01dd dDDD:00:-----:-----:13: SUBA.W #j,d[Areg]
-0101 jjj1 10dd dDDD:00:-----:-----:13: SUBA.L #j,d[Areg]
-0101 jjj1 zzdd dDDD:00:XNZVC:-----:13: SUB.z #j,d[!Areg]
-0101 cccc 1100 1rrr:00:-----:-++++:31: DBcc.W Dr,#1
-0101 cccc 11dd dDDD:00:-----:-++++:20: Scc.B d[!Areg]
-0101 cccc 1111 1010:20:?????:?????:10: TRAPcc #1
-0101 cccc 1111 1011:20:?????:?????:10: TRAPcc #2
-0101 cccc 1111 1100:20:?????:?????:00: TRAPcc
+0101 jjj0 01dd dDDD:000:-----:-----:13: ADDA.W #j,d[Areg]
+0101 jjj0 10dd dDDD:000:-----:-----:13: ADDA.L #j,d[Areg]
+0101 jjj0 zzdd dDDD:000:XNZVC:-----:13: ADD.z #j,d[!Areg]
+0101 jjj1 01dd dDDD:000:-----:-----:13: SUBA.W #j,d[Areg]
+0101 jjj1 10dd dDDD:000:-----:-----:13: SUBA.L #j,d[Areg]
+0101 jjj1 zzdd dDDD:000:XNZVC:-----:13: SUB.z #j,d[!Areg]
+0101 cccc 1100 1rrr:000:-----:-++++:31: DBcc.W Dr,#1
+0101 cccc 11dd dDDD:000:-----:-++++:20: Scc.B d[!Areg]
+0101 cccc 1111 1010:200:?????:?????:10: TRAPcc #1
+0101 cccc 1111 1011:200:?????:?????:10: TRAPcc #2
+0101 cccc 1111 1100:200:?????:?????:00: TRAPcc
% Bxx.L is 68020 only, but setting the CPU level to 2 would give illegal
% instruction exceptions when compiling a 68000 only emulation, which isn't
% what we want either.
-0110 0001 0000 0000:00://///://///:40: BSR.W #1
-0110 0001 IIII IIII:00://///://///:40: BSR.B #i
-0110 0001 1111 1111:00://///://///:40: BSR.L #2
-0110 CCCC 0000 0000:00:-----:-++++:40: Bcc.W #1
-0110 CCCC IIII IIII:00:-----:-++++:40: Bcc.B #i
-0110 CCCC 1111 1111:00:-----:-++++:40: Bcc.L #2
+0110 0001 0000 0000:000://///://///:40: BSR.W #1
+0110 0001 IIII IIII:000://///://///:40: BSR.B #i
+0110 0001 1111 1111:000://///://///:40: BSR.L #2
+0110 CCCC 0000 0000:000:-----:-++++:40: Bcc.W #1
+0110 CCCC IIII IIII:000:-----:-++++:40: Bcc.B #i
+0110 CCCC 1111 1111:000:-----:-++++:40: Bcc.L #2
-0111 rrr0 iiii iiii:00:-NZ00:-----:12: MOVE.L #i,Dr
+0111 rrr0 iiii iiii:000:-NZ00:-----:12: MOVE.L #i,Dr
-1000 rrr0 zzss sSSS:00:-NZ00:-----:13: OR.z s[!Areg],Dr
-1000 rrr0 11ss sSSS:00:?????:?????:13: DIVU.W s[!Areg],Dr
-1000 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: SBCD.B d[Dreg],Dr
-1000 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: SBCD.B d[Areg-Apdi],Arp
-1000 rrr1 zzdd dDDD:00:-NZ00:-----:13: OR.z Dr,d[!Areg,Dreg]
-1000 rrr1 01dd dDDD:20:?????:?????:12: PACK d[Dreg],Dr
-1000 rrr1 01dd dDDD:20:?????:?????:12: PACK d[Areg-Apdi],Arp
-1000 rrr1 10dd dDDD:20:?????:?????:12: UNPK d[Dreg],Dr
-1000 rrr1 10dd dDDD:20:?????:?????:12: UNPK d[Areg-Apdi],Arp
-1000 rrr1 11ss sSSS:00:?????:?????:13: DIVS.W s[!Areg],Dr
+1000 rrr0 zzss sSSS:000:-NZ00:-----:13: OR.z s[!Areg],Dr
+1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[!Areg],Dr
+1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Dreg],Dr
+1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Areg-Apdi],Arp
+1000 rrr1 zzdd dDDD:000:-NZ00:-----:13: OR.z Dr,d[!Areg,Dreg]
+1000 rrr1 01dd dDDD:200:?????:?????:12: PACK d[Dreg],Dr
+1000 rrr1 01dd dDDD:200:?????:?????:12: PACK d[Areg-Apdi],Arp
+1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK d[Dreg],Dr
+1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK d[Areg-Apdi],Arp
+1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[!Areg],Dr
-1001 rrr0 zzss sSSS:00:XNZVC:-----:13: SUB.z s,Dr
-1001 rrr0 11ss sSSS:00:-----:-----:13: SUBA.W s,Ar
-1001 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: SUBX.z d[Dreg],Dr
-1001 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: SUBX.z d[Areg-Apdi],Arp
-1001 rrr1 zzdd dDDD:00:XNZVC:-----:13: SUB.z Dr,d[!Areg,Dreg]
-1001 rrr1 11ss sSSS:00:-----:-----:13: SUBA.L s,Ar
+1001 rrr0 zzss sSSS:000:XNZVC:-----:13: SUB.z s,Dr
+1001 rrr0 11ss sSSS:000:-----:-----:13: SUBA.W s,Ar
+1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z d[Dreg],Dr
+1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z d[Areg-Apdi],Arp
+1001 rrr1 zzdd dDDD:000:XNZVC:-----:13: SUB.z Dr,d[!Areg,Dreg]
+1001 rrr1 11ss sSSS:000:-----:-----:13: SUBA.L s,Ar
-1011 rrr0 zzss sSSS:00:-NZVC:-----:11: CMP.z s,Dr
-1011 rrr0 11ss sSSS:00:-NZVC:-----:11: CMPA.W s,Ar
-1011 rrr1 11ss sSSS:00:-NZVC:-----:11: CMPA.L s,Ar
-1011 rrr1 zzdd dDDD:00:-NZVC:-----:11: CMPM.z d[Areg-Aipi],ArP
-1011 rrr1 zzdd dDDD:00:-NZ00:-----:13: EOR.z Dr,d[!Areg]
+1011 rrr0 zzss sSSS:000:-NZVC:-----:11: CMP.z s,Dr
+1011 rrr0 11ss sSSS:000:-NZVC:-----:11: CMPA.W s,Ar
+1011 rrr1 11ss sSSS:000:-NZVC:-----:11: CMPA.L s,Ar
+1011 rrr1 zzdd dDDD:000:-NZVC:-----:11: CMPM.z d[Areg-Aipi],ArP
+1011 rrr1 zzdd dDDD:000:-NZ00:-----:13: EOR.z Dr,d[!Areg]
-1100 rrr0 zzss sSSS:00:-NZ00:-----:13: AND.z s[!Areg],Dr
-1100 rrr0 11ss sSSS:00:-NZ00:-----:13: MULU.W s[!Areg],Dr
-1100 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: ABCD.B d[Dreg],Dr
-1100 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: ABCD.B d[Areg-Apdi],Arp
-1100 rrr1 zzdd dDDD:00:-NZ00:-----:13: AND.z Dr,d[!Areg,Dreg]
-1100 rrr1 01dd dDDD:00:-----:-----:33: EXG.L Dr,d[Dreg]
-1100 rrr1 01dd dDDD:00:-----:-----:33: EXG.L Ar,d[Areg]
-1100 rrr1 10dd dDDD:00:-----:-----:33: EXG.L Dr,d[Areg]
-1100 rrr1 11ss sSSS:00:-NZ00:-----:13: MULS.W s[!Areg],Dr
+1100 rrr0 zzss sSSS:000:-NZ00:-----:13: AND.z s[!Areg],Dr
+1100 rrr0 11ss sSSS:000:-NZ00:-----:13: MULU.W s[!Areg],Dr
+1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Dreg],Dr
+1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Areg-Apdi],Arp
+1100 rrr1 zzdd dDDD:000:-NZ00:-----:13: AND.z Dr,d[!Areg,Dreg]
+1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L Dr,d[Dreg]
+1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L Ar,d[Areg]
+1100 rrr1 10dd dDDD:000:-----:-----:33: EXG.L Dr,d[Areg]
+1100 rrr1 11ss sSSS:000:-NZ00:-----:13: MULS.W s[!Areg],Dr
-1101 rrr0 zzss sSSS:00:XNZVC:-----:13: ADD.z s,Dr
-1101 rrr0 11ss sSSS:00:-----:-----:13: ADDA.W s,Ar
-1101 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: ADDX.z d[Dreg],Dr
-1101 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: ADDX.z d[Areg-Apdi],Arp
-1101 rrr1 zzdd dDDD:00:XNZVC:-----:13: ADD.z Dr,d[!Areg,Dreg]
-1101 rrr1 11ss sSSS:00:-----:-----:13: ADDA.L s,Ar
+1101 rrr0 zzss sSSS:000:XNZVC:-----:13: ADD.z s,Dr
+1101 rrr0 11ss sSSS:000:-----:-----:13: ADDA.W s,Ar
+1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z d[Dreg],Dr
+1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z d[Areg-Apdi],Arp
+1101 rrr1 zzdd dDDD:000:XNZVC:-----:13: ADD.z Dr,d[!Areg,Dreg]
+1101 rrr1 11ss sSSS:000:-----:-----:13: ADDA.L s,Ar
-1110 jjjf zz00 0RRR:00:XNZVC:-----:13: ASf.z #j,DR
-1110 jjjf zz00 1RRR:00:XNZ0C:-----:13: LSf.z #j,DR
-1110 jjjf zz01 0RRR:00:XNZ0C:X----:13: ROXf.z #j,DR
-1110 jjjf zz01 1RRR:00:-NZ0C:-----:13: ROf.z #j,DR
-1110 rrrf zz10 0RRR:00:XNZVC:X----:13: ASf.z Dr,DR
-1110 rrrf zz10 1RRR:00:XNZ0C:X----:13: LSf.z Dr,DR
-1110 rrrf zz11 0RRR:00:XNZ0C:X----:13: ROXf.z Dr,DR
-1110 rrrf zz11 1RRR:00:-NZ0C:-----:13: ROf.z Dr,DR
-1110 000f 11dd dDDD:00:XNZVC:-----:13: ASfW.W d[!Dreg,Areg]
-1110 001f 11dd dDDD:00:XNZ0C:-----:13: LSfW.W d[!Dreg,Areg]
-1110 010f 11dd dDDD:00:XNZ0C:X----:13: ROXfW.W d[!Dreg,Areg]
-1110 011f 11dd dDDD:00:-NZ0C:-----:13: ROfW.W d[!Dreg,Areg]
+1110 jjjf zz00 0RRR:000:XNZVC:-----:13: ASf.z #j,DR
+1110 jjjf zz00 1RRR:000:XNZ0C:-----:13: LSf.z #j,DR
+1110 jjjf zz01 0RRR:000:XNZ0C:X----:13: ROXf.z #j,DR
+1110 jjjf zz01 1RRR:000:-NZ0C:-----:13: ROf.z #j,DR
+1110 rrrf zz10 0RRR:000:XNZVC:X----:13: ASf.z Dr,DR
+1110 rrrf zz10 1RRR:000:XNZ0C:X----:13: LSf.z Dr,DR
+1110 rrrf zz11 0RRR:000:XNZ0C:X----:13: ROXf.z Dr,DR
+1110 rrrf zz11 1RRR:000:-NZ0C:-----:13: ROf.z Dr,DR
+1110 000f 11dd dDDD:000:XNZVC:-----:13: ASfW.W d[!Dreg,Areg]
+1110 001f 11dd dDDD:000:XNZ0C:-----:13: LSfW.W d[!Dreg,Areg]
+1110 010f 11dd dDDD:000:XNZ0C:X----:13: ROXfW.W d[!Dreg,Areg]
+1110 011f 11dd dDDD:000:-NZ0C:-----:13: ROfW.W d[!Dreg,Areg]
-1110 1000 11ss sSSS:20:?????:?????:11: BFTST #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1001 11ss sSSS:20:?????:?????:11: BFEXTU #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1010 11ss sSSS:20:?????:?????:13: BFCHG #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1011 11ss sSSS:20:?????:?????:11: BFEXTS #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1100 11ss sSSS:20:?????:?????:13: BFCLR #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1101 11ss sSSS:20:?????:?????:11: BFFFO #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1110 11ss sSSS:20:?????:?????:13: BFSET #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1111 11ss sSSS:20:?????:?????:13: BFINS #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1000 11ss sSSS:200:?????:?????:11: BFTST #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1001 11ss sSSS:200:?????:?????:11: BFEXTU #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1010 11ss sSSS:200:?????:?????:13: BFCHG #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1011 11ss sSSS:200:?????:?????:11: BFEXTS #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1100 11ss sSSS:200:?????:?????:13: BFCLR #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1101 11ss sSSS:200:?????:?????:11: BFFFO #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1110 11ss sSSS:200:?????:?????:13: BFSET #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1111 11ss sSSS:200:?????:?????:13: BFINS #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
% floating point co processor
-1111 0010 00ss sSSS:20:?????:?????:11: FPP #1,s
-1111 0010 01ss sSSS:20:?????:?????:11: FDBcc #1,s[Areg-Dreg]
-1111 0010 01ss sSSS:20:?????:?????:11: FScc #1,s[!Areg,Immd,PC8r,PC16]
-1111 0010 0111 1010:20:?????:?????:10: FTRAPcc #1
-1111 0010 0111 1011:20:?????:?????:10: FTRAPcc #2
-1111 0010 0111 1100:20:?????:?????:00: FTRAPcc
-1111 0010 10KK KKKK:20:?????:?????:11: FBcc #K,#1
-1111 0010 11KK KKKK:20:?????:?????:11: FBcc #K,#2
-1111 0011 00ss sSSS:22:?????:?????:20: FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]
-1111 0011 01ss sSSS:22:?????:?????:10: FRESTORE s[!Dreg,Areg,Apdi,Immd]
+1111 0010 00ss sSSS:200:?????:?????:11: FPP #1,s
+1111 0010 01ss sSSS:200:?????:?????:11: FDBcc #1,s[Areg-Dreg]
+1111 0010 01ss sSSS:200:?????:?????:11: FScc #1,s[!Areg,Immd,PC8r,PC16]
+1111 0010 0111 1010:200:?????:?????:10: FTRAPcc #1
+1111 0010 0111 1011:200:?????:?????:10: FTRAPcc #2
+1111 0010 0111 1100:200:?????:?????:00: FTRAPcc
+1111 0010 10KK KKKK:200:?????:?????:11: FBcc #K,#1
+1111 0010 11KK KKKK:200:?????:?????:11: FBcc #K,#2
+1111 0011 00ss sSSS:202:?????:?????:20: FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]
+1111 0011 01ss sSSS:202:?????:?????:10: FRESTORE s[!Dreg,Areg,Apdi,Immd]
% 68030 MMU (allowed addressing modes not checked!)
-1111 0000 00ss sSSS:32:?????:?????:11: MMUOP030 s[Aind,Ad16,Ad8r,absl,absw],#1
+1111 0000 00ss sSSS:342:?????:?????:11: MMUOP030 s[Aind,Ad16,Ad8r,absl,absw],#1
% 68040/68060 instructions
-1111 0100 pp00 1rrr:42:-----:-----:02: CINVL #p,Ar
-1111 0100 pp01 0rrr:42:-----:-----:02: CINVP #p,Ar
-1111 0100 pp01 1rrr:42:-----:-----:00: CINVA #p
-1111 0100 pp10 1rrr:42:-----:-----:02: CPUSHL #p,Ar
-1111 0100 pp11 0rrr:42:-----:-----:02: CPUSHP #p,Ar
-1111 0100 pp11 1rrr:42:-----:-----:00: CPUSHA #p
-1111 0101 0000 0rrr:42:-----:-----:00: PFLUSHN Ara
-1111 0101 0000 1rrr:42:-----:-----:00: PFLUSH Ara
-1111 0101 0001 0rrr:42:-----:-----:00: PFLUSHAN Ara
-1111 0101 0001 1rrr:42:-----:-----:00: PFLUSHA Ara
-1111 0101 0100 1rrr:42:-----:-----:00: PTESTR Ara
-1111 0101 0110 1rrr:42:-----:-----:00: PTESTW Ara
+1111 0100 pp00 1rrr:402:-----:-----:02: CINVL #p,Ar
+1111 0100 pp01 0rrr:402:-----:-----:02: CINVP #p,Ar
+1111 0100 pp01 1rrr:402:-----:-----:00: CINVA #p
+1111 0100 pp10 1rrr:402:-----:-----:02: CPUSHL #p,Ar
+1111 0100 pp11 0rrr:402:-----:-----:02: CPUSHP #p,Ar
+1111 0100 pp11 1rrr:402:-----:-----:00: CPUSHA #p
+1111 0101 0000 0rrr:402:-----:-----:00: PFLUSHN Ara
+1111 0101 0000 1rrr:402:-----:-----:00: PFLUSH Ara
+1111 0101 0001 0rrr:402:-----:-----:00: PFLUSHAN Ara
+1111 0101 0001 1rrr:402:-----:-----:00: PFLUSHA Ara
+1111 0101 0100 1rrr:452:-----:-----:00: PTESTR Ara
+1111 0101 0110 1rrr:452:-----:-----: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],L
-1111 0110 00dd dDDD:40:-----:-----:12: MOVE16 L,d[Areg-Aipi]
-1111 0110 00ss sSSS:40:-----:-----:12: MOVE16 s[Aind],L
-1111 0110 00dd dDDD:40:-----:-----:12: MOVE16 L,d[Aipi-Aind]
+1111 0110 0010 0rrr:400:-----:-----:12: MOVE16 ArP,AxP
+1111 0110 00ss sSSS:400:-----:-----:12: MOVE16 s[Dreg-Aipi],L
+1111 0110 00dd dDDD:400:-----:-----:12: MOVE16 L,d[Areg-Aipi]
+1111 0110 00ss sSSS:400:-----:-----:12: MOVE16 s[Aind],L
+1111 0110 00dd dDDD:400:-----:-----:12: MOVE16 L,d[Aipi-Aind]
% 68060
-1111 1000 0000 0000:52:?????:?????:10: LPSTOP #1
-1111 0101 1000 1rrr:52:-----:-----:00: PLPAR Ara
-1111 0101 1100 1rrr:52:-----:-----:00: PLPAW Ara
+1111 1000 0000 0000:502:?????:?????:10: LPSTOP #1
+1111 0101 1000 1rrr:502:-----:-----:00: PLPAR Ara
+1111 0101 1100 1rrr:502:-----:-----:00: PLPAW Ara