1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-24 05:18:36 +00:00

Added what may be correct paging logic.

This commit is contained in:
Thomas Harte
2016-11-22 22:09:52 +08:00
parent 363db695e8
commit 13a608a8c2
2 changed files with 28 additions and 4 deletions
+14 -4
View File
@@ -10,7 +10,10 @@
using namespace Oric;
Microdisc::Microdisc() : irq_enable_(false)
Microdisc::Microdisc() :
irq_enable_(false),
delegate_(nullptr),
paging_flags_(BASICDisable)
{}
void Microdisc::set_disk(std::shared_ptr<Storage::Disk::Disk> disk, int drive)
@@ -25,9 +28,7 @@ void Microdisc::set_disk(std::shared_ptr<Storage::Disk::Disk> disk, int drive)
void Microdisc::set_control_register(uint8_t control)
{
// b7: EPROM select (0 = select)
// b2: data separator clock rate select (1 = double)
// b1: ROM disable (0 = disable)
// b2: data separator clock rate select (1 = double) [TODO]
// b65: drive select
selected_drive_ = (control >> 5)&3;
@@ -44,6 +45,15 @@ void Microdisc::set_control_register(uint8_t control)
// b0: IRQ enable
irq_enable_ = !(control & 0x01);
// b7: EPROM select (0 = select)
// b1: ROM disable (0 = disable)
int new_paging_flags = ((control & 0x01) ? BASICDisable : 0) | ((control & 0x80) ? 0 : MicrodscDisable);
if(new_paging_flags != paging_flags_)
{
paging_flags_ = new_paging_flags;
if(delegate_) delegate_->microdisc_did_change_paging_flags(this);
}
}
bool Microdisc::get_interrupt_request_line()