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