msx, bus/msx_cart, bus/msx_slot: Configuration and bus modernization (nw)

- Eliminate all MCFG_ macros
- Add address space finders to replace most instances of machine().device
- Use device_post_load instead of explicitly registering callbacks
- Simplify read/write handlers in bus devices
This commit is contained in:
AJR 2019-03-09 23:51:04 -05:00
parent 15fc7aac93
commit afce025856
72 changed files with 2720 additions and 2481 deletions

View File

@ -18,9 +18,8 @@ msx_cart_arc_device::msx_cart_arc_device(const machine_config &mconfig, const ch
void msx_cart_arc_device::device_start() void msx_cart_arc_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x7f, 0x7f, write8smo_delegate(FUNC(msx_cart_arc_device::io_7f_w), this));
space.install_write_handler(0x7f, 0x7f, write8_delegate(FUNC(msx_cart_arc_device::io_7f_w), this)); io_space().install_read_handler(0x7f, 0x7f, read8smo_delegate(FUNC(msx_cart_arc_device::io_7f_r), this));
space.install_read_handler(0x7f, 0x7f, read8_delegate(FUNC(msx_cart_arc_device::io_7f_r), this));
} }
@ -39,7 +38,7 @@ void msx_cart_arc_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_arc_device::read_cart) uint8_t msx_cart_arc_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -49,7 +48,7 @@ READ8_MEMBER(msx_cart_arc_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_arc_device::io_7f_w) void msx_cart_arc_device::io_7f_w(uint8_t data)
{ {
if (data == 0x35) if (data == 0x35)
{ {
@ -58,7 +57,7 @@ WRITE8_MEMBER(msx_cart_arc_device::io_7f_w)
} }
READ8_MEMBER(msx_cart_arc_device::io_7f_r) uint8_t msx_cart_arc_device::io_7f_r()
{ {
return ((m_7f & 0x03) == 0x03) ? 0xda : 0xff; return ((m_7f & 0x03) == 0x03) ? 0xda : 0xff;
} }

View File

@ -18,10 +18,7 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
DECLARE_WRITE8_MEMBER(io_7f_w);
DECLARE_READ8_MEMBER(io_7f_r);
protected: protected:
// device-level overrides // device-level overrides
@ -29,6 +26,9 @@ protected:
virtual void device_reset() override; virtual void device_reset() override;
private: private:
void io_7f_w(uint8_t data);
uint8_t io_7f_r();
uint8_t m_7f; uint8_t m_7f;
}; };

View File

@ -27,8 +27,12 @@ msx_cart_ascii8_device::msx_cart_ascii8_device(const machine_config &mconfig, co
void msx_cart_ascii8_device::device_start() void msx_cart_ascii8_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii8_device::restore_banks), this));
void msx_cart_ascii8_device::device_post_load()
{
restore_banks();
} }
@ -72,7 +76,7 @@ void msx_cart_ascii8_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_ascii8_device::read_cart) uint8_t msx_cart_ascii8_device::read_cart(offs_t offset)
{ {
if ( offset >= 0x4000 && offset < 0xC000 ) if ( offset >= 0x4000 && offset < 0xC000 )
{ {
@ -82,7 +86,7 @@ READ8_MEMBER(msx_cart_ascii8_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_ascii8_device::write_cart) void msx_cart_ascii8_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x6000 && offset < 0x8000) if (offset >= 0x6000 && offset < 0x8000)
{ {
@ -111,8 +115,12 @@ msx_cart_ascii16_device::msx_cart_ascii16_device(const machine_config &mconfig,
void msx_cart_ascii16_device::device_start() void msx_cart_ascii16_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii16_device::restore_banks), this));
void msx_cart_ascii16_device::device_post_load()
{
restore_banks();
} }
@ -156,7 +164,7 @@ void msx_cart_ascii16_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_ascii16_device::read_cart) uint8_t msx_cart_ascii16_device::read_cart(offs_t offset)
{ {
if ( offset >= 0x4000 && offset < 0xC000 ) if ( offset >= 0x4000 && offset < 0xC000 )
{ {
@ -166,7 +174,7 @@ READ8_MEMBER(msx_cart_ascii16_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_ascii16_device::write_cart) void msx_cart_ascii16_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x6000 && offset < 0x6800) if (offset >= 0x6000 && offset < 0x6800)
{ {
@ -202,8 +210,12 @@ msx_cart_ascii8_sram_device::msx_cart_ascii8_sram_device(const machine_config &m
void msx_cart_ascii8_sram_device::device_start() void msx_cart_ascii8_sram_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii8_sram_device::restore_banks), this));
void msx_cart_ascii8_sram_device::device_post_load()
{
restore_banks();
} }
@ -272,7 +284,7 @@ void msx_cart_ascii8_sram_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_ascii8_sram_device::read_cart) uint8_t msx_cart_ascii8_sram_device::read_cart(offs_t offset)
{ {
if ( offset >= 0x4000 && offset < 0xC000 ) if ( offset >= 0x4000 && offset < 0xC000 )
{ {
@ -287,7 +299,7 @@ READ8_MEMBER(msx_cart_ascii8_sram_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_ascii8_sram_device::write_cart) void msx_cart_ascii8_sram_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x6000 && offset < 0x8000) if (offset >= 0x6000 && offset < 0x8000)
{ {
@ -327,8 +339,12 @@ msx_cart_ascii16_sram_device::msx_cart_ascii16_sram_device(const machine_config
void msx_cart_ascii16_sram_device::device_start() void msx_cart_ascii16_sram_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii16_sram_device::restore_banks), this));
void msx_cart_ascii16_sram_device::device_post_load()
{
restore_banks();
} }
@ -397,7 +413,7 @@ void msx_cart_ascii16_sram_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_ascii16_sram_device::read_cart) uint8_t msx_cart_ascii16_sram_device::read_cart(offs_t offset)
{ {
if ( offset >= 0x4000 && offset < 0xC000 ) if ( offset >= 0x4000 && offset < 0xC000 )
{ {
@ -419,7 +435,7 @@ READ8_MEMBER(msx_cart_ascii16_sram_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_ascii16_sram_device::write_cart) void msx_cart_ascii16_sram_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x6000 && offset < 0x6800) if (offset >= 0x6000 && offset < 0x6800)
{ {
@ -461,8 +477,12 @@ msx_cart_msxwrite_device::msx_cart_msxwrite_device(const machine_config &mconfig
void msx_cart_msxwrite_device::device_start() void msx_cart_msxwrite_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_msxwrite_device::restore_banks), this));
void msx_cart_msxwrite_device::device_post_load()
{
restore_banks();
} }
@ -506,7 +526,7 @@ void msx_cart_msxwrite_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_msxwrite_device::read_cart) uint8_t msx_cart_msxwrite_device::read_cart(offs_t offset)
{ {
if ( offset >= 0x4000 && offset < 0xC000 ) if ( offset >= 0x4000 && offset < 0xC000 )
{ {
@ -516,7 +536,7 @@ READ8_MEMBER(msx_cart_msxwrite_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_msxwrite_device::write_cart) void msx_cart_msxwrite_device::write_cart(offs_t offset, uint8_t data)
{ {
// The rom writes to 6fff and 7fff for banking, unknown whether // The rom writes to 6fff and 7fff for banking, unknown whether
// other locations also trigger banking. // other locations also trigger banking.

View File

@ -22,13 +22,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -46,13 +47,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -70,13 +72,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -97,13 +100,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -124,13 +128,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -94,9 +94,8 @@ const tiny_rom_entry *msx_cart_bm_012_device::device_rom_region() const
void msx_cart_bm_012_device::device_start() void msx_cart_bm_012_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x70, 0x73, write8_delegate(FUNC(z80pio_device::write_alt), m_bm012_pio.target()));
space.install_write_handler(0x70, 0x73, write8_delegate(FUNC(z80pio_device::write_alt), m_bm012_pio.target())); io_space().install_read_handler(0x70, 0x73, read8_delegate(FUNC(z80pio_device::read_alt), m_bm012_pio.target()));
space.install_read_handler(0x70, 0x73, read8_delegate(FUNC(z80pio_device::read_alt), m_bm012_pio.target()));
} }

View File

@ -26,6 +26,8 @@
#include "super_swangi.h" #include "super_swangi.h"
#include "yamaha.h" #include "yamaha.h"
#include "bus/msx_slot/cartridge.h"
void msx_cart(device_slot_interface &device) void msx_cart(device_slot_interface &device)
{ {
@ -72,7 +74,7 @@ void msx_cart(device_slot_interface &device)
msx_cart_interface::msx_cart_interface(const machine_config &mconfig, device_t &device) msx_cart_interface::msx_cart_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device) : device_slot_card_interface(mconfig, device)
, m_out_irq_cb(*this) , m_exp(nullptr)
{ {
} }
@ -100,6 +102,21 @@ void msx_cart_interface::sram_alloc(uint32_t size)
std::fill_n(m_sram.begin(), size, 0x00); std::fill_n(m_sram.begin(), size, 0x00);
} }
WRITE_LINE_MEMBER(msx_cart_interface::irq_out)
{
m_exp->irq_out(state);
}
address_space &msx_cart_interface::memory_space() const
{
return m_exp->memory_space();
}
address_space &msx_cart_interface::io_space() const
{
return m_exp->io_space();
}
// Several yamaha machines had 60 pin expansion slots. The pinouts of these slots was // Several yamaha machines had 60 pin expansion slots. The pinouts of these slots was
// exactly the same as the regular 50 pin cartridge slots. The lowest 10 pins are simply // exactly the same as the regular 50 pin cartridge slots. The lowest 10 pins are simply

View File

@ -10,19 +10,26 @@ void msx_cart(device_slot_interface &device);
void msx_yamaha_60pin(device_slot_interface &device); // 60 pin expansion slots as found in yamaha machines void msx_yamaha_60pin(device_slot_interface &device); // 60 pin expansion slots as found in yamaha machines
class msx_slot_cartridge_device;
class msx_cart_interface : public device_slot_card_interface class msx_cart_interface : public device_slot_card_interface
{ {
public: friend class msx_slot_cartridge_device;
template <class Object> void set_out_irq_cb(Object &&cb) { m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
public:
// This is called after loading cartridge contents and allows the cartridge // This is called after loading cartridge contents and allows the cartridge
// implementation to perform some additional initialization based on the // implementation to perform some additional initialization based on the
// cartridge contents. // cartridge contents.
virtual void initialize_cartridge() { } virtual void initialize_cartridge() { }
virtual void interface_pre_start() override { assert(m_exp != nullptr); }
// reading and writing // reading and writing
virtual DECLARE_READ8_MEMBER(read_cart) { return 0xff; } virtual uint8_t read_cart(offs_t offset) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_cart) { } virtual void write_cart(offs_t offset, uint8_t data) { }
DECLARE_WRITE_LINE_MEMBER(irq_out);
address_space &memory_space() const;
address_space &io_space() const;
// ROM/RAM/SRAM management // ROM/RAM/SRAM management
// Mainly used by the cartridge slot when loading images // Mainly used by the cartridge slot when loading images
@ -43,13 +50,13 @@ public:
protected: protected:
msx_cart_interface(const machine_config &mconfig, device_t &device); msx_cart_interface(const machine_config &mconfig, device_t &device);
virtual void interface_pre_start() override { m_out_irq_cb.resolve_safe(); }
std::vector<uint8_t> m_rom; std::vector<uint8_t> m_rom;
std::vector<uint8_t> m_ram; std::vector<uint8_t> m_ram;
std::vector<uint8_t> m_rom_vlm5030; std::vector<uint8_t> m_rom_vlm5030;
std::vector<uint8_t> m_sram; std::vector<uint8_t> m_sram;
devcb_write_line m_out_irq_cb;
private:
msx_slot_cartridge_device *m_exp;
}; };

View File

@ -21,8 +21,12 @@ msx_cart_crossblaim_device::msx_cart_crossblaim_device(const machine_config &mco
void msx_cart_crossblaim_device::device_start() void msx_cart_crossblaim_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_crossblaim_device::restore_banks), this));
void msx_cart_crossblaim_device::device_post_load()
{
restore_banks();
} }
@ -58,7 +62,7 @@ void msx_cart_crossblaim_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_crossblaim_device::read_cart) uint8_t msx_cart_crossblaim_device::read_cart(offs_t offset)
{ {
uint8_t *bank_base = m_bank_base[offset >> 14]; uint8_t *bank_base = m_bank_base[offset >> 14];
@ -71,7 +75,7 @@ READ8_MEMBER(msx_cart_crossblaim_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_crossblaim_device::write_cart) void msx_cart_crossblaim_device::write_cart(offs_t offset, uint8_t data)
{ {
m_selected_bank = data & 3; m_selected_bank = data & 3;
if (m_selected_bank == 0) if (m_selected_bank == 0)

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -272,12 +272,10 @@ void msx_cart_disk_type1_device::device_start()
save_item(NAME(m_side_control)); save_item(NAME(m_side_control));
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_disk_type1_device::post_load), this));
} }
void msx_cart_disk_type1_device::post_load() void msx_cart_disk_type1_device::device_post_load()
{ {
uint8_t data = m_control; uint8_t data = m_control;
@ -342,7 +340,7 @@ void msx_cart_disk_type1_device::device_reset()
} }
READ8_MEMBER(msx_cart_disk_type1_device::read_cart) uint8_t msx_cart_disk_type1_device::read_cart(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -383,7 +381,7 @@ READ8_MEMBER(msx_cart_disk_type1_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_disk_type1_device::write_cart) void msx_cart_disk_type1_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
@ -429,8 +427,6 @@ void msx_cart_disk_type2_device::device_start()
m_led.resolve(); m_led.resolve();
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_disk_type2_device::post_load), this));
} }
@ -440,7 +436,7 @@ void msx_cart_disk_type2_device::device_reset()
} }
void msx_cart_disk_type2_device::post_load() void msx_cart_disk_type2_device::device_post_load()
{ {
uint8_t data = m_control; uint8_t data = m_control;
@ -487,7 +483,7 @@ void msx_cart_disk_type2_device::set_control(uint8_t data)
} }
READ8_MEMBER(msx_cart_disk_type2_device::read_cart) uint8_t msx_cart_disk_type2_device::read_cart(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -520,7 +516,7 @@ READ8_MEMBER(msx_cart_disk_type2_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_disk_type2_device::write_cart) void msx_cart_disk_type2_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
@ -568,8 +564,10 @@ void msx_cart_fsfd1a_device::device_reset()
} }
READ8_MEMBER(msx_cart_fsfd1a_device::read_cart) uint8_t msx_cart_fsfd1a_device::read_cart(offs_t offset)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ffa: case 0x7ffa:
@ -589,8 +587,10 @@ READ8_MEMBER(msx_cart_fsfd1a_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_fsfd1a_device::write_cart) void msx_cart_fsfd1a_device::write_cart(offs_t offset, uint8_t data)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ff8: case 0x7ff8:

