1 /***************************************************************************
2
3 -= Paradise / Target Ball / Torus =-
4
5 driver by Luca Elia (l.elia@tin.it)
6
7
8 CPU : Z8400B
9 Video Chips : TPC1024AFN-084C
10 Sound Chips : 2 x AR17961 (OKI M6295) (only 1 in Torus)
11
12 Notes:
13
14 paradise: I'm not sure it's working correctly:
15
16 - The high scores table can't be entered !?
17 - note added: complete 90% or more to play a bonus game.
18
19 ***************************************************************************/
20
21 #include "driver.h"
22 #include "vidhrdw/generic.h"
23 #include "paradise.h"
24
25 /***************************************************************************
26
27 Memory Maps
28
29 ***************************************************************************/
30
WRITE_HANDLER(paradise_rombank_w)31 static WRITE_HANDLER( paradise_rombank_w )
32 {
33 int bank = data;
34 int bank_n = memory_region_length(REGION_CPU1)/0x4000 - 1;
35 if (bank >= bank_n)
36 {
37 log_cb(RETRO_LOG_DEBUG, LOGPRE "PC %04X - invalid rom bank %x\n",activecpu_get_pc(),bank);
38 bank %= bank_n;
39 }
40
41 if (bank >= 3) bank+=1;
42 cpu_setbank(1, memory_region(REGION_CPU1) + bank * 0x4000);
43 }
44
WRITE_HANDLER(paradise_okibank_w)45 static WRITE_HANDLER( paradise_okibank_w )
46 {
47 if (data & ~0x02) log_cb(RETRO_LOG_DEBUG, LOGPRE "CPU #0 - PC %04X: unknown oki bank bits %02X\n",activecpu_get_pc(),data);
48 OKIM6295_set_bank_base(1, (data & 0x02) ? 0x40000 : 0);
49 }
50
WRITE_HANDLER(torus_coin_counter_w)51 static WRITE_HANDLER( torus_coin_counter_w )
52 {
53 coin_counter_w(0, data ^ 0xff);
54 }
55
56
MEMORY_READ_START(paradise_readmem)57 static MEMORY_READ_START( paradise_readmem )
58 { 0x0000, 0x7fff, MRA_ROM }, /* ROM*/
59 { 0x8000, 0xbfff, MRA_BANK1 }, /* ROM (banked)*/
60 { 0xc000, 0xffff, MRA_RAM }, /* RAM*/
61 MEMORY_END
62
63 #define STANDARD_MAP \
64 { 0x0000, 0x7fff, MWA_ROM }, /* ROM*/ \
65 { 0x8000, 0xbfff, MWA_ROM }, /* ROM (banked)*/ \
66 { 0xc000, 0xc7ff, paradise_vram_2_w,¶dise_vram_2 }, /* Background*/ \
67 { 0xc800, 0xcfff, paradise_vram_1_w,¶dise_vram_1 }, /* Midground*/ \
68 { 0xd000, 0xd7ff, paradise_vram_0_w,¶dise_vram_0 }, /* Foreground*/ \
69
70 static MEMORY_WRITE_START( paradise_writemem )
71 STANDARD_MAP
72 { 0xd800, 0xd8ff, MWA_RAM }, /* RAM*/
73 { 0xd900, 0xe0ff, MWA_RAM, &spriteram, &spriteram_size }, /* Sprites*/
74 { 0xe100, 0xffff, MWA_RAM }, /* RAM*/
75 MEMORY_END
76
77 static MEMORY_WRITE_START( tgtball_writemem )
78 STANDARD_MAP
79 { 0xd800, 0xd8ff, MWA_RAM }, /* RAM*/
80 { 0xd900, 0xd9ff, MWA_RAM, &spriteram, &spriteram_size }, /* Sprites*/
81 { 0xda00, 0xffff, MWA_RAM }, /* RAM*/
82 MEMORY_END
83
84 static MEMORY_WRITE_START( torus_writemem )
85 STANDARD_MAP
86 { 0xd800, 0xdfff, MWA_RAM, &spriteram, &spriteram_size }, /* Sprites*/
87 { 0xea00, 0xffff, MWA_RAM }, /* RAM*/
88 MEMORY_END
89
90 static PORT_READ_START( paradise_readport )
91 { 0x0000, 0x17ff, paletteram_r }, /* Palette*/
92 { 0x2010, 0x2010, OKIM6295_status_0_r }, /* OKI 0*/
93 { 0x2030, 0x2030, OKIM6295_status_1_r }, /* OKI 1*/
94 { 0x2020, 0x2020, input_port_0_r }, /* DSW 1*/
95 { 0x2021, 0x2021, input_port_1_r }, /* DSW 2*/
96 { 0x2022, 0x2022, input_port_2_r }, /* P1*/
97 { 0x2023, 0x2023, input_port_3_r }, /* P2*/
98 { 0x2024, 0x2024, input_port_4_r }, /* Coins*/
99 { 0x8000, 0xffff, videoram_r }, /* Pixmap*/
100 PORT_END
101
102 static PORT_WRITE_START( paradise_writeport )
103 { 0x0000, 0x17ff, paradise_palette_w }, /* Palette*/
104 { 0x1800, 0x1800, paradise_priority_w }, /* Layers priority*/
105 { 0x2001, 0x2001, paradise_flipscreen_w }, /* Flip Screen*/
106 { 0x2004, 0x2004, paradise_palbank_w }, /* Layers palette bank*/
107 { 0x2006, 0x2006, paradise_rombank_w }, /* ROM bank*/
108 { 0x2007, 0x2007, paradise_okibank_w }, /* OKI 1 samples bank*/
109 { 0x2010, 0x2010, OKIM6295_data_0_w }, /* OKI 0*/
110 { 0x2030, 0x2030, OKIM6295_data_1_w }, /* OKI 1*/
111 { 0x8000, 0xffff, paradise_pixmap_w }, /* Pixmap*/
112 PORT_END
113
114
115 /***************************************************************************
116
117 Input Ports
118
119 ***************************************************************************/
120
121 /***************************************************************************
122 Paradise
123 ***************************************************************************/
124
125 INPUT_PORTS_START( paradise )
126 PORT_START /* IN0 - port $2020 - DSW 1*/
127 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) )
128 PORT_DIPSETTING( 0x03, "Easy" )
129 PORT_DIPSETTING( 0x02, "Normal" )
130 PORT_DIPSETTING( 0x01, "Hard" )
131 PORT_DIPSETTING( 0x00, "Hardest" )
132 PORT_DIPNAME( 0x0c, 0x08, "Fill Area" )
133 PORT_DIPSETTING( 0x0c, "75%" )
134 PORT_DIPSETTING( 0x08, "80%" )
135 PORT_DIPSETTING( 0x04, "85%" )
136 PORT_DIPSETTING( 0x00, "90%" )
137 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) )
138 PORT_DIPSETTING( 0x00, "3" )
139 PORT_DIPSETTING( 0x10, "5" )
140 PORT_DIPNAME( 0x60, 0x20, "Time" )
141 PORT_DIPSETTING( 0x00, "45" )
142 PORT_DIPSETTING( 0x20, "60" )
143 PORT_DIPSETTING( 0x40, "75" )
144 PORT_DIPSETTING( 0x60, "90" )
145 PORT_DIPNAME( 0x80, 0x80, "Sound Test" )
146 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
147 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
148
149 PORT_START /* IN1 - port $2021 - DSW 2*/
150 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
151 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
152 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
153 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
154 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
155 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) /* Listed as "Unused" */
156 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
157 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
158 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) /* Listed as "Unused" */
159 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
160 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
161 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) /* Listed as "Unused" */
162 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
163 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
164 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
165 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
166 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
167 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
168 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
169 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
170 PORT_DIPNAME( 0x80, 0x80, "Slide Show" ) /* Player1 button used to advance one time through ALL backgrounds */
171 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
172 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
173
174 PORT_START /* IN2 - port $2022 - Player 1*/
175 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
176 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
177 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
178 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
179 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
180 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* alias for button1?*/
181 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* alias for button1?*/
182 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
183
184 PORT_START /* IN3 - port $2023 - Player 2*/
185 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
186 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
187 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
188 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
189 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
190 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* alias for button1?*/
191 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* alias for button1?*/
192 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
193
194 PORT_START /* IN4 - port $2024 - Coins*/
195 PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_LOW, IPT_COIN1, 5)
196 PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_LOW, IPT_COIN2, 5)
197 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
198 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
199 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
200 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
201 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_VBLANK )
202 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
203 INPUT_PORTS_END
204
205 INPUT_PORTS_START( tgtball )
206 PORT_START /* IN0 - port $2020 - DSW 1 */
207 PORT_DIPNAME( 0x03, 0x02, "Time for 1 Player" )
208 PORT_DIPSETTING( 0x03, "1:00" )
209 PORT_DIPSETTING( 0x02, "1:20" )
210 PORT_DIPSETTING( 0x01, "1:40" )
211 PORT_DIPSETTING( 0x00, "2:00" )
212 PORT_DIPNAME( 0x0c, 0x08, "Bonus Time?" ) /* Difficulty or Bonus (time)? */
213 PORT_DIPSETTING( 0x0c, "15" )
214 PORT_DIPSETTING( 0x08, "20" )
215 PORT_DIPSETTING( 0x04, "25" )
216 PORT_DIPSETTING( 0x00, "30" )
217 PORT_DIPNAME( 0x30, 0x20, DEF_STR( Lives ) )
218 PORT_DIPSETTING( 0x30, "4" )
219 PORT_DIPSETTING( 0x20, "5" )
220 PORT_DIPSETTING( 0x10, "6" )
221 PORT_DIPSETTING( 0x00, "7" )
222 PORT_DIPNAME( 0x40, 0x40, "Balls Sequence Length" )
223 PORT_DIPSETTING( 0x40, "3" )
224 PORT_DIPSETTING( 0x00, "5" )
225 PORT_DIPNAME( 0x80, 0x80, "Game Goal" )
226 PORT_DIPSETTING( 0x80, "Target Score" )
227 PORT_DIPSETTING( 0x00, "Balls Sequence" )
228
229 PORT_START /* IN1 - port $2021 - DSW 2 */
230 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
231 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
232 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
233 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
234 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
235 PORT_DIPNAME( 0x0c, 0x08, "Time for 2 Players" )
236 PORT_DIPSETTING( 0x0c, "2:00" )
237 PORT_DIPSETTING( 0x08, "2:40" )
238 PORT_DIPSETTING( 0x04, "3:20" )
239 PORT_DIPSETTING( 0x00, "4:00" )
240 PORT_DIPNAME( 0x10, 0x10, "Vs. Matches" )
241 PORT_DIPSETTING( 0x10, "1" )
242 PORT_DIPSETTING( 0x00, "3" )
243 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
244 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
245 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
246 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
247 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
248 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
249 PORT_DIPNAME( 0x80, 0x80, "Slide Show" ) /* Player1 button used to advance one time through ALL backgrounds */
250 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
251 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
252
253 PORT_START /* IN2 - port $2022 - Player 1 */
254 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
255 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
256 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
257 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
258 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
259 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
260 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
261 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
262
263 PORT_START /* IN3 - port $2023 - Player 2 */
264 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
265 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
266 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
267 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
268 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
269 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
270 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
271 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
272
273 PORT_START /* IN4 - port $2024 - Coins */
274 PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_LOW, IPT_COIN1, 5 )
275 PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_LOW, IPT_COIN2, 5 )
276 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
277 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_VBLANK )
278 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
279 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
280 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
281 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
282 INPUT_PORTS_END
283
284 INPUT_PORTS_START( torus )
285 PORT_START /* IN0 - port $2020 - DSW 1 */
286 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
287 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
288 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
289 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
290 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
291 PORT_DIPNAME( 0x0c, 0x0c, "Dropping Speed" )
292 PORT_DIPSETTING( 0x0c, "Normal" )
293 PORT_DIPSETTING( 0x08, "Fast" )
294 PORT_DIPSETTING( 0x04, "Faster" )
295 PORT_DIPSETTING( 0x00, "Fastest" )
296 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
297 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
298 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
299 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
300 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
301 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
302 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
303 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
304 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
305 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
306 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
307 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
308
309 PORT_START /* IN1 - port $2021 - DSW 2 */
310 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
311 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
312 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
313 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
314 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
315 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
316 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
317 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
318 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
319 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
320 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
321 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
322 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
323 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
324 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
325 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
326 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
327 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
328 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
329 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
330 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
331 PORT_DIPNAME( 0x80, 0x80, "Slide Show" ) /* Player1 Button to pull the blinds down in sections, continuous loop */
332 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
333 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
334
335 PORT_START /* IN2 - port $2022 - Player 1 */
336 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
337 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
338 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
339 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
340 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
341 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
342 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
343 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
344
345 PORT_START /* IN3 - port $2023 - Player 2 */
346 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
347 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
348 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
349 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
350 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
351 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
352 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
353 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
354
355 PORT_START /* IN4 - port $2024 - Coins */
356 PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_LOW, IPT_COIN1, 5 )
357 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
358 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
359 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
360 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
361 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
362 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_VBLANK )
363 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
364 INPUT_PORTS_END
365
366 INPUT_PORTS_START( madball )
367 PORT_START /* 8bit DSW 1 */
368 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
369 PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
370 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
371 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
372 PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
373 PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) )
374 PORT_DIPSETTING( 0x0c, "3" )
375 PORT_DIPSETTING( 0x08, "4" )
376 PORT_DIPSETTING( 0x04, "5" )
377 PORT_DIPSETTING( 0x00, "6" )
378 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )
379 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
380 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
381 PORT_DIPNAME( 0x20, 0x00, "Controls" )
382 PORT_DIPSETTING( 0x20, "Spinner" )
383 PORT_DIPSETTING( 0x00, "Joystick" )
384 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
385 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
386 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
387 PORT_DIPNAME( 0x80, 0x80, "Slide Show" ) /* Use P1 button to advance */
388 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
389 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
390
391 PORT_START /* 8bit DSW 2 */
392 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) )
393 PORT_DIPSETTING( 0x02, "Easy" )
394 PORT_DIPSETTING( 0x03, "Normal" )
395 PORT_DIPSETTING( 0x01, "Hard" )
396 PORT_DIPSETTING( 0x00, "Hardest" )
397 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
398 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
399 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
400 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
401 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
402 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
403 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
404 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
405 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
406 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
407 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
408 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
409 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
410 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
411 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
412 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
413 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
414 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
415
416 PORT_START /* IN2 - port $2022 - Player 1 */
417 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
418 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
419 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
420 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
421 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
422 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
423 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
424 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
425
426 PORT_START /* IN3 - port $2023 - Player 2 */
427 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
428 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
429 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
430 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
431 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
432 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
433 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
434 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
435
436 PORT_START /* IN4 - port $2024 - Coins */
437 PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_LOW, IPT_COIN1, 5 )
438 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
439 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
440 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
441 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
442 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
443 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_VBLANK )
444 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
445 INPUT_PORTS_END
446
447
448 /***************************************************************************
449
450 Graphics Layouts
451
452 ***************************************************************************/
453
454 static struct GfxLayout layout_8x8x4 =
455 {
456 8,8,
457 RGN_FRAC(1,1),
458 4,
459 { STEP4(0,1) },
460 { STEP8(0,4) },
461 { STEP8(0,4*8) },
462 8*8*4
463 };
464
465 static struct GfxLayout layout_8x8x8 =
466 {
467 8,8,
468 RGN_FRAC(1,2),
469 8,
470 { STEP4(RGN_FRAC(1,2),1), STEP4(RGN_FRAC(0,2),1) },
471 { STEP8(0,4) },
472 { STEP8(0,4*8) },
473 8*8*4
474 };
475
476 static struct GfxLayout layout_16x16x8 =
477 {
478 16,16,
479 RGN_FRAC(1,2),
480 8,
481 { STEP4(RGN_FRAC(1,2),1), STEP4(RGN_FRAC(0,2),1) },
482 { STEP8(8*8*4*0,4), STEP8(8*8*4*1,4) },
483 { STEP8(8*8*4*0,4*8), STEP8(8*8*4*2,4*8) },
484 16*16*4
485 };
486
487 static struct GfxLayout torus_layout_16x16x8 =
488 {
489 16,16,
490 RGN_FRAC(1,2),
491 8,
492 { STEP4(RGN_FRAC(1,2),1), STEP4(RGN_FRAC(0,2),1) },
493 { STEP8(0,4),STEP8(4*8,4) },
494 { STEP16(0,8*8) },
495 128*8
496 };
497
498 static struct GfxDecodeInfo paradise_gfxdecodeinfo[] =
499 {
500 { REGION_GFX1, 0, &layout_16x16x8, 0x100, 1 }, /* [0] Sprites*/
501 { REGION_GFX2, 0, &layout_8x8x4, 0x400, 16 }, /* [1] Background*/
502 { REGION_GFX3, 0, &layout_8x8x8, 0x300, 1 }, /* [2] Midground*/
503 { REGION_GFX4, 0, &layout_8x8x8, 0x000, 1 }, /* [3] Foreground*/
504 { -1 }
505 };
506
507 static struct GfxDecodeInfo torus_gfxdecodeinfo[] =
508 {
509 { REGION_GFX1, 0, &torus_layout_16x16x8, 0x100, 1 }, // [0] Sprites
510 { REGION_GFX2, 0, &layout_8x8x4, 0x400, 16 }, // [1] Background
511 { REGION_GFX3, 0, &layout_8x8x8, 0x300, 1 }, // [2] Midground
512 { REGION_GFX4, 0, &layout_8x8x8, 0x000, 1 }, // [3] Foreground
513 { -1 }
514 };
515
516 static struct GfxDecodeInfo madball_gfxdecodeinfo[] =
517 {
518 { REGION_GFX1, 0, &torus_layout_16x16x8, 0x500, 1 }, // [0] Sprites
519 { REGION_GFX2, 0, &layout_8x8x4, 0x400, 16 }, // [1] Background
520 { REGION_GFX3, 0, &layout_8x8x8, 0x300, 1 }, // [2] Midground
521 { REGION_GFX4, 0, &layout_8x8x8, 0x000, 1 }, // [3] Foreground
522 { -1 }
523 };
524
525
526 /***************************************************************************
527
528 Machine Drivers
529
530 ***************************************************************************/
531
532 static struct OKIM6295interface paradise_okim6295_intf =
533 {
534 2,
535 { 1000000/132,1000000/132 }, /* 1Mhz / 132 verified */
536 { REGION_SOUND1,REGION_SOUND2 },
537 { 50,50 }
538 };
539
540 static MACHINE_DRIVER_START( paradise )
541
542 /* basic machine hardware */
543 MDRV_CPU_ADD_TAG("main", Z80, 6000000) /* Z8400B */
MDRV_CPU_FLAGS(CPU_16BIT_PORT)544 MDRV_CPU_FLAGS(CPU_16BIT_PORT)
545 MDRV_CPU_MEMORY(paradise_readmem,paradise_writemem)
546 MDRV_CPU_PORTS(paradise_readport,paradise_writeport)
547 MDRV_CPU_VBLANK_INT(irq0_line_hold,4) /* No nmi routine */
548
549 MDRV_FRAMES_PER_SECOND(54) /* 54 verified */
550 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION) /* we're using IPT_VBLANK */
551
552 /* video hardware */
553 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN)
554 MDRV_SCREEN_SIZE(256, 256)
555 MDRV_VISIBLE_AREA(0, 256-1, 0+16, 256-1-16)
556 MDRV_GFXDECODE(paradise_gfxdecodeinfo)
557 MDRV_PALETTE_LENGTH(0x800 + 16)
558
559 MDRV_VIDEO_START(paradise)
560 MDRV_VIDEO_UPDATE(paradise)
561
562 /* sound hardware */
563 MDRV_SOUND_ADD(OKIM6295, paradise_okim6295_intf)
564 MACHINE_DRIVER_END
565
566 static MACHINE_DRIVER_START( tgtball )
567 /* basic machine hardware */
568 MDRV_IMPORT_FROM( paradise )
569 MDRV_CPU_MODIFY("main")
570 MDRV_CPU_MEMORY(paradise_readmem,tgtball_writemem)
571 MACHINE_DRIVER_END
572
573 static MACHINE_DRIVER_START( torus )
574 /* basic machine hardware */
575 MDRV_IMPORT_FROM(paradise)
576 MDRV_CPU_MODIFY("main")
577 MDRV_CPU_MEMORY(paradise_readmem,torus_writemem)
578
579 MDRV_GFXDECODE(torus_gfxdecodeinfo)
580
581 MDRV_VIDEO_UPDATE(torus)
582 MACHINE_DRIVER_END
583
584 static MACHINE_DRIVER_START( madball )
585 /* basic machine hardware */
586 MDRV_IMPORT_FROM(paradise)
587 MDRV_CPU_MODIFY("main")
588 MDRV_CPU_MEMORY(paradise_readmem,torus_writemem)
589
590 MDRV_GFXDECODE(madball_gfxdecodeinfo)
591
592 MDRV_VIDEO_UPDATE(madball)
593 MACHINE_DRIVER_END
594
595
596 /***************************************************************************
597
598 ROMs Loading
599
600 ***************************************************************************/
601
602 /***************************************************************************
603
604 Paradise
605
606 (c) yun sung year ??
607 another porn qix alike game
608 1 main cpu tpc1024afn-084c ??
609 1 sound z8400b ps
610 2 ar17961 (oki?)
611 1 12.000 oscillator cristal
612
613 The year is not shown but must be >= 1994, since the development system
614 (cross compiler?) they used left a "1994.8-1989" in the rom
615
616 ***************************************************************************/
617
618 ROM_START( paradise )
619 ROM_REGION( 0x44000, REGION_CPU1, 0 ) /* Z80 Code */
620 ROM_LOAD( "u128", 0x00000, 0x0c000, CRC(8e5b5a24) SHA1(a4e559d9329f8a7a9d12cd90d98d0525958085d8) )
621 ROM_CONTINUE( 0x10000, 0x34000 )
622
623 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
624 ROM_LOAD( "u114", 0x00000, 0x40000, CRC(c748ba3b) SHA1(ad23bda4e001ca539f849c1ca256de5daf7c233b) )
625 ROM_LOAD( "u115", 0x40000, 0x40000, CRC(0d517bbb) SHA1(5bf7c5036f3d660901e26f14baaea1a3c0327dfe) )
626
627 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x4 Background */
628 ROM_LOAD( "u94", 0x00000, 0x20000, CRC(e3a99209) SHA1(5db79dc1a38d93b458b043499a58516285c65aa8) )
629
630 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
631 ROM_LOAD( "u92", 0x00000, 0x80000, CRC(633d24f0) SHA1(26b25ec1014fba1a3d0d2bdba0c867c57034647d) )
632 ROM_LOAD( "u93", 0x80000, 0x80000, CRC(bbf5c632) SHA1(9d31e136f014c2dd7dd988c3aee0adfcfea91bc9) )
633
634 ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
635 ROM_LOAD( "u110", 0x00000, 0x20000, CRC(9807a7e6) SHA1(30e2a741a93954cfe672c61c93a990d0c3b25145) )
636 ROM_LOAD( "u111", 0x20000, 0x20000, CRC(bc9f93f0) SHA1(dd4cfc849a0c0f918ac0dfeb7f00a67aae5a1c13) )
637
638 ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY ) /* Samples */
639 ROM_LOAD( "u85", 0x00000, 0x40000, CRC(bf3c3065) SHA1(54dd7ffea2fb3f31ed575e982b82691cddc2581a) )
640
641 ROM_REGION( 0x80000, REGION_SOUND2, ROMREGION_SOUNDONLY ) /* Samples (banked) */
642 ROM_LOAD( "u113", 0x00000, 0x80000, CRC(53de6025) SHA1(c94b3778b57ff7f46ce4cff661841019fb187d5d) )
643 ROM_END
644
645 ROM_START( tgtball )
646 ROM_REGION( 0x44000, REGION_CPU1, 0 ) /* Z80 Code */
647 ROM_LOAD( "rom7.bin", 0x00000, 0x0c000, CRC(8dbeab12) SHA1(7181c23459990aecbe2d13377aaf19f65108eac6) )
648 ROM_CONTINUE( 0x10000, 0x34000 )
649
650 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
651 ROM_LOAD( "yunsung.114", 0x00000, 0x40000, CRC(3dbe1872) SHA1(754f90123a3944ca548fc66ee65a93615155bf30) )
652 ROM_LOAD( "yunsung.115", 0x40000, 0x40000, CRC(30f49dac) SHA1(b70d37973bd03069c48641d6c0804be6f9aa6553) )
653
654 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF) /* 8x8x4 Background */
655 /* not for this game? */
656
657 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
658 ROM_LOAD( "rom2.bin", 0x00000, 0x80000, CRC(fe4004ec) SHA1(fde782665445ad465b8f8fb95df5f60cd24016ad) )
659 ROM_LOAD( "rom1.bin", 0x80000, 0x80000, CRC(aef17762) SHA1(3dd8924695b67eec0f25549dbe2461b927268b8f) )
660
661 ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
662 ROM_LOAD( "rom4.bin", 0x00000, 0x80000, CRC(0a5abf62) SHA1(6900d598764300c81c90f5a7efb294639178bee6) )
663 ROM_LOAD( "rom3.bin", 0x80000, 0x80000, CRC(94822bbf) SHA1(9fa6595eb819f163b58181926c276346cfa5c332) )
664
665 ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY ) /* Samples */
666 ROM_LOAD( "yunsung.85", 0x00000, 0x20000, CRC(cdf3336b) SHA1(98029d6d5d8ffb3b24ae2bcf950618a7d5b404c3) )
667
668 ROM_REGION( 0x80000, REGION_SOUND2, ROMREGION_SOUNDONLY ) /* Samples (banked) */
669 ROM_LOAD( "yunsung.113", 0x00000, 0x40000, CRC(150a6cc6) SHA1(b435fcf8ba48006f506db6b63ba54a30a6b3eade) )
670 ROM_END
671
672 ROM_START( tgtballa )
673 ROM_REGION( 0x44000, REGION_CPU1, 0 ) /* Z80 Code */
674 ROM_LOAD( "yunsung.128", 0x00000, 0x0c000, CRC(cb0f3d46) SHA1(b56c4abbd4248074c1559a0f1902d2ea11cb01a8) )
675 ROM_CONTINUE( 0x10000, 0x34000 )
676
677 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
678 ROM_LOAD( "yunsung.114", 0x00000, 0x40000, CRC(3dbe1872) SHA1(754f90123a3944ca548fc66ee65a93615155bf30) )
679 ROM_LOAD( "yunsung.115", 0x40000, 0x40000, CRC(30f49dac) SHA1(b70d37973bd03069c48641d6c0804be6f9aa6553) )
680
681 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF) /* 8x8x4 Background */
682 /* not for this game? */
683
684 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
685 ROM_LOAD( "yunsung.92", 0x00000, 0x80000, CRC(bcf206a9) SHA1(0db2cee21c025b7b8d2d5b898c7231c77e36904d) )
686 ROM_LOAD( "yunsung.93", 0x80000, 0x80000, CRC(64edb93c) SHA1(94f8d4fd159c682d952d6a4c38dc50f2c0c0824d) )
687
688 ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
689 ROM_LOAD( "yunsung.110", 0x00000, 0x80000, CRC(c209201e) SHA1(ba1cb3a204f689f9a3636834628d2265927e34f7) )
690 ROM_LOAD( "yunsung.111", 0x80000, 0x80000, CRC(82334337) SHA1(4b2a07196027b190366131cd7b8eca87a1bd0b1c) )
691
692 ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY ) /* Samples */
693 ROM_LOAD( "yunsung.85", 0x00000, 0x20000, CRC(cdf3336b) SHA1(98029d6d5d8ffb3b24ae2bcf950618a7d5b404c3) )
694
695 ROM_REGION( 0x80000, REGION_SOUND2, ROMREGION_SOUNDONLY ) /* Samples (banked) */
696 ROM_LOAD( "yunsung.113", 0x00000, 0x40000, CRC(150a6cc6) SHA1(b435fcf8ba48006f506db6b63ba54a30a6b3eade) )
697 ROM_END
698
699 ROM_START( torus )
700 ROM_REGION( 0x14000, REGION_CPU1, 0 ) /* Z80 Code */
701 ROM_LOAD( "bc13.bin", 0x00000, 0xc000, CRC(55d3ef3e) SHA1(195463271fdb3f9f5c19068efd1c99105f761fe9) )
702 ROM_CONTINUE( 0x10000, 0x4000 )
703
704 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
705 ROM_LOAD( "bc5.bin", 0x00000, 0x40000, CRC(5b60ce9f) SHA1(d5c091145e0bae7cd776e642ea17895d086ed2b0) )
706 ROM_LOAD( "bc6.bin", 0x40000, 0x40000, CRC(4caa0c50) SHA1(a971b6e87cd1162cf370d39cfeafefbb1557e14e) )
707
708 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF) /* 8x8x4 Background */
709 /* not for this game */
710
711 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
712 ROM_LOAD( "bc2.bin", 0x00000, 0x80000, CRC(67c5ba1a) SHA1(0e39752ddc5ee9469647140a3fc9e6bb69d6afa1) )
713 ROM_LOAD( "bc1.bin", 0x80000, 0x80000, CRC(efb105e9) SHA1(7bfe6ff64b25797dd524a7077def5669f25f16ec) )
714
715 ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
716 ROM_LOAD( "bc4.bin", 0x00000, 0x20000, CRC(ee914caf) SHA1(42f3d760a4c14658ac2eb0ba7f54fb9916368b50) )
717 ROM_LOAD( "bc3.bin", 0x20000, 0x20000, CRC(aff1dab9) SHA1(ae488abd605c1e78b8b73452a2c1391cc0fe6b00) )
718
719 ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY ) /* Samples */
720 ROM_LOAD( "bc15.bin", 0x00000, 0x40000, CRC(12d84839) SHA1(840d82253c0651ebe6799ea2bb5bae334e963e12) )
721 ROM_END
722
723 /*
724 Yun Sung Mad Ball
725 PCB: YS-0402
726 Z80A
727 AD-65 (OKI M6295)
728 Actel A1020B PLC84C
729 OSC: 12.000 MHz, 4.000Mhz
730 RAM 4 Hyundai HY62256ALP-70
731 1 Hyundai HY6264LP-10 (by P rom & Z80A)
732 DSW 2 8-switch DIP
733 P.u1 Intel i27C010A - Program (next to Z80A)
734 s.u28 ST M27C4001 - Sound (next to AD-65)
735 1.u66 ST M27C2001
736 2.u67 ST M27C2001
737 3.u92 TI 27C040
738 4.u93 TI 27C040
739 5.u105 TI 27C040
740 6.u106 TI 27C040
741 All roms with manufacturer's IDs and routines
742 */
743
744 ROM_START( madball ) /* Models in swimsuits only, no nudity */
745 ROM_REGION( 0x24000, REGION_CPU1, 0 ) /* Z80 Code */
746 ROM_LOAD( "p.u1", 0x00000, 0xc000, CRC(73008425) SHA1(6eded60fd5c637a63783247c858d999d5974d378) )
747 ROM_CONTINUE( 0x10000, 0x14000 )
748
749 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
750 ROM_LOAD( "2.u67", 0x00000, 0x40000, CRC(1f3a6cd5) SHA1(7a17549f2fff003605d91703c84a398488b2f74c) )
751 ROM_LOAD( "1.u66", 0x40000, 0x40000, CRC(8637c7b4) SHA1(e0026e48f0e8f3554a5b448e0d1f9d1c5551dbfb) )
752
753 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF) /* 8x8x4 Background */
754 /* not for this game */
755
756 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
757 ROM_LOAD( "5.u105", 0x00000, 0x80000, CRC(f26aac1e) SHA1(50ad34ee70bf45fa4e1dc9281b83bcdd7c7db3f8) )
758 ROM_LOAD( "6.u106", 0x80000, 0x80000, CRC(27b78907) SHA1(ab6645457adc0d17b141e366aac7e00e8ce4296b) )
759
760 ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
761 ROM_LOAD( "4.u93", 0x80000, 0x80000, CRC(c3be56ad) SHA1(9cfa0b38c60798deccca74dc6b0ce0826ff7f467) )
762 ROM_LOAD( "3.u92", 0x00000, 0x80000, CRC(846019a6) SHA1(571bfa299e13b96ca263bd7e62c760bdbe3438bd) )
763
764 ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */
765 ROM_LOAD( "s.u28", 0x00000, 0x80000, CRC(78f02584) SHA1(70542e126db73a573db9ef41399d3a07fb7ea94b) )
766 ROM_END
767
768 ROM_START( madballn ) /* Even numbered stages show topless models. Is nudity controlled by a dipswitch? */
769 ROM_REGION( 0x24000, REGION_CPU1, 0 ) /* Z80 Code */
770 ROM_LOAD( "bc13.u1", 0x00000, 0xc000, CRC(531fa919) SHA1(0eafc663b9ad50d0dfc5491fe96c9bcf30483991) )
771 ROM_CONTINUE( 0x10000, 0x14000 )
772
773 ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 16x16x8 Sprites */
774 ROM_LOAD( "2.u67", 0x00000, 0x40000, CRC(1f3a6cd5) SHA1(7a17549f2fff003605d91703c84a398488b2f74c) )
775 ROM_LOAD( "1.u66", 0x40000, 0x40000, CRC(8637c7b4) SHA1(e0026e48f0e8f3554a5b448e0d1f9d1c5551dbfb) )
776
777 ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF) /* 8x8x4 Background */
778 /* not for this game */
779
780 ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Foreground */
781 ROM_LOAD( "bc2.u105", 0x00000, 0x80000, CRC(d75faa62) SHA1(95badf932e8a8084e67aa7df8d6cb2cb2917d5fc) )
782 ROM_LOAD( "bc1.u106", 0x80000, 0x80000, CRC(04b8f7a5) SHA1(97555880f200d0ecc521f8c76bcaa4a0f0eb1aa9) )
783
784 ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE | ROMREGION_INVERT) /* 8x8x8 Midground */
785 ROM_LOAD( "bc3.u93", 0x80000, 0x80000, CRC(f07a5fe6) SHA1(0b1117d8ff0f2a6c953ab1988065b75a33e2c949) )
786 ROM_LOAD( "bc4.u92", 0x00000, 0x80000, CRC(7ed233ab) SHA1(8a4bc31741b4e6e1c03974f9b00f747a29c78ebf) )
787
788 ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */
789 ROM_LOAD( "s.u28", 0x00000, 0x80000, CRC(78f02584) SHA1(70542e126db73a573db9ef41399d3a07fb7ea94b) )
790 ROM_END
791
792
793 DRIVER_INIT (paradise)
794 {
795 paradise_sprite_inc = 0x20;
796 }
797
798 /* Inverted flipscreen and sprites are packed in less memory (same number though) */
DRIVER_INIT(tgtball)799 DRIVER_INIT (tgtball)
800 {
801 paradise_sprite_inc = 4;
802 install_port_write_handler(0, 0x2001, 0x2001, tgtball_flipscreen_w );
803 }
804
DRIVER_INIT(torus)805 DRIVER_INIT (torus)
806 {
807 paradise_sprite_inc = 4;
808 install_port_write_handler(0, 0x2070, 0x2070, torus_coin_counter_w);
809 }
810
811
812 /***************************************************************************
813
814 Game Drivers
815
816 ***************************************************************************/
817
818 GAME( 1994+, paradise, 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise" )
819 GAME( 1995, tgtball, 0, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball (Nude)" )
820 GAME( 1995, tgtballa, tgtball, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball" )
821 GAME( 1996, torus, 0, torus, torus, torus, ROT90, "Yun Sung", "Torus" )
822 GAME( 1998, madball, 0, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0" )
823 GAME( 1997, madballn, madball, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0 (With Nudity)" )
824