(MESS) apple3: Further improvements to drive select (nw)

This commit is contained in:
R. Belmont 2014-09-07 14:06:26 +00:00
parent 5c8f513e14
commit f2d2237a65
2 changed files with 35 additions and 7 deletions

View File

@ -68,6 +68,31 @@ void wozfdc_device::device_start()
timer = timer_alloc(0); timer = timer_alloc(0);
delay_timer = timer_alloc(1); delay_timer = timer_alloc(1);
save_item(NAME(last_6502_write));
save_item(NAME(mode_write));
save_item(NAME(mode_load));
save_item(NAME(active));
save_item(NAME(phases));
save_item(NAME(external_io_select));
save_item(NAME(cur_lss.tm));
save_item(NAME(cur_lss.cycles));
save_item(NAME(cur_lss.data_reg));
save_item(NAME(cur_lss.address));
save_item(NAME(cur_lss.write_start_time));
// save_item(NAME(cur_lss.write_buffer));
save_item(NAME(cur_lss.write_position));
save_item(NAME(cur_lss.write_line_active));
save_item(NAME(predicted_lss.tm));
save_item(NAME(predicted_lss.cycles));
save_item(NAME(predicted_lss.data_reg));
save_item(NAME(predicted_lss.address));
save_item(NAME(predicted_lss.write_start_time));
// save_item(NAME(predicted_lss.write_buffer));
save_item(NAME(predicted_lss.write_position));
save_item(NAME(predicted_lss.write_line_active));
save_item(NAME(drvsel));
save_item(NAME(enable1));
} }
void wozfdc_device::device_reset() void wozfdc_device::device_reset()
@ -92,7 +117,7 @@ void wozfdc_device::a3_update_drive_sel()
{ {
floppy_image_device *newflop = NULL; floppy_image_device *newflop = NULL;
if (!enable1) if ((!enable1) || (!external_io_select))
{ {
newflop = floppy0->get_device(); newflop = floppy0->get_device();
} }
@ -235,12 +260,13 @@ void wozfdc_device::control(int offset)
break; break;
} }
break; break;
case 0xa: case 0xa:
if(floppy != floppy0->get_device()) { external_io_select = false;
if(active) { if(floppy != floppy0->get_device()) {
lss_sync(); if(active) {
floppy->mon_w(true); lss_sync();
} floppy->mon_w(true);
}
floppy = floppy0->get_device(); floppy = floppy0->get_device();
if(active) { if(active) {
floppy->mon_w(false); floppy->mon_w(false);
@ -249,6 +275,7 @@ void wozfdc_device::control(int offset)
} }
break; break;
case 0xb: case 0xb:
external_io_select = true;
if (!external_drive_select) if (!external_drive_select)
{ {
if (floppy != floppy1->get_device()) if (floppy != floppy1->get_device())

View File

@ -66,6 +66,7 @@ private:
UINT8 phases; UINT8 phases;
emu_timer *timer, *delay_timer; emu_timer *timer, *delay_timer;
bool external_drive_select; bool external_drive_select;
bool external_io_select;
lss cur_lss, predicted_lss; lss cur_lss, predicted_lss;