View File

@ -45,8 +45,8 @@ protected:
class msx_cart_disk_type1_device : public msx_cart_disk_wd_device class msx_cart_disk_type1_device : public msx_cart_disk_wd_device
{ {
public: public:
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
msx_cart_disk_type1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_cart_disk_type1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -54,8 +54,7 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
output_finder<> m_led; output_finder<> m_led;
uint8_t m_side_control; uint8_t m_side_control;
@ -69,8 +68,8 @@ protected:
class msx_cart_disk_type2_device : public msx_cart_disk_wd_device class msx_cart_disk_type2_device : public msx_cart_disk_wd_device
{ {
public: public:
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
msx_cart_disk_type2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_cart_disk_type2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -78,8 +77,7 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
output_finder<> m_led; output_finder<> m_led;
uint8_t m_control; uint8_t m_control;
@ -139,8 +137,8 @@ protected:
// device-level overrides // device-level overrides
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
}; };

View File

@ -36,7 +36,7 @@ void msx_cart_dooly_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_dooly_device::read_cart) uint8_t msx_cart_dooly_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -54,7 +54,7 @@ READ8_MEMBER(msx_cart_dooly_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_dooly_device::write_cart) void msx_cart_dooly_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {

View File

@ -18,8 +18,8 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides

View File

@ -46,11 +46,14 @@ void msx_cart_fmpac_device::device_start()
save_item(NAME(m_1fff)); save_item(NAME(m_1fff));
save_item(NAME(m_7ff6)); save_item(NAME(m_7ff6));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_fmpac_device::restore_banks), this));
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x7c, 0x7d, write8sm_delegate(FUNC(msx_cart_fmpac_device::write_ym2413), this));
space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_cart_fmpac_device::write_ym2413), this)); }
void msx_cart_fmpac_device::device_post_load()
{
restore_banks();
} }
@ -87,7 +90,7 @@ void msx_cart_fmpac_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_fmpac_device::read_cart) uint8_t msx_cart_fmpac_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0x8000) if (offset >= 0x4000 && offset < 0x8000)
{ {
@ -116,7 +119,7 @@ READ8_MEMBER(msx_cart_fmpac_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_fmpac_device::write_cart) void msx_cart_fmpac_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x4000 && offset < 0x6000) if (offset >= 0x4000 && offset < 0x6000)
{ {
@ -159,7 +162,7 @@ WRITE8_MEMBER(msx_cart_fmpac_device::write_cart)
} }
WRITE8_MEMBER(msx_cart_fmpac_device::write_ym2413) void msx_cart_fmpac_device::write_ym2413(offs_t offset, uint8_t data)
{ {
if (m_opll_active) if (m_opll_active)
{ {

View File

@ -19,14 +19,13 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
DECLARE_WRITE8_MEMBER(write_ym2413);
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
// device-level overrides // device-level overrides
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
@ -34,6 +33,8 @@ protected:
void restore_banks(); void restore_banks();
private: private:
void write_ym2413(offs_t offset, uint8_t data);
required_device<ym2413_device> m_ym2413; required_device<ym2413_device> m_ym2413;
uint8_t m_selected_bank; uint8_t m_selected_bank;

View File

@ -38,7 +38,7 @@ void msx_cart_fs_sr022_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_fs_sr022_device::read_cart) uint8_t msx_cart_fs_sr022_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -52,7 +52,7 @@ READ8_MEMBER(msx_cart_fs_sr022_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_fs_sr022_device::write_cart) void msx_cart_fs_sr022_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {

View File

@ -18,8 +18,8 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides

View File

@ -19,8 +19,12 @@ msx_cart_halnote_device::msx_cart_halnote_device(const machine_config &mconfig,
void msx_cart_halnote_device::device_start() void msx_cart_halnote_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_halnote_device::restore_banks), this));
void msx_cart_halnote_device::device_post_load()
{
restore_banks();
} }
@ -84,7 +88,7 @@ void msx_cart_halnote_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_halnote_device::read_cart) uint8_t msx_cart_halnote_device::read_cart(offs_t offset)
{ {
if (offset >= 0xc000) if (offset >= 0xc000)
{ {
@ -106,7 +110,7 @@ READ8_MEMBER(msx_cart_halnote_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_halnote_device::write_cart) void msx_cart_halnote_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset < 0x4000) if (offset < 0x4000)
{ {

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -19,8 +19,12 @@ msx_cart_hfox_device::msx_cart_hfox_device(const machine_config &mconfig, const
void msx_cart_hfox_device::device_start() void msx_cart_hfox_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_hfox_device::restore_banks), this));
void msx_cart_hfox_device::device_post_load()
{
restore_banks();
} }
@ -48,7 +52,7 @@ void msx_cart_hfox_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_hfox_device::read_cart) uint8_t msx_cart_hfox_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -58,7 +62,7 @@ READ8_MEMBER(msx_cart_hfox_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_hfox_device::write_cart) void msx_cart_hfox_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {

View File

@ -16,13 +16,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -30,8 +30,12 @@ void msx_cart_holy_quran_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
save_item(NAME(m_decrypt)); save_item(NAME(m_decrypt));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_holy_quran_device::restore_banks), this));
void msx_cart_holy_quran_device::device_post_load()
{
restore_banks();
} }
@ -64,7 +68,7 @@ void msx_cart_holy_quran_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_holy_quran_device::read_cart) uint8_t msx_cart_holy_quran_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -88,7 +92,7 @@ READ8_MEMBER(msx_cart_holy_quran_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_holy_quran_device::write_cart) void msx_cart_holy_quran_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -35,8 +35,12 @@ msx_cart_konami_device::msx_cart_konami_device(const machine_config &mconfig, co
void msx_cart_konami_device::device_start() void msx_cart_konami_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_device::restore_banks), this));
void msx_cart_konami_device::device_post_load()
{
restore_banks();
} }
@ -84,13 +88,13 @@ void msx_cart_konami_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_konami_device::read_cart) uint8_t msx_cart_konami_device::read_cart(offs_t offset)
{ {
return m_bank_base[offset >> 13][offset & 0x1fff]; return m_bank_base[offset >> 13][offset & 0x1fff];
} }
WRITE8_MEMBER(msx_cart_konami_device::write_cart) void msx_cart_konami_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset & 0xe000) switch (offset & 0xe000)
{ {
@ -153,8 +157,12 @@ void msx_cart_konami_scc_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
save_item(NAME(m_scc_active)); save_item(NAME(m_scc_active));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_scc_device::restore_banks), this));
void msx_cart_konami_scc_device::device_post_load()
{
restore_banks();
} }
@ -203,8 +211,10 @@ void msx_cart_konami_scc_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_konami_scc_device::read_cart) uint8_t msx_cart_konami_scc_device::read_cart(offs_t offset)
{ {
address_space &space = machine().dummy_space();
if ( m_scc_active && offset >= 0x9800 && offset < 0xa000 ) if ( m_scc_active && offset >= 0x9800 && offset < 0xa000 )
{ {
if (offset & 0x80) if (offset & 0x80)
@ -225,8 +235,10 @@ READ8_MEMBER(msx_cart_konami_scc_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_konami_scc_device::write_cart) void msx_cart_konami_scc_device::write_cart(offs_t offset, uint8_t data)
{ {
address_space &space = machine().dummy_space();
switch (offset & 0xf800) switch (offset & 0xf800)
{ {
case 0x5000: case 0x5000:
@ -311,8 +323,12 @@ msx_cart_gamemaster2_device::msx_cart_gamemaster2_device(const machine_config &m
void msx_cart_gamemaster2_device::device_start() void msx_cart_gamemaster2_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_gamemaster2_device::restore_banks), this));
void msx_cart_gamemaster2_device::device_post_load()
{
restore_banks();
} }
@ -397,7 +413,7 @@ void msx_cart_gamemaster2_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_gamemaster2_device::read_cart) uint8_t msx_cart_gamemaster2_device::read_cart(offs_t offset)
{ {
uint8_t bank = offset >> 13; uint8_t bank = offset >> 13;
@ -431,7 +447,7 @@ READ8_MEMBER(msx_cart_gamemaster2_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_gamemaster2_device::write_cart) void msx_cart_gamemaster2_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset & 0xf000) switch (offset & 0xf000)
{ {
@ -499,7 +515,7 @@ void msx_cart_synthesizer_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_synthesizer_device::read_cart) uint8_t msx_cart_synthesizer_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000 ) if (offset >= 0x4000 && offset < 0xc000 )
{ {
@ -509,7 +525,7 @@ READ8_MEMBER(msx_cart_synthesizer_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_synthesizer_device::write_cart) void msx_cart_synthesizer_device::write_cart(offs_t offset, uint8_t data)
{ {
if ((offset & 0xc010) == 0x4000) if ((offset & 0xc010) == 0x4000)
{ {
@ -561,8 +577,12 @@ void msx_cart_konami_sound_device::device_start()
save_item(NAME(m_scc_active)); save_item(NAME(m_scc_active));
save_item(NAME(m_sccplus_active)); save_item(NAME(m_sccplus_active));
save_item(NAME(m_ram_enabled)); save_item(NAME(m_ram_enabled));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_sound_device::restore_banks), this));
void msx_cart_konami_sound_device::device_post_load()
{
restore_banks();
} }
@ -620,8 +640,10 @@ void msx_cart_konami_sound_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_konami_sound_device::read_cart) uint8_t msx_cart_konami_sound_device::read_cart(offs_t offset)
{ {
address_space &space = machine().dummy_space();
if ( m_scc_active && offset >= 0x9800 && offset < 0x9fe0 ) if ( m_scc_active && offset >= 0x9800 && offset < 0x9fe0 )
{ {
offset &= 0xff; offset &= 0xff;
@ -668,8 +690,10 @@ READ8_MEMBER(msx_cart_konami_sound_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_konami_sound_device::write_cart) void msx_cart_konami_sound_device::write_cart(offs_t offset, uint8_t data)
{ {
address_space &space = machine().dummy_space();
switch (offset & 0xe000) switch (offset & 0xe000)
{ {
case 0x4000: case 0x4000:
@ -887,10 +911,9 @@ void msx_cart_keyboard_master_device::device_add_mconfig(machine_config &config)
void msx_cart_keyboard_master_device::device_start() void msx_cart_keyboard_master_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x00, 0x00, write8_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target()));
space.install_write_handler(0x00, 0x00, write8_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target())); io_space().install_write_handler(0x20, 0x20, write8smo_delegate(FUNC(msx_cart_keyboard_master_device::io_20_w), this));
space.install_write_handler(0x20, 0x20, write8_delegate(FUNC(msx_cart_keyboard_master_device::io_20_w), this)); io_space().install_read_handler(0x00, 0x00, read8smo_delegate(FUNC(msx_cart_keyboard_master_device::io_00_r), this));
space.install_read_handler(0x00, 0x00, read8_delegate(FUNC(msx_cart_keyboard_master_device::io_00_r), this));
} }
@ -903,7 +926,7 @@ void msx_cart_keyboard_master_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_keyboard_master_device::read_cart) uint8_t msx_cart_keyboard_master_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0x8000) if (offset >= 0x4000 && offset < 0x8000)
{ {
@ -913,13 +936,13 @@ READ8_MEMBER(msx_cart_keyboard_master_device::read_cart)
} }
READ8_MEMBER(msx_cart_keyboard_master_device::read_vlm) uint8_t msx_cart_keyboard_master_device::read_vlm(offs_t offset)
{ {
return m_rom_vlm5030[offset]; return m_rom_vlm5030[offset];
} }
WRITE8_MEMBER(msx_cart_keyboard_master_device::io_20_w) void msx_cart_keyboard_master_device::io_20_w(uint8_t data)
{ {
m_vlm5030->rst((data & 0x01) ? 1 : 0); m_vlm5030->rst((data & 0x01) ? 1 : 0);
m_vlm5030->vcu((data & 0x04) ? 1 : 0); m_vlm5030->vcu((data & 0x04) ? 1 : 0);
@ -927,7 +950,7 @@ WRITE8_MEMBER(msx_cart_keyboard_master_device::io_20_w)
} }
READ8_MEMBER(msx_cart_keyboard_master_device::io_00_r) uint8_t msx_cart_keyboard_master_device::io_00_r()
{ {
return m_vlm5030->bsy() ? 0x10 : 0x00; return m_vlm5030->bsy() ? 0x10 : 0x00;
} }

View File

@ -25,13 +25,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -49,13 +50,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
@ -78,13 +80,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
@ -103,8 +106,8 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
@ -123,8 +126,8 @@ class msx_cart_konami_sound_device : public device_t, public msx_cart_interface
public: public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
msx_cart_konami_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_cart_konami_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -132,6 +135,7 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;
@ -186,14 +190,14 @@ protected:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
private: private:
required_device<vlm5030_device> m_vlm5030; required_device<vlm5030_device> m_vlm5030;
DECLARE_READ8_MEMBER(read_vlm); uint8_t read_vlm(offs_t offset);
DECLARE_WRITE8_MEMBER(io_20_w); void io_20_w(uint8_t data);
DECLARE_READ8_MEMBER(io_00_r); uint8_t io_00_r();
void vlm_map(address_map &map); void vlm_map(address_map &map);
}; };

View File

@ -21,8 +21,12 @@ msx_cart_korean_80in1_device::msx_cart_korean_80in1_device(const machine_config
void msx_cart_korean_80in1_device::device_start() void msx_cart_korean_80in1_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_80in1_device::restore_banks), this));
void msx_cart_korean_80in1_device::device_post_load()
{
restore_banks();
} }
@ -72,7 +76,7 @@ void msx_cart_korean_80in1_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_korean_80in1_device::read_cart) uint8_t msx_cart_korean_80in1_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -83,7 +87,7 @@ READ8_MEMBER(msx_cart_korean_80in1_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_korean_80in1_device::write_cart) void msx_cart_korean_80in1_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x4000 && offset < 0x4004) if (offset >= 0x4000 && offset < 0x4004)
{ {
@ -112,11 +116,14 @@ void msx_cart_korean_90in1_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_90in1_device::restore_banks), this));
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x77, 0x77, write8smo_delegate(FUNC(msx_cart_korean_90in1_device::banking), this));
space.install_write_handler(0x77, 0x77, write8_delegate(FUNC(msx_cart_korean_90in1_device::banking), this)); }
void msx_cart_korean_90in1_device::device_post_load()
{
restore_banks();
} }
@ -181,7 +188,7 @@ void msx_cart_korean_90in1_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_korean_90in1_device::read_cart) uint8_t msx_cart_korean_90in1_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -192,7 +199,7 @@ READ8_MEMBER(msx_cart_korean_90in1_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_korean_90in1_device::banking) void msx_cart_korean_90in1_device::banking(uint8_t data)
{ {
m_selected_bank = data; m_selected_bank = data;
restore_banks(); restore_banks();
@ -215,8 +222,12 @@ msx_cart_korean_126in1_device::msx_cart_korean_126in1_device(const machine_confi
void msx_cart_korean_126in1_device::device_start() void msx_cart_korean_126in1_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_126in1_device::restore_banks), this));
void msx_cart_korean_126in1_device::device_post_load()
{
restore_banks();
} }
@ -266,7 +277,7 @@ void msx_cart_korean_126in1_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_korean_126in1_device::read_cart) uint8_t msx_cart_korean_126in1_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -277,7 +288,7 @@ READ8_MEMBER(msx_cart_korean_126in1_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_korean_126in1_device::write_cart) void msx_cart_korean_126in1_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x4000 && offset < 0x4002) if (offset >= 0x4000 && offset < 0x4002)
{ {

View File

@ -20,13 +20,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
private: private:
void restore_banks(); void restore_banks();
@ -45,16 +46,17 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
DECLARE_WRITE8_MEMBER(banking);
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
private: private:
void banking(uint8_t data);
void restore_banks(); void restore_banks();
uint8_t m_bank_mask; uint8_t m_bank_mask;
@ -70,13 +72,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
private: private:
void restore_banks(); void restore_banks();

View File

@ -40,8 +40,12 @@ void msx_cart_majutsushi_device::device_add_mconfig(machine_config &config)
void msx_cart_majutsushi_device::device_start() void msx_cart_majutsushi_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_majutsushi_device::restore_banks), this));
void msx_cart_majutsushi_device::device_post_load()
{
restore_banks();
} }
@ -78,13 +82,13 @@ void msx_cart_majutsushi_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_majutsushi_device::read_cart) uint8_t msx_cart_majutsushi_device::read_cart(offs_t offset)
{ {
return m_bank_base[offset >> 13][offset & 0x1fff]; return m_bank_base[offset >> 13][offset & 0x1fff];
} }
WRITE8_MEMBER(msx_cart_majutsushi_device::write_cart) void msx_cart_majutsushi_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset & 0xe000) switch (offset & 0xe000)
{ {

View File

@ -19,13 +19,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;

View File

@ -67,13 +67,10 @@ const tiny_rom_entry *msx_cart_moonsound_device::device_rom_region() const
void msx_cart_moonsound_device::device_start() void msx_cart_moonsound_device::device_start()
{ {
m_out_irq_cb.resolve_safe();
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_readwrite_handler(0x7e, 0x7f, read8sm_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_pcm), this), write8sm_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_pcm), this));
space.install_readwrite_handler(0x7e, 0x7f, read8_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_pcm), this), write8_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_pcm), this)); io_space().install_readwrite_handler(0xc4, 0xc7, read8sm_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_fm), this), write8sm_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_fm), this));
space.install_readwrite_handler(0xc4, 0xc7, read8_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_fm), this), write8_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_fm), this)); io_space().install_read_handler(0xc0, 0xc0, read8smo_delegate(FUNC(msx_cart_moonsound_device::read_c0), this));
space.install_read_handler(0xc0, 0xc0, read8_delegate(FUNC(msx_cart_moonsound_device::read_c0), this));
} }
@ -85,32 +82,32 @@ void msx_cart_moonsound_device::device_reset()
WRITE_LINE_MEMBER(msx_cart_moonsound_device::irq_w) WRITE_LINE_MEMBER(msx_cart_moonsound_device::irq_w)
{ {
LOG("moonsound: irq state %d\n", state); LOG("moonsound: irq state %d\n", state);
m_out_irq_cb(state); irq_out(state);
} }
WRITE8_MEMBER(msx_cart_moonsound_device::write_ymf278b_fm) void msx_cart_moonsound_device::write_ymf278b_fm(offs_t offset, uint8_t data)
{ {
LOG("moonsound: write 0x%02x, data 0x%02x\n", 0xc4 + offset, data); LOG("moonsound: write 0x%02x, data 0x%02x\n", 0xc4 + offset, data);
m_ymf278b->write(offset, data); m_ymf278b->write(offset, data);
} }
READ8_MEMBER(msx_cart_moonsound_device::read_ymf278b_fm) uint8_t msx_cart_moonsound_device::read_ymf278b_fm(offs_t offset)
{ {
LOG("moonsound: read 0x%02x\n", 0xc4 + offset); LOG("moonsound: read 0x%02x\n", 0xc4 + offset);
return m_ymf278b->read(offset); return m_ymf278b->read(offset);
} }
WRITE8_MEMBER(msx_cart_moonsound_device::write_ymf278b_pcm) void msx_cart_moonsound_device::write_ymf278b_pcm(offs_t offset, uint8_t data)
{ {
LOG("moonsound: write 0x%02x, data 0x%02x\n", 0x7e + offset, data); LOG("moonsound: write 0x%02x, data 0x%02x\n", 0x7e + offset, data);
m_ymf278b->write(4 + offset, data); m_ymf278b->write(4 + offset, data);
} }
READ8_MEMBER(msx_cart_moonsound_device::read_ymf278b_pcm) uint8_t msx_cart_moonsound_device::read_ymf278b_pcm(offs_t offset)
{ {
LOG("moonsound: read 0x%02x\n", 0x7e + offset); LOG("moonsound: read 0x%02x\n", 0x7e + offset);
return m_ymf278b->read(4 + offset); return m_ymf278b->read(4 + offset);
@ -118,7 +115,7 @@ READ8_MEMBER(msx_cart_moonsound_device::read_ymf278b_pcm)
// For detecting presence of moonsound cartridge // For detecting presence of moonsound cartridge
READ8_MEMBER(msx_cart_moonsound_device::read_c0) uint8_t msx_cart_moonsound_device::read_c0()
{ {
LOG("moonsound: read 0xc0\n"); LOG("moonsound: read 0xc0\n");
return 0x00; return 0x00;

View File

@ -27,11 +27,11 @@ protected:
private: private:
DECLARE_WRITE_LINE_MEMBER(irq_w); DECLARE_WRITE_LINE_MEMBER(irq_w);
DECLARE_WRITE8_MEMBER(write_ymf278b_fm); void write_ymf278b_fm(offs_t offset, uint8_t data);
DECLARE_READ8_MEMBER(read_ymf278b_fm); uint8_t read_ymf278b_fm(offs_t offset);
DECLARE_WRITE8_MEMBER(write_ymf278b_pcm); void write_ymf278b_pcm(offs_t offset, uint8_t data);
DECLARE_READ8_MEMBER(read_ymf278b_pcm); uint8_t read_ymf278b_pcm(offs_t offset);
DECLARE_READ8_MEMBER(read_c0); uint8_t read_c0();
void ymf278b_map(address_map &map); void ymf278b_map(address_map &map);

View File

@ -96,9 +96,8 @@ void msx_cart_msx_audio_hxmu900_device::device_add_mconfig(machine_config &confi
void msx_cart_msx_audio_hxmu900_device::device_start() void msx_cart_msx_audio_hxmu900_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
space.install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target())); io_space().install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
space.install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
} }
@ -111,7 +110,7 @@ void msx_cart_msx_audio_hxmu900_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_msx_audio_hxmu900_device::read_cart) uint8_t msx_cart_msx_audio_hxmu900_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xC000) if (offset >= 0x4000 && offset < 0xC000)
{ {
@ -201,11 +200,10 @@ WRITE_LINE_MEMBER(msx_cart_msx_audio_nms1205_device::midi_in)
void msx_cart_msx_audio_nms1205_device::device_start() void msx_cart_msx_audio_nms1205_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
space.install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target())); io_space().install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
space.install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target())); io_space().install_write_handler(0x00, 0x01, write8sm_delegate(FUNC(acia6850_device::write), m_acia6850.target()));
space.install_write_handler(0x00, 0x01, write8sm_delegate(FUNC(acia6850_device::write), m_acia6850.target())); io_space().install_read_handler(0x04, 0x05, read8sm_delegate(FUNC(acia6850_device::read), m_acia6850.target()));
space.install_read_handler(0x04, 0x05, read8sm_delegate(FUNC(acia6850_device::read), m_acia6850.target()));
} }
@ -218,7 +216,7 @@ void msx_cart_msx_audio_nms1205_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_msx_audio_nms1205_device::read_cart) uint8_t msx_cart_msx_audio_nms1205_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xC000) if (offset >= 0x4000 && offset < 0xC000)
{ {
@ -289,9 +287,8 @@ const tiny_rom_entry *msx_cart_msx_audio_fsca1_device::device_rom_region() const
void msx_cart_msx_audio_fsca1_device::device_start() void msx_cart_msx_audio_fsca1_device::device_start()
{ {
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0xc0, 0xc3, write8sm_delegate(FUNC(msx_cart_msx_audio_fsca1_device::write_y8950), this));
space.install_write_handler(0xc0, 0xc3, write8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::write_y8950), this)); io_space().install_read_handler(0xc0, 0xc3, read8sm_delegate(FUNC(msx_cart_msx_audio_fsca1_device::read_y8950), this));
space.install_read_handler(0xc0, 0xc3, read8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::read_y8950), this));
} }
@ -304,7 +301,7 @@ void msx_cart_msx_audio_fsca1_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_cart) uint8_t msx_cart_msx_audio_fsca1_device::read_cart(offs_t offset)
{ {
if (m_7ffe == 0 && (offset & 0xB000) == 0x3000) if (m_7ffe == 0 && (offset & 0xB000) == 0x3000)
{ {
@ -314,7 +311,7 @@ READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_cart) void msx_cart_msx_audio_fsca1_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset == 0x7ffe) if (offset == 0x7ffe)
{ {
@ -338,7 +335,7 @@ WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_cart)
} }
WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_y8950) void msx_cart_msx_audio_fsca1_device::write_y8950(offs_t offset, uint8_t data)
{ {
if (offset & 2) if (offset & 2)
{ {
@ -357,7 +354,7 @@ WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_y8950)
} }
READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_y8950) uint8_t msx_cart_msx_audio_fsca1_device::read_y8950(offs_t offset)
{ {
if (offset & 2) if (offset & 2)
{ {
@ -370,13 +367,13 @@ READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_y8950)
} }
WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::y8950_io_w) void msx_cart_msx_audio_fsca1_device::y8950_io_w(uint8_t data)
{ {
logerror("msx_fsca1::y8950_io_w: %02x\n", data); logerror("msx_fsca1::y8950_io_w: %02x\n", data);
} }
READ8_MEMBER(msx_cart_msx_audio_fsca1_device::y8950_io_r) uint8_t msx_cart_msx_audio_fsca1_device::y8950_io_r()
{ {
return m_io_config->read(); return m_io_config->read();
} }

