From 1f4d526ea5227382a7463897406be31f52e21050 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 29 Apr 2023 23:48:22 -0400 Subject: [PATCH] Permit MSX RAM mapper readback. --- Machines/MSX/MSX.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Machines/MSX/MSX.cpp b/Machines/MSX/MSX.cpp index afa84e143..b36150929 100644 --- a/Machines/MSX/MSX.cpp +++ b/Machines/MSX/MSX.cpp @@ -595,6 +595,13 @@ class ConcreteMachine: *cycle.value = clock_.read(next_clock_register_); break; + case 0xfc: case 0xfd: case 0xfe: case 0xff: + if constexpr (model != Target::Model::MSX1) { + *cycle.value = ram_mapper_[(address & 0xff) - 0xfc]; + break; + } + [[fallthrough]]; + default: // printf("Unhandled read %02x\n", address & 0xff); *cycle.value = 0xff; @@ -643,6 +650,8 @@ class ConcreteMachine: break; } + ram_mapper_[port - 0xfc] = *cycle.value; + // Apply to RAM. // // On a real MSX this may also affect other slots. @@ -877,6 +886,7 @@ class ConcreteMachine: // 8kb resolution is used by some cartride titles. const uint8_t *read_pointers_[8]; uint8_t *write_pointers_[8]; + uint8_t ram_mapper_[4]{}; /// Optionally attaches non-default logic to any of the four things selectable /// via the primary slot register.