mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
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:
parent
15fc7aac93
commit
afce025856
@ -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()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x7f, 0x7f, write8_delegate(FUNC(msx_cart_arc_device::io_7f_w), this));
|
||||
space.install_read_handler(0x7f, 0x7f, read8_delegate(FUNC(msx_cart_arc_device::io_7f_r), this));
|
||||
io_space().install_write_handler(0x7f, 0x7f, write8smo_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));
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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;
|
||||
}
|
||||
|
@ -18,10 +18,7 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(io_7f_w);
|
||||
DECLARE_READ8_MEMBER(io_7f_r);
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@ -29,6 +26,9 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
void io_7f_w(uint8_t data);
|
||||
uint8_t io_7f_r();
|
||||
|
||||
uint8_t m_7f;
|
||||
};
|
||||
|
||||
|
@ -27,8 +27,12 @@ msx_cart_ascii8_device::msx_cart_ascii8_device(const machine_config &mconfig, co
|
||||
void msx_cart_ascii8_device::device_start()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -111,8 +115,12 @@ msx_cart_ascii16_device::msx_cart_ascii16_device(const machine_config &mconfig,
|
||||
void msx_cart_ascii16_device::device_start()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -461,8 +477,12 @@ msx_cart_msxwrite_device::msx_cart_msxwrite_device(const machine_config &mconfig
|
||||
void msx_cart_msxwrite_device::device_start()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -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
|
||||
// other locations also trigger banking.
|
||||
|
@ -22,13 +22,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -46,13 +47,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -70,13 +72,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -97,13 +100,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -124,13 +128,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x70, 0x73, write8_delegate(FUNC(z80pio_device::write_alt), m_bm012_pio.target()));
|
||||
space.install_read_handler(0x70, 0x73, read8_delegate(FUNC(z80pio_device::read_alt), m_bm012_pio.target()));
|
||||
io_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()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include "super_swangi.h"
|
||||
#include "yamaha.h"
|
||||
|
||||
#include "bus/msx_slot/cartridge.h"
|
||||
|
||||
|
||||
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)
|
||||
: 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);
|
||||
}
|
||||
|
||||
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
|
||||
// exactly the same as the regular 50 pin cartridge slots. The lowest 10 pins are simply
|
||||
|
@ -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
|
||||
|
||||
|
||||
class msx_slot_cartridge_device;
|
||||
|
||||
class msx_cart_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
template <class Object> void set_out_irq_cb(Object &&cb) { m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
|
||||
friend class msx_slot_cartridge_device;
|
||||
|
||||
public:
|
||||
// This is called after loading cartridge contents and allows the cartridge
|
||||
// implementation to perform some additional initialization based on the
|
||||
// cartridge contents.
|
||||
virtual void initialize_cartridge() { }
|
||||
virtual void interface_pre_start() override { assert(m_exp != nullptr); }
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) { return 0xff; }
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) { }
|
||||
virtual uint8_t read_cart(offs_t offset) { return 0xff; }
|
||||
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
|
||||
// Mainly used by the cartridge slot when loading images
|
||||
@ -43,13 +50,13 @@ public:
|
||||
protected:
|
||||
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_ram;
|
||||
std::vector<uint8_t> m_rom_vlm5030;
|
||||
std::vector<uint8_t> m_sram;
|
||||
devcb_write_line m_out_irq_cb;
|
||||
|
||||
private:
|
||||
msx_slot_cartridge_device *m_exp;
|
||||
};
|
||||
|
||||
|
||||
|
@ -21,8 +21,12 @@ msx_cart_crossblaim_device::msx_cart_crossblaim_device(const machine_config &mco
|
||||
void msx_cart_crossblaim_device::device_start()
|
||||
{
|
||||
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];
|
||||
|
||||
@ -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;
|
||||
if (m_selected_bank == 0)
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -272,12 +272,10 @@ void msx_cart_disk_type1_device::device_start()
|
||||
|
||||
save_item(NAME(m_side_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;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -429,8 +427,6 @@ void msx_cart_disk_type2_device::device_start()
|
||||
m_led.resolve();
|
||||
|
||||
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;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
case 0x7ff8:
|
||||
|
@ -45,8 +45,8 @@ protected:
|
||||
class msx_cart_disk_type1_device : public msx_cart_disk_wd_device
|
||||
{
|
||||
public:
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
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
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
output_finder<> m_led;
|
||||
uint8_t m_side_control;
|
||||
@ -69,8 +68,8 @@ protected:
|
||||
class msx_cart_disk_type2_device : public msx_cart_disk_wd_device
|
||||
{
|
||||
public:
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
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
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
output_finder<> m_led;
|
||||
uint8_t m_control;
|
||||
@ -139,8 +137,8 @@ protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,8 +18,8 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -46,11 +46,14 @@ void msx_cart_fmpac_device::device_start()
|
||||
save_item(NAME(m_1fff));
|
||||
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
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_cart_fmpac_device::write_ym2413), this));
|
||||
io_space().install_write_handler(0x7c, 0x7d, write8sm_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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -19,14 +19,13 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(write_ym2413);
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
@ -34,6 +33,8 @@ protected:
|
||||
void restore_banks();
|
||||
|
||||
private:
|
||||
void write_ym2413(offs_t offset, uint8_t data);
|
||||
|
||||
required_device<ym2413_device> m_ym2413;
|
||||
|
||||
uint8_t m_selected_bank;
|
||||
|
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,8 +18,8 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -19,8 +19,12 @@ msx_cart_halnote_device::msx_cart_halnote_device(const machine_config &mconfig,
|
||||
void msx_cart_halnote_device::device_start()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -19,8 +19,12 @@ msx_cart_hfox_device::msx_cart_hfox_device(const machine_config &mconfig, const
|
||||
void msx_cart_hfox_device::device_start()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -16,13 +16,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -30,8 +30,12 @@ void msx_cart_holy_quran_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_selected_bank));
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -35,8 +35,12 @@ msx_cart_konami_device::msx_cart_konami_device(const machine_config &mconfig, co
|
||||
void msx_cart_konami_device::device_start()
|
||||
{
|
||||
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];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(msx_cart_konami_device::write_cart)
|
||||
void msx_cart_konami_device::write_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
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_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 (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)
|
||||
{
|
||||
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()
|
||||
{
|
||||
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;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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 )
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -561,8 +577,12 @@ void msx_cart_konami_sound_device::device_start()
|
||||
save_item(NAME(m_scc_active));
|
||||
save_item(NAME(m_sccplus_active));
|
||||
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 )
|
||||
{
|
||||
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)
|
||||
{
|
||||
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()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x00, 0x00, write8_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target()));
|
||||
space.install_write_handler(0x20, 0x20, write8_delegate(FUNC(msx_cart_keyboard_master_device::io_20_w), this));
|
||||
space.install_read_handler(0x00, 0x00, read8_delegate(FUNC(msx_cart_keyboard_master_device::io_00_r), this));
|
||||
io_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));
|
||||
io_space().install_read_handler(0x00, 0x00, read8smo_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)
|
||||
{
|
||||
@ -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];
|
||||
}
|
||||
|
||||
|
||||
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->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;
|
||||
}
|
||||
|
@ -25,13 +25,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -49,13 +50,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
@ -78,13 +80,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
@ -103,8 +106,8 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@ -123,8 +126,8 @@ class msx_cart_konami_sound_device : public device_t, public msx_cart_interface
|
||||
public:
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
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
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
@ -186,14 +190,14 @@ protected:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
private:
|
||||
required_device<vlm5030_device> m_vlm5030;
|
||||
|
||||
DECLARE_READ8_MEMBER(read_vlm);
|
||||
DECLARE_WRITE8_MEMBER(io_20_w);
|
||||
DECLARE_READ8_MEMBER(io_00_r);
|
||||
uint8_t read_vlm(offs_t offset);
|
||||
void io_20_w(uint8_t data);
|
||||
uint8_t io_00_r();
|
||||
|
||||
void vlm_map(address_map &map);
|
||||
};
|
||||
|
@ -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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -112,11 +116,14 @@ void msx_cart_korean_90in1_device::device_start()
|
||||
{
|
||||
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
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x77, 0x77, write8_delegate(FUNC(msx_cart_korean_90in1_device::banking), this));
|
||||
io_space().install_write_handler(0x77, 0x77, write8smo_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)
|
||||
{
|
||||
@ -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;
|
||||
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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -20,13 +20,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
void restore_banks();
|
||||
@ -45,16 +46,17 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(banking);
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
void banking(uint8_t data);
|
||||
|
||||
void restore_banks();
|
||||
|
||||
uint8_t m_bank_mask;
|
||||
@ -70,13 +72,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
void restore_banks();
|
||||
|
@ -40,8 +40,12 @@ void msx_cart_majutsushi_device::device_add_mconfig(machine_config &config)
|
||||
void msx_cart_majutsushi_device::device_start()
|
||||
{
|
||||
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];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(msx_cart_majutsushi_device::write_cart)
|
||||
void msx_cart_majutsushi_device::write_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
switch (offset & 0xe000)
|
||||
{
|
||||
|
@ -19,13 +19,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
|
@ -67,13 +67,10 @@ const tiny_rom_entry *msx_cart_moonsound_device::device_rom_region() const
|
||||
|
||||
void msx_cart_moonsound_device::device_start()
|
||||
{
|
||||
m_out_irq_cb.resolve_safe();
|
||||
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
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));
|
||||
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));
|
||||
space.install_read_handler(0xc0, 0xc0, read8_delegate(FUNC(msx_cart_moonsound_device::read_c0), this));
|
||||
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));
|
||||
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));
|
||||
io_space().install_read_handler(0xc0, 0xc0, read8smo_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)
|
||||
{
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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
|
||||
READ8_MEMBER(msx_cart_moonsound_device::read_c0)
|
||||
uint8_t msx_cart_moonsound_device::read_c0()
|
||||
{
|
||||
LOG("moonsound: read 0xc0\n");
|
||||
return 0x00;
|
||||
|
@ -27,11 +27,11 @@ protected:
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(irq_w);
|
||||
DECLARE_WRITE8_MEMBER(write_ymf278b_fm);
|
||||
DECLARE_READ8_MEMBER(read_ymf278b_fm);
|
||||
DECLARE_WRITE8_MEMBER(write_ymf278b_pcm);
|
||||
DECLARE_READ8_MEMBER(read_ymf278b_pcm);
|
||||
DECLARE_READ8_MEMBER(read_c0);
|
||||
void write_ymf278b_fm(offs_t offset, uint8_t data);
|
||||
uint8_t read_ymf278b_fm(offs_t offset);
|
||||
void write_ymf278b_pcm(offs_t offset, uint8_t data);
|
||||
uint8_t read_ymf278b_pcm(offs_t offset);
|
||||
uint8_t read_c0();
|
||||
|
||||
void ymf278b_map(address_map &map);
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
|
||||
space.install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
|
||||
io_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()));
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -201,11 +200,10 @@ WRITE_LINE_MEMBER(msx_cart_msx_audio_nms1205_device::midi_in)
|
||||
void msx_cart_msx_audio_nms1205_device::device_start()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
|
||||
space.install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
|
||||
space.install_write_handler(0x00, 0x01, write8sm_delegate(FUNC(acia6850_device::write), m_acia6850.target()));
|
||||
space.install_read_handler(0x04, 0x05, read8sm_delegate(FUNC(acia6850_device::read), m_acia6850.target()));
|
||||
io_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()));
|
||||
io_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()));
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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()
|
||||
{
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0xc0, 0xc3, write8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::write_y8950), this));
|
||||
space.install_read_handler(0xc0, 0xc3, read8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::read_y8950), this));
|
||||
io_space().install_write_handler(0xc0, 0xc3, write8sm_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));
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
@ -44,7 +44,7 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
@ -71,8 +71,8 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
@ -82,12 +82,12 @@ protected:
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(write_y8950);
|
||||
DECLARE_READ8_MEMBER(read_y8950);
|
||||
|
||||
private:
|
||||
DECLARE_WRITE8_MEMBER(y8950_io_w);
|
||||
DECLARE_READ8_MEMBER(y8950_io_r);
|
||||
void write_y8950(offs_t offset, uint8_t data);
|
||||
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_ioport m_io_config;
|
||||
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return m_keyboard->read(space, offset);
|
||||
return m_keyboard->read();
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
@ -57,7 +57,7 @@ public:
|
||||
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override
|
||||
virtual uint8_t read() override
|
||||
{
|
||||
uint8_t result = 0xff;
|
||||
|
||||
@ -71,7 +71,7 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override
|
||||
virtual void write(uint8_t data) override
|
||||
{
|
||||
m_row = data;
|
||||
}
|
||||
@ -187,7 +187,7 @@ public:
|
||||
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override
|
||||
virtual uint8_t read() override
|
||||
{
|
||||
uint8_t result = 0xff;
|
||||
|
||||
@ -201,7 +201,7 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override
|
||||
virtual void write(uint8_t data) override
|
||||
{
|
||||
logerror("msx_nms1160::write %02x\n", data);
|
||||
m_row = data;
|
||||
|
@ -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
|
||||
{
|
||||
public:
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
|
||||
virtual DECLARE_WRITE8_MEMBER(write) { }
|
||||
virtual uint8_t read() { return 0xff; }
|
||||
virtual void write(uint8_t data) { }
|
||||
|
||||
protected:
|
||||
// construction/destruction
|
||||
@ -39,8 +38,8 @@ public:
|
||||
virtual void device_start() override;
|
||||
|
||||
// Physical connection simply consists of 8 input and 8 output lines split across 2 connectors
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
DECLARE_READ8_MEMBER(read);
|
||||
void write(uint8_t data);
|
||||
uint8_t read();
|
||||
|
||||
|
||||
protected:
|
||||
|
@ -18,8 +18,12 @@ msx_cart_msxdos2_device::msx_cart_msxdos2_device(const machine_config &mconfig,
|
||||
void msx_cart_msxdos2_device::device_start()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -84,7 +84,7 @@ void msx_cart_nomapper_device::initialize_cartridge()
|
||||
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 )
|
||||
{
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
private:
|
||||
uint32_t m_start_address;
|
||||
|
@ -21,8 +21,12 @@ msx_cart_rtype_device::msx_cart_rtype_device(const machine_config &mconfig, cons
|
||||
void msx_cart_rtype_device::device_start()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -18,13 +18,14 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
|
@ -19,11 +19,14 @@ void msx_cart_superloderunner_device::device_start()
|
||||
{
|
||||
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
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_PROGRAM);
|
||||
space.install_write_handler(0x0000, 0x0000, write8_delegate(FUNC(msx_cart_superloderunner_device::banking), this));
|
||||
memory_space().install_write_handler(0x0000, 0x0000, write8smo_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)
|
||||
{
|
||||
@ -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;
|
||||
restore_banks();
|
||||
|
@ -18,17 +18,18 @@ public:
|
||||
|
||||
virtual void initialize_cartridge() override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(banking);
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
private:
|
||||
void banking(uint8_t data);
|
||||
|
||||
uint8_t m_selected_bank;
|
||||
uint8_t *m_bank_base;
|
||||
};
|
||||
|
@ -131,16 +131,16 @@ void msx_cart_sfg_device::check_irq()
|
||||
{
|
||||
if (m_ym2151_irq_state != CLEAR_LINE || m_ym2148_irq_state != CLEAR_LINE)
|
||||
{
|
||||
m_out_irq_cb(ASSERT_LINE);
|
||||
irq_out(ASSERT_LINE);
|
||||
}
|
||||
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)
|
||||
{
|
||||
@ -155,7 +155,7 @@ READ8_MEMBER(msx_cart_sfg_device::read_cart)
|
||||
case 0x3ff6: // YM-2148 MIDI UART status register
|
||||
// ------x- - 1 = received a byte/receive buffer full?
|
||||
// -------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)
|
||||
@ -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)
|
||||
{
|
||||
@ -191,7 +191,7 @@ WRITE8_MEMBER(msx_cart_sfg_device::write_cart)
|
||||
// x------- - 1 = reset
|
||||
// -----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;
|
||||
|
||||
default:
|
||||
|
@ -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
|
||||
{
|
||||
public:
|
||||
virtual DECLARE_READ8_MEMBER(read_cart) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_cart) override;
|
||||
virtual uint8_t read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
msx_cart_sfg_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
@ -12,11 +12,6 @@
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_BUNSETSU_ADD(_tag, _startpage, _numpages, _region, _offset, _bunsetsu_region_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_BUNSETSU, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_bunsetsu_device &>(*device).set_bunsetsu_region_tag(_bunsetsu_region_tag);
|
||||
|
||||
class msx_slot_bunsetsu_device : public msx_slot_rom_device
|
||||
{
|
||||
public:
|
||||
@ -25,8 +20,8 @@ public:
|
||||
// configuration helpers
|
||||
void set_bunsetsu_region_tag(const char *tag) { m_bunsetsu_region.set_tag(tag); }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_reset() override;
|
||||
|
@ -43,7 +43,7 @@ msx_slot_cartridge_device::msx_slot_cartridge_device(const machine_config &mconf
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_image_interface(mconfig, *this)
|
||||
, device_slot_interface(mconfig, *this)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_irq_handler(*this)
|
||||
, 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_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();
|
||||
|
||||
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 )
|
||||
{
|
||||
return m_cartridge->read_cart(space, offset);
|
||||
return m_cartridge->read_cart(offset);
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(msx_slot_cartridge_device::write)
|
||||
void msx_slot_cartridge_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
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()
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_CARTRIDGE_ADD(_tag, _devcb) \
|
||||
MCFG_DEVICE_ADD(_tag, MSX_SLOT_CARTRIDGE, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(msx_cart, nullptr, false) \
|
||||
downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb);
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_YAMAHA_EXPANSION_ADD(_tag, _devcb, _default) \
|
||||
MCFG_DEVICE_ADD(_tag, MSX_SLOT_YAMAHA_EXPANSION, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(msx_yamaha_60pin, _default, false) \
|
||||
downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb);
|
||||
|
||||
|
||||
class msx_slot_cartridge_device : public device_t
|
||||
, public device_image_interface
|
||||
, public device_slot_interface
|
||||
@ -35,8 +23,8 @@ public:
|
||||
// construction/destruction
|
||||
msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// static configuration helpers
|
||||
template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
|
||||
// configuration helpers
|
||||
auto irq_handler() { return m_irq_handler.bind(); }
|
||||
|
||||
// image-level overrides
|
||||
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;
|
||||
|
||||
// msx_internal_slot-level overrides
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
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);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
|
||||
devcb_write_line m_irq_handler;
|
||||
|
@ -137,8 +137,6 @@ void msx_slot_disk1_device::device_start()
|
||||
|
||||
save_item(NAME(m_side_control));
|
||||
save_item(NAME(m_control));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk1_device::post_load), this));
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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 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)
|
||||
{
|
||||
@ -298,8 +296,6 @@ void msx_slot_disk2_device::device_start()
|
||||
msx_slot_wd_disk_device::device_start();
|
||||
|
||||
save_item(NAME(m_control));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk2_device::post_load), this));
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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 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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
case 0x7ffa: // Status Register
|
||||
@ -464,7 +464,7 @@ READ8_MEMBER(msx_slot_disk3_device::read)
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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 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));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk5_device::post_load), this));
|
||||
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0xd0, 0xd4, write8_delegate(FUNC(msx_slot_disk5_device::io_write), this));
|
||||
space.install_read_handler(0xd0, 0xd4, read8_delegate(FUNC(msx_slot_disk5_device::io_read), this));
|
||||
io_space().install_write_handler(0xd0, 0xd4, write8sm_delegate(FUNC(msx_slot_disk5_device::io_write), this));
|
||||
io_space().install_read_handler(0xd0, 0xd4, read8sm_delegate(FUNC(msx_slot_disk5_device::io_read), this));
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
@ -662,8 +663,6 @@ void msx_slot_disk6_device::device_start()
|
||||
save_item(NAME(m_side_motor));
|
||||
save_item(NAME(m_drive_select0));
|
||||
save_item(NAME(m_drive_select1));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this));
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
@ -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 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)
|
||||
{
|
||||
|
@ -26,51 +26,6 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_DISK5, msx_slot_disk5_device)
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_DISK6, msx_slot_disk6_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK1, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK2_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK2, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK3_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK3, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK4_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK4, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK5_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag, _floppy2_tag, _floppy3_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK5, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy2_tag(_floppy2_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy3_tag(_floppy3_tag);
|
||||
|
||||
#define MCFG_MSX_SLOT_DISK6_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK6, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
|
||||
downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
|
||||
|
||||
|
||||
class msx_slot_disk_device : public msx_slot_rom_device
|
||||
{
|
||||
public:
|
||||
@ -81,6 +36,21 @@ public:
|
||||
void set_floppy2_tag(const char *tag) { m_floppy2_tag = tag; }
|
||||
void set_floppy3_tag(const char *tag) { m_floppy3_tag = tag; }
|
||||
|
||||
void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag)
|
||||
{
|
||||
m_fdc_tag = fdc_tag;
|
||||
m_floppy0_tag = floppy0_tag;
|
||||
m_floppy1_tag = floppy1_tag;
|
||||
}
|
||||
void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag, const char *floppy2_tag, const char *floppy3_tag)
|
||||
{
|
||||
m_fdc_tag = fdc_tag;
|
||||
m_floppy0_tag = floppy0_tag;
|
||||
m_floppy1_tag = floppy1_tag;
|
||||
m_floppy2_tag = floppy2_tag;
|
||||
m_floppy3_tag = floppy3_tag;
|
||||
}
|
||||
|
||||
protected:
|
||||
msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
@ -128,14 +98,13 @@ class msx_slot_disk1_device : public msx_slot_wd_disk_device
|
||||
public:
|
||||
msx_slot_disk1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
uint8_t m_side_control;
|
||||
@ -151,14 +120,13 @@ class msx_slot_disk2_device : public msx_slot_wd_disk_device
|
||||
public:
|
||||
msx_slot_disk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
uint8_t m_control;
|
||||
@ -172,8 +140,8 @@ class msx_slot_disk3_device : public msx_slot_tc8566_disk_device
|
||||
public:
|
||||
msx_slot_disk3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
@ -182,8 +150,8 @@ class msx_slot_disk4_device : public msx_slot_tc8566_disk_device
|
||||
public:
|
||||
msx_slot_disk4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
@ -192,16 +160,15 @@ class msx_slot_disk5_device : public msx_slot_wd_disk_device
|
||||
public:
|
||||
msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_READ8_MEMBER(io_read);
|
||||
DECLARE_WRITE8_MEMBER(io_write);
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
uint8_t io_read(offs_t offset);
|
||||
void io_write(offs_t offset, uint8_t data);
|
||||
|
||||
uint8_t m_control;
|
||||
|
||||
void set_control(uint8_t control);
|
||||
@ -213,14 +180,13 @@ class msx_slot_disk6_device : public msx_slot_wd_disk_device
|
||||
public:
|
||||
msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
void post_load();
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
uint8_t m_side_motor;
|
||||
|
@ -13,7 +13,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device, "msx_slot_fs4600", "
|
||||
|
||||
msx_slot_fs4600_device::msx_slot_fs4600_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MSX_SLOT_FS4600, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_rom_region(*this, finder_base::DUMMY_TAG)
|
||||
, 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_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();
|
||||
}
|
||||
|
||||
@ -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))
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -12,10 +12,6 @@
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_FS4600_ADD(_tag, _startpage, _numpages, _region, _offset) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_FS4600, _startpage, _numpages) \
|
||||
downcast<msx_slot_fs4600_device &>(*device).set_rom_start(_region, _offset);
|
||||
|
||||
class msx_slot_fs4600_device : public device_t, public msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
@ -24,11 +20,12 @@ public:
|
||||
// configuration helpers
|
||||
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 DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
|
@ -32,18 +32,17 @@ void msx_slot_music_device::device_start()
|
||||
}
|
||||
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_slot_music_device::write_ym2413), this));
|
||||
io_space().install_write_handler(0x7c, 0x7d, write8sm_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);
|
||||
}
|
||||
|
@ -13,11 +13,6 @@
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_MUSIC, msx_slot_music_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_MUSIC_ADD(_tag, _startpage, _numpages, _region, _offset, _ym2413_tag) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_MUSIC, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
|
||||
downcast<msx_slot_music_device &>(*device).set_ym2413_tag(_ym2413_tag);
|
||||
|
||||
class msx_slot_music_device : public msx_slot_rom_device
|
||||
{
|
||||
public:
|
||||
@ -26,14 +21,14 @@ public:
|
||||
// configuration helpers
|
||||
void set_ym2413_tag(const char *tag) { m_ym2413_tag = tag; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(write_ym2413);
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
void write_ym2413(offs_t offset, uint8_t data);
|
||||
|
||||
ym2413_device *m_ym2413;
|
||||
const char *m_ym2413_tag;
|
||||
};
|
||||
|
@ -18,7 +18,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device, "msx_slot_
|
||||
|
||||
msx_slot_panasonic08_device::msx_slot_panasonic08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MSX_SLOT_PANASONIC08, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_rom_region(*this, finder_base::DUMMY_TAG)
|
||||
, 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_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();
|
||||
}
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -12,10 +12,6 @@
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_PANASONIC08_ADD(_tag, _startpage, _numpages, _region, _offset) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_PANASONIC08, _startpage, _numpages) \
|
||||
downcast<msx_slot_panasonic08_device &>(*device).set_rom_start(_region, _offset);
|
||||
|
||||
class msx_slot_panasonic08_device : public device_t, public msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
@ -24,11 +20,12 @@ public:
|
||||
// configuration helpers
|
||||
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 DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
|
@ -8,7 +8,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM, msx_slot_ram_device, "msx_slot_ram", "MSX Inter
|
||||
|
||||
msx_slot_ram_device::msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MSX_SLOT_RAM, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ void msx_slot_ram_device::device_start()
|
||||
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 )
|
||||
{
|
||||
@ -27,7 +27,7 @@ READ8_MEMBER(msx_slot_ram_device::read)
|
||||
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 )
|
||||
{
|
||||
|
@ -5,23 +5,17 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
#define MCFG_MSX_SLOT_RAM_ADD(_tag, _startpage, _numpages) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM, _startpage, _numpages)
|
||||
|
||||
#define MCFG_MSX_SLOT_RAM_8KB \
|
||||
downcast<msx_slot_ram_device &>(*device).force_start_address(0xe000);
|
||||
|
||||
|
||||
class msx_slot_ram_device : public device_t,
|
||||
public msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// Set to 0xe000 for 8KB RAM
|
||||
void force_start_address(uint16_t start) { m_start_address = start; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
|
@ -7,7 +7,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM_MM, msx_slot_ram_mm_device, "msx_slot_ram_mm", "
|
||||
|
||||
msx_slot_ram_mm_device::msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MSX_SLOT_RAM_MM, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_total_size(0)
|
||||
, m_bank_mask(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_bank_selected));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_ram_mm_device::restore_banks), this));
|
||||
|
||||
// Install IO read/write handlers
|
||||
address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
|
||||
space.install_read_handler(0xFC, 0xFF, read8_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this));
|
||||
space.install_write_handler(0xFC, 0xFF, write8_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this));
|
||||
io_space().install_read_handler(0xFC, 0xFF, read8sm_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this));
|
||||
io_space().install_write_handler(0xFC, 0xFF, write8sm_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this));
|
||||
}
|
||||
|
||||
void msx_slot_ram_mm_device::device_post_load()
|
||||
{
|
||||
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];
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
|
@ -5,33 +5,27 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
#define MCFG_MSX_SLOT_RAM_MM_ADD(_tag, _total_size) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM_MM, 0, 4) \
|
||||
downcast<msx_slot_ram_mm_device &>(*device).set_total_size(_total_size);
|
||||
|
||||
#define MCFG_MSX_SLOT_RAMM_SET_RAMIO_BITS(_ramio_set_bits) \
|
||||
downcast<msx_slot_ram_mm_device &>(*device).set_ramio_set_bits(_ramio_set_bits);
|
||||
|
||||
class msx_slot_ram_mm_device : public device_t, public msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
void set_total_size(uint32_t total_size) { m_total_size = total_size; }
|
||||
void set_ramio_set_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; }
|
||||
msx_slot_ram_mm_device &set_total_size(uint32_t total_size) { m_total_size = total_size; return *this; }
|
||||
msx_slot_ram_mm_device &set_ramio_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; return *this; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write) override;
|
||||
|
||||
DECLARE_READ8_MEMBER(read_mapper_bank);
|
||||
DECLARE_WRITE8_MEMBER(write_mapper_bank);
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
void restore_banks();
|
||||
|
||||
private:
|
||||
uint8_t read_mapper_bank(offs_t offset);
|
||||
void write_mapper_bank(offs_t offset, uint8_t data);
|
||||
|
||||
std::vector<uint8_t> m_ram;
|
||||
uint32_t m_total_size;
|
||||
uint8_t m_bank_mask;
|
||||
|
@ -15,7 +15,7 @@ msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, const ch
|
||||
|
||||
msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_rom_region(*this, finder_base::DUMMY_TAG)
|
||||
, m_region_offset(0)
|
||||
, m_rom(nullptr)
|
||||
@ -35,7 +35,7 @@ void msx_slot_rom_device::device_start()
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -7,10 +7,6 @@
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
#define MCFG_MSX_SLOT_ROM_ADD(_tag, _startpage, _numpages, _region, _offset) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_ROM, _startpage, _numpages) \
|
||||
downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset);
|
||||
|
||||
class msx_slot_rom_device : public device_t,
|
||||
public msx_internal_slot_interface
|
||||
{
|
||||
@ -20,7 +16,7 @@ public:
|
||||
// configuration helpers
|
||||
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
|
||||
protected:
|
||||
msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
@ -13,9 +13,12 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
|
||||
#include "emu.h"
|
||||
#include "slot.h"
|
||||
|
||||
msx_internal_slot_interface::msx_internal_slot_interface()
|
||||
: m_start_address(0)
|
||||
msx_internal_slot_interface::msx_internal_slot_interface(const machine_config &mconfig, device_t &device)
|
||||
: m_mem_space(device, finder_base::DUMMY_TAG, -1)
|
||||
, m_io_space(device, finder_base::DUMMY_TAG, -1)
|
||||
, m_start_address(0)
|
||||
, m_size(0)
|
||||
, m_end_address(0)
|
||||
{
|
||||
(void)mconfig;
|
||||
}
|
||||
|
@ -15,25 +15,29 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define MCFG_MSX_INTERNAL_SLOT_ADD(_tag, _type, _startpage, _numpages) \
|
||||
MCFG_DEVICE_ADD(_tag, _type, 0) \
|
||||
dynamic_cast<msx_internal_slot_interface &>(*device).set_start_address(_startpage * 0x4000); \
|
||||
dynamic_cast<msx_internal_slot_interface &>(*device).set_size(_numpages * 0x4000);
|
||||
|
||||
class msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
msx_internal_slot_interface();
|
||||
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() { }
|
||||
|
||||
// configuration helpers
|
||||
template <typename T> void set_memory_space(T &&tag, int spacenum) { m_mem_space.set_tag(std::forward<T>(tag), spacenum); }
|
||||
template <typename T> void set_io_space(T &&tag, int spacenum) { m_io_space.set_tag(std::forward<T>(tag), spacenum); }
|
||||
void set_start_address(uint32_t start_address) { m_start_address = start_address; m_end_address = m_start_address + m_size; }
|
||||
void set_size(uint32_t size) { m_size = size; m_end_address = m_start_address + m_size; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read) { return 0xFF; }
|
||||
virtual DECLARE_WRITE8_MEMBER(write) { }
|
||||
virtual uint8_t read(offs_t offset) { return 0xFF; }
|
||||
virtual void write(offs_t offset, uint8_t data) { }
|
||||
|
||||
address_space &memory_space() const { return *m_mem_space; }
|
||||
address_space &io_space() const { return *m_io_space; }
|
||||
|
||||
protected:
|
||||
required_address_space m_mem_space;
|
||||
required_address_space m_io_space;
|
||||
|
||||
uint32_t m_start_address;
|
||||
uint32_t m_size;
|
||||
uint32_t m_end_address;
|
||||
|
@ -15,7 +15,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device, "msx_slot_sony08", "
|
||||
|
||||
msx_slot_sony08_device::msx_slot_sony08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MSX_SLOT_SONY08, tag, owner, clock)
|
||||
, msx_internal_slot_interface()
|
||||
, msx_internal_slot_interface(mconfig, *this)
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_rom_region(*this, finder_base::DUMMY_TAG)
|
||||
, m_region_offset(0)
|
||||
@ -50,8 +50,12 @@ void msx_slot_sony08_device::device_start()
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -12,10 +12,6 @@
|
||||
DECLARE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device)
|
||||
|
||||
|
||||
#define MCFG_MSX_SLOT_SONY08_ADD(_tag, _startpage, _numpages, _region, _offset) \
|
||||
MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_SONY08, _startpage, _numpages) \
|
||||
downcast<msx_slot_sony08_device &>(*device).set_rom_start(_region, _offset);
|
||||
|
||||
class msx_slot_sony08_device : public device_t, public msx_internal_slot_interface
|
||||
{
|
||||
public:
|
||||
@ -24,11 +20,12 @@ public:
|
||||
// configuration helpers
|
||||
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 DECLARE_WRITE8_MEMBER(write) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,7 @@
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/rp5c01.h"
|
||||
#include "machine/buffer.h"
|
||||
#include "machine/input_merger.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/dac.h"
|
||||
@ -42,73 +43,6 @@
|
||||
|
||||
#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
|
||||
{
|
||||
@ -128,6 +62,7 @@ public:
|
||||
, m_leds(*this, "led%u", 1U)
|
||||
, m_psg_b(0)
|
||||
, m_kanji_latch(0)
|
||||
, m_empty_slot(mconfig, *this)
|
||||
, m_primary_slot(0)
|
||||
, m_port_c_old(0)
|
||||
, m_keylatch(0)
|
||||
@ -146,6 +81,8 @@ public:
|
||||
}
|
||||
m_mouse[0] = m_mouse[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);
|
||||
@ -295,7 +232,57 @@ protected:
|
||||
void msx_2_35_dd_drive(machine_config &config);
|
||||
|
||||
// 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 machine_start() override;
|
||||
|
@ -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++ )
|
||||
{
|
||||
m_all_slots[prim][sec][i] = internal_slot;
|
||||
m_all_slots[prim][sec][i] = &device;
|
||||
}
|
||||
if ( sec )
|
||||
{
|
||||
@ -430,12 +428,12 @@ void msx_state::msx_memory_map_all ()
|
||||
|
||||
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 )
|
||||
{
|
||||
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 )
|
||||
@ -450,7 +448,7 @@ WRITE8_MEMBER( msx_state::msx_sec_slot_w )
|
||||
msx_memory_map_all ();
|
||||
}
|
||||
else
|
||||
m_current_page[3]->write(space, 0xffff, data);
|
||||
m_current_page[3]->write(0xffff, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER( msx_state::msx_sec_slot_r )
|
||||
@ -463,7 +461,7 @@ READ8_MEMBER( msx_state::msx_sec_slot_r )
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_current_page[3]->read(space, 0xffff);
|
||||
return m_current_page[3]->read(0xffff);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user