summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/intellec4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/intellec4.cpp')
-rw-r--r--src/mame/drivers/intellec4.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/mame/drivers/intellec4.cpp b/src/mame/drivers/intellec4.cpp
new file mode 100644
index 00000000000..2ad0102ec4b
--- /dev/null
+++ b/src/mame/drivers/intellec4.cpp
@@ -0,0 +1,94 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+/*
+ Intel INTELLEC® 4/MOD 40
+
+ Set the terminal for 110 1/8/N/2 to talk to the monitor.
+ It only likes to see uppercase letters, and gets annoyed at lowercase.
+ */
+#include "emu.h"
+
+#include "bus/rs232/rs232.h"
+#include "cpu/mcs40/mcs40.h"
+
+
+namespace {
+
+class intellec4_40_state : public driver_device
+{
+public:
+ intellec4_40_state(machine_config const &mconfig, device_type type, char const *tag)
+ : driver_device(mconfig, type, tag)
+ , m_tty(*this, "tty")
+ {
+ }
+
+ DECLARE_READ8_MEMBER(tty_r);
+ DECLARE_WRITE8_MEMBER(tty_w);
+
+private:
+ required_device<rs232_port_device> m_tty;
+};
+
+
+READ8_MEMBER(intellec4_40_state::tty_r)
+{
+ return m_tty->rxd_r() ? 0x0 : 0x1;
+}
+
+WRITE8_MEMBER(intellec4_40_state::tty_w)
+{
+ m_tty->write_txd(BIT(data, 0));
+}
+
+
+ADDRESS_MAP_START(mod40_program, AS_PROGRAM, 8, intellec4_40_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x03ff) AM_ROM AM_REGION("monitor", 0x0000) // 4289 + 4 * 1702A
+ADDRESS_MAP_END
+
+ADDRESS_MAP_START(mod40_data, AS_DATA, 8, intellec4_40_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_RAM // 4 * 4002
+ADDRESS_MAP_END
+
+ADDRESS_MAP_START(mod40_io, AS_IO, 8, intellec4_40_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0700) AM_READ(tty_r) // RDR when RC=00
+ AM_RANGE(0x1000, 0x103f) AM_MIRROR(0x0800) AM_WRITE(tty_w) // WMP when RC=00
+ADDRESS_MAP_END
+
+
+MACHINE_CONFIG_START(intlc440)
+ MCFG_CPU_ADD("maincpu", I4040, 5185000./7)
+ MCFG_CPU_PROGRAM_MAP(mod40_program)
+ MCFG_CPU_DATA_MAP(mod40_data)
+ MCFG_CPU_IO_MAP(mod40_io)
+
+ MCFG_RS232_PORT_ADD("tty", default_rs232_devices, "terminal")
+MACHINE_CONFIG_END
+
+
+INPUT_PORTS_START(intlc440)
+INPUT_PORTS_END
+
+
+ROM_START(intlc440)
+ ROM_REGION(0x0400, "monitor", 0)
+ ROM_DEFAULT_BIOS("v2.1")
+ ROM_SYSTEM_BIOS(0, "v2.1", "MON 4 V2.1")
+ ROMX_LOAD("mon_4-000-v_2.1.a1", 0x0000, 0x0100, CRC(0a08d83d) SHA1(e7044f3b54a16d925aaffc85b0c6001f740ea4c5), ROM_BIOS(1))
+ ROMX_LOAD("mon_4-100-v_2.1.a2", 0x0100, 0x0100, CRC(66562a4f) SHA1(040749c45e95dfc39b3397d0c31c8b4c11f0a5fc), ROM_BIOS(1))
+ ROMX_LOAD("mon_4-200-v_2.1.a3", 0x0200, 0x0100, CRC(fe039c68) SHA1(1801cfcc7514412865c0fdc7d1800fcf583a2d2a), ROM_BIOS(1))
+ ROMX_LOAD("mon_4-300-v_2.1.a4", 0x0300, 0x0100, CRC(3724d5af) SHA1(b764b3bb3541fbda875f7a7655f46aa54b332631), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "v2.1_1200", "MON 4 V2.1 1200 Baud hack")
+ ROMX_LOAD("mon_4-000-v_2.1.a1", 0x0000, 0x0100, CRC(0a08d83d) SHA1(e7044f3b54a16d925aaffc85b0c6001f740ea4c5), ROM_BIOS(2))
+ ROMX_LOAD("i40_mon-1.a2", 0x0100, 0x0100, CRC(cd9fecd6) SHA1(9c4fb85118c881687fd4b324e5089df05d1e63d1), ROM_BIOS(2))
+ ROMX_LOAD("i40_mon-2.a3", 0x0200, 0x0100, CRC(037de128) SHA1(3694636e1f4e23688b36ea9ee755a0c5888f4328), ROM_BIOS(2))
+ ROMX_LOAD("1200_baud-i40_mon-f3.a4", 0x0300, 0x0100, CRC(f3198d79) SHA1(b7903073b69f487b6f78842c08694f12225d85f0), ROM_BIOS(2))
+ROM_END
+
+} // anonymous namespace
+
+// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
+COMP( 1974?, intlc440, 0, 0, intlc440, intlc440, intellec4_40_state, 0, "Intel", "INTELLEC 4/MOD40", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )