diff options
Diffstat (limited to 'src/mame/drivers/svi318.cpp')
-rw-r--r-- | src/mame/drivers/svi318.cpp | 95 |
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) |