diff options
author | 2019-03-25 23:13:40 +0100 | |
---|---|---|
committer | 2019-03-25 23:13:40 +0100 | |
commit | b380514764cf857469bae61c11143a19f79a74c5 (patch) | |
tree | 63c8012e262618f08a332da31dd714281aa2c5ed /src/devices/bus/msx_slot | |
parent | c24473ddff715ecec2e258a6eb38960cf8c8e98e (diff) |
Revert "conflict resolution (nw)"
This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing
changes made to 009cba4fb8102102168ef32870892438327f3705.
Diffstat (limited to 'src/devices/bus/msx_slot')
22 files changed, 242 insertions, 176 deletions
diff --git a/src/devices/bus/msx_slot/bunsetsu.cpp b/src/devices/bus/msx_slot/bunsetsu.cpp index 79a07b2e53a..a2f8a131a54 100644 --- a/src/devices/bus/msx_slot/bunsetsu.cpp +++ b/src/devices/bus/msx_slot/bunsetsu.cpp @@ -25,17 +25,17 @@ void msx_slot_bunsetsu_device::device_reset() } -uint8_t msx_slot_bunsetsu_device::read(offs_t offset) +READ8_MEMBER(msx_slot_bunsetsu_device::read) { if (offset == 0xbfff) { return m_bunsetsu_region[m_bunsetsu_address++ & 0x1ffff]; } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } -void msx_slot_bunsetsu_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_bunsetsu_device::write) { switch (offset) { diff --git a/src/devices/bus/msx_slot/bunsetsu.h b/src/devices/bus/msx_slot/bunsetsu.h index df0bcedb32f..70649340824 100644 --- a/src/devices/bus/msx_slot/bunsetsu.h +++ b/src/devices/bus/msx_slot/bunsetsu.h @@ -12,6 +12,11 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device) +#define MCFG_MSX_SLOT_BUNSETSU_ADD(_tag, _startpage, _numpages, _region, _offset, _bunsetsu_region_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_BUNSETSU, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_bunsetsu_device &>(*device).set_bunsetsu_region_tag(_bunsetsu_region_tag); + class msx_slot_bunsetsu_device : public msx_slot_rom_device { public: @@ -20,8 +25,8 @@ public: // configuration helpers void set_bunsetsu_region_tag(const char *tag) { m_bunsetsu_region.set_tag(tag); } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_reset() override; diff --git a/src/devices/bus/msx_slot/cartridge.cpp b/src/devices/bus/msx_slot/cartridge.cpp index 87b89f93c78..522ea6f4548 100644 --- a/src/devices/bus/msx_slot/cartridge.cpp +++ b/src/devices/bus/msx_slot/cartridge.cpp @@ -43,7 +43,7 @@ msx_slot_cartridge_device::msx_slot_cartridge_device(const machine_config &mconf : device_t(mconfig, type, tag, owner, clock) , device_image_interface(mconfig, *this) , device_slot_interface(mconfig, *this) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_irq_handler(*this) , m_cartridge(nullptr) { @@ -90,17 +90,10 @@ static const char *msx_cart_get_slot_option(int type) } -void msx_slot_cartridge_device::device_resolve_objects() +void msx_slot_cartridge_device::device_start() { m_irq_handler.resolve_safe(); m_cartridge = dynamic_cast<msx_cart_interface *>(get_card_device()); - if (m_cartridge) - m_cartridge->m_exp = this; -} - - -void msx_slot_cartridge_device::device_start() -{ } @@ -176,7 +169,7 @@ image_init_result msx_slot_cartridge_device::call_load() } } - m_cartridge->m_exp = this; + m_cartridge->set_out_irq_cb(DEVCB_WRITELINE(*this, msx_slot_cartridge_device, irq_out)); m_cartridge->initialize_cartridge(); if (m_cartridge->get_sram_size() > 0) @@ -338,21 +331,21 @@ std::string msx_slot_cartridge_device::get_default_card_software(get_default_car } -uint8_t msx_slot_cartridge_device::read(offs_t offset) +READ8_MEMBER(msx_slot_cartridge_device::read) { if ( m_cartridge ) { - return m_cartridge->read_cart(offset); + return m_cartridge->read_cart(space, offset); } return 0xFF; } -void msx_slot_cartridge_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_cartridge_device::write) { if ( m_cartridge ) { - m_cartridge->write_cart(offset, data); + m_cartridge->write_cart(space, offset, data); } } @@ -367,4 +360,8 @@ msx_slot_yamaha_expansion_device::msx_slot_yamaha_expansion_device(const machine void msx_slot_yamaha_expansion_device::device_start() { + m_irq_handler.resolve_safe(); + m_cartridge = dynamic_cast<msx_cart_interface *>(get_card_device()); + if (m_cartridge) + m_cartridge->set_out_irq_cb(DEVCB_WRITELINE(*this, msx_slot_cartridge_device, irq_out)); } diff --git a/src/devices/bus/msx_slot/cartridge.h b/src/devices/bus/msx_slot/cartridge.h index faabf394042..be0856e8d82 100644 --- a/src/devices/bus/msx_slot/cartridge.h +++ b/src/devices/bus/msx_slot/cartridge.h @@ -14,6 +14,18 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_CARTRIDGE, msx_slot_cartridge_device) DECLARE_DEVICE_TYPE(MSX_SLOT_YAMAHA_EXPANSION, msx_slot_yamaha_expansion_device) +#define MCFG_MSX_SLOT_CARTRIDGE_ADD(_tag, _devcb) \ + MCFG_DEVICE_ADD(_tag, MSX_SLOT_CARTRIDGE, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(msx_cart, nullptr, false) \ + downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb); + + +#define MCFG_MSX_SLOT_YAMAHA_EXPANSION_ADD(_tag, _devcb, _default) \ + MCFG_DEVICE_ADD(_tag, MSX_SLOT_YAMAHA_EXPANSION, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(msx_yamaha_60pin, _default, false) \ + downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb); + + class msx_slot_cartridge_device : public device_t , public device_image_interface , public device_slot_interface @@ -23,8 +35,8 @@ public: // construction/destruction msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // configuration helpers - auto irq_handler() { return m_irq_handler.bind(); } + // static configuration helpers + template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); } // image-level overrides virtual image_init_result call_load() override; @@ -45,8 +57,8 @@ public: virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override; // msx_internal_slot-level overrides - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; DECLARE_WRITE_LINE_MEMBER(irq_out); @@ -54,7 +66,6 @@ protected: msx_slot_cartridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_resolve_objects() override; virtual void device_start() override; devcb_write_line m_irq_handler; diff --git a/src/devices/bus/msx_slot/disk.cpp b/src/devices/bus/msx_slot/disk.cpp index 309b7f2d80f..39ec248e3f2 100644 --- a/src/devices/bus/msx_slot/disk.cpp +++ b/src/devices/bus/msx_slot/disk.cpp @@ -137,6 +137,8 @@ void msx_slot_disk1_device::device_start() save_item(NAME(m_side_control)); save_item(NAME(m_control)); + + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk1_device::post_load), this)); } @@ -146,7 +148,7 @@ void msx_slot_disk1_device::device_reset() } -void msx_slot_disk1_device::device_post_load() +void msx_slot_disk1_device::post_load() { uint8_t data = m_control; @@ -205,7 +207,7 @@ void msx_slot_disk1_device::set_control(uint8_t data) } -uint8_t msx_slot_disk1_device::read(offs_t offset) +READ8_MEMBER(msx_slot_disk1_device::read) { switch (offset) { @@ -238,11 +240,11 @@ uint8_t msx_slot_disk1_device::read(offs_t offset) return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80); } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } -void msx_slot_disk1_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk1_device::write) { switch (offset) { @@ -296,6 +298,8 @@ void msx_slot_disk2_device::device_start() msx_slot_wd_disk_device::device_start(); save_item(NAME(m_control)); + + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk2_device::post_load), this)); } @@ -305,7 +309,7 @@ void msx_slot_disk2_device::device_reset() } -void msx_slot_disk2_device::device_post_load() +void msx_slot_disk2_device::post_load() { uint8_t data = m_control; @@ -352,7 +356,7 @@ void msx_slot_disk2_device::set_control(uint8_t data) } -uint8_t msx_slot_disk2_device::read(offs_t offset) +READ8_MEMBER(msx_slot_disk2_device::read) { switch (offset) { @@ -377,11 +381,11 @@ uint8_t msx_slot_disk2_device::read(offs_t offset) return 0x3f | (m_fdc->drq_r() ? 0 : 0x40) | (m_fdc->intrq_r() ? 0x80 : 0); } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } -void msx_slot_disk2_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk2_device::write) { switch (offset) { @@ -427,20 +431,20 @@ msx_slot_disk3_device::msx_slot_disk3_device(const machine_config &mconfig, cons } -void msx_slot_disk3_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk3_device::write) { switch (offset) { case 0x7ff8: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA - m_fdc->dor_w(data); + m_fdc->dor_w(space, 2, data); break; case 0x7ff9: // CR1 : 0 - 0 - C4E - C4 - SBME - SBM - TCE - FDCTC - m_fdc->cr1_w(data); + m_fdc->cr1_w(space, 3, data); break; case 0x7ffb: // Data Register - m_fdc->fifo_w(data); + m_fdc->fifo_w(space, 5, data); break; default: @@ -450,17 +454,17 @@ void msx_slot_disk3_device::write(offs_t offset, uint8_t data) } -uint8_t msx_slot_disk3_device::read(offs_t offset) +READ8_MEMBER(msx_slot_disk3_device::read) { switch (offset) { case 0x7ffa: // Status Register - return m_fdc->msr_r(); + return m_fdc->msr_r(space, 4); case 0x7ffb: // Data Register - return m_fdc->fifo_r(); + return m_fdc->fifo_r(space, 5); } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } @@ -473,7 +477,7 @@ msx_slot_disk4_device::msx_slot_disk4_device(const machine_config &mconfig, cons } -void msx_slot_disk4_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk4_device::write) { switch (offset) { @@ -481,15 +485,15 @@ void msx_slot_disk4_device::write(offs_t offset, uint8_t data) break; case 0x7ff2: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA - m_fdc->dor_w(data); + m_fdc->dor_w(space, 2, data); break; case 0x7ff3: // CR1 : 0 - 0 - C4E - C4 - SBME - SBM - TCE - FDCTC - m_fdc->cr1_w(data); + m_fdc->cr1_w(space, 3, data); break; case 0x7ff5: // Data Register - m_fdc->fifo_w(data); + m_fdc->fifo_w(space, 5, data); break; default: @@ -499,7 +503,7 @@ void msx_slot_disk4_device::write(offs_t offset, uint8_t data) } -uint8_t msx_slot_disk4_device::read(offs_t offset) +READ8_MEMBER(msx_slot_disk4_device::read) { switch (offset) { @@ -508,12 +512,12 @@ uint8_t msx_slot_disk4_device::read(offs_t offset) break; case 0x7ff4: // Status Register - return m_fdc->msr_r(); + return m_fdc->msr_r(space, 4); case 0x7ff5: // Data Register - return m_fdc->fifo_r(); + return m_fdc->fifo_r(space, 5); } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } @@ -532,9 +536,12 @@ void msx_slot_disk5_device::device_start() save_item(NAME(m_control)); + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk5_device::post_load), this)); + // Install IO read/write handlers - io_space().install_write_handler(0xd0, 0xd4, write8sm_delegate(FUNC(msx_slot_disk5_device::io_write), this)); - io_space().install_read_handler(0xd0, 0xd4, read8sm_delegate(FUNC(msx_slot_disk5_device::io_read), this)); + address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); + space.install_write_handler(0xd0, 0xd4, write8_delegate(FUNC(msx_slot_disk5_device::io_write), this)); + space.install_read_handler(0xd0, 0xd4, read8_delegate(FUNC(msx_slot_disk5_device::io_read), this)); } @@ -544,7 +551,7 @@ void msx_slot_disk5_device::device_reset() } -void msx_slot_disk5_device::device_post_load() +void msx_slot_disk5_device::post_load() { set_control(m_control); } @@ -587,7 +594,7 @@ void msx_slot_disk5_device::set_control(uint8_t control) } -uint8_t msx_slot_disk5_device::io_read(offs_t offset) +READ8_MEMBER(msx_slot_disk5_device::io_read) { switch (offset) { @@ -611,7 +618,7 @@ uint8_t msx_slot_disk5_device::io_read(offs_t offset) } -void msx_slot_disk5_device::io_write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk5_device::io_write) { switch (offset) { @@ -655,6 +662,8 @@ void msx_slot_disk6_device::device_start() save_item(NAME(m_side_motor)); save_item(NAME(m_drive_select0)); save_item(NAME(m_drive_select1)); + + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this)); } @@ -664,7 +673,7 @@ void msx_slot_disk6_device::device_reset() } -void msx_slot_disk6_device::device_post_load() +void msx_slot_disk6_device::post_load() { select_drive(); } @@ -706,7 +715,7 @@ void msx_slot_disk6_device::set_side_motor() } -uint8_t msx_slot_disk6_device::read(offs_t offset) +READ8_MEMBER(msx_slot_disk6_device::read) { switch (offset) { @@ -748,11 +757,11 @@ uint8_t msx_slot_disk6_device::read(offs_t offset) return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80); } - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } -void msx_slot_disk6_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_disk6_device::write) { switch (offset) { diff --git a/src/devices/bus/msx_slot/disk.h b/src/devices/bus/msx_slot/disk.h index 184ea2caf66..3b949f159e2 100644 --- a/src/devices/bus/msx_slot/disk.h +++ b/src/devices/bus/msx_slot/disk.h @@ -26,6 +26,51 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_DISK5, msx_slot_disk5_device) DECLARE_DEVICE_TYPE(MSX_SLOT_DISK6, msx_slot_disk6_device) +#define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK1, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); + +#define MCFG_MSX_SLOT_DISK2_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK2, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); + +#define MCFG_MSX_SLOT_DISK3_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK3, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); + +#define MCFG_MSX_SLOT_DISK4_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK4, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); + +#define MCFG_MSX_SLOT_DISK5_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag, _floppy2_tag, _floppy3_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK5, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy2_tag(_floppy2_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy3_tag(_floppy3_tag); + +#define MCFG_MSX_SLOT_DISK6_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK6, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \ + downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); + + class msx_slot_disk_device : public msx_slot_rom_device { public: @@ -36,21 +81,6 @@ public: void set_floppy2_tag(const char *tag) { m_floppy2_tag = tag; } void set_floppy3_tag(const char *tag) { m_floppy3_tag = tag; } - void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag) - { - m_fdc_tag = fdc_tag; - m_floppy0_tag = floppy0_tag; - m_floppy1_tag = floppy1_tag; - } - void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag, const char *floppy2_tag, const char *floppy3_tag) - { - m_fdc_tag = fdc_tag; - m_floppy0_tag = floppy0_tag; - m_floppy1_tag = floppy1_tag; - m_floppy2_tag = floppy2_tag; - m_floppy3_tag = floppy3_tag; - } - protected: msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -98,13 +128,14 @@ class msx_slot_disk1_device : public msx_slot_wd_disk_device public: msx_slot_disk1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_post_load() override; + + void post_load(); private: uint8_t m_side_control; @@ -120,13 +151,14 @@ class msx_slot_disk2_device : public msx_slot_wd_disk_device public: msx_slot_disk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_post_load() override; + + void post_load(); private: uint8_t m_control; @@ -140,8 +172,8 @@ class msx_slot_disk3_device : public msx_slot_tc8566_disk_device public: msx_slot_disk3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; }; @@ -150,8 +182,8 @@ class msx_slot_disk4_device : public msx_slot_tc8566_disk_device public: msx_slot_disk4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; }; @@ -160,15 +192,16 @@ class msx_slot_disk5_device : public msx_slot_wd_disk_device public: msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + DECLARE_READ8_MEMBER(io_read); + DECLARE_WRITE8_MEMBER(io_write); + protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_post_load() override; -private: - uint8_t io_read(offs_t offset); - void io_write(offs_t offset, uint8_t data); + void post_load(); +private: uint8_t m_control; void set_control(uint8_t control); @@ -180,13 +213,14 @@ class msx_slot_disk6_device : public msx_slot_wd_disk_device public: msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_post_load() override; + + void post_load(); private: uint8_t m_side_motor; diff --git a/src/devices/bus/msx_slot/fs4600.cpp b/src/devices/bus/msx_slot/fs4600.cpp index a7470fc2a78..dc975cdd4ba 100644 --- a/src/devices/bus/msx_slot/fs4600.cpp +++ b/src/devices/bus/msx_slot/fs4600.cpp @@ -13,7 +13,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device, "msx_slot_fs4600", " msx_slot_fs4600_device::msx_slot_fs4600_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MSX_SLOT_FS4600, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_region_offset(0) @@ -48,12 +48,8 @@ void msx_slot_fs4600_device::device_start() save_item(NAME(m_sram_address)); save_item(NAME(m_control)); - restore_banks(); -} + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_fs4600_device::restore_banks), this)); - -void msx_slot_fs4600_device::device_post_load() -{ restore_banks(); } @@ -67,7 +63,7 @@ void msx_slot_fs4600_device::restore_banks() } -uint8_t msx_slot_fs4600_device::read(offs_t offset) +READ8_MEMBER(msx_slot_fs4600_device::read) { if ((m_control & 0x02) && ((offset & 0x3fff) == 0x3ffd)) { @@ -81,7 +77,7 @@ uint8_t msx_slot_fs4600_device::read(offs_t offset) } -void msx_slot_fs4600_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_fs4600_device::write) { if (offset == 0x7ff9) { diff --git a/src/devices/bus/msx_slot/fs4600.h b/src/devices/bus/msx_slot/fs4600.h index 4b571c2ef56..c92bd7a3a1f 100644 --- a/src/devices/bus/msx_slot/fs4600.h +++ b/src/devices/bus/msx_slot/fs4600.h @@ -12,6 +12,10 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device) +#define MCFG_MSX_SLOT_FS4600_ADD(_tag, _startpage, _numpages, _region, _offset) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_FS4600, _startpage, _numpages) \ + downcast<msx_slot_fs4600_device &>(*device).set_rom_start(_region, _offset); + class msx_slot_fs4600_device : public device_t, public msx_internal_slot_interface { public: @@ -20,12 +24,11 @@ public: // configuration helpers void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; - virtual void device_post_load() override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/msx_slot/music.cpp b/src/devices/bus/msx_slot/music.cpp index 0e3ae00b0f3..1e526dab7eb 100644 --- a/src/devices/bus/msx_slot/music.cpp +++ b/src/devices/bus/msx_slot/music.cpp @@ -32,17 +32,18 @@ void msx_slot_music_device::device_start() } // Install IO read/write handlers - io_space().install_write_handler(0x7c, 0x7d, write8sm_delegate(FUNC(msx_slot_music_device::write_ym2413), this)); + address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); + space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_slot_music_device::write_ym2413), this)); } -uint8_t msx_slot_music_device::read(offs_t offset) +READ8_MEMBER(msx_slot_music_device::read) { - return msx_slot_rom_device::read(offset); + return msx_slot_rom_device::read(space, offset); } -void msx_slot_music_device::write_ym2413(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_music_device::write_ym2413) { - m_ym2413->write(offset & 1, data); + m_ym2413->write(space, offset & 1, data); } diff --git a/src/devices/bus/msx_slot/music.h b/src/devices/bus/msx_slot/music.h index 385e568c4e5..ae2ddc979d0 100644 --- a/src/devices/bus/msx_slot/music.h +++ b/src/devices/bus/msx_slot/music.h @@ -13,6 +13,11 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_MUSIC, msx_slot_music_device) +#define MCFG_MSX_SLOT_MUSIC_ADD(_tag, _startpage, _numpages, _region, _offset, _ym2413_tag) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_MUSIC, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \ + downcast<msx_slot_music_device &>(*device).set_ym2413_tag(_ym2413_tag); + class msx_slot_music_device : public msx_slot_rom_device { public: @@ -21,14 +26,14 @@ public: // configuration helpers void set_ym2413_tag(const char *tag) { m_ym2413_tag = tag; } - virtual uint8_t read(offs_t offset) override; + virtual DECLARE_READ8_MEMBER(read) override; + + DECLARE_WRITE8_MEMBER(write_ym2413); protected: virtual void device_start() override; private: - void write_ym2413(offs_t offset, uint8_t data); - ym2413_device *m_ym2413; const char *m_ym2413_tag; }; diff --git a/src/devices/bus/msx_slot/panasonic08.cpp b/src/devices/bus/msx_slot/panasonic08.cpp index 0c46350051e..450f4fce1de 100644 --- a/src/devices/bus/msx_slot/panasonic08.cpp +++ b/src/devices/bus/msx_slot/panasonic08.cpp @@ -18,7 +18,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device, "msx_slot_ msx_slot_panasonic08_device::msx_slot_panasonic08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MSX_SLOT_PANASONIC08, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_region_offset(0) @@ -56,12 +56,8 @@ void msx_slot_panasonic08_device::device_start() save_item(NAME(m_selected_bank)); save_item(NAME(m_control)); - restore_banks(); -} + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_panasonic08_device::restore_banks), this)); - -void msx_slot_panasonic08_device::device_post_load() -{ restore_banks(); } @@ -89,7 +85,7 @@ void msx_slot_panasonic08_device::restore_banks() } -uint8_t msx_slot_panasonic08_device::read(offs_t offset) +READ8_MEMBER(msx_slot_panasonic08_device::read) { if (m_control & 0x04) { @@ -108,7 +104,7 @@ uint8_t msx_slot_panasonic08_device::read(offs_t offset) } -void msx_slot_panasonic08_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_panasonic08_device::write) { if ((offset & 0xc000) == 0x8000 || (offset & 0xc000) == 0x0000) { diff --git a/src/devices/bus/msx_slot/panasonic08.h b/src/devices/bus/msx_slot/panasonic08.h index b21a4964e3b..33da0b6620b 100644 --- a/src/devices/bus/msx_slot/panasonic08.h +++ b/src/devices/bus/msx_slot/panasonic08.h @@ -12,6 +12,10 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device) +#define MCFG_MSX_SLOT_PANASONIC08_ADD(_tag, _startpage, _numpages, _region, _offset) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_PANASONIC08, _startpage, _numpages) \ + downcast<msx_slot_panasonic08_device &>(*device).set_rom_start(_region, _offset); + class msx_slot_panasonic08_device : public device_t, public msx_internal_slot_interface { public: @@ -20,12 +24,11 @@ public: // configuration helpers void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; - virtual void device_post_load() override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/msx_slot/ram.cpp b/src/devices/bus/msx_slot/ram.cpp index 835a5551b92..a113dab1d39 100644 --- a/src/devices/bus/msx_slot/ram.cpp +++ b/src/devices/bus/msx_slot/ram.cpp @@ -8,7 +8,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM, msx_slot_ram_device, "msx_slot_ram", "MSX Inter msx_slot_ram_device::msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MSX_SLOT_RAM, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() { } @@ -18,7 +18,7 @@ void msx_slot_ram_device::device_start() save_item(NAME(m_ram)); } -uint8_t msx_slot_ram_device::read(offs_t offset) +READ8_MEMBER(msx_slot_ram_device::read) { if ( offset >= m_start_address && offset < m_end_address ) { @@ -27,7 +27,7 @@ uint8_t msx_slot_ram_device::read(offs_t offset) return 0xFF; } -void msx_slot_ram_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_ram_device::write) { if ( offset >= m_start_address && offset < m_end_address ) { diff --git a/src/devices/bus/msx_slot/ram.h b/src/devices/bus/msx_slot/ram.h index f96271ad066..17bff978148 100644 --- a/src/devices/bus/msx_slot/ram.h +++ b/src/devices/bus/msx_slot/ram.h @@ -5,17 +5,23 @@ #include "slot.h" +#define MCFG_MSX_SLOT_RAM_ADD(_tag, _startpage, _numpages) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM, _startpage, _numpages) + +#define MCFG_MSX_SLOT_RAM_8KB \ + downcast<msx_slot_ram_device &>(*device).force_start_address(0xe000); + + class msx_slot_ram_device : public device_t, public msx_internal_slot_interface { public: msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // Set to 0xe000 for 8KB RAM void force_start_address(uint16_t start) { m_start_address = start; } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; diff --git a/src/devices/bus/msx_slot/ram_mm.cpp b/src/devices/bus/msx_slot/ram_mm.cpp index ade67f6eb66..1b765c832f2 100644 --- a/src/devices/bus/msx_slot/ram_mm.cpp +++ b/src/devices/bus/msx_slot/ram_mm.cpp @@ -7,7 +7,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM_MM, msx_slot_ram_mm_device, "msx_slot_ram_mm", " msx_slot_ram_mm_device::msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MSX_SLOT_RAM_MM, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_total_size(0) , m_bank_mask(0) , m_ramio_set_bits(0) @@ -40,14 +40,12 @@ void msx_slot_ram_mm_device::device_start() save_item(NAME(m_ram)); save_item(NAME(m_bank_selected)); - // Install IO read/write handlers - io_space().install_read_handler(0xFC, 0xFF, read8sm_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this)); - io_space().install_write_handler(0xFC, 0xFF, write8sm_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this)); -} + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_ram_mm_device::restore_banks), this)); -void msx_slot_ram_mm_device::device_post_load() -{ - restore_banks(); + // Install IO read/write handlers + address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); + space.install_read_handler(0xFC, 0xFF, read8_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this)); + space.install_write_handler(0xFC, 0xFF, write8_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this)); } void msx_slot_ram_mm_device::restore_banks() @@ -58,22 +56,22 @@ void msx_slot_ram_mm_device::restore_banks() } } -uint8_t msx_slot_ram_mm_device::read(offs_t offset) +READ8_MEMBER(msx_slot_ram_mm_device::read) { return m_bank_base[offset >> 14][offset & 0x3fff]; } -void msx_slot_ram_mm_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_ram_mm_device::write) { m_bank_base[offset >> 14][offset & 0x3fff] = data; } -uint8_t msx_slot_ram_mm_device::read_mapper_bank(offs_t offset) +READ8_MEMBER(msx_slot_ram_mm_device::read_mapper_bank) { return m_bank_selected[offset & 3] | m_ramio_set_bits; } -void msx_slot_ram_mm_device::write_mapper_bank(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_ram_mm_device::write_mapper_bank) { offset &= 3; diff --git a/src/devices/bus/msx_slot/ram_mm.h b/src/devices/bus/msx_slot/ram_mm.h index 55f13659a4c..87837909b2d 100644 --- a/src/devices/bus/msx_slot/ram_mm.h +++ b/src/devices/bus/msx_slot/ram_mm.h @@ -5,27 +5,33 @@ #include "slot.h" +#define MCFG_MSX_SLOT_RAM_MM_ADD(_tag, _total_size) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM_MM, 0, 4) \ + downcast<msx_slot_ram_mm_device &>(*device).set_total_size(_total_size); + +#define MCFG_MSX_SLOT_RAMM_SET_RAMIO_BITS(_ramio_set_bits) \ + downcast<msx_slot_ram_mm_device &>(*device).set_ramio_set_bits(_ramio_set_bits); + class msx_slot_ram_mm_device : public device_t, public msx_internal_slot_interface { public: msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - msx_slot_ram_mm_device &set_total_size(uint32_t total_size) { m_total_size = total_size; return *this; } - msx_slot_ram_mm_device &set_ramio_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; return *this; } + void set_total_size(uint32_t total_size) { m_total_size = total_size; } + void set_ramio_set_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; + + DECLARE_READ8_MEMBER(read_mapper_bank); + DECLARE_WRITE8_MEMBER(write_mapper_bank); protected: virtual void device_start() override; - virtual void device_post_load() override; void restore_banks(); private: - uint8_t read_mapper_bank(offs_t offset); - void write_mapper_bank(offs_t offset, uint8_t data); - std::vector<uint8_t> m_ram; uint32_t m_total_size; uint8_t m_bank_mask; diff --git a/src/devices/bus/msx_slot/rom.cpp b/src/devices/bus/msx_slot/rom.cpp index aafc37b345b..186077edb55 100644 --- a/src/devices/bus/msx_slot/rom.cpp +++ b/src/devices/bus/msx_slot/rom.cpp @@ -15,7 +15,7 @@ msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, const ch msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_rom_region(*this, finder_base::DUMMY_TAG) , m_region_offset(0) , m_rom(nullptr) @@ -35,7 +35,7 @@ void msx_slot_rom_device::device_start() } -uint8_t msx_slot_rom_device::read(offs_t offset) +READ8_MEMBER(msx_slot_rom_device::read) { if (offset >= m_start_address && offset < m_end_address) { diff --git a/src/devices/bus/msx_slot/rom.h b/src/devices/bus/msx_slot/rom.h index 6bcd480a5a3..eee554a362a 100644 --- a/src/devices/bus/msx_slot/rom.h +++ b/src/devices/bus/msx_slot/rom.h @@ -7,6 +7,10 @@ #include "slot.h" +#define MCFG_MSX_SLOT_ROM_ADD(_tag, _startpage, _numpages, _region, _offset) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_ROM, _startpage, _numpages) \ + downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); + class msx_slot_rom_device : public device_t, public msx_internal_slot_interface { @@ -16,7 +20,7 @@ public: // configuration helpers void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } - virtual uint8_t read(offs_t offset) override; + virtual DECLARE_READ8_MEMBER(read) override; protected: msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/bus/msx_slot/slot.cpp b/src/devices/bus/msx_slot/slot.cpp index 345cf6e0a5c..3b826c87fa2 100644 --- a/src/devices/bus/msx_slot/slot.cpp +++ b/src/devices/bus/msx_slot/slot.cpp @@ -13,12 +13,9 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot. #include "emu.h" #include "slot.h" -msx_internal_slot_interface::msx_internal_slot_interface(const machine_config &mconfig, device_t &device) - : m_mem_space(device, finder_base::DUMMY_TAG, -1) - , m_io_space(device, finder_base::DUMMY_TAG, -1) - , m_start_address(0) +msx_internal_slot_interface::msx_internal_slot_interface() + : m_start_address(0) , m_size(0) , m_end_address(0) { - (void)mconfig; } diff --git a/src/devices/bus/msx_slot/slot.h b/src/devices/bus/msx_slot/slot.h index 3a95c7b6b75..ad51f0c4f9d 100644 --- a/src/devices/bus/msx_slot/slot.h +++ b/src/devices/bus/msx_slot/slot.h @@ -15,29 +15,25 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot. #pragma once +#define MCFG_MSX_INTERNAL_SLOT_ADD(_tag, _type, _startpage, _numpages) \ + MCFG_DEVICE_ADD(_tag, _type, 0) \ + dynamic_cast<msx_internal_slot_interface &>(*device).set_start_address(_startpage * 0x4000); \ + dynamic_cast<msx_internal_slot_interface &>(*device).set_size(_numpages * 0x4000); + class msx_internal_slot_interface { public: - msx_internal_slot_interface(const machine_config &mconfig, device_t &device); - msx_internal_slot_interface(const msx_internal_slot_interface &device) = delete; + msx_internal_slot_interface(); virtual ~msx_internal_slot_interface() { } // configuration helpers - template <typename T> void set_memory_space(T &&tag, int spacenum) { m_mem_space.set_tag(std::forward<T>(tag), spacenum); } - template <typename T> void set_io_space(T &&tag, int spacenum) { m_io_space.set_tag(std::forward<T>(tag), spacenum); } void set_start_address(uint32_t start_address) { m_start_address = start_address; m_end_address = m_start_address + m_size; } void set_size(uint32_t size) { m_size = size; m_end_address = m_start_address + m_size; } - virtual uint8_t read(offs_t offset) { return 0xFF; } - virtual void write(offs_t offset, uint8_t data) { } - - address_space &memory_space() const { return *m_mem_space; } - address_space &io_space() const { return *m_io_space; } + virtual DECLARE_READ8_MEMBER(read) { return 0xFF; } + virtual DECLARE_WRITE8_MEMBER(write) { } protected: - required_address_space m_mem_space; - required_address_space m_io_space; - uint32_t m_start_address; uint32_t m_size; uint32_t m_end_address; diff --git a/src/devices/bus/msx_slot/sony08.cpp b/src/devices/bus/msx_slot/sony08.cpp index 652ed134457..96f3f0fdedc 100644 --- a/src/devices/bus/msx_slot/sony08.cpp +++ b/src/devices/bus/msx_slot/sony08.cpp @@ -15,7 +15,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device, "msx_slot_sony08", " msx_slot_sony08_device::msx_slot_sony08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MSX_SLOT_SONY08, tag, owner, clock) - , msx_internal_slot_interface(mconfig, *this) + , msx_internal_slot_interface() , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_region_offset(0) @@ -50,12 +50,8 @@ void msx_slot_sony08_device::device_start() save_item(NAME(m_selected_bank)); - restore_banks(); -} + machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_sony08_device::restore_banks), this)); - -void msx_slot_sony08_device::device_post_load() -{ restore_banks(); } @@ -100,7 +96,7 @@ void msx_slot_sony08_device::restore_banks() } -uint8_t msx_slot_sony08_device::read(offs_t offset) +READ8_MEMBER(msx_slot_sony08_device::read) { if (offset >= 0xc000) { @@ -122,7 +118,7 @@ uint8_t msx_slot_sony08_device::read(offs_t offset) } -void msx_slot_sony08_device::write(offs_t offset, uint8_t data) +WRITE8_MEMBER(msx_slot_sony08_device::write) { if (offset < 0x4000) { diff --git a/src/devices/bus/msx_slot/sony08.h b/src/devices/bus/msx_slot/sony08.h index 74c8fd95f35..8dfd0297951 100644 --- a/src/devices/bus/msx_slot/sony08.h +++ b/src/devices/bus/msx_slot/sony08.h @@ -12,6 +12,10 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device) +#define MCFG_MSX_SLOT_SONY08_ADD(_tag, _startpage, _numpages, _region, _offset) \ + MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_SONY08, _startpage, _numpages) \ + downcast<msx_slot_sony08_device &>(*device).set_rom_start(_region, _offset); + class msx_slot_sony08_device : public device_t, public msx_internal_slot_interface { public: @@ -20,12 +24,11 @@ public: // configuration helpers void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } - virtual uint8_t read(offs_t offset) override; - virtual void write(offs_t offset, uint8_t data) override; + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; protected: virtual void device_start() override; - virtual void device_post_load() override; virtual void device_add_mconfig(machine_config &config) override; |