summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/route16.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/route16.cpp')
-rw-r--r--src/mame/drivers/route16.cpp1147
1 files changed, 0 insertions, 1147 deletions
diff --git a/src/mame/drivers/route16.cpp b/src/mame/drivers/route16.cpp
deleted file mode 100644
index 55d678d6b15..00000000000
--- a/src/mame/drivers/route16.cpp
+++ /dev/null
@@ -1,1147 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Zsolt Vasvari
-/***************************************************************************
-
- Route 16/Stratovox memory map (preliminary)
-
- driver by Zsolt Vasvari
-
- Notes: Route 16 and Stratovox use identical hardware with the following
- exceptions: Stratovox has a DAC for voice.
- Route 16 has the added ability to turn off each bitplane individually.
- This looks like an afterthought, as one of the same bits that control
- the palette selection is doubly utilized as the bitmap enable bit.
-
- Space Echo:
- when all astronauts are taken the game over tune ends with 5 bad notes,
- this appears to be a bug in the ROM from a changed instruction at 2EB3.
-
- service mode shows a garbled screen as most of the code for it has been
- replaced by other routines, however the sound tests still work. it's
- possible that the service switch isn't connected on the real hardware.
-
- the game hangs if it doesn't pass the startup test, a best guess is implemented
- rather than patching out the test. code for the same test is in stratvox but
- isn't called, speakres has a very similar test but doesn't care about the result.
-
- interrupts per frame for cpu1 is a best guess based on how stratvox uses the DAC,
- writing up to 195 times per frame with each byte from the ROM written 4 times.
- spacecho writes one byte per interrupt so 195/4 or 48 is used. a lower number
- increases the chance of a sound interrupting itself, which for most sounds
- is buggy and causes the game to freeze until the first sound completes.
-
- CPU1
-
- 0000-2fff ROM
- 4000-43ff Shared RAM
- 8000-bfff Video RAM
-
- I/O Read
-
- 48xx IN0 - DIP Switches
- 50xx IN1 - Input Port 1
- 58xx IN2 - Input Port 2
- 60xx IN3 - Unknown (Speak & Rescue/Space Echo only)
-
- I/O Write
-
- 48xx OUT0 - D0-D4 color select for VRAM 0
- D5 coin counter
- 50xx OUT1 - D0-D4 color select for VRAM 1
- D5 VIDEO I/II (Flip Screen)
- 58xx OUT2 - Unknown (Speak & Rescue/Space Echo only)
-
- I/O Port Write
-
- 6800 AY-8910 Write Port
- 6900 AY-8910 Control Port
-
-
- CPU2
-
- 0000-1fff ROM
- 4000-43ff Shared RAM
- 8000-bfff Video RAM
-
- I/O Write
-
- 2800 DAC output (Stratovox only)
-
-New code to better emulate the protection was added in 0.194, but it turned
-out to harbour a bug (see MT 07310). Therefore the previous patches have been
-restored, and the protection routine has been nullified (but still there in
-case someone wants to revisit it).
- ***************************************************************************/
-
-#include "emu.h"
-#include "includes/route16.h"
-
-#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
-#include "sound/dac.h"
-#include "sound/volt_reg.h"
-
-#include "screen.h"
-#include "speaker.h"
-
-
-/*************************************
- *
- * Shared RAM handling
- *
- *************************************/
-
-
-
-template<bool cpu1> WRITE8_MEMBER(route16_state::route16_sharedram_w)
-{
- m_sharedram[offset] = data;
-
- // 4313-4319 are used in Route 16 as triggers to wake the other CPU
- if (offset >= 0x0313 && offset <= 0x0319 && data == 0xff)
- {
- // Let the other CPU run
- (cpu1 ? m_cpu1 : m_cpu2)->yield();
- }
-}
-
-
-
-/*************************************
- *
- * Stratovox's extra sound effects
- *
- *************************************/
-
-WRITE8_MEMBER(route16_state::stratvox_sn76477_w)
-{
- /***************************************************************
- * AY8910 output bits are connected to...
- * 7 - direct: 5V * 30k/(100+30k) = 1.15V - via DAC??
- * 6 - SN76477 mixer C
- * 5 - SN76477 mixer B
- * 4 - SN76477 mixer A
- * 3 - SN76477 envelope 2
- * 2 - SN76477 envelope 1
- * 1 - SN76477 vco
- * 0 - SN76477 enable
- ***************************************************************/
- m_sn->enable_w((data >> 0) & 1);
- m_sn->vco_w((data >> 1) & 1);
- m_sn->envelope_1_w((data >> 2) & 1);
- m_sn->envelope_2_w((data >> 3) & 1);
- m_sn->mixer_a_w((data >> 4) & 1);
- m_sn->mixer_b_w((data >> 5) & 1);
- m_sn->mixer_c_w((data >> 6) & 1);
-}
-
-
-
-/***************************************************
- *
- * Jongputer and T.T Mahjong's multiplixed ports
- *
- ***************************************************/
-
-
-
-WRITE8_MEMBER(route16_state::jongpute_input_port_matrix_w)
-{
- m_jongpute_port_select = data;
-}
-
-
-READ8_MEMBER(route16_state::jongpute_p1_matrix_r)
-{
- uint8_t ret = 0;
-
- switch (m_jongpute_port_select)
- {
- case 1: ret = ioport("KEY0")->read(); break;
- case 2: ret = ioport("KEY1")->read(); break;
- case 4: ret = ioport("KEY2")->read(); break;
- case 8: ret = ioport("KEY3")->read(); break;
- default: break;
- }
-
- return ret;
-}
-
-READ8_MEMBER(route16_state::jongpute_p2_matrix_r)
-{
- uint8_t ret = 0;
-
- switch (m_jongpute_port_select)
- {
- case 1: ret = ioport("KEY4")->read(); break;
- case 2: ret = ioport("KEY5")->read(); break;
- case 4: ret = ioport("KEY6")->read(); break;
- case 8: ret = ioport("KEY7")->read(); break;
- default: break;
- }
-
- return ret;
-}
-
-
-/***************************************************************************
- guessing that the unconnected IN3 and OUT2 on the stratvox schematic
- are hooked up for speakres and spacecho to somehow read the variable
- resistors (eg a voltage ramp), using a write to OUT2 as a trigger
- and then bits 0-2 of IN3 going low when each pot "matches". the VRx
- values can be seen when IN0=0x55 and p1b1 is held during power on.
- this would then be checking that the sounds are mixed correctly.
-***************************************************************************/
-
-READ8_MEMBER(route16_state::speakres_in3_r)
-{
- int bit2=4, bit1=2, bit0=1;
-
- /* just using a counter, the constants are the number of reads
- before going low, each read is 40 cycles apart. the constants
- were chosen based on the startup tests and for vr0=vr2 */
- m_speakres_vrx++;
- if(m_speakres_vrx>0x300) bit0=0; /* VR0 100k ohm - speech */
- if(m_speakres_vrx>0x200) bit1=0; /* VR1 50k ohm - main volume */
- if(m_speakres_vrx>0x300) bit2=0; /* VR2 100k ohm - explosion */
-
- return 0xf8|bit2|bit1|bit0;
-}
-
-WRITE8_MEMBER(route16_state::speakres_out2_w)
-{
- m_speakres_vrx=0;
-}
-
-
-
-/*************************************
- *
- * CPU memory maps
- *
- *************************************/
-
-void route16_state::route16_cpu1_map(address_map &map)
-{
- map(0x0000, 0x2fff).rom();
- map(0x3000, 0x3001).r(FUNC(route16_state::route16_prot_read));
- map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<true>)).share("sharedram");
- map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
- map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
- map(0x5800, 0x5800).portr("P2");
- map(0x8000, 0xbfff).ram().share("videoram1");
-}
-
-
-void route16_state::routex_cpu1_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<true>)).share("sharedram");
- map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
- map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
- map(0x5800, 0x5800).portr("P2");
- map(0x6400, 0x6400).r(FUNC(route16_state::routex_prot_read));
- map(0x8000, 0xbfff).ram().share("videoram1");
-}
-
-
-void route16_state::stratvox_cpu1_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x43ff).ram().share("sharedram");
- map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
- map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
- map(0x5800, 0x5800).portr("P2");
- map(0x8000, 0xbfff).ram().share("videoram1");
-}
-
-
-void route16_state::speakres_cpu1_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x43ff).ram().share("sharedram");
- map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
- map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
- map(0x5800, 0x5800).portr("P2").w(FUNC(route16_state::speakres_out2_w));
- map(0x6000, 0x6000).r(FUNC(route16_state::speakres_in3_r));
- map(0x8000, 0xbfff).ram().share("videoram1");
-}
-
-
-void route16_state::jongpute_cpu1_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x43ff).ram().share("sharedram");
- map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
- map(0x5000, 0x5000).r(FUNC(route16_state::jongpute_p2_matrix_r)).w(FUNC(route16_state::out1_w));
- map(0x5800, 0x5800).rw(FUNC(route16_state::jongpute_p1_matrix_r), FUNC(route16_state::jongpute_input_port_matrix_w));
- map(0x6800, 0x6800).w("ay8910", FUNC(ay8910_device::data_w));
- map(0x6900, 0x6900).w("ay8910", FUNC(ay8910_device::address_w));
- map(0x8000, 0xbfff).ram().share("videoram1");
-}
-
-
-void route16_state::route16_cpu2_map(address_map &map)
-{
- map(0x0000, 0x1fff).rom();
- map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<false>)).share("sharedram");
- map(0x8000, 0xbfff).ram().share("videoram2");
-}
-
-
-void route16_state::stratvox_cpu2_map(address_map &map)
-{
- map(0x0000, 0x1fff).rom();
- map(0x2800, 0x2800).w("dac", FUNC(dac_byte_interface::data_w));
- map(0x4000, 0x43ff).ram().share("sharedram");
- map(0x8000, 0xbfff).ram().share("videoram2");
-}
-
-
-void route16_state::cpu1_io_map(address_map &map)
-{
- map.global_mask(0x1ff);
- map(0x0000, 0x0000).mirror(0x00ff).w("ay8910", FUNC(ay8910_device::data_w));
- map(0x0100, 0x0100).mirror(0x00ff).w("ay8910", FUNC(ay8910_device::address_w));
-}
-
-
-
-static INPUT_PORTS_START( route16 )
- PORT_START("DSW") /* DSW 1 */
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) // Doesn't seem to
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // be referenced
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // Doesn't seem to
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // be referenced
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
-// PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) // Same as 0x08
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("P1") /* Input Port 1 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("P2") /* Input Port 2 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( stratvox )
- PORT_START("DSW") /* IN0 */
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPNAME( 0x02, 0x00, "Replenish Astronouts" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x08, "4" )
- PORT_DIPSETTING( 0x0c, "5" )
- PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" )
- PORT_DIPSETTING( 0x00, "Less Often" )
- PORT_DIPSETTING( 0x10, "More Often" )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("P1") /* IN1 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("P2") /* IN2 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( speakres )
- PORT_START("DSW") /* IN0 */
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x01, "4" )
- PORT_DIPSETTING( 0x02, "5" )
- PORT_DIPSETTING( 0x03, "6" )
- PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x08, "4" )
- PORT_DIPSETTING( 0x0c, "5" )
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING( 0x00, "5000" )
- PORT_DIPSETTING( 0x10, "8000" )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("P1") /* IN1 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("P2") /* IN2 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( spacecho )
- PORT_START("DSW") /* IN0 */
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPNAME( 0x02, 0x00, "Replenish Astronouts" )
- PORT_DIPSETTING( 0x02, DEF_STR( No ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x08, "4" )
- PORT_DIPSETTING( 0x0c, "5" )
- PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" )
- PORT_DIPSETTING( 0x00, "Less Often" )
- PORT_DIPSETTING( 0x10, "More Often" )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("P1") /* IN1 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("P2") /* IN2 */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( jongpute )
- PORT_START("DSW") /* IN0 */
- PORT_DIPNAME( 0x0c, 0x08, "Timer Descrement Speed" )
- PORT_DIPSETTING( 0x00, "Very Fast" )
- PORT_DIPSETTING( 0x04, "Fast" )
- PORT_DIPSETTING( 0x08, "Normal" )
- PORT_DIPSETTING( 0x0c, "Slow" )
-
- PORT_START("KEY0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_A )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_E )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_B )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_F )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_J )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_C )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_K )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_RON )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY3")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_D )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_H )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_L )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_PON )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY4")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_A ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_E ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_I ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY5")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_B ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_F ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_J ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH ) PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY6")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_C ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_K ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_RON ) PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("KEY7")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_D ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_H ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_L ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_PON ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-INPUT_PORTS_END
-
-MACHINE_START_MEMBER(route16_state, speakres)
-{
- save_item(NAME(m_speakres_vrx));
-}
-
-MACHINE_START_MEMBER(route16_state, jongpute)
-{
- save_item(NAME(m_jongpute_port_select));
-}
-
-void route16_state::init_route16()
-{
- // hack out the protection
- u8 *rom = memregion("cpu1")->base();
- rom[0x105] = 0; // remove jp nz,4109
- rom[0x106] = 0;
- rom[0x107] = 0;
-
- rom[0x72a] = 0; // remove jp nz,4238
- rom[0x72b] = 0;
- rom[0x72c] = 0;
- init_route16c();
-}
-
-void route16_state::init_route16a()
-{
- save_item(NAME(m_protection_data));
- // hack out the protection
- u8 *rom = memregion("cpu1")->base();
- rom[0x105] = 0; // remove jp nz,4109
- rom[0x106] = 0;
- rom[0x107] = 0;
-
- rom[0x731] = 0; // remove jp nz,4238
- rom[0x732] = 0;
- rom[0x733] = 0;
-
- rom[0x0e9] = 0x3a; // remove call 2CCD
-
- rom[0x747] = 0xc3; // skip protection checking
- rom[0x748] = 0x56;
- rom[0x749] = 0x07;
-}
-
-void route16_state::init_route16c()
-{
- save_item(NAME(m_protection_data));
- // hack out the protection
- u8 *rom = memregion("cpu1")->base();
- rom[0x0e9] = 0x3a; // remove call 2CD8
-
- rom[0x754] = 0xc3; // skip protection checking
- rom[0x755] = 0x63;
- rom[0x756] = 0x07;
-}
-
-void route16_state::route16(machine_config &config)
-{
- /* basic machine hardware */
- Z80(config, m_cpu1, 2500000); /* 10MHz / 4 = 2.5MHz */
- m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::route16_cpu1_map);
- m_cpu1->set_addrmap(AS_IO, &route16_state::cpu1_io_map);
- m_cpu1->set_vblank_int("screen", FUNC(route16_state::irq0_line_hold));
-
- Z80(config, m_cpu2, 2500000); /* 10MHz / 4 = 2.5MHz */
- m_cpu2->set_addrmap(AS_PROGRAM, &route16_state::route16_cpu2_map);
-
- /* video hardware */
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_size(256, 256);
- m_screen->set_visarea(0, 256-1, 0, 256-1);
- m_screen->set_refresh_hz(57);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
- m_screen->set_screen_update(FUNC(route16_state::screen_update_route16));
-
- PALETTE(config, m_palette, palette_device::RGB_3BIT);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- AY8910(config, "ay8910", 10000000/8).add_route(ALL_OUTPUTS, "speaker", 0.5);
-}
-
-
-void route16_state::routex(machine_config &config)
-{
- route16(config);
-
- /* basic machine hardware */
- m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::routex_cpu1_map);
-}
-
-
-void route16_state::stratvox(machine_config &config)
-{
- route16(config);
-
- /* basic machine hardware */
- m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::stratvox_cpu1_map);
- m_cpu2->set_addrmap(AS_PROGRAM, &route16_state::stratvox_cpu2_map);
-
- /* video hardware */
- m_screen->set_screen_update(FUNC(route16_state::screen_update_jongpute));
-
- /* sound hardware */
- subdevice<ay8910_device>("ay8910")->port_a_write_callback().set(FUNC(route16_state::stratvox_sn76477_w)); /* SN76477 commands (not used in Route 16?) */
-
- SN76477(config, m_sn);
- m_sn->set_noise_params(RES_K(47), RES_K(150), CAP_U(0.001));
- m_sn->set_decay_res(RES_M(3.3));
- m_sn->set_attack_params(CAP_U(1), RES_K(4.7));
- m_sn->set_amp_res(RES_K(200));
- m_sn->set_feedback_res(RES_K(55));
- m_sn->set_vco_params(5.0 * 2/ (2 + 10), CAP_U(0.022), RES_K(100));
- m_sn->set_pitch_voltage(5.0);
- m_sn->set_slf_params(CAP_U(1.0), RES_K(75));
- m_sn->set_oneshot_params(CAP_U(2.2), RES_K(4.7));
- m_sn->set_vco_mode(0);
- m_sn->set_mixer_params(0, 0, 0);
- m_sn->set_envelope_params(0, 0);
- m_sn->set_enable(1);
- m_sn->add_route(ALL_OUTPUTS, "speaker", 0.5);
-
- DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-}
-
-void route16_state::speakres(machine_config &config)
-{
- stratvox(config);
-
- /* basic machine hardware */
- m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::speakres_cpu1_map);
-
- MCFG_MACHINE_START_OVERRIDE(route16_state, speakres)
-}
-
-void route16_state::spacecho(machine_config &config)
-{
- speakres(config);
-
- /* basic machine hardware */
- m_cpu2->set_periodic_int(FUNC(route16_state::irq0_line_hold), attotime::from_hz(48*60));
-}
-
-void route16_state::jongpute(machine_config &config)
-{
- route16(config);
- m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::jongpute_cpu1_map);
- m_cpu1->set_addrmap(AS_IO, address_map_constructor());
-
- MCFG_MACHINE_START_OVERRIDE(route16_state, jongpute)
-
- /* video hardware */
- m_screen->set_screen_update(FUNC(route16_state::screen_update_jongpute));
-
- PALETTE(config.replace(), m_palette, palette_device::BGR_3BIT);
-}
-
-
-
-/*************************************
- *
- * ROM definitions
- *
- *************************************/
-
- ROM_START( route16 )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "tvg54.a0", 0x0000, 0x0800, CRC(aef9ffc1) SHA1(178d23e4963336ded93c13cb17940a4ae98270c5) )
- ROM_LOAD( "tvg55.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )
- ROM_LOAD( "tvg56.a2", 0x1000, 0x0800, CRC(1065a468) SHA1(4a707a42fb5a718043c173cb98ff3523eb274ccc) )
- ROM_LOAD( "tvg57.a3", 0x1800, 0x0800, CRC(0b1987f3) SHA1(9b8abd6ec1ae15ca0d5e4de6b8a7ebf6c929d767) )
- ROM_LOAD( "tvg58.a4", 0x2000, 0x0800, CRC(f67d853a) SHA1(7479e84082e78f8670cc50858ce6a006d3063413) )
- ROM_LOAD( "tvg59.a5", 0x2800, 0x0800, CRC(d85cf758) SHA1(5af21250ee44ab1a43b844ede5a777a3d33b78b5) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "tvg60.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
- ROM_LOAD( "tvg61.b1", 0x0800, 0x0800, CRC(2b326cf9) SHA1(c6602a9440a982c39f5836c6ab72283b6f9241be) )
- ROM_LOAD( "tvg62.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
- ROM_LOAD( "tvg63.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "mb7052.59", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "mb7052.61", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( route16c )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "route16.a0", 0x0000, 0x0800, CRC(8f9101bd) SHA1(b2c0156d41e295282387fb85fc272b031a6d1b64) )
- ROM_LOAD( "route16.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )
- ROM_LOAD( "route16.a2", 0x1000, 0x0800, CRC(1065a468) SHA1(4a707a42fb5a718043c173cb98ff3523eb274ccc) )
- ROM_LOAD( "route16.a3", 0x1800, 0x0800, CRC(0b1987f3) SHA1(9b8abd6ec1ae15ca0d5e4de6b8a7ebf6c929d767) )
- ROM_LOAD( "route16.a4", 0x2000, 0x0800, CRC(f67d853a) SHA1(7479e84082e78f8670cc50858ce6a006d3063413) )
- ROM_LOAD( "route16.a5", 0x2800, 0x0800, CRC(d85cf758) SHA1(5af21250ee44ab1a43b844ede5a777a3d33b78b5) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "route16.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
- ROM_LOAD( "route16.b1", 0x0800, 0x0800, CRC(2b326cf9) SHA1(c6602a9440a982c39f5836c6ab72283b6f9241be) )
- ROM_LOAD( "route16.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
- ROM_LOAD( "route16.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( route16a )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "vg-54", 0x0000, 0x0800, CRC(0c966319) SHA1(2f57e9a30dab864bbee2ccb0107c1b4212c5abaf) )
- ROM_LOAD( "vg-55", 0x0800, 0x0800, CRC(a6a8c212) SHA1(a4a695d401b1e495c863c6938296a99592df0e7d) )
- ROM_LOAD( "vg-56", 0x1000, 0x0800, CRC(5c74406a) SHA1(f106c27da6cac597afbabdef3ec7fa7d203905b0) )
- ROM_LOAD( "vg-57", 0x1800, 0x0800, CRC(313e68ab) SHA1(01fa83898123eb92a14bffc6fe774e00b083e86c) )
- ROM_LOAD( "vg-58", 0x2000, 0x0800, CRC(40824e3c) SHA1(bc157e6babf00d2119b389fdb9d5822e1c764f51) )
- ROM_LOAD( "vg-59", 0x2800, 0x0800, CRC(9313d2c2) SHA1(e08112f44ca454820752800d8b3b6408b73a4284) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "route16.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
- ROM_LOAD( "vg-61", 0x0800, 0x0800, CRC(b216c88c) SHA1(d011ef9f3727f87ae3482e271a0c2496f76036b4) )
- ROM_LOAD( "route16.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
- ROM_LOAD( "route16.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( route16bl )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "rt16.0", 0x0000, 0x0800, CRC(b1f0f636) SHA1(f21915ed40ebdf64970fb7e3cd8071ebfc4aa0b5) )
- ROM_LOAD( "rt16.1", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
- ROM_LOAD( "rt16.2", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
- ROM_LOAD( "rt16.3", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
- ROM_LOAD( "rt16.4", 0x2000, 0x0800, CRC(6dcaf8c4) SHA1(27d84cc29f2b75280678e9c77f270ee39af50228) )
- ROM_LOAD( "rt16.5", 0x2800, 0x0800, CRC(63d7b05b) SHA1(d1e3473be283c92063674b9e69575081115bc456) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "rt16.6", 0x0000, 0x0800, CRC(fef605f3) SHA1(bfbffa0ded3e285c034f0ad832864021ef3f2256) )
- ROM_LOAD( "rt16.7", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
- ROM_LOAD( "rt16.8", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
- ROM_LOAD( "rt16.9", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-
-
-ROM_START( routex )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "routex01.a0", 0x0000, 0x0800, CRC(99b500e7) SHA1(2561c04a1425d7ac3309faf29fcfde63a0cda4da) )
- ROM_LOAD( "rt16.1", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
- ROM_LOAD( "rt16.2", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
- ROM_LOAD( "rt16.3", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
- ROM_LOAD( "routex05.a4", 0x2000, 0x0800, CRC(2fef7653) SHA1(ba3477da249ca402d096704e57ea638fde6abe9c) )
- ROM_LOAD( "routex06.a5", 0x2800, 0x0800, CRC(a39ef648) SHA1(866095d9880b60b01f7ca66b332f5f6c4b41a5ac) )
- ROM_LOAD( "routex07.a6", 0x3000, 0x0800, CRC(89f80c1c) SHA1(dff37e0f2446a99890135891c59dc501866a25cc) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "routex11.b0", 0x0000, 0x0800, CRC(b51edd1d) SHA1(1ca10afd6851875c98b1d29aee457234c20ce0bf) )
- ROM_LOAD( "rt16.7", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
- ROM_LOAD( "rt16.8", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
- ROM_LOAD( "rt16.9", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( speakres )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "speakres.1", 0x0000, 0x0800, CRC(6026e4ea) SHA1(77975620b489f10e5b5de834e812c2802315e889) )
- ROM_LOAD( "speakres.2", 0x0800, 0x0800, CRC(93f0d4da) SHA1(bf3d2931d12a436bb4f0d0556806008ca722f070) )
- ROM_LOAD( "speakres.3", 0x1000, 0x0800, CRC(a3874304) SHA1(ca243364d077fa70d6c46b950ba6666617a56cc2) )
- ROM_LOAD( "speakres.4", 0x1800, 0x0800, CRC(f484be3a) SHA1(5befa61c5f3a3cde3d7d6cae2130021288ed8454) )
- ROM_LOAD( "speakres.5", 0x2000, 0x0800, CRC(61b12a67) SHA1(a1a636ecde16ffdc9f0bb460bd12f945ec66d36f) )
- ROM_LOAD( "speakres.6", 0x2800, 0x0800, CRC(220e0ab2) SHA1(9fb4abf50ff28995cb1f7ba807e15eb87127f520) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "speakres.7", 0x0000, 0x0800, CRC(d417be13) SHA1(6f1f76a911579b49bb0e1992296e7c3acf2bd517) )
- ROM_LOAD( "speakres.8", 0x0800, 0x0800, CRC(52485d60) SHA1(28b708a71d16428d1cd58f3b7aa326ccda85533c) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( speakresb )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "hmi1.27", 0x0000, 0x0800, CRC(6026e4ea) SHA1(77975620b489f10e5b5de834e812c2802315e889) )
- ROM_LOAD( "hmi2.28", 0x0800, 0x0800, CRC(93f0d4da) SHA1(bf3d2931d12a436bb4f0d0556806008ca722f070) )
- ROM_LOAD( "hmi3.29", 0x1000, 0x0800, CRC(a3874304) SHA1(ca243364d077fa70d6c46b950ba6666617a56cc2) )
- ROM_LOAD( "hmi4.30", 0x1800, 0x0800, CRC(f484be3a) SHA1(5befa61c5f3a3cde3d7d6cae2130021288ed8454) )
- ROM_LOAD( "hmi5.31", 0x2000, 0x0800, CRC(aa2aaabe) SHA1(eae34bc16ffa1c8dba966c367fae793c52e0cb61) )
- ROM_LOAD( "hmi6.32", 0x2800, 0x0800, CRC(220e0ab2) SHA1(9fb4abf50ff28995cb1f7ba807e15eb87127f520) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "hmi.33", 0x0000, 0x0800, CRC(beafe7c5) SHA1(058d08b4ded46f71053af6bec5e476e21f240608) )
- ROM_LOAD( "hmi.34", 0x0800, 0x0800, CRC(12ecd87b) SHA1(a279711f2a12574126aa626ae2c1acd45660231c) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* 6301 proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "hmi.62", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "hmi.64", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( stratvox )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "ls01.bin", 0x0000, 0x0800, CRC(bf4d582e) SHA1(456f37e16d037a30dc4c1c460ebf9a248bf1a57c) )
- ROM_LOAD( "ls02.bin", 0x0800, 0x0800, CRC(16739dd4) SHA1(cd1f7d1b52ca1ab458d11b969f4f1f5af3ec7353) )
- ROM_LOAD( "ls03.bin", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
- ROM_LOAD( "ls04.bin", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
- ROM_LOAD( "ls05.bin", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
- ROM_LOAD( "ls06.bin", 0x2800, 0x0800, CRC(07a907a7) SHA1(0c41eac01ac9fd67ef19752c47414c4bd90324b4) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "ls07.bin", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) )
- ROM_LOAD( "ls08.bin", 0x0800, 0x0800, CRC(35b753fc) SHA1(179e21f531e8be507f1754159590c111be1b44ff) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( stratvoxa )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "sv-1", 0x0000, 0x0800, CRC(bf4d582e) SHA1(456f37e16d037a30dc4c1c460ebf9a248bf1a57c) )
- ROM_LOAD( "sv-2", 0x0800, 0x0800, CRC(16739dd4) SHA1(cd1f7d1b52ca1ab458d11b969f4f1f5af3ec7353) )
- ROM_LOAD( "sv-3", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
- ROM_LOAD( "sv-4", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
- ROM_LOAD( "sv-5", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
- ROM_LOAD( "sv-6", 0x2800, 0x0800, CRC(07a907a7) SHA1(0c41eac01ac9fd67ef19752c47414c4bd90324b4) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "sv-7", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) )
- ROM_LOAD( "sv-8", 0x0800, 0x0800, CRC(9b2377e0) SHA1(caff09f280701204dbd0dcd093622ed42ceb57c4) ) // Female Voice
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( stratvoxb )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "j0-1", 0x0000, 0x0800, CRC(93c78274) SHA1(d7c8b5a064eaf96bcfd261b9857f06249477f6b8) )
- ROM_LOAD( "j0-2", 0x0800, 0x0800, CRC(93b2b02d) SHA1(f08772d581f9825976199f39cb6d85fb3aa83db0) )
- ROM_LOAD( "j0-3", 0x1000, 0x0800, CRC(655facb5) SHA1(1ffb1ed65c358846b3de4ead74e86f94ed6ff9df) )
- ROM_LOAD( "j0-4", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) ) /* Same as ls04.bin of stratvox */
- ROM_LOAD( "j0-5", 0x2000, 0x0800, CRC(9d2178d9) SHA1(7b27dbb2add2c9dda4526c6f1bf52307fe2c6335) )
- ROM_LOAD( "j0-6", 0x2800, 0x0800, CRC(79118ffc) SHA1(d4659f1773e9d55d81185d6c59881c08528e2ab6) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "b0-a", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) ) /* Same as ls07.bin of stratvox */
- ROM_LOAD( "j0-a", 0x0800, 0x0800, CRC(3416a830) SHA1(9cbe773968e20455be3e107b29cb8d4dc38632a9) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( spacecho )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "rom.a0", 0x0000, 0x0800, CRC(40d74dce) SHA1(891d7fde1d4b0b66c38fa7f8933480e201c68113) )
- ROM_LOAD( "rom.a1", 0x0800, 0x0800, CRC(a5f0a34f) SHA1(359e7a9954dedb464f7456cd071db77b2219ab2c) )
- ROM_LOAD( "rom.a2", 0x1000, 0x0800, CRC(cbbb3acb) SHA1(3dc71683f31da39a544382b463ece39cca8124b3) )
- ROM_LOAD( "rom.a3", 0x1800, 0x0800, CRC(311050ca) SHA1(ed4a5cb7ec0306654178dae8f30b39b9c8db0ce3) )
- ROM_LOAD( "rom.a4", 0x2000, 0x0800, CRC(28943803) SHA1(4904e6d092494bfca064d25d094ab9e9049fa9ca) )
- ROM_LOAD( "rom.a5", 0x2800, 0x0800, CRC(851c9f28) SHA1(c7bb4e25b74eb71e8b394214f9cbd95f59a1fa58) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "rom.b0", 0x0000, 0x0800, CRC(db45689d) SHA1(057a8dc2629f57fdeebb6262de2bdd78b4e66dca) )
- ROM_LOAD( "rom.b2", 0x1000, 0x0800, CRC(1e074157) SHA1(cb2073415aff7804ac85e2137bef2005bf6cf239) )
- ROM_LOAD( "rom.b3", 0x1800, 0x0800, CRC(d50a8b20) SHA1(d733fa327d2e7dfe08c84015c6c326ed8ab39e3d) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-/*
-rom.b0 cb7.5b IDENTICAL
-rom.a5 cb6.2.3t IDENTICAL
-rom.a2 c3.4.5t IDENTICAL
-rom.a1 c2.5t IDENTICAL
-rom.a4 cb5.3t IDENTICAL
-rom.b3 cb10.3b IDENTICAL
-rom.b2 cb9.4b IDENTICAL
-rom.a3 c4.4t IDENTICAL
-rom.a0 c11.5.6t 99.853516%
- mb7052.6k NO MATCH
- mb7052.6m NO MATCH
-
-Only 3 bytes different between rom.a0 (spacecho) and c11.5.6t (spacecho2), at offset 0x8b.
-
-Spacecho: 0x008b: call $2929 cd 29 29
-
-Spacech2: 0x008b: im 1 ed 56
- 0x008d: nop 00
-
-So... spacecho2 is avoiding to enter the sub at $2929.
-
-*/
-ROM_START( spacecho2 )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "c11.5.6t", 0x0000, 0x0800, CRC(90637f25) SHA1(820d2f326a5d8d0a04a0fca46b035624dfd7222c) ) // 3 bytes different at 0x8e
- ROM_LOAD( "c2.5t", 0x0800, 0x0800, CRC(a5f0a34f) SHA1(359e7a9954dedb464f7456cd071db77b2219ab2c) )
- ROM_LOAD( "c3.4.5t", 0x1000, 0x0800, CRC(cbbb3acb) SHA1(3dc71683f31da39a544382b463ece39cca8124b3) )
- ROM_LOAD( "c4.4t", 0x1800, 0x0800, CRC(311050ca) SHA1(ed4a5cb7ec0306654178dae8f30b39b9c8db0ce3) )
- ROM_LOAD( "cb5.3t", 0x2000, 0x0800, CRC(28943803) SHA1(4904e6d092494bfca064d25d094ab9e9049fa9ca) )
- ROM_LOAD( "cb6.2.3t", 0x2800, 0x0800, CRC(851c9f28) SHA1(c7bb4e25b74eb71e8b394214f9cbd95f59a1fa58) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "cb7.5b", 0x0000, 0x0800, CRC(db45689d) SHA1(057a8dc2629f57fdeebb6262de2bdd78b4e66dca) )
- ROM_LOAD( "cb9.4b", 0x1000, 0x0800, CRC(1e074157) SHA1(cb2073415aff7804ac85e2137bef2005bf6cf239) )
- ROM_LOAD( "cb10.3b", 0x1800, 0x0800, CRC(d50a8b20) SHA1(d733fa327d2e7dfe08c84015c6c326ed8ab39e3d) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* mb7052 proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "mb7052.6k", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "mb7052.6m", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-/*
-Speak & Help
-
-Single layer re-engineered pcb, very tidy and working.
-
-All dumps are in label.location format, see the two
-included photos for one of the pcb with and without the
-speech? daughterboard plugged in for verification.
-
-Roms are all mitsubishi 2716, proms are fujitsu MB7052.
-
-https://youtu.be/YuWZ8hZ-MtY
-Unique speech, as detailed in video, seems will require additional work to emulate correctly.
-*/
-
-ROM_START( speakhlp )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "b1.56t", 0x0000, 0x0800, CRC(ce009d85) SHA1(d8683d358ff04ffa0eef574e42a8f3885f538ecc) )
- ROM_LOAD( "b2.5t", 0x0800, 0x0800, CRC(935219f1) SHA1(83d41eb8af6dc5d44d578c01c123872e75fa927e) )
- ROM_LOAD( "b3.45t", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
- ROM_LOAD( "b4.4t", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
- ROM_LOAD( "b5.3t", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
- ROM_LOAD( "b6.23t", 0x2800, 0x0800, CRC(a657dd4b) SHA1(4f6b85ccf5449d08f5c7f5dc6f59d0df276d9994) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "b07.5b", 0x0000, 0x0800, CRC(c9317d91) SHA1(b509ce371d89ad39acaefea732eb955a11df1ed9) )
- ROM_LOAD( "b09.4b", 0x1000, 0x0800, CRC(29310c32) SHA1(d5d5953111d81661ab98c950d94e5912fc907445) )
- ROM_LOAD( "b010.3b", 0x1800, 0x0800, CRC(4d567bc9) SHA1(6bc05213042d9069a054b2ae044f04938a9bfe06) )
-
- ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "prom.6k", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
- ROM_LOAD( "prom.6m", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
-ROM_END
-
-ROM_START( ttmahjng )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "ju04", 0x0000, 0x1000, CRC(fe7c693a) SHA1(be0630557e0bcd9ec2e9542cc4a4d947889ec57a) )
- ROM_LOAD( "ju05", 0x1000, 0x1000, CRC(985723d3) SHA1(9d7499c48cfc242875a95d01459b8f3252ea41bc) )
- ROM_LOAD( "ju06", 0x2000, 0x1000, CRC(2cd69bc8) SHA1(a0a55c972291d043da9f76faf551dba790d5d103) )
- ROM_LOAD( "ju07", 0x3000, 0x1000, CRC(30e8ec63) SHA1(9c6a2b5e436b5e469c15f04c557839b6f07eb22e) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "ju01", 0x0000, 0x0800, CRC(0f05ca3c) SHA1(6af547b2ec4f69069b4ad62d96d109ec0105dd8b) )
- ROM_LOAD( "ju02", 0x0800, 0x0800, CRC(c1ffeceb) SHA1(18cf337ef2c9b51f1e9e4f08743225755c4ff420) )
- ROM_LOAD( "ju08", 0x1000, 0x0800, CRC(2dcc76b5) SHA1(1732bcf5492dda34425681e7f28775ad7a5e04af) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- /* The upper 128 bytes are 0's, used by the hardware to blank the display */
- ROM_LOAD( "ju03", 0x0000, 0x0100, CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
- ROM_LOAD( "ju09", 0x0100, 0x0100, CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
-ROM_END
-
-ROM_START( jongpute )
- ROM_REGION( 0x10000, "cpu1", 0 )
- ROM_LOAD( "j2", 0x0000, 0x1000, CRC(6690b6a4) SHA1(ab79faa1ed84d766eee652f3cbdc0296ddb80fe2) )
- ROM_LOAD( "j3", 0x1000, 0x1000, CRC(985723d3) SHA1(9d7499c48cfc242875a95d01459b8f3252ea41bc) )
- ROM_LOAD( "j4", 0x2000, 0x1000, CRC(f35ab1e6) SHA1(5b76d05ab9d8b2a88b408cf9e9297ec31a8de33a) )
- ROM_LOAD( "j5", 0x3000, 0x1000, CRC(77074618) SHA1(73329e945ea578bce1d04c80e09929bfb0e9875b) )
-
- ROM_REGION( 0x10000, "cpu2", 0 )
- ROM_LOAD( "j6", 0x0000, 0x1000, CRC(54b349b0) SHA1(e5620b85a24a35d995860c7121f1ddf16f7ea168) )
-
- /* maybe used for pseudo sampling voice, "reach", that is not emulated yet */
- ROM_REGION( 0x1000, "unknown", 0 )
- ROM_LOAD( "j1", 0x0000, 0x1000, CRC(6d6ba272) SHA1(a4efd8daddbbf595ee46484578f544d7ed84e090) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- /* not dumped, but ttmahjng roms seem to be compatible completely */
- ROM_LOAD( "ju03", 0x0000, 0x0100, BAD_DUMP CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
- ROM_LOAD( "ju09", 0x0100, 0x0100, BAD_DUMP CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
-ROM_END
-
-
-/*************************************
- *
- * Protection handling
- *
- *************************************/
-
-READ8_MEMBER(route16_state::routex_prot_read)
-{
- if (m_cpu1->pc() == 0x2f) return 0xfb;
-
- logerror ("cpu '%s' (PC=%08X): unmapped prot read\n", m_cpu1->tag(), m_cpu1->pc());
- return 0x00;
-}
-
-// never called, see notes.
-READ8_MEMBER(route16_state::route16_prot_read)
-{
- m_protection_data++;
- return (1 << ((m_protection_data >> 1) & 7));
-}
-
-
-/*************************************
- *
- * Drivers specific initialization
- *
- *************************************/
-
-
-
-
-
-
-/*************************************
- *
- * Game drivers
- *
- *************************************/
-
-GAME( 1981, route16, 0, route16, route16, route16_state, init_route16, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, route16a, route16, route16, route16, route16_state, init_route16a, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, route16c, route16, route16, route16, route16_state, init_route16c, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (set 3, bootleg?)", MACHINE_SUPPORTS_SAVE ) // similar to set 1 but with some protection removed?
-GAME( 1981, route16bl,route16, route16, route16, route16_state, empty_init, ROT270, "bootleg (Leisure and Allied)", "Route 16 (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, routex, route16, routex, route16, route16_state, empty_init, ROT270, "bootleg", "Route X (bootleg)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1980, speakres, 0, speakres, speakres, route16_state, empty_init, ROT270, "Sun Electronics", "Speak & Rescue", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, speakresb,speakres, speakres, speakres, route16_state, empty_init, ROT270, "bootleg", "Speak & Rescue (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, stratvox, speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "Sun Electronics (Taito license)", "Stratovox (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, stratvoxa,speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "Sun Electronics (Taito license)", "Stratovox (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, stratvoxb,speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "bootleg", "Stratovox (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, spacecho, speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg (Gayton Games)", "Space Echo (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, spacecho2,speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg (Gayton Games)", "Space Echo (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, speakhlp, speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg", "Speak & Help", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
-
-GAME( 1981, jongpute, 0, jongpute, jongpute, route16_state, empty_init, ROT0, "Alpha Denshi Co.", "Jongputer", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) // sampling voice is not emulated, bug with colors makes tile recognition difficult
-GAME( 1981, ttmahjng, jongpute, jongpute, jongpute, route16_state, empty_init, ROT0, "Alpha Denshi Co. (Taito license)", "T.T Mahjong", MACHINE_SUPPORTS_SAVE )