From 45fd5f3a3927573988f9f9da9e139c74169d33d4 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Mon, 11 Feb 2013 15:10:22 +0000 Subject: (MESS) c64: Fixed MACH 5 cartridge C128 mode. [Curt Coder] --- src/mess/machine/c64_mach5.c | 62 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 9 deletions(-) (limited to 'src/mess/machine/c64_mach5.c') diff --git a/src/mess/machine/c64_mach5.c b/src/mess/machine/c64_mach5.c index 851b1898002..ca978ceec63 100644 --- a/src/mess/machine/c64_mach5.c +++ b/src/mess/machine/c64_mach5.c @@ -18,6 +18,41 @@ const device_type C64_MACH5 = &device_creator; +//------------------------------------------------- +// INPUT_PORTS( c64_mach5 ) +//------------------------------------------------- + +INPUT_CHANGED_MEMBER( c64_mach5_cartridge_device::reset ) +{ + if (!newval) + { + device_reset(); + } + + m_slot->reset_w(newval ? CLEAR_LINE : ASSERT_LINE); +} + +static INPUT_PORTS_START( c64_mach5 ) + PORT_START("S1") + PORT_DIPNAME( 0x01, 0x00, "Mode" ) + PORT_DIPSETTING( 0x00, "C64" ) + PORT_DIPSETTING( 0x01, "C128" ) + + PORT_START("S2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, c64_mach5_cartridge_device, reset, 0) +INPUT_PORTS_END + + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor c64_mach5_cartridge_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( c64_mach5 ); +} + + //************************************************************************** // LIVE DEVICE @@ -29,7 +64,8 @@ const device_type C64_MACH5 = &device_creator; c64_mach5_cartridge_device::c64_mach5_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MACH5, "C64 MACH5 cartridge", tag, owner, clock), - device_c64_expansion_card_interface(mconfig, *this) + device_c64_expansion_card_interface(mconfig, *this), + m_s1(*this, "S1") { } @@ -49,7 +85,12 @@ void c64_mach5_cartridge_device::device_start() void c64_mach5_cartridge_device::device_reset() { - m_exrom = 0; + m_c128 = m_s1->read(); + + if (!m_c128) + { + m_exrom = 0; + } } @@ -59,7 +100,7 @@ void c64_mach5_cartridge_device::device_reset() UINT8 c64_mach5_cartridge_device::c64_cd_r(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2) { - if (!roml || !io1 || !io2) + if (!roml || !romh || !io1 || !io2) { data = m_roml[offset & 0x1fff]; } @@ -74,12 +115,15 @@ UINT8 c64_mach5_cartridge_device::c64_cd_r(address_space &space, offs_t offset, void c64_mach5_cartridge_device::c64_cd_w(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2) { - if (!io1) - { - m_exrom = 0; - } - else if (!io2) + if (!m_c128) { - m_exrom = 1; + if (!io1) + { + m_exrom = 0; + } + else if (!io2) + { + m_exrom = 1; + } } } -- cgit v1.2.3-70-g09d2