1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-01-11 08:30:55 +00:00

Attempt to spot screen takeovers.

This commit is contained in:
Thomas Harte 2024-05-23 22:03:40 -04:00
parent 67add0da93
commit 5280f5aba2
3 changed files with 22 additions and 3 deletions

View File

@ -185,7 +185,19 @@ class ConcreteMachine:
return desc; return desc;
}; };
switch(comment & static_cast<uint32_t>(~(1 << 17))) { const uint32_t swi_code = comment & static_cast<uint32_t>(~(1 << 17));
switch(swi_code) {
// To consider: catching VDU 22, though that means parsing the output stream
// via OS_WriteC, SWI &00, sufficiently to be able to spot VDUs.
case 0x400e3: // Wimp_SetMode
case 0x65: // OS_ScreenMode
case 0x3f: // OS_CheckModeValid
if(autoload_phase_ == AutoloadPhase::OpeningProgram) {
autoload_phase_ = AutoloadPhase::Ended;
}
break;
case 0x400d4: { case 0x400d4: {
uint32_t address = executor_.registers()[1] + 28; uint32_t address = executor_.registers()[1] + 28;
@ -270,6 +282,7 @@ class ConcreteMachine:
// Some default icon sizing assumptions are baked in here. // Some default icon sizing assumptions are baked in here.
const auto x_target = target_window_[0] + (static_cast<int32_t>(x1) + static_cast<int32_t>(x2)) / 2; const auto x_target = target_window_[0] + (static_cast<int32_t>(x1) + static_cast<int32_t>(x2)) / 2;
const auto y_target = target_window_[1] + static_cast<int32_t>(y1) + 24; const auto y_target = target_window_[1] + static_cast<int32_t>(y1) + 24;
cursor_actions_.clear();
cursor_actions_.push_back(CursorAction::move_to( cursor_actions_.push_back(CursorAction::move_to(
x_target >> 1, x_target >> 1,
256 - (y_target >> 2) 256 - (y_target >> 2)

View File

@ -34,7 +34,7 @@ constexpr char TestSuiteHome[] = "/Users/tharte/Projects/ProcessorTests/8088/v1"
using Flags = InstructionSet::x86::Flags; using Flags = InstructionSet::x86::Flags;
struct Registers { struct Registers {
public: public:
static constexpr bool is_32bit = false; // static constexpr bool is_32bit = false;
uint8_t &al() { return ax_.halves.low; } uint8_t &al() { return ax_.halves.low; }
uint8_t &ah() { return ax_.halves.high; } uint8_t &ah() { return ax_.halves.high; }

View File

@ -29,6 +29,11 @@ static NSDictionary<NSString *, NSString *> *mainProgramsBySHA1 = @{
@"8fcad522ea22b75b393ceb334cfef3f324b248ee": @"!E-TYPE", @"8fcad522ea22b75b393ceb334cfef3f324b248ee": @"!E-TYPE",
@"8ca4289ac423d4878129cb17d6177123b321108f": @"!StrtWrite", @"8ca4289ac423d4878129cb17d6177123b321108f": @"!StrtWrite",
@"4f92efecfc1e3a510a816f570ccb7082f0154e37": @"!HeroQuest", @"4f92efecfc1e3a510a816f570ccb7082f0154e37": @"!HeroQuest",
@"9bd6d2514c04ce02fcf8ef214815229b28be56d8": @"!adventure",
@"d3493850e8ed91ae0a55a53866139781ad65e63d": @"!Nebulus",
@"ba655bd8936859a33bab5fde447e33486c3b0d3e": @"!Attack",
@"a6502faf15ddb4acaed2ca859cedc1225e7fa762": @"!Wolf",
// @"04f588f87facd507e043b06f512e9bdb6fe996c0": // TODO: should decline to pick.
// Various things that are not the first disk. // Various things that are not the first disk.
@"2cff99237837e2291b845eb63977362ad9b4f040": @"", @"2cff99237837e2291b845eb63977362ad9b4f040": @"",
@ -37,7 +42,8 @@ static NSDictionary<NSString *, NSString *> *mainProgramsBySHA1 = @{
@"b7139d9bd927b8e4d933fd8aa3080a7249117495": @"", @"b7139d9bd927b8e4d933fd8aa3080a7249117495": @"",
@"66a82651f86d9cf0aa5b54c55bcaa8fefd3901da": @"", @"66a82651f86d9cf0aa5b54c55bcaa8fefd3901da": @"",
@"c3d3cd9e28f5e7499fd70057f820c75219538c69": @"", @"c3d3cd9e28f5e7499fd70057f820c75219538c69": @"",
@"81bfd4ab92c538f5b15ad64bba625aac2ffb243d": @"",
@"39318695b6e64c9d7270f2b6d8213a7d4b0b0c43": @"",
}; };
#undef Record #undef Record