From 4a709f7ecceba0f90140159ec16bc8f49a70af0c Mon Sep 17 00:00:00 2001 From: Mark Garlanger Date: Sun, 26 Feb 2017 14:23:04 -0600 Subject: Fix Super19 version of Heath H19. --- src/mame/drivers/h19.cpp | 52 +++++++++++++++++++++++++++++++++--------------- src/mame/mame.lst | 7 ++++--- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp index d30363409fb..029f11e6f84 100644 --- a/src/mame/drivers/h19.cpp +++ b/src/mame/drivers/h19.cpp @@ -18,9 +18,12 @@ - Finish connecting up the 8250 - enable 8520 interrupts - speed up emulation - - super19 version has the videoram at D800. This is not emulated. - However, a keyclick can be heard, to assure you it does in fact work. + - update SW401 baud rate options for Watz ROM + - update SW401 & SW402 definitions for Super-19 ROM + - SuperSet support + - connect 8250 modem control lines to bank-switching for + character generation + - properly handle 32k ROM with only 16K of data. ****************************************************************************/ /*************************************************************************** @@ -107,7 +110,6 @@ public: MC6845_UPDATE_ROW(crtc_update_row); private: - //uint8_t m_term_data; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_reset() override; required_device m_palette; @@ -152,23 +154,23 @@ void h19_state::device_timer(emu_timer &timer, device_timer_id id, int param, vo static ADDRESS_MAP_START(h19_mem, AS_PROGRAM, 8, h19_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0x4000, 0x4100) AM_RAM - AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("videoram") + AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_ROM + AM_RANGE(0x4000, 0x4100) AM_MIRROR(0x3e00) AM_RAM + AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") ADDRESS_MAP_END static ADDRESS_MAP_START( h19_io, AS_IO, 8, h19_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x1F) AM_READ_PORT("SW401") - AM_RANGE(0x20, 0x3F) AM_READ_PORT("SW402") + AM_RANGE(0x00, 0x00) AM_MIRROR(0x1f) AM_READ_PORT("SW401") + AM_RANGE(0x20, 0x20) AM_MIRROR(0x1f) AM_READ_PORT("SW402") AM_RANGE(0x40, 0x47) AM_MIRROR(0x18) AM_DEVREADWRITE("ins8250", ins8250_device, ins8250_r, ins8250_w ) - AM_RANGE(0x60, 0x60) AM_DEVWRITE("crtc", mc6845_device, address_w) - AM_RANGE(0x61, 0x61) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) - AM_RANGE(0x80, 0x9F) AM_READ(kbd_key_r) - AM_RANGE(0xA0, 0xBF) AM_READ(kbd_flags_r) - AM_RANGE(0xC0, 0xDF) AM_WRITE(h19_keyclick_w) - AM_RANGE(0xE0, 0xFF) AM_WRITE(h19_bell_w) + AM_RANGE(0x60, 0x60) AM_MIRROR(0x1E) AM_DEVWRITE("crtc", mc6845_device, address_w) + AM_RANGE(0x61, 0x61) AM_MIRROR(0x1E) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) + AM_RANGE(0x80, 0x80) AM_MIRROR(0x1f) AM_READ(kbd_key_r) + AM_RANGE(0xA0, 0xA0) AM_MIRROR(0x1f) AM_READ(kbd_flags_r) + AM_RANGE(0xC0, 0xC0) AM_MIRROR(0x1f) AM_WRITE(h19_keyclick_w) + AM_RANGE(0xE0, 0xE0) AM_MIRROR(0x1f) AM_WRITE(h19_bell_w) ADDRESS_MAP_END /* Input ports */ @@ -605,9 +607,27 @@ ROM_START( watz19 ) ROM_LOAD( "keybd.bin", 0x0000, 0x0800, CRC(58dc8217) SHA1(1b23705290bdf9fc6342065c6a528c04bff67b13)) ROM_END +ROM_START( ssh19 ) // Superset for H19 + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + // Superset ROM - TODO although the ROM is 32K, only 16K is accessible + ROM_LOAD( "27256_101-402_superset_code.bin", 0x0000, 0x8000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) + + ROM_REGION( 0x0800, "chargen", 0 ) + // Superset font - 32k + // TODO: connect the output lines from the 8250(OUT1,OUT2,DTR,RTS) to control bank switching of this ROM and + // select the proper character set + ROM_LOAD( "27256_101-431_superset_font.bin", 0x0000, 0x0800, CRC(4c0688f6) SHA1(be6059913420ad66f5c839d619fdcb164ffae85a)) + + ROM_REGION( 0x1000, "keyboard", 0 ) + // Original dump + ROM_LOAD( "2716_101-422_superset_kbd.bin", 0x0000, 0x0800, CRC(549d15b3) SHA1(981962e5e05bbdc5a66b0e86870853ce5596e877)) +ROM_END + + /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ COMP( 1979, h19, 0, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19", 0 ) /* TODO - verify the years for these third-party replacement ROMs. */ -COMP( 1982, super19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Super-19 ROM", MACHINE_NOT_WORKING ) +COMP( 1982, super19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Super-19 ROM", 0 ) COMP( 1982, watz19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Watzman ROM", 0 ) +COMP( 1982, ssh19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ SuperSet ROM", MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index da9eb1d2e3d..b5f242598f4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14153,9 +14153,10 @@ gyrussce // GX347 (c) 1983 + Centuri license venus // bootleg @source:h19.cpp -h19 // -super19 // -watz19 // +h19 // Heath H19 (Zenith Z-19) +super19 // Super19 replacement ROMS for H19 +watz19 // Watzman replacement ROMS for H19 +ssh19 // Superset replacement Roms for H19 @source:h8.cpp h8 // -- cgit v1.2.3 From 59e966fac48c79beed3976f88d4aea50b1f0d798 Mon Sep 17 00:00:00 2001 From: Mark Garlanger Date: Fri, 3 Mar 2017 23:53:07 -0600 Subject: Attempt 1 to get superset ROM working. --- src/mame/drivers/h19.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp index 029f11e6f84..b4bd8fdcd9f 100644 --- a/src/mame/drivers/h19.cpp +++ b/src/mame/drivers/h19.cpp @@ -159,6 +159,26 @@ static ADDRESS_MAP_START(h19_mem, AS_PROGRAM, 8, h19_state) AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") ADDRESS_MAP_END +//#define APPROACH_1 +//#define APPROACH_2 +#if defined(APPROACH_1) +static ADDRESS_MAP_START(ssh19_mem, AS_PROGRAM, 8, h19_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x4100) AM_MIRROR(0x3e00) AM_RAM + AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") +ADDRESS_MAP_END + +#elif defined(APPROACH_2) +static ADDRESS_MAP_START(ssh19_mem, AS_PROGRAM, 8, h19_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("roms", 0x2000) + AM_RANGE(0x2000, 0x3fff) AM_ROM AM_REGION("roms", 0x6000) + AM_RANGE(0x4000, 0x4100) AM_MIRROR(0x3e00) AM_RAM + AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") +ADDRESS_MAP_END +#endif + static ADDRESS_MAP_START( h19_io, AS_IO, 8, h19_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) @@ -565,6 +585,12 @@ static MACHINE_CONFIG_START( h19, h19_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MACHINE_CONFIG_END +#if defined(APPROACH_1) || defined(APPROACH_2) +static MACHINE_CONFIG_DERIVED( ssh19, h19 ) + MCFG_CPU_PROGRAM_MAP(ssh19_mem) +MACHINE_CONFIG_END +#endif + /* ROM definition */ ROM_START( h19 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) @@ -608,9 +634,26 @@ ROM_START( watz19 ) ROM_END ROM_START( ssh19 ) // Superset for H19 +#if defined(APPROACH_1) + // reserve an extra 16k outside of addressable space to hide the empty blocks of ram + ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) + // Superset ROM - although the ROM is 32K, only 16K is accessible - hide the first 8k + ROM_LOAD( "27256_101-402_superset_code.bin", 0x10000, 0x2000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) + // load the 2nd 8k into low memory + ROM_CONTINUE(0x00000, 0x2000) + // hide the 3rd 8k + ROM_CONTINUE(0x12000, 0x2000) + // load the last 8k + ROM_CONTINUE(0x02000, 0x2000) +#elif defined(APPROACH_2) + ROM_REGION( 0x10000, "roms", ROMREGION_ERASEFF ) + // Superset ROM - although the ROM is 32K, only 16K is accessible - hide the first 8k + ROM_LOAD( "27256_101-402_superset_code.bin", 0x0000, 0x8000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) +#else ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) // Superset ROM - TODO although the ROM is 32K, only 16K is accessible ROM_LOAD( "27256_101-402_superset_code.bin", 0x0000, 0x8000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) +#endif ROM_REGION( 0x0800, "chargen", 0 ) // Superset font - 32k @@ -629,5 +672,9 @@ COMP( 1979, h19, 0, 0, h19, h19, driver_device, 0, "Heath I /* TODO - verify the years for these third-party replacement ROMs. */ COMP( 1982, super19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Super-19 ROM", 0 ) COMP( 1982, watz19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Watzman ROM", 0 ) +#if defined(APPROACH_1) || defined(APPROACH_2) +COMP( 1982, ssh19, h19, 0, ssh19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ SuperSet ROM", MACHINE_NOT_WORKING ) +#else COMP( 1982, ssh19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ SuperSet ROM", MACHINE_NOT_WORKING ) +#endif -- cgit v1.2.3 From 66c278da31137aca9a7bddf89367b2059602ee28 Mon Sep 17 00:00:00 2001 From: Mark Garlanger Date: Mon, 20 Mar 2017 20:53:45 -0500 Subject: Remove incomplete support for SuperSet H19. --- src/mame/drivers/h19.cpp | 68 ------------------------------------------------ src/mame/mame.lst | 1 - 2 files changed, 69 deletions(-) diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp index b4bd8fdcd9f..71e1ecf6acc 100644 --- a/src/mame/drivers/h19.cpp +++ b/src/mame/drivers/h19.cpp @@ -20,10 +20,6 @@ - speed up emulation - update SW401 baud rate options for Watz ROM - update SW401 & SW402 definitions for Super-19 ROM - - SuperSet support - - connect 8250 modem control lines to bank-switching for - character generation - - properly handle 32k ROM with only 16K of data. ****************************************************************************/ /*************************************************************************** @@ -159,26 +155,6 @@ static ADDRESS_MAP_START(h19_mem, AS_PROGRAM, 8, h19_state) AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") ADDRESS_MAP_END -//#define APPROACH_1 -//#define APPROACH_2 -#if defined(APPROACH_1) -static ADDRESS_MAP_START(ssh19_mem, AS_PROGRAM, 8, h19_state) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x4100) AM_MIRROR(0x3e00) AM_RAM - AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") -ADDRESS_MAP_END - -#elif defined(APPROACH_2) -static ADDRESS_MAP_START(ssh19_mem, AS_PROGRAM, 8, h19_state) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("roms", 0x2000) - AM_RANGE(0x2000, 0x3fff) AM_ROM AM_REGION("roms", 0x6000) - AM_RANGE(0x4000, 0x4100) AM_MIRROR(0x3e00) AM_RAM - AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM AM_SHARE("videoram") -ADDRESS_MAP_END -#endif - static ADDRESS_MAP_START( h19_io, AS_IO, 8, h19_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) @@ -585,12 +561,6 @@ static MACHINE_CONFIG_START( h19, h19_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MACHINE_CONFIG_END -#if defined(APPROACH_1) || defined(APPROACH_2) -static MACHINE_CONFIG_DERIVED( ssh19, h19 ) - MCFG_CPU_PROGRAM_MAP(ssh19_mem) -MACHINE_CONFIG_END -#endif - /* ROM definition */ ROM_START( h19 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) @@ -633,48 +603,10 @@ ROM_START( watz19 ) ROM_LOAD( "keybd.bin", 0x0000, 0x0800, CRC(58dc8217) SHA1(1b23705290bdf9fc6342065c6a528c04bff67b13)) ROM_END -ROM_START( ssh19 ) // Superset for H19 -#if defined(APPROACH_1) - // reserve an extra 16k outside of addressable space to hide the empty blocks of ram - ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF ) - // Superset ROM - although the ROM is 32K, only 16K is accessible - hide the first 8k - ROM_LOAD( "27256_101-402_superset_code.bin", 0x10000, 0x2000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) - // load the 2nd 8k into low memory - ROM_CONTINUE(0x00000, 0x2000) - // hide the 3rd 8k - ROM_CONTINUE(0x12000, 0x2000) - // load the last 8k - ROM_CONTINUE(0x02000, 0x2000) -#elif defined(APPROACH_2) - ROM_REGION( 0x10000, "roms", ROMREGION_ERASEFF ) - // Superset ROM - although the ROM is 32K, only 16K is accessible - hide the first 8k - ROM_LOAD( "27256_101-402_superset_code.bin", 0x0000, 0x8000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) -#else - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - // Superset ROM - TODO although the ROM is 32K, only 16K is accessible - ROM_LOAD( "27256_101-402_superset_code.bin", 0x0000, 0x8000, CRC(a6896076) SHA1(a4e2d25028dc75a665c3f5a830a4e8cdecbd481c)) -#endif - - ROM_REGION( 0x0800, "chargen", 0 ) - // Superset font - 32k - // TODO: connect the output lines from the 8250(OUT1,OUT2,DTR,RTS) to control bank switching of this ROM and - // select the proper character set - ROM_LOAD( "27256_101-431_superset_font.bin", 0x0000, 0x0800, CRC(4c0688f6) SHA1(be6059913420ad66f5c839d619fdcb164ffae85a)) - - ROM_REGION( 0x1000, "keyboard", 0 ) - // Original dump - ROM_LOAD( "2716_101-422_superset_kbd.bin", 0x0000, 0x0800, CRC(549d15b3) SHA1(981962e5e05bbdc5a66b0e86870853ce5596e877)) -ROM_END - /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ COMP( 1979, h19, 0, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19", 0 ) /* TODO - verify the years for these third-party replacement ROMs. */ COMP( 1982, super19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Super-19 ROM", 0 ) COMP( 1982, watz19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Watzman ROM", 0 ) -#if defined(APPROACH_1) || defined(APPROACH_2) -COMP( 1982, ssh19, h19, 0, ssh19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ SuperSet ROM", MACHINE_NOT_WORKING ) -#else -COMP( 1982, ssh19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ SuperSet ROM", MACHINE_NOT_WORKING ) -#endif diff --git a/src/mame/mame.lst b/src/mame/mame.lst index b5f242598f4..282c4c85a22 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14156,7 +14156,6 @@ venus // bootleg h19 // Heath H19 (Zenith Z-19) super19 // Super19 replacement ROMS for H19 watz19 // Watzman replacement ROMS for H19 -ssh19 // Superset replacement Roms for H19 @source:h8.cpp h8 // -- cgit v1.2.3