1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-20 10:17:05 +00:00

Determine 80286 logic for MOVS.

4,043 failures left.
This commit is contained in:
Thomas Harte
2025-08-07 12:17:52 -04:00
parent edf7617d1e
commit 91b2c751af
2 changed files with 24 additions and 4 deletions
@@ -110,12 +110,33 @@ void movs(
return;
}
context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) =
context.memory.template access<IntT, AccessType::Read>(instruction.data_segment(), eSI);
if constexpr (!uses_8086_exceptions(ContextT::model)) {
IntT temp;
try {
temp = context.memory.template access<IntT, AccessType::Read>(instruction.data_segment(), eSI);
} catch (const Exception &e) {
eSI += context.flags.template direction<AddressT>() * sizeof(IntT);
repeat<AddressT, repetition>(eCX, context);
throw e;
}
try {
context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) = temp;
} catch (const Exception &e) {
eSI += context.flags.template direction<AddressT>() * sizeof(IntT);
eDI += context.flags.template direction<AddressT>() * sizeof(IntT);
repeat<AddressT, repetition>(eCX, context);
repeat<AddressT, repetition>(eCX, context);
throw e;
}
} else {
context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) =
context.memory.template access<IntT, AccessType::Read>(instruction.data_segment(), eSI);
}
eSI += context.flags.template direction<AddressT>() * sizeof(IntT);
eDI += context.flags.template direction<AddressT>() * sizeof(IntT);
repeat<AddressT, repetition>(eCX, context);
}
@@ -53,7 +53,6 @@ NSSet *const allowList = [NSSet setWithArray:@[
// @"81.6.json.gz",
// @"81.7.json.gz",
// @"9A.json.gz", // CALL
// @"A5.json.gz", // MOVS
// @"A7.json.gz", // CMPS
// @"AD.json.gz",
// @"AF.json.gz", // SCAS