This commit is contained in:
Toni Wilen 2012-07-20 18:17:26 +03:00
parent 37d1014ee5
commit 1c40d7abf6
30 changed files with 837 additions and 413 deletions

4
ar.cpp
View File

@ -250,7 +250,6 @@ static int triggered_once;
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;
@ -1477,6 +1476,9 @@ int action_replay_unload (int in_memory_reset)
_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]);

View File

@ -284,7 +284,7 @@ void rtarea_init (void)
uaegfx_install_code (rtarea_base + RTAREA_RTG);
#endif
org (RTAREA_TRAPS);
org (RTAREA_TRAPS | rtarea_base);
init_extended_traps ();
}

View File

@ -618,11 +618,11 @@ STATIC_INLINE void blitter_line_incy (void)
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++;
}

View File

@ -76,7 +76,7 @@ int main(int argc, char **argv)
#endif
getnextch();
while (nextch != EOF) {
int cpulevel, plevel, sduse;
int cpulevel, uncpulevel, plevel, sduse;
int i;
char patbits[16];
@ -130,7 +130,7 @@ int main(int argc, char **argv)
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) {
@ -146,6 +146,19 @@ int main(int argc, char **argv)
}
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;
@ -247,7 +260,7 @@ int main(int argc, char **argv)
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 ? "" : ",");
}

View File

@ -70,7 +70,6 @@ void deactivate_debugger (void)
processptr = 0;
xfree (processname);
processname = NULL;
setsystime ();
}
void activate_debugger (void)

View File

@ -295,13 +295,13 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
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) {
@ -1213,6 +1213,35 @@ void free_fastmemory (void)
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;
@ -1220,6 +1249,7 @@ static void allocate_expamem (void)
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;
@ -1240,24 +1270,13 @@ static void allocate_expamem (void)
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)
@ -1274,43 +1293,21 @@ static void allocate_expamem (void)
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

View File

@ -56,7 +56,7 @@ start:
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
@ -440,8 +440,13 @@ setup_exter:
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
@ -1246,6 +1251,21 @@ addfsonthefly ; d1 = fs index
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
@ -1271,6 +1291,7 @@ filesys_mainloop:
; 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
@ -1347,7 +1368,14 @@ FSML_loop:
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)
@ -1688,32 +1716,30 @@ mhdoio:
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
@ -1742,7 +1768,8 @@ MH_IEPT = (MH_IEH+22) ;IEPointerTable/IENewTablet
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
@ -1858,7 +1885,7 @@ getgfxlimits:
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
@ -1886,6 +1913,14 @@ mousehack_task:
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
@ -1992,7 +2027,7 @@ mhloop
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
@ -2012,7 +2047,7 @@ mhloop
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
@ -2020,72 +2055,72 @@ mhloop
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)+
@ -2097,7 +2132,7 @@ mhloop
;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
@ -2128,7 +2163,7 @@ mhloop
.notablet
move.b mh_e(pc),d0
move.b MH_E+MH_DATA(a5),d0
btst #MH_MOUSEHACK,d0
beq.w mhloop
@ -2139,7 +2174,7 @@ 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
@ -2148,7 +2183,7 @@ mhloop
.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
@ -2169,7 +2204,7 @@ mousehackint:
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)

View File

@ -1307,7 +1307,7 @@ void setsystime (void)
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;
@ -5172,7 +5172,7 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
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);
@ -5198,8 +5198,9 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
} 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));
}
@ -5214,7 +5215,7 @@ static void action_get_file_position64 (Unit *unit, dpacket packet)
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);
}
@ -5284,8 +5285,8 @@ static void action_get_file_size64 (Unit *unit, dpacket packet)
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);

View File

@ -38,6 +38,7 @@ extern void action_replay_ciaread (void);
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);

View File

@ -18,8 +18,8 @@ extern uae_u8 *cache_alloc (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;
@ -173,7 +173,8 @@ extern void memory_init (void);
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))

View File

