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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user