View File

@ -23,7 +23,7 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
@ -44,7 +44,7 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
@ -71,8 +71,8 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
@ -82,12 +82,12 @@ protected:
virtual ioport_constructor device_input_ports() const override; virtual ioport_constructor device_input_ports() const override;
virtual const tiny_rom_entry *device_rom_region() const override; virtual const tiny_rom_entry *device_rom_region() const override;
DECLARE_WRITE8_MEMBER(write_y8950);
DECLARE_READ8_MEMBER(read_y8950);
private: private:
DECLARE_WRITE8_MEMBER(y8950_io_w); void write_y8950(offs_t offset, uint8_t data);
DECLARE_READ8_MEMBER(y8950_io_r); uint8_t read_y8950(offs_t offset);
void y8950_io_w(uint8_t data);
uint8_t y8950_io_r();
required_device<y8950_device> m_y8950; required_device<y8950_device> m_y8950;
required_ioport m_io_config; required_ioport m_io_config;

View File

@ -21,20 +21,20 @@ void msx_audio_kbdc_port_device::device_start()
} }
WRITE8_MEMBER(msx_audio_kbdc_port_device::write) void msx_audio_kbdc_port_device::write(uint8_t data)
{ {
if (m_keyboard) if (m_keyboard)
{ {
m_keyboard->write(space, offset, data); m_keyboard->write(data);
} }
} }
READ8_MEMBER(msx_audio_kbdc_port_device::read) uint8_t msx_audio_kbdc_port_device::read()
{ {
if (m_keyboard) if (m_keyboard)
{ {
return m_keyboard->read(space, offset); return m_keyboard->read();
} }
return 0xff; return 0xff;
} }
@ -57,7 +57,7 @@ public:
virtual ioport_constructor device_input_ports() const override; virtual ioport_constructor device_input_ports() const override;
virtual DECLARE_READ8_MEMBER(read) override virtual uint8_t read() override
{ {
uint8_t result = 0xff; uint8_t result = 0xff;
@ -71,7 +71,7 @@ public:
return result; return result;
} }
virtual DECLARE_WRITE8_MEMBER(write) override virtual void write(uint8_t data) override
{ {
m_row = data; m_row = data;
} }
@ -187,7 +187,7 @@ public:
virtual ioport_constructor device_input_ports() const override; virtual ioport_constructor device_input_ports() const override;
virtual DECLARE_READ8_MEMBER(read) override virtual uint8_t read() override
{ {
uint8_t result = 0xff; uint8_t result = 0xff;
@ -201,7 +201,7 @@ public:
return result; return result;
} }
virtual DECLARE_WRITE8_MEMBER(write) override virtual void write(uint8_t data) override
{ {
logerror("msx_nms1160::write %02x\n", data); logerror("msx_nms1160::write %02x\n", data);
m_row = data; m_row = data;

View File

@ -10,9 +10,8 @@ DECLARE_DEVICE_TYPE(MSX_AUDIO_KBDC_PORT, msx_audio_kbdc_port_device)
class msx_audio_kb_port_interface : public device_slot_card_interface class msx_audio_kb_port_interface : public device_slot_card_interface
{ {
public: public:
virtual uint8_t read() { return 0xff; }
virtual DECLARE_READ8_MEMBER(read) { return 0xff; } virtual void write(uint8_t data) { }
virtual DECLARE_WRITE8_MEMBER(write) { }
protected: protected:
// construction/destruction // construction/destruction
@ -39,8 +38,8 @@ public:
virtual void device_start() override; virtual void device_start() override;
// Physical connection simply consists of 8 input and 8 output lines split across 2 connectors // Physical connection simply consists of 8 input and 8 output lines split across 2 connectors
DECLARE_WRITE8_MEMBER(write); void write(uint8_t data);
DECLARE_READ8_MEMBER(read); uint8_t read();
protected: protected:

View File

@ -18,8 +18,12 @@ msx_cart_msxdos2_device::msx_cart_msxdos2_device(const machine_config &mconfig,
void msx_cart_msxdos2_device::device_start() void msx_cart_msxdos2_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_msxdos2_device::restore_banks), this));
void msx_cart_msxdos2_device::device_post_load()
{
restore_banks();
} }
@ -46,7 +50,7 @@ void msx_cart_msxdos2_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_msxdos2_device::read_cart) uint8_t msx_cart_msxdos2_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0x8000) if (offset >= 0x4000 && offset < 0x8000)
{ {
@ -57,7 +61,7 @@ READ8_MEMBER(msx_cart_msxdos2_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_msxdos2_device::write_cart) void msx_cart_msxdos2_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset == 0x6000) if (offset == 0x6000)
{ {

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -84,7 +84,7 @@ void msx_cart_nomapper_device::initialize_cartridge()
m_end_address = std::min<uint32_t>(m_start_address + size, 0x10000); m_end_address = std::min<uint32_t>(m_start_address + size, 0x10000);
} }
READ8_MEMBER(msx_cart_nomapper_device::read_cart) uint8_t msx_cart_nomapper_device::read_cart(offs_t offset)
{ {
if ( offset >= m_start_address && offset < m_end_address ) if ( offset >= m_start_address && offset < m_end_address )
{ {

View File

@ -21,7 +21,7 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
private: private:
uint32_t m_start_address; uint32_t m_start_address;

View File

@ -21,8 +21,12 @@ msx_cart_rtype_device::msx_cart_rtype_device(const machine_config &mconfig, cons
void msx_cart_rtype_device::device_start() void msx_cart_rtype_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_rtype_device::restore_banks), this));
void msx_cart_rtype_device::device_post_load()
{
restore_banks();
} }
@ -54,7 +58,7 @@ void msx_cart_rtype_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_rtype_device::read_cart) uint8_t msx_cart_rtype_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -64,7 +68,7 @@ READ8_MEMBER(msx_cart_rtype_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_rtype_device::write_cart) void msx_cart_rtype_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset >= 0x7000 && offset < 0x8000) if (offset >= 0x7000 && offset < 0x8000)
{ {

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -19,8 +19,12 @@ msx_cart_super_swangi_device::msx_cart_super_swangi_device(const machine_config
void msx_cart_super_swangi_device::device_start() void msx_cart_super_swangi_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
}
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_super_swangi_device::restore_banks), this));
void msx_cart_super_swangi_device::device_post_load()
{
restore_banks();
} }
@ -48,7 +52,7 @@ void msx_cart_super_swangi_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_super_swangi_device::read_cart) uint8_t msx_cart_super_swangi_device::read_cart(offs_t offset)
{ {
if (offset >= 0x4000 && offset < 0xc000) if (offset >= 0x4000 && offset < 0xc000)
{ {
@ -58,7 +62,7 @@ READ8_MEMBER(msx_cart_super_swangi_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_super_swangi_device::write_cart) void msx_cart_super_swangi_device::write_cart(offs_t offset, uint8_t data)
{ {
if (offset == 0x8000) if (offset == 0x8000)
{ {

View File

@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();

View File

@ -19,11 +19,14 @@ void msx_cart_superloderunner_device::device_start()
{ {
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_superloderunner_device::restore_banks), this));
// Install evil memory write handler // Install evil memory write handler
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_PROGRAM); memory_space().install_write_handler(0x0000, 0x0000, write8smo_delegate(FUNC(msx_cart_superloderunner_device::banking), this));
space.install_write_handler(0x0000, 0x0000, write8_delegate(FUNC(msx_cart_superloderunner_device::banking), this)); }
void msx_cart_superloderunner_device::device_post_load()
{
restore_banks();
} }
@ -44,7 +47,7 @@ void msx_cart_superloderunner_device::initialize_cartridge()
} }
READ8_MEMBER(msx_cart_superloderunner_device::read_cart) uint8_t msx_cart_superloderunner_device::read_cart(offs_t offset)
{ {
if (offset >= 0x8000 && offset < 0xc000) if (offset >= 0x8000 && offset < 0xc000)
{ {
@ -55,7 +58,7 @@ READ8_MEMBER(msx_cart_superloderunner_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_superloderunner_device::banking) void msx_cart_superloderunner_device::banking(uint8_t data)
{ {
m_selected_bank = data; m_selected_bank = data;
restore_banks(); restore_banks();

View File

@ -18,17 +18,18 @@ public:
virtual void initialize_cartridge() override; virtual void initialize_cartridge() override;
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
DECLARE_WRITE8_MEMBER(banking);
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
private: private:
void banking(uint8_t data);
uint8_t m_selected_bank; uint8_t m_selected_bank;
uint8_t *m_bank_base; uint8_t *m_bank_base;
}; };

View File

@ -131,16 +131,16 @@ void msx_cart_sfg_device::check_irq()
{ {
if (m_ym2151_irq_state != CLEAR_LINE || m_ym2148_irq_state != CLEAR_LINE) if (m_ym2151_irq_state != CLEAR_LINE || m_ym2148_irq_state != CLEAR_LINE)
{ {
m_out_irq_cb(ASSERT_LINE); irq_out(ASSERT_LINE);
} }
else else
{ {
m_out_irq_cb(CLEAR_LINE); irq_out(CLEAR_LINE);
} }
} }
READ8_MEMBER(msx_cart_sfg_device::read_cart) uint8_t msx_cart_sfg_device::read_cart(offs_t offset)
{ {
switch (offset & 0x3fff) switch (offset & 0x3fff)
{ {
@ -155,7 +155,7 @@ READ8_MEMBER(msx_cart_sfg_device::read_cart)
case 0x3ff6: // YM-2148 MIDI UART status register case 0x3ff6: // YM-2148 MIDI UART status register
// ------x- - 1 = received a byte/receive buffer full? // ------x- - 1 = received a byte/receive buffer full?
// -------x - 1 = ready to send next byte/send buffer empty? // -------x - 1 = ready to send next byte/send buffer empty?
return m_ym2148->read(space, offset & 7); return m_ym2148->read(machine().dummy_space(), offset & 7);
} }
if (offset < 0x8000) if (offset < 0x8000)
@ -167,7 +167,7 @@ READ8_MEMBER(msx_cart_sfg_device::read_cart)
} }
WRITE8_MEMBER(msx_cart_sfg_device::write_cart) void msx_cart_sfg_device::write_cart(offs_t offset, uint8_t data)
{ {
switch (offset & 0x3fff) switch (offset & 0x3fff)
{ {
@ -191,7 +191,7 @@ WRITE8_MEMBER(msx_cart_sfg_device::write_cart)
// x------- - 1 = reset // x------- - 1 = reset
// -----x-- - 1 = enable receiving / sending midi data // -----x-- - 1 = enable receiving / sending midi data
// -------x - 1 = enable receiving / sending midi data // -------x - 1 = enable receiving / sending midi data
m_ym2148->write(space, offset & 7, data); m_ym2148->write(machine().dummy_space(), offset & 7, data);
break; break;
default: default:

View File

@ -18,8 +18,9 @@ DECLARE_DEVICE_TYPE(MSX_CART_SFG05, msx_cart_sfg05_device)
class msx_cart_sfg_device : public device_t, public msx_cart_interface class msx_cart_sfg_device : public device_t, public msx_cart_interface
{ {
public: public:
virtual DECLARE_READ8_MEMBER(read_cart) override; virtual uint8_t read_cart(offs_t offset) override;
virtual DECLARE_WRITE8_MEMBER(write_cart) override; virtual void write_cart(offs_t offset, uint8_t data) override;
protected: protected:
msx_cart_sfg_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock); msx_cart_sfg_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock);

View File

@ -25,17 +25,17 @@ void msx_slot_bunsetsu_device::device_reset()
} }
READ8_MEMBER(msx_slot_bunsetsu_device::read) uint8_t msx_slot_bunsetsu_device::read(offs_t offset)
{ {
if (offset == 0xbfff) if (offset == 0xbfff)
{ {
return m_bunsetsu_region[m_bunsetsu_address++ & 0x1ffff]; return m_bunsetsu_region[m_bunsetsu_address++ & 0x1ffff];
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
WRITE8_MEMBER(msx_slot_bunsetsu_device::write) void msx_slot_bunsetsu_device::write(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {

View File

@ -12,11 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device) 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 class msx_slot_bunsetsu_device : public msx_slot_rom_device
{ {
public: public:
@ -25,8 +20,8 @@ public:
// configuration helpers // configuration helpers
void set_bunsetsu_region_tag(const char *tag) { m_bunsetsu_region.set_tag(tag); } void set_bunsetsu_region_tag(const char *tag) { m_bunsetsu_region.set_tag(tag); }
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;
protected: protected:
virtual void device_reset() override; virtual void device_reset() override;

View File

@ -43,7 +43,7 @@ msx_slot_cartridge_device::msx_slot_cartridge_device(const machine_config &mconf
: device_t(mconfig, type, tag, owner, clock) : device_t(mconfig, type, tag, owner, clock)
, device_image_interface(mconfig, *this) , device_image_interface(mconfig, *this)
, device_slot_interface(mconfig, *this) , device_slot_interface(mconfig, *this)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_irq_handler(*this) , m_irq_handler(*this)
, m_cartridge(nullptr) , m_cartridge(nullptr)
{ {
@ -90,10 +90,17 @@ static const char *msx_cart_get_slot_option(int type)
} }
void msx_slot_cartridge_device::device_start() void msx_slot_cartridge_device::device_resolve_objects()
{ {
m_irq_handler.resolve_safe(); m_irq_handler.resolve_safe();
m_cartridge = dynamic_cast<msx_cart_interface *>(get_card_device()); 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()
{
} }
@ -169,7 +176,7 @@ image_init_result msx_slot_cartridge_device::call_load()
} }
} }
m_cartridge->set_out_irq_cb(DEVCB_WRITELINE(*this, msx_slot_cartridge_device, irq_out)); m_cartridge->m_exp = this;
m_cartridge->initialize_cartridge(); m_cartridge->initialize_cartridge();
if (m_cartridge->get_sram_size() > 0) if (m_cartridge->get_sram_size() > 0)
@ -331,21 +338,21 @@ std::string msx_slot_cartridge_device::get_default_card_software(get_default_car
} }
READ8_MEMBER(msx_slot_cartridge_device::read) uint8_t msx_slot_cartridge_device::read(offs_t offset)
{ {
if ( m_cartridge ) if ( m_cartridge )
{ {
return m_cartridge->read_cart(space, offset); return m_cartridge->read_cart(offset);
} }
return 0xFF; return 0xFF;
} }
WRITE8_MEMBER(msx_slot_cartridge_device::write) void msx_slot_cartridge_device::write(offs_t offset, uint8_t data)
{ {
if ( m_cartridge ) if ( m_cartridge )
{ {
m_cartridge->write_cart(space, offset, data); m_cartridge->write_cart(offset, data);
} }
} }
@ -360,8 +367,4 @@ msx_slot_yamaha_expansion_device::msx_slot_yamaha_expansion_device(const machine
void msx_slot_yamaha_expansion_device::device_start() 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));
} }

View File

@ -14,18 +14,6 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_CARTRIDGE, msx_slot_cartridge_device)
DECLARE_DEVICE_TYPE(MSX_SLOT_YAMAHA_EXPANSION, msx_slot_yamaha_expansion_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 class msx_slot_cartridge_device : public device_t
, public device_image_interface , public device_image_interface
, public device_slot_interface , public device_slot_interface
@ -35,8 +23,8 @@ public:
// construction/destruction // construction/destruction
msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// static configuration helpers // configuration helpers
template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); } auto irq_handler() { return m_irq_handler.bind(); }
// image-level overrides // image-level overrides
virtual image_init_result call_load() override; virtual image_init_result call_load() override;
@ -57,8 +45,8 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override; virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// msx_internal_slot-level overrides // msx_internal_slot-level overrides
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;
DECLARE_WRITE_LINE_MEMBER(irq_out); DECLARE_WRITE_LINE_MEMBER(irq_out);
@ -66,6 +54,7 @@ protected:
msx_slot_cartridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_slot_cartridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides // device-level overrides
virtual void device_resolve_objects() override;
virtual void device_start() override; virtual void device_start() override;
devcb_write_line m_irq_handler; devcb_write_line m_irq_handler;

View File

@ -137,8 +137,6 @@ void msx_slot_disk1_device::device_start()
save_item(NAME(m_side_control)); save_item(NAME(m_side_control));
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk1_device::post_load), this));
} }
@ -148,7 +146,7 @@ void msx_slot_disk1_device::device_reset()
} }
void msx_slot_disk1_device::post_load() void msx_slot_disk1_device::device_post_load()
{ {
uint8_t data = m_control; uint8_t data = m_control;
@ -207,7 +205,7 @@ void msx_slot_disk1_device::set_control(uint8_t data)
} }
READ8_MEMBER(msx_slot_disk1_device::read) uint8_t msx_slot_disk1_device::read(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -240,11 +238,11 @@ READ8_MEMBER(msx_slot_disk1_device::read)
return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80); return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
WRITE8_MEMBER(msx_slot_disk1_device::write) void msx_slot_disk1_device::write(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
@ -298,8 +296,6 @@ void msx_slot_disk2_device::device_start()
msx_slot_wd_disk_device::device_start(); msx_slot_wd_disk_device::device_start();
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk2_device::post_load), this));
} }
@ -309,7 +305,7 @@ void msx_slot_disk2_device::device_reset()
} }
void msx_slot_disk2_device::post_load() void msx_slot_disk2_device::device_post_load()
{ {
uint8_t data = m_control; uint8_t data = m_control;
@ -356,7 +352,7 @@ void msx_slot_disk2_device::set_control(uint8_t data)
} }
READ8_MEMBER(msx_slot_disk2_device::read) uint8_t msx_slot_disk2_device::read(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -381,11 +377,11 @@ READ8_MEMBER(msx_slot_disk2_device::read)
return 0x3f | (m_fdc->drq_r() ? 0 : 0x40) | (m_fdc->intrq_r() ? 0x80 : 0); return 0x3f | (m_fdc->drq_r() ? 0 : 0x40) | (m_fdc->intrq_r() ? 0x80 : 0);
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
WRITE8_MEMBER(msx_slot_disk2_device::write) void msx_slot_disk2_device::write(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
@ -431,8 +427,10 @@ msx_slot_disk3_device::msx_slot_disk3_device(const machine_config &mconfig, cons
} }
WRITE8_MEMBER(msx_slot_disk3_device::write) void msx_slot_disk3_device::write(offs_t offset, uint8_t data)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ff8: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA case 0x7ff8: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA
@ -454,8 +452,10 @@ WRITE8_MEMBER(msx_slot_disk3_device::write)
} }
READ8_MEMBER(msx_slot_disk3_device::read) uint8_t msx_slot_disk3_device::read(offs_t offset)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ffa: // Status Register case 0x7ffa: // Status Register
@ -464,7 +464,7 @@ READ8_MEMBER(msx_slot_disk3_device::read)
return m_fdc->fifo_r(space, 5); return m_fdc->fifo_r(space, 5);
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
@ -477,8 +477,10 @@ msx_slot_disk4_device::msx_slot_disk4_device(const machine_config &mconfig, cons
} }
WRITE8_MEMBER(msx_slot_disk4_device::write) void msx_slot_disk4_device::write(offs_t offset, uint8_t data)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ff1: // FDD : x - x - MC1 - MC0 - x - x - x - x case 0x7ff1: // FDD : x - x - MC1 - MC0 - x - x - x - x
@ -503,8 +505,10 @@ WRITE8_MEMBER(msx_slot_disk4_device::write)
} }
READ8_MEMBER(msx_slot_disk4_device::read) uint8_t msx_slot_disk4_device::read(offs_t offset)
{ {
address_space &space = machine().dummy_space();
switch (offset) switch (offset)
{ {
case 0x7ff1: // FDD : x - x - MC1 - MC0 - x - x - x - x case 0x7ff1: // FDD : x - x - MC1 - MC0 - x - x - x - x
@ -517,7 +521,7 @@ READ8_MEMBER(msx_slot_disk4_device::read)
return m_fdc->fifo_r(space, 5); return m_fdc->fifo_r(space, 5);
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
@ -536,12 +540,9 @@ void msx_slot_disk5_device::device_start()
save_item(NAME(m_control)); 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 // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0xd0, 0xd4, write8sm_delegate(FUNC(msx_slot_disk5_device::io_write), this));
space.install_write_handler(0xd0, 0xd4, write8_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));
space.install_read_handler(0xd0, 0xd4, read8_delegate(FUNC(msx_slot_disk5_device::io_read), this));
} }
@ -551,7 +552,7 @@ void msx_slot_disk5_device::device_reset()
} }
void msx_slot_disk5_device::post_load() void msx_slot_disk5_device::device_post_load()
{ {
set_control(m_control); set_control(m_control);
} }
@ -594,7 +595,7 @@ void msx_slot_disk5_device::set_control(uint8_t control)
} }
READ8_MEMBER(msx_slot_disk5_device::io_read) uint8_t msx_slot_disk5_device::io_read(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -618,7 +619,7 @@ READ8_MEMBER(msx_slot_disk5_device::io_read)
} }
WRITE8_MEMBER(msx_slot_disk5_device::io_write) void msx_slot_disk5_device::io_write(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
@ -662,8 +663,6 @@ void msx_slot_disk6_device::device_start()
save_item(NAME(m_side_motor)); save_item(NAME(m_side_motor));
save_item(NAME(m_drive_select0)); save_item(NAME(m_drive_select0));
save_item(NAME(m_drive_select1)); save_item(NAME(m_drive_select1));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this));
} }
@ -673,7 +672,7 @@ void msx_slot_disk6_device::device_reset()
} }
void msx_slot_disk6_device::post_load() void msx_slot_disk6_device::device_post_load()
{ {
select_drive(); select_drive();
} }
@ -715,7 +714,7 @@ void msx_slot_disk6_device::set_side_motor()
} }
READ8_MEMBER(msx_slot_disk6_device::read) uint8_t msx_slot_disk6_device::read(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
@ -757,11 +756,11 @@ READ8_MEMBER(msx_slot_disk6_device::read)
return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80); return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
} }
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
WRITE8_MEMBER(msx_slot_disk6_device::write) void msx_slot_disk6_device::write(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {

View File

@ -26,51 +26,6 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_DISK5, msx_slot_disk5_device)
DECLARE_DEVICE_TYPE(MSX_SLOT_DISK6, msx_slot_disk6_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 class msx_slot_disk_device : public msx_slot_rom_device
{ {
public: public:
@ -81,6 +36,21 @@ public:
void set_floppy2_tag(const char *tag) { m_floppy2_tag = tag; } void set_floppy2_tag(const char *tag) { m_floppy2_tag = tag; }
void set_floppy3_tag(const char *tag) { m_floppy3_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: protected:
msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -128,14 +98,13 @@ class msx_slot_disk1_device : public msx_slot_wd_disk_device
public: public:
msx_slot_disk1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
private: private:
uint8_t m_side_control; uint8_t m_side_control;
@ -151,14 +120,13 @@ class msx_slot_disk2_device : public msx_slot_wd_disk_device
public: public:
msx_slot_disk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
private: private:
uint8_t m_control; uint8_t m_control;
@ -172,8 +140,8 @@ class msx_slot_disk3_device : public msx_slot_tc8566_disk_device
public: public:
msx_slot_disk3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
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;
}; };
@ -182,8 +150,8 @@ class msx_slot_disk4_device : public msx_slot_tc8566_disk_device
public: public:
msx_slot_disk4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
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;
}; };
@ -192,16 +160,15 @@ class msx_slot_disk5_device : public msx_slot_wd_disk_device
public: public:
msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
private: private:
uint8_t io_read(offs_t offset);
void io_write(offs_t offset, uint8_t data);
uint8_t m_control; uint8_t m_control;
void set_control(uint8_t control); void set_control(uint8_t control);
@ -213,14 +180,13 @@ class msx_slot_disk6_device : public msx_slot_wd_disk_device
public: public:
msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_post_load() override;
void post_load();
private: private:
uint8_t m_side_motor; uint8_t m_side_motor;

View File

@ -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) 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) : device_t(mconfig, MSX_SLOT_FS4600, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram") , m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG) , m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0) , m_region_offset(0)
@ -48,8 +48,12 @@ void msx_slot_fs4600_device::device_start()
save_item(NAME(m_sram_address)); save_item(NAME(m_sram_address));
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_fs4600_device::restore_banks), this)); restore_banks();
}
void msx_slot_fs4600_device::device_post_load()
{
restore_banks(); restore_banks();
} }
@ -63,7 +67,7 @@ void msx_slot_fs4600_device::restore_banks()
} }
READ8_MEMBER(msx_slot_fs4600_device::read) uint8_t msx_slot_fs4600_device::read(offs_t offset)
{ {
if ((m_control & 0x02) && ((offset & 0x3fff) == 0x3ffd)) if ((m_control & 0x02) && ((offset & 0x3fff) == 0x3ffd))
{ {
@ -77,7 +81,7 @@ READ8_MEMBER(msx_slot_fs4600_device::read)
} }
WRITE8_MEMBER(msx_slot_fs4600_device::write) void msx_slot_fs4600_device::write(offs_t offset, uint8_t data)
{ {
if (offset == 0x7ff9) if (offset == 0x7ff9)
{ {

View File

@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device) 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 class msx_slot_fs4600_device : public device_t, public msx_internal_slot_interface
{ {
public: public:
@ -24,11 +20,12 @@ public:
// configuration helpers // configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;

View File

@ -32,18 +32,17 @@ void msx_slot_music_device::device_start()
} }
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_write_handler(0x7c, 0x7d, write8sm_delegate(FUNC(msx_slot_music_device::write_ym2413), this));
space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_slot_music_device::write_ym2413), this));
} }
READ8_MEMBER(msx_slot_music_device::read) uint8_t msx_slot_music_device::read(offs_t offset)
{ {
return msx_slot_rom_device::read(space, offset); return msx_slot_rom_device::read(offset);
} }
WRITE8_MEMBER(msx_slot_music_device::write_ym2413) void msx_slot_music_device::write_ym2413(offs_t offset, uint8_t data)
{ {
m_ym2413->write(offset & 1, data); m_ym2413->write(offset & 1, data);
} }

