1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-17 13:29:02 +00:00

Merge pull request #1017 from TomHarte/CPC128k

CPC: ensure 64/128k RAM is properly selected.
This commit is contained in:
Thomas Harte 2022-03-26 09:08:40 -04:00 committed by GitHub
commit b3dd2db815
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -790,12 +790,13 @@ template <bool has_fdc> class ConcreteMachine:
bool has_amsdos = false; bool has_amsdos = false;
ROM::Name firmware, basic; ROM::Name firmware, basic;
using Model = Analyser::Static::AmstradCPC::Target::Model;
switch(target.model) { switch(target.model) {
case Analyser::Static::AmstradCPC::Target::Model::CPC464: case Model::CPC464:
firmware = ROM::Name::CPC464Firmware; firmware = ROM::Name::CPC464Firmware;
basic = ROM::Name::CPC464BASIC; basic = ROM::Name::CPC464BASIC;
break; break;
case Analyser::Static::AmstradCPC::Target::Model::CPC664: case Model::CPC664:
firmware = ROM::Name::CPC664Firmware; firmware = ROM::Name::CPC664Firmware;
basic = ROM::Name::CPC664BASIC; basic = ROM::Name::CPC664BASIC;
has_amsdos = true; has_amsdos = true;
@ -838,6 +839,9 @@ template <bool has_fdc> class ConcreteMachine:
read_pointers_[2] = write_pointers_[2]; read_pointers_[2] = write_pointers_[2];
read_pointers_[3] = roms_[upper_rom_].data(); read_pointers_[3] = roms_[upper_rom_].data();
// Set total RAM available.
has_128k_ = target.model == Model::CPC6128;
// Type whatever is required. // Type whatever is required.
if(!target.loading_command.empty()) { if(!target.loading_command.empty()) {
type_string(target.loading_command); type_string(target.loading_command);
@ -1248,20 +1252,20 @@ template <bool has_fdc> class ConcreteMachine:
HalfCycles crtc_counter_; HalfCycles crtc_counter_;
HalfCycles half_cycles_since_ay_update_; HalfCycles half_cycles_since_ay_update_;
bool fdc_is_sleeping_; bool fdc_is_sleeping_ = false;
bool tape_player_is_sleeping_; bool tape_player_is_sleeping_ = false;
bool has_128k_; bool has_128k_ = false;
enum ROMType: int { enum ROMType: int {
AMSDOS = 0, OS = 1, BASIC = 2 AMSDOS = 0, OS = 1, BASIC = 2
}; };
std::vector<uint8_t> roms_[3]; std::vector<uint8_t> roms_[3];
bool upper_rom_is_paged_; bool upper_rom_is_paged_ = false;
ROMType upper_rom_; ROMType upper_rom_;
uint8_t *ram_pages_[4]; uint8_t *ram_pages_[4]{};
const uint8_t *read_pointers_[4]; const uint8_t *read_pointers_[4]{};
uint8_t *write_pointers_[4]; uint8_t *write_pointers_[4]{};
KeyboardState key_state_; KeyboardState key_state_;
AmstradCPC::KeyboardMapper keyboard_mapper_; AmstradCPC::KeyboardMapper keyboard_mapper_;