mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
bus/bbc/fdc, i8271: Simplify read/write handlers (nw)
This commit is contained in:
parent
7f50bbafaa
commit
82b8fb912d
@ -84,7 +84,7 @@ void atom_discpack_device::device_start()
|
||||
address_space &space = m_bus->memspace();
|
||||
|
||||
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map);
|
||||
space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
|
||||
space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8smo_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
|
||||
space.install_ram(0x2000, 0x23ff);
|
||||
space.install_ram(0x2400, 0x27ff);
|
||||
space.install_ram(0x3c00, 0x3fff);
|
||||
|
@ -85,7 +85,7 @@ void acorn_fdc_device::device_reset()
|
||||
address_space &space = m_bus->memspace();
|
||||
|
||||
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map);
|
||||
space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
|
||||
space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8smo_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -166,30 +166,30 @@ void bbc_acorn1770_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_acorn8271_device::read)
|
||||
uint8_t bbc_acorn8271_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if (offset & 0x04)
|
||||
{
|
||||
data = m_fdc->data_r(space , 0);
|
||||
data = m_fdc->data_r();
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_fdc->read(space, offset & 0x03);
|
||||
data = m_fdc->read(offset & 0x03);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_acorn8271_device::write)
|
||||
void bbc_acorn8271_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
m_fdc->data_w(space, 0, data);
|
||||
m_fdc->data_w(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fdc->write(space, offset & 0x03, data);
|
||||
m_fdc->write(offset & 0x03, data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -207,7 +207,7 @@ WRITE_LINE_MEMBER(bbc_acorn8271_device::side_w)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(bbc_acorn1770_device::read)
|
||||
uint8_t bbc_acorn1770_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
@ -222,7 +222,7 @@ READ8_MEMBER(bbc_acorn1770_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_acorn1770_device::write)
|
||||
void bbc_acorn1770_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -42,8 +42,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(motor_w);
|
||||
@ -70,8 +70,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
|
||||
|
@ -89,30 +89,30 @@ void bbc_ams3_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_ams3_device::read)
|
||||
uint8_t bbc_ams3_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if (offset & 0x04)
|
||||
{
|
||||
data = m_fdc->data_r(space , 0);
|
||||
data = m_fdc->data_r();
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_fdc->read(space, offset & 0x03);
|
||||
data = m_fdc->read(offset & 0x03);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_ams3_device::write)
|
||||
void bbc_ams3_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
m_fdc->data_w(space, 0, data);
|
||||
m_fdc->data_w(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fdc->write(space, offset & 0x03, data);
|
||||
m_fdc->write(offset & 0x03, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,8 +39,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
|
||||
|
@ -137,7 +137,7 @@ void bbc_cumanafdc_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_cumanafdc_device::read)
|
||||
uint8_t bbc_cumanafdc_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -152,7 +152,7 @@ READ8_MEMBER(bbc_cumanafdc_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_cumanafdc_device::write)
|
||||
void bbc_cumanafdc_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -39,8 +39,8 @@ protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
required_device<mb8877_device> m_fdc;
|
||||
required_device<floppy_connector> m_floppy0;
|
||||
|
@ -100,7 +100,7 @@ void bbc_cv1797_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_cv1797_device::read)
|
||||
uint8_t bbc_cv1797_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -115,7 +115,7 @@ READ8_MEMBER(bbc_cv1797_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_cv1797_device::write)
|
||||
void bbc_cv1797_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -40,8 +40,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
DECLARE_FLOPPY_FORMATS(floppy_formats);
|
||||
|
@ -89,10 +89,10 @@ void bbc_fdc_slot_device::device_reset()
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(bbc_fdc_slot_device::read)
|
||||
uint8_t bbc_fdc_slot_device::read(offs_t offset)
|
||||
{
|
||||
if (m_card)
|
||||
return m_card->read(space, offset);
|
||||
return m_card->read(offset);
|
||||
else
|
||||
return 0xff;
|
||||
}
|
||||
@ -101,10 +101,10 @@ READ8_MEMBER(bbc_fdc_slot_device::read)
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(bbc_fdc_slot_device::write)
|
||||
void bbc_fdc_slot_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (m_card)
|
||||
m_card->write(space, offset, data);
|
||||
m_card->write(offset, data);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -41,8 +41,8 @@ public:
|
||||
auto intrq_wr_callback() { return m_intrq_cb.bind(); }
|
||||
auto drq_wr_callback() { return m_drq_cb.bind(); }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read);
|
||||
virtual DECLARE_WRITE8_MEMBER(write);
|
||||
uint8_t read(offs_t offset);
|
||||
void write(offs_t offset, uint8_t data);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( intrq_w ) { m_intrq_cb(state); }
|
||||
DECLARE_WRITE_LINE_MEMBER( drq_w) { m_drq_cb(state); }
|
||||
@ -66,8 +66,8 @@ private:
|
||||
class device_bbc_fdc_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
|
||||
virtual DECLARE_WRITE8_MEMBER(write) { }
|
||||
virtual uint8_t read(offs_t offset) { return 0xff; }
|
||||
virtual void write(offs_t offset, uint8_t data) { }
|
||||
|
||||
protected:
|
||||
device_bbc_fdc_interface(const machine_config &mconfig, device_t &device);
|
||||
|
@ -101,7 +101,7 @@ void bbc_microware_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_microware_device::read)
|
||||
uint8_t bbc_microware_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -116,7 +116,7 @@ READ8_MEMBER(bbc_microware_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_microware_device::write)
|
||||
void bbc_microware_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -42,8 +42,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
DECLARE_FLOPPY_FORMATS(floppy_formats);
|
||||
|
@ -212,7 +212,7 @@ void bbc_opusfdc_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_opus8272_device::read)
|
||||
uint8_t bbc_opus8272_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
@ -240,7 +240,7 @@ READ8_MEMBER(bbc_opus8272_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_opus8272_device::write)
|
||||
void bbc_opus8272_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
floppy_image_device *floppy = nullptr;
|
||||
|
||||
@ -265,7 +265,7 @@ WRITE8_MEMBER(bbc_opus8272_device::write)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(bbc_opusfdc_device::read)
|
||||
uint8_t bbc_opusfdc_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -280,7 +280,7 @@ READ8_MEMBER(bbc_opusfdc_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_opusfdc_device::write)
|
||||
void bbc_opusfdc_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -36,8 +36,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
required_device<i8272a_device> m_fdc;
|
||||
@ -62,8 +62,8 @@ protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
required_device<wd_fdc_device_base> m_fdc;
|
||||
required_device<floppy_connector> m_floppy0;
|
||||
|
@ -147,7 +147,7 @@ void bbc_weddb3_device::device_start()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_weddb2_device::read)
|
||||
uint8_t bbc_weddb2_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -162,7 +162,7 @@ READ8_MEMBER(bbc_weddb2_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_weddb2_device::write)
|
||||
void bbc_weddb2_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
@ -192,7 +192,7 @@ WRITE8_MEMBER(bbc_weddb2_device::write)
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(bbc_weddb3_device::read)
|
||||
uint8_t bbc_weddb3_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
@ -207,7 +207,7 @@ READ8_MEMBER(bbc_weddb3_device::read)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_weddb3_device::write)
|
||||
void bbc_weddb3_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset & 0x04)
|
||||
{
|
||||
|
@ -45,8 +45,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
required_device<wd_fdc_device_base> m_fdc;
|
||||
@ -68,8 +68,8 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
private:
|
||||
required_device<wd_fdc_device_base> m_fdc;
|
||||
|
@ -132,7 +132,7 @@ void i8271_device::set_floppy(floppy_image_device *flop)
|
||||
flop->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&i8271_device::index_callback, this));
|
||||
}
|
||||
|
||||
READ8_MEMBER(i8271_device::sr_r)
|
||||
uint8_t i8271_device::sr_r()
|
||||
{
|
||||
uint32_t ret = (irq ? SR_IRQ : 0);
|
||||
switch(main_phase) {
|
||||
@ -151,11 +151,13 @@ READ8_MEMBER(i8271_device::sr_r)
|
||||
return ret;
|
||||
}
|
||||
|
||||
READ8_MEMBER(i8271_device::rr_r)
|
||||
uint8_t i8271_device::rr_r()
|
||||
{
|
||||
if(main_phase == PHASE_RESULT)
|
||||
main_phase = PHASE_IDLE;
|
||||
set_irq(false);
|
||||
if (!machine().side_effects_disabled()) {
|
||||
if (main_phase == PHASE_RESULT)
|
||||
main_phase = PHASE_IDLE;
|
||||
set_irq(false);
|
||||
}
|
||||
return rr;
|
||||
}
|
||||
|
||||
@ -164,31 +166,32 @@ void i8271_device::set_rate(int rate)
|
||||
cur_rate = rate;
|
||||
}
|
||||
|
||||
READ8_MEMBER(i8271_device::read)
|
||||
uint8_t i8271_device::read(offs_t offset)
|
||||
{
|
||||
switch(offset & 0x03) {
|
||||
case 0x00: return sr_r(space, 0);
|
||||
case 0x01: return rr_r(space, 0);
|
||||
case 0x00: return sr_r();
|
||||
case 0x01: return rr_r();
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(i8271_device::write)
|
||||
void i8271_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
switch(offset & 0x03) {
|
||||
case 0x00: cmd_w(space, 0, data); break;
|
||||
case 0x01: param_w(space, 0, data); break;
|
||||
case 0x02: reset_w(space, 0, data); break;
|
||||
case 0x00: cmd_w(data); break;
|
||||
case 0x01: param_w(data); break;
|
||||
case 0x02: reset_w(data); break;
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(i8271_device::data_r)
|
||||
uint8_t i8271_device::data_r()
|
||||
{
|
||||
set_drq(false);
|
||||
if (!machine().side_effects_disabled())
|
||||
set_drq(false);
|
||||
return dma_data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(i8271_device::data_w)
|
||||
void i8271_device::data_w(uint8_t data)
|
||||
{
|
||||
if(drq) {
|
||||
set_drq(false);
|
||||
@ -196,7 +199,7 @@ WRITE8_MEMBER(i8271_device::data_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(i8271_device::cmd_w)
|
||||
void i8271_device::cmd_w(uint8_t data)
|
||||
{
|
||||
if(main_phase == PHASE_IDLE) {
|
||||
command[0] = data;
|
||||
@ -211,7 +214,7 @@ WRITE8_MEMBER(i8271_device::cmd_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(i8271_device::param_w)
|
||||
void i8271_device::param_w(uint8_t data)
|
||||
{
|
||||
if(main_phase == PHASE_CMD) {
|
||||
command[command_pos++] = data;
|
||||
|
@ -24,10 +24,10 @@ public:
|
||||
auto hdl_wr_callback() { return hdl_cb.bind(); }
|
||||
auto opt_wr_callback() { return opt_cb.bind(); }
|
||||
|
||||
DECLARE_READ8_MEMBER(read);
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
DECLARE_READ8_MEMBER (data_r);
|
||||
DECLARE_WRITE8_MEMBER(data_w);
|
||||
uint8_t read(offs_t offset);
|
||||
void write(offs_t offset, uint8_t data);
|
||||
uint8_t data_r();
|
||||
void data_w(uint8_t data);
|
||||
|
||||
void ready_w(bool val);
|
||||
|
||||
@ -228,11 +228,11 @@ private:
|
||||
C_INCOMPLETE
|
||||
};
|
||||
|
||||
DECLARE_READ8_MEMBER (sr_r);
|
||||
DECLARE_READ8_MEMBER (rr_r);
|
||||
DECLARE_WRITE8_MEMBER(reset_w) { if(data == 1) soft_reset(); }
|
||||
DECLARE_WRITE8_MEMBER(cmd_w);
|
||||
DECLARE_WRITE8_MEMBER(param_w);
|
||||
uint8_t sr_r();
|
||||
uint8_t rr_r();
|
||||
void reset_w(uint8_t data) { if(data == 1) soft_reset(); }
|
||||
void cmd_w(uint8_t data);
|
||||
void param_w(uint8_t data);
|
||||
|
||||
void delay_cycles(emu_timer *tm, int cycles);
|
||||
void set_drq(bool state);
|
||||
|
Loading…
Reference in New Issue
Block a user