summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/msx_slot
diff options
context:
space:
mode:
author andreasnaive <andreasnaive@gmail.com>2019-03-25 23:13:40 +0100
committer andreasnaive <andreasnaive@gmail.com>2019-03-25 23:13:40 +0100
commitb380514764cf857469bae61c11143a19f79a74c5 (patch)
tree63c8012e262618f08a332da31dd714281aa2c5ed /src/devices/bus/msx_slot
parentc24473ddff715ecec2e258a6eb38960cf8c8e98e (diff)
Revert "conflict resolution (nw)"
This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing changes made to 009cba4fb8102102168ef32870892438327f3705.
Diffstat (limited to 'src/devices/bus/msx_slot')
-rw-r--r--src/devices/bus/msx_slot/bunsetsu.cpp6
-rw-r--r--src/devices/bus/msx_slot/bunsetsu.h9
-rw-r--r--src/devices/bus/msx_slot/cartridge.cpp25
-rw-r--r--src/devices/bus/msx_slot/cartridge.h21
-rw-r--r--src/devices/bus/msx_slot/disk.cpp75
-rw-r--r--src/devices/bus/msx_slot/disk.h98
-rw-r--r--src/devices/bus/msx_slot/fs4600.cpp12
-rw-r--r--src/devices/bus/msx_slot/fs4600.h9
-rw-r--r--src/devices/bus/msx_slot/music.cpp11
-rw-r--r--src/devices/bus/msx_slot/music.h11
-rw-r--r--src/devices/bus/msx_slot/panasonic08.cpp12
-rw-r--r--src/devices/bus/msx_slot/panasonic08.h9
-rw-r--r--src/devices/bus/msx_slot/ram.cpp6
-rw-r--r--src/devices/bus/msx_slot/ram.h12
-rw-r--r--src/devices/bus/msx_slot/ram_mm.cpp22
-rw-r--r--src/devices/bus/msx_slot/ram_mm.h22
-rw-r--r--src/devices/bus/msx_slot/rom.cpp4
-rw-r--r--src/devices/bus/msx_slot/rom.h6
-rw-r--r--src/devices/bus/msx_slot/slot.cpp7
-rw-r--r--src/devices/bus/msx_slot/slot.h20
-rw-r--r--src/devices/bus/msx_slot/sony08.cpp12
-rw-r--r--src/devices/bus/msx_slot/sony08.h9
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;