summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/svi318.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/svi318.cpp')
-rw-r--r--src/mame/drivers/svi318.cpp95
1 files changed, 39 insertions, 56 deletions
diff --git a/src/mame/drivers/svi318.cpp b/src/mame/drivers/svi318.cpp
index bcca2074c81..3a7d60fb647 100644
--- a/src/mame/drivers/svi318.cpp
+++ b/src/mame/drivers/svi318.cpp
@@ -63,6 +63,7 @@ public:
m_expander(*this, "exp"),
m_keyboard(*this, "KEY.%u", 0),
m_buttons(*this, "BUTTONS"),
+ m_led_caps_lock(*this, "led_caps_lock"),
m_intvdp(0), m_intexp(0),
m_romdis(1), m_ramdis(1),
m_cart(1), m_bk21(1),
@@ -78,14 +79,14 @@ public:
void svi328p(machine_config &config);
private:
- DECLARE_READ8_MEMBER( ppi_port_a_r );
- DECLARE_READ8_MEMBER( ppi_port_b_r );
- DECLARE_WRITE8_MEMBER( ppi_port_c_w );
- DECLARE_WRITE8_MEMBER( bank_w );
+ uint8_t ppi_port_a_r();
+ uint8_t ppi_port_b_r();
+ void ppi_port_c_w(uint8_t data);
+ void bank_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( intvdp_w );
- READ8_MEMBER( mreq_r );
- WRITE8_MEMBER( mreq_w );
+ uint8_t mreq_r(offs_t offset);
+ void mreq_w(offs_t offset, uint8_t data);
// from expander bus
DECLARE_WRITE_LINE_MEMBER( intexp_w );
@@ -93,9 +94,6 @@ private:
DECLARE_WRITE_LINE_MEMBER( ramdis_w );
DECLARE_WRITE_LINE_MEMBER( ctrl1_w );
- DECLARE_READ8_MEMBER( excs_r );
- DECLARE_WRITE8_MEMBER( excs_w );
-
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
void svi3x8_io(address_map &map);
@@ -116,6 +114,7 @@ private:
required_device<svi_expander_device> m_expander;
required_ioport_array<16> m_keyboard;
required_ioport m_buttons;
+ output_finder<> m_led_caps_lock;
int m_intvdp;
int m_intexp;
@@ -151,10 +150,8 @@ void svi3x8_state::svi3x8_io_bank(address_map &map)
{
map(0x000, 0x0ff).rw(m_expander, FUNC(svi_expander_device::iorq_r), FUNC(svi_expander_device::iorq_w));
map(0x100, 0x17f).rw(m_expander, FUNC(svi_expander_device::iorq_r), FUNC(svi_expander_device::iorq_w));
- map(0x180, 0x180).mirror(0x22).w(m_vdp, FUNC(tms9928a_device::vram_w));
- map(0x181, 0x181).mirror(0x22).w(m_vdp, FUNC(tms9928a_device::register_w));
- map(0x184, 0x184).mirror(0x22).r(m_vdp, FUNC(tms9928a_device::vram_r));
- map(0x185, 0x185).mirror(0x22).r(m_vdp, FUNC(tms9928a_device::register_r));
+ map(0x180, 0x181).mirror(0x22).w(m_vdp, FUNC(tms9928a_device::write));
+ map(0x184, 0x185).mirror(0x22).r(m_vdp, FUNC(tms9928a_device::read));
map(0x188, 0x188).mirror(0x23).w("psg", FUNC(ay8910_device::address_w));
map(0x18c, 0x18c).mirror(0x23).w("psg", FUNC(ay8910_device::data_w));
map(0x190, 0x190).mirror(0x23).r("psg", FUNC(ay8910_device::data_r));
@@ -342,6 +339,8 @@ WRITE_LINE_MEMBER( svi3x8_state::intvdp_w )
void svi3x8_state::machine_start()
{
+ m_led_caps_lock.resolve();
+
// register for save states
save_item(NAME(m_intvdp));
save_item(NAME(m_intexp));
@@ -371,16 +370,16 @@ void svi3x8_state::machine_reset()
ctrl1_w(1);
}
-READ8_MEMBER( svi3x8_state::mreq_r )
+uint8_t svi3x8_state::mreq_r(offs_t offset)
{
// ctrl1 inverts a15
if (m_ctrl1 == 0)
offset ^= 0x8000;
if (CCS1 || CCS2 || CCS3 || CCS4)
- return m_cart_rom->read_rom(space, offset);
+ return m_cart_rom->read_rom(offset);
- uint8_t data = m_expander->mreq_r(space, offset);
+ uint8_t data = m_expander->mreq_r(offset);
if (ROMCS)
data = m_basic->as_u8(offset);
@@ -394,7 +393,7 @@ READ8_MEMBER( svi3x8_state::mreq_r )
return data;
}
-WRITE8_MEMBER( svi3x8_state::mreq_w )
+void svi3x8_state::mreq_w(offs_t offset, uint8_t data)
{
// ctrl1 inverts a15
if (m_ctrl1 == 0)
@@ -403,7 +402,7 @@ WRITE8_MEMBER( svi3x8_state::mreq_w )
if (CCS1 || CCS2 || CCS3 || CCS4)
return;
- m_expander->mreq_w(space, offset, data);
+ m_expander->mreq_w(offset, data);
if (m_bk21 == 0 && IS_SVI328 && offset < 0x8000)
m_ram->write(offset, data);
@@ -412,7 +411,7 @@ WRITE8_MEMBER( svi3x8_state::mreq_w )
m_ram->write(IS_SVI328 ? offset : offset - 0xc000, data);
}
-WRITE8_MEMBER( svi3x8_state::bank_w )
+void svi3x8_state::bank_w(uint8_t data)
{
logerror("bank_w: %02x\n", data);
@@ -427,10 +426,10 @@ WRITE8_MEMBER( svi3x8_state::bank_w )
m_rom2 = BIT(data, 6);
m_rom3 = BIT(data, 7);
- output().set_value("led_caps_lock", BIT(data, 5));
+ m_led_caps_lock = BIT(data, 5);
}
-READ8_MEMBER( svi3x8_state::ppi_port_a_r )
+uint8_t svi3x8_state::ppi_port_a_r()
{
uint8_t data = 0x3f;
@@ -446,13 +445,13 @@ READ8_MEMBER( svi3x8_state::ppi_port_a_r )
return data;
}
-READ8_MEMBER( svi3x8_state::ppi_port_b_r )
+uint8_t svi3x8_state::ppi_port_b_r()
{
// bit 0-7, keyboard data
return m_keyboard[m_keyboard_row]->read();
}
-WRITE8_MEMBER( svi3x8_state::ppi_port_c_w )
+void svi3x8_state::ppi_port_c_w(uint8_t data)
{
// bit 0-3, keyboard row
m_keyboard_row = data & 0x0f;
@@ -494,22 +493,6 @@ WRITE_LINE_MEMBER( svi3x8_state::ctrl1_w )
m_io->set_bank(m_ctrl1);
}
-READ8_MEMBER( svi3x8_state::excs_r )
-{
- if (offset & 1)
- return m_vdp->register_read();
- else
- return m_vdp->vram_read();
-}
-
-WRITE8_MEMBER( svi3x8_state::excs_w )
-{
- if (offset & 1)
- m_vdp->register_write(data);
- else
- m_vdp->vram_write(data);
-}
-
//**************************************************************************
// CARTRIDGE
@@ -532,9 +515,9 @@ DEVICE_IMAGE_LOAD_MEMBER( svi3x8_state, cartridge )
MACHINE_CONFIG_START(svi3x8_state::svi318)
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(10'738'635) / 3)
- MCFG_DEVICE_PROGRAM_MAP(svi3x8_mem)
- MCFG_DEVICE_IO_MAP(svi3x8_io)
+ Z80(config, m_maincpu, XTAL(10'738'635) / 3);
+ m_maincpu->set_addrmap(AS_PROGRAM, &svi3x8_state::svi3x8_mem);
+ m_maincpu->set_addrmap(AS_IO, &svi3x8_state::svi3x8_io);
RAM(config, m_ram).set_default_size("16K");
@@ -548,33 +531,33 @@ MACHINE_CONFIG_START(svi3x8_state::svi318)
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.25);
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25);
+ WAVE(config, "wave", m_cassette).add_route(ALL_OUTPUTS, "mono", 0.25);
ay8910_device &psg(AY8910(config, "psg", XTAL(10'738'635) / 6));
psg.port_a_read_callback().set_ioport("JOY");
psg.port_b_write_callback().set(FUNC(svi3x8_state::bank_w));
psg.add_route(ALL_OUTPUTS, "mono", 0.75);
// cassette
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(svi_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED)
- MCFG_CASSETTE_INTERFACE("svi318_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list", "svi318_cass")
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(svi_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("svi318_cass");
+ SOFTWARE_LIST(config, "cass_list").set_original("svi318_cass");
// cartridge slot
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "svi318_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_LOAD(svi3x8_state, cartridge)
- MCFG_SOFTWARE_LIST_ADD("cart_list", "svi318_cart")
+ SOFTWARE_LIST(config, "cart_list").set_original("svi318_cart");
// expander bus
- MCFG_SVI_EXPANDER_BUS_ADD("exp")
- MCFG_SVI_EXPANDER_INT_HANDLER(WRITELINE(*this, svi3x8_state, intexp_w))
- MCFG_SVI_EXPANDER_ROMDIS_HANDLER(WRITELINE(*this, svi3x8_state, romdis_w))
- MCFG_SVI_EXPANDER_RAMDIS_HANDLER(WRITELINE(*this, svi3x8_state, ramdis_w))
- MCFG_SVI_EXPANDER_CTRL1_HANDLER(WRITELINE(*this, svi3x8_state, ctrl1_w))
- MCFG_SVI_EXPANDER_EXCSR_HANDLER(READ8(*this, svi3x8_state, excs_r))
- MCFG_SVI_EXPANDER_EXCSW_HANDLER(WRITE8(*this, svi3x8_state, excs_w))
+ SVI_EXPANDER(config, m_expander, svi_expander_modules);
+ m_expander->int_handler().set(FUNC(svi3x8_state::intexp_w));
+ m_expander->romdis_handler().set(FUNC(svi3x8_state::romdis_w));
+ m_expander->ramdis_handler().set(FUNC(svi3x8_state::ramdis_w));
+ m_expander->ctrl1_handler().set(FUNC(svi3x8_state::ctrl1_w));
+ m_expander->excsr_handler().set(m_vdp, FUNC(tms9928a_device::read));
+ m_expander->excsw_handler().set(m_vdp, FUNC(tms9928a_device::write));
MACHINE_CONFIG_END
void svi3x8_state::svi318p(machine_config &config)