QuarterArcade Coin-Op Tech Net

Quick Nav: # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Coin-Op : Arcade : Stratovox : VM Driver Source

Source Listing


     1: /***************************************************************************
     2: 
     3:  Route 16/Stratovox memory map (preliminary)
     4: 
     5:  driver by Zsolt Vasvari
     6: 
     7:  Notes: Route 16 and Stratovox use identical hardware with the following
     8:         exceptions: Stratovox has a DAC for voice.
     9:         Route 16 has the added ability to turn off each bitplane indiviaually.
    10:         This looks like an afterthought, as one of the same bits that control
    11:         the palette selection is doubly utilized as the bitmap enable bit.
    12: 
    13:  Space Echo:
    14:         when all astronauts are taken the game over tune ends with 5 bad notes,
    15:         this appears to be a bug in the rom from a changed instruction at 2EB3.
    16: 
    17:         service mode shows a garbled screen as most of the code for it has been
    18:         replaced by other routines, however the sound tests still work. it's
    19:         possible that the service switch isn't connected on the real hardware.
    20: 
    21:         the game hangs if it doesn't pass the startup test, a best guess is implemented
    22:         rather than patching out the test. code for the same test is in stratvox but
    23:         isn't called, speakres has a very similar test but doesn't care about the result.
    24: 
    25:         interrupts per frame for cpu1 is a best guess based on how stratvox uses the DAC,
    26:         writing up to 195 times per frame with each byte from the rom written 4 times.
    27:         spacecho writes one byte per interrupt so 195/4 or 48 is used. a lower number
    28:         increases the chance of a sound interrupting itself, which for most sounds
    29:         is buggy and causes the game to freeze until the first sound completes.
    30: 
    31:  CPU1
    32: 
    33:  0000-2fff ROM
    34:  4000-43ff Shared RAM
    35:  8000-bfff Video RAM
    36: 
    37:  I/O Read
    38: 
    39:  48xx IN0 - DIP Switches
    40:  50xx IN1 - Input Port 1
    41:  58xx IN2 - Input Port 2
    42:  60xx IN3 - Unknown (Speak & Rescue/Space Echo only)
    43: 
    44:  I/O Write
    45: 
    46:  48xx OUT0 - D0-D4 color select for VRAM 0
    47:              D5    coin counter
    48:  50xx OUT1 - D0-D4 color select for VRAM 1
    49:              D5    VIDEO I/II (Flip Screen)
    50:  58xx OUT2 - Unknown (Speak & Rescue/Space Echo only)
    51: 
    52:  I/O Port Write
    53: 
    54:  6800 AY-8910 Write Port
    55:  6900 AY-8910 Control Port
    56: 
    57: 
    58:  CPU2
    59: 
    60:  0000-1fff ROM
    61:  4000-43ff Shared RAM
    62:  8000-bfff Video RAM
    63: 
    64:  I/O Write
    65: 
    66:  2800      DAC output (Stratovox only)
    67: 
    68:  ***************************************************************************/
    69: 
    70: #include "driver.h" 
    71: 
    72: extern unsigned char *route16_sharedram;
    73: extern unsigned char *route16_videoram1;
    74: extern unsigned char *route16_videoram2;
    75: extern size_t route16_videoram_size;
    76: extern int route16_hardware;
    77: 
    78: DRIVER_INIT( route16 );
    79: DRIVER_INIT( route16b );
    80: DRIVER_INIT( stratvox );
    81: PALETTE_INIT( route16 );
    82: VIDEO_START( route16 );
    83: WRITE_HANDLER( route16_out0_w );
    84: WRITE_HANDLER( route16_out1_w );
    85: WRITE_HANDLER( route16_videoram1_w );
    86: WRITE_HANDLER( route16_videoram2_w );
    87: READ_HANDLER( route16_videoram1_r );
    88: READ_HANDLER( route16_videoram2_r );
    89: WRITE_HANDLER( route16_sharedram_w );
    90: READ_HANDLER( route16_sharedram_r );
    91: VIDEO_UPDATE( route16 );
    92: WRITE_HANDLER( stratvox_sn76477_w );
    93: READ_HANDLER ( speakres_in3_r );
    94: WRITE_HANDLER ( speakres_out2_w );
    95: 
    96: static MEMORY_READ_START( cpu1_readmem )
    97: 	{ 0x0000, 0x2fff, MRA_ROM },
    98:   /*{ 0x3000, 0x3001, MRA_NOP },	 Route 16 protection device */
    99: 	{ 0x4000, 0x43ff, route16_sharedram_r },
   100: 	{ 0x4800, 0x4800, input_port_0_r },
   101: 	{ 0x5000, 0x5000, input_port_1_r },
   102: 	{ 0x5800, 0x5800, input_port_2_r },
   103: 	{ 0x8000, 0xbfff, route16_videoram1_r },
   104: MEMORY_END
   105: 
   106: static MEMORY_WRITE_START( cpu1_writemem )
   107: 	{ 0x0000, 0x2fff, MWA_ROM },
   108:   /*{ 0x3001, 0x3001, MWA_NOP },	 Route 16 protection device */
   109: 	{ 0x4000, 0x43ff, route16_sharedram_w, &route16_sharedram },
   110: 	{ 0x4800, 0x4800, route16_out0_w },
   111: 	{ 0x5000, 0x5000, route16_out1_w },
   112: 	{ 0x8000, 0xbfff, route16_videoram1_w, &route16_videoram1, &route16_videoram_size },
   113: 	{ 0xc000, 0xc000, MWA_RAM }, // Stratvox has an off by one error
   114:                                  // when clearing the screen
   115: MEMORY_END
   116: 
   117: static MEMORY_READ_START( altcpu1_readmem )
   118: 	{ 0x0000, 0x2fff, MRA_ROM },
   119: 	{ 0x4000, 0x43ff, route16_sharedram_r },
   120: 	{ 0x4800, 0x4800, input_port_0_r },
   121: 	{ 0x5000, 0x5000, input_port_1_r },
   122: 	{ 0x5800, 0x5800, input_port_2_r },
   123: 	{ 0x6000, 0x6000, speakres_in3_r },
   124: 	{ 0x8000, 0xbfff, route16_videoram1_r },
   125: MEMORY_END
   126: 
   127: static MEMORY_WRITE_START( altcpu1_writemem )
   128: 	{ 0x0000, 0x2fff, MWA_ROM },
   129: 	{ 0x4000, 0x43ff, route16_sharedram_w, &route16_sharedram },
   130: 	{ 0x4800, 0x4800, route16_out0_w },
   131: 	{ 0x5000, 0x5000, route16_out1_w },
   132: 	{ 0x5800, 0x5800, speakres_out2_w },
   133: 	{ 0x8000, 0xbfff, route16_videoram1_w, &route16_videoram1, &route16_videoram_size },
   134: 	{ 0xc000, 0xc000, MWA_RAM }, // Speak & Rescue/Space Echo have same off by one error
   135: MEMORY_END
   136: 
   137: static PORT_WRITE_START( cpu1_writeport )
   138: 	{ 0x6800, 0x6800, AY8910_write_port_0_w },
   139: 	{ 0x6900, 0x6900, AY8910_control_port_0_w },
   140: PORT_END
   141: 
   142: static MEMORY_READ_START( cpu2_readmem )
   143: 	{ 0x0000, 0x1fff, MRA_ROM },
   144: 	{ 0x4000, 0x43ff, route16_sharedram_r },
   145: 	{ 0x8000, 0xbfff, route16_videoram2_r },
   146: MEMORY_END
   147: 
   148: static MEMORY_WRITE_START( cpu2_writemem )
   149: 	{ 0x0000, 0x1fff, MWA_ROM },
   150: 	{ 0x2800, 0x2800, DAC_0_data_w }, // Not used by Route 16
   151: 	{ 0x4000, 0x43ff, route16_sharedram_w },
   152: 	{ 0x8000, 0xbfff, route16_videoram2_w, &route16_videoram2 },
   153: 	{ 0xc000, 0xc1ff, MWA_NOP }, // Route 16 sometimes writes outside of
   154: MEMORY_END
   155: 
   156: 
   157: INPUT_PORTS_START( route16 )
   158: 	PORT_START      /* DSW 1 */
   159: 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
   160: 	PORT_DIPSETTING(    0x00, "3" )
   161: 	PORT_DIPSETTING(    0x01, "5" )
   162: 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) // Doesn't seem to
   163: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )                    // be referenced
   164: 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
   165: 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // Doesn't seem to
   166: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )                    // be referenced
   167: 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
   168: 	PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) )
   169: 	PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
   170: 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
   171: 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )
   172: //	PORT_DIPSETTING(    0x18, DEF_STR( 2C_1C ) ) // Same as 0x08
   173: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
   174: 	PORT_DIPSETTING(    0x20, DEF_STR( Upright ) )
   175: 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
   176: 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
   177: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   178: 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
   179: 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
   180: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   181: 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
   182: 
   183: 	PORT_START      /* Input Port 1 */
   184: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
   185: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY )
   186: 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY )
   187: 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY )
   188: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
   189: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   190: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
   191: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
   192: 
   193: 	PORT_START      /* Input Port 2 */
   194: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
   195: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
   196: 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
   197: 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
   198: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
   199: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   200: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
   201: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
   202: INPUT_PORTS_END
   203: 
   204: 
   205: 
   206: INPUT_PORTS_START( stratvox )
   207: 	PORT_START      /* IN0 */
   208: 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
   209: 	PORT_DIPSETTING(    0x00, "3" )
   210: 	PORT_DIPSETTING(    0x01, "5" )
   211: 	PORT_DIPNAME( 0x02, 0x00, "Replenish Astronouts" )
   212: 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
   213: 	PORT_DIPSETTING(    0x02, DEF_STR( Yes ) )
   214: 	PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
   215: 	PORT_DIPSETTING(    0x00, "2" )
   216: 	PORT_DIPSETTING(    0x04, "3" )
   217: 	PORT_DIPSETTING(    0x08, "4" )
   218: 	PORT_DIPSETTING(    0x0c, "5" )
   219: 	PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" )
   220: 	PORT_DIPSETTING(    0x00, "Less Often" )
   221: 	PORT_DIPSETTING(    0x10, "More Often" )
   222: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
   223: 	PORT_DIPSETTING(    0x20, DEF_STR( Upright ) )
   224: 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
   225: 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
   226: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   227: 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
   228: 	PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
   229: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   230: 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
   231: 
   232: 	PORT_START      /* IN1 */
   233: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
   234: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
   235: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   236: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
   237: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   238: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
   239: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
   240: 
   241: 	PORT_START      /* IN2 */
   242: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
   243: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
   244: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   245: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
   246: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   247: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
   248: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
   249: INPUT_PORTS_END
   250: 
   251: INPUT_PORTS_START( speakres )
   252: 	PORT_START      /* IN0 */
   253: 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
   254: 	PORT_DIPSETTING(    0x00, "3" )
   255: 	PORT_DIPSETTING(    0x01, "4" )
   256: 	PORT_DIPSETTING(    0x02, "5" )
   257: 	PORT_DIPSETTING(    0x03, "6" )
   258: 	PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
   259: 	PORT_DIPSETTING(    0x00, "2" )
   260: 	PORT_DIPSETTING(    0x04, "3" )
   261: 	PORT_DIPSETTING(    0x08, "4" )
   262: 	PORT_DIPSETTING(    0x0c, "5" )
   263: 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) )
   264: 	PORT_DIPSETTING(    0x00, "5000" )
   265: 	PORT_DIPSETTING(    0x10, "8000" )
   266: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
   267: 	PORT_DIPSETTING(    0x20, DEF_STR( Upright ) )
   268: 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
   269: 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
   270: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   271: 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
   272: 	PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
   273: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   274: 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
   275: 
   276: 	PORT_START      /* IN1 */
   277: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
   278: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
   279: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   280: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
   281: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   282: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
   283: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
   284: 
   285: 	PORT_START      /* IN2 */
   286: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
   287: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
   288: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   289: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
   290: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   291: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
   292: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
   293: INPUT_PORTS_END
   294: 
   295: INPUT_PORTS_START( spacecho )
   296: 	PORT_START      /* IN0 */
   297: 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
   298: 	PORT_DIPSETTING(    0x00, "3" )
   299: 	PORT_DIPSETTING(    0x01, "5" )
   300: 	PORT_DIPNAME( 0x02, 0x00, "Replenish Astronouts" )
   301: 	PORT_DIPSETTING(    0x02, DEF_STR( No ) )
   302: 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
   303: 	PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" )
   304: 	PORT_DIPSETTING(    0x00, "2" )
   305: 	PORT_DIPSETTING(    0x04, "3" )
   306: 	PORT_DIPSETTING(    0x08, "4" )
   307: 	PORT_DIPSETTING(    0x0c, "5" )
   308: 	PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" )
   309: 	PORT_DIPSETTING(    0x00, "Less Often" )
   310: 	PORT_DIPSETTING(    0x10, "More Often" )
   311: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
   312: 	PORT_DIPSETTING(    0x20, DEF_STR( Upright ) )
   313: 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
   314: 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
   315: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   316: 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
   317: 	PORT_DIPNAME( 0x80, 0x00, "Demo Voices" )
   318: 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
   319: 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
   320: 
   321: 	PORT_START      /* IN1 */
   322: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
   323: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
   324: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   325: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
   326: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   327: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
   328: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
   329: 
   330: 	PORT_START      /* IN2 */
   331: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
   332: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
   333: 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
   334: 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
   335: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
   336: 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
   337: 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
   338: INPUT_PORTS_END
   339: 
   340: 
   341: static struct AY8910interface ay8910_interface =
   342: {
   343: 	1,	/* 1 chip */
   344: 	10000000/8,     /* 10MHz / 8 = 1.25MHz */
   345: 	{ 50 },
   346: 	{ 0 },
   347: 	{ 0 },
   348: 	{ stratvox_sn76477_w },  /* SN76477 commands (not used in Route 16?) */
   349: 	{ 0 }
   350: };
   351: 
   352: 
   353: static struct SN76477interface sn76477_interface =
   354: {
   355: 	1,	/* 1 chip */
   356: 	{ 50 },  /* mixing level   pin description		 */
   357: 	{ RES_K( 47)   },		/*	4  noise_res		 */
   358: 	{ RES_K(150)   },		/*	5  filter_res		 */
   359: 	{ CAP_U(0.001) },		/*	6  filter_cap		 */
   360: 	{ RES_M(3.3)   },		/*	7  decay_res		 */
   361: 	{ CAP_U(1.0)   },		/*	8  attack_decay_cap  */
   362: 	{ RES_K(4.7)   },		/* 10  attack_res		 */
   363: 	{ RES_K(200)   },		/* 11  amplitude_res	 */
   364: 	{ RES_K( 55)   },		/* 12  feedback_res 	 */
   365: 	{ 5.0*2/(2+10) },		/* 16  vco_voltage		 */
   366: 	{ CAP_U(0.022) },		/* 17  vco_cap			 */
   367: 	{ RES_K(100)   },		/* 18  vco_res			 */
   368: 	{ 5.0		   },		/* 19  pitch_voltage	 */
   369: 	{ RES_K( 75)   },		/* 20  slf_res			 */
   370: 	{ CAP_U(1.0)   },		/* 21  slf_cap			 */
   371: 	{ CAP_U(2.2)   },		/* 23  oneshot_cap		 */
   372: 	{ RES_K(4.7)   }		/* 24  oneshot_res		 */
   373: };
   374: 
   375: 
   376: static struct DACinterface dac_interface =
   377: {
   378: 	1,
   379: 	{ 50 }
   380: };
   381: 
   382: 
   383: static MACHINE_DRIVER_START( route16 )
   384: 
   385: 	/* basic machine hardware */
   386: 	MDRV_CPU_ADD_TAG("cpu1", Z80, 2500000)	/* 10MHz / 4 = 2.5MHz */
   387: 	MDRV_CPU_FLAGS(CPU_16BIT_PORT)
   388: 	MDRV_CPU_MEMORY(cpu1_readmem,cpu1_writemem)
   389: 	MDRV_CPU_PORTS(0,cpu1_writeport)
   390: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   391: 
   392: 	MDRV_CPU_ADD_TAG("cpu2", Z80, 2500000)	/* 10MHz / 4 = 2.5MHz */
   393: 	MDRV_CPU_MEMORY(cpu2_readmem,cpu2_writemem)
   394: 
   395: 	MDRV_FRAMES_PER_SECOND(57)
   396: 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)       /* frames per second, vblank duration */
   397: 
   398: 	/* video hardware */
   399: 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
   400: 	MDRV_SCREEN_SIZE(256, 256)
   401: 	MDRV_VISIBLE_AREA(0, 256-1, 0, 256-1)
   402: 	MDRV_PALETTE_LENGTH(8)
   403: 
   404: 	MDRV_PALETTE_INIT(route16)
   405: 	MDRV_VIDEO_START(route16)
   406: 	MDRV_VIDEO_UPDATE(route16)
   407: 
   408: 	/* sound hardware */
   409: 	MDRV_SOUND_ADD(AY8910, ay8910_interface)
   410: MACHINE_DRIVER_END
   411: 
   412: 
   413: static MACHINE_DRIVER_START( stratvox )
   414: 
   415: 	/* basic machine hardware */
   416: 	MDRV_IMPORT_FROM(route16)
   417: 
   418: 	/* sound hardware */
   419: 	MDRV_SOUND_ADD(SN76477, sn76477_interface)
   420: 	MDRV_SOUND_ADD(DAC, dac_interface)
   421: MACHINE_DRIVER_END
   422: 
   423: 
   424: static MACHINE_DRIVER_START( speakres )
   425: 
   426: 	/* basic machine hardware */
   427: 	MDRV_IMPORT_FROM(stratvox)
   428: 	MDRV_CPU_MODIFY("cpu1")
   429: 	MDRV_CPU_MEMORY(altcpu1_readmem,altcpu1_writemem)
   430: MACHINE_DRIVER_END
   431: 
   432: 
   433: static MACHINE_DRIVER_START( spacecho )
   434: 
   435: 	/* basic machine hardware */
   436: 	MDRV_IMPORT_FROM(speakres)
   437: 	MDRV_CPU_MODIFY("cpu2")
   438: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,48)
   439: MACHINE_DRIVER_END
   440: 
   441: 
   442: /***************************************************************************
   443: 
   444:   Game driver(s)
   445: 
   446: ***************************************************************************/
   447: 
   448: ROM_START( route16 )
   449: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )  // 64k for the first CPU
   450: 	ROM_LOAD( "route16.a0",   0x0000, 0x0800, CRC(8f9101bd) SHA1(b2c0156d41e295282387fb85fc272b031a6d1b64) )
   451: 	ROM_LOAD( "route16.a1",   0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )
   452: 	ROM_LOAD( "route16.a2",   0x1000, 0x0800, CRC(1065a468) SHA1(4a707a42fb5a718043c173cb98ff3523eb274ccc) )
   453: 	ROM_LOAD( "route16.a3",   0x1800, 0x0800, CRC(0b1987f3) SHA1(9b8abd6ec1ae15ca0d5e4de6b8a7ebf6c929d767) )
   454: 	ROM_LOAD( "route16.a4",   0x2000, 0x0800, CRC(f67d853a) SHA1(7479e84082e78f8670cc50858ce6a006d3063413) )
   455: 	ROM_LOAD( "route16.a5",   0x2800, 0x0800, CRC(d85cf758) SHA1(5af21250ee44ab1a43b844ede5a777a3d33b78b5) )
   456: 
   457: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )  // 64k for the second CPU
   458: 	ROM_LOAD( "route16.b0",   0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
   459: 	ROM_LOAD( "route16.b1",   0x0800, 0x0800, CRC(2b326cf9) SHA1(c6602a9440a982c39f5836c6ab72283b6f9241be) )
   460: 	ROM_LOAD( "route16.b2",   0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
   461: 	ROM_LOAD( "route16.b3",   0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
   462: 
   463: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   464: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   465: 	ROM_LOAD( "pr09",         0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
   466: 	ROM_LOAD( "pr10",         0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
   467: ROM_END
   468: 
   469: ROM_START( route16a )
   470: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )  // 64k for the first CPU
   471: 	ROM_LOAD( "vg-54",        0x0000, 0x0800, CRC(0c966319) SHA1(2f57e9a30dab864bbee2ccb0107c1b4212c5abaf) )
   472: 	ROM_LOAD( "vg-55",        0x0800, 0x0800, CRC(a6a8c212) SHA1(a4a695d401b1e495c863c6938296a99592df0e7d) )
   473: 	ROM_LOAD( "vg-56",        0x1000, 0x0800, CRC(5c74406a) SHA1(f106c27da6cac597afbabdef3ec7fa7d203905b0) )
   474: 	ROM_LOAD( "vg-57",        0x1800, 0x0800, CRC(313e68ab) SHA1(01fa83898123eb92a14bffc6fe774e00b083e86c) )
   475: 	ROM_LOAD( "vg-58",        0x2000, 0x0800, CRC(40824e3c) SHA1(bc157e6babf00d2119b389fdb9d5822e1c764f51) )
   476: 	ROM_LOAD( "vg-59",        0x2800, 0x0800, CRC(9313d2c2) SHA1(e08112f44ca454820752800d8b3b6408b73a4284) )
   477: 
   478: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )  // 64k for the second CPU
   479: 	ROM_LOAD( "route16.b0",   0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
   480: 	ROM_LOAD( "vg-61",        0x0800, 0x0800, CRC(b216c88c) SHA1(d011ef9f3727f87ae3482e271a0c2496f76036b4) )
   481: 	ROM_LOAD( "route16.b2",   0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
   482: 	ROM_LOAD( "route16.b3",   0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
   483: 
   484: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   485: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   486: 	ROM_LOAD( "pr09",         0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
   487: 	ROM_LOAD( "pr10",         0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
   488: ROM_END
   489: 
   490: ROM_START( route16b )
   491: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )  // 64k for the first CPU
   492: 	ROM_LOAD( "rt16.0",       0x0000, 0x0800, CRC(b1f0f636) SHA1(f21915ed40ebdf64970fb7e3cd8071ebfc4aa0b5) )
   493: 	ROM_LOAD( "rt16.1",       0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
   494: 	ROM_LOAD( "rt16.2",       0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
   495: 	ROM_LOAD( "rt16.3",       0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
   496: 	ROM_LOAD( "rt16.4",       0x2000, 0x0800, CRC(6dcaf8c4) SHA1(27d84cc29f2b75280678e9c77f270ee39af50228) )
   497: 	ROM_LOAD( "rt16.5",       0x2800, 0x0800, CRC(63d7b05b) SHA1(d1e3473be283c92063674b9e69575081115bc456) )
   498: 
   499: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )  // 64k for the second CPU
   500: 	ROM_LOAD( "rt16.6",       0x0000, 0x0800, CRC(fef605f3) SHA1(bfbffa0ded3e285c034f0ad832864021ef3f2256) )
   501: 	ROM_LOAD( "rt16.7",       0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
   502: 	ROM_LOAD( "rt16.8",       0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
   503: 	ROM_LOAD( "rt16.9",       0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
   504: 
   505: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   506: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   507: 	ROM_LOAD( "pr09",         0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
   508: 	ROM_LOAD( "pr10",         0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
   509: ROM_END
   510: 
   511: ROM_START( stratvox )
   512: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )     /* 64k for code */
   513: 	ROM_LOAD( "ls01.bin",     0x0000, 0x0800, CRC(bf4d582e) SHA1(456f37e16d037a30dc4c1c460ebf9a248bf1a57c) )
   514: 	ROM_LOAD( "ls02.bin",     0x0800, 0x0800, CRC(16739dd4) SHA1(cd1f7d1b52ca1ab458d11b969f4f1f5af3ec7353) )
   515: 	ROM_LOAD( "ls03.bin",     0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
   516: 	ROM_LOAD( "ls04.bin",     0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
   517: 	ROM_LOAD( "ls05.bin",     0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
   518: 	ROM_LOAD( "ls06.bin",     0x2800, 0x0800, CRC(07a907a7) SHA1(0c41eac01ac9fd67ef19752c47414c4bd90324b4) )
   519: 
   520: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )     /* 64k for the second CPU */
   521: 	ROM_LOAD( "ls07.bin",     0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) )
   522: 	ROM_LOAD( "ls08.bin",     0x0800, 0x0800, CRC(35b753fc) SHA1(179e21f531e8be507f1754159590c111be1b44ff) )
   523: 
   524: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   525: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   526: 	ROM_LOAD( "pr09",         0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
   527: 	ROM_LOAD( "pr10",         0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
   528: ROM_END
   529: 
   530: ROM_START( speakres )
   531: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )     /* 64k for code */
   532: 	ROM_LOAD( "speakres.1",   0x0000, 0x0800, CRC(6026e4ea) SHA1(77975620b489f10e5b5de834e812c2802315e889) )
   533: 	ROM_LOAD( "speakres.2",   0x0800, 0x0800, CRC(93f0d4da) SHA1(bf3d2931d12a436bb4f0d0556806008ca722f070) )
   534: 	ROM_LOAD( "speakres.3",   0x1000, 0x0800, CRC(a3874304) SHA1(ca243364d077fa70d6c46b950ba6666617a56cc2) )
   535: 	ROM_LOAD( "speakres.4",   0x1800, 0x0800, CRC(f484be3a) SHA1(5befa61c5f3a3cde3d7d6cae2130021288ed8454) )
   536: 	ROM_LOAD( "speakres.5",   0x2000, 0x0800, CRC(61b12a67) SHA1(a1a636ecde16ffdc9f0bb460bd12f945ec66d36f) )
   537: 	ROM_LOAD( "speakres.6",   0x2800, 0x0800, CRC(220e0ab2) SHA1(9fb4abf50ff28995cb1f7ba807e15eb87127f520) )
   538: 
   539: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )     /* 64k for the second CPU */
   540: 	ROM_LOAD( "speakres.7",   0x0000, 0x0800, CRC(d417be13) SHA1(6f1f76a911579b49bb0e1992296e7c3acf2bd517) )
   541: 	ROM_LOAD( "speakres.8",   0x0800, 0x0800, CRC(52485d60) SHA1(28b708a71d16428d1cd58f3b7aa326ccda85533c) )
   542: 
   543: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   544: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   545: 	ROM_LOAD( "pr09",         0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
   546: 	ROM_LOAD( "pr10",         0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
   547: ROM_END
   548: 
   549: ROM_START( spacecho )
   550: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )     /* 64k for code */
   551: 	ROM_LOAD( "rom.a0",       0x0000, 0x0800, CRC(40d74dce) SHA1(891d7fde1d4b0b66c38fa7f8933480e201c68113) )
   552: 	ROM_LOAD( "rom.a1",       0x0800, 0x0800, CRC(a5f0a34f) SHA1(359e7a9954dedb464f7456cd071db77b2219ab2c) )
   553: 	ROM_LOAD( "rom.a2",       0x1000, 0x0800, CRC(cbbb3acb) SHA1(3dc71683f31da39a544382b463ece39cca8124b3) )
   554: 	ROM_LOAD( "rom.a3",       0x1800, 0x0800, CRC(311050ca) SHA1(ed4a5cb7ec0306654178dae8f30b39b9c8db0ce3) )
   555: 	ROM_LOAD( "rom.a4",       0x2000, 0x0800, CRC(28943803) SHA1(4904e6d092494bfca064d25d094ab9e9049fa9ca) )
   556: 	ROM_LOAD( "rom.a5",       0x2800, 0x0800, CRC(851c9f28) SHA1(c7bb4e25b74eb71e8b394214f9cbd95f59a1fa58) )
   557: 
   558: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )     /* 64k for the second CPU */
   559: 	ROM_LOAD( "rom.b0",       0x0000, 0x0800, CRC(db45689d) SHA1(057a8dc2629f57fdeebb6262de2bdd78b4e66dca) )
   560: 	ROM_LOAD( "rom.b2",       0x1000, 0x0800, CRC(1e074157) SHA1(cb2073415aff7804ac85e2137bef2005bf6cf239) )
   561: 	ROM_LOAD( "rom.b3",       0x1800, 0x0800, CRC(d50a8b20) SHA1(d733fa327d2e7dfe08c84015c6c326ed8ab39e3d) )
   562: 
   563: 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
   564: 	/* The upper 128 bytes are 0's, used by the hardware to blank the display */
   565: 	ROM_LOAD( "pr09",         0x0000, 0x0100, BAD_DUMP CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca)  ) /* top bitmap */
   566: 	ROM_LOAD( "pr10",         0x0100, 0x0100, BAD_DUMP CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca)  ) /* bottom bitmap */
   567: ROM_END
   568: 
   569: 
   570: /***************************************************************************
   571: 
   572:   Set hardware dependent flag.
   573: 
   574: ***************************************************************************/
   575: DRIVER_INIT( route16b )
   576: {
   577:     route16_hardware = 1;
   578: }
   579: 
   580: DRIVER_INIT( route16 )
   581: {
   582: 	unsigned char *rom = memory_region(REGION_CPU1);
   583: 	/* Is this actually a bootleg? some of the protection has
   584: 	   been removed */
   585: 
   586: 	/* patch the protection */
   587: 	rom[0x00e9] = 0x3a;
   588: 
   589: 	rom[0x0754] = 0xc3;
   590: 	rom[0x0755] = 0x63;
   591: 	rom[0x0756] = 0x07;
   592: 
   593: 	init_route16b();
   594: }
   595: 
   596: DRIVER_INIT( route16a )
   597: {
   598: 	UINT8 *ROM = memory_region(REGION_CPU1);
   599: 	/* TO DO : Replace these patches with simulation of the protection device */
   600: 
   601: 	/* patch the protection */
   602: 	ROM[0x00e9] = 0x3a;
   603: 
   604: 	ROM[0x0105] = 0x00; /* jp nz,$4109 (nirvana) - NOP's in route16 */
   605: 	ROM[0x0106] = 0x00;
   606: 	ROM[0x0107] = 0x00;
   607: 
   608: 	ROM[0x0731] = 0x00; /* jp nz,$4238 (nirvana) */
   609: 	ROM[0x0732] = 0x00;
   610: 	ROM[0x0733] = 0x00;
   611: 
   612: 	ROM[0x0747] = 0xc3;
   613: 	ROM[0x0748] = 0x56;
   614: 	ROM[0x0749] = 0x07;
   615: 
   616: 	init_route16b();
   617: }
   618: 
   619: 
   620: DRIVER_INIT( stratvox )
   621: {
   622:     route16_hardware = 0;
   623: }
   624: 
   625: 
   626: 
   627: GAME( 1981, route16,  0,        route16,  route16,  route16,  ROT270, "Tehkan/Sun (Centuri license)", "Route 16" )
   628: GAME( 1981, route16a, route16,  route16,  route16,  route16a, ROT270, "Tehkan/Sun (Centuri license)", "Route 16 (set 2)" )
   629: GAME( 1981, route16b, route16,  route16,  route16,  route16b, ROT270, "bootleg", "Route 16 (bootleg)" )
   630: GAME( 1980, speakres, 0,        speakres, speakres, stratvox, ROT270, "Sun Electronics", "Speak & Rescue" )
   631: GAME( 1980, stratvox, speakres, stratvox, stratvox, stratvox, ROT270, "[Sun Electronics] (Taito license)", "Stratovox" )
   632: GAME( 1980, spacecho, speakres, spacecho, spacecho, stratvox, ROT270, "bootleg", "Space Echo" )
   633: 




powered by ggdb.com this page took approx. 0.024s