-bus/idpartner/sasi.cpp : managed to load data from disk

This commit is contained in:
Miodrag Milanovic 2024-02-20 19:35:24 +01:00
parent 5464f70b06
commit 5a89c1f7ba

View File

@ -36,6 +36,7 @@ protected:
void reset_w(u8 data); void reset_w(u8 data);
void req_w(int state); void req_w(int state);
void io_w(int state);
private: private:
required_device<nscsi_bus_device> m_sasibus; required_device<nscsi_bus_device> m_sasibus;
@ -88,6 +89,8 @@ u8 idpartner_sasi_device::data_r()
u8 data = m_sasi->read(); u8 data = m_sasi->read();
if (m_data_enable) { if (m_data_enable) {
m_sasi->ack_w(1); m_sasi->ack_w(1);
if (m_drq_enable)
m_bus->drq_w(0);
} }
return data; return data;
} }
@ -98,6 +101,8 @@ void idpartner_sasi_device::ctrl_w(u8 data)
m_sasi->sel_w(BIT(data,0)); m_sasi->sel_w(BIT(data,0));
m_data_enable = BIT(data,1); m_data_enable = BIT(data,1);
m_drq_enable = BIT(data,5); m_drq_enable = BIT(data,5);
if (m_data_enable && m_drq_enable)
m_bus->drq_w(m_sasi->req_r());
} }
void idpartner_sasi_device::data_w(u8 data) void idpartner_sasi_device::data_w(u8 data)
@ -105,6 +110,8 @@ void idpartner_sasi_device::data_w(u8 data)
m_sasi->write(data); m_sasi->write(data);
if (m_data_enable) { if (m_data_enable) {
m_sasi->ack_w(1); m_sasi->ack_w(1);
if (m_drq_enable)
m_bus->drq_w(0);
} }
} }
@ -117,6 +124,14 @@ void idpartner_sasi_device::reset_w(u8 data)
void idpartner_sasi_device::req_w(int state) void idpartner_sasi_device::req_w(int state)
{ {
m_sasi->ack_w(0); m_sasi->ack_w(0);
if (m_data_enable && m_drq_enable)
m_bus->drq_w(state);
}
void idpartner_sasi_device::io_w(int state)
{
if (state)
m_sasi->write(0); // clears lateched data
} }
void idpartner_sasi_device::device_add_mconfig(machine_config &config) void idpartner_sasi_device::device_add_mconfig(machine_config &config)
@ -127,6 +142,7 @@ void idpartner_sasi_device::device_add_mconfig(machine_config &config)
.option_add_internal("scsicb", NSCSI_CB) .option_add_internal("scsicb", NSCSI_CB)
.machine_config([this](device_t* device) { .machine_config([this](device_t* device) {
downcast<nscsi_callback_device&>(*device).req_callback().set(*this, FUNC(idpartner_sasi_device::req_w)); downcast<nscsi_callback_device&>(*device).req_callback().set(*this, FUNC(idpartner_sasi_device::req_w));
downcast<nscsi_callback_device&>(*device).io_callback().set(*this, FUNC(idpartner_sasi_device::io_w));
}); });
} }
} // anonymous namespace } // anonymous namespace