From 92b6a4a28983af2baf55f11365e527863c2ba560 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Sat, 21 Oct 2017 15:21:05 +0100 Subject: 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] --- hash/hx20_rom.xml | 17 ++++++ src/mame/drivers/hx20.cpp | 134 ++++++++++++++++++++++++++++++++++++++++++---- src/mame/includes/hx20.h | 7 +++ src/mame/mame.lst | 1 + 4 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 hash/hx20_rom.xml 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 @@ + + + + + + + SkiWriter + 1983 + SkiSoft + + + + + + + + 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 m_cassette; required_device m_rs232; required_device m_sio; + optional_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 -- cgit v1.2.3