mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-22 12:33:29 +00:00
Attempt to offer centralised C8 region decoding.
This commit is contained in:
parent
0595773355
commit
f4c242d5e9
@ -102,10 +102,12 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
|
||||
Cycles cycles_since_audio_update_;
|
||||
|
||||
// MARK: - Cards
|
||||
std::array<std::unique_ptr<Apple::II::Card>, 7> cards_;
|
||||
std::array<std::unique_ptr<Apple::II::Card>, 9> cards_; // The final slot is a sentinel.
|
||||
Cycles cycles_since_card_update_;
|
||||
std::vector<Apple::II::Card *> every_cycle_cards_;
|
||||
std::vector<Apple::II::Card *> just_in_time_cards_;
|
||||
static constexpr size_t NoActiveCard = 8;
|
||||
size_t active_card_ = NoActiveCard;
|
||||
|
||||
int stretched_cycles_since_card_update_ = 0;
|
||||
|
||||
@ -739,18 +741,32 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
|
||||
Communication with cards follows.
|
||||
*/
|
||||
|
||||
if(!read_pages_[address >> 8] && address >= 0xc090 && address < 0xc800) {
|
||||
if(!read_pages_[address >> 8] && address >= 0xc090 && address < 0xd000) {
|
||||
// If this is a card access, figure out which card is at play before determining
|
||||
// the totality of who needs messaging.
|
||||
size_t card_number = 0;
|
||||
Apple::II::Card::Select select = Apple::II::Card::None;
|
||||
|
||||
if(address >= 0xc100) {
|
||||
if(address >= 0xc800) {
|
||||
/*
|
||||
Decode the 2kb area used for additional ROMs.
|
||||
This is shared by all cards.
|
||||
*/
|
||||
card_number = active_card_;
|
||||
select = Apple::II::Card::C8Region;
|
||||
|
||||
// An access to $cfff will disable the active card.
|
||||
if(address == 0xcfff) {
|
||||
active_card_ = NoActiveCard;
|
||||
}
|
||||
} else if(address >= 0xc100) {
|
||||
/*
|
||||
Decode the area conventionally used by cards for ROMs:
|
||||
0xCn00 to 0xCnff: card n.
|
||||
|
||||
This also sets the active card for the C8 region.
|
||||
*/
|
||||
card_number = (address - 0xc100) >> 8;
|
||||
active_card_ = card_number = (address - 0xc100) >> 8;
|
||||
select = Apple::II::Card::Device;
|
||||
} else {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user