mirror of
https://github.com/holub/mame
synced 2025-06-09 22:33:00 +03:00
upd765: Drive selection improvements
- Deselect drives upon reset, or select drive 0 for older FDCs with multiplexed select lines - Deselect other floppies when using set_floppy
This commit is contained in:
parent
6ed04fe619
commit
67daf8d43a
@ -175,6 +175,7 @@ upd765_family_device::upd765_family_device(const machine_config &mconfig, device
|
|||||||
ready_polled = true;
|
ready_polled = true;
|
||||||
ready_connected = true;
|
ready_connected = true;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = true;
|
||||||
external_ready = false;
|
external_ready = false;
|
||||||
dor_reset = 0x00;
|
dor_reset = 0x00;
|
||||||
mode = MODE_AT;
|
mode = MODE_AT;
|
||||||
@ -295,7 +296,8 @@ void upd765_family_device::soft_reset()
|
|||||||
cur_live.fi = nullptr;
|
cur_live.fi = nullptr;
|
||||||
tc_done = false;
|
tc_done = false;
|
||||||
st1 = st2 = st3 = 0x00;
|
st1 = st2 = st3 = 0x00;
|
||||||
selected_drive = -1;
|
|
||||||
|
set_ds(select_multiplexed ? 0 : -1);
|
||||||
|
|
||||||
check_irq();
|
check_irq();
|
||||||
if(ready_polled)
|
if(ready_polled)
|
||||||
@ -345,8 +347,11 @@ void upd765_family_device::set_ds(int fid)
|
|||||||
void upd765_family_device::set_floppy(floppy_image_device *flop)
|
void upd765_family_device::set_floppy(floppy_image_device *flop)
|
||||||
{
|
{
|
||||||
for(floppy_info & elem : flopi) {
|
for(floppy_info & elem : flopi) {
|
||||||
if(elem.dev)
|
if(elem.dev) {
|
||||||
elem.dev->setup_index_pulse_cb(floppy_image_device::index_pulse_cb());
|
elem.dev->setup_index_pulse_cb(floppy_image_device::index_pulse_cb());
|
||||||
|
if(elem.dev != flop)
|
||||||
|
elem.dev->ds_w(-1);
|
||||||
|
}
|
||||||
elem.dev = flop;
|
elem.dev = flop;
|
||||||
}
|
}
|
||||||
if(flop)
|
if(flop)
|
||||||
@ -2914,12 +2919,14 @@ smc37c78_device::smc37c78_device(const machine_config &mconfig, const char *tag,
|
|||||||
{
|
{
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
n82077aa_device::n82077aa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, N82077AA, tag, owner, clock)
|
n82077aa_device::n82077aa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, N82077AA, tag, owner, clock)
|
||||||
{
|
{
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pc_fdc_superio_device::pc_fdc_superio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, PC_FDC_SUPERIO, tag, owner, clock)
|
pc_fdc_superio_device::pc_fdc_superio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, PC_FDC_SUPERIO, tag, owner, clock)
|
||||||
@ -2927,6 +2934,7 @@ pc_fdc_superio_device::pc_fdc_superio_device(const machine_config &mconfig, cons
|
|||||||
ready_polled = false;
|
ready_polled = false;
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp8473_device::dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, DP8473, tag, owner, clock)
|
dp8473_device::dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, DP8473, tag, owner, clock)
|
||||||
@ -2934,6 +2942,7 @@ dp8473_device::dp8473_device(const machine_config &mconfig, const char *tag, dev
|
|||||||
ready_polled = false;
|
ready_polled = false;
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pc8477a_device::pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, PC8477A, tag, owner, clock)
|
pc8477a_device::pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, PC8477A, tag, owner, clock)
|
||||||
@ -2941,6 +2950,7 @@ pc8477a_device::pc8477a_device(const machine_config &mconfig, const char *tag, d
|
|||||||
ready_polled = true;
|
ready_polled = true;
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wd37c65c_device::wd37c65c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, WD37C65C, tag, owner, clock)
|
wd37c65c_device::wd37c65c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd765_family_device(mconfig, WD37C65C, tag, owner, clock)
|
||||||
@ -2948,6 +2958,7 @@ wd37c65c_device::wd37c65c_device(const machine_config &mconfig, const char *tag,
|
|||||||
ready_polled = true;
|
ready_polled = true;
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcs3201_device::mcs3201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
mcs3201_device::mcs3201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||||
@ -2958,6 +2969,7 @@ mcs3201_device::mcs3201_device(const machine_config &mconfig, const char *tag, d
|
|||||||
ready_polled = false;
|
ready_polled = false;
|
||||||
ready_connected = false;
|
ready_connected = false;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcs3201_device::device_start()
|
void mcs3201_device::device_start()
|
||||||
@ -2978,6 +2990,7 @@ tc8566af_device::tc8566af_device(const machine_config &mconfig, const char *tag,
|
|||||||
ready_polled = true;
|
ready_polled = true;
|
||||||
ready_connected = true;
|
ready_connected = true;
|
||||||
select_connected = true;
|
select_connected = true;
|
||||||
|
select_multiplexed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tc8566af_device::device_start()
|
void tc8566af_device::device_start()
|
||||||
|
@ -257,7 +257,7 @@ protected:
|
|||||||
|
|
||||||
static constexpr int rates[4] = { 500000, 300000, 250000, 1000000 };
|
static constexpr int rates[4] = { 500000, 300000, 250000, 1000000 };
|
||||||
|
|
||||||
bool ready_connected, ready_polled, select_connected;
|
bool ready_connected, ready_polled, select_connected, select_multiplexed;
|
||||||
|
|
||||||
bool external_ready;
|
bool external_ready;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user