summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2017-10-21 15:21:05 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2017-10-21 15:22:21 +0100
commit92b6a4a28983af2baf55f11365e527863c2ba560 (patch)
treee871c8f9bf19232121335bd121c63461f2495082
parentfe4ad952f73f5a4c7f5b19c91b76402cc771fa34 (diff)
hx20: Added optional ROM slot and softlist.
New not working software list additions ----------------------------------- hx20_rom.xml: SkiWriter New machines added as MACHINE_NOT_WORKING ----------------------------------------- Epson CM6000 [Colin McDougall]
-rw-r--r--hash/hx20_rom.xml17
-rw-r--r--src/mame/drivers/hx20.cpp134
-rw-r--r--src/mame/includes/hx20.h7
-rw-r--r--src/mame/mame.lst1
4 files changed, 148 insertions, 11 deletions
diff --git a/hash/hx20_rom.xml b/hash/hx20_rom.xml
new file mode 100644
index 00000000000..a4b8b172d22
--- /dev/null
+++ b/hash/hx20_rom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="hx20_rom" description="Epson HX-20 Optional ROMs">
+
+ <software name="skiwritr">
+ <description>SkiWriter</description>
+ <year>1983</year>
+ <publisher>SkiSoft</publisher>
+ <part name="rom" interface="opt_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="skiwriter_1983.bin" size="8192" crc="28fe9f30" sha1="6c5f0a4d08cb347b87b57db8aef250b78343a81b" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/src/mame/drivers/hx20.cpp b/src/mame/drivers/hx20.cpp
index 6e14fcbdccc..b06b9431e21 100644
--- a/src/mame/drivers/hx20.cpp
+++ b/src/mame/drivers/hx20.cpp
@@ -6,6 +6,13 @@
http://fjkraan.home.xs4all.nl/comp/hx20/
+ Epson CM6000
+
+ This is a re-badged HX-20 with revision H motherboard and keyboard overlay.
+ It takes 3x16K ROMs instead of the usual 4x8K + 8K optional. Appears to
+ be from a BT phone exchange.
+ Label on base states CM6000 Series, CM6032 System, MOH 89/1.
+
****************************************************************************/
/*
@@ -552,6 +559,7 @@ static ADDRESS_MAP_START( hx20_mem, AS_PROGRAM, 8, hx20_state )
AM_RANGE(0x0040, 0x007f) AM_DEVREADWRITE(MC146818_TAG, mc146818_device, read, write)
AM_RANGE(0x0080, 0x00ff) AM_RAM
AM_RANGE(0x0100, 0x3fff) AM_RAM
+ AM_RANGE(0x6000, 0x7fff) AM_ROM AM_READ(optrom_r)
AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(HD6301V1_MAIN_TAG, 0)
ADDRESS_MAP_END
@@ -569,7 +577,7 @@ ADDRESS_MAP_END
//-------------------------------------------------
-// ADDRESS_MAP( hx20_io )
+// ADDRESS_MAP( hx20_sub_mem )
//-------------------------------------------------
static ADDRESS_MAP_START( hx20_sub_mem, AS_PROGRAM, 8, hx20_state )
@@ -580,7 +588,7 @@ ADDRESS_MAP_END
//-------------------------------------------------
-// ADDRESS_MAP( hx20_io )
+// ADDRESS_MAP( hx20_sub_io )
//-------------------------------------------------
static ADDRESS_MAP_START( hx20_sub_io, AS_IO, 8, hx20_state )
@@ -591,6 +599,15 @@ static ADDRESS_MAP_START( hx20_sub_io, AS_IO, 8, hx20_state )
ADDRESS_MAP_END
+//-------------------------------------------------
+// ADDRESS_MAP( cm6000_mem )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( cm6000_mem, AS_PROGRAM, 8, hx20_state )
+ AM_IMPORT_FROM(hx20_mem)
+ AM_RANGE(0x4000, 0xffff) AM_ROM AM_REGION(HD6301V1_MAIN_TAG, 0)
+ADDRESS_MAP_END
+
//**************************************************************************
// INPUT PORTS
@@ -741,6 +758,33 @@ static INPUT_PORTS_START( hx20e )
INPUT_PORTS_END
+//-------------------------------------------------
+// INPUT_PORTS( cm6000 )
+//-------------------------------------------------
+
+static INPUT_PORTS_START( cm6000 )
+ PORT_INCLUDE(hx20)
+
+ PORT_MODIFY("KSC0")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 TOTALS") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
+
+ PORT_MODIFY("KSC1")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 DETAIL") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
+
+ PORT_MODIFY("KSC2")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3 STATUS") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
+
+ PORT_MODIFY("KSC3")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4 AUTO") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
+
+ PORT_MODIFY("KSC4")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5 T/DATE") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
+
+ PORT_MODIFY("KSC7")
+ PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ABORT")
+ PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("EXT FF")
+INPUT_PORTS_END
+
//**************************************************************************
// DEVICE CONFIGURATION
@@ -787,6 +831,34 @@ uint32_t hx20_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
}
+//**************************************************************************
+// OPTIONAL ROMS
+//**************************************************************************
+
+DEVICE_IMAGE_LOAD_MEMBER(hx20_state, optrom_load)
+{
+ uint32_t size = m_optrom->common_get_size("rom");
+
+ if (size != 0x2000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported rom size");
+ return image_init_result::FAIL;
+ }
+
+ m_optrom->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_optrom->common_load_rom(m_optrom->get_rom_base(), size, "rom");
+
+ return image_init_result::PASS;
+}
+
+READ8_MEMBER(hx20_state::optrom_r)
+{
+ if (m_optrom->exists())
+ return m_optrom->read_rom(space, offset);
+ else
+ return 0;
+}
+
//**************************************************************************
// MACHINE INITIALIZATION
@@ -866,18 +938,42 @@ static MACHINE_CONFIG_START( hx20 )
MCFG_RAM_DEFAULT_SIZE("16K")
MCFG_RAM_EXTRA_OPTIONS("32K")
+ // optional rom
+ MCFG_GENERIC_SOCKET_ADD("optrom", generic_plain_slot, "opt_rom")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
+ MCFG_GENERIC_LOAD(hx20_state, optrom_load)
+
// software lists
+ MCFG_SOFTWARE_LIST_ADD("hx20_opt_list", "hx20_rom")
MCFG_SOFTWARE_LIST_ADD("epson_cpm_list", "epson_cpm")
MACHINE_CONFIG_END
+//-------------------------------------------------
+// MACHINE_CONFIG( hx20 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_DERIVED( cm6000, hx20 )
+ // basic machine hardware
+ MCFG_CPU_MODIFY(HD6301V1_MAIN_TAG)
+ MCFG_CPU_PROGRAM_MAP(cm6000_mem)
+ MCFG_CPU_IO_MAP(hx20_io)
+
+ // optional rom
+ MCFG_DEVICE_REMOVE("optrom")
+
+ // software lists
+ MCFG_SOFTWARE_LIST_REMOVE("epson_cpm_list")
+ MCFG_SOFTWARE_LIST_REMOVE("hx20_opt_list")
+MACHINE_CONFIG_END
+
//**************************************************************************
// ROMS
//**************************************************************************
//-------------------------------------------------
-// ROM( hx20 )
+// ROM( ehx20 )
//-------------------------------------------------
ROM_START( ehx20 )
@@ -900,26 +996,42 @@ ROM_END
//-------------------------------------------------
-// ROM( hx20e )
+// ROM( ehx20e )
//-------------------------------------------------
ROM_START( ehx20e )
ROM_REGION( 0x8000, HD6301V1_MAIN_TAG, ROMREGION_ERASEFF )
- ROMX_LOAD( "hx20_v11e.12e", 0x0000, 0x2000, CRC(4de0b4b6) SHA1(f15c537824b7effde9d9b9a21e92a081fb089371), ROM_BIOS(3) )
- ROMX_LOAD( "hx20_v11e.13e", 0x2000, 0x2000, CRC(10d6ae76) SHA1(3163954ed9981f70f590ee98bcc8e19e4be6527a), ROM_BIOS(3) )
- ROMX_LOAD( "hx20_v11e.14e", 0x4000, 0x2000, CRC(26c203a1) SHA1(b282d7233b2689820fcf718dbe1e93d623b67e4f), ROM_BIOS(3) )
- ROMX_LOAD( "hx20_v11e.15e", 0x6000, 0x2000, CRC(fd339aa5) SHA1(860c3579c45e96c5e6a877f4fbe77abacb0d674e), ROM_BIOS(3) )
+ ROM_LOAD( "hx20_v11e.12e", 0x0000, 0x2000, CRC(4de0b4b6) SHA1(f15c537824b7effde9d9b9a21e92a081fb089371) )
+ ROM_LOAD( "hx20_v11e.13e", 0x2000, 0x2000, CRC(10d6ae76) SHA1(3163954ed9981f70f590ee98bcc8e19e4be6527a) )
+ ROM_LOAD( "hx20_v11e.14e", 0x4000, 0x2000, CRC(26c203a1) SHA1(b282d7233b2689820fcf718dbe1e93d623b67e4f) )
+ ROM_LOAD( "hx20_v11e.15e", 0x6000, 0x2000, CRC(fd339aa5) SHA1(860c3579c45e96c5e6a877f4fbe77abacb0d674e) )
ROM_REGION( 0x1000, HD6301V1_SLAVE_TAG, 0 )
ROM_LOAD( "hd6301v1.6d", 0x0000, 0x1000, CRC(b36f5b99) SHA1(c6b54163bb268e4f4f5c79aa2e83ec51f775b16a) )
ROM_END
+//-------------------------------------------------
+// ROM( ecm6000 )
+//-------------------------------------------------
+
+ROM_START( ecm6000 )
+ // 1988 MOSU 20120200004 H:::
+ ROM_REGION( 0xc000, HD6301V1_MAIN_TAG, ROMREGION_ERASEFF )
+ ROM_LOAD( "cm6032a-1_v43.11e", 0x0000, 0x4000, CRC(124797c2) SHA1(33d3418c99eb2d557151996bc09debf4ca089298) )
+ ROM_LOAD( "cm6032a-2_v43.13e", 0x4000, 0x4000, CRC(b136abec) SHA1(594862e058e553826209f86e9ebbb81f29017469) )
+ ROM_LOAD( "cm6032a-3_v43.15e", 0x8000, 0x4000, CRC(95c34bdc) SHA1(c7022145f37e9fd2f339f8e7ad3adce76a67ca0b) )
+
+ ROM_REGION( 0x1000, HD6301V1_SLAVE_TAG, 0 )
+ ROM_LOAD( "hd6301v1.6d", 0x0000, 0x1000, CRC(b36f5b99) SHA1(c6b54163bb268e4f4f5c79aa2e83ec51f775b16a)) // not verified
+ROM_END
+
//**************************************************************************
// SYSTEM DRIVERS
//**************************************************************************
-// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
-COMP( 1983, ehx20, 0, 0, hx20, hx20, hx20_state, 0, "Epson", "Epson HX-20", MACHINE_NOT_WORKING )
-COMP( 1983, ehx20e, ehx20, 0, hx20, hx20e, hx20_state, 0, "Epson", "Epson HX-20 (Europe)", MACHINE_NOT_WORKING )
+// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
+COMP( 1983, ehx20, 0, 0, hx20, hx20, hx20_state, 0, "Epson", "Epson HX-20", MACHINE_NOT_WORKING )
+COMP( 1983, ehx20e, ehx20, 0, hx20, hx20e, hx20_state, 0, "Epson", "Epson HX-20 (Europe)", MACHINE_NOT_WORKING )
+COMP( 1989, ecm6000, ehx20, 0, cm6000, cm6000, hx20_state, 0, "Epson", "Epson CM6000", MACHINE_NOT_WORKING )
diff --git a/src/mame/includes/hx20.h b/src/mame/includes/hx20.h
index 1aee0947250..9ad20045088 100644
--- a/src/mame/includes/hx20.h
+++ b/src/mame/includes/hx20.h
@@ -12,6 +12,8 @@
#include "sound/spkrdev.h"
#include "video/upd7227.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
#include "bus/epson_sio/epson_sio.h"
#include "bus/rs232/rs232.h"
@@ -49,6 +51,7 @@ public:
m_cassette(*this, CASSETTE_TAG),
m_rs232(*this, RS232_TAG),
m_sio(*this, "sio"),
+ m_optrom(*this, "optrom"),
m_ksc0(*this, "KSC0"),
m_ksc1(*this, "KSC1"),
m_ksc2(*this, "KSC2"),
@@ -78,6 +81,7 @@ public:
required_device<cassette_image_device> m_cassette;
required_device<rs232_port_device> m_rs232;
required_device<epson_sio_device> m_sio;
+ optional_device<generic_slot_device> m_optrom;
required_ioport m_ksc0;
required_ioport m_ksc1;
required_ioport m_ksc2;
@@ -117,6 +121,9 @@ public:
DECLARE_WRITE_LINE_MEMBER( sio_rx_w ) { m_sio_rx = state; }
DECLARE_WRITE_LINE_MEMBER( sio_pin_w ) { m_sio_pin = state; }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER( optrom_load );
+ DECLARE_READ8_MEMBER( optrom_r );
+
void update_interrupt();
// CPU state
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 544556293bb..f4b046d8652 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -14976,6 +14976,7 @@ hvyunitu // (c) 1988 Kaneko
@source:hx20.cpp
ehx20 //
ehx20e //
+ecm6000 //
@source:hyhoo.cpp
hyhoo // (c) 1987