@ -65,6 +65,7 @@ struct instr_def {
uae_u8 bitpos[16];
unsigned int mask;
int cpulevel;
int unimpcpulevel;
int plevel;
struct {
unsigned int flaguse:3;

View File

@ -11,6 +11,7 @@ extern void do_leave_program (void);
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);

View File

@ -734,6 +734,7 @@ void reset_all_systems (void)
filesys_prepare_reset ();
filesys_reset ();
#endif
init_shm ();
memory_reset ();
#if defined (BSDSOCKET)
bsdlib_reset ();
@ -858,6 +859,35 @@ void leave_program (void)
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)
{
@ -875,7 +905,7 @@ static int real_main2 (int argc, TCHAR **argv)
}
#ifdef NATMEM_OFFSET
preinit_shm ();
//preinit_shm ();
#endif
if (restart_config[0])
@ -939,34 +969,9 @@ static int real_main2 (int argc, TCHAR **argv)
/* 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

View File

@ -39,6 +39,7 @@ int candirect = -1;
/* 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)
{
@ -78,12 +79,6 @@ uae_u32 allocated_cardmem;
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,
@ -1954,8 +1949,10 @@ static shmpiece *find_shmpiece (uae_u8 *base)
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;
@ -2001,8 +1998,10 @@ static void add_shmmaps (uae_u32 start, addrbank *what)
shmpiece *y;
uae_u8 *base = what->baseaddr;
#if 0
if (!needmman ())
return;
#endif
if (!base)
return;
@ -2033,10 +2032,12 @@ uae_u8 *mapped_malloc (size_t s, const TCHAR *file)
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) {
@ -2391,12 +2392,30 @@ ULONG getz2endaddr (void)
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;
@ -2425,9 +2444,11 @@ void memory_reset (void)
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);
@ -2486,6 +2507,7 @@ void memory_reset (void)
}
patch_kick ();
write_log (_T("ROM loader end\n"));
protect_roms (true);
}
if (cloanto_rom && currprefs.maprom < 0x01000000)
@ -2660,11 +2682,17 @@ void memory_reset (void)
}
#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;
@ -2690,6 +2718,7 @@ void memory_init (void)
currprefs.romextfile[0] = 0;
#ifdef ACTION_REPLAY
action_replay_unload (0);
action_replay_load ();
action_replay_init (1);
#ifdef ACTION_REPLAY_HRTMON
@ -2741,19 +2770,10 @@ void memory_cleanup (void)
#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)

View File

@ -4284,7 +4284,7 @@ void m68k_go (int may_quit)
custom_reset (hardreset);
m68k_reset (hardreset);
if (hardreset) {
memory_hardreset ();
memory_clear ();
write_log (_T("hardreset, memory cleared\n"));
}
#ifdef SAVESTATE

View File

@ -146,7 +146,7 @@ static bool rawhid_found;
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)
@ -2570,7 +2570,7 @@ static int di_do_init (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));
@ -2587,8 +2587,10 @@ static int di_do_init (void)
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);
}
}
}
}

View File

@ -30,7 +30,9 @@
#include "hq2x_d3d.h"
#include "zfile.h"
#include "uae.h"
extern int D3DEX, d3ddebug;
int forcedframelatency = -1;
#include <d3d9.h>
#include <d3dx9.h>
@ -2315,9 +2317,23 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult)
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;

View File

@ -48,7 +48,7 @@
//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;
@ -159,7 +159,7 @@ static void MidiOut_Free(void)
for(i = 0; i < out_allocated; i++) {
if(outbuffer[i]) {
free(outbuffer[i]);
xfree(outbuffer[i]);
outbufferlength[i] = 0;
outbuffer[i] = NULL;
}

View File

@ -14,6 +14,10 @@
#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
@ -26,6 +30,7 @@ static uae_u8 *p96mem_offset;
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)
{
@ -104,9 +109,17 @@ void mman_ResetWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize)
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;
@ -122,7 +135,7 @@ void preinit_shm (void)
p96mem_offset = NULL;
GetSystemInfo (&si);
max_allowed_mman = 1536;
max_allowed_mman = 512;
if (os_64bit)
max_allowed_mman = 2048;
@ -154,21 +167,33 @@ void preinit_shm (void)
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)
@ -187,24 +212,29 @@ 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;
@ -262,11 +292,13 @@ restart:
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 ()) {
@ -341,7 +373,209 @@ restart:
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)
{
@ -513,6 +747,7 @@ void *shmat (int shmid, void *shmaddr, int shmflg)
filesysptr = xcalloc (uae_u8, size);
result = filesysptr;
shmids[shmid].attached = result;
shmids[shmid].fake = true;
return result;
}
if(!_tcscmp (shmids[shmid].name, _T("custmem1"))) {
@ -589,12 +824,12 @@ void *shmat (int shmid, void *shmaddr, int shmflg)
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(""));
}
@ -614,7 +849,7 @@ void protect_roms (bool protect)
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 ());
}

View File

@ -425,6 +425,8 @@
#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
@ -1060,7 +1062,6 @@
#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

View File

@ -157,12 +157,12 @@ BEGIN
CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,194,193,8,10
END
IDD_MEMORY DIALOGEX 0, 0, 300, 182
IDD_MEMORY DIALOGEX 0, 0, 300, 205
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTEXTHELP
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
GROUPBOX "Memory Settings",IDC_STATIC,14,7,274,97
GROUPBOX "Memory Settings",IDC_STATIC,14,7,274,117
CONTROL "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20
EDITTEXT IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY
CONTROL "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20
@ -171,13 +171,13 @@ BEGIN
EDITTEXT IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY
CONTROL "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20
EDITTEXT IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY
GROUPBOX "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,110,274,65
RTEXT "Motherboard Fast:",IDC_STATIC,48,126,129,10,SS_CENTERIMAGE
CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,122,59,20
EDITTEXT IDC_MBRAM1,244,125,34,12,ES_CENTER | ES_READONLY
RTEXT "Processor Slot Fast:",IDC_STATIC,48,149,129,10,SS_CENTERIMAGE
CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,145,59,20
EDITTEXT IDC_MBRAM2,244,148,34,12,ES_CENTER | ES_READONLY
GROUPBOX "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,131,274,65
RTEXT "Motherboard Fast:",IDC_STATIC,48,147,129,10,SS_CENTERIMAGE
CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,143,59,20
EDITTEXT IDC_MBRAM1,244,146,34,12,ES_CENTER | ES_READONLY
RTEXT "Processor Slot Fast:",IDC_STATIC,48,170,129,10,SS_CENTERIMAGE
CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,166,59,20
EDITTEXT IDC_MBRAM2,244,169,34,12,ES_CENTER | ES_READONLY
RTEXT "Fast:",IDC_STATIC,19,49,32,15,SS_CENTERIMAGE
RTEXT "Chip:",IDC_STATIC,19,25,32,15,SS_CENTERIMAGE
RTEXT "Slow:",IDC_STATIC,144,25,32,15,SS_CENTERIMAGE
@ -186,6 +186,7 @@ BEGIN
CONTROL "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,71,60,20
EDITTEXT IDC_Z3CHIPRAM,243,76,34,12,ES_CENTER | ES_READONLY
CONTROL "Autoconfig Fast RAM",IDC_FASTMEMAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,76,101,10
EDITTEXT IDC_MAX32RAM,29,98,249,12,ES_CENTER | ES_READONLY
END
IDD_CPU DIALOGEX 0, 0, 300, 241

View File

@ -510,7 +510,7 @@ void set_volume_sound_device (struct sound_data *sd, int volume, int mute)
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)
@ -526,7 +526,20 @@ void set_volume_sound_device (struct sound_data *sd, int volume, int 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)
@ -1087,9 +1100,9 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
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)
@ -1213,10 +1226,7 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
}
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 *
@ -1225,8 +1235,8 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
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) *
@ -1304,6 +1314,7 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
}
}
#endif
sd->sndbufsize = (s->bufferFrameCount / 8) * sd->samplesize;
v = s->bufferFrameCount * sd->samplesize;
v /= 2;
if (sd->sndbufsize > v)
@ -1565,6 +1576,7 @@ static int open_sound (void)
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;
@ -2201,6 +2213,12 @@ void send_sound (struct sound_data *sd, uae_u16 *sndbuffer)
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)

View File

@ -42,6 +42,7 @@ struct sound_data
int samplesize;
int sndbufsize;
int sndbufframes;
int softvolume;
struct sound_dp *data;
};

View File

@ -12,21 +12,22 @@
#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);
@ -34,7 +35,7 @@ void *shmat (int shmid, LPVOID shmaddr, int shmflg);
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

View File

@ -4573,7 +4573,7 @@ extern int debug_rtg_blitter;
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;
@ -4949,6 +4949,10 @@ static int parseargs (const TCHAR *argx, const TCHAR *np, const TCHAR *np2)
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);
@ -5151,7 +5155,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
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

View File

@ -19,8 +19,8 @@
#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("")

View File

@ -1270,6 +1270,7 @@ static void closeblankwindows (void)
if (h) {
ShowWindow (h, SW_HIDE);
DestroyWindow (h);
blankwindows[i] = NULL;
}
}
}

View File

@ -6649,7 +6649,7 @@ static void enable_for_memorydlg (HWND hDlg)
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);
@ -6663,6 +6663,25 @@ static void enable_for_memorydlg (HWND hDlg)
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;
@ -6893,6 +6912,9 @@ static void values_to_memorydlg (HWND hDlg)
}
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)
@ -9022,6 +9044,8 @@ static void inithardfile (HWND hDlg)
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);
@ -9029,10 +9053,21 @@ static void inithardfile (HWND hDlg)
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)
@ -14664,6 +14699,17 @@ static int init_page (int tmpl, int icon, int title,
}
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)
{
@ -14676,7 +14722,7 @@ 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);

View File

@ -1,6 +1,23 @@
- 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)

383
table68k
View File

@ -36,8 +36,13 @@
% 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)
@ -61,219 +66,219 @@
% 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