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