bus/bbc/fdc, i8271: Simplify read/write handlers (nw)

This commit is contained in:
AJR 2019-03-10 16:39:27 -04:00
parent 7f50bbafaa
commit 82b8fb912d
20 changed files with 87 additions and 84 deletions

View File

@ -84,7 +84,7 @@ void atom_discpack_device::device_start()
address_space &space = m_bus->memspace(); address_space &space = m_bus->memspace();
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map); 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(0x2000, 0x23ff);
space.install_ram(0x2400, 0x27ff); space.install_ram(0x2400, 0x27ff);
space.install_ram(0x3c00, 0x3fff); space.install_ram(0x3c00, 0x3fff);

View File

@ -85,7 +85,7 @@ void acorn_fdc_device::device_reset()
address_space &space = m_bus->memspace(); address_space &space = m_bus->memspace();
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map); 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()));
} }

View File

@ -166,30 +166,30 @@ void bbc_acorn1770_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_acorn8271_device::read) uint8_t bbc_acorn8271_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
if (offset & 0x04) if (offset & 0x04)
{ {
data = m_fdc->data_r(space , 0); data = m_fdc->data_r();
} }
else else
{ {
data = m_fdc->read(space, offset & 0x03); data = m_fdc->read(offset & 0x03);
} }
return data; return data;
} }
WRITE8_MEMBER(bbc_acorn8271_device::write) void bbc_acorn8271_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {
m_fdc->data_w(space, 0, data); m_fdc->data_w(data);
} }
else 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; uint8_t data = 0xff;
@ -222,7 +222,7 @@ READ8_MEMBER(bbc_acorn1770_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_acorn1770_device::write) void bbc_acorn1770_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
DECLARE_WRITE_LINE_MEMBER(motor_w); DECLARE_WRITE_LINE_MEMBER(motor_w);
@ -70,8 +70,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);

View File

@ -89,30 +89,30 @@ void bbc_ams3_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_ams3_device::read) uint8_t bbc_ams3_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
if (offset & 0x04) if (offset & 0x04)
{ {
data = m_fdc->data_r(space , 0); data = m_fdc->data_r();
} }
else else
{ {
data = m_fdc->read(space, offset & 0x03); data = m_fdc->read(offset & 0x03);
} }
return data; return data;
} }
WRITE8_MEMBER(bbc_ams3_device::write) void bbc_ams3_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {
m_fdc->data_w(space, 0, data); m_fdc->data_w(data);
} }
else else
{ {
m_fdc->write(space, offset & 0x03, data); m_fdc->write(offset & 0x03, data);
} }
} }

View File

@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);

View File

@ -137,7 +137,7 @@ void bbc_cumanafdc_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_cumanafdc_device::read) uint8_t bbc_cumanafdc_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
@ -152,7 +152,7 @@ READ8_MEMBER(bbc_cumanafdc_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_cumanafdc_device::write) void bbc_cumanafdc_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -39,8 +39,8 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
required_device<mb8877_device> m_fdc; required_device<mb8877_device> m_fdc;
required_device<floppy_connector> m_floppy0; required_device<floppy_connector> m_floppy0;

View File

@ -100,7 +100,7 @@ void bbc_cv1797_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_cv1797_device::read) uint8_t bbc_cv1797_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
@ -115,7 +115,7 @@ READ8_MEMBER(bbc_cv1797_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_cv1797_device::write) void bbc_cv1797_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
DECLARE_FLOPPY_FORMATS(floppy_formats); DECLARE_FLOPPY_FORMATS(floppy_formats);

View File

@ -89,10 +89,10 @@ void bbc_fdc_slot_device::device_reset()
// read // read
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER(bbc_fdc_slot_device::read) uint8_t bbc_fdc_slot_device::read(offs_t offset)
{ {
if (m_card) if (m_card)
return m_card->read(space, offset); return m_card->read(offset);
else else
return 0xff; return 0xff;
} }
@ -101,10 +101,10 @@ READ8_MEMBER(bbc_fdc_slot_device::read)
// write // write
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER(bbc_fdc_slot_device::write) void bbc_fdc_slot_device::write(offs_t offset, uint8_t data)
{ {
if (m_card) if (m_card)
m_card->write(space, offset, data); m_card->write(offset, data);
} }
//------------------------------------------------- //-------------------------------------------------

View File

