CPU and MMU cleanups and fixes, and non-Debug builds are now stripped again.
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
static int opMOVSB_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint64_t addr64r;
|
||||
uint64_t addr64w;
|
||||
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rb(cpu_state.ea_seg->base, SI, &addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, SI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_wb(es, DI, &addr64w);
|
||||
do_mmut_wb(es, DI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, SI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememb_n(es, DI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, SI, addr64); if (cpu_state.abrt) return 1;
|
||||
writememb_n(es, DI, addr64_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { DI--; SI--; }
|
||||
else { DI++; SI++; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -21,17 +22,18 @@ static int opMOVSB_a16(uint32_t fetchdat)
|
||||
static int opMOVSB_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint64_t addr64r;
|
||||
uint64_t addr64w;
|
||||
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rb(cpu_state.ea_seg->base, ESI, &addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, ESI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_wb(es, EDI, &addr64w);
|
||||
do_mmut_wb(es, EDI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, ESI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememb_n(es, EDI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, ESI, addr64); if (cpu_state.abrt) return 1;
|
||||
writememb_n(es, EDI, addr64_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { EDI--; ESI--; }
|
||||
else { EDI++; ESI++; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -42,17 +44,19 @@ static int opMOVSB_a32(uint32_t fetchdat)
|
||||
static int opMOVSW_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t temp;
|
||||
uint64_t addr64r[2];
|
||||
uint64_t addr64w[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rw(cpu_state.ea_seg->base, SI, addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_ww(es, DI, addr64w);
|
||||
do_mmut_ww(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, SI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, DI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, DI, addr64a_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { DI -= 2; SI -= 2; }
|
||||
else { DI += 2; SI += 2; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -62,17 +66,19 @@ static int opMOVSW_a16(uint32_t fetchdat)
|
||||
static int opMOVSW_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t temp;
|
||||
uint64_t addr64r[2];
|
||||
uint64_t addr64w[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rw(cpu_state.ea_seg->base, ESI, addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_ww(es, EDI, addr64w);
|
||||
do_mmut_ww(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, ESI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, EDI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, EDI, addr64a_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { EDI -= 2; ESI -= 2; }
|
||||
else { EDI += 2; ESI += 2; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -83,17 +89,19 @@ static int opMOVSW_a32(uint32_t fetchdat)
|
||||
static int opMOVSL_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t temp;
|
||||
uint64_t addr64r[4];
|
||||
uint64_t addr64w[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rl(cpu_state.ea_seg->base, SI, addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_wl(es, DI, addr64w);
|
||||
do_mmut_wl(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, SI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, DI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, DI, addr64a_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { DI -= 4; SI -= 4; }
|
||||
else { DI += 4; SI += 4; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -103,17 +111,19 @@ static int opMOVSL_a16(uint32_t fetchdat)
|
||||
static int opMOVSL_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t temp;
|
||||
uint64_t addr64r[4];
|
||||
uint64_t addr64w[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rl(cpu_state.ea_seg->base, ESI, addr64r);
|
||||
high_page = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
do_mmut_wl(es, EDI, addr64w);
|
||||
do_mmut_wl(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, ESI, addr64r); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, EDI, addr64w, temp); if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, EDI, addr64a_2, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) { EDI -= 4; ESI -= 4; }
|
||||
else { EDI += 4; ESI += 4; }
|
||||
CLOCK_CYCLES(7);
|
||||
@@ -125,17 +135,18 @@ static int opMOVSL_a32(uint32_t fetchdat)
|
||||
static int opCMPSB_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t src, dst;
|
||||
uint64_t addr64;
|
||||
uint64_t addr642;
|
||||
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
high_page = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, SI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rb(es, DI, &addr642);
|
||||
do_mmut_rb(es, DI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, SI, addr64);
|
||||
dst = readmemb_n(es, DI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, SI, addr64); if (cpu_state.abrt) return 1;
|
||||
dst = readmemb_n(es, DI, addr64_2); if (cpu_state.abrt) return 1;
|
||||
setsub8(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { DI--; SI--; }
|
||||
else { DI++; SI++; }
|
||||
@@ -146,17 +157,18 @@ static int opCMPSB_a16(uint32_t fetchdat)
|
||||
static int opCMPSB_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t src, dst;
|
||||
uint64_t addr64;
|
||||
uint64_t addr642;
|
||||
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
high_page = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, ESI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rb(es, EDI, &addr642);
|
||||
do_mmut_rb(es, EDI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, ESI, addr64);
|
||||
dst = readmemb_n(es, EDI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, ESI, addr64); if (cpu_state.abrt) return 1;
|
||||
dst = readmemb_n(es, EDI, addr64_2); if (cpu_state.abrt) return 1;
|
||||
setsub8(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { EDI--; ESI--; }
|
||||
else { EDI++; ESI++; }
|
||||
@@ -168,17 +180,19 @@ static int opCMPSB_a32(uint32_t fetchdat)
|
||||
static int opCMPSW_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t src, dst;
|
||||
uint64_t addr64[2];
|
||||
uint64_t addr642[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rw(cpu_state.ea_seg->base, SI, addr64);
|
||||
high_page = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rw(es, DI, addr642);
|
||||
do_mmut_rw(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, SI, addr64);
|
||||
dst = readmemw_n(es, DI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
dst = readmemw_n(es, DI, addr64a_2); if (cpu_state.abrt) return 1;
|
||||
setsub16(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { DI -= 2; SI -= 2; }
|
||||
else { DI += 2; SI += 2; }
|
||||
@@ -189,17 +203,19 @@ static int opCMPSW_a16(uint32_t fetchdat)
|
||||
static int opCMPSW_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t src, dst;
|
||||
uint64_t addr64[2];
|
||||
uint64_t addr642[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rw(cpu_state.ea_seg->base, ESI, addr64);
|
||||
high_page = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rw(es, EDI, addr642);
|
||||
do_mmut_rw(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, ESI, addr64);
|
||||
dst = readmemw_n(es, EDI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
dst = readmemw_n(es, EDI, addr64a_2); if (cpu_state.abrt) return 1;
|
||||
setsub16(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { EDI -= 2; ESI -= 2; }
|
||||
else { EDI += 2; ESI += 2; }
|
||||
@@ -211,17 +227,19 @@ static int opCMPSW_a32(uint32_t fetchdat)
|
||||
static int opCMPSL_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t src, dst;
|
||||
uint64_t addr64[4];
|
||||
uint64_t addr642[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rl(cpu_state.ea_seg->base, SI, addr64);
|
||||
high_page = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rl(es, DI, addr642);
|
||||
do_mmut_rl(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, SI, addr64);
|
||||
dst = readmeml_n(es, DI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
dst = readmeml_n(es, DI, addr64a_2); if (cpu_state.abrt) return 1;
|
||||
setsub32(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { DI -= 4; SI -= 4; }
|
||||
else { DI += 4; SI += 4; }
|
||||
@@ -232,17 +250,19 @@ static int opCMPSL_a16(uint32_t fetchdat)
|
||||
static int opCMPSL_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t src, dst;
|
||||
uint64_t addr64[4];
|
||||
uint64_t addr642[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
do_mmut_rl(cpu_state.ea_seg->base, ESI, addr64);
|
||||
high_page = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
do_mmut_rl(es, EDI, addr642);
|
||||
do_mmut_rl(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, ESI, addr64);
|
||||
dst = readmeml_n(es, EDI, addr642); if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
dst = readmeml_n(es, EDI, addr64a_2); if (cpu_state.abrt) return 1;
|
||||
setsub32(src, dst);
|
||||
if (cpu_state.flags & D_FLAG) { EDI -= 4; ESI -= 4; }
|
||||
else { EDI += 4; ESI += 4; }
|
||||
@@ -481,10 +501,12 @@ static int opSCASL_a32(uint32_t fetchdat)
|
||||
static int opINSB_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint64_t addr64 = 0x0000000000000000ULL;
|
||||
|
||||
addr64 = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
high_page = 0;
|
||||
do_mmut_wb(es, DI, &addr64); if (cpu_state.abrt) return 1;
|
||||
temp = inb(DX);
|
||||
writememb_n(es, DI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
@@ -497,10 +519,12 @@ static int opINSB_a16(uint32_t fetchdat)
|
||||
static int opINSB_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint64_t addr64 = 0x0000000000000000ULL;
|
||||
|
||||
addr64 = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
high_page = 0;
|
||||
do_mmut_wb(es, EDI, &addr64); if (cpu_state.abrt) return 1;
|
||||
temp = inb(DX);
|
||||
writememb_n(es, EDI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
@@ -514,14 +538,16 @@ static int opINSB_a32(uint32_t fetchdat)
|
||||
static int opINSW_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t temp;
|
||||
uint64_t addr64[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
do_mmut_ww(es, DI, addr64); if (cpu_state.abrt) return 1;
|
||||
high_page = 0;
|
||||
do_mmut_ww(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inw(DX);
|
||||
writememw_n(es, DI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, DI, addr64a, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) DI -= 2;
|
||||
else DI += 2;
|
||||
CLOCK_CYCLES(15);
|
||||
@@ -531,14 +557,16 @@ static int opINSW_a16(uint32_t fetchdat)
|
||||
static int opINSW_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint16_t temp;
|
||||
uint64_t addr64[2];
|
||||
|
||||
addr64a[0] = addr64a[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
high_page = 0;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
do_mmut_ww(es, EDI, addr64); if (cpu_state.abrt) return 1;
|
||||
do_mmut_ww(es, EDI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inw(DX);
|
||||
writememw_n(es, EDI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
writememw_n(es, EDI, addr64a, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 2;
|
||||
else EDI += 2;
|
||||
CLOCK_CYCLES(15);
|
||||
@@ -549,16 +577,18 @@ static int opINSW_a32(uint32_t fetchdat)
|
||||
static int opINSL_a16(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t temp;
|
||||
uint64_t addr64[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
check_io_perm(DX + 2);
|
||||
check_io_perm(DX + 3);
|
||||
do_mmut_wl(es, DI, addr64); if (cpu_state.abrt) return 1;
|
||||
high_page = 0;
|
||||
do_mmut_wl(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inl(DX);
|
||||
writememl_n(es, DI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, DI, addr64a, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) DI -= 4;
|
||||
else DI += 4;
|
||||
CLOCK_CYCLES(15);
|
||||
@@ -568,16 +598,18 @@ static int opINSL_a16(uint32_t fetchdat)
|
||||
static int opINSL_a32(uint32_t fetchdat)
|
||||
{
|
||||
uint32_t temp;
|
||||
uint64_t addr64[4];
|
||||
|
||||
addr64a[0] = addr64a[1] = addr64a[2] = addr64a[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
check_io_perm(DX + 2);
|
||||
check_io_perm(DX + 3);
|
||||
do_mmut_wl(es, DI, addr64); if (cpu_state.abrt) return 1;
|
||||
high_page = 0;
|
||||
do_mmut_wl(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inl(DX);
|
||||
writememl_n(es, EDI, addr64, temp); if (cpu_state.abrt) return 1;
|
||||
writememl_n(es, EDI, addr64a, temp); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 4;
|
||||
else EDI += 4;
|
||||
CLOCK_CYCLES(15);
|
||||
|
||||
Reference in New Issue
Block a user