mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
2420b7
This commit is contained in:
parent
37d1014ee5
commit
1c40d7abf6
4
ar.cpp
4
ar.cpp
@ -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]);
|
||||
|
||||
|
||||
@ -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 ();
|
||||
}
|
||||
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
|
||||
|
||||
19
build68k.cpp
19
build68k.cpp
@ -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 ? "" : ",");
|
||||
}
|
||||
|
||||
@ -70,7 +70,6 @@ void deactivate_debugger (void)
|
||||
processptr = 0;
|
||||
xfree (processname);
|
||||
processname = NULL;
|
||||
setsystime ();
|
||||
}
|
||||
|
||||
void activate_debugger (void)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
143
filesys.asm
143
filesys.asm
@ -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)
|
||||
|
||||
11
filesys.cpp
11
filesys.cpp
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
57
main.cpp
57
main.cpp
@ -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
|
||||
|
||||
58
memory.cpp
58
memory.cpp
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 ());
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -42,6 +42,7 @@ struct sound_data
|
||||
int samplesize;
|
||||
int sndbufsize;
|
||||
int sndbufframes;
|
||||
int softvolume;
|
||||
struct sound_dp *data;
|
||||
};
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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("")
|
||||
|
||||
@ -1270,6 +1270,7 @@ static void closeblankwindows (void)
|
||||
if (h) {
|
||||
ShowWindow (h, SW_HIDE);
|
||||
DestroyWindow (h);
|
||||
blankwindows[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
383
table68k
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user