@ -41,8 +41,8 @@ public:
auto intrq_wr_callback() { return m_intrq_cb.bind(); } auto intrq_wr_callback() { return m_intrq_cb.bind(); }
auto drq_wr_callback() { return m_drq_cb.bind(); } auto drq_wr_callback() { return m_drq_cb.bind(); }
virtual DECLARE_READ8_MEMBER(read); uint8_t read(offs_t offset);
virtual DECLARE_WRITE8_MEMBER(write); void write(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( intrq_w ) { m_intrq_cb(state); } DECLARE_WRITE_LINE_MEMBER( intrq_w ) { m_intrq_cb(state); }
DECLARE_WRITE_LINE_MEMBER( drq_w) { m_drq_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 class device_bbc_fdc_interface : public device_slot_card_interface
{ {
public: public:
virtual DECLARE_READ8_MEMBER(read) { return 0xff; } virtual uint8_t read(offs_t offset) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write) { } virtual void write(offs_t offset, uint8_t data) { }
protected: protected:
device_bbc_fdc_interface(const machine_config &mconfig, device_t &device); device_bbc_fdc_interface(const machine_config &mconfig, device_t &device);

View File

@ -101,7 +101,7 @@ void bbc_microware_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_microware_device::read) uint8_t bbc_microware_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
@ -116,7 +116,7 @@ READ8_MEMBER(bbc_microware_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_microware_device::write) void bbc_microware_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
DECLARE_FLOPPY_FORMATS(floppy_formats); DECLARE_FLOPPY_FORMATS(floppy_formats);

View File

@ -212,7 +212,7 @@ void bbc_opusfdc_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_opus8272_device::read) uint8_t bbc_opus8272_device::read(offs_t offset)
{ {
uint8_t data = 0xff; uint8_t data = 0xff;
@ -240,7 +240,7 @@ READ8_MEMBER(bbc_opus8272_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_opus8272_device::write) void bbc_opus8272_device::write(offs_t offset, uint8_t data)
{ {
floppy_image_device *floppy = nullptr; 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; uint8_t data;
@ -280,7 +280,7 @@ READ8_MEMBER(bbc_opusfdc_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_opusfdc_device::write) void bbc_opusfdc_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
required_device<i8272a_device> m_fdc; required_device<i8272a_device> m_fdc;
@ -62,8 +62,8 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
required_device<wd_fdc_device_base> m_fdc; required_device<wd_fdc_device_base> m_fdc;
required_device<floppy_connector> m_floppy0; required_device<floppy_connector> m_floppy0;

View File

@ -147,7 +147,7 @@ void bbc_weddb3_device::device_start()
// IMPLEMENTATION // IMPLEMENTATION
//************************************************************************** //**************************************************************************
READ8_MEMBER(bbc_weddb2_device::read) uint8_t bbc_weddb2_device::read(offs_t offset)
{ {
uint8_t data; uint8_t data;
@ -162,7 +162,7 @@ READ8_MEMBER(bbc_weddb2_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_weddb2_device::write) void bbc_weddb2_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) 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; uint8_t data;
@ -207,7 +207,7 @@ READ8_MEMBER(bbc_weddb3_device::read)
return data; return data;
} }
WRITE8_MEMBER(bbc_weddb3_device::write) void bbc_weddb3_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x04) if (offset & 0x04)
{ {

View File

@ -45,8 +45,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
required_device<wd_fdc_device_base> m_fdc; required_device<wd_fdc_device_base> m_fdc;
@ -68,8 +68,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write) override; virtual void write(offs_t offset, uint8_t data) override;
private: private:
required_device<wd_fdc_device_base> m_fdc; required_device<wd_fdc_device_base> m_fdc;

View File

@ -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)); 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); uint32_t ret = (irq ? SR_IRQ : 0);
switch(main_phase) { switch(main_phase) {
@ -151,11 +151,13 @@ READ8_MEMBER(i8271_device::sr_r)
return ret; return ret;
} }
READ8_MEMBER(i8271_device::rr_r) uint8_t i8271_device::rr_r()
{ {
if(main_phase == PHASE_RESULT) if (!machine().side_effects_disabled()) {
main_phase = PHASE_IDLE; if (main_phase == PHASE_RESULT)
set_irq(false); main_phase = PHASE_IDLE;
set_irq(false);
}
return rr; return rr;
} }
@ -164,31 +166,32 @@ void i8271_device::set_rate(int rate)
cur_rate = rate; cur_rate = rate;
} }
READ8_MEMBER(i8271_device::read) uint8_t i8271_device::read(offs_t offset)
{ {
switch(offset & 0x03) { switch(offset & 0x03) {
case 0x00: return sr_r(space, 0); case 0x00: return sr_r();
case 0x01: return rr_r(space, 0); case 0x01: return rr_r();
} }
return 0xff; return 0xff;
} }
WRITE8_MEMBER(i8271_device::write) void i8271_device::write(offs_t offset, uint8_t data)
{ {
switch(offset & 0x03) { switch(offset & 0x03) {
case 0x00: cmd_w(space, 0, data); break; case 0x00: cmd_w(data); break;
case 0x01: param_w(space, 0, data); break; case 0x01: param_w(data); break;
case 0x02: reset_w(space, 0, 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; return dma_data;
} }
WRITE8_MEMBER(i8271_device::data_w) void i8271_device::data_w(uint8_t data)
{ {
if(drq) { if(drq) {
set_drq(false); 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) { if(main_phase == PHASE_IDLE) {
command[0] = data; 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) { if(main_phase == PHASE_CMD) {
command[command_pos++] = data; command[command_pos++] = data;

View File

@ -24,10 +24,10 @@ public:
auto hdl_wr_callback() { return hdl_cb.bind(); } auto hdl_wr_callback() { return hdl_cb.bind(); }
auto opt_wr_callback() { return opt_cb.bind(); } auto opt_wr_callback() { return opt_cb.bind(); }
DECLARE_READ8_MEMBER(read); uint8_t read(offs_t offset);
DECLARE_WRITE8_MEMBER(write); void write(offs_t offset, uint8_t data);
DECLARE_READ8_MEMBER (data_r); uint8_t data_r();
DECLARE_WRITE8_MEMBER(data_w); void data_w(uint8_t data);
void ready_w(bool val); void ready_w(bool val);
@ -228,11 +228,11 @@ private:
C_INCOMPLETE C_INCOMPLETE
}; };
DECLARE_READ8_MEMBER (sr_r); uint8_t sr_r();
DECLARE_READ8_MEMBER (rr_r); uint8_t rr_r();
DECLARE_WRITE8_MEMBER(reset_w) { if(data == 1) soft_reset(); } void reset_w(uint8_t data) { if(data == 1) soft_reset(); }
DECLARE_WRITE8_MEMBER(cmd_w); void cmd_w(uint8_t data);
DECLARE_WRITE8_MEMBER(param_w); void param_w(uint8_t data);
void delay_cycles(emu_timer *tm, int cycles); void delay_cycles(emu_timer *tm, int cycles);
void set_drq(bool state); void set_drq(bool state);