From f2d2237a65db33206dd3290ca3097604bdc8206a Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Sun, 7 Sep 2014 14:06:26 +0000 Subject: [PATCH] (MESS) apple3: Further improvements to drive select (nw) --- src/emu/machine/wozfdc.c | 41 +++++++++++++++++++++++++++++++++------- src/emu/machine/wozfdc.h | 1 + 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/emu/machine/wozfdc.c b/src/emu/machine/wozfdc.c index ded563becc2..d53791c9617 100644 --- a/src/emu/machine/wozfdc.c +++ b/src/emu/machine/wozfdc.c @@ -68,6 +68,31 @@ void wozfdc_device::device_start() timer = timer_alloc(0); 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() @@ -92,7 +117,7 @@ void wozfdc_device::a3_update_drive_sel() { floppy_image_device *newflop = NULL; - if (!enable1) + if ((!enable1) || (!external_io_select)) { newflop = floppy0->get_device(); } @@ -235,12 +260,13 @@ void wozfdc_device::control(int offset) break; } break; - case 0xa: - if(floppy != floppy0->get_device()) { - if(active) { - lss_sync(); - floppy->mon_w(true); - } + case 0xa: + external_io_select = false; + if(floppy != floppy0->get_device()) { + if(active) { + lss_sync(); + floppy->mon_w(true); + } floppy = floppy0->get_device(); if(active) { floppy->mon_w(false); @@ -249,6 +275,7 @@ void wozfdc_device::control(int offset) } break; case 0xb: + external_io_select = true; if (!external_drive_select) { if (floppy != floppy1->get_device()) diff --git a/src/emu/machine/wozfdc.h b/src/emu/machine/wozfdc.h index 62e358d190c..d2bb138dcde 100644 --- a/src/emu/machine/wozfdc.h +++ b/src/emu/machine/wozfdc.h @@ -66,6 +66,7 @@ private: UINT8 phases; emu_timer *timer, *delay_timer; bool external_drive_select; + bool external_io_select; lss cur_lss, predicted_lss;