1 /***************************************************************************
2
3 Snow Brothers (Toaplan) / SemiCom Hardware
4 uses Kaneko's Pandora sprite chip (also used in DJ Boy, Air Buster ..)
5
6 Snow Bros Nick & Tom
7 Toaplan, 1990
8
9 PCB Layout
10 ----------
11 MIN16-02
12
13 |------------------------------------------|
14 | VOL YM3812 6116 4464 4464 |
15 | LA4460 YM3014 4464 4464 |
16 | 458 SBROS-4.29 SBROS1.40 |
17 | 2003 Z80B PANDORA |
18 |J D41101C-1 LS07 LS32 |
19 |A SBROS-3A.5 SBROS-2A.6 LS139 LS174|
20 |M LS245 LS74 LS04 16MHz|
21 |M 6264 6264 F32 LS74 LS74 |
22 |A 68000 LS20 F138 LS04 12MHz|
23 | LS04 LS148 LS251 LS00 |
24 | LS273 LS245 LS245 LS158 LS257 LS257 LS32 |
25 | |
26 | LS273 6116 6116 LS157 DSW2 DSW1 |
27 |------------------------------------------|
28
29 Notes:
30 68k clock: 8.000MHz
31 Z80B clock: 6.000MHz
32 YM3812 clock: 3.000MHz
33 VSync: 57.5Hz
34 HSync: 15.68kHz
35
36 driver by Mike Coates
37
38 Hyper Pacman addition by David Haywood
39 + some bits by Nicola Salmoria
40
41
42 Stephh's notes (hyperpac):
43
44 - According to the "Language" Dip Switch, this game is a Korean game.
45 (although the Language Dipswitch doesn't affect language, but yes
46 I believe SemiCom to be a Korean Company)
47 - There is no "cocktail mode", nor way to flip the screen.
48
49 todo:
50
51 make the originals work.
52 they're probably all this hardware or a varation on it, they don't work
53 (most point the interrupt vectors directly at a small area of ram which I'd
54 guess is shared with the Philips 87c52 mcu, more more plus doesn't point the
55 vectors there but does have a jump there in the code). See hyperpac for an
56 example, the protection data for that game was extracted from the bootleg.
57
58 ***************************************************************************/
59
60 #include "driver.h"
61 #include "vidhrdw/generic.h"
62 #include "cpu/m68000/m68000.h"
63 #include "cpu/z80/z80.h"
64
65
66 WRITE16_HANDLER( snowbros_flipscreen_w );
67 VIDEO_UPDATE( snowbros );
68 VIDEO_UPDATE( wintbob );
69
70 static data16_t *hyperpac_ram;
71
INTERRUPT_GEN(snowbros_interrupt)72 static INTERRUPT_GEN( snowbros_interrupt )
73 {
74 cpu_set_irq_line(0, cpu_getiloops() + 2, HOLD_LINE); /* IRQs 4, 3, and 2 */
75 }
76
77
78 /* Sound Routines */
79
READ16_HANDLER(snowbros_68000_sound_r)80 READ16_HANDLER( snowbros_68000_sound_r )
81 {
82 int ret;
83
84 /* If the sound CPU is running, read the YM3812 status, otherwise
85 just make it pass the test */
86 if (Machine->sample_rate != 0)
87 {
88 ret = soundlatch_r(offset);
89 }
90 else
91 {
92 ret = 3;
93 }
94
95 return ret;
96 }
97
98
WRITE16_HANDLER(snowbros_68000_sound_w)99 static WRITE16_HANDLER( snowbros_68000_sound_w )
100 {
101 if (ACCESSING_LSB)
102 {
103 soundlatch_w(offset,data & 0xff);
104 cpu_set_irq_line(1,IRQ_LINE_NMI,PULSE_LINE);
105 }
106 }
107
WRITE16_HANDLER(semicom_soundcmd_w)108 static WRITE16_HANDLER( semicom_soundcmd_w )
109 {
110 if (ACCESSING_LSB) soundlatch_w(0,data & 0xff);
111 }
112
113
114 /* Snow Bros Memory Map */
115
MEMORY_READ16_START(readmem)116 static MEMORY_READ16_START( readmem )
117 { 0x000000, 0x03ffff, MRA16_ROM },
118 { 0x100000, 0x103fff, MRA16_RAM },
119 { 0x300000, 0x300001, snowbros_68000_sound_r },
120 { 0x500000, 0x500001, input_port_0_word_r },
121 { 0x500002, 0x500003, input_port_1_word_r },
122 { 0x500004, 0x500005, input_port_2_word_r },
123 { 0x600000, 0x6001ff, MRA16_RAM },
124 { 0x700000, 0x701fff, MRA16_RAM },
125 MEMORY_END
126
127 static MEMORY_WRITE16_START( writemem )
128 { 0x000000, 0x03ffff, MWA16_ROM },
129 { 0x100000, 0x103fff, MWA16_RAM },
130 { 0x200000, 0x200001, watchdog_reset16_w },
131 { 0x300000, 0x300001, snowbros_68000_sound_w },
132 { 0x400000, 0x400001, snowbros_flipscreen_w },
133 { 0x600000, 0x6001ff, paletteram16_xBBBBBGGGGGRRRRR_word_w, &paletteram16 },
134 { 0x700000, 0x701fff, MWA16_RAM, &spriteram16, &spriteram_size },
135 { 0x800000, 0x800001, MWA16_NOP }, /* IRQ 4 acknowledge? */
136 { 0x900000, 0x900001, MWA16_NOP }, /* IRQ 3 acknowledge? */
137 { 0xa00000, 0xa00001, MWA16_NOP }, /* IRQ 2 acknowledge? */
138 MEMORY_END
139
140 static MEMORY_READ_START( sound_readmem )
141 { 0x0000, 0x7fff, MRA_ROM },
142 { 0x8000, 0x87ff, MRA_RAM },
143 MEMORY_END
144
145 static MEMORY_WRITE_START( sound_writemem )
146 { 0x0000, 0x7fff, MWA_ROM },
147 { 0x8000, 0x87ff, MWA_RAM },
148 MEMORY_END
149
150 static PORT_READ_START( sound_readport )
151 { 0x02, 0x02, YM3812_status_port_0_r },
152 { 0x04, 0x04, soundlatch_r },
153 PORT_END
154
155 static PORT_WRITE_START( sound_writeport )
156 { 0x02, 0x02, YM3812_control_port_0_w },
157 { 0x03, 0x03, YM3812_write_port_0_w },
158 { 0x04, 0x04, soundlatch_w }, /* goes back to the main CPU, checked during boot */
159 PORT_END
160
161 /* SemiCom Memory Map
162
163 the SemiCom games have slightly more ram and are protected
164 sound hardware is also different
165
166 */
167
168 static MEMORY_READ16_START( hyperpac_readmem )
169 { 0x000000, 0x0fffff, MRA16_ROM },
170 { 0x100000, 0x10ffff, MRA16_RAM },
171
172 { 0x500000, 0x500001, input_port_0_word_r },
173 { 0x500002, 0x500003, input_port_1_word_r },
174 { 0x500004, 0x500005, input_port_2_word_r },
175
176 { 0x600000, 0x6001ff, MRA16_RAM },
177 { 0x700000, 0x701fff, MRA16_RAM },
178 MEMORY_END
179
180 static MEMORY_WRITE16_START( hyperpac_writemem )
181 { 0x000000, 0x0fffff, MWA16_ROM },
182 { 0x100000, 0x10ffff, MWA16_RAM, &hyperpac_ram },
183 { 0x300000, 0x300001, semicom_soundcmd_w },
184 /* { 0x400000, 0x400001, }, ???*/
185 { 0x600000, 0x6001ff, paletteram16_xBBBBBGGGGGRRRRR_word_w, &paletteram16 },
186 { 0x700000, 0x701fff, MWA16_RAM, &spriteram16, &spriteram_size },
187
188 { 0x800000, 0x800001, MWA16_NOP }, /* IRQ 4 acknowledge? */
189 { 0x900000, 0x900001, MWA16_NOP }, /* IRQ 3 acknowledge? */
190 { 0xa00000, 0xa00001, MWA16_NOP }, /* IRQ 2 acknowledge? */
191 MEMORY_END
192
193 static MEMORY_READ_START( hyperpac_sound_readmem )
194 { 0x0000, 0xcfff, MRA_ROM },
195 { 0xd000, 0xd7ff, MRA_RAM },
196 { 0xf001, 0xf001, YM2151_status_port_0_r },
197 { 0xf008, 0xf008, soundlatch_r },
198 MEMORY_END
199
200 static MEMORY_WRITE_START( hyperpac_sound_writemem )
201 { 0x0000, 0xcfff, MWA_ROM },
202 { 0xd000, 0xd7ff, MWA_RAM },
203 { 0xf000, 0xf000, YM2151_register_port_0_w },
204 { 0xf001, 0xf001, YM2151_data_port_0_w },
205 { 0xf002, 0xf002, OKIM6295_data_0_w },
206 /* { 0xf006, 0xf006, }, ???*/
207 MEMORY_END
208
209 INPUT_PORTS_START( snowbros )
210 PORT_START /* 500001 */
211 PORT_DIPNAME( 0x01, 0x00, "Country (Affects Coinage)" )
212 PORT_DIPSETTING( 0x00, "Europe" )
213 PORT_DIPSETTING( 0x01, "America (Romstar license)" )
214 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
215 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
216 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
217 PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
218 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
219 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
220 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
221 /* Better to implement a coin mode 1-2 stuff later */
222 PORT_DIPNAME( 0x30, 0x30, "Coin A Europe/America" )
223 PORT_DIPSETTING( 0x00, "4C/1C 2C/3C" )
224 PORT_DIPSETTING( 0x10, "3C/1C 2C/1C" )
225 PORT_DIPSETTING( 0x20, "2C/1C 1C/2C" )
226 PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
227 PORT_DIPNAME( 0xc0, 0xc0, "Coin B Europe/America" )
228 PORT_DIPSETTING( 0xc0, "1C/2C 1C/1C" )
229 PORT_DIPSETTING( 0x80, "1C/3C 1C/2C" )
230 PORT_DIPSETTING( 0x40, "1C/4C 2C/1C" )
231 PORT_DIPSETTING( 0x00, "1C/6C 2C/3C" )
232 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
233 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
234 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
235 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
236 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
237 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
238 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
239 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
240 /* probably VBlank */
241
242 PORT_START /* 500003 */
243 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
244 PORT_DIPSETTING( 0x02, "Easy" )
245 PORT_DIPSETTING( 0x03, "Normal" )
246 PORT_DIPSETTING( 0x01, "Hard" )
247 PORT_DIPSETTING( 0x00, "Hardest" )
248 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
249 PORT_DIPSETTING( 0x04, "100k and every 200k " )
250 PORT_DIPSETTING( 0x0c, "100k Only" )
251 PORT_DIPSETTING( 0x08, "200k Only" )
252 PORT_DIPSETTING( 0x00, "None" )
253 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
254 PORT_DIPSETTING( 0x20, "1" )
255 PORT_DIPSETTING( 0x00, "2" )
256 PORT_DIPSETTING( 0x30, "3" )
257 PORT_DIPSETTING( 0x10, "4" )
258 PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
259 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
260 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
261 PORT_DIPNAME( 0x80, 0x80, "Allow Continue" )
262 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
263 PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
264 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
265 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
266 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
267 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
268 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
269 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
270 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
271 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
272
273 PORT_START /* 500005 */
274 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
275 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
276 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
277 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
278 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
279 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
280 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
281 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
282 INPUT_PORTS_END
283
284 INPUT_PORTS_START( snowbroj )
285 PORT_START /* 500001 */
286 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
287 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
288 PORT_DIPSETTING( 0x01, DEF_STR( On ) )
289 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
290 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
291 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
292 PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
293 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
294 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
295 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
296 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )
297 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
298 PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
299 PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
300 PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
301 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )
302 PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
303 PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
304 PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
305 PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
306 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
307 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
308 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
309 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
310 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
311 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
312 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
313 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
314 /* probably VBlank */
315
316 PORT_START /* 500003 */
317 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
318 PORT_DIPSETTING( 0x02, "Easy" )
319 PORT_DIPSETTING( 0x03, "Normal" )
320 PORT_DIPSETTING( 0x01, "Hard" )
321 PORT_DIPSETTING( 0x00, "Hardest" )
322 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
323 PORT_DIPSETTING( 0x04, "100k and every 200k " )
324 PORT_DIPSETTING( 0x0c, "100k Only" )
325 PORT_DIPSETTING( 0x08, "200k Only" )
326 PORT_DIPSETTING( 0x00, "None" )
327 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
328 PORT_DIPSETTING( 0x20, "1" )
329 PORT_DIPSETTING( 0x00, "2" )
330 PORT_DIPSETTING( 0x30, "3" )
331 PORT_DIPSETTING( 0x10, "4" )
332 PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
333 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
334 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
335 PORT_DIPNAME( 0x80, 0x80, "Allow Continue" )
336 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
337 PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
338 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
339 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
340 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
341 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
342 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
343 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
344 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
345 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
346
347 PORT_START /* 500005 */
348 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
349 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
350 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
351 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
352 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
353 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
354 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
355 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
356 INPUT_PORTS_END
357
358 INPUT_PORTS_START( hyperpac )
359 PORT_START /* 500000.w */
360 PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )
361 PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
362 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
363 PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Lives ) ) /* "Language" in the "test mode"*/
364 PORT_DIPSETTING( 0x0002, "3" ) /* "Korean"*/
365 PORT_DIPSETTING( 0x0000, "5" ) /* "English"*/
366 PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )
367 PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
368 PORT_DIPSETTING( 0x0004, DEF_STR( 4C_1C ) )
369 PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
370 PORT_DIPSETTING( 0x000c, DEF_STR( 2C_1C ) )
371 PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) )
372 PORT_DIPSETTING( 0x0014, DEF_STR( 2C_3C ) )
373 PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) )
374 PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
375 PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )
376 PORT_DIPSETTING( 0x0000, "Easy" )
377 PORT_DIPSETTING( 0x0060, "Normal" )
378 PORT_DIPSETTING( 0x0040, "Hard" )
379 PORT_DIPSETTING( 0x0020, "Hardest" ) /* "Very Hard"*/
380 PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
381 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
382 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
383 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
384 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
385 PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 ) /* jump*/
386 PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER1 ) /* fire*/
387 PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER1 ) /* test mode only?*/
388 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
389
390 PORT_START /* 500002.w */
391 PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) )
392 PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
393 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
394 PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) )
395 PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
396 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
397 PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) )
398 PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
399 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
400 PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) )
401 PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
402 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
403 PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
404 PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
405 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
406 PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
407 PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
408 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
409 PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
410 PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
411 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
412 PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
413 PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
414 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
415 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
416 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
417 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
418 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
419 PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 ) /* jump*/
420 PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 ) /* fire*/
421 PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER2 ) /* test mode only?*/
422 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
423
424 PORT_START /* 500004.w */
425 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
426 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
427 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
428 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
429 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
430 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
431 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
432 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
433 INPUT_PORTS_END
434
435 INPUT_PORTS_START( cookbib2 )
436 PORT_START /* 500000.w */
437 PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )
438 PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
439 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
440 PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Lives ) ) /* "Language" in the "test mode"*/
441 PORT_DIPSETTING( 0x0002, "3" ) /* "Korean"*/
442 PORT_DIPSETTING( 0x0000, "5" ) /* "English"*/
443 PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )
444 PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
445 PORT_DIPSETTING( 0x0004, DEF_STR( 4C_1C ) )
446 PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
447 PORT_DIPSETTING( 0x000c, DEF_STR( 2C_1C ) )
448 PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) )
449 PORT_DIPSETTING( 0x0014, DEF_STR( 2C_3C ) )
450 PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) )
451 PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
452 PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )
453 PORT_DIPSETTING( 0x0000, "Easy" )
454 PORT_DIPSETTING( 0x0060, "Normal" )
455 PORT_DIPSETTING( 0x0040, "Hard" )
456 PORT_DIPSETTING( 0x0020, "Hardest" ) /* "Very Hard"*/
457 PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
458 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
459 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
460 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
461 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
462 PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 ) /* jump*/
463 PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER1 ) /* fire*/
464 PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER1 ) /* test mode only?*/
465 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
466
467 PORT_START /* 500002.w */
468 PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) )
469 PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
470 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
471 PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) )
472 PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
473 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
474 PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) )
475 PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
476 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
477 PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) )
478 PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
479 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
480 PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
481 PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
482 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
483 PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
484 PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
485 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
486 PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
487 PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
488 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
489 PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
490 PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
491 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
492 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
493 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
494 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
495 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
496 PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 ) /* jump*/
497 PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 ) /* fire*/
498 PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER2 ) /* test mode only?*/
499 PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
500
501 PORT_START /* 500004.w */
502 PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
503 PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
504 PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
505 PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
506 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
507 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
508 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
509 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
510 INPUT_PORTS_END
511
512 /* SnowBros */
513
514 static struct GfxLayout tilelayout =
515 {
516 16,16,
517 RGN_FRAC(1,1),
518 4,
519 { 0, 1, 2, 3 },
520 { STEP8(0,4), STEP8(8*32,4) },
521 { STEP8(0,32), STEP8(16*32,32) },
522 32*32
523 };
524
525 static struct GfxDecodeInfo gfxdecodeinfo[] =
526 {
527 { REGION_GFX1, 0, &tilelayout, 0, 16 },
528 { -1 } /* end of array */
529 };
530
531 /* Winter Bobble */
532
533 static struct GfxLayout tilelayout_wb =
534 {
535 16,16,
536 RGN_FRAC(1,1),
537 4,
538 { 0, 1, 2, 3 },
539 { STEP4(3*4,-4), STEP4(7*4,-4), STEP4(11*4,-4), STEP4(15*4,-4) },
540 { STEP16(0,64) },
541 16*64
542 };
543
544 static struct GfxDecodeInfo gfxdecodeinfo_wb[] =
545 {
546 { REGION_GFX1, 0, &tilelayout_wb, 0, 16 },
547 { -1 }
548 };
549
550 /* SemiCom */
551
552 static struct GfxLayout hyperpac_tilelayout =
553 {
554 16,16,
555 RGN_FRAC(1,1),
556 4,
557 { 0, 1, 2, 3 },
558 { 4, 0, 8*32+4, 8*32+0, 20,16, 8*32+20, 8*32+16,
559 12, 8, 8*32+12, 8*32+8, 28, 24, 8*32+28, 8*32+24 },
560 { 0*32, 2*32, 1*32, 3*32, 16*32+0*32, 16*32+2*32, 16*32+1*32, 16*32+3*32,
561 4*32, 6*32, 5*32, 7*32, 16*32+4*32, 16*32+6*32, 16*32+5*32, 16*32+7*32 },
562 32*32
563 };
564
565 static struct GfxDecodeInfo hyperpac_gfxdecodeinfo[] =
566 {
567 { REGION_GFX1, 0, &hyperpac_tilelayout, 0, 16 },
568 { -1 } /* end of array */
569 };
570
571 /* handler called by the 3812/2151 emulator when the internal timers cause an IRQ */
irqhandler(int irq)572 static void irqhandler(int irq)
573 {
574 cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
575 }
576
577 /* SnowBros Sound */
578
579 static struct YM3812interface ym3812_interface =
580 {
581 1, /* 1 chip */
582 3000000, /* 3 MHz - confirmed */
583 { 100 }, /* volume */
584 { irqhandler },
585 };
586
587 /* SemiCom Sound */
588
589 static struct YM2151interface ym2151_interface =
590 {
591 1,
592 4000000, /* 4 MHz??? */
593 { YM3012_VOL(10,MIXER_PAN_LEFT,10,MIXER_PAN_RIGHT) },
594 { irqhandler }
595 };
596
597 static struct OKIM6295interface okim6295_interface =
598 {
599 1, /* 1 chip */
600 { 7575 }, /* 7575Hz playback? */
601 { REGION_SOUND1 },
602 { 100 }
603 };
604
605
606 static MACHINE_DRIVER_START( snowbros )
607
608 /* basic machine hardware */
609 MDRV_CPU_ADD_TAG("main", M68000, 8000000) /* 8 Mhz - confirmed */
MDRV_CPU_MEMORY(readmem,writemem)610 MDRV_CPU_MEMORY(readmem,writemem)
611 MDRV_CPU_VBLANK_INT(snowbros_interrupt,3)
612
613 MDRV_CPU_ADD_TAG("sound", Z80, 6000000) /* 6 MHz - confirmed */
614 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
615 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
616 MDRV_CPU_PORTS(sound_readport,sound_writeport)
617
618 MDRV_FRAMES_PER_SECOND(57.5) /* ~57.5 - confirmed */
619 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
620
621 /* video hardware */
622 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
623 MDRV_SCREEN_SIZE(32*8, 32*8)
624 MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
625 MDRV_GFXDECODE(gfxdecodeinfo)
626 MDRV_PALETTE_LENGTH(256)
627
628 MDRV_VIDEO_UPDATE(snowbros)
629
630 /* sound hardware */
631 MDRV_SOUND_ADD_TAG("3812", YM3812, ym3812_interface)
632 MACHINE_DRIVER_END
633
634
635 static MACHINE_DRIVER_START( wintbob )
636 /* basic machine hardware */
637 MDRV_IMPORT_FROM(snowbros)
638 MDRV_CPU_REPLACE("main", M68000, 10000000) /* faster cpu on bootleg? otherwise the gfx break up */
639
640 /* video hardware */
641 MDRV_GFXDECODE(gfxdecodeinfo_wb)
642 MDRV_VIDEO_UPDATE(wintbob)
643 MACHINE_DRIVER_END
644
645
646 static MACHINE_DRIVER_START( hyperpac )
647
648 /* basic machine hardware */
649 MDRV_IMPORT_FROM(snowbros)
650 MDRV_CPU_REPLACE("main", M68000, 16000000) /* 16mhz or 12mhz ? */
651 MDRV_CPU_MEMORY(hyperpac_readmem,hyperpac_writemem)
652
653 MDRV_CPU_REPLACE("sound", Z80, 4000000) /* 4.0 MHz ??? */
654 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
655 MDRV_CPU_MEMORY(hyperpac_sound_readmem,hyperpac_sound_writemem)
656
657 MDRV_GFXDECODE(hyperpac_gfxdecodeinfo)
658
659 /* sound hardware */
660 MDRV_SOUND_REPLACE("3812",YM2151, ym2151_interface)
661 MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
662 MACHINE_DRIVER_END
663
664 static MACHINE_DRIVER_START( _4in1 )
665 /* basic machine hardware */
666 MDRV_IMPORT_FROM(hyperpac)
667 MDRV_GFXDECODE(gfxdecodeinfo)
668 MACHINE_DRIVER_END
669
670 /***************************************************************************
671
672 Game driver(s)
673
674 ***************************************************************************/
675
676 ROM_START( snowbros )
677 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
678 ROM_LOAD16_BYTE( "sn6.bin", 0x00000, 0x20000, CRC(4899ddcf) SHA1(47d750d3022a80e47ffabe47566bb2556cc8d477) )
679 ROM_LOAD16_BYTE( "sn5.bin", 0x00001, 0x20000, CRC(ad310d3f) SHA1(f39295b38d99087dbb9c5b00bf9cb963337a50e2) )
680
681 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for z80 sound code */
682 ROM_LOAD( "sbros-4.29", 0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
683
684 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
685 ROM_LOAD( "sbros-1.41", 0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
686 /* where were these from, a bootleg? */
687 /* ROM_LOAD( "ch0", 0x00000, 0x20000, CRC(36d84dfe) SHA1(5d45a750220930bc409de30f19282bb143fbf94f) )*/
688 /* ROM_LOAD( "ch1", 0x20000, 0x20000, CRC(76347256) SHA1(48ec03965905adaba5e50eb3e42a2813f7883bb4) )*/
689 /* ROM_LOAD( "ch2", 0x40000, 0x20000, CRC(fdaa634c) SHA1(1271c74df7da7596caf67caae3c51b4c163a49f4) )*/
690 /* ROM_LOAD( "ch3", 0x60000, 0x20000, CRC(34024aef) SHA1(003a9b9ee3aaab3d787894d3d4126d372b19d2a8) )*/
691 ROM_END
692
693 ROM_START( snowbroa )
694 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
695 ROM_LOAD16_BYTE( "sbros-3a.5", 0x00000, 0x20000, CRC(10cb37e1) SHA1(786be4640f8df2c81a32decc189ea7657ace00c6) )
696 ROM_LOAD16_BYTE( "sbros-2a.6", 0x00001, 0x20000, CRC(ab91cc1e) SHA1(8cff61539dc7d35fcbf110d3e54fc1883e7b8509) )
697
698 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for z80 sound code */
699 ROM_LOAD( "sbros-4.29", 0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
700
701 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
702 ROM_LOAD( "sbros-1.41", 0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
703 ROM_END
704
705 ROM_START( snowbrob )
706 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
707 ROM_LOAD16_BYTE( "sbros3-a", 0x00000, 0x20000, CRC(301627d6) SHA1(0d1dc70091c87e9c27916d4232ff31b7381a64e1) )
708 ROM_LOAD16_BYTE( "sbros2-a", 0x00001, 0x20000, CRC(f6689f41) SHA1(e4fd27b930a31479c0d99e0ddd23d5db34044666) )
709
710 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for z80 sound code */
711 ROM_LOAD( "sbros-4.29", 0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
712
713 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
714 ROM_LOAD( "sbros-1.41", 0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
715 ROM_END
716
717 ROM_START( snowbroj )
718 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
719 ROM_LOAD16_BYTE( "snowbros.3", 0x00000, 0x20000, CRC(3f504f9e) SHA1(700758b114c3fde6ea8f84222af0850dba13cd3b) )
720 ROM_LOAD16_BYTE( "snowbros.2", 0x00001, 0x20000, CRC(854b02bc) SHA1(4ad1548eef94dcb95119cb4a7dcdefa037591b5b) )
721
722 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for z80 sound code */
723 ROM_LOAD( "sbros-4.29", 0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
724
725 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
726 /* The gfx ROM (snowbros.1) was bad, I'm using the ones from the other sets. */
727 ROM_LOAD( "sbros-1.41", 0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
728 ROM_END
729
730 ROM_START( wintbob )
731 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
732 ROM_LOAD16_BYTE( "wb03.bin", 0x00000, 0x10000, CRC(df56e168) SHA1(20dbabdd97e6f3d4bf6500bf9e8476942cb48ae3) )
733 ROM_LOAD16_BYTE( "wb01.bin", 0x00001, 0x10000, CRC(05722f17) SHA1(9356e2488ea35e0a2978689f2ca6dfa0d57fd2ed) )
734 ROM_LOAD16_BYTE( "wb04.bin", 0x20000, 0x10000, CRC(53be758d) SHA1(56cf85ba23fe699031d73e8f367a1b8ac837d5f8) )
735 ROM_LOAD16_BYTE( "wb02.bin", 0x20001, 0x10000, CRC(fc8e292e) SHA1(857cfeb0be121e64e6117120514ae1f2ffeae4d6) )
736
737 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for z80 sound code */
738 ROM_LOAD( "wb05.bin", 0x0000, 0x10000, CRC(53fe59df) SHA1(a99053e82b9fed76f744fa9f67078294641c6317) )
739
740 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
741 /* probably identical data to Snow Bros, in a different format */
742 ROM_LOAD16_BYTE( "wb13.bin", 0x00000, 0x10000, CRC(426921de) SHA1(5107c58e7e08d71895baa67fe260b17ebd61389c) )
743 ROM_LOAD16_BYTE( "wb06.bin", 0x00001, 0x10000, CRC(68204937) SHA1(fd2ef93df5fd8aa2d36072858dbcfce41157ef3e) )
744 ROM_LOAD16_BYTE( "wb12.bin", 0x20000, 0x10000, CRC(ef4e04c7) SHA1(17158b61b3c158e0491db9abb2e1a8c20d981d37) )
745 ROM_LOAD16_BYTE( "wb07.bin", 0x20001, 0x10000, CRC(53f40978) SHA1(058bbf3b7877f0cd320383e0386c5959e0d6589b) )
746 ROM_LOAD16_BYTE( "wb11.bin", 0x40000, 0x10000, CRC(41cb4563) SHA1(94f1d12d299ac08fc8522139e1927f0cf739be75) )
747 ROM_LOAD16_BYTE( "wb08.bin", 0x40001, 0x10000, CRC(9497b88c) SHA1(367c6106276f3816528341f11f3a97ae458d25cd) )
748 ROM_LOAD16_BYTE( "wb10.bin", 0x60000, 0x10000, CRC(5fa22b1e) SHA1(1164003d873e9738a3ca133cce689c7120061e3c) )
749 ROM_LOAD16_BYTE( "wb09.bin", 0x60001, 0x10000, CRC(9be718ca) SHA1(5c195e4f13efbdb229201d2408d018861bf389cc) )
750 ROM_END
751
752 /* SemiCom Games */
753
754 ROM_START( hyperpac )
755 ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
756 ROM_LOAD16_BYTE( "hyperpac.h12", 0x00001, 0x20000, CRC(2cf0531a) SHA1(c4321d728845035507352d0bcf4348d28b92e85e) )
757 ROM_LOAD16_BYTE( "hyperpac.i12", 0x00000, 0x20000, CRC(9c7d85b8) SHA1(432d5fbe8bef875ce4a9aeb74a7b57dc79c709fd) )
758
759 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
760 ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) )
761
762 ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
763 ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
764
765 ROM_REGION( 0x0c0000, REGION_GFX1, 0 ) /* Sprites */
766 ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
767 ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
768 ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
769 ROM_END
770
771 ROM_START( hyperpcb )
772 ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
773 ROM_LOAD16_BYTE( "hpacuh12.bin", 0x00001, 0x20000, CRC(633ab2c6) SHA1(534435fa602adebf651e1d42f7c96b01eb6634ef) )
774 ROM_LOAD16_BYTE( "hpacui12.bin", 0x00000, 0x20000, CRC(23dc00d1) SHA1(8d4d00f450b94912adcbb24073f9b3b01eab0450) )
775
776 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
777 ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) ) /* was missing from this set, using the one from the original*/
778
779 ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
780 ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
781
782 ROM_REGION( 0x0c0000, REGION_GFX1, 0 ) /* Sprites */
783 ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
784 ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
785 ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
786 ROM_END
787
788 ROM_START( moremorp )
789 ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
790 ROM_LOAD16_BYTE( "mmp_u52.bin", 0x00001, 0x40000, CRC(66baf9b2) SHA1(f1d383a94ef4313cb02c59ace17b9562eddcfb3c) )
791 ROM_LOAD16_BYTE( "mmp_u74.bin", 0x00000, 0x40000, CRC(7c6fede5) SHA1(41bc539a6efe9eb2304243701857b972d2170bcf) )
792
793 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
794 ROM_LOAD( "mmp_u35.bin", 0x00000, 0x10000 , CRC(4d098cad) SHA1(a79d417e7525a25dd6697da9f3d1de269e759d2e) )
795
796 ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
797 ROM_LOAD( "mmp_u14.bin", 0x00000, 0x40000, CRC(211a2566) SHA1(48138547822a8e76c101dd4189d581f80eee1e24) )
798
799 ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Sprites */
800 ROM_LOAD( "mmp_u75.bin", 0x000000, 0x80000, CRC(af9e824e) SHA1(2b68813bf025a34b8958033108e4f8d39fd618cb) )
801 ROM_LOAD( "mmp_u76.bin", 0x080000, 0x80000, CRC(c42af064) SHA1(f9d755e7cb52828d8594f7871932daf11443689f) )
802 ROM_LOAD( "mmp_u77.bin", 0x100000, 0x80000, CRC(1d7396e1) SHA1(bde7e925051408dd2371b5da8235a6a4cae8cf6a) )
803 ROM_LOAD( "mmp_u78.bin", 0x180000, 0x80000, CRC(5508d80b) SHA1(1b9a70a502b237fa11d1d55dce761e2def18873a) )
804 ROM_END
805
806 ROM_START( 3in1semi )
807 ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
808 ROM_LOAD16_BYTE( "u52", 0x00001, 0x40000, CRC(b0e4a0f7) SHA1(e1f8b8ef020a85fcd7817814cf6c5d560e9e608d) )
809 ROM_LOAD16_BYTE( "u74", 0x00000, 0x40000, CRC(266862c4) SHA1(2c5c513fee99bdb6e0ae3e0e644e516bdaddd629) )
810
811 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
812 ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) )
813
814 ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
815 ROM_LOAD( "u14", 0x00000, 0x40000, CRC(c83c11be) SHA1(c05d96d61e5b8245232c85cbbcb7cc1e4e066492) )
816
817 ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Sprites */
818 ROM_LOAD( "u75", 0x000000, 0x80000, CRC(b66a0db6) SHA1(a4e604eb3c0a5b16b4b0bb99219045bf2146287c) )
819 ROM_LOAD( "u76", 0x080000, 0x80000, CRC(5f4b48ea) SHA1(e9dd1100d55b021b060990988c1e5271ce1ae35b) )
820 ROM_LOAD( "u77", 0x100000, 0x80000, CRC(d44211e3) SHA1(53af19dec03e76912632450414cdbcbb31cc094c) )
821 ROM_LOAD( "u78", 0x180000, 0x80000, CRC(af596afc) SHA1(875d7a51ff5c741cae4483d8da33df9cae8de52a) )
822 ROM_END
823
824 ROM_START( 4in1boot ) /* snow bros, tetris, hyperman 1, pacman 2 */
825 ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
826 ROM_LOAD16_BYTE( "u52", 0x00001, 0x80000, CRC(71815878) SHA1(e3868f5687c1d8ec817671c50ade6c56ee83bfa1) )
827 ROM_LOAD16_BYTE( "u74", 0x00000, 0x80000, CRC(e22d3fa2) SHA1(020ab92d8cbf37a9f8186a81934abb97088c16f9) )
828
829 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
830 ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(c894ac80) SHA1(ee896675b5205ab2dbd0cbb13db16aa145391d06) )
831
832 ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
833 ROM_LOAD( "u14", 0x00000, 0x40000, CRC(94b09b0e) SHA1(414de3e36eff85126038e8ff74145b35076e0a43) )
834
835 ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Sprites */
836 ROM_LOAD( "u78", 0x000000, 0x100000, BAD_DUMP CRC(5a06a928) SHA1(d35f239f2dddfe174547c1404aed6faf6b61e19f) ) /* half missing*/
837 ROM_END
838
839
840 ROM_START( cookbib2 )
841 ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */
842 ROM_LOAD16_BYTE( "cookbib2.02", 0x00001, 0x40000, CRC(b2909460) SHA1(2438638af870cfc105631d2b5e5a27a64ab5394d) )
843 ROM_LOAD16_BYTE( "cookbib2.01", 0x00000, 0x40000, CRC(65aafde2) SHA1(01f9f261527c35182f0445d641d987aa86ad750f) )
844
845 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
846 ROM_LOAD( "cookbib2.07", 0x00000, 0x10000 , CRC(f59f1c9a) SHA1(2830261fd55249e015514fcb4cf8392e83b7fd0d) )
847
848 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */
849 ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
850
851 ROM_REGION( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */
852 /* this is not a real rom but instead the data extracted from
853 shared ram, the MCU puts it there */
854 ROM_LOAD16_WORD_SWAP( "protdata.bin", 0x00000, 0x200 , CRC(ae6d8ed5) SHA1(410cdacb9b90ea345c0e4be85e60a138f45a51f1) )
855
856 ROM_REGION( 0x020000, REGION_SOUND1, 0 ) /* Samples */
857 ROM_LOAD( "cookbib2.06", 0x00000, 0x20000, CRC(5e6f76b8) SHA1(725800143dfeaa6093ed5fcc5b9f15678ae9e547) )
858
859 ROM_REGION( 0x140000, REGION_GFX1, 0 ) /* Sprites */
860 ROM_LOAD( "cookbib2.05", 0x000000, 0x80000, CRC(89fb38ce) SHA1(1b39dd9c2743916b8d8af590bd92fe4819c2454b) )
861 ROM_LOAD( "cookbib2.04", 0x080000, 0x80000, CRC(f240111f) SHA1(b2c3b6e3d916fc68e1fd258b1279b6c39e1f0108) )
862 ROM_LOAD( "cookbib2.03", 0x100000, 0x40000, CRC(e1604821) SHA1(bede6bdd8331128b9f2b229d718133470bf407c9) )
863 ROM_END
864
865 static DRIVER_INIT( cookbib2 )
866 {
867 /* data16_t *HCROM = (data16_t*)memory_region(REGION_CPU1);*/
868 data16_t *PROTDATA = (data16_t*)memory_region(REGION_USER1);
869 int i;
870 /* hyperpac_ram[0xf000/2] = 0x46fc;*/
871 /* hyperpac_ram[0xf002/2] = 0x2700;*/
872
873 /* verified on real hardware, need to move this to a file really*/
874
875 /* static data16_t cookbib2_mcu68k[] =*/
876 /* {*/
877 /* */ /* moved to protdata.bin*/
878 /* };*/
879
880
881
882
883 /*for (i = 0;i < sizeof(cookbib2_mcu68k)/sizeof(cookbib2_mcu68k[0]);i++)*/
884 /* hyperpac_ram[0xf000/2 + i] = cookbib2_mcu68k[i];*/
885
886 for (i = 0;i < 0x200/2;i++)
887 hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
888
889
890 /* trojan is actually buggy and gfx flicker like crazy*/
891 /* but we can pause the system after bootup with HALT line of 68k to get the table before*/
892 /* it goes nuts*/
893
894 /* hyperpac_ram[0xf07a/2] = 0x4e73;*/
895 /* hyperpac_ram[0xf000/2] = 0x4e73;*/
896
897 #if 0
898
899 /* interrupt wait loop? */
900 HCROM[0x014942/2] = 0x4eb9;
901 HCROM[0x014944/2] = 0x0004;
902 HCROM[0x014946/2] = 0x8000;
903 HCROM[0x014948/2] = 0x4e71;
904
905 /* interrupt wait loop? */
906 HCROM[0x014968/2] = 0x4eb9;
907 HCROM[0x01496a/2] = 0x0004;
908 HCROM[0x01496c/2] = 0x8100;
909 HCROM[0x01496e/2] = 0x4e71;
910
911 /* interrupt wait loop? */
912 HCROM[0x014560/2] = 0x4eb9;
913 HCROM[0x014562/2] = 0x0004;
914 HCROM[0x014564/2] = 0x8200;
915 HCROM[0x014566/2] = 0x4e71;
916
917 /* new code for interrupt wait */
918 HCROM[0x048000/2] = 0x4a79;
919 HCROM[0x048002/2] = 0x0010;
920 HCROM[0x048004/2] = 0x2462;
921 HCROM[0x048006/2] = 0x66f8;
922 HCROM[0x048008/2] = 0x4eb9;
923 HCROM[0x04800a/2] = 0x0004;
924 HCROM[0x04800c/2] = 0x8300;
925 HCROM[0x04800e/2] = 0x4e75;
926
927 /* new code for interrupt wait */
928 HCROM[0x048100/2] = 0x4a79;
929 HCROM[0x048102/2] = 0x0010;
930 HCROM[0x048104/2] = 0x2460;
931 HCROM[0x048106/2] = 0x66f8;
932 HCROM[0x048108/2] = 0x4eb9;
933 HCROM[0x04810a/2] = 0x0004;
934 HCROM[0x04810c/2] = 0x8300;
935 HCROM[0x04810e/2] = 0x4e75;
936
937 /* new code for interrupt wait */
938 HCROM[0x048200/2] = 0x4a79;
939 HCROM[0x048202/2] = 0x0010;
940 HCROM[0x048204/2] = 0x2490;
941 HCROM[0x048206/2] = 0x66f8;
942 HCROM[0x048208/2] = 0x4eb9;
943 HCROM[0x04820a/2] = 0x0004;
944 HCROM[0x04820c/2] = 0x8300;
945 HCROM[0x04820e/2] = 0x4e75;
946
947
948
949 /* put registers on stack */
950 HCROM[0x048300/2] = 0x48e7;
951 HCROM[0x048302/2] = 0xfffe;
952
953 /* wipe sprite ram (fill with 0x0002) */
954
955 /* put the address we want to write TO in A2 */
956 HCROM[0x048304/2] = 0x45f9;
957 HCROM[0x048306/2] = 0x0070;
958 HCROM[0x048308/2] = 0x0000;
959
960 /* put the number of words we want to clear into D0 */
961 HCROM[0x04830a/2] = 0x203c;
962 HCROM[0x04830c/2] = 0x0000;
963 HCROM[0x04830e/2] = 0x1000;
964
965 /* write 0x0002 to A2 */
966 HCROM[0x048310/2] = 0x34bc;
967 HCROM[0x048312/2] = 0x0002;
968
969
970 /* add 1 to write address a2 */
971 HCROM[0x048314/2] = 0xd5fc;
972 HCROM[0x048316/2] = 0x0000;
973 HCROM[0x048318/2] = 0x0002;
974
975 /* decrease counter d0 */
976 HCROM[0x04831a/2] = 0x5380;
977
978 /* compare d0 to 0 */
979 HCROM[0x04831c/2] = 0x0c80;
980 HCROM[0x04831e/2] = 0x0000;
981 HCROM[0x048320/2] = 0x0000;
982
983 /* if its not 0 then branch back */
984 HCROM[0x048322/2] = 0x66ec;
985
986 /* ram has been wiped */
987
988 /* put the address we want to read protection data in A2 */
989 HCROM[0x048324/2] = 0x45f9;
990 HCROM[0x048326/2] = 0x0010;
991 /* HCROM[0x048328/2] = 0xf000;*/
992 /* HCROM[0x048328/2] = 0xf000+0xb4;*/
993 HCROM[0x048328/2] = 0xf000+0xb4+0xb4;
994
995 /* put the address of spriteram in A0 */
996 HCROM[0x04832a/2] = 0x41f9;
997 HCROM[0x04832c/2] = 0x0070;
998 HCROM[0x04832e/2] = 0x0000;
999
1000 /* put the number of rows into D3 */
1001 HCROM[0x048330/2] = 0x263c;
1002 HCROM[0x048332/2] = 0x0000;
1003 HCROM[0x048334/2] = 0x0012;
1004
1005 /* put the y co-ordinate of rows into D6 */
1006 HCROM[0x048336/2] = 0x2c3c;
1007 HCROM[0x048338/2] = 0x0000;
1008 HCROM[0x04833a/2] = 0x0014;
1009
1010 /* put the number of bytes per row into D2 */
1011 HCROM[0x04833c/2] = 0x243c;
1012 HCROM[0x04833e/2] = 0x0000;
1013 HCROM[0x048340/2] = 0x000a;
1014
1015 /* put the x co-ordinate of rows into D5 */
1016 HCROM[0x048342/2] = 0x2a3c;
1017 HCROM[0x048344/2] = 0x0000;
1018 HCROM[0x048346/2] = 0x0010;
1019
1020 /* move content of a2 to d4 (byte)*/
1021 HCROM[0x048348/2] = 0x1812;
1022
1023 HCROM[0x04834a/2] = 0xe84c; /* shift d4 right by 4*/
1024
1025 HCROM[0x04834c/2] = 0x0244; /* mask with 0x000f*/
1026 HCROM[0x04834e/2] = 0x000f; /**/
1027
1028 /* jump to character draw to draw first bit */
1029 HCROM[0x048350/2] = 0x4eb9;
1030 HCROM[0x048352/2] = 0x0004;
1031 HCROM[0x048354/2] = 0x8600;
1032
1033 /* increase x-cord*/
1034 HCROM[0x048356/2] = 0x0645;
1035 HCROM[0x048358/2] = 0x000a;
1036
1037
1038 /* add 0x10 to draw address a0 */
1039 HCROM[0x04835a/2] = 0xd1fc;
1040 HCROM[0x04835c/2] = 0x0000;
1041 HCROM[0x04835e/2] = 0x0010;
1042
1043
1044 /* move content of a2 to d4 (byte)*/
1045 HCROM[0x048360/2] = 0x1812;
1046
1047 HCROM[0x048362/2] = 0x0244; /* mask with 0x000f*/
1048 HCROM[0x048364/2] = 0x000f; /**/
1049
1050 /* jump to character draw to draw second bit */
1051 HCROM[0x048366/2] = 0x4eb9;
1052 HCROM[0x048368/2] = 0x0004;
1053 HCROM[0x04836a/2] = 0x8600;
1054
1055 /* increase x-cord*/
1056 HCROM[0x04836c/2] = 0x0645;
1057 HCROM[0x04836e/2] = 0x000c;
1058
1059 /* add 0x10 to draw address a0 */
1060 HCROM[0x048370/2] = 0xd1fc;
1061 HCROM[0x048372/2] = 0x0000;
1062 HCROM[0x048374/2] = 0x0010;
1063
1064 /* newcode*/
1065 /* add 1 to read address a2 */
1066 HCROM[0x048376/2] = 0xd5fc;
1067 HCROM[0x048378/2] = 0x0000;
1068 HCROM[0x04837a/2] = 0x0001;
1069
1070 /* decrease counter d2 (row count)*/
1071 HCROM[0x04837c/2] = 0x5382;
1072
1073 /* compare d2 to 0 */
1074 HCROM[0x04837e/2] = 0x0c82;
1075 HCROM[0x048380/2] = 0x0000;
1076 HCROM[0x048382/2] = 0x0000;
1077
1078 /* if its not 0 then branch back */
1079 HCROM[0x048384/2] = 0x66c2;
1080
1081 /* increase y-cord d6*/
1082 HCROM[0x048386/2] = 0x0646;
1083 HCROM[0x048388/2] = 0x000c;
1084
1085 /* decrease counter d3 */
1086 HCROM[0x04838a/2] = 0x5383;
1087
1088 /* compare d3 to 0 */
1089 HCROM[0x04838c/2] = 0x0c83;
1090 HCROM[0x04838e/2] = 0x0000;
1091 HCROM[0x048390/2] = 0x0000;
1092
1093 /* if its not 0 then branch back */
1094 HCROM[0x048392/2] = 0x66a8;
1095
1096 /* get back registers from stack*/
1097 HCROM[0x048394/2] = 0x4cdf;
1098 HCROM[0x048396/2] = 0x7fff;
1099
1100 /* rts */
1101 HCROM[0x048398/2] = 0x4e75;
1102
1103 /* Draw a character! */
1104 /* D6 = y-coordinate
1105 D5 = x-coordinate
1106 D4 = value to draw
1107
1108 A0 = spriteram base */
1109
1110 /* 0002 0002 0002 0010 00xx 00yy 00nn 000n*/
1111
1112 /* 357c 0020 000c*/
1113 /* 337c = a1*/
1114 /* move.w #$20, (#$c, A2)*/
1115
1116 HCROM[0x048600/2] = 0x317c;
1117 HCROM[0x048602/2] = 0x0010;
1118 HCROM[0x048604/2] = 0x0006;
1119
1120 HCROM[0x048606/2] = 0x3145;
1121 HCROM[0x048608/2] = 0x0008;
1122
1123 HCROM[0x04860a/2] = 0x3146;
1124 HCROM[0x04860c/2] = 0x000a;
1125
1126 /* get true value */
1127
1128 /* put lookuptable address in A3 */
1129 HCROM[0x04860e/2] = 0x47f9;
1130 HCROM[0x048610/2] = 0x0004;
1131 HCROM[0x048612/2] = 0x8800;
1132
1133 HCROM[0x048614/2] = 0x3004; /* d4 -> d0*/
1134 HCROM[0x048616/2] = 0xe348;
1135
1136 HCROM[0x048618/2] = 0x3173;
1137 HCROM[0x04861a/2] = 0x0000;
1138 HCROM[0x04861c/2] = 0x000c;
1139
1140 /* not value */
1141
1142 HCROM[0x04861e/2] = 0x317c;
1143 HCROM[0x048620/2] = 0x0000;
1144 HCROM[0x048622/2] = 0x000e;
1145
1146 /* rts */
1147 HCROM[0x048624/2] = 0x4e75;
1148
1149
1150 /* table used for lookup by the draw routine to get real tile numbers */
1151
1152 HCROM[0x048800/2] = 0x0010;
1153 HCROM[0x048802/2] = 0x0011;
1154 HCROM[0x048804/2] = 0x0012;
1155 HCROM[0x048806/2] = 0x0013;
1156 HCROM[0x048808/2] = 0x0014;
1157 HCROM[0x04880a/2] = 0x0015;
1158 HCROM[0x04880c/2] = 0x0016;
1159 HCROM[0x04880e/2] = 0x0017;
1160 HCROM[0x048810/2] = 0x0018;
1161 HCROM[0x048812/2] = 0x0019;
1162 HCROM[0x048814/2] = 0x0021;
1163 HCROM[0x048816/2] = 0x0022;
1164 HCROM[0x048818/2] = 0x0023;
1165 HCROM[0x04881a/2] = 0x0024;
1166 HCROM[0x04881c/2] = 0x0025;
1167 HCROM[0x04881e/2] = 0x0026;
1168
1169
1170
1171 /*
1172 10 0
1173 11 1
1174 12 2
1175 13 3
1176 14 4
1177 15 5
1178 16 6
1179 17 7
1180 18 8
1181 19 9
1182 21 a
1183 22 b
1184 23 c
1185 24 d
1186 25 e
1187 26 f
1188 */
1189
1190
1191
1192
1193
1194 {
1195 FILE *fp;
1196
1197 fp=fopen("cookie", "w+b");
1198 if (fp)
1199 {
1200 fwrite(HCROM, 0x80000, 1, fp);
1201 fclose(fp);
1202 }
1203 }
1204 #endif
1205 }
1206
1207
DRIVER_INIT(hyperpac)1208 static DRIVER_INIT( hyperpac )
1209 {
1210 /* simulate RAM initialization done by the protection MCU */
1211 /* not verified on real hardware */
1212 hyperpac_ram[0xe000/2] = 0x4ef9;
1213 hyperpac_ram[0xe002/2] = 0x0000;
1214 hyperpac_ram[0xe004/2] = 0x062c;
1215
1216 hyperpac_ram[0xe080/2] = 0xfedc;
1217 hyperpac_ram[0xe082/2] = 0xba98;
1218 hyperpac_ram[0xe084/2] = 0x7654;
1219 hyperpac_ram[0xe086/2] = 0x3210;
1220 }
1221
READ16_HANDLER(_4in1_02_read)1222 READ16_HANDLER ( _4in1_02_read )
1223 {
1224 return 0x0202;
1225 }
1226
1227 static DRIVER_INIT(4in1boot)
1228 {
1229 unsigned char *buffer;
1230 data8_t *src = memory_region(REGION_CPU1);
1231 int len = memory_region_length(REGION_CPU1);
1232
1233 /* strange order */
1234 if ((buffer = malloc(len)))
1235 {
1236 int i;
1237 for (i = 0;i < len; i++)
1238 if (i&1) buffer[i] = BITSWAP8(src[i],6,7,5,4,3,2,1,0);
1239 else buffer[i] = src[i];
1240
1241 memcpy(src,buffer,len);
1242 free(buffer);
1243 }
1244
1245 src = memory_region(REGION_CPU2);
1246 len = memory_region_length(REGION_CPU2);
1247
1248 /* strange order */
1249 if ((buffer = malloc(len)))
1250 {
1251 int i;
1252 for (i = 0;i < len; i++)
1253 buffer[i] = src[i^0x4000];
1254 memcpy(src,buffer,len);
1255 free(buffer);
1256 }
1257
1258 install_mem_read16_handler (0, 0x200000, 0x200001, _4in1_02_read );
1259
1260
1261 }
1262
1263 GAME( 1990, snowbros, 0, snowbros, snowbros, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 1)" )
1264 GAME( 1990, snowbroa, snowbros, snowbros, snowbros, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 2)" )
1265 GAME( 1990, snowbrob, snowbros, snowbros, snowbros, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 3)" )
1266 GAME( 1990, snowbroj, snowbros, snowbros, snowbroj, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (Japan)" )
1267 GAME( 1990, wintbob, snowbros, wintbob, snowbros, 0, ROT0, "bootleg", "The Winter Bobble" )
1268 /* SemiCom Games */
1269 GAME( 1995, hyperpac, 0, hyperpac, hyperpac, hyperpac, ROT0, "SemiCom", "Hyper Pacman" )
1270 GAME( 1995, hyperpcb, hyperpac, hyperpac, hyperpac, 0, ROT0, "bootleg", "Hyper Pacman (bootleg)" )
1271 GAME(1996, cookbib2, 0, hyperpac, cookbib2, cookbib2, ROT0, "SemiCom", "Cookie and Bibi 2" ) /* sound cuts out in later levels? (investigate)*/
1272 /* bad dump */
1273 GAME(199?, 4in1boot, 0, _4in1, snowbros, 4in1boot, ROT0, "bootleg", "4-in-1 bootleg" ) /* gfx rom is half the size it should be, pacman 2 and snowbros are playable tho*/
1274 /* the following don't work, they either point the interrupts at an area of ram probably shared by
1275 some kind of mcu which puts 68k code there, or jump to the area in the interrupts */
1276 GAMEX(199?, moremorp, 0, hyperpac, hyperpac, 0, ROT0, "SemiCom", "More More +", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
1277 GAMEX(1997, 3in1semi, 0, hyperpac, hyperpac, 0, ROT0, "SemiCom", "3-in-1 (SemiCom)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
1278