diff options
author | 2013-02-11 15:10:22 +0000 | |
---|---|---|
committer | 2013-02-11 15:10:22 +0000 | |
commit | 45fd5f3a3927573988f9f9da9e139c74169d33d4 (patch) | |
tree | 2bec30fa3345e8b530c3bae0d4cf0f59c9977818 /src/mess/machine/c64_mach5.c | |
parent | af9a9b09183e9292cba11c13be6c2e502af2295a (diff) |
(MESS) c64: Fixed MACH 5 cartridge C128 mode. [Curt Coder]
Diffstat (limited to 'src/mess/machine/c64_mach5.c')
-rw-r--r-- | src/mess/machine/c64_mach5.c | 62 |
1 files changed, 53 insertions, 9 deletions
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<c64_mach5_cartridge_device>; +//------------------------------------------------- +// 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::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; + } } } |