1 /***************************************************************************
2
3 The Simpsons (c) 1991 Konami Co. Ltd
4
5 Preliminary driver by:
6 Ernesto Corvi
7 someone@secureshell.com
8
9 ***************************************************************************/
10
11 #include "driver.h"
12 #include "vidhrdw/generic.h"
13 #include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
14 #include "cpu/z80/z80.h"
15 #include "vidhrdw/konamiic.h"
16
17 /* from vidhrdw */
18 VIDEO_START( simpsons );
19 WRITE_HANDLER( simpsons_priority_w );
20 VIDEO_UPDATE( simpsons );
21
22 /* from machine */
23 READ_HANDLER( simpsons_eeprom_r );
24 WRITE_HANDLER( simpsons_eeprom_w );
25 WRITE_HANDLER( simpsons_coin_counter_w );
26 READ_HANDLER( simpsons_sound_interrupt_r );
27 READ_HANDLER( simpsons_sound_r );
28 READ_HANDLER( simpsons_speedup1_r );
29 READ_HANDLER( simpsons_speedup2_r );
30 MACHINE_INIT( simpsons );
31 NVRAM_HANDLER( simpsons );
32 extern int simpsons_firq_enabled;
33
34 /***************************************************************************
35
36 Memory Maps
37
38 ***************************************************************************/
39
MEMORY_READ_START(readmem)40 static MEMORY_READ_START( readmem )
41 { 0x0000, 0x0fff, MRA_BANK3 },
42 { 0x1f80, 0x1f80, input_port_4_r },
43 { 0x1f81, 0x1f81, simpsons_eeprom_r },
44 { 0x1f90, 0x1f90, input_port_0_r },
45 { 0x1f91, 0x1f91, input_port_1_r },
46 { 0x1f92, 0x1f92, input_port_2_r },
47 { 0x1f93, 0x1f93, input_port_3_r },
48 { 0x1fc4, 0x1fc4, simpsons_sound_interrupt_r },
49 { 0x1fc6, 0x1fc7, simpsons_sound_r }, /* K053260 */
50 { 0x1fc8, 0x1fc9, K053246_r },
51 { 0x1fca, 0x1fca, watchdog_reset_r },
52 { 0x2000, 0x3fff, MRA_BANK4 },
53 { 0x0000, 0x3fff, K052109_r },
54 { 0x4856, 0x4856, simpsons_speedup2_r },
55 { 0x4942, 0x4942, simpsons_speedup1_r },
56 { 0x4000, 0x5fff, MRA_RAM },
57 { 0x6000, 0x7fff, MRA_BANK1 },
58 { 0x8000, 0xffff, MRA_ROM },
59 MEMORY_END
60
61 static MEMORY_WRITE_START( writemem )
62 { 0x0000, 0x0fff, MWA_BANK3 },
63 { 0x1fa0, 0x1fa7, K053246_w },
64 { 0x1fb0, 0x1fbf, K053251_w },
65 { 0x1fc0, 0x1fc0, simpsons_coin_counter_w },
66 { 0x1fc2, 0x1fc2, simpsons_eeprom_w },
67 { 0x1fc6, 0x1fc7, K053260_0_w },
68 { 0x2000, 0x3fff, MWA_BANK4 },
69 { 0x0000, 0x3fff, K052109_w },
70 { 0x4000, 0x5fff, MWA_RAM },
71 { 0x6000, 0x7fff, MWA_ROM },
72 { 0x8000, 0xffff, MWA_ROM },
73 MEMORY_END
74
75 static WRITE_HANDLER( z80_bankswitch_w )
76 {
77 unsigned char *RAM = memory_region(REGION_CPU2);
78
79 offset = 0x10000 + ( ( ( data & 7 ) - 2 ) * 0x4000 );
80
81 cpu_setbank( 2, &RAM[ offset ] );
82 }
83
84 #if 0
85 static int nmi_enabled;
86
87 static void sound_nmi_callback( int param )
88 {
89 cpu_set_nmi_line( 1, ( nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE );
90
91 nmi_enabled = 0;
92 }
93 #endif
94
nmi_callback(int param)95 static void nmi_callback(int param)
96 {
97 cpu_set_nmi_line(1,ASSERT_LINE);
98 }
99
WRITE_HANDLER(z80_arm_nmi_w)100 static WRITE_HANDLER( z80_arm_nmi_w )
101 {
102 /* sound_nmi_enabled = 1;*/
103 cpu_set_nmi_line(1,CLEAR_LINE);
104 timer_set(TIME_IN_USEC(50),0,nmi_callback); /* kludge until the K053260 is emulated correctly */
105 }
106
MEMORY_READ_START(z80_readmem)107 static MEMORY_READ_START( z80_readmem )
108 { 0x0000, 0x7fff, MRA_ROM },
109 { 0x8000, 0xbfff, MRA_BANK2 },
110 { 0xf000, 0xf7ff, MRA_RAM },
111 { 0xf801, 0xf801, YM2151_status_port_0_r },
112 { 0xfc00, 0xfc2f, K053260_0_r },
113 MEMORY_END
114
115 static MEMORY_WRITE_START( z80_writemem )
116 { 0x0000, 0x7fff, MWA_ROM },
117 { 0x8000, 0xbfff, MWA_ROM },
118 { 0xf000, 0xf7ff, MWA_RAM },
119 { 0xf800, 0xf800, YM2151_register_port_0_w },
120 { 0xf801, 0xf801, YM2151_data_port_0_w },
121 { 0xfa00, 0xfa00, z80_arm_nmi_w },
122 { 0xfc00, 0xfc2f, K053260_0_w },
123 { 0xfe00, 0xfe00, z80_bankswitch_w },
124 MEMORY_END
125
126 /***************************************************************************
127
128 Input Ports
129
130 ***************************************************************************/
131
132 INPUT_PORTS_START( simpsons )
133 PORT_START /* IN0 - Player 1 */
134 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
135 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
136 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
137 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
138 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
139 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
140 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
141 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
142
143 PORT_START /* IN1 - Player 2 */
144 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
145 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
146 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
147 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
148 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
149 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
150 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
151 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
152
153 PORT_START /* IN2 - Player 3 - Used on the 4p version */
154 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER3 )
155 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
156 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER3 )
157 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER3 )
158 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
159 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
160 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
161 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
162
163 PORT_START /* IN3 - Player 4 - Used on the 4p version */
164 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER4 )
165 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
166 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER4 )
167 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER4 )
168 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
169 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
170 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
171 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
172
173 PORT_START /* IN4 */
174 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
175 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
176 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
177 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
178 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE1 Unused*/
179 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE2 Unused*/
180 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE3 Unused*/
181 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE4 Unused*/
182
183 PORT_START /* IN5 */
184 PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
185 PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
186 INPUT_PORTS_END
187
188 INPUT_PORTS_START( simpsn2p )
189 PORT_START /* IN0 - Player 1 */
190 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
191 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
192 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
193 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
194 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
195 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
196 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
197 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
198
199 PORT_START /* IN1 - Player 2 */
200 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
201 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
202 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
203 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
204 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
205 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
206 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*BUTTON3 Unused*/
207 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
208
209 PORT_START /* IN2 - Player 3 - Used on the 4p version */
210 /* PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER3 )*/
211 /* PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )*/
212 /* PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER3 )*/
213 /* PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER3 )*/
214 /* PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )*/
215 /* PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )*/
216 /* PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) */ /*BUTTON3 Unused*/
217 /* PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )*/
218
219 PORT_START /* IN3 - Player 4 - Used on the 4p version */
220 /* PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER4 )*/
221 /* PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )*/
222 /* PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER4 )*/
223 /* PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER4 )*/
224 /* PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )*/
225 /* PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )*/
226 /* PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) */ /*BUTTON3 Unused*/
227 /* PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )*/
228
229 PORT_START /* IN4 */
230 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
231 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
232 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*COIN3 Unused*/
233 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*COIN4 Unused*/
234 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
235 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE2 Unused*/
236 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE3 Unused*/
237 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*SERVICE4 Unused*/
238
239 PORT_START /* IN5 */
240 PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
241 PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
242 INPUT_PORTS_END
243
244
245
246 /***************************************************************************
247
248 Machine Driver
249
250 ***************************************************************************/
251
252 static struct YM2151interface ym2151_interface =
253 {
254 1, /* 1 chip */
255 3579545, /* 3.579545 MHz */
256 { YM3012_VOL(70,MIXER_PAN_CENTER,0,MIXER_PAN_CENTER) }, /* only left channel is connected */
257 { 0 }
258 };
259
260 static struct K053260_interface k053260_interface =
261 {
262 1,
263 { 3579545 },
264 { REGION_SOUND1 }, /* memory region */
265 { { MIXER(75,MIXER_PAN_LEFT), MIXER(75,MIXER_PAN_RIGHT) } },
266 /* { nmi_callback }*/
267 };
268
simpsons_objdma(void)269 static void simpsons_objdma(void)
270 {
271 int counter, num_inactive;
272 data16_t *src, *dst;
273
274 K053247_export_config(&dst, 0, 0, 0, &counter);
275 src = spriteram16;
276 num_inactive = counter = 256;
277
278 do {
279 if ((*src & 0x8000) && (*src & 0xff))
280 {
281 memcpy(dst, src, 0x10);
282 dst += 8;
283 num_inactive--;
284 }
285 src += 8;
286 }
287 while (--counter);
288
289 if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive);
290 }
291
dmaend_callback(int data)292 static void dmaend_callback(int data)
293 {
294 if (simpsons_firq_enabled)
295 cpu_set_irq_line(0, KONAMI_FIRQ_LINE, HOLD_LINE);
296 }
297
INTERRUPT_GEN(simpsons_irq)298 static INTERRUPT_GEN( simpsons_irq )
299 {
300 if (K053246_is_IRQ_enabled())
301 {
302 simpsons_objdma();
303
304 /* 32+256us delay at 8MHz dotclock; artificially shortened since actual V-blank length is unknown*/
305 timer_set(TIME_IN_USEC(30), 0, dmaend_callback);
306 }
307
308 if (K052109_is_IRQ_enabled())
309 cpu_set_irq_line(0, KONAMI_IRQ_LINE, HOLD_LINE);
310 }
311
312 static MACHINE_DRIVER_START( simpsons )
313
314 /* basic machine hardware */
315 MDRV_CPU_ADD(KONAMI, 3000000) /* ? */
MDRV_CPU_MEMORY(readmem,writemem)316 MDRV_CPU_MEMORY(readmem,writemem)
317 MDRV_CPU_VBLANK_INT(simpsons_irq,1) /* IRQ triggered by the 052109, FIRQ by the sprite hardware */
318
319 MDRV_CPU_ADD(Z80, 3579545)
320 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
321 MDRV_CPU_MEMORY(z80_readmem,z80_writemem)
322 /* NMIs are generated by the 053260 */
323 MDRV_FRAMES_PER_SECOND(60)
324 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
325
326 MDRV_MACHINE_INIT(simpsons)
327 MDRV_NVRAM_HANDLER(simpsons)
328
329 /* video hardware */
330 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK)
331 MDRV_SCREEN_SIZE(64*8, 32*8)
332 MDRV_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 )
333 MDRV_PALETTE_LENGTH(2048)
334
335 MDRV_VIDEO_START(simpsons)
336 MDRV_VIDEO_UPDATE(simpsons)
337
338 /* sound hardware */
339 MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
340 MDRV_SOUND_ADD(YM2151, ym2151_interface)
341 MDRV_SOUND_ADD(K053260, k053260_interface)
342 MACHINE_DRIVER_END
343
344
345 /***************************************************************************
346
347 Game ROMs
348
349 ***************************************************************************/
350
351 ROM_START( simpsons )
352 ROM_REGION( 0x8b000, REGION_CPU1, 0 ) /* code + banked roms + banked ram */
353 ROM_LOAD( "g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) )
354 ROM_LOAD( "g01.17c", 0x30000, 0x20000, CRC(9f843def) SHA1(858432b59101b0577c5cec6ac0c7c20ab0780c9a) )
355 ROM_LOAD( "j13.13c", 0x50000, 0x20000, CRC(aade2abd) SHA1(10f178d5ed399b4866266e075d91ca3db26798f8) )
356 ROM_LOAD( "j12.15c", 0x70000, 0x18000, CRC(479e12f2) SHA1(15a6cb12e68b4773a29ab463640a43f8e814de59) )
357 ROM_CONTINUE( 0x08000, 0x08000 )
358
359 ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* Z80 code + banks */
360 ROM_LOAD( "e03.6g", 0x00000, 0x08000, CRC(866b7a35) SHA1(98905764eb4c7d968ccc17618a1f24ee12e33c0e) )
361 ROM_CONTINUE( 0x10000, 0x18000 )
362
363 ROM_REGION( 0x100000, REGION_GFX1, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
364 ROM_LOAD( "simp_18h.rom", 0x000000, 0x080000, CRC(ba1ec910) SHA1(0805ccb641271dea43185dc0365732260db1763d) ) /* tiles */
365 ROM_LOAD( "simp_16h.rom", 0x080000, 0x080000, CRC(cf2bbcab) SHA1(47afea47f9bc8cb5eb1c7b7fbafe954b3e749aeb) )
366
367 ROM_REGION( 0x400000, REGION_GFX2, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
368 ROM_LOAD( "simp_3n.rom", 0x000000, 0x100000, CRC(7de500ad) SHA1(61b76b8f402e3bde1509679aaaa28ef08cafb0ab) ) /* sprites */
369 ROM_LOAD( "simp_8n.rom", 0x100000, 0x100000, CRC(aa085093) SHA1(925239d79bf607021d371263352618876f59c1f8) )
370 ROM_LOAD( "simp_12n.rom", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) )
371 ROM_LOAD( "simp_16l.rom", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) )
372
373 ROM_REGION( 0x140000, REGION_SOUND1, 0 ) /* samples for the 053260 */
374 ROM_LOAD( "simp_1f.rom", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) )
375 ROM_LOAD( "simp_1d.rom", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) )
376 ROM_END
377
378 ROM_START( simpsn2p )
379 ROM_REGION( 0x8b000, REGION_CPU1, 0 ) /* code + banked roms + banked ram */
380 ROM_LOAD( "g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) )
381 ROM_LOAD( "simp_p01.rom", 0x30000, 0x20000, CRC(07ceeaea) SHA1(c18255ae1d578c2d53de80d6323cdf41cbe47b57) )
382 ROM_LOAD( "simp_013.rom", 0x50000, 0x20000, CRC(8781105a) SHA1(ef2f16f7a56d3715536511c674df4b3aab1be2bd) )
383 ROM_LOAD( "simp_012.rom", 0x70000, 0x18000, CRC(244f9289) SHA1(eeda7f5c7340cbd1a1cd576af48cd5d1a629914a) )
384 ROM_CONTINUE( 0x08000, 0x08000 )
385
386 ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* Z80 code + banks */
387 ROM_LOAD( "simp_g03.rom", 0x00000, 0x08000, CRC(76c1850c) SHA1(9047c6b26c4e33c74eb7400a807d3d9f206f7bbe) )
388 ROM_CONTINUE( 0x10000, 0x18000 )
389
390 ROM_REGION( 0x100000, REGION_GFX1, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
391 ROM_LOAD( "simp_18h.rom", 0x000000, 0x080000, CRC(ba1ec910) SHA1(0805ccb641271dea43185dc0365732260db1763d) ) /* tiles */
392 ROM_LOAD( "simp_16h.rom", 0x080000, 0x080000, CRC(cf2bbcab) SHA1(47afea47f9bc8cb5eb1c7b7fbafe954b3e749aeb) )
393
394 ROM_REGION( 0x400000, REGION_GFX2, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
395 ROM_LOAD( "simp_3n.rom", 0x000000, 0x100000, CRC(7de500ad) SHA1(61b76b8f402e3bde1509679aaaa28ef08cafb0ab) ) /* sprites */
396 ROM_LOAD( "simp_8n.rom", 0x100000, 0x100000, CRC(aa085093) SHA1(925239d79bf607021d371263352618876f59c1f8) )
397 ROM_LOAD( "simp_12n.rom", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) )
398 ROM_LOAD( "simp_16l.rom", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) )
399
400 ROM_REGION( 0x140000, REGION_SOUND1, 0 ) /* samples for the 053260 */
401 ROM_LOAD( "simp_1f.rom", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) )
402 ROM_LOAD( "simp_1d.rom", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) )
403 ROM_END
404
405 ROM_START( simps2pa )
406 ROM_REGION( 0x8b000, REGION_CPU1, 0 ) /* code + banked roms + banked ram */
407 ROM_LOAD( "simp2.16c", 0x010000, 0x020000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) )
408 ROM_LOAD( "simp1.17c", 0x030000, 0x020000, CRC(07ceeaea) SHA1(c18255ae1d578c2d53de80d6323cdf41cbe47b57) )
409 ROM_LOAD( "simp4.13c", 0x050000, 0x020000, CRC(54e6df66) SHA1(1b83ae56cf1deb51b04880fa421f06568c938a99) )
410 ROM_LOAD( "simp3.15c", 0x070000, 0x018000, CRC(96636225) SHA1(5de95606e5c9337f18bc42f4df791cacafa20399) )
411 ROM_CONTINUE( 0x08000, 0x08000 )
412
413 ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* Z80 code + banks */
414 ROM_LOAD( "simp5.6g", 0x00000, 0x08000, CRC(76c1850c) SHA1(9047c6b26c4e33c74eb7400a807d3d9f206f7bbe) )
415 ROM_CONTINUE( 0x10000, 0x18000 )
416
417 ROM_REGION( 0x100000, REGION_GFX1, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
418 ROM_LOAD( "simp_18h.rom", 0x000000, 0x080000, CRC(ba1ec910) SHA1(0805ccb641271dea43185dc0365732260db1763d) ) /* tiles */
419 ROM_LOAD( "simp_16h.rom", 0x080000, 0x080000, CRC(cf2bbcab) SHA1(47afea47f9bc8cb5eb1c7b7fbafe954b3e749aeb) )
420
421 ROM_REGION( 0x400000, REGION_GFX2, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
422 ROM_LOAD( "simp_3n.rom", 0x000000, 0x100000, CRC(7de500ad) SHA1(61b76b8f402e3bde1509679aaaa28ef08cafb0ab) ) /* sprites */
423 ROM_LOAD( "simp_8n.rom", 0x100000, 0x100000, CRC(aa085093) SHA1(925239d79bf607021d371263352618876f59c1f8) )
424 ROM_LOAD( "simp_12n.rom", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) )
425 ROM_LOAD( "simp_16l.rom", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) )
426
427 ROM_REGION( 0x140000, REGION_SOUND1, 0 ) /* samples for the 053260 */
428 ROM_LOAD( "simp_1f.rom", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) )
429 ROM_LOAD( "simp_1d.rom", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) )
430 ROM_END
431
432 ROM_START( simps2pj )
433 ROM_REGION( 0x8b000, REGION_CPU1, 0 ) /* code + banked roms + banked ram */
434 ROM_LOAD( "072-s02.16c", 0x10000, 0x20000, CRC(265f7a47) SHA1(d39c19a5e303f822313409343b209947f4c47ae4) )
435 ROM_LOAD( "072-t01.17c", 0x30000, 0x20000, CRC(91de5c2d) SHA1(1e18a5585ed821ec7cda69bdcdbfa4e6c71455c6) )
436 ROM_LOAD( "072-213.13c", 0x50000, 0x20000, CRC(b326a9ae) SHA1(f222c33f2e8b306f2f0ef6f0da9febbf8219e1a4) )
437 ROM_LOAD( "072-212.15c", 0x70000, 0x18000, CRC(584d9d37) SHA1(61b9df4dfb323b7284894e5e1eb9d713ebf64721) )
438 ROM_CONTINUE( 0x08000, 0x08000 )
439
440 ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* Z80 code + banks */
441 ROM_LOAD( "simp_g03.rom", 0x00000, 0x08000, CRC(76c1850c) SHA1(9047c6b26c4e33c74eb7400a807d3d9f206f7bbe) )
442 ROM_CONTINUE( 0x10000, 0x18000 )
443
444 ROM_REGION( 0x100000, REGION_GFX1, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
445 ROM_LOAD( "simp_18h.rom", 0x000000, 0x080000, CRC(ba1ec910) SHA1(0805ccb641271dea43185dc0365732260db1763d) ) /* tiles */
446 ROM_LOAD( "simp_16h.rom", 0x080000, 0x080000, CRC(cf2bbcab) SHA1(47afea47f9bc8cb5eb1c7b7fbafe954b3e749aeb) )
447
448 ROM_REGION( 0x400000, REGION_GFX2, 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
449 ROM_LOAD( "simp_3n.rom", 0x000000, 0x100000, CRC(7de500ad) SHA1(61b76b8f402e3bde1509679aaaa28ef08cafb0ab) ) /* sprites */
450 ROM_LOAD( "simp_8n.rom", 0x100000, 0x100000, CRC(aa085093) SHA1(925239d79bf607021d371263352618876f59c1f8) )
451 ROM_LOAD( "simp_12n.rom", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) )
452 ROM_LOAD( "simp_16l.rom", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) )
453
454 ROM_REGION( 0x140000, REGION_SOUND1, 0 ) /* samples for the 053260 */
455 ROM_LOAD( "simp_1f.rom", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) )
456 ROM_LOAD( "simp_1d.rom", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) )
457 ROM_END
458
459
460
461 /***************************************************************************
462
463 Game driver(s)
464
465 ***************************************************************************/
466
467 static DRIVER_INIT( simpsons )
468 {
469 konami_rom_deinterleave_2(REGION_GFX1);
470 konami_rom_deinterleave_4(REGION_GFX2);
471 }
472
473 GAME( 1991, simpsons, 0, simpsons, simpsons, simpsons, ROT0, "Konami", "The Simpsons (4 Players)" )
474 GAME( 1991, simpsn2p, simpsons, simpsons, simpsn2p, simpsons, ROT0, "Konami", "The Simpsons (2 Players)" )
475 GAME( 1991, simps2pa, simpsons, simpsons, simpsons, simpsons, ROT0, "Konami", "The Simpsons (2 Players alt)" )
476 GAME( 1991, simps2pj, simpsons, simpsons, simpsn2p, simpsons, ROT0, "Konami", "The Simpsons (2 Players Japan)" )
477