1 /***************************************************************************
2 
3 	Dark Seal (Rev 3)    (c) 1990 Data East Corporation (World version)
4 	Dark Seal (Rev 1)    (c) 1990 Data East Corporation (World version)
5 	Dark Seal            (c) 1990 Data East Corporation (Japanese version)
6 	Gate Of Doom (Rev 4) (c) 1990 Data East Corporation (USA version)
7 	Gate of Doom (Rev 1) (c) 1990 Data East Corporation (USA version)
8 
9 	Emulation by Bryan McPhail, mish@tendril.co.uk
10 
11 ***************************************************************************/
12 
13 #include "driver.h"
14 #include "vidhrdw/generic.h"
15 #include "cpu/h6280/h6280.h"
16 
17 VIDEO_START( darkseal );
18 VIDEO_UPDATE( darkseal );
19 
20 WRITE16_HANDLER( darkseal_pf1_data_w );
21 WRITE16_HANDLER( darkseal_pf2_data_w );
22 WRITE16_HANDLER( darkseal_pf3_data_w );
23 WRITE16_HANDLER( darkseal_pf3b_data_w );
24 WRITE16_HANDLER( darkseal_control_0_w );
25 WRITE16_HANDLER( darkseal_control_1_w );
26 WRITE16_HANDLER( darkseal_palette_24bit_rg_w );
27 WRITE16_HANDLER( darkseal_palette_24bit_b_w );
28 extern data16_t *darkseal_pf12_row, *darkseal_pf34_row;
29 extern data16_t *darkseal_pf1_data,*darkseal_pf2_data,*darkseal_pf3_data;
30 static data16_t *darkseal_ram;
31 
32 /******************************************************************************/
33 
WRITE16_HANDLER(darkseal_control_w)34 static WRITE16_HANDLER( darkseal_control_w )
35 {
36 	switch (offset<<1) {
37     case 6: /* DMA flag */
38 		buffer_spriteram16_w(0,0,0);
39 		return;
40     case 8: /* Sound CPU write */
41 		soundlatch_w(0,data & 0xff);
42 		cpu_set_irq_line(1,0,HOLD_LINE);
43     	return;
44   	case 0xa: /* IRQ Ack (VBL) */
45 		return;
46 	}
47 }
48 
READ16_HANDLER(darkseal_control_r)49 static READ16_HANDLER( darkseal_control_r )
50 {
51 	switch (offset<<1)
52 	{
53 		case 0: /* Dip Switches */
54 			return (readinputport(3) + (readinputport(4) << 8));
55 
56 		case 2: /* Player 1 & Player 2 joysticks & fire buttons */
57 			return (readinputport(0) + (readinputport(1) << 8));
58 
59 		case 4: /* Credits */
60 			return readinputport(2);
61 	}
62 
63 	return ~0;
64 }
65 
66 /******************************************************************************/
67 
MEMORY_READ16_START(darkseal_readmem)68 static MEMORY_READ16_START( darkseal_readmem )
69 	{ 0x000000, 0x07ffff, MRA16_ROM },
70 	{ 0x100000, 0x103fff, MRA16_RAM },
71 	{ 0x120000, 0x1207ff, MRA16_RAM },
72 	{ 0x140000, 0x140fff, MRA16_RAM },
73 	{ 0x141000, 0x141fff, MRA16_RAM },
74 	{ 0x180000, 0x18000f, darkseal_control_r },
75 	{ 0x220000, 0x220fff, MRA16_RAM },
76 	{ 0x222000, 0x222fff, MRA16_RAM },
77 MEMORY_END
78 
79 static MEMORY_WRITE16_START( darkseal_writemem )
80 	{ 0x000000, 0x07ffff, MWA16_ROM },
81 	{ 0x100000, 0x103fff, MWA16_RAM, &darkseal_ram },
82 	{ 0x120000, 0x1207ff, MWA16_RAM, &spriteram16, &spriteram_size },
83 	{ 0x140000, 0x140fff, darkseal_palette_24bit_rg_w, &paletteram16 },
84 	{ 0x141000, 0x141fff, darkseal_palette_24bit_b_w, &paletteram16_2 },
85 	{ 0x180000, 0x18000f, darkseal_control_w },
86  	{ 0x200000, 0x200fff, darkseal_pf3b_data_w }, /* 2nd half of pf3, only used on last level */
87 	{ 0x202000, 0x203fff, darkseal_pf3_data_w, &darkseal_pf3_data },
88 	{ 0x220000, 0x220fff, MWA16_RAM, &darkseal_pf12_row },
89 	{ 0x222000, 0x222fff, MWA16_RAM, &darkseal_pf34_row },
90 	{ 0x240000, 0x24000f, darkseal_control_0_w },
91 	{ 0x260000, 0x261fff, darkseal_pf2_data_w, &darkseal_pf2_data },
92 	{ 0x262000, 0x263fff, darkseal_pf1_data_w, &darkseal_pf1_data },
93 	{ 0x2a0000, 0x2a000f, darkseal_control_1_w },
94 MEMORY_END
95 
96 /******************************************************************************/
97 
98 static WRITE_HANDLER( YM2151_w )
99 {
100 	switch (offset) {
101 	case 0:
102 		YM2151_register_port_0_w(0,data);
103 		break;
104 	case 1:
105 		YM2151_data_port_0_w(0,data);
106 		break;
107 	}
108 }
109 
WRITE_HANDLER(YM2203_w)110 static WRITE_HANDLER( YM2203_w )
111 {
112 	switch (offset) {
113 	case 0:
114 		YM2203_control_port_0_w(0,data);
115 		break;
116 	case 1:
117 		YM2203_write_port_0_w(0,data);
118 		break;
119 	}
120 }
121 
MEMORY_READ_START(sound_readmem)122 static MEMORY_READ_START( sound_readmem )
123 	{ 0x000000, 0x00ffff, MRA_ROM },
124 	{ 0x100000, 0x100001, YM2203_status_port_0_r },
125 	{ 0x110000, 0x110001, YM2151_status_port_0_r },
126 	{ 0x120000, 0x120001, OKIM6295_status_0_r },
127 	{ 0x130000, 0x130001, OKIM6295_status_1_r },
128 	{ 0x140000, 0x140001, soundlatch_r },
129 	{ 0x1f0000, 0x1f1fff, MRA_BANK8 },
130 MEMORY_END
131 
132 static MEMORY_WRITE_START( sound_writemem )
133 	{ 0x000000, 0x00ffff, MWA_ROM },
134 	{ 0x100000, 0x100001, YM2203_w },
135 	{ 0x110000, 0x110001, YM2151_w },
136 	{ 0x120000, 0x120001, OKIM6295_data_0_w },
137 	{ 0x130000, 0x130001, OKIM6295_data_1_w },
138 	{ 0x1f0000, 0x1f1fff, MWA_BANK8 },
139 	{ 0x1fec00, 0x1fec01, H6280_timer_w },
140 	{ 0x1ff402, 0x1ff403, H6280_irq_status_w },
141 MEMORY_END
142 
143 /******************************************************************************/
144 
145 INPUT_PORTS_START( darkseal )
146 	PORT_START	/* Player 1 controls */
147 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
148 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
149 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
150 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
151 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
152 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
153 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )	/* button 3 - unused */
154 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
155 
156 	PORT_START	/* Player 2 controls */
157 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
158 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
159 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
160 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
161 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
162 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
163 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )	/* button 3 - unused */
164 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
165 
166 	PORT_START	/* Credits */
167 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
168 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
169 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
170 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK )
171 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
172 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
173 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
174 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
175 
176 	PORT_START	/* Dip switch bank 1 */
177 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
178 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
179 	PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
180 	PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
181 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
182 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
183 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
184 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_5C ) )
185 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_6C ) )
186 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
187 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
188 	PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
189 	PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
190 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) )
191 	PORT_DIPSETTING(    0x28, DEF_STR( 1C_3C ) )
192 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) )
193 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_5C ) )
194 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_6C ) )
195 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
196 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
197 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
198 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
199 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
200 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
201 
202 	PORT_START	/* Dip switch bank 2 */
203 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
204 	PORT_DIPSETTING(    0x00, "1" )
205 	PORT_DIPSETTING(    0x01, "2" )
206 	PORT_DIPSETTING(    0x03, "3" )
207 	PORT_DIPSETTING(    0x02, "4" )
208 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
209 	PORT_DIPSETTING(    0x08, "Easy" )
210 	PORT_DIPSETTING(    0x0c, "Normal" )
211 	PORT_DIPSETTING(    0x04, "Hard" )
212 	PORT_DIPSETTING(    0x00, "Hardest" )
213 	PORT_DIPNAME( 0x30, 0x30, "Energy" )
214 	PORT_DIPSETTING(    0x00, "2" )
215 	PORT_DIPSETTING(    0x10, "2.5" )
216 	PORT_DIPSETTING(    0x30, "3" )
217 	PORT_DIPSETTING(    0x20, "4" )
218 	PORT_DIPNAME( 0x40, 0x40, "Allow Continue" )
219 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
220 	PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
221 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
222 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
223 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
224 INPUT_PORTS_END
225 
226 /******************************************************************************/
227 
228 static struct GfxLayout charlayout =
229 {
230 	8,8,	/* 8*8 chars */
231 	4096,
232 	4,		/* 4 bits per pixel  */
233 	{ 0x00000*8, 0x10000*8, 0x8000*8, 0x18000*8 },
234 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
235 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
236 	8*8	/* every char takes 8 consecutive bytes */
237 };
238 
239 static struct GfxLayout seallayout =
240 {
241 	16,16,
242 	4096,
243 	4,
244 	{ 8, 0,  0x40000*8+8, 0x40000*8,},
245 	{ 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
246 		0, 1, 2, 3, 4, 5, 6, 7 },
247 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
248 			8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
249 	64*8
250 };
251 
252 static struct GfxLayout seallayout2 =
253 {
254 	16,16,
255 	4096*2,
256 	4,
257 	{ 8, 0, 0x80000*8+8, 0x80000*8 },
258 	{ 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
259 		0, 1, 2, 3, 4, 5, 6, 7 },
260 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
261 			8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
262 	64*8
263 };
264 
265 static struct GfxDecodeInfo gfxdecodeinfo[] =
266 {
267 	{ REGION_GFX1, 0, &charlayout,    0, 16 },	/* Characters 8x8 */
268 	{ REGION_GFX2, 0, &seallayout,  768, 16 },	/* Tiles 16x16 */
269 	{ REGION_GFX3, 0, &seallayout, 1024, 16 },	/* Tiles 16x16 */
270 	{ REGION_GFX4, 0, &seallayout2, 256, 32 },	/* Sprites 16x16 */
271 	{ -1 } /* end of array */
272 };
273 
274 /******************************************************************************/
275 
276 static struct OKIM6295interface okim6295_interface =
277 {
278 	2,              /* 2 chips */
279 	{ 32220000/32/132, 32220000/16/132 },/* Frequency */
280 	{ REGION_SOUND1, REGION_SOUND2 },
281 	{ 75, 60 } /* Note!  Keep chip 1 (voices) louder than chip 2 */
282 };
283 
284 static struct YM2203interface ym2203_interface =
285 {
286 	1,
287 	32220000/8, /* Accurate, audio section crystal is 32.220 MHz */
288 	{ YM2203_VOL(60,60) },
289 	{ 0 },
290 	{ 0 },
291 	{ 0 },
292 	{ 0 }
293 };
294 
sound_irq(int state)295 static void sound_irq(int state)
296 {
297 	cpu_set_irq_line(1,1,state); /* IRQ 2 */
298 }
299 
300 static struct YM2151interface ym2151_interface =
301 {
302 	1,
303 	32220000/9, /* Accurate, audio section crystal is 32.220 MHz */
304 	{ YM3012_VOL(45,MIXER_PAN_LEFT,45,MIXER_PAN_RIGHT) },
305 	{ sound_irq }
306 };
307 
308 static MACHINE_DRIVER_START( darkseal )
309 
310 	/* basic machine hardware */
311 	MDRV_CPU_ADD(M68000,12000000) /* Custom chip 59 */
MDRV_CPU_MEMORY(darkseal_readmem,darkseal_writemem)312 	MDRV_CPU_MEMORY(darkseal_readmem,darkseal_writemem)
313 	MDRV_CPU_VBLANK_INT(irq6_line_hold,1)/* VBL */
314 
315 	MDRV_CPU_ADD(H6280, 32220000/8) /* Custom chip 45, Audio section crystal is 32.220 MHz */
316 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
317 	MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
318 
319 	MDRV_FRAMES_PER_SECOND(58)
320 	MDRV_VBLANK_DURATION(529)
321 
322 	/* video hardware */
323 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_BUFFERS_SPRITERAM)
324 	MDRV_SCREEN_SIZE(32*8, 32*8)
325 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
326 	MDRV_GFXDECODE(gfxdecodeinfo)
327 	MDRV_PALETTE_LENGTH(2048)
328 
329 	MDRV_VIDEO_START(darkseal)
330 	MDRV_VIDEO_UPDATE(darkseal)
331 
332 	/* sound hardware */
333 	MDRV_SOUND_ADD(YM2203, ym2203_interface)
334 	MDRV_SOUND_ADD(YM2151, ym2151_interface)
335 	MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
336 MACHINE_DRIVER_END
337 
338 /******************************************************************************/
339 
340 ROM_START( darkseal )
341 	ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */
342 	ROM_LOAD16_BYTE( "ga04-3.rom",   0x00000, 0x20000, CRC(bafad556) SHA1(5bd8a787d41a33919701ced29212bc11301e31d9) )
343 	ROM_LOAD16_BYTE( "ga01-3.rom",   0x00001, 0x20000, CRC(f409050e) SHA1(4653094aeb5dd7ba1e490c04897a23ba8990df3c) )
344 	ROM_LOAD16_BYTE( "ga-00.rom",    0x40000, 0x20000, CRC(fbf3ac63) SHA1(51af581ee951eedeb4aa413ecbebe8bf4d30613b) )
345 	ROM_LOAD16_BYTE( "ga-05.rom",    0x40001, 0x20000, CRC(d5e3ae3f) SHA1(12f6e92af115422c6ab6ef1d33675d1e1cd58e10) )
346 
347 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* Sound CPU */
348 	ROM_LOAD( "fz-06.rom",    0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
349 
350 	ROM_REGION( 0x020000, REGION_GFX1, ROMREGION_DISPOSE )
351 	ROM_LOAD( "fz-02.rom",    0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) )	/* chars */
352 	ROM_LOAD( "fz-03.rom",    0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
353 
354 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
355 	ROM_LOAD( "mac-03.rom",   0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
356 
357 	ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
358 	ROM_LOAD( "mac-02.rom",   0x000000, 0x80000, CRC(49504e89) SHA1(6da4733a650b9040abb2a81a49476368b514b5ab) ) /* tiles 2 */
359 
360 	ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE )
361 	ROM_LOAD( "mac-00.rom",   0x000000, 0x80000, CRC(52acf1d6) SHA1(a7b68782417baafc86371b106fd31c5317f5b3d8) ) /* sprites */
362 	ROM_LOAD( "mac-01.rom",   0x080000, 0x80000, CRC(b28f7584) SHA1(e02ddd45130a7b50f80b6dd049059dba8071d768) )
363 
364 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )	/* ADPCM samples */
365 	ROM_LOAD( "fz-08.rom",    0x00000, 0x20000, CRC(c9bf68e1) SHA1(c81e2534a814fe44c8787946a9fbe18f1743c3b4) )
366 
367 	ROM_REGION( 0x20000, REGION_SOUND2, 0 )	/* ADPCM samples */
368 	ROM_LOAD( "fz-07.rom",    0x00000, 0x20000, CRC(588dd3cb) SHA1(16c4e7670a4967768ddbfd52939d4e6e42268441) )
369 ROM_END
370 
371 ROM_START( darksea1 )
372 	ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */
373 	ROM_LOAD16_BYTE( "ga-04.rom",    0x00000, 0x20000, CRC(a1a985a9) SHA1(eac3f43ff4016dcc21fe34b6bfed36e0d4b86959) )
374 	ROM_LOAD16_BYTE( "ga-01.rom",    0x00001, 0x20000, CRC(98bd2940) SHA1(88ac727c3797e646834266320a71aa159e2b2541) )
375 	ROM_LOAD16_BYTE( "ga-00.rom",    0x40000, 0x20000, CRC(fbf3ac63) SHA1(51af581ee951eedeb4aa413ecbebe8bf4d30613b) )
376 	ROM_LOAD16_BYTE( "ga-05.rom",    0x40001, 0x20000, CRC(d5e3ae3f) SHA1(12f6e92af115422c6ab6ef1d33675d1e1cd58e10) )
377 
378 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* Sound CPU */
379 	ROM_LOAD( "fz-06.rom",    0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
380 
381 	ROM_REGION( 0x020000, REGION_GFX1, ROMREGION_DISPOSE )
382 	ROM_LOAD( "fz-02.rom",    0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) )	/* chars */
383 	ROM_LOAD( "fz-03.rom",    0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
384 
385 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
386 	ROM_LOAD( "mac-03.rom",   0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
387 
388 	ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
389 	ROM_LOAD( "mac-02.rom",   0x000000, 0x80000, CRC(49504e89) SHA1(6da4733a650b9040abb2a81a49476368b514b5ab) ) /* tiles 2 */
390 
391 	ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE )
392 	ROM_LOAD( "mac-00.rom",   0x000000, 0x80000, CRC(52acf1d6) SHA1(a7b68782417baafc86371b106fd31c5317f5b3d8) ) /* sprites */
393 	ROM_LOAD( "mac-01.rom",   0x080000, 0x80000, CRC(b28f7584) SHA1(e02ddd45130a7b50f80b6dd049059dba8071d768) )
394 
395 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )	/* ADPCM samples */
396 	ROM_LOAD( "fz-08.rom",    0x00000, 0x20000, CRC(c9bf68e1) SHA1(c81e2534a814fe44c8787946a9fbe18f1743c3b4) )
397 
398 	ROM_REGION( 0x20000, REGION_SOUND2, 0 )	/* ADPCM samples */
399 	ROM_LOAD( "fz-07.rom",    0x00000, 0x20000, CRC(588dd3cb) SHA1(16c4e7670a4967768ddbfd52939d4e6e42268441) )
400 ROM_END
401 
402 ROM_START( darkseaj )
403 	ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */
404 	ROM_LOAD16_BYTE( "fz-04.bin",    0x00000, 0x20000, CRC(817faa2c) SHA1(8a79703f0e3aeb2ceeb098466561ab604baef301) )
405 	ROM_LOAD16_BYTE( "fz-01.bin",    0x00001, 0x20000, CRC(373caeee) SHA1(5cfa0c7672c439e9d011d9ec93da32c2377dce19) )
406 	ROM_LOAD16_BYTE( "fz-00.bin",    0x40000, 0x20000, CRC(1ab99aa7) SHA1(1da51f3ee0d15094911d4090264b945090d51242) )
407 	ROM_LOAD16_BYTE( "fz-05.bin",    0x40001, 0x20000, CRC(3374ef8c) SHA1(4144e71e452e281078bcd9b9a996db9f5dccc346) )
408 
409 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* Sound CPU */
410 	ROM_LOAD( "fz-06.rom",    0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
411 
412 	ROM_REGION( 0x020000, REGION_GFX1, ROMREGION_DISPOSE )
413 	ROM_LOAD( "fz-02.rom",    0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) )	/* chars */
414 	ROM_LOAD( "fz-03.rom",    0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
415 
416 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
417 	ROM_LOAD( "mac-03.rom",   0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
418 
419 	ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
420 	ROM_LOAD( "mac-02.rom",   0x000000, 0x80000, CRC(49504e89) SHA1(6da4733a650b9040abb2a81a49476368b514b5ab) ) /* tiles 2 */
421 
422 	ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE )
423 	ROM_LOAD( "mac-00.rom",   0x000000, 0x80000, CRC(52acf1d6) SHA1(a7b68782417baafc86371b106fd31c5317f5b3d8) ) /* sprites */
424 	ROM_LOAD( "mac-01.rom",   0x080000, 0x80000, CRC(b28f7584) SHA1(e02ddd45130a7b50f80b6dd049059dba8071d768) )
425 
426 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )	/* ADPCM samples */
427 	ROM_LOAD( "fz-08.rom",    0x00000, 0x20000, CRC(c9bf68e1) SHA1(c81e2534a814fe44c8787946a9fbe18f1743c3b4) )
428 
429 	ROM_REGION( 0x20000, REGION_SOUND2, 0 )	/* ADPCM samples */
430 	ROM_LOAD( "fz-07.rom",    0x00000, 0x20000, CRC(588dd3cb) SHA1(16c4e7670a4967768ddbfd52939d4e6e42268441) )
431 ROM_END
432 
433 ROM_START( gatedoom )
434 	ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */
435 	ROM_LOAD16_BYTE( "gb04-4",       0x00000, 0x20000, CRC(8e3a0bfd) SHA1(1d20bd678a630e2006c7f50f4d13656136db3721) )
436 	ROM_LOAD16_BYTE( "gb01-4",       0x00001, 0x20000, CRC(8d0fd383) SHA1(797e3cf43c9315b4195232eb1787a2292af4901b) )
437 	ROM_LOAD16_BYTE( "ga-00.rom",    0x40000, 0x20000, CRC(fbf3ac63) SHA1(51af581ee951eedeb4aa413ecbebe8bf4d30613b) )
438 	ROM_LOAD16_BYTE( "ga-05.rom",    0x40001, 0x20000, CRC(d5e3ae3f) SHA1(12f6e92af115422c6ab6ef1d33675d1e1cd58e10) )
439 
440 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* Sound CPU */
441 	ROM_LOAD( "fz-06.rom",    0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
442 
443 	ROM_REGION( 0x020000, REGION_GFX1, ROMREGION_DISPOSE )
444 	ROM_LOAD( "fz-02.rom",    0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) )	/* chars */
445 	ROM_LOAD( "fz-03.rom",    0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
446 
447 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
448 	ROM_LOAD( "mac-03.rom",   0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
449 
450 	ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
451 	ROM_LOAD( "mac-02.rom",   0x000000, 0x80000, CRC(49504e89) SHA1(6da4733a650b9040abb2a81a49476368b514b5ab) ) /* tiles 2 */
452 
453 	ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE )
454 	ROM_LOAD( "mac-00.rom",   0x000000, 0x80000, CRC(52acf1d6) SHA1(a7b68782417baafc86371b106fd31c5317f5b3d8) ) /* sprites */
455 	ROM_LOAD( "mac-01.rom",   0x080000, 0x80000, CRC(b28f7584) SHA1(e02ddd45130a7b50f80b6dd049059dba8071d768) )
456 
457 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )	/* ADPCM samples */
458 	ROM_LOAD( "fz-08.rom",    0x00000, 0x20000, CRC(c9bf68e1) SHA1(c81e2534a814fe44c8787946a9fbe18f1743c3b4) )
459 
460 	ROM_REGION( 0x20000, REGION_SOUND2, 0 )	/* ADPCM samples */
461 	ROM_LOAD( "fz-07.rom",    0x00000, 0x20000, CRC(588dd3cb) SHA1(16c4e7670a4967768ddbfd52939d4e6e42268441) )
462 ROM_END
463 
464 ROM_START( gatedom1 )
465 	ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */
466 	ROM_LOAD16_BYTE( "gb04.bin",     0x00000, 0x20000, CRC(4c3bbd2b) SHA1(e74a532edd01a559d0c388b37a2ead98c19fe5de) )
467 	ROM_LOAD16_BYTE( "gb01.bin",     0x00001, 0x20000, CRC(59e367f4) SHA1(f88fa23b8e91f312103eb8a1d9a91d8171ec3ad4) )
468 	ROM_LOAD16_BYTE( "gb00.bin",     0x40000, 0x20000, CRC(a88c16a1) SHA1(e02d5470692f23afa658b9bda933bb20be64602f) )
469 	ROM_LOAD16_BYTE( "gb05.bin",     0x40001, 0x20000, CRC(252d7e14) SHA1(b2f27cd9686dfc697f3faca74d20b298a59efab2) )
470 
471 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* Sound CPU */
472 	ROM_LOAD( "fz-06.rom",    0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
473 
474 	ROM_REGION( 0x020000, REGION_GFX1, ROMREGION_DISPOSE )
475 	ROM_LOAD( "fz-02.rom",    0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) )	/* chars */
476 	ROM_LOAD( "fz-03.rom",    0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
477 
478   	/* the following four have not been verified on a real Gate of Doom */
479 	/* board - might be different from Dark Seal! */
480 
481 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
482 	ROM_LOAD( "mac-03.rom",   0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
483 
484 	ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
485 	ROM_LOAD( "mac-02.rom",   0x000000, 0x80000, CRC(49504e89) SHA1(6da4733a650b9040abb2a81a49476368b514b5ab) ) /* tiles 2 */
486 
487 	ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE )
488 	ROM_LOAD( "mac-00.rom",   0x000000, 0x80000, CRC(52acf1d6) SHA1(a7b68782417baafc86371b106fd31c5317f5b3d8) ) /* sprites */
489 	ROM_LOAD( "mac-01.rom",   0x080000, 0x80000, CRC(b28f7584) SHA1(e02ddd45130a7b50f80b6dd049059dba8071d768) )
490 
491 	ROM_REGION( 0x20000, REGION_SOUND1, 0 )	/* ADPCM samples */
492 	ROM_LOAD( "fz-08.rom",    0x00000, 0x20000, CRC(c9bf68e1) SHA1(c81e2534a814fe44c8787946a9fbe18f1743c3b4) )
493 
494 	ROM_REGION( 0x20000, REGION_SOUND2, 0 )	/* ADPCM samples */
495 	ROM_LOAD( "fz-07.rom",    0x00000, 0x20000, CRC(588dd3cb) SHA1(16c4e7670a4967768ddbfd52939d4e6e42268441) )
496 ROM_END
497 
498 /******************************************************************************/
499 
500 static DRIVER_INIT( darkseal )
501 {
502 	unsigned char *RAM = memory_region(REGION_CPU1);
503 	int i;
504 
505 	for (i=0x00000; i<0x80000; i++)
506 		RAM[i]=(RAM[i] & 0xbd) | ((RAM[i] & 0x02) << 5) | ((RAM[i] & 0x40) >> 5);
507 
508 }
509 
510 /******************************************************************************/
511 
512 GAME( 1990, darkseal, 0,        darkseal, darkseal, darkseal, ROT0, "Data East Corporation", "Dark Seal (World revision 3)" )
513 GAME( 1990, darksea1, darkseal, darkseal, darkseal, darkseal, ROT0, "Data East Corporation", "Dark Seal (World revision 1)" )
514 GAME( 1990, darkseaj, darkseal, darkseal, darkseal, darkseal, ROT0, "Data East Corporation", "Dark Seal (Japan)" )
515 GAME( 1990, gatedoom, darkseal, darkseal, darkseal, darkseal, ROT0, "Data East Corporation", "Gate of Doom (US revision 4)" )
516 GAME( 1990, gatedom1, darkseal, darkseal, darkseal, darkseal, ROT0, "Data East Corporation", "Gate of Doom (US revision 1)" )
517