Non-REP string instructions now do segment limit and present bit checks.
This commit is contained in:
@@ -5,10 +5,13 @@ static int opMOVSB_a16(uint32_t fetchdat)
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI);
|
||||
|
||||
do_mmut_wb(es, DI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, SI, addr64); if (cpu_state.abrt) return 1;
|
||||
@@ -26,10 +29,12 @@ static int opMOVSB_a32(uint32_t fetchdat)
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI);
|
||||
do_mmut_wb(es, EDI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemb_n(cpu_state.ea_seg->base, ESI, addr64); if (cpu_state.abrt) return 1;
|
||||
@@ -49,10 +54,12 @@ static int opMOVSW_a16(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 1UL);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 1UL);
|
||||
do_mmut_ww(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -71,10 +78,12 @@ static int opMOVSW_a32(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 1UL);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 1UL);
|
||||
do_mmut_ww(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmemw_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -94,10 +103,12 @@ static int opMOVSL_a16(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 3UL);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 3UL);
|
||||
do_mmut_wl(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -116,10 +127,12 @@ static int opMOVSL_a32(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 3UL);
|
||||
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);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 3UL);
|
||||
do_mmut_wl(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
temp = readmeml_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -139,10 +152,12 @@ static int opCMPSB_a16(uint32_t fetchdat)
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, SI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI);
|
||||
do_mmut_rb2(es, DI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, SI, addr64); if (cpu_state.abrt) return 1;
|
||||
@@ -165,10 +180,12 @@ static int opCMPSB_a32(uint32_t fetchdat)
|
||||
addr64 = addr64_2 = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rb(cpu_state.ea_seg->base, ESI, &addr64);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI);
|
||||
do_mmut_rb2(es, EDI, &addr64_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemb_n(cpu_state.ea_seg->base, ESI, addr64); if (cpu_state.abrt) return 1;
|
||||
@@ -193,10 +210,12 @@ static int opCMPSW_a16(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 1UL);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI + 1UL);
|
||||
do_mmut_rw2(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -220,10 +239,12 @@ static int opCMPSW_a32(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 1UL);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rw(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI + 1UL);
|
||||
do_mmut_rw2(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmemw_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -248,10 +269,12 @@ static int opCMPSL_a16(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 3UL);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, SI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI + 3UL);
|
||||
do_mmut_rl2(es, DI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, SI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -275,10 +298,12 @@ static int opCMPSL_a32(uint32_t fetchdat)
|
||||
addr64a_2[0] = addr64a_2[1] = addr64a_2[2] = addr64a_2[3] = 0x00000000;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 3UL);
|
||||
high_page = uncached = 0;
|
||||
do_mmut_rl(cpu_state.ea_seg->base, ESI, addr64a);
|
||||
if (cpu_state.abrt) return 1;
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI + 3UL);
|
||||
do_mmut_rl2(es, EDI, addr64a_2);
|
||||
if (cpu_state.abrt) return 1;
|
||||
src = readmeml_n(cpu_state.ea_seg->base, ESI, addr64a); if (cpu_state.abrt) return 1;
|
||||
@@ -298,6 +323,7 @@ static int opCMPSL_a32(uint32_t fetchdat)
|
||||
static int opSTOSB_a16(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI);
|
||||
writememb(es, DI, AL); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) DI--;
|
||||
else DI++;
|
||||
@@ -308,6 +334,7 @@ static int opSTOSB_a16(uint32_t fetchdat)
|
||||
static int opSTOSB_a32(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI);
|
||||
writememb(es, EDI, AL); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) EDI--;
|
||||
else EDI++;
|
||||
@@ -319,6 +346,7 @@ static int opSTOSB_a32(uint32_t fetchdat)
|
||||
static int opSTOSW_a16(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 1UL);
|
||||
writememw(es, DI, AX); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) DI -= 2;
|
||||
else DI += 2;
|
||||
@@ -329,6 +357,7 @@ static int opSTOSW_a16(uint32_t fetchdat)
|
||||
static int opSTOSW_a32(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 1UL);
|
||||
writememw(es, EDI, AX); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 2;
|
||||
else EDI += 2;
|
||||
@@ -340,6 +369,7 @@ static int opSTOSW_a32(uint32_t fetchdat)
|
||||
static int opSTOSL_a16(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 3UL);
|
||||
writememl(es, DI, EAX); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) DI -= 4;
|
||||
else DI += 4;
|
||||
@@ -350,6 +380,7 @@ static int opSTOSL_a16(uint32_t fetchdat)
|
||||
static int opSTOSL_a32(uint32_t fetchdat)
|
||||
{
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 3UL);
|
||||
writememl(es, EDI, EAX); if (cpu_state.abrt) return 1;
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 4;
|
||||
else EDI += 4;
|
||||
@@ -364,6 +395,7 @@ static int opLODSB_a16(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI);
|
||||
temp = readmemb(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
AL = temp;
|
||||
if (cpu_state.flags & D_FLAG) SI--;
|
||||
@@ -377,6 +409,7 @@ static int opLODSB_a32(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI);
|
||||
temp = readmemb(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
AL = temp;
|
||||
if (cpu_state.flags & D_FLAG) ESI--;
|
||||
@@ -391,6 +424,7 @@ static int opLODSW_a16(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 1UL);
|
||||
temp = readmemw(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
AX = temp;
|
||||
if (cpu_state.flags & D_FLAG) SI -= 2;
|
||||
@@ -404,6 +438,7 @@ static int opLODSW_a32(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 1UL);
|
||||
temp = readmemw(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
AX = temp;
|
||||
if (cpu_state.flags & D_FLAG) ESI -= 2;
|
||||
@@ -418,6 +453,7 @@ static int opLODSL_a16(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 3UL);
|
||||
temp = readmeml(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
EAX = temp;
|
||||
if (cpu_state.flags & D_FLAG) SI -= 4;
|
||||
@@ -431,6 +467,7 @@ static int opLODSL_a32(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 3UL);
|
||||
temp = readmeml(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
EAX = temp;
|
||||
if (cpu_state.flags & D_FLAG) ESI -= 4;
|
||||
@@ -446,6 +483,7 @@ static int opSCASB_a16(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI);
|
||||
temp = readmemb(es, DI); if (cpu_state.abrt) return 1;
|
||||
setsub8(AL, temp);
|
||||
if (cpu_state.flags & D_FLAG) DI--;
|
||||
@@ -459,6 +497,7 @@ static int opSCASB_a32(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI);
|
||||
temp = readmemb(es, EDI); if (cpu_state.abrt) return 1;
|
||||
setsub8(AL, temp);
|
||||
if (cpu_state.flags & D_FLAG) EDI--;
|
||||
@@ -473,6 +512,7 @@ static int opSCASW_a16(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI + 1UL);
|
||||
temp = readmemw(es, DI); if (cpu_state.abrt) return 1;
|
||||
setsub16(AX, temp);
|
||||
if (cpu_state.flags & D_FLAG) DI -= 2;
|
||||
@@ -486,6 +526,7 @@ static int opSCASW_a32(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI + 1UL);
|
||||
temp = readmemw(es, EDI); if (cpu_state.abrt) return 1;
|
||||
setsub16(AX, temp);
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 2;
|
||||
@@ -500,6 +541,7 @@ static int opSCASL_a16(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, DI, DI + 3UL);
|
||||
temp = readmeml(es, DI); if (cpu_state.abrt) return 1;
|
||||
setsub32(EAX, temp);
|
||||
if (cpu_state.flags & D_FLAG) DI -= 4;
|
||||
@@ -513,6 +555,7 @@ static int opSCASL_a32(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(&cpu_state.seg_es);
|
||||
CHECK_READ(&cpu_state.seg_es, EDI, EDI + 3UL);
|
||||
temp = readmeml(es, EDI); if (cpu_state.abrt) return 1;
|
||||
setsub32(EAX, temp);
|
||||
if (cpu_state.flags & D_FLAG) EDI -= 4;
|
||||
@@ -530,6 +573,7 @@ static int opINSB_a16(uint32_t fetchdat)
|
||||
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI);
|
||||
high_page = 0;
|
||||
do_mmut_wb(es, DI, &addr64); if (cpu_state.abrt) return 1;
|
||||
temp = inb(DX);
|
||||
@@ -549,6 +593,7 @@ static int opINSB_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
high_page = 0;
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI);
|
||||
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;
|
||||
@@ -568,6 +613,7 @@ static int opINSW_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(&cpu_state.seg_es);
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 1UL);
|
||||
high_page = 0;
|
||||
do_mmut_ww(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inw(DX);
|
||||
@@ -588,6 +634,7 @@ static int opINSW_a32(uint32_t fetchdat)
|
||||
high_page = 0;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 1UL);
|
||||
do_mmut_ww(es, EDI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inw(DX);
|
||||
writememw_n(es, EDI, addr64a, temp); if (cpu_state.abrt) return 1;
|
||||
@@ -609,6 +656,7 @@ static int opINSL_a16(uint32_t fetchdat)
|
||||
check_io_perm(DX + 1);
|
||||
check_io_perm(DX + 2);
|
||||
check_io_perm(DX + 3);
|
||||
CHECK_WRITE(&cpu_state.seg_es, DI, DI + 3UL);
|
||||
high_page = 0;
|
||||
do_mmut_wl(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inl(DX);
|
||||
@@ -630,6 +678,7 @@ static int opINSL_a32(uint32_t fetchdat)
|
||||
check_io_perm(DX + 1);
|
||||
check_io_perm(DX + 2);
|
||||
check_io_perm(DX + 3);
|
||||
CHECK_WRITE(&cpu_state.seg_es, EDI, EDI + 3UL);
|
||||
high_page = 0;
|
||||
do_mmut_wl(es, DI, addr64a); if (cpu_state.abrt) return 1;
|
||||
temp = inl(DX);
|
||||
@@ -646,6 +695,7 @@ static int opOUTSB_a16(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI);
|
||||
temp = readmemb(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
if (cpu_state.flags & D_FLAG) SI--;
|
||||
@@ -660,6 +710,7 @@ static int opOUTSB_a32(uint32_t fetchdat)
|
||||
uint8_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI);
|
||||
temp = readmemb(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
if (cpu_state.flags & D_FLAG) ESI--;
|
||||
@@ -675,6 +726,7 @@ static int opOUTSW_a16(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 1UL);
|
||||
temp = readmemw(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
@@ -690,6 +742,7 @@ static int opOUTSW_a32(uint32_t fetchdat)
|
||||
uint16_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 1UL);
|
||||
temp = readmemw(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
@@ -706,6 +759,7 @@ static int opOUTSL_a16(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, SI, SI + 3UL);
|
||||
temp = readmeml(cpu_state.ea_seg->base, SI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
@@ -723,6 +777,7 @@ static int opOUTSL_a32(uint32_t fetchdat)
|
||||
uint32_t temp;
|
||||
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
CHECK_READ(cpu_state.ea_seg, ESI, ESI + 3UL);
|
||||
temp = readmeml(cpu_state.ea_seg->base, ESI); if (cpu_state.abrt) return 1;
|
||||
check_io_perm(DX);
|
||||
check_io_perm(DX + 1);
|
||||
|
||||
Reference in New Issue
Block a user