mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-25 16:31:42 +00:00
Fixes: DiskROM drive motor control, track_for_sectors' sides.
This commit is contained in:
parent
793ef68206
commit
2f59226300
@ -180,6 +180,7 @@ void WD1770::posit_event(int new_event_type) {
|
|||||||
resume_point_ = 0;
|
resume_point_ = 0;
|
||||||
update_status([] (Status &status) {
|
update_status([] (Status &status) {
|
||||||
status.type = Status::One;
|
status.type = Status::One;
|
||||||
|
status.data_request = false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if(!(interesting_event_mask_ & static_cast<int>(new_event_type))) return;
|
if(!(interesting_event_mask_ & static_cast<int>(new_event_type))) return;
|
||||||
@ -475,7 +476,7 @@ void WD1770::posit_event(int new_event_type) {
|
|||||||
sector_++;
|
sector_++;
|
||||||
goto test_type2_write_protection;
|
goto test_type2_write_protection;
|
||||||
}
|
}
|
||||||
printf("Read sector %d\n", sector_);
|
printf("Finished reading sector %d\n", sector_);
|
||||||
goto wait_for_command;
|
goto wait_for_command;
|
||||||
}
|
}
|
||||||
goto type2_check_crc;
|
goto type2_check_crc;
|
||||||
|
@ -25,12 +25,18 @@ void DiskROM::write(uint16_t address, uint8_t value) {
|
|||||||
selected_head_ = value & 1;
|
selected_head_ = value & 1;
|
||||||
if(drives_[0]) drives_[0]->set_head(selected_head_);
|
if(drives_[0]) drives_[0]->set_head(selected_head_);
|
||||||
if(drives_[1]) drives_[1]->set_head(selected_head_);
|
if(drives_[1]) drives_[1]->set_head(selected_head_);
|
||||||
|
printf("HEAD: %d\n", selected_head_);
|
||||||
break;
|
break;
|
||||||
case 0x7ffd:
|
case 0x7ffd: {
|
||||||
selected_drive_ = value & 1;
|
selected_drive_ = value & 1;
|
||||||
set_drive(drives_[selected_drive_]);
|
set_drive(drives_[selected_drive_]);
|
||||||
set_motor_on(!!(value & 0x80));
|
|
||||||
break;
|
bool drive_motor = !!(value & 0x80);
|
||||||
|
if(drives_[0]) drives_[0]->set_motor_on(drive_motor);
|
||||||
|
if(drives_[1]) drives_[1]->set_motor_on(drive_motor);
|
||||||
|
printf("DRIVE: %d\n", selected_head_);
|
||||||
|
printf("MOTOR ON: %s\n", (value & 0x80) ? "on" : "off");
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +57,7 @@ void DiskROM::run_for(HalfCycles half_cycles) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DiskROM::set_disk(std::shared_ptr<Storage::Disk::Disk> disk, int drive) {
|
void DiskROM::set_disk(std::shared_ptr<Storage::Disk::Disk> disk, int drive) {
|
||||||
|
printf("Disk to %d\n", drive);
|
||||||
if(!drives_[drive]) {
|
if(!drives_[drive]) {
|
||||||
drives_[drive].reset(new Storage::Disk::Drive(8000000, 300, 2));
|
drives_[drive].reset(new Storage::Disk::Drive(8000000, 300, 2));
|
||||||
drives_[drive]->set_head(selected_head_);
|
drives_[drive]->set_head(selected_head_);
|
||||||
|
@ -28,7 +28,7 @@ std::shared_ptr<Track> Storage::Disk::track_for_sectors(uint8_t *const source, u
|
|||||||
|
|
||||||
Storage::Encodings::MFM::Sector &new_sector = sectors.back();
|
Storage::Encodings::MFM::Sector &new_sector = sectors.back();
|
||||||
new_sector.address.track = track;
|
new_sector.address.track = track;
|
||||||
new_sector.address.side = size;
|
new_sector.address.side = side;
|
||||||
new_sector.address.sector = first_sector;
|
new_sector.address.sector = first_sector;
|
||||||
first_sector++;
|
first_sector++;
|
||||||
new_sector.size = size;
|
new_sector.size = size;
|
||||||
|
Loading…
Reference in New Issue
Block a user