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 : Minefield : VM Driver Source

Source Listing


     1: /****************************************************************************
     2: 
     3: Blockade/Comotion/Blasto/Hustle Memory MAP
     4: Frank Palazzolo (palazzol@home.com)
     5: 
     6: CPU - Intel 8080A
     7: 
     8: Memory Address              (Upper/Lower)
     9: 
    10: 0xxx 00aa aaaa aaaa     ROM     U2/U3    R       1K for Blockade/Comotion/Blasto
    11: 0xxx 01aa aaaa aaaa     ROM     U4/U5    R       1K for Comotion/Blasto/Hustle Only
    12: xxx1 xxxx aaaa aaaa     RAM              R/W     256 bytes
    13: 1xx0 xxaa aaaa aaaa    VRAM                      1K playfield
    14: 
    15:                     CHAR ROM  U29/U43            256 bytes for Blockade/Comotion
    16:                                                  512 for Blasto/Hustle
    17: 
    18: Ports    In            Out
    19: 1        Controls      bit 7 = Coin Latch Reset
    20:                        bit 5 = Pin 19?
    21: 2        Controls      Square Wave Pitch Register
    22: 4        Controls      Noise On
    23: 8        N/A           Noise Off
    24: 
    25: 
    26: Notes:  Support is complete with the exception of the square wave generator
    27:         and noise generator.  I have not created a sample for the noise
    28: 		generator, but any BOOM sound as a sample will do for now for
    29: 		Blockade & Comotion, at least.
    30: 
    31: ****************************************************************************/
    32: 
    33: #include "driver.h" 
    34: #include "vidhrdw/generic.h" 
    35: 
    36: /* #define BLOCKADE_LOG 1 */
    37: 
    38: extern WRITE_HANDLER( blockade_videoram_w );
    39: 
    40: extern VIDEO_START( blockade );
    41: extern VIDEO_UPDATE( blockade );
    42: 
    43: /* These are used to simulate coin latch circuitry */
    44: 
    45: static int coin_latch;  /* Active Low */
    46: static int just_been_reset;
    47: 
    48: DRIVER_INIT( blockade )
    49: {
    50: 	UINT8 *rom = memory_region(REGION_CPU1);
    51: 	int i;
    52: 
    53: 	/* Merge nibble-wide roms together,
    54: 	   and load them into 0x0000-0x0400 */
    55: 
    56: 	for (i = 0;i < 0x0400;i++)
    57: 	{
    58: 		rom[0x0000+i] = (rom[0x1000+i]<<4)+rom[0x1400+i];
    59: 	}
    60: 
    61: 	/* Initialize the coin latch state here */
    62: 	coin_latch = 1;
    63: 	just_been_reset = 0;
    64: }
    65: 
    66: DRIVER_INIT( comotion )
    67: {
    68: 	UINT8 *rom = memory_region(REGION_CPU1);
    69: 	int i;
    70: 
    71: 	/* Merge nibble-wide roms together,
    72: 	   and load them into 0x0000-0x0800 */
    73: 
    74: 	for(i = 0;i < 0x0400;i++)
    75: 	{
    76: 		rom[0x0000+i] = (rom[0x1000+i]<<4)+rom[0x1400+i];
    77: 		rom[0x0400+i] = (rom[0x1800+i]<<4)+rom[0x1c00+i];
    78: 	}
    79: 
    80: 	/* They also need to show up here for comotion/blasto */
    81: 
    82: 	for(i = 0;i < 2048;i++)
    83: 	{
    84: 		rom[0x4000+i] = rom[0x0000+i];
    85: 	}
    86: 
    87: 	/* Initialize the coin latch state here */
    88: 	coin_latch = 1;
    89: 	just_been_reset = 0;
    90: }
    91: 
    92: /*************************************************************/
    93: /*                                                           */
    94: /* Inserting a coin should work like this:                   */
    95: /*  1) Reset the CPU                                         */
    96: /*  2) CPU Sets the coin latch                               */
    97: /*  3) Finally the CPU coin latch is Cleared by the hardware */
    98: /*     (by the falling coin..?)                              */
    99: /*                                                           */
   100: /*  I am faking this by keeping the CPU from Setting         */
   101: /*  the coin latch if we have just been reset.               */
   102: /*                                                           */
   103: /*************************************************************/
   104: 
   105: 
   106: /* Need to check for a coin on the interrupt, */
   107: /* This will reset the cpu                    */
   108: 
   109: INTERRUPT_GEN( blockade_interrupt )
   110: {
   111: 	timer_suspendcpu(0, 0, SUSPEND_ANY_REASON);
   112: 
   113: 	if ((input_port_0_r(0) & 0x80) == 0)
   114: 	{
   115: 		just_been_reset = 1;
   116: 		cpu_set_reset_line(0,PULSE_LINE);
   117: 	}
   118: }
   119: 
   120: READ_HANDLER( blockade_input_port_0_r )
   121: {
   122:     /* coin latch is bit 7 */
   123: 
   124:     int temp = (input_port_0_r(0)&0x7f);
   125:     return (coin_latch<<7) | (temp);
   126: }
   127: 
   128: WRITE_HANDLER( blockade_coin_latch_w )
   129: {
   130:     if (data & 0x80)
   131:     {
   132:     #ifdef BLOCKADE_LOG
   133:         printf("Reset Coin Latch\n");
   134:     #endif
   135:         if (just_been_reset)
   136:         {
   137:             just_been_reset = 0;
   138:             coin_latch = 0;
   139:         }
   140:         else
   141:             coin_latch = 1;
   142:     }
   143: 
   144:     if (data & 0x20)
   145:     {
   146:     #ifdef BLOCKADE_LOG
   147:         printf("Pin 19 High\n");
   148:     #endif
   149:     }
   150:     else
   151:     {
   152:     #ifdef BLOCKADE_LOG
   153:         printf("Pin 19 Low\n");
   154:     #endif
   155:     }
   156: 
   157:     return;
   158: }
   159: 
   160: WRITE_HANDLER( blockade_sound_freq_w )
   161: {
   162: #ifdef BLOCKADE_LOG 
   163:     printf("Sound Freq Write: %d\n",data);
   164: #endif 
   165:     return;
   166: }
   167: 
   168: WRITE_HANDLER( blockade_env_on_w )
   169: {
   170: #ifdef BLOCKADE_LOG 
   171:     printf("Boom Start\n");
   172: #endif 
   173:     sample_start(0,0,0);
   174:     return;
   175: }
   176: 
   177: WRITE_HANDLER( blockade_env_off_w )
   178: {
   179: #ifdef BLOCKADE_LOG 
   180:     printf("Boom End\n");
   181: #endif 
   182:     return;
   183: }
   184: 
   185: static MEMORY_READ_START( readmem )
   186:     { 0x0000, 0x07ff, MRA_ROM },
   187:     { 0x4000, 0x47ff, MRA_ROM },  /* same image */
   188:     { 0xe000, 0xe3ff, MRA_RAM },
   189:     { 0xff00, 0xffff, MRA_RAM },
   190: MEMORY_END
   191: 
   192: static MEMORY_WRITE_START( writemem )
   193:     { 0x0000, 0x07ff, MWA_ROM },
   194:     { 0x4000, 0x47ff, MWA_ROM },  /* same image */
   195:     { 0xe000, 0xe3ff, blockade_videoram_w, &videoram },
   196:     { 0xff00, 0xffff, MWA_RAM },
   197: MEMORY_END
   198: 
   199: static PORT_READ_START( readport )
   200:     { 0x01, 0x01, blockade_input_port_0_r },
   201:     { 0x02, 0x02, input_port_1_r },
   202:     { 0x04, 0x04, input_port_2_r },
   203: PORT_END
   204: 
   205: static PORT_WRITE_START( writeport )
   206:     { 0x01, 0x01, blockade_coin_latch_w },
   207:     { 0x02, 0x02, blockade_sound_freq_w },
   208:     { 0x04, 0x04, blockade_env_on_w },
   209:     { 0x08, 0x08, blockade_env_off_w },
   210: PORT_END
   211: 
   212: /* These are not dip switches, they are mapped to */
   213: /* connectors on the board.  Different games had  */
   214: /* different harnesses which plugged in here, and */
   215: /* some pins were unused.                         */
   216: 
   217: INPUT_PORTS_START( blockade )
   218:     PORT_START  /* IN0 */
   219:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
   220:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
   221:     PORT_DIPNAME(    0x04, 0x04, "Boom Switch" )
   222:     PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
   223:     PORT_DIPSETTING( 0x04, DEF_STR( On ) )
   224:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
   225:     PORT_DIPNAME(    0x70, 0x70, DEF_STR( Lives ) )
   226:     PORT_DIPSETTING( 0x60, "3" )
   227:     PORT_DIPSETTING( 0x50, "4" )
   228:     PORT_DIPSETTING( 0x30, "5" )
   229:     PORT_DIPSETTING( 0x70, "6" )
   230:     PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
   231:                                 /* this is really used for the coin latch,  */
   232:                                 /* see blockade_interrupt()                 */
   233: 
   234:     PORT_START  /* IN1 */
   235:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER2 )
   236:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
   237:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER2 )
   238:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER2 )
   239:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER1 )
   240:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER1 )
   241:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER1 )
   242:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER1 )
   243: 
   244:     PORT_START  /* IN2 */
   245:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
   246:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
   247:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
   248:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
   249:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
   250:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   251:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   252:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   253: 
   254: 	PORT_START	/* IN3 */
   255: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
   256: 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
   257: INPUT_PORTS_END
   258: 
   259: INPUT_PORTS_START( comotion )
   260:     PORT_START  /* IN0 */
   261:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
   262:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
   263:     PORT_DIPNAME(    0x04, 0x04, "Boom Switch" )
   264:     PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
   265:     PORT_DIPSETTING( 0x04, DEF_STR( On ) )
   266:     PORT_DIPNAME(    0x00, 0x08, DEF_STR( Lives ) )
   267:     PORT_DIPSETTING( 0x00, "3" )
   268:     PORT_DIPSETTING( 0x08, "4" )
   269:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
   270:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   271:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   272:     PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
   273:                                 /* this is really used for the coin latch,  */
   274:                                 /* see blockade_interrupt()                 */
   275: 
   276:     PORT_START  /* IN1 */
   277:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER1 )
   278:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER1 )
   279:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER1 )
   280:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER1 )
   281:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER3 )
   282:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER3 )
   283:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER3 )
   284:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER3 )
   285: 
   286:     PORT_START  /* IN2 */
   287:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER2 )
   288:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
   289:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER2 )
   290:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER2 )
   291:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER4 )
   292:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER4 )
   293:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER4 )
   294:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER4 )
   295: 
   296: 	PORT_START	/* IN3 */
   297: 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
   298: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
   299: INPUT_PORTS_END
   300: 
   301: INPUT_PORTS_START( blasto )
   302:     PORT_START  /* IN0 */
   303:     PORT_DIPNAME(    0x03, 0x03, DEF_STR( Coinage ) )
   304:     PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
   305:     PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
   306:     PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
   307:     PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
   308:     PORT_DIPNAME(    0x04, 0x04, "Boom Switch" )
   309:     PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
   310:     PORT_DIPSETTING( 0x04, DEF_STR( On ) )
   311:     PORT_DIPNAME(    0x08, 0x08, "Game Time" )
   312:     PORT_DIPSETTING( 0x00, "70 Secs" )
   313:     PORT_DIPSETTING( 0x08, "90 Secs" )
   314:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
   315:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   316:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   317:     PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
   318:                                 /* this is really used for the coin latch,  */
   319:                                 /* see blockade_interrupt()                 */
   320: 
   321:     PORT_START  /* IN1 */
   322:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
   323:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
   324:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
   325:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
   326:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
   327:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
   328:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
   329:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
   330: 
   331:     PORT_START  /* IN2 */
   332:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
   333:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER2 )
   334:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER2 )
   335:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER2 )
   336:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER1 )
   337:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER1 )
   338:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER1 )
   339:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER1 )
   340: 
   341: 	PORT_START	/* IN3 */
   342: 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
   343: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
   344: INPUT_PORTS_END
   345: 
   346: INPUT_PORTS_START( hustle )
   347:     PORT_START  /* IN0 */
   348:     PORT_DIPNAME(    0x03, 0x03, DEF_STR( Coinage ) )
   349:     PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
   350:     PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
   351:     PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
   352:     PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
   353:     PORT_DIPNAME(    0x04, 0x04, "Game Time" )
   354:     PORT_DIPSETTING( 0x00, "1.5 mins" )
   355:     PORT_DIPSETTING( 0x04, "2 mins" )
   356:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
   357:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
   358:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   359:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   360:     PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
   361:                                 /* this is really used for the coin latch,  */
   362:                                 /* see blockade_interrupt()                 */
   363: 
   364:     PORT_START  /* IN1 */
   365:     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER2 )
   366:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
   367:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER2 )
   368:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER2 )
   369:     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER1 )
   370:     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER1 )
   371:     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER1 )
   372:     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER1 )
   373: 
   374:     PORT_START  /* IN2 */
   375: 	PORT_DIPNAME( 0xf1, 0xf0, "Free Game" )
   376: 	PORT_DIPSETTING ( 0x71, "11000" )
   377:     PORT_DIPSETTING ( 0xb1, "13000" )
   378: 	PORT_DIPSETTING ( 0xd1, "15000" )
   379: 	PORT_DIPSETTING ( 0xe1, "17000" )
   380:     PORT_DIPSETTING ( 0xf0, "Disabled" )
   381:     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
   382:     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
   383:     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
   384: 
   385: 	PORT_START	/* IN3 */
   386: 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
   387: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
   388: INPUT_PORTS_END
   389: 
   390: 
   391: 
   392: static struct GfxLayout blockade_layout =
   393: {
   394: 	8,8,    /* 8*8 characters */
   395: 	32, /* 32 characters */
   396: 	1,  /* 1 bit per pixel */
   397: 	{ 0 },  /* no separation in 1 bpp */
   398: 	{ 4,5,6,7,256*8+4,256*8+5,256*8+6,256*8+7 },    /* Merge nibble-wide roms */
   399: 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
   400: 	8*8 /* every char takes 8 consecutive bytes */
   401: };
   402: 
   403: static struct GfxLayout blasto_layout =
   404: {
   405: 	8,8,    /* 8*8 characters */
   406: 	64, /* 64 characters */
   407: 	1,  /* 1 bit per pixel */
   408: 	{ 0 },  /* no separation in 1 bpp */
   409: 	{ 4,5,6,7,512*8+4,512*8+5,512*8+6,512*8+7 },    /* Merge nibble-wide roms */
   410: 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
   411: 	8*8 /* every char takes 8 consecutive bytes */
   412: };
   413: 
   414: static struct GfxDecodeInfo gfxdecodeinfo[] =
   415: {
   416: 	{ REGION_GFX1, 0x0000, &blockade_layout, 0, 2 },
   417: 	{ -1 } /* end of array */
   418: };
   419: 
   420: static struct GfxDecodeInfo blasto_gfxdecodeinfo[] =
   421: {
   422: 	{ REGION_GFX1, 0x0000, &blasto_layout,   0, 2 },
   423: 	{ -1 } /* end of array */
   424: };
   425: 
   426: 
   427: static PALETTE_INIT( green )
   428: {
   429: 	palette_set_color(0,0x00,0x00,0x00); /* BLACK */
   430: 	palette_set_color(1,0x00,0xff,0x00); /* GREEN */     /* overlay (Blockade) */
   431: }
   432: 
   433: static PALETTE_INIT( yellow )
   434: {
   435: 	palette_set_color(0,0x00,0x00,0x00); /* BLACK */
   436: 	palette_set_color(1,0xff,0xff,0x20); /* YELLOW */     /* overlay (Hustle) */
   437: }
   438: static PALETTE_INIT( bw )
   439: {
   440: 	palette_set_color(0,0x00,0x00,0x00); /* BLACK */
   441: 	palette_set_color(1,0xff,0xff,0xff); /* WHITE */     /* Comotion/Blasto */
   442: }
   443: 
   444: 
   445: 
   446: static const char *blockade_sample_names[] =
   447: {
   448:     "*blockade",
   449:     "BOOM.wav",
   450:     0   /* end of array */
   451: };
   452: 
   453: static struct Samplesinterface samples_interface =
   454: {
   455:     1,	/* 1 channel */
   456: 	25,	/* volume */
   457: 	blockade_sample_names
   458: };
   459: 
   460: 
   461: 
   462: static MACHINE_DRIVER_START( blockade )
   463: 
   464: 	/* basic machine hardware */
   465: 	MDRV_CPU_ADD(8080, 2079000)
   466: 	MDRV_CPU_MEMORY(readmem,writemem)
   467: 	MDRV_CPU_PORTS(readport,writeport)
   468: 	MDRV_CPU_VBLANK_INT(blockade_interrupt,1)
   469: 
   470: 	MDRV_FRAMES_PER_SECOND(60)
   471: 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
   472: 
   473: 	/* video hardware */
   474: 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
   475: 	MDRV_SCREEN_SIZE(32*8, 28*8)
   476: 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
   477: 	MDRV_GFXDECODE(gfxdecodeinfo)
   478: 	MDRV_PALETTE_LENGTH(2)
   479: 	MDRV_COLORTABLE_LENGTH(2)
   480: 
   481: 	MDRV_PALETTE_INIT(green)
   482: 	MDRV_VIDEO_START(blockade)
   483: 	MDRV_VIDEO_UPDATE(blockade)
   484: 
   485: 	/* sound hardware */
   486: 	MDRV_SOUND_ADD(SAMPLES, samples_interface)
   487: MACHINE_DRIVER_END
   488: 
   489: static MACHINE_DRIVER_START( comotion )
   490: 	MDRV_IMPORT_FROM(blockade)
   491: 	MDRV_PALETTE_INIT(bw)
   492: MACHINE_DRIVER_END
   493: 
   494: static MACHINE_DRIVER_START( blasto )
   495: 	MDRV_IMPORT_FROM(blockade)
   496: 	MDRV_GFXDECODE(blasto_gfxdecodeinfo)
   497: 	MDRV_PALETTE_INIT(bw)
   498: MACHINE_DRIVER_END
   499: 
   500: static MACHINE_DRIVER_START( hustle )
   501: 	MDRV_IMPORT_FROM(blockade)
   502: 	MDRV_GFXDECODE(blasto_gfxdecodeinfo)
   503: 	MDRV_PALETTE_INIT(yellow)
   504: MACHINE_DRIVER_END
   505: 
   506: /***************************************************************************
   507: 
   508:   Game driver(s)
   509: 
   510: ***************************************************************************/
   511: 
   512: ROM_START( blockade )
   513:     ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
   514:     /* Note: These are being loaded into a bogus location, */
   515:     /*       They are nibble wide rom images which will be */
   516:     /*       merged and loaded into the proper place by    */
   517:     /*       blockade_rom_init()                           */
   518:     ROM_LOAD( "316-04.u2", 0x1000, 0x0400, CRC(a93833e9) SHA1(e29e7b29900f8305effa700a53806a12bf9d37bd) )
   519:     ROM_LOAD( "316-03.u3", 0x1400, 0x0400, CRC(85960d3b) SHA1(aabfe8f9c26126299d6c07a31ef1aac5300deff5) )
   520: 
   521:     ROM_REGION( 0x200, REGION_GFX1, ROMREGION_DISPOSE )
   522:     ROM_LOAD( "316-02.u29", 0x0000, 0x0100, CRC(409f610f) SHA1(0c2253f4b72d8aa395f87cc0abe07f0b46fa538b) )
   523:     ROM_LOAD( "316-01.u43", 0x0100, 0x0100, CRC(41a00b28) SHA1(2d0a90aac9d10a1ded240e5202fdf9cd7f70c4a7) )
   524: ROM_END
   525: 
   526: ROM_START( comotion )
   527:     ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
   528:     /* Note: These are being loaded into a bogus location, */
   529:     /*       They are nibble wide rom images which will be */
   530:     /*       merged and loaded into the proper place by    */
   531:     /*       comotion_rom_init()                           */
   532:     ROM_LOAD( "316-07.u2", 0x1000, 0x0400, CRC(5b9bd054) SHA1(324b844788945e7bc82d096d6d375e79e3e1a634) )
   533:     ROM_LOAD( "316-08.u3", 0x1400, 0x0400, CRC(1a856042) SHA1(91bdc260e8c88ce2b6ac05bfba043ed611bc30de) )
   534:     ROM_LOAD( "316-09.u4", 0x1800, 0x0400, CRC(2590f87c) SHA1(95a7af04b610d79fb3f6d74dda322e66164b9484) )
   535:     ROM_LOAD( "316-10.u5", 0x1c00, 0x0400, CRC(fb49a69b) SHA1(4009c3256a86508d981c1f77b65e6bff1face1e7) )
   536: 
   537:     ROM_REGION( 0x200, REGION_GFX1, ROMREGION_DISPOSE )
   538:     ROM_LOAD( "316-06.u43", 0x0000, 0x0100, CRC(8f071297) SHA1(811471c87b77b4b9ab056cf0c0743fc2616b754c) )  /* Note: these are reversed */
   539:     ROM_LOAD( "316-05.u29", 0x0100, 0x0100, CRC(53fb8821) SHA1(0a499aa4cf15f7ebea155aacd914de8851544215) )
   540: ROM_END
   541: 
   542: ROM_START( blasto )
   543:     ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
   544:     /* Note: These are being loaded into a bogus location, */
   545:     /*       They are nibble wide rom images which will be */
   546:     /*       merged and loaded into the proper place by    */
   547:     /*       comotion_rom_init()                           */
   548:     ROM_LOAD( "blasto.u2", 0x1000, 0x0400, CRC(ec99d043) SHA1(10650e54bf55f3ace5c199215c2fce211916d3b7) )
   549:     ROM_LOAD( "blasto.u3", 0x1400, 0x0400, CRC(be333415) SHA1(386cab720f0c2da16b9ec84f67ccebf23406c58d) )
   550:     ROM_LOAD( "blasto.u4", 0x1800, 0x0400, CRC(1c889993) SHA1(e23c72d075cf3d209081bca5a953c33c8ae042ea) )
   551:     ROM_LOAD( "blasto.u5", 0x1c00, 0x0400, CRC(efb640cb) SHA1(2dff5b249f876d7d13cc6dfad652ce7e5af10370) )
   552: 
   553:     ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
   554:     ROM_LOAD( "blasto.u29", 0x0000, 0x0200, CRC(4dd69499) SHA1(34f097477a297bf5f986804e5967c92f9292be29) )
   555:     ROM_LOAD( "blasto.u43", 0x0200, 0x0200, CRC(104051a4) SHA1(cae6b9d48e3eda5ba12ff5d9835ce2733e90f774) )
   556: ROM_END
   557: 
   558: ROM_START( hustle )
   559:     ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
   560:     /* Note: These are being loaded into a bogus location, */
   561:     /*       They are nibble wide rom images which will be */
   562:     /*       merged and loaded into the proper place by    */
   563:     /*       comotion_rom_init()                           */
   564:     ROM_LOAD( "3160016.u2", 0x1000, 0x0400, CRC(d983de7c) SHA1(af6e0ea78449bfba4fe8affd724d7b0eb3d38706) )
   565:     ROM_LOAD( "3160017.u3", 0x1400, 0x0400, CRC(edec9cb9) SHA1(548cc7b0a15a1c977b7ef4a99ff88101893f661a) )
   566:     ROM_LOAD( "3160018.u4", 0x1800, 0x0400, CRC(f599b9c0) SHA1(c55ed33ac51b9cfbb2fe4321bbb1e0a16694f065) )
   567:     ROM_LOAD( "3160019.u5", 0x1c00, 0x0400, CRC(7794bc7e) SHA1(b3d577291dea0e096b2ee56b0ef612f41b2e859c) )
   568: 
   569:     ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
   570:     ROM_LOAD( "3160020.u29", 0x0000, 0x0200, CRC(541d2c67) SHA1(abdb918f302352693870b0a50eabaf95acf1cf63) )
   571:     ROM_LOAD( "3160021.u43", 0x0200, 0x0200, CRC(b5083128) SHA1(d7e8242e9d12d09f3d69c08e373ede2bdd4deba9) )
   572: ROM_END
   573: 
   574: ROM_START( mineswpr )
   575:     ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
   576:     /* Note: These are being loaded into a bogus location, */
   577:     /*       They are nibble wide rom images which will be */
   578:     /*       merged and loaded into the proper place by    */
   579:     /*       blockade_rom_init()                           */
   580:     ROM_LOAD( "mineswee.h0p", 0x1000, 0x0400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32) )
   581:     ROM_LOAD( "mineswee.l0p", 0x1400, 0x0400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab) )
   582: 
   583:     ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
   584:     ROM_LOAD( "mineswee.ums", 0x0000, 0x0200, CRC(0e1c5c37) SHA1(d4d56bd63307e387771c48304724dfc1ea1306d9) )
   585:     ROM_LOAD( "mineswee.uls", 0x0200, 0x0200, CRC(3a4f66e1) SHA1(bd7f6c51d568a79fb06414b2a6ef245d0d983c3e) )
   586: ROM_END
   587: 
   588: GAMEX( 1976, blockade, 0, blockade, blockade, blockade, ROT0, "Gremlin", "Blockade", GAME_IMPERFECT_SOUND )
   589: GAMEX( 1976, comotion, 0, comotion, comotion, comotion, ROT0, "Gremlin", "Comotion", GAME_IMPERFECT_SOUND )
   590: GAMEX( 1978, blasto,   0, blasto,   blasto,   comotion, ROT0, "Gremlin", "Blasto", GAME_IMPERFECT_SOUND )
   591: GAMEX( 1977, hustle,   0, hustle,   hustle,   comotion, ROT0, "Gremlin", "Hustle", GAME_IMPERFECT_SOUND )
   592: GAMEX( 1977, mineswpr, 0, blasto,   blockade, blockade, ROT0, "Amutech", "Minesweeper", GAME_IMPERFECT_SOUND )
   593: 




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