View File

@ -13,11 +13,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_MUSIC, msx_slot_music_device) 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 class msx_slot_music_device : public msx_slot_rom_device
{ {
public: public:
@ -26,14 +21,14 @@ public:
// configuration helpers // configuration helpers
void set_ym2413_tag(const char *tag) { m_ym2413_tag = tag; } void set_ym2413_tag(const char *tag) { m_ym2413_tag = tag; }
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
DECLARE_WRITE8_MEMBER(write_ym2413);
protected: protected:
virtual void device_start() override; virtual void device_start() override;
private: private:
void write_ym2413(offs_t offset, uint8_t data);
ym2413_device *m_ym2413; ym2413_device *m_ym2413;
const char *m_ym2413_tag; const char *m_ym2413_tag;
}; };

View File

@ -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) 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) : device_t(mconfig, MSX_SLOT_PANASONIC08, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram") , m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG) , m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0) , m_region_offset(0)
@ -56,8 +56,12 @@ void msx_slot_panasonic08_device::device_start()
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
save_item(NAME(m_control)); save_item(NAME(m_control));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_panasonic08_device::restore_banks), this)); restore_banks();
}
void msx_slot_panasonic08_device::device_post_load()
{
restore_banks(); restore_banks();
} }
@ -85,7 +89,7 @@ void msx_slot_panasonic08_device::restore_banks()
} }
READ8_MEMBER(msx_slot_panasonic08_device::read) uint8_t msx_slot_panasonic08_device::read(offs_t offset)
{ {
if (m_control & 0x04) if (m_control & 0x04)
{ {
@ -104,7 +108,7 @@ READ8_MEMBER(msx_slot_panasonic08_device::read)
} }
WRITE8_MEMBER(msx_slot_panasonic08_device::write) void msx_slot_panasonic08_device::write(offs_t offset, uint8_t data)
{ {
if ((offset & 0xc000) == 0x8000 || (offset & 0xc000) == 0x0000) if ((offset & 0xc000) == 0x8000 || (offset & 0xc000) == 0x0000)
{ {

View File

@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device) 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 class msx_slot_panasonic08_device : public device_t, public msx_internal_slot_interface
{ {
public: public:
@ -24,11 +20,12 @@ public:
// configuration helpers // configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;

View File

@ -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) 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) : device_t(mconfig, MSX_SLOT_RAM, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
{ {
} }
@ -18,7 +18,7 @@ void msx_slot_ram_device::device_start()
save_item(NAME(m_ram)); save_item(NAME(m_ram));
} }
READ8_MEMBER(msx_slot_ram_device::read) uint8_t msx_slot_ram_device::read(offs_t offset)
{ {
if ( offset >= m_start_address && offset < m_end_address ) if ( offset >= m_start_address && offset < m_end_address )
{ {
@ -27,7 +27,7 @@ READ8_MEMBER(msx_slot_ram_device::read)
return 0xFF; return 0xFF;
} }
WRITE8_MEMBER(msx_slot_ram_device::write) void msx_slot_ram_device::write(offs_t offset, uint8_t data)
{ {
if ( offset >= m_start_address && offset < m_end_address ) if ( offset >= m_start_address && offset < m_end_address )
{ {

View File

@ -5,23 +5,17 @@
#include "slot.h" #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, class msx_slot_ram_device : public device_t,
public msx_internal_slot_interface public msx_internal_slot_interface
{ {
public: public:
msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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; } void force_start_address(uint16_t start) { m_start_address = start; }
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;

View File

@ -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) 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) : device_t(mconfig, MSX_SLOT_RAM_MM, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_total_size(0) , m_total_size(0)
, m_bank_mask(0) , m_bank_mask(0)
, m_ramio_set_bits(0) , m_ramio_set_bits(0)
@ -40,12 +40,14 @@ void msx_slot_ram_mm_device::device_start()
save_item(NAME(m_ram)); save_item(NAME(m_ram));
save_item(NAME(m_bank_selected)); save_item(NAME(m_bank_selected));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_ram_mm_device::restore_banks), this));
// Install IO read/write handlers // Install IO read/write handlers
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); io_space().install_read_handler(0xFC, 0xFF, read8sm_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this));
space.install_read_handler(0xFC, 0xFF, read8_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));
space.install_write_handler(0xFC, 0xFF, write8_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this)); }
void msx_slot_ram_mm_device::device_post_load()
{
restore_banks();
} }
void msx_slot_ram_mm_device::restore_banks() void msx_slot_ram_mm_device::restore_banks()
@ -56,22 +58,22 @@ void msx_slot_ram_mm_device::restore_banks()
} }
} }
READ8_MEMBER(msx_slot_ram_mm_device::read) uint8_t msx_slot_ram_mm_device::read(offs_t offset)
{ {
return m_bank_base[offset >> 14][offset & 0x3fff]; return m_bank_base[offset >> 14][offset & 0x3fff];
} }
WRITE8_MEMBER(msx_slot_ram_mm_device::write) void msx_slot_ram_mm_device::write(offs_t offset, uint8_t data)
{ {
m_bank_base[offset >> 14][offset & 0x3fff] = data; m_bank_base[offset >> 14][offset & 0x3fff] = data;
} }
READ8_MEMBER(msx_slot_ram_mm_device::read_mapper_bank) uint8_t msx_slot_ram_mm_device::read_mapper_bank(offs_t offset)
{ {
return m_bank_selected[offset & 3] | m_ramio_set_bits; return m_bank_selected[offset & 3] | m_ramio_set_bits;
} }
WRITE8_MEMBER(msx_slot_ram_mm_device::write_mapper_bank) void msx_slot_ram_mm_device::write_mapper_bank(offs_t offset, uint8_t data)
{ {
offset &= 3; offset &= 3;

View File

@ -5,33 +5,27 @@
#include "slot.h" #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 class msx_slot_ram_mm_device : public device_t, public msx_internal_slot_interface
{ {
public: public:
msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_total_size(uint32_t total_size) { m_total_size = total_size; } msx_slot_ram_mm_device &set_total_size(uint32_t total_size) { m_total_size = total_size; return *this; }
void set_ramio_set_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; } msx_slot_ram_mm_device &set_ramio_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; return *this; }
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;
DECLARE_READ8_MEMBER(read_mapper_bank);
DECLARE_WRITE8_MEMBER(write_mapper_bank);
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_post_load() override;
void restore_banks(); void restore_banks();
private: 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; std::vector<uint8_t> m_ram;
uint32_t m_total_size; uint32_t m_total_size;
uint8_t m_bank_mask; uint8_t m_bank_mask;

View File

@ -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) 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) : device_t(mconfig, type, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_rom_region(*this, finder_base::DUMMY_TAG) , m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0) , m_region_offset(0)
, m_rom(nullptr) , m_rom(nullptr)
@ -35,7 +35,7 @@ void msx_slot_rom_device::device_start()
} }
READ8_MEMBER(msx_slot_rom_device::read) uint8_t msx_slot_rom_device::read(offs_t offset)
{ {
if (offset >= m_start_address && offset < m_end_address) if (offset >= m_start_address && offset < m_end_address)
{ {

View File

@ -7,10 +7,6 @@
#include "slot.h" #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, class msx_slot_rom_device : public device_t,
public msx_internal_slot_interface public msx_internal_slot_interface
{ {
@ -20,7 +16,7 @@ public:
// configuration helpers // configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
virtual DECLARE_READ8_MEMBER(read) override; virtual uint8_t read(offs_t offset) override;
protected: protected:
msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

View File

@ -13,9 +13,12 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
#include "emu.h" #include "emu.h"
#include "slot.h" #include "slot.h"
msx_internal_slot_interface::msx_internal_slot_interface() msx_internal_slot_interface::msx_internal_slot_interface(const machine_config &mconfig, device_t &device)
: m_start_address(0) : m_mem_space(device, finder_base::DUMMY_TAG, -1)
, m_io_space(device, finder_base::DUMMY_TAG, -1)
, m_start_address(0)
, m_size(0) , m_size(0)
, m_end_address(0) , m_end_address(0)
{ {
(void)mconfig;
} }

View File

@ -15,25 +15,29 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
#pragma once #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 class msx_internal_slot_interface
{ {
public: public:
msx_internal_slot_interface(); msx_internal_slot_interface(const machine_config &mconfig, device_t &device);
msx_internal_slot_interface(const msx_internal_slot_interface &device) = delete;
virtual ~msx_internal_slot_interface() { } virtual ~msx_internal_slot_interface() { }
// configuration helpers // 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_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; } void set_size(uint32_t size) { m_size = size; m_end_address = m_start_address + m_size; }
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) { }
address_space &memory_space() const { return *m_mem_space; }
address_space &io_space() const { return *m_io_space; }
protected: protected:
required_address_space m_mem_space;
required_address_space m_io_space;
uint32_t m_start_address; uint32_t m_start_address;
uint32_t m_size; uint32_t m_size;
uint32_t m_end_address; uint32_t m_end_address;

View File

@ -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) 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) : device_t(mconfig, MSX_SLOT_SONY08, tag, owner, clock)
, msx_internal_slot_interface() , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram") , m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG) , m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0) , m_region_offset(0)
@ -50,8 +50,12 @@ void msx_slot_sony08_device::device_start()
save_item(NAME(m_selected_bank)); save_item(NAME(m_selected_bank));
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_sony08_device::restore_banks), this)); restore_banks();
}
void msx_slot_sony08_device::device_post_load()
{
restore_banks(); restore_banks();
} }
@ -96,7 +100,7 @@ void msx_slot_sony08_device::restore_banks()
} }
READ8_MEMBER(msx_slot_sony08_device::read) uint8_t msx_slot_sony08_device::read(offs_t offset)
{ {
if (offset >= 0xc000) if (offset >= 0xc000)
{ {
@ -118,7 +122,7 @@ READ8_MEMBER(msx_slot_sony08_device::read)
} }
WRITE8_MEMBER(msx_slot_sony08_device::write) void msx_slot_sony08_device::write(offs_t offset, uint8_t data)
{ {
if (offset < 0x4000) if (offset < 0x4000)
{ {

View File

@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device) 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 class msx_slot_sony08_device : public device_t, public msx_internal_slot_interface
{ {
public: public:
@ -24,11 +20,12 @@ public:
// configuration helpers // configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; } void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
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;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override; virtual void device_add_mconfig(machine_config &config) override;

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@
#include "machine/i8255.h" #include "machine/i8255.h"
#include "machine/rp5c01.h" #include "machine/rp5c01.h"
#include "machine/buffer.h" #include "machine/buffer.h"
#include "machine/input_merger.h"
#include "bus/centronics/ctronics.h" #include "bus/centronics/ctronics.h"
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "sound/dac.h" #include "sound/dac.h"
@ -42,73 +43,6 @@
#define TC8521_TAG "rtc" #define TC8521_TAG "rtc"
#define MCFG_MSX_LAYOUT_ROM(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_ROM_ADD(_tag, _page, _numpages, _region, _offset) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_RAM(_tag, _prim, _sec, _page, _numpages) \
MCFG_MSX_SLOT_RAM_ADD(_tag, _page, _numpages) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_CARTRIDGE(_tag, _prim, _sec) \
MCFG_MSX_SLOT_CARTRIDGE_ADD(_tag, WRITELINE("mainirq", input_merger_device, in_w<1>)) \
install_slot_pages(_prim, _sec, 0, 4, device);
#define MCFG_MSX_LAYOUT_YAMAHA_EXPANSION(_tag, _prim, _sec, _default) \
MCFG_MSX_SLOT_YAMAHA_EXPANSION_ADD(_tag, WRITELINE("mainirq", input_merger_device, in_w<2>), _default) \
install_slot_pages(_prim, _sec, 0, 4, device);
#define MCFG_MSX_LAYOUT_RAM_MM(_tag, _prim, _sec, _total_size) \
MCFG_MSX_SLOT_RAM_MM_ADD(_tag, _total_size) \
install_slot_pages(_prim, _sec, 0, 4, device);
#define MCFG_MSX_RAMIO_SET_BITS(_ramio_set_bits) \
MCFG_MSX_SLOT_RAMM_SET_RAMIO_BITS(_ramio_set_bits)
#define MCFG_MSX_LAYOUT_DISK1(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK1_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
install_slot_pages(_prim, _sec, _page, _numpages + 1, device); /* Memory mapped FDC registers are also accessible through page 2 */
#define MCFG_MSX_LAYOUT_DISK2(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK2_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
install_slot_pages(_prim, _sec, _page, _numpages + 1, device); /* Memory mapped FDC registers are also accessible through page 2 */
#define MCFG_MSX_LAYOUT_DISK3(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK3_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_DISK4(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK4_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_DISK5(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK5_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1", "fdc:2", "fdc:3") \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_DISK6(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_DISK6_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_MUSIC(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_MUSIC_ADD(_tag, _page, _numpages, _region, _offset, "ym2413" ) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_BUNSETSU(_tag, _prim, _sec, _page, _numpages, _region, _offset, _bunsetsu_tag) \
MCFG_MSX_SLOT_BUNSETSU_ADD(_tag, _page, _numpages, _region, _offset, _bunsetsu_tag) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_FS4600(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_FS4600_ADD(_tag, _page, _numpages, _region, _offset) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_PANASONIC08(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_PANASONIC08_ADD(_tag, _page, _numpages, _region, _offset) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
#define MCFG_MSX_LAYOUT_SONY08(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
MCFG_MSX_SLOT_SONY08_ADD(_tag, _page, _numpages, _region, _offset) \
install_slot_pages(_prim, _sec, _page, _numpages, device);
class msx_state : public driver_device class msx_state : public driver_device
{ {
@ -128,6 +62,7 @@ public:
, m_leds(*this, "led%u", 1U) , m_leds(*this, "led%u", 1U)
, m_psg_b(0) , m_psg_b(0)
, m_kanji_latch(0) , m_kanji_latch(0)
, m_empty_slot(mconfig, *this)
, m_primary_slot(0) , m_primary_slot(0)
, m_port_c_old(0) , m_port_c_old(0)
, m_keylatch(0) , m_keylatch(0)
@ -146,6 +81,8 @@ public:
} }
m_mouse[0] = m_mouse[1] = 0; m_mouse[0] = m_mouse[1] = 0;
m_mouse_stat[0] = m_mouse_stat[1] = 0; m_mouse_stat[0] = m_mouse_stat[1] = 0;
m_empty_slot.set_memory_space(m_maincpu, AS_PROGRAM);
m_empty_slot.set_io_space(m_maincpu, AS_IO);
} }
void hc6(machine_config &config); void hc6(machine_config &config);
@ -295,7 +232,57 @@ protected:
void msx_2_35_dd_drive(machine_config &config); void msx_2_35_dd_drive(machine_config &config);
// static configuration helpers // static configuration helpers
void install_slot_pages(uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, device_t *device); void install_slot_pages(uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, msx_internal_slot_interface &device);
template <typename T, typename U>
auto &add_internal_slot(machine_config &config, T &&type, U &&tag, uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages)
{
auto &device(std::forward<T>(type)(config, std::forward<U>(tag), 0U));
device.set_memory_space(m_maincpu, AS_PROGRAM);
device.set_io_space(m_maincpu, AS_IO);
device.set_start_address(page * 0x4000);
device.set_size(numpages * 0x4000);
install_slot_pages(prim, sec, page, numpages, device);
return device;
}
template <typename T, typename U>
auto &add_internal_slot(machine_config &config, T &&type, U &&tag, uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, const char *region, uint32_t offset)
{
auto &device(std::forward<T>(type)(config, std::forward<U>(tag), 0U));
device.set_memory_space(m_maincpu, AS_PROGRAM);
device.set_io_space(m_maincpu, AS_IO);
device.set_start_address(page * 0x4000);
device.set_size(numpages * 0x4000);
device.set_rom_start(region, offset);
install_slot_pages(prim, sec, page, numpages, device);
return device;
}
template <typename T, typename U>
auto &add_internal_slot_mirrored(machine_config &config, T &&type, U &&tag, uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, const char *region, uint32_t offset)
{
// Memory mapped FDC registers are also accessible through page 2
auto &device(type(config, std::forward<U>(tag), 0U));
device.set_memory_space(m_maincpu, AS_PROGRAM);
device.set_io_space(m_maincpu, AS_IO);
device.set_start_address(page * 0x4000);
device.set_size(0x4000);
device.set_rom_start(region, offset);
install_slot_pages(prim, sec, page, numpages, device);
return device;
}
template <int N, typename T, typename U, typename V>
auto &add_cartridge_slot(machine_config &config, T &&type, U &&tag, uint8_t prim, uint8_t sec, V &&intf, const char *deft)
{
auto &device(type(config, std::forward<U>(tag), 0U));
device.set_memory_space(m_maincpu, AS_PROGRAM);
device.set_io_space(m_maincpu, AS_IO);
device.option_reset();
intf(device);
device.set_default_option(deft);
device.set_fixed(false);
device.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<N>));
install_slot_pages(prim, sec, 0, 4, device);
return device;
}
virtual void driver_start() override; virtual void driver_start() override;
virtual void machine_start() override; virtual void machine_start() override;

View File

@ -362,13 +362,11 @@ READ8_MEMBER( msx_state::msx_ppi_port_b_r )
* *
***********************************************************************/ ***********************************************************************/
void msx_state::install_slot_pages(uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, device_t *device) void msx_state::install_slot_pages(uint8_t prim, uint8_t sec, uint8_t page, uint8_t numpages, msx_internal_slot_interface &device)
{ {
msx_internal_slot_interface *internal_slot = dynamic_cast<msx_internal_slot_interface *>(device);
for ( int i = page; i < std::min(page + numpages, 4); i++ ) for ( int i = page; i < std::min(page + numpages, 4); i++ )
{ {
m_all_slots[prim][sec][i] = internal_slot; m_all_slots[prim][sec][i] = &device;
} }
if ( sec ) if ( sec )
{ {
@ -430,12 +428,12 @@ void msx_state::msx_memory_map_all ()
READ8_MEMBER( msx_state::msx_mem_read ) READ8_MEMBER( msx_state::msx_mem_read )
{ {
return m_current_page[offset >> 14]->read(space, offset); return m_current_page[offset >> 14]->read(offset);
} }
WRITE8_MEMBER( msx_state::msx_mem_write ) WRITE8_MEMBER( msx_state::msx_mem_write )
{ {
m_current_page[offset >> 14]->write(space, offset, data); m_current_page[offset >> 14]->write(offset, data);
} }
WRITE8_MEMBER( msx_state::msx_sec_slot_w ) WRITE8_MEMBER( msx_state::msx_sec_slot_w )
@ -450,7 +448,7 @@ WRITE8_MEMBER( msx_state::msx_sec_slot_w )
msx_memory_map_all (); msx_memory_map_all ();
} }
else else
m_current_page[3]->write(space, 0xffff, data); m_current_page[3]->write(0xffff, data);
} }
READ8_MEMBER( msx_state::msx_sec_slot_r ) READ8_MEMBER( msx_state::msx_sec_slot_r )
@ -463,7 +461,7 @@ READ8_MEMBER( msx_state::msx_sec_slot_r )
} }
else else
{ {
return m_current_page[3]->read(space, 0xffff); return m_current_page[3]->read(0xffff);
} }
} }