1 /***************************************************************************
2 GOINDOL
3
4 Driver provided by Jarek Parchanski (jpdev@friko6.onet.pl)
5
6 Notes:
7 - byte at 7f87 controls region:
8 0 = Japan
9 1 = USA
10 2 = World
11 Regardless of the setting of this byte, the startup notice in Korean is
12 always displayed.
13 After the title screen, depending on the byte you get "for use only in Japan",
14 "for use only in USA", or the Korean notice again! So 2 might actually mean
15 Korea instead of World... but that version surely got to Europe since Gerald
16 has three boards with this ROM.
17
18 ***************************************************************************/
19
20 #include "driver.h"
21 #include "vidhrdw/generic.h"
22
23 VIDEO_START( goindol );
24 WRITE_HANDLER( goindol_fg_videoram_w );
25 WRITE_HANDLER( goindol_bg_videoram_w );
26 VIDEO_UPDATE( goindol );
27
28 extern UINT8 *goindol_fg_scrollx;
29 extern UINT8 *goindol_fg_scrolly;
30 extern UINT8 *goindol_fg_videoram;
31 extern UINT8 *goindol_bg_videoram;
32 extern UINT8 *spriteram_1;
33 extern UINT8 *spriteram_2;
34 extern size_t goindol_fg_videoram_size;
35 extern size_t goindol_bg_videoram_size;
36 extern int goindol_char_bank;
37
38
WRITE_HANDLER(goindol_bankswitch_w)39 WRITE_HANDLER( goindol_bankswitch_w )
40 {
41 int bankaddress;
42 UINT8 *RAM = memory_region(REGION_CPU1);
43
44 bankaddress = 0x10000 + ((data & 3) * 0x4000);
45 cpu_setbank(1,&RAM[bankaddress]);
46
47 if (goindol_char_bank != ((data & 0x10) >> 4))
48 {
49 goindol_char_bank = (data & 0x10) >> 4;
50 tilemap_mark_all_tiles_dirty(ALL_TILEMAPS);
51 }
52
53 flip_screen_set(data & 0x20);
54 }
55
56
57
READ_HANDLER(prot_f422_r)58 static READ_HANDLER( prot_f422_r )
59 {
60 static int toggle;
61
62 /* bit 7 = vblank? */
63 toggle ^= 0x80;
64
65 return toggle;
66 }
67
68
69 static UINT8 *ram;
70
WRITE_HANDLER(prot_fc44_w)71 static WRITE_HANDLER( prot_fc44_w )
72 {
73 log_cb(RETRO_LOG_DEBUG, LOGPRE "%04x: prot_fc44_w(%02x)\n",activecpu_get_pc(),data);
74 ram[0x0419] = 0x5b;
75 ram[0x041a] = 0x3f;
76 ram[0x041b] = 0x6d;
77 }
78
WRITE_HANDLER(prot_fd99_w)79 static WRITE_HANDLER( prot_fd99_w )
80 {
81 log_cb(RETRO_LOG_DEBUG, LOGPRE "%04x: prot_fd99_w(%02x)\n",activecpu_get_pc(),data);
82 ram[0x0421] = 0x3f;
83 }
84
WRITE_HANDLER(prot_fc66_w)85 static WRITE_HANDLER( prot_fc66_w )
86 {
87 log_cb(RETRO_LOG_DEBUG, LOGPRE "%04x: prot_fc66_w(%02x)\n",activecpu_get_pc(),data);
88 ram[0x0423] = 0x06;
89 }
90
WRITE_HANDLER(prot_fcb0_w)91 static WRITE_HANDLER( prot_fcb0_w )
92 {
93 log_cb(RETRO_LOG_DEBUG, LOGPRE "%04x: prot_fcb0_w(%02x)\n",activecpu_get_pc(),data);
94 ram[0x0425] = 0x06;
95 }
96
97
98
MEMORY_READ_START(readmem)99 static MEMORY_READ_START( readmem )
100 { 0x0000, 0x7fff, MRA_ROM },
101 { 0x8000, 0xbfff, MRA_BANK1 },
102 { 0xc000, 0xc7ff, MRA_RAM },
103 { 0xc800, 0xc800, MRA_NOP }, /* watchdog?*/
104 { 0xd000, 0xefff, MRA_RAM },
105 { 0xf000, 0xf000, input_port_3_r },
106 { 0xf422, 0xf422, prot_f422_r },
107 { 0xf800, 0xf800, input_port_4_r },
108 { 0xc834, 0xc834, input_port_1_r },
109 { 0xc820, 0xc820, input_port_2_r },
110 { 0xc830, 0xc830, input_port_0_r },
111 { 0xe000, 0xefff, MRA_RAM },
112 MEMORY_END
113
114 static MEMORY_WRITE_START( writemem )
115 { 0x0000, 0xbfff, MWA_ROM },
116 { 0xc000, 0xc7ff, MWA_RAM, &ram },
117 { 0xc810, 0xc810, goindol_bankswitch_w },
118 { 0xc820, 0xd820, MWA_RAM, &goindol_fg_scrolly },
119 { 0xc830, 0xd830, MWA_RAM, &goindol_fg_scrollx },
120 { 0xc800, 0xc800, soundlatch_w },
121 { 0xd000, 0xd03f, MWA_RAM, &spriteram, &spriteram_size },
122 { 0xd040, 0xd7ff, MWA_RAM },
123 { 0xd800, 0xdfff, goindol_bg_videoram_w, &goindol_bg_videoram, &goindol_bg_videoram_size },
124 { 0xe000, 0xe03f, MWA_RAM, &spriteram_2 },
125 { 0xe040, 0xe7ff, MWA_RAM },
126 { 0xe800, 0xefff, goindol_fg_videoram_w, &goindol_fg_videoram, &goindol_fg_videoram_size },
127 { 0xfc44, 0xfc44, prot_fc44_w },
128 { 0xfc66, 0xfc66, prot_fc66_w },
129 { 0xfcb0, 0xfcb0, prot_fcb0_w },
130 { 0xfd99, 0xfd99, prot_fd99_w },
131 MEMORY_END
132
133 static MEMORY_READ_START( sound_readmem )
134 { 0x0000, 0x7fff, MRA_ROM },
135 { 0xc000, 0xc7ff, MRA_RAM },
136 { 0xd800, 0xd800, soundlatch_r },
137 MEMORY_END
138
139 static MEMORY_WRITE_START( sound_writemem )
140 { 0x0000, 0x7fff, MWA_ROM },
141 { 0xc000, 0xc7ff, MWA_RAM },
142 { 0xa000, 0xa000, YM2203_control_port_0_w },
143 { 0xa001, 0xa001, YM2203_write_port_0_w },
144 MEMORY_END
145
146
147 INPUT_PORTS_START( goindol )
148 PORT_START /* IN0 */
149 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
150 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
151 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
152 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
153 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
154 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
155 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
156 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
157
158 PORT_START /* IN1 */
159 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
160 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
161 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
162 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
163 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
164 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
165 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
166 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN2, 1 )
167
168 PORT_START /* IN2 - spinner */
169 PORT_ANALOG( 0xff, 0x00, IPT_DIAL , 40, 10, 0, 0)
170
171 PORT_START /* DSW0 */
172 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
173 PORT_DIPSETTING( 0x03, "2" )
174 PORT_DIPSETTING( 0x02, "3" )
175 PORT_DIPSETTING( 0x01, "4" )
176 PORT_DIPSETTING( 0x00, "5" )
177 PORT_DIPNAME( 0x1c, 0x0c, DEF_STR( Difficulty ) )
178 PORT_DIPSETTING( 0x1c, "Easiest" )
179 PORT_DIPSETTING( 0x18, "Very Very Easy" )
180 PORT_DIPSETTING( 0x14, "Very Easy" )
181 PORT_DIPSETTING( 0x10, "Easy" )
182 PORT_DIPSETTING( 0x0c, "Normal" )
183 PORT_DIPSETTING( 0x08, "Difficult" )
184 PORT_DIPSETTING( 0x04, "Hard" )
185 PORT_DIPSETTING( 0x00, "Very Hard" )
186 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
187 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
188 PORT_DIPSETTING( 0x00, DEF_STR( On ))
189 PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
190 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
191 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
192 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
193
194 PORT_START /* DSW1 */
195 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Bonus_Life ) )
196 PORT_DIPSETTING( 0x04, "30k and every 50k" )
197 PORT_DIPSETTING( 0x05, "50k and every 100k" )
198 PORT_DIPSETTING( 0x06, "50k and every 200k" )
199 PORT_DIPSETTING( 0x07, "100k and every 200k" )
200 PORT_DIPSETTING( 0x01, "10000 only" )
201 PORT_DIPSETTING( 0x02, "30000 only" )
202 PORT_DIPSETTING( 0x03, "50000 only" )
203 PORT_DIPSETTING( 0x00, "None" )
204 PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coinage ) )
205 PORT_DIPSETTING( 0x28, DEF_STR( 3C_1C ) )
206 PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
207 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
208 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
209 PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
210 PORT_DIPSETTING( 0x18, DEF_STR( 1C_4C ) )
211 PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) )
212 PORT_DIPSETTING( 0x38, DEF_STR( 1C_6C ) )
213 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
214 PORT_DIPSETTING( 0x40, DEF_STR( Upright ) )
215 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
216 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
217 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
218 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
219 INPUT_PORTS_END
220
221 INPUT_PORTS_START( homo )
222 PORT_START /* IN0 */
223 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
224 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
225 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
226 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
227 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
228 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
229 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
230 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
231
232 PORT_START /* IN1 */
233 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
234 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
235 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
236 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
237 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
238 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
239 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
240 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN2, 1 )
241
242 PORT_START /* IN2 - spinner */
243 PORT_ANALOG( 0xff, 0x00, IPT_DIAL , 40, 10, 0, 0)
244
245 PORT_START /* DSW0 */
246 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
247 PORT_DIPSETTING( 0x03, "2" )
248 PORT_DIPSETTING( 0x02, "3" )
249 PORT_DIPSETTING( 0x01, "4" )
250 PORT_DIPSETTING( 0x00, "5" )
251 PORT_DIPNAME( 0x1c, 0x0c, DEF_STR( Difficulty ) )
252 PORT_DIPSETTING( 0x1c, "Easiest" )
253 PORT_DIPSETTING( 0x18, "Very Very Easy" )
254 PORT_DIPSETTING( 0x14, "Very Easy" )
255 PORT_DIPSETTING( 0x10, "Easy" )
256 PORT_DIPSETTING( 0x0c, "Normal" )
257 PORT_DIPSETTING( 0x08, "Difficult" )
258 PORT_DIPSETTING( 0x04, "Hard" )
259 PORT_DIPSETTING( 0x00, "Very Hard" )
260 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
261 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
262 PORT_DIPSETTING( 0x00, DEF_STR( On ))
263 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
264 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
265 PORT_DIPSETTING( 0x00, DEF_STR( On ))
266 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
267
268 PORT_START /* DSW1 */
269 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Bonus_Life ) )
270 PORT_DIPSETTING( 0x04, "30k and every 50k" )
271 PORT_DIPSETTING( 0x05, "50k and every 100k" )
272 PORT_DIPSETTING( 0x06, "50k and every 200k" )
273 PORT_DIPSETTING( 0x07, "100k and every 200k" )
274 PORT_DIPSETTING( 0x01, "10000 only" )
275 PORT_DIPSETTING( 0x02, "30000 only" )
276 PORT_DIPSETTING( 0x03, "50000 only" )
277 PORT_DIPSETTING( 0x00, "None" )
278 PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coinage ) )
279 PORT_DIPSETTING( 0x28, DEF_STR( 3C_1C ) )
280 PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
281 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
282 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
283 PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
284 PORT_DIPSETTING( 0x18, DEF_STR( 1C_4C ) )
285 PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) )
286 PORT_DIPSETTING( 0x38, DEF_STR( 1C_6C ) )
287 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
288 PORT_DIPSETTING( 0x40, DEF_STR( Upright ) )
289 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
290 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
291 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
292 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
293 INPUT_PORTS_END
294
295
296 static struct GfxLayout charlayout =
297 {
298 8,8,
299 RGN_FRAC(1,3),
300 3,
301 { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
302 { 0, 1, 2, 3, 4, 5, 6, 7 },
303 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
304 8*8
305 };
306
307 static struct GfxDecodeInfo gfxdecodeinfo[] =
308 {
309 { REGION_GFX1, 0, &charlayout, 0, 32 },
310 { REGION_GFX2, 0, &charlayout, 0, 32 },
311 { -1 } /* end of array */
312 };
313
314
315 static struct YM2203interface ym2203_interface =
316 {
317 1, /* 1 chip */
318 2000000, /* 2 MHz (?) */
319 { YM2203_VOL(25,25) },
320 { 0 },
321 { 0 },
322 { 0 },
323 { 0 }
324 };
325
326
327
328 static MACHINE_DRIVER_START( goindol )
329
330 /* basic machine hardware */
331 MDRV_CPU_ADD(Z80, 6000000) /* 6 MHz (?) */
MDRV_CPU_MEMORY(readmem,writemem)332 MDRV_CPU_MEMORY(readmem,writemem)
333 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
334
335 MDRV_CPU_ADD(Z80, 4000000)
336 MDRV_CPU_FLAGS(CPU_AUDIO_CPU) /* 4 MHz (?) */
337 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
338 MDRV_CPU_VBLANK_INT(irq0_line_hold,4)
339
340 MDRV_FRAMES_PER_SECOND(60)
341 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
342
343 /* video hardware */
344 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
345 MDRV_SCREEN_SIZE(32*8, 32*8)
346 MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
347 MDRV_GFXDECODE(gfxdecodeinfo)
348 MDRV_PALETTE_LENGTH(256)
349
350 MDRV_PALETTE_INIT(RRRR_GGGG_BBBB)
351 MDRV_VIDEO_START(goindol)
352 MDRV_VIDEO_UPDATE(goindol)
353
354 /* sound hardware */
355 MDRV_SOUND_ADD(YM2203, ym2203_interface)
356 MACHINE_DRIVER_END
357
358
359
360 /***************************************************************************
361
362 Game driver(s)
363
364 ***************************************************************************/
365
366 ROM_START( goindol )
367 ROM_REGION( 0x20000, REGION_CPU1, 0 ) /* 2*64k for code */
368 ROM_LOAD( "r1w", 0x00000, 0x8000, CRC(df77c502) SHA1(15d111e38d63a8a800fbf5f15c4fb72efb0e5cf4) ) /* Code 0000-7fff */
369 ROM_LOAD( "r2", 0x10000, 0x8000, CRC(1ff6e3a2) SHA1(321d32b5236f8fadc55b00412081cd17fbdb42bf) ) /* Paged data */
370 ROM_LOAD( "r3", 0x18000, 0x8000, CRC(e9eec24a) SHA1(d193dd23b8bee3a788114e6bb86902dddf6fdd99) ) /* Paged data */
371
372 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
373 ROM_LOAD( "r10", 0x00000, 0x8000, CRC(72e1add1) SHA1(e8bdaffbbbf8ed22eb161cb8d7945ff09420f68f) )
374
375 ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
376 ROM_LOAD( "r4", 0x00000, 0x8000, CRC(1ab84225) SHA1(47494d03fb8d153335203155e61d90108db62961) ) /* Characters */
377 ROM_LOAD( "r5", 0x08000, 0x8000, CRC(4997d469) SHA1(60c482b2408079bc8b2ffb86bc01927d5cad66ea) )
378 ROM_LOAD( "r6", 0x10000, 0x8000, CRC(752904b0) SHA1(6ff44bd45b000bccae4fd67eefce936aacd971fc) )
379
380 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE )
381 ROM_LOAD( "r7", 0x00000, 0x8000, CRC(362f2a27) SHA1(9b8232a9ce7d752a749897fb2231a005c734239d) )
382 ROM_LOAD( "r8", 0x08000, 0x8000, CRC(9fc7946e) SHA1(89100fae14826ad4f6735770827cbfe97562038c) )
383 ROM_LOAD( "r9", 0x10000, 0x8000, CRC(e6212fe4) SHA1(f42b5ddbdb6599ba4ff5e6ef7d86e55f58a671b6) )
384
385 ROM_REGION( 0x0300, REGION_PROMS, 0 )
386 ROM_LOAD( "am27s21.pr1", 0x0000, 0x0100, CRC(361f0868) SHA1(aea681a2e168aca327a998db7b537c7b82dbc433) ) /* palette red bits */
387 ROM_LOAD( "am27s21.pr2", 0x0100, 0x0100, CRC(e355da4d) SHA1(40ebdbf6519b2817402ea716aae838c315da4fcb) ) /* palette green bits */
388 ROM_LOAD( "am27s21.pr3", 0x0200, 0x0100, CRC(8534cfb5) SHA1(337b6d5e9ceb2116aea73a7a4ac7e70716460323) ) /* palette blue bits */
389 ROM_END
390
391 ROM_START( goindolu )
392 ROM_REGION( 0x20000, REGION_CPU1, 0 ) /* 2*64k for code */
393 ROM_LOAD( "r1", 0x00000, 0x8000, CRC(3111c61b) SHA1(6cc3834f946566646f06efe0b65c4704574ec6f1) ) /* Code 0000-7fff */
394 ROM_LOAD( "r2", 0x10000, 0x8000, CRC(1ff6e3a2) SHA1(321d32b5236f8fadc55b00412081cd17fbdb42bf) ) /* Paged data */
395 ROM_LOAD( "r3", 0x18000, 0x8000, CRC(e9eec24a) SHA1(d193dd23b8bee3a788114e6bb86902dddf6fdd99) ) /* Paged data */
396
397 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
398 ROM_LOAD( "r10", 0x00000, 0x8000, CRC(72e1add1) SHA1(e8bdaffbbbf8ed22eb161cb8d7945ff09420f68f) )
399
400 ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
401 ROM_LOAD( "r4", 0x00000, 0x8000, CRC(1ab84225) SHA1(47494d03fb8d153335203155e61d90108db62961) ) /* Characters */
402 ROM_LOAD( "r5", 0x08000, 0x8000, CRC(4997d469) SHA1(60c482b2408079bc8b2ffb86bc01927d5cad66ea) )
403 ROM_LOAD( "r6", 0x10000, 0x8000, CRC(752904b0) SHA1(6ff44bd45b000bccae4fd67eefce936aacd971fc) )
404
405 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE )
406 ROM_LOAD( "r7", 0x00000, 0x8000, CRC(362f2a27) SHA1(9b8232a9ce7d752a749897fb2231a005c734239d) )
407 ROM_LOAD( "r8", 0x08000, 0x8000, CRC(9fc7946e) SHA1(89100fae14826ad4f6735770827cbfe97562038c) )
408 ROM_LOAD( "r9", 0x10000, 0x8000, CRC(e6212fe4) SHA1(f42b5ddbdb6599ba4ff5e6ef7d86e55f58a671b6) )
409
410 ROM_REGION( 0x0300, REGION_PROMS, 0 )
411 ROM_LOAD( "am27s21.pr1", 0x0000, 0x0100, CRC(361f0868) SHA1(aea681a2e168aca327a998db7b537c7b82dbc433) ) /* palette red bits */
412 ROM_LOAD( "am27s21.pr2", 0x0100, 0x0100, CRC(e355da4d) SHA1(40ebdbf6519b2817402ea716aae838c315da4fcb) ) /* palette green bits */
413 ROM_LOAD( "am27s21.pr3", 0x0200, 0x0100, CRC(8534cfb5) SHA1(337b6d5e9ceb2116aea73a7a4ac7e70716460323) ) /* palette blue bits */
414 ROM_END
415
416 ROM_START( goindolj )
417 ROM_REGION( 0x20000, REGION_CPU1, 0 ) /* 2*64k for code */
418 ROM_LOAD( "r1j", 0x00000, 0x8000, CRC(dde33ad3) SHA1(23cdb3494f5eeaeae2657a0101d5827aa32c526d) ) /* Code 0000-7fff */
419 ROM_LOAD( "r2", 0x10000, 0x8000, CRC(1ff6e3a2) SHA1(321d32b5236f8fadc55b00412081cd17fbdb42bf) ) /* Paged data */
420 ROM_LOAD( "r3", 0x18000, 0x8000, CRC(e9eec24a) SHA1(d193dd23b8bee3a788114e6bb86902dddf6fdd99) ) /* Paged data */
421
422 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
423 ROM_LOAD( "r10", 0x00000, 0x8000, CRC(72e1add1) SHA1(e8bdaffbbbf8ed22eb161cb8d7945ff09420f68f) )
424
425 ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
426 ROM_LOAD( "r4", 0x00000, 0x8000, CRC(1ab84225) SHA1(47494d03fb8d153335203155e61d90108db62961) ) /* Characters */
427 ROM_LOAD( "r5", 0x08000, 0x8000, CRC(4997d469) SHA1(60c482b2408079bc8b2ffb86bc01927d5cad66ea) )
428 ROM_LOAD( "r6", 0x10000, 0x8000, CRC(752904b0) SHA1(6ff44bd45b000bccae4fd67eefce936aacd971fc) )
429
430 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE )
431 ROM_LOAD( "r7", 0x00000, 0x8000, CRC(362f2a27) SHA1(9b8232a9ce7d752a749897fb2231a005c734239d) )
432 ROM_LOAD( "r8", 0x08000, 0x8000, CRC(9fc7946e) SHA1(89100fae14826ad4f6735770827cbfe97562038c) )
433 ROM_LOAD( "r9", 0x10000, 0x8000, CRC(e6212fe4) SHA1(f42b5ddbdb6599ba4ff5e6ef7d86e55f58a671b6) )
434
435 ROM_REGION( 0x0300, REGION_PROMS, 0 )
436 ROM_LOAD( "am27s21.pr1", 0x0000, 0x0100, CRC(361f0868) SHA1(aea681a2e168aca327a998db7b537c7b82dbc433) ) /* palette red bits */
437 ROM_LOAD( "am27s21.pr2", 0x0100, 0x0100, CRC(e355da4d) SHA1(40ebdbf6519b2817402ea716aae838c315da4fcb) ) /* palette green bits */
438 ROM_LOAD( "am27s21.pr3", 0x0200, 0x0100, CRC(8534cfb5) SHA1(337b6d5e9ceb2116aea73a7a4ac7e70716460323) ) /* palette blue bits */
439 ROM_END
440
441 ROM_START( homo )
442 ROM_REGION( 0x20000, REGION_CPU1, 0 ) /* 2*64k for code */
443 ROM_LOAD( "homo.01", 0x00000, 0x8000, CRC(28c539ad) SHA1(64e950a4238a5656a9e0d0a699a6545da8c59548) ) /* Code 0000-7fff */
444 ROM_LOAD( "r2", 0x10000, 0x8000, CRC(1ff6e3a2) SHA1(321d32b5236f8fadc55b00412081cd17fbdb42bf) ) /* Paged data */
445 ROM_LOAD( "r3", 0x18000, 0x8000, CRC(e9eec24a) SHA1(d193dd23b8bee3a788114e6bb86902dddf6fdd99) ) /* Paged data */
446
447 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
448 ROM_LOAD( "r10", 0x00000, 0x8000, CRC(72e1add1) SHA1(e8bdaffbbbf8ed22eb161cb8d7945ff09420f68f) )
449
450 ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
451 ROM_LOAD( "r4", 0x00000, 0x8000, CRC(1ab84225) SHA1(47494d03fb8d153335203155e61d90108db62961) ) /* Characters */
452 ROM_LOAD( "r5", 0x08000, 0x8000, CRC(4997d469) SHA1(60c482b2408079bc8b2ffb86bc01927d5cad66ea) )
453 ROM_LOAD( "r6", 0x10000, 0x8000, CRC(752904b0) SHA1(6ff44bd45b000bccae4fd67eefce936aacd971fc) )
454
455 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE )
456 ROM_LOAD( "r7", 0x00000, 0x8000, CRC(362f2a27) SHA1(9b8232a9ce7d752a749897fb2231a005c734239d) )
457 ROM_LOAD( "r8", 0x08000, 0x8000, CRC(9fc7946e) SHA1(89100fae14826ad4f6735770827cbfe97562038c) )
458 ROM_LOAD( "r9", 0x10000, 0x8000, CRC(e6212fe4) SHA1(f42b5ddbdb6599ba4ff5e6ef7d86e55f58a671b6) )
459
460 ROM_REGION( 0x0300, REGION_PROMS, 0 )
461 ROM_LOAD( "am27s21.pr1", 0x0000, 0x0100, CRC(361f0868) SHA1(aea681a2e168aca327a998db7b537c7b82dbc433) ) /* palette red bits */
462 ROM_LOAD( "am27s21.pr2", 0x0100, 0x0100, CRC(e355da4d) SHA1(40ebdbf6519b2817402ea716aae838c315da4fcb) ) /* palette green bits */
463 ROM_LOAD( "am27s21.pr3", 0x0200, 0x0100, CRC(8534cfb5) SHA1(337b6d5e9ceb2116aea73a7a4ac7e70716460323) ) /* palette blue bits */
464 ROM_END
465
466
467
468 DRIVER_INIT( goindol )
469 {
470 UINT8 *rom = memory_region(REGION_CPU1);
471
472
473 /* I hope that's all patches to avoid protection */
474
475 rom[0x18e9] = 0x18; /* ROM 1 check*/
476 rom[0x1964] = 0x00; /* ROM 9 error (MCU?)*/
477 rom[0x1965] = 0x00; /**/
478 rom[0x1966] = 0x00; /**/
479 /* rom[0x17c7] = 0x00; */ /* c421 == 3f*/
480 /* rom[0x17c8] = 0x00; */ /**/
481 /* rom[0x16f0] = 0x18; */ /* c425 == 06*/
482 /* rom[0x172c] = 0x18; */ /* c423 == 06*/
483 /* rom[0x1779] = 0x00; */ /* c419 == 5b 3f 6d*/
484 /* rom[0x177a] = 0x00; */ /**/
485 rom[0x063f] = 0x18; /*->fc55*/
486 rom[0x0b30] = 0x00; /* verify code at 0601-064b*/
487 rom[0x1bdf] = 0x18; /*->fc49*/
488
489 rom[0x04a7] = 0xc9;
490 rom[0x0831] = 0xc9;
491 rom[0x3365] = 0x00; /* verify code at 081d-0876*/
492 rom[0x0c13] = 0xc9;
493 rom[0x134e] = 0xc9;
494 rom[0x333d] = 0xc9;
495 }
496
497
498
499 GAMEX(1987, goindol, 0, goindol, goindol, goindol, ROT90, "Sun a Electronics", "Goindol (World)", GAME_UNEMULATED_PROTECTION )
500 GAMEX(1987, goindolu, goindol, goindol, goindol, goindol, ROT90, "Sun a Electronics", "Goindol (US)", GAME_UNEMULATED_PROTECTION )
501 GAMEX(1987, goindolj, goindol, goindol, goindol, goindol, ROT90, "Sun a Electronics", "Goindol (Korea)", GAME_UNEMULATED_PROTECTION )
502 GAME( 1987, homo, goindol, goindol, homo, 0, ROT90, "bootleg", "Homo" )
503