1 /*******************************************************************************
2  Super Pinball Action (c) 1991 Tecmo
3 ********************************************************************************
4  driver by David Haywood
5  inputs, dipswitches etc by Stephh
6 
7 -general info-------------------------------------------------------------------
8 
9  A Pinball Game from Tecmo, the Hardware seems to be somewhere between that used
10  for Tecmo's classic game Ninja Gaiden (see gaiden.c) and that used in Comad's
11  Gals Pinball (see galspnbl.c) I imagine Comad took the hardware that this uses
12  as a basis for writing their game on, adding a couple of features such as the
13  pixel layer.
14 
15 -readme file--------------------------------------------------------------------
16 
17  Super Pinball Action
18  (c)1991 Tecmo
19 
20  CPU  : MC68000P12
21  Sound: Z80A YM3812 Y3014B M6295
22  OSC  : 12.000MHz 22.656MHz 4.00MHz
23 
24  ------
25  9002-A
26  ------
27  ROMs:
28  a-u68.1 - Main programs (27c101)
29  a-u67.2 /
30 
31  a-u14.3 - Sound program (27512)
32 
33  a-u19 - Samples (27c1001)
34 
35  1 custom chip (u94, surface scrached)
36 
37  ------
38  9002-B
39  ------
40  ROMs:
41  b-u98  - Graphics (Mask, read as 27c2001)
42  b-u99  |
43  b-u104 |
44  b-u105 /
45 
46 
47  b-u110 - Graphics (Mask, read as 27c2001)
48  b-u111 /
49 
50  Custom chips:
51  U101, U102, U106, U107: surface scrached
52  probably 2 pairs of TECMO-3&4
53  U133: surface scrached
54  probably TECMO-6
55  U112: TECMO-5
56 
57  --- Team Japump!!! ---
58  http:://www.rainemu.com/japump/
59  http://japump.i.am/
60  Dumped by Noel Miruru
61  17/Oct/2000
62 
63 -working notes------------------------------------------------------------------
64 
65  68k interrupts
66  lev 1 : 0x64 : ffff ffff - invalid
67  lev 2 : 0x68 : ffff ffff - invalid
68  lev 3 : 0x6c : 0000 1a0a - vblank?
69  lev 4 : 0x70 : ffff ffff - invalid
70  lev 5 : 0x74 : ffff ffff - invalid
71  lev 6 : 0x78 : 0000 1ab2 - writes to 90031
72  lev 7 : 0x7c : ffff ffff - invalid
73 
74  I can't use tilemap routines because they don't work with tiles having a
75  greater height than width, which is the case on this game once its rotated.
76 
77 TODO : (also check the notes from the galspnbl.c driver)
78 
79   - coin insertion is not recognized consistenly.
80   - sprite/tile priority is sometimes wrong (see 1st table when ball in bumpers).
81   - lots of unknown writes, what are they meant to do
82   - verify some of the code which is from the other drivers such as sprite
83     drawing as priorities are questionable in places
84   - add support for blended sprites.
85 
86 Unmapped writes (P.O.S.T.)
87 
88 cpu #0 (PC=00001C3A): unmapped memory word write to 00090080 = 0F30 & FFFF
89 cpu #0 (PC=00001C42): unmapped memory word write to 00090090 = 0E00 & FFFF
90 cpu #0 (PC=00001C4A): unmapped memory word write to 000900A0 = 0F74 & FFFF
91 cpu #0 (PC=00001C52): unmapped memory word write to 000900B0 = 0FBA & FFFF
92 cpu #0 (PC=00001C5A): unmapped memory word write to 000900C0 = 0FDA & FFFF
93 cpu #0 (PC=00001C62): unmapped memory word write to 000900D0 = 0F20 & FFFF
94 cpu #0 (PC=00001C6A): unmapped memory word write to 000900E0 = 0FE7 & FFFF
95 cpu #0 (PC=00001C72): unmapped memory word write to 000900F0 = 0FF1 & FFFF
96 cpu #0 (PC=00001C7A): unmapped memory word write to 000A0110 = 0001 & FFFF
97 cpu #0 (PC=00001C80): unmapped memory word write to 000A0010 = 0001 & FFFF
98 cpu #0 (PC=00001C88): unmapped memory word write to 000A0200 = 001F & FFFF
99 cpu #0 (PC=00001C90): unmapped memory word write to 000A0202 = 0010 & FFFF
100 cpu #0 (PC=00001C98): unmapped memory word write to 000A0204 = 00E0 & FFFF
101 cpu #0 (PC=00001CA0): unmapped memory word write to 000A0206 = 0001 & FFFF
102 cpu #0 (PC=00002BFA): unmapped memory word write to 00090000 = 0000 & 00FF
103 cpu #0 (PC=00002C08): unmapped memory word write to 000A0100 = FF85 & FFFF
104 cpu #0 (PC=00002C10): unmapped memory word write to 000A0000 = FF85 & FFFF
105 cpu #0 (PC=00002C18): unmapped memory word write to 000A0108 = 0010 & FFFF
106 cpu #0 (PC=00002C20): unmapped memory word write to 000A0008 = 0010 & FFFF
107 cpu #0 (PC=00002C28): unmapped memory word write to 000A0104 = 0000 & FFFF
108 cpu #0 (PC=00002C2E): unmapped memory word write to 000A010C = 0000 & FFFF
109 cpu #0 (PC=00002C34): unmapped memory word write to 000A0004 = 0000 & FFFF
110 cpu #0 (PC=00002C3A): unmapped memory word write to 000A000C = 0000 & FFFF
111 cpu #0 (PC=00002C42): unmapped memory word write to 00090050 = 0004 & 00FF
112 cpu #0 (PC=00001A14): unmapped memory word write to 00090020 = 00AA & 00FF
113 cpu #0 (PC=00001A1A): unmapped memory word write to 00090030 = 0055 & 00FF
114 
115    Unmapped writes (when Dip Switches are displayed)
116 
117 cpu #0 (PC=00001A14): unmapped memory word write to 00090020 = 00FF & 00FF
118 cpu #0 (PC=00001A1A): unmapped memory word write to 00090030 = 00FF & 00FF
119 
120    Unmapped writes (when grid is displayed)
121 
122 cpu #0 (PC=0000326A): unmapped memory word write to 00090010 = 00FF & 00FF (only once)
123 cpu #0 (PC=00001A14): unmapped memory word write to 00090020 = 00F6 & 00FF
124 cpu #0 (PC=00001A1A): unmapped memory word write to 00090030 = 00F7 & 00FF
125 
126 *******************************************************************************/
127 
128 #include "driver.h"
129 
130 data16_t *spbactn_bgvideoram, *spbactn_fgvideoram, *spbactn_spvideoram;
131 
132 VIDEO_START( spbactn );
133 VIDEO_UPDATE( spbactn );
134 
WRITE16_HANDLER(soundcommand_w)135 static WRITE16_HANDLER( soundcommand_w )
136 {
137 	if (ACCESSING_LSB)
138 	{
139 		soundlatch_w(offset,data & 0xff);
140 		cpu_set_irq_line(1,IRQ_LINE_NMI,PULSE_LINE);
141 	}
142 }
143 
MEMORY_READ16_START(spbactn_readmem)144 static MEMORY_READ16_START( spbactn_readmem )
145 	{ 0x00000, 0x3ffff, MRA16_ROM },
146 	{ 0x40000, 0x43fff, MRA16_RAM },
147 	{ 0x50000, 0x50fff, MRA16_RAM },
148 	{ 0x60000, 0x67fff, MRA16_RAM },
149 	{ 0x70000, 0x77fff, MRA16_RAM },
150 	{ 0x80000, 0x82fff, MRA16_RAM },
151 	{ 0x90000, 0x90001, input_port_0_word_r },
152 	{ 0x90010, 0x90011, input_port_1_word_r },
153 	{ 0x90020, 0x90021, input_port_2_word_r },
154 	{ 0x90030, 0x90031, input_port_4_word_r },
155 	{ 0x90040, 0x90041, input_port_3_word_r },
156 MEMORY_END
157 
158 static MEMORY_WRITE16_START( spbactn_writemem )
159 	{ 0x00000, 0x3ffff, MWA16_ROM },
160 	{ 0x40000, 0x43fff, MWA16_RAM },	/* main ram*/
161 	{ 0x50000, 0x50fff, MWA16_RAM, &spbactn_spvideoram },
162 	{ 0x60000, 0x67fff, MWA16_RAM, &spbactn_fgvideoram },
163 	{ 0x70000, 0x77fff, MWA16_RAM, &spbactn_bgvideoram },
164 	{ 0x80000, 0x827ff, paletteram16_xxxxBBBBGGGGRRRR_word_w, &paletteram16 },
165 
166 	/* this is an awful lot of unknowns */
167 	{ 0x90000, 0x90001, MWA16_NOP },
168 	{ 0x90010, 0x90011, soundcommand_w },
169 /*	{ 0x90020, 0x90021, soundcommand_w },*/
170 	{ 0x90030, 0x90031, MWA16_NOP },
171 
172 	{ 0x90080, 0x90081, MWA16_NOP },
173 	{ 0x90090, 0x90091, MWA16_NOP },
174 	{ 0x900a0, 0x900a1, MWA16_NOP },
175 	{ 0x900b0, 0x900b1, MWA16_NOP },
176 	{ 0x900c0, 0x900c1, MWA16_NOP },
177 	{ 0x900d0, 0x900d1, MWA16_NOP },
178 	{ 0x900e0, 0x900e1, MWA16_NOP },
179 	{ 0x900f0, 0x900f1, MWA16_NOP },
180 
181 	{ 0xa0000, 0xa0001, MWA16_NOP },
182 	{ 0xa0004, 0xa0005, MWA16_NOP },
183 	{ 0xa0008, 0xa0009, MWA16_NOP },
184 	{ 0xa000c, 0xa000d, MWA16_NOP },
185 	{ 0xa0010, 0xa0011, MWA16_NOP },
186 
187 	{ 0xa0100, 0xa0101, MWA16_NOP },
188 	{ 0xa0104, 0xa0105, MWA16_NOP },
189 	{ 0xa0108, 0xa0109, MWA16_NOP },
190 	{ 0xa010c, 0xa010d, MWA16_NOP },
191 	{ 0xa0110, 0xa0111, MWA16_NOP },
192 
193 	{ 0xa0200, 0xa0201, MWA16_NOP },
194 	{ 0xa0202, 0xa0203, MWA16_NOP },
195 	{ 0xa0204, 0xa0205, MWA16_NOP },
196 	{ 0xa0206, 0xa0207, MWA16_NOP },
197 MEMORY_END
198 
199 static MEMORY_READ_START( sound_readmem )
200 	{ 0x0000, 0xefff, MRA_ROM },
201 	{ 0xf000, 0xf7ff, MRA_RAM },
202 	{ 0xf800, 0xf800, OKIM6295_status_0_r },
203 	{ 0xfc00, 0xfc00, MRA_NOP },	/* irq ack ?? */
204 	{ 0xfc20, 0xfc20, soundlatch_r },
205 MEMORY_END
206 
207 static MEMORY_WRITE_START( sound_writemem )
208 	{ 0x0000, 0xefff, MWA_ROM },
209 	{ 0xf000, 0xf7ff, MWA_RAM },
210 	{ 0xf800, 0xf800, OKIM6295_data_0_w },
211 	{ 0xf810, 0xf810, YM3812_control_port_0_w },
212 	{ 0xf811, 0xf811, YM3812_write_port_0_w },
213 	{ 0xfc00, 0xfc00, MWA_NOP },	/* irq ack ?? */
214 MEMORY_END
215 
216 INPUT_PORTS_START( spbactn )
217 	PORT_START	/* IN0 */
218 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
219 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
220 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
221 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
222 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )		/* Left flipper*/
223 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )		/* "Shake"*/
224 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
225 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
226 
227 	PORT_START	/* IN1 */
228 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
229 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
230 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
231 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
232 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )		/* "Shake" (duplicated)*/
233 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )		/* Right flipper*/
234 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
235 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
236 
237 	PORT_START	/* IN2 */
238 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
239 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
240 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )		/* Press mulitple times for multiple players*/
241 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
242 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
243 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
244 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
245 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
246 
247 	PORT_START	/* DSW1 */
248 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
249 	PORT_DIPSETTING(    0x02, DEF_STR( 4C_1C ) )
250 	PORT_DIPSETTING(    0x03, DEF_STR( 3C_1C ) )
251 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
252 	PORT_DIPSETTING(    0x01, "2 Coins/1 Credit 3/2" )
253 	PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
254 	PORT_DIPSETTING(    0x05, "1 Coin/1 Credit 2/3" )
255 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
256 	PORT_DIPSETTING(    0x00, "1 Coin/1 Credit 5/6" )
257 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
258 	PORT_DIPSETTING(    0x10, DEF_STR( 4C_1C ) )
259 	PORT_DIPSETTING(    0x18, DEF_STR( 3C_1C ) )
260 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )
261 	PORT_DIPSETTING(    0x08, "2 Coins/1 Credit 3/2" )
262 	PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
263 	PORT_DIPSETTING(    0x28, "1 Coin/1 Credit 2/3" )
264 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) )
265 	PORT_DIPSETTING(    0x00, "1 Coin/1 Credit 5/6" )
266 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )		/* Balls*/
267 	PORT_DIPSETTING(    0x00, "2" )
268 	PORT_DIPSETTING(    0xc0, "3" )
269 	PORT_DIPSETTING(    0x80, "4" )
270 	PORT_DIPSETTING(    0x40, "5" )
271 
272 	PORT_START	/* DSW2 */
273 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
274 	PORT_DIPSETTING(    0x02, "Easy" )
275 	PORT_DIPSETTING(    0x03, "Normal" )
276 	PORT_DIPSETTING(    0x01, "Hard" )
277 	PORT_DIPSETTING(    0x00, "Very Hard" )
278 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
279 	PORT_DIPSETTING(    0x04, "100k and 500k" )
280 	PORT_DIPSETTING(    0x0c, "200k and 800k" )
281 	PORT_DIPSETTING(    0x08, "200k" )
282 	PORT_DIPSETTING(    0x00, "None" )
283 	PORT_DIPNAME( 0x10, 0x10, "Hit Difficulty" )		/* From .xls file - WHAT does that mean ?*/
284 	PORT_DIPSETTING(    0x10, "Normal" )
285 	PORT_DIPSETTING(    0x00, "Difficult" )
286 	PORT_DIPNAME( 0x20, 0x20, "Display Instructions" )	/* "Change Software" in .xls file*/
287 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
288 	PORT_DIPSETTING(    0x20, DEF_STR( Yes ) )
289 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )	/* To be confirmed*/
290 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
291 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
292 	PORT_DIPNAME( 0x80, 0x80, "Match" )				/* Check code at 0x00bf8c*/
293 	PORT_DIPSETTING(    0x80, "1/20" )
294 	PORT_DIPSETTING(    0x00, "1/40" )
295 INPUT_PORTS_END
296 
297 static struct GfxLayout fgtilelayout =
298 {
299 	16,8,
300 	RGN_FRAC(1,2),
301 	4,
302 	{ 0, 1, 2, 3 },
303 	{ 0*4, 1*4, RGN_FRAC(1,2)+0*4, RGN_FRAC(1,2)+1*4, 2*4, 3*4, RGN_FRAC(1,2)+2*4, RGN_FRAC(1,2)+3*4,
304 			16*8+0*4, 16*8+1*4, 16*8+RGN_FRAC(1,2)+0*4, 16*8+RGN_FRAC(1,2)+1*4, 16*8+2*4, 16*8+3*4, 16*8+RGN_FRAC(1,2)+2*4, 16*8+RGN_FRAC(1,2)+3*4 },
305 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
306 	32*8
307 };
308 
309 static struct GfxLayout bgtilelayout =
310 {
311 	16,8,
312 	RGN_FRAC(1,2),
313 	4,
314 	{ 3, 2, 1, 0 },
315 
316 	{ RGN_FRAC(1,2)+1*4, RGN_FRAC(1,2)+0*4, 1*4, 0*4,
317 	RGN_FRAC(1,2)+3*4, RGN_FRAC(1,2)+2*4, 3*4, 2*4,
318 	16*8+RGN_FRAC(1,2)+1*4,16*8+RGN_FRAC(1,2)+0*4, 16*8+1*4,16*8+0*4,
319 	16*8+RGN_FRAC(1,2)+3*4, 16*8+RGN_FRAC(1,2)+2*4, 16*8+3*4,16*8+2*4 },
320 
321 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
322 	32*8
323 };
324 
325 static struct GfxLayout spritelayout =
326 {
327 	8,8,
328 	RGN_FRAC(1,2),
329 	4,
330 	{ 0, 1, 2, 3 },
331 	{ 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 8+0, 8+4, 8+RGN_FRAC(1,2)+0, 8+RGN_FRAC(1,2)+4 },
332 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
333 	16*8
334 };
335 
336 static struct GfxDecodeInfo gfxdecodeinfo[] =
337 {
338 	{ REGION_GFX1, 0, &fgtilelayout,   0x0200, 16384  },
339 	{ REGION_GFX2, 0, &bgtilelayout,   0x0300, 16384  },
340 	{ REGION_GFX3, 0, &spritelayout,   0x0000, 16384  },
341 	{ -1 } /* end of array */
342 };
343 
irqhandler(int linestate)344 static void irqhandler(int linestate)
345 {
346 	cpu_set_irq_line(1,0,linestate);
347 }
348 
349 static struct YM3812interface ym3812_interface =
350 {
351 	1,			/* 1 chip */
352 	3579545,	/* 3.579545 MHz ? */
353 	{ 100 },	/* volume */
354 	{ irqhandler },
355 };
356 
357 static struct OKIM6295interface okim6295_interface =
358 {
359 	1,					/* 1 chip */
360 	{ 8000 },			/* 8000Hz frequency? */
361 	{ REGION_SOUND1 },	/* memory region */
362 	{ 50 }
363 };
364 
365 static MACHINE_DRIVER_START( spbactn )
366 	/* basic machine hardware */
367 	MDRV_CPU_ADD(M68000, 12000000)
368 	MDRV_CPU_MEMORY(spbactn_readmem,spbactn_writemem)
369 	MDRV_CPU_VBLANK_INT(irq3_line_hold,1)
370 
371 	MDRV_CPU_ADD(Z80, 4000000)
372 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* 4 MHz ??? */
373 	MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
374 
375 	MDRV_FRAMES_PER_SECOND(60)
376 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
377 
378 	/* video hardware */
379 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_RGB_DIRECT)
380 	MDRV_SCREEN_SIZE(64*8, 32*8)
381 	MDRV_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1)
382 	MDRV_GFXDECODE(gfxdecodeinfo)
383 	MDRV_PALETTE_LENGTH(0x2800/2)
384 
385 	MDRV_VIDEO_START(spbactn)
386 	MDRV_VIDEO_UPDATE(spbactn)
387 
388 	/* sound hardware */
389 	MDRV_SOUND_ADD(YM3812, ym3812_interface)
390 	MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
391 MACHINE_DRIVER_END
392 
393 ROM_START( spbactn )
394 	/* Board 9002-A (CPU Board) */
395 	ROM_REGION( 0x40000, REGION_CPU1, 0 )
396 	ROM_LOAD16_BYTE( "rom1.bin", 0x00000, 0x20000, CRC(6741bd3f) SHA1(844eb6465a15d339043fd6d2b6ba20ba216de493) )
397 	ROM_LOAD16_BYTE( "rom2.bin", 0x00001, 0x20000, CRC(488cc511) SHA1(41b4a01f35e0e93634b4843dbb894ab9840807bf) )
398 
399 	ROM_REGION( 0x10000, REGION_CPU2, 0 )
400 	ROM_LOAD( "a-u14.3", 0x00000, 0x10000, CRC(57f4c503) SHA1(e5ddc63a43ba824bcaa4340eeba25a0d3f26cad9) )
401 
402 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )
403 	ROM_LOAD( "a-u19",   0x00000, 0x20000,  CRC(87427d7d) SHA1(f76b0dc3f0d87deb0f0c81084aff9756b236e867) )
404 
405 	/* Board 9002-B (GFX Board) */
406 	ROM_REGION( 0x080000, REGION_GFX1, 0 ) /* 16x8 FG Tiles */
407 	ROM_LOAD( "b-u98",   0x00000, 0x40000, CRC(315eab4d) SHA1(6f812c85981dc649caca8b4635e3b8fd3a3c054d) )
408 	ROM_LOAD( "b-u99",   0x40000, 0x40000, CRC(7b76efd9) SHA1(9f23460aebe12cb5c4193776bf876d6044892979) )
409 
410 	ROM_REGION( 0x080000, REGION_GFX2, 0 ) /* 16x8 BG Tiles */
411 	ROM_LOAD( "b-u104",  0x00000, 0x40000, CRC(b648a40a) SHA1(1fb756dcd027a5702596e33bbe8a0beeb3ceb22b) )
412 	ROM_LOAD( "b-u105",  0x40000, 0x40000, CRC(0172d79a) SHA1(7ee1faa65c85860bd81988329df516bc34940ef5) )
413 
414 	ROM_REGION( 0x080000, REGION_GFX3, 0 ) /* 8x8 Sprite Tiles */
415 	ROM_LOAD( "b-u110",  0x00000, 0x40000, CRC(862ebacd) SHA1(05732e8524c50256c1db29317625d0edc19b87d2) )
416 	ROM_LOAD( "b-u111",  0x40000, 0x40000, CRC(1cc1379a) SHA1(44fdab8cb5ab1488688f1ac52f005454e835efee) )
417 ROM_END
418 
419 ROM_START( spbactnj )
420 	/* Board 9002-A (CPU Board) */
421 	ROM_REGION( 0x40000, REGION_CPU1, 0 )
422 	ROM_LOAD16_BYTE( "a-u68.1", 0x00000, 0x20000, CRC(b5b2d824) SHA1(be04ca370a381d7396f39e31fb2680973193daee) )
423 	ROM_LOAD16_BYTE( "a-u67.2", 0x00001, 0x20000, CRC(9577b48b) SHA1(291d890a9d0e434455f183eb12ae6edf3156688d) )
424 
425 	ROM_REGION( 0x10000, REGION_CPU2, 0 )
426 	ROM_LOAD( "a-u14.3", 0x00000, 0x10000, CRC(57f4c503) SHA1(e5ddc63a43ba824bcaa4340eeba25a0d3f26cad9) )
427 
428 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )
429 	ROM_LOAD( "a-u19",   0x00000, 0x20000,  CRC(87427d7d) SHA1(f76b0dc3f0d87deb0f0c81084aff9756b236e867) )
430 
431 	/* Board 9002-B (GFX Board) */
432 	ROM_REGION( 0x080000, REGION_GFX1, 0 ) /* 16x8 FG Tiles */
433 	ROM_LOAD( "b-u98",   0x00000, 0x40000, CRC(315eab4d) SHA1(6f812c85981dc649caca8b4635e3b8fd3a3c054d) )
434 	ROM_LOAD( "b-u99",   0x40000, 0x40000, CRC(7b76efd9) SHA1(9f23460aebe12cb5c4193776bf876d6044892979) )
435 
436 	ROM_REGION( 0x080000, REGION_GFX2, 0 ) /* 16x8 BG Tiles */
437 	ROM_LOAD( "b-u104",  0x00000, 0x40000, CRC(b648a40a) SHA1(1fb756dcd027a5702596e33bbe8a0beeb3ceb22b) )
438 	ROM_LOAD( "b-u105",  0x40000, 0x40000, CRC(0172d79a) SHA1(7ee1faa65c85860bd81988329df516bc34940ef5) )
439 
440 	ROM_REGION( 0x080000, REGION_GFX3, 0 ) /* 8x8 Sprite Tiles */
441 	ROM_LOAD( "b-u110",  0x00000, 0x40000, CRC(862ebacd) SHA1(05732e8524c50256c1db29317625d0edc19b87d2) )
442 	ROM_LOAD( "b-u111",  0x40000, 0x40000, CRC(1cc1379a) SHA1(44fdab8cb5ab1488688f1ac52f005454e835efee) )
443 ROM_END
444 
445 GAMEX( 1991, spbactn, 0,        spbactn, spbactn, 0, ROT90, "Tecmo", "Super Pinball Action (US)", GAME_IMPERFECT_GRAPHICS )
446 GAMEX( 1991, spbactnj, spbactn, spbactn, spbactn, 0, ROT90, "Tecmo", "Super Pinball Action (Japan)", GAME_IMPERFECT_GRAPHICS )
447