summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/s100/mm65k16s.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/s100/mm65k16s.c')
-rw-r--r--src/devices/bus/s100/mm65k16s.c267
1 files changed, 267 insertions, 0 deletions
diff --git a/src/devices/bus/s100/mm65k16s.c b/src/devices/bus/s100/mm65k16s.c
new file mode 100644
index 00000000000..22240dd789a
--- /dev/null
+++ b/src/devices/bus/s100/mm65k16s.c
@@ -0,0 +1,267 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Morrow Designs MM65K16S memory board emulation
+
+**********************************************************************/
+
+#include "mm65k16s.h"
+
+
+
+//**************************************************************************
+// MACROS/CONSTANTS
+//**************************************************************************
+
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type S100_MM65K16S = &device_creator<s100_mm65k16s_device>;
+
+
+//-------------------------------------------------
+// ROM( mm65k16s )
+//-------------------------------------------------
+
+ROM_START( mm65k16s )
+ ROM_REGION( 0x10000, "proms", 0 )
+ ROM_LOAD( "82s100.6c", 0x0000, 0x10000, NO_DUMP )
+
+ ROM_REGION( 0x10, "plds", 0 )
+ ROM_LOAD( "pal14l4.6d", 0x0000, 0x10, NO_DUMP )
+ ROM_LOAD( "pal16l2.16d", 0x0000, 0x10, NO_DUMP )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *s100_mm65k16s_device::device_rom_region() const
+{
+ return ROM_NAME( mm65k16s );
+}
+
+
+//-------------------------------------------------
+// INPUT_PORTS( mm65k16s )
+//-------------------------------------------------
+
+static INPUT_PORTS_START( mm65k16s )
+ PORT_START("J6754")
+ PORT_DIPNAME( 0x01, 0x00, "Bank A Lower 32K" )
+ PORT_DIPSETTING( 0x01, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+ PORT_DIPNAME( 0x02, 0x00, "Bank A Upper 32K" )
+ PORT_DIPSETTING( 0x02, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+ PORT_DIPNAME( 0x04, 0x00, "Bank B Lower 32K" )
+ PORT_DIPSETTING( 0x04, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+ PORT_DIPNAME( 0x08, 0x00, "Bank B Upper 32K" )
+ PORT_DIPSETTING( 0x08, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+
+ PORT_START("J2")
+ PORT_DIPNAME( 0x01, 0x00, "Bank A Recognizes Phantom" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("J1")
+ PORT_DIPNAME( 0x01, 0x00, "Bank B Recognizes Phantom" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("5D")
+ PORT_DIPNAME( 0x03, 0x00, "First 16K Memory Addressing" ) PORT_DIPLOCATION("5D:1,2")
+ PORT_DIPSETTING( 0x00, "Block 0 (0000H-3FFFH)" )
+ PORT_DIPSETTING( 0x02, "Block 1 (4000H-7FFFH)" )
+ PORT_DIPSETTING( 0x01, "Block 2 (8000H-BFFFH)" )
+ PORT_DIPSETTING( 0x03, "Block 3 (C000H-FFFFH" )
+ PORT_DIPNAME( 0x0c, 0x08, "Second 16K Memory Addressing" ) PORT_DIPLOCATION("5D:3,4")
+ PORT_DIPSETTING( 0x00, "Block 0 (0000H-3FFFH)" )
+ PORT_DIPSETTING( 0x08, "Block 1 (4000H-7FFFH)" )
+ PORT_DIPSETTING( 0x04, "Block 2 (8000H-BFFFH)" )
+ PORT_DIPSETTING( 0x0c, "Block 3 (C000H-FFFFH" )
+ PORT_DIPNAME( 0x30, 0x10, "Third 16K Memory Addressing" ) PORT_DIPLOCATION("5D:5,6")
+ PORT_DIPSETTING( 0x00, "Block 0 (0000H-3FFFH)" )
+ PORT_DIPSETTING( 0x20, "Block 1 (4000H-7FFFH)" )
+ PORT_DIPSETTING( 0x10, "Block 2 (8000H-BFFFH)" )
+ PORT_DIPSETTING( 0x30, "Block 3 (C000H-FFFFH" )
+ PORT_DIPNAME( 0xc0, 0xc0, "Fourth 16K Memory Addressing" ) PORT_DIPLOCATION("5D:7,8")
+ PORT_DIPSETTING( 0x00, "Block 0 (0000H-3FFFH)" )
+ PORT_DIPSETTING( 0x80, "Block 1 (4000H-7FFFH)" )
+ PORT_DIPSETTING( 0x40, "Block 2 (8000H-BFFFH)" )
+ PORT_DIPSETTING( 0xc0, "Block 3 (C000H-FFFFH" )
+
+ PORT_START("PAGE07")
+ PORT_DIPNAME( 0x0f, 0x00, "2K Segment Disable" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, "Page 0" )
+ PORT_DIPSETTING( 0x01, "Page 1" )
+ PORT_DIPSETTING( 0x02, "Page 2" )
+ PORT_DIPSETTING( 0x03, "Page 3" )
+ PORT_DIPSETTING( 0x04, "Page 4" )
+ PORT_DIPSETTING( 0x05, "Page 5" )
+ PORT_DIPSETTING( 0x06, "Page 6" )
+ PORT_DIPSETTING( 0x07, "Page 7" )
+
+ PORT_START("J3")
+ PORT_DIPNAME( 0x01, 0x01, "Addressing Mode" )
+ PORT_DIPSETTING( 0x01, "Extended Addressing" )
+ PORT_DIPSETTING( 0x00, "Bank Select" )
+
+ PORT_START("1C")
+ PORT_DIPNAME( 0xff, 0x00, "Extended Addressing" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x00, "000000H" )
+ // ...
+ PORT_DIPSETTING( 0xff, "FF0000H" )
+ PORT_DIPNAME( 0xff, 0x40, "Bank Select Port" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "00H" )
+ // ...
+ PORT_DIPSETTING( 0x40, "40H" )
+ // ...
+ PORT_DIPSETTING( 0xff, "FFH" )
+
+ PORT_START("A0A7")
+ PORT_DIPNAME( 0x01, 0x01, "Bank Select Data Bit A0" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x01, "1" )
+ PORT_DIPNAME( 0x02, 0x00, "Bank Select Data Bit A1" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x02, "1" )
+ PORT_DIPNAME( 0x04, 0x00, "Bank Select Data Bit A2" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x04, "1" )
+ PORT_DIPNAME( 0x08, 0x00, "Bank Select Data Bit A3" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x08, "1" )
+ PORT_DIPNAME( 0x10, 0x00, "Bank Select Data Bit A4" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x10, "1" )
+ PORT_DIPNAME( 0x20, 0x00, "Bank Select Data Bit A5" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x20, "1" )
+ PORT_DIPNAME( 0x40, 0x00, "Bank Select Data Bit A6" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x40, "1" )
+ PORT_DIPNAME( 0x80, 0x00, "Bank Select Data Bit A7" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x80, "1" )
+
+ PORT_START("0B7B")
+ PORT_DIPNAME( 0x01, 0x00, "Bank Select Data Bit 0B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x01, "1" )
+ PORT_DIPNAME( 0x02, 0x00, "Bank Select Data Bit 1B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x02, "1" )
+ PORT_DIPNAME( 0x04, 0x00, "Bank Select Data Bit 2B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x04, "1" )
+ PORT_DIPNAME( 0x08, 0x00, "Bank Select Data Bit 3B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x08, "1" )
+ PORT_DIPNAME( 0x10, 0x00, "Bank Select Data Bit 4B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x10, "1" )
+ PORT_DIPNAME( 0x20, 0x00, "Bank Select Data Bit 5B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x20, "1" )
+ PORT_DIPNAME( 0x40, 0x00, "Bank Select Data Bit 6B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x40, "1" )
+ PORT_DIPNAME( 0x80, 0x00, "Bank Select Data Bit 7B" ) PORT_CONDITION("J3", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x80, "1" )
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor s100_mm65k16s_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( mm65k16s );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// s100_mm65k16s_device - constructor
+//-------------------------------------------------
+
+s100_mm65k16s_device::s100_mm65k16s_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, S100_MM65K16S, "MM65K16S", tag, owner, clock, "mm65k16s", __FILE__),
+ device_s100_card_interface(mconfig, *this),
+ m_ram(*this, "ram")
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void s100_mm65k16s_device::device_start()
+{
+ m_ram.allocate(0x10000);
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void s100_mm65k16s_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// s100_smemr_r - memory read
+//-------------------------------------------------
+
+UINT8 s100_mm65k16s_device::s100_smemr_r(address_space &space, offs_t offset)
+{
+ UINT8 data = 0;
+
+ if (offset < 0xf800)
+ {
+ data = m_ram[offset];
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// s100_mwrt_w - memory write
+//-------------------------------------------------
+
+void s100_mm65k16s_device::s100_mwrt_w(address_space &space, offs_t offset, UINT8 data)
+{
+ if (offset < 0xf800)
+ {
+ m_ram[offset] = data;
+ }
+}
+
+
+//-------------------------------------------------
+// s100_phantom_w - phantom
+//-------------------------------------------------
+
+void s100_mm65k16s_device::s100_phantom_w(int state)
+{
+}