1 /*******************************************************************************
2
3 Act Fancer (Japan) FD (c) 1989 Data East Corporation
4 Act Fancer (World) FE (c) 1989 Data East Corporation
5 Trio The Punch (Japan) FF (c) 1989 Data East Corporation
6
7 The 'World' set has rom code FE, the 'Japan' set has rom code FD.
8
9 Most Data East games give the Japanese version the earlier code, though
10 there is no real difference between the sets.
11
12 I believe the USA version of Act Fancer is called 'Out Fencer'
13
14 Emulation by Bryan McPhail, mish@tendril.co.uk
15
16 *******************************************************************************/
17
18 #include "driver.h"
19 #include "vidhrdw/generic.h"
20 #include "cpu/m6502/m6502.h"
21 #include "cpu/h6280/h6280.h"
22
23 VIDEO_UPDATE( actfancr );
24 VIDEO_UPDATE( triothep );
25 WRITE_HANDLER( actfancr_pf1_data_w );
26 READ_HANDLER( actfancr_pf1_data_r );
27 WRITE_HANDLER( actfancr_pf1_control_w );
28 WRITE_HANDLER( actfancr_pf2_data_w );
29 READ_HANDLER( actfancr_pf2_data_r );
30 WRITE_HANDLER( actfancr_pf2_control_w );
31 VIDEO_START( actfancr );
32 VIDEO_START( triothep );
33
34 extern unsigned char *actfancr_pf1_data,*actfancr_pf2_data,*actfancr_pf1_rowscroll_data;
35 static unsigned char *actfancr_ram;
36
37 /******************************************************************************/
38
READ_HANDLER(actfan_control_0_r)39 static READ_HANDLER( actfan_control_0_r )
40 {
41 return readinputport(2); /* VBL */
42 }
43
READ_HANDLER(actfan_control_1_r)44 static READ_HANDLER( actfan_control_1_r )
45 {
46 switch (offset) {
47 case 0: return readinputport(0); /* Player 1 */
48 case 1: return readinputport(1); /* Player 2 */
49 case 2: return readinputport(3); /* Dip 1 */
50 case 3: return readinputport(4); /* Dip 2 */
51 }
52 return 0xff;
53 }
54
55 static int trio_control_select;
56
WRITE_HANDLER(triothep_control_select_w)57 static WRITE_HANDLER( triothep_control_select_w )
58 {
59 trio_control_select=data;
60 }
61
READ_HANDLER(triothep_control_r)62 static READ_HANDLER( triothep_control_r )
63 {
64 switch (trio_control_select) {
65 case 0: return readinputport(0); /* Player 1 */
66 case 1: return readinputport(1); /* Player 2 */
67 case 2: return readinputport(3); /* Dip 1 */
68 case 3: return readinputport(4); /* Dip 2 */
69 case 4: return readinputport(2); /* VBL */
70 }
71
72 return 0xff;
73 }
74
WRITE_HANDLER(actfancr_sound_w)75 static WRITE_HANDLER( actfancr_sound_w )
76 {
77 soundlatch_w(0,data & 0xff);
78 cpu_set_irq_line(1, IRQ_LINE_NMI, PULSE_LINE);
79 }
80
81 /******************************************************************************/
82
MEMORY_READ_START(actfan_readmem)83 static MEMORY_READ_START( actfan_readmem )
84 { 0x000000, 0x02ffff, MRA_ROM },
85 { 0x062000, 0x063fff, actfancr_pf1_data_r },
86 { 0x072000, 0x0727ff, actfancr_pf2_data_r },
87 { 0x100000, 0x1007ff, MRA_RAM },
88 { 0x130000, 0x130003, actfan_control_1_r },
89 { 0x140000, 0x140001, actfan_control_0_r },
90 { 0x120000, 0x1205ff, paletteram_r },
91 { 0x1f0000, 0x1f3fff, MRA_RAM },
92 MEMORY_END
93
94 static MEMORY_WRITE_START( actfan_writemem )
95 { 0x000000, 0x02ffff, MWA_ROM },
96 { 0x060000, 0x06001f, actfancr_pf1_control_w },
97 { 0x062000, 0x063fff, actfancr_pf1_data_w, &actfancr_pf1_data },
98 { 0x070000, 0x07001f, actfancr_pf2_control_w },
99 { 0x072000, 0x0727ff, actfancr_pf2_data_w, &actfancr_pf2_data },
100 { 0x100000, 0x1007ff, MWA_RAM, &spriteram, &spriteram_size },
101 { 0x110000, 0x110001, buffer_spriteram_w },
102 { 0x120000, 0x1205ff, paletteram_xxxxBBBBGGGGRRRR_w, &paletteram },
103 { 0x150000, 0x150001, actfancr_sound_w },
104 { 0x1f0000, 0x1f3fff, MWA_RAM, &actfancr_ram }, /* Main ram */
105 MEMORY_END
106
107 static MEMORY_READ_START( triothep_readmem )
108 { 0x000000, 0x03ffff, MRA_ROM },
109 { 0x044000, 0x045fff, actfancr_pf2_data_r },
110 { 0x064000, 0x0647ff, actfancr_pf1_data_r },
111 { 0x120000, 0x1207ff, MRA_RAM },
112 { 0x130000, 0x1305ff, paletteram_r },
113 { 0x140000, 0x140001, MRA_NOP }, /* Value doesn't matter */
114 { 0x1f0000, 0x1f3fff, MRA_RAM },
115 { 0x1ff000, 0x1ff001, triothep_control_r },
116 MEMORY_END
117
118 static MEMORY_WRITE_START( triothep_writemem )
119 { 0x000000, 0x03ffff, MWA_ROM },
120 { 0x040000, 0x04001f, actfancr_pf2_control_w },
121 { 0x044000, 0x045fff, actfancr_pf2_data_w, &actfancr_pf2_data },
122 { 0x046400, 0x0467ff, MWA_NOP }, /* Pf2 rowscroll - is it used? */
123 { 0x060000, 0x06001f, actfancr_pf1_control_w },
124 { 0x064000, 0x0647ff, actfancr_pf1_data_w, &actfancr_pf1_data },
125 { 0x066400, 0x0667ff, MWA_RAM, &actfancr_pf1_rowscroll_data },
126 { 0x100000, 0x100001, actfancr_sound_w },
127 { 0x110000, 0x110001, buffer_spriteram_w },
128 { 0x120000, 0x1207ff, MWA_RAM, &spriteram, &spriteram_size },
129 { 0x130000, 0x1305ff, paletteram_xxxxBBBBGGGGRRRR_w, &paletteram },
130 { 0x1f0000, 0x1f3fff, MWA_RAM, &actfancr_ram }, /* Main ram */
131 { 0x1ff000, 0x1ff001, triothep_control_select_w },
132 { 0x1ff402, 0x1ff403, H6280_irq_status_w },
133 MEMORY_END
134
135 /******************************************************************************/
136
137 static MEMORY_READ_START( dec0_s_readmem )
138 { 0x0000, 0x07ff, MRA_RAM },
139 { 0x3000, 0x3000, soundlatch_r },
140 { 0x3800, 0x3800, OKIM6295_status_0_r },
141 { 0x4000, 0xffff, MRA_ROM },
142 MEMORY_END
143
144 static MEMORY_WRITE_START( dec0_s_writemem )
145 { 0x0000, 0x07ff, MWA_RAM },
146 { 0x0800, 0x0800, YM2203_control_port_0_w },
147 { 0x0801, 0x0801, YM2203_write_port_0_w },
148 { 0x1000, 0x1000, YM3812_control_port_0_w },
149 { 0x1001, 0x1001, YM3812_write_port_0_w },
150 { 0x3800, 0x3800, OKIM6295_data_0_w },
151 { 0x4000, 0xffff, MWA_ROM },
152 MEMORY_END
153
154 /******************************************************************************/
155
156 INPUT_PORTS_START( actfancr )
157 PORT_START /* Player 1 controls */
158 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
159 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
160 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
161 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
162 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
163 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
164 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
165 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
166
167 PORT_START /* Player 2 controls */
168 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
169 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
170 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
171 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
172 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
173 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
174 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
175 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
176
177 PORT_START /* start buttons */
178 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
179 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
180 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
181 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
182 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
183 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
184 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
185 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
186
187 PORT_START /* Dip switch bank 1 */
188 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
189 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
190 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
191 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
192 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
193 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
194 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
195 PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
196 PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
197 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
198 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
199 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
200 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
201 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
202 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
203 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
204 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
205 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
206 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
207 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
208 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
209 PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
210
211 PORT_START /* Dip switch bank 2 */
212 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
213 PORT_DIPSETTING( 0x03, "3" )
214 PORT_DIPSETTING( 0x02, "4" )
215 PORT_DIPSETTING( 0x01, "5" )
216 PORT_BITX(0, 0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "100", IP_KEY_NONE, IP_JOY_NONE )
217 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
218 PORT_DIPSETTING( 0x04, "Easy" )
219 PORT_DIPSETTING( 0x0c, "Normal" )
220 PORT_DIPSETTING( 0x08, "Hard" )
221 PORT_DIPSETTING( 0x00, "Hardest" )
222 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
223 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
224 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
225 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) )
226 PORT_DIPSETTING( 0x20, "800000" )
227 PORT_DIPSETTING( 0x00, "None" )
228 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
229 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
230 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
231 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
232 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
233 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
234 INPUT_PORTS_END
235
236 INPUT_PORTS_START( triothep )
237 PORT_START /* Player 1 controls */
238 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
239 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
240 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
241 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
242 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
243 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
244 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
245 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
246
247 PORT_START /* Player 2 controls */
248 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
249 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
250 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
251 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
252 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
253 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
254 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_COCKTAIL )
255 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
256
257 PORT_START /* start buttons */
258 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
259 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
260 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
261 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
262 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
263 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
264 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
265 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
266
267 PORT_START /* Dip switch bank 1 */
268 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
269 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
270 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
271 PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
272 PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
273 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
274 PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
275 PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
276 PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
277 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
278 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
279 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
280 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
281 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
282 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
283 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
284 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
285 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
286 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
287 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
288 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
289 PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
290
291 PORT_START /* Dip switch bank 2 */
292 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
293 PORT_DIPSETTING( 0x00, "8" )
294 PORT_DIPSETTING( 0x01, "10" )
295 PORT_DIPSETTING( 0x03, "12" )
296 PORT_DIPSETTING( 0x02, "14" )
297 PORT_DIPNAME( 0x0c, 0x0c, "Difficulty (Time)" )
298 PORT_DIPSETTING( 0x08, "Easy (130)" )
299 PORT_DIPSETTING( 0x0c, "Normal (100)" )
300 PORT_DIPSETTING( 0x04, "Hard (70)" )
301 PORT_DIPSETTING( 0x00, "Hardest (60)" )
302 PORT_DIPNAME( 0x10, 0x10, "Bonus Lives" )
303 PORT_DIPSETTING( 0x00, "2" )
304 PORT_DIPSETTING( 0x10, "3" )
305 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
306 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
307 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
308 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
309 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
310 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
311 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
312 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
313 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
314 INPUT_PORTS_END
315
316 /******************************************************************************/
317
318 static struct GfxLayout chars =
319 {
320 8,8, /* 8*8 chars */
321 4096,
322 4, /* 4 bits per pixel */
323 { 0x08000*8, 0x18000*8, 0x00000*8, 0x10000*8 },
324 { 0, 1, 2, 3, 4, 5, 6, 7 },
325 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
326 8*8 /* every char takes 8 consecutive bytes */
327 };
328
329 static struct GfxLayout tiles =
330 {
331 16,16, /* 16*16 sprites */
332 2048,
333 4,
334 { 0, 0x10000*8, 0x20000*8,0x30000*8 }, /* plane offset */
335 { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
336 0, 1, 2, 3, 4, 5, 6, 7 },
337 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
338 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
339 32*8 /* every sprite takes 32 consecutive bytes */
340 };
341
342 static struct GfxLayout sprites =
343 {
344 16,16, /* 16*16 sprites */
345 2048+1024,
346 4,
347 { 0, 0x18000*8, 0x30000*8, 0x48000*8 }, /* plane offset */
348 { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
349 0, 1, 2, 3, 4, 5, 6, 7 },
350 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
351 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
352 32*8 /* every sprite takes 32 consecutive bytes */
353 };
354
355 static struct GfxDecodeInfo actfan_gfxdecodeinfo[] =
356 {
357 { REGION_GFX1, 0, &chars, 0, 16 },
358 { REGION_GFX2, 0, &sprites, 512, 16 },
359 { REGION_GFX3, 0, &tiles, 256, 16 },
360 { -1 } /* end of array */
361 };
362
363 static struct GfxDecodeInfo triothep_gfxdecodeinfo[] =
364 {
365 { REGION_GFX1, 0, &chars, 0, 16 },
366 { REGION_GFX2, 0, &sprites, 256, 16 },
367 { REGION_GFX3, 0, &tiles, 512, 16 },
368 { -1 } /* end of array */
369 };
370
371 /******************************************************************************/
372
sound_irq(int linestate)373 static void sound_irq(int linestate)
374 {
375 cpu_set_irq_line(1,0,linestate); /* IRQ */
376 }
377
378 static struct YM2203interface ym2203_interface =
379 {
380 1,
381 1500000, /* Should be accurate */
382 { YM2203_VOL(50,90) },
383 { 0 },
384 { 0 },
385 { 0 },
386 { 0 }
387 };
388
389 static struct YM3812interface ym3812_interface =
390 {
391 1, /* 1 chip */
392 3000000, /* 3.000000 MHz (Should be accurate) */
393 { 90 },
394 { sound_irq },
395 };
396
397 static struct OKIM6295interface okim6295_interface =
398 {
399 1, /* 1 chip */
400 { 7759 }, /* frequency */
401 { REGION_SOUND1 },
402 { 85 }
403 };
404
405 /******************************************************************************/
406
407 static MACHINE_DRIVER_START( actfancr )
408
409 /* basic machine hardware */
410 MDRV_CPU_ADD(H6280,21477200/3) /* Should be accurate */
MDRV_CPU_MEMORY(actfan_readmem,actfan_writemem)411 MDRV_CPU_MEMORY(actfan_readmem,actfan_writemem)
412 MDRV_CPU_VBLANK_INT(irq0_line_hold,1) /* VBL */
413
414 MDRV_CPU_ADD(M6502, 1500000)
415 MDRV_CPU_FLAGS(CPU_AUDIO_CPU) /* Should be accurate */
416 MDRV_CPU_MEMORY(dec0_s_readmem,dec0_s_writemem)
417
418 MDRV_FRAMES_PER_SECOND(60)
419 MDRV_VBLANK_DURATION(529)
420
421 /* video hardware */
422 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM)
423 MDRV_SCREEN_SIZE(32*8, 32*8)
424 MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
425 MDRV_GFXDECODE(actfan_gfxdecodeinfo)
426 MDRV_PALETTE_LENGTH(768)
427
428 MDRV_VIDEO_START(actfancr)
429 MDRV_VIDEO_UPDATE(actfancr)
430
431 /* sound hardware */
432 MDRV_SOUND_ADD(YM2203, ym2203_interface)
433 MDRV_SOUND_ADD(YM3812, ym3812_interface)
434 MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
435 MACHINE_DRIVER_END
436
437 static MACHINE_DRIVER_START( triothep )
438
439 /* basic machine hardware */
440 MDRV_CPU_ADD(H6280,21477200/3) /* Should be accurate */
441 MDRV_CPU_MEMORY(triothep_readmem,triothep_writemem)
442 MDRV_CPU_VBLANK_INT(irq0_line_hold,1) /* VBL */
443
444 MDRV_CPU_ADD(M6502, 1500000)
445 MDRV_CPU_FLAGS(CPU_AUDIO_CPU) /* Should be accurate */
446 MDRV_CPU_MEMORY(dec0_s_readmem,dec0_s_writemem)
447
448 MDRV_FRAMES_PER_SECOND(60)
449 MDRV_VBLANK_DURATION(529)
450
451 /* video hardware */
452 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM)
453 MDRV_SCREEN_SIZE(32*8, 32*8)
454 MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
455 MDRV_GFXDECODE(triothep_gfxdecodeinfo)
456 MDRV_PALETTE_LENGTH(768)
457
458 MDRV_VIDEO_START(triothep)
459 MDRV_VIDEO_UPDATE(triothep)
460
461 /* sound hardware */
462 MDRV_SOUND_ADD(YM2203, ym2203_interface)
463 MDRV_SOUND_ADD(YM3812, ym3812_interface)
464 MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
465 MACHINE_DRIVER_END
466
467 /******************************************************************************/
468
469 ROM_START( actfancr )
470 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* Need to allow full RAM allocation for now */
471 ROM_LOAD( "fe08-2.bin", 0x00000, 0x10000, CRC(0d36fbfa) SHA1(cef5cfd053beac5ca2ac52421024c316bdbfba42) )
472 ROM_LOAD( "fe09-2.bin", 0x10000, 0x10000, CRC(27ce2bb1) SHA1(52a423dfc2bba7b3330d1a10f4149ae6eeb9198c) )
473 ROM_LOAD( "10", 0x20000, 0x10000, CRC(cabad137) SHA1(41ca833649671a29e9395968cde2be8137a9ff0a) )
474
475 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
476 ROM_LOAD( "17-1", 0x08000, 0x8000, CRC(289ad106) SHA1(cf1b32ac41d3d92860fab04d82a08efe57b6ecf3) )
477
478 ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
479 ROM_LOAD( "15", 0x00000, 0x10000, CRC(a1baf21e) SHA1(b85cf9180efae6c95cc0310064b52a78e591826a) ) /* Chars */
480 ROM_LOAD( "16", 0x10000, 0x10000, CRC(22e64730) SHA1(f1376c6e2c9d021eca7ccee3daab00593ba724b6) )
481
482 ROM_REGION( 0x60000, REGION_GFX2, ROMREGION_DISPOSE )
483 ROM_LOAD( "02", 0x00000, 0x10000, CRC(b1db0efc) SHA1(a7bd7748ea37f473499ba5bf8ab4995b9240ff48) ) /* Sprites */
484 ROM_LOAD( "03", 0x10000, 0x08000, CRC(f313e04f) SHA1(fe69758910d38f742971c1027fc8f498c88262b1) )
485 ROM_LOAD( "06", 0x18000, 0x10000, CRC(8cb6dd87) SHA1(fab4fe76d2426c906a9070cbf7ce81200ba27ff6) )
486 ROM_LOAD( "07", 0x28000, 0x08000, CRC(dd345def) SHA1(44fbf9da636a4e18c421fdc0a1eadc3c7ba66068) )
487 ROM_LOAD( "00", 0x30000, 0x10000, CRC(d50a9550) SHA1(b366826e0df11ab6b97e2cb0e813432e95f9513d) )
488 ROM_LOAD( "01", 0x40000, 0x08000, CRC(34935e93) SHA1(8cd02a72659f6cb0536b54c1c8b34dae818fbfdc) )
489 ROM_LOAD( "04", 0x48000, 0x10000, CRC(bcf41795) SHA1(1d18afc974ac43fe6194e2840bbb2e93cd2b6cff) )
490 ROM_LOAD( "05", 0x58000, 0x08000, CRC(d38b94aa) SHA1(773d01427744fda9104f673d2b4183a0f7471a39) )
491
492 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
493 ROM_LOAD( "14", 0x00000, 0x10000, CRC(d6457420) SHA1(d03d2e944e768b297ec0c3389320c42bc0259d00) ) /* Tiles */
494 ROM_LOAD( "12", 0x10000, 0x10000, CRC(08787b7a) SHA1(23b10b75c4cbff8effadf4c6ed15d90b87648ce9) )
495 ROM_LOAD( "13", 0x20000, 0x10000, CRC(c30c37dc) SHA1(0f7a325738eafa85239497e2b97aa51a6f2ffc4d) )
496 ROM_LOAD( "11", 0x30000, 0x10000, CRC(1f006d9f) SHA1(74bc2d4d022ad7c65be781f974919262cacb4b64) )
497
498 ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM sounds */
499 ROM_LOAD( "18", 0x00000, 0x10000, CRC(5c55b242) SHA1(62ba60b2f02483875da12aefe849f7e2fd137ef1) )
500 ROM_END
501
502 ROM_START( actfanc1 )
503 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* Need to allow full RAM allocation for now */
504 ROM_LOAD( "08-1", 0x00000, 0x10000, CRC(3bf214a4) SHA1(f7513672b2292d3acb4332b392695888bf6560a5) )
505 ROM_LOAD( "09-1", 0x10000, 0x10000, CRC(13ae78d5) SHA1(eba77d3dbfe273e18c7fa9c0ca305ac2468f9381) )
506 ROM_LOAD( "10", 0x20000, 0x10000, CRC(cabad137) SHA1(41ca833649671a29e9395968cde2be8137a9ff0a) )
507
508 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
509 ROM_LOAD( "17-1", 0x08000, 0x8000, CRC(289ad106) SHA1(cf1b32ac41d3d92860fab04d82a08efe57b6ecf3) )
510
511 ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
512 ROM_LOAD( "15", 0x00000, 0x10000, CRC(a1baf21e) SHA1(b85cf9180efae6c95cc0310064b52a78e591826a) ) /* Chars */
513 ROM_LOAD( "16", 0x10000, 0x10000, CRC(22e64730) SHA1(f1376c6e2c9d021eca7ccee3daab00593ba724b6) )
514
515 ROM_REGION( 0x60000, REGION_GFX2, ROMREGION_DISPOSE )
516 ROM_LOAD( "02", 0x00000, 0x10000, CRC(b1db0efc) SHA1(a7bd7748ea37f473499ba5bf8ab4995b9240ff48) ) /* Sprites */
517 ROM_LOAD( "03", 0x10000, 0x08000, CRC(f313e04f) SHA1(fe69758910d38f742971c1027fc8f498c88262b1) )
518 ROM_LOAD( "06", 0x18000, 0x10000, CRC(8cb6dd87) SHA1(fab4fe76d2426c906a9070cbf7ce81200ba27ff6) )
519 ROM_LOAD( "07", 0x28000, 0x08000, CRC(dd345def) SHA1(44fbf9da636a4e18c421fdc0a1eadc3c7ba66068) )
520 ROM_LOAD( "00", 0x30000, 0x10000, CRC(d50a9550) SHA1(b366826e0df11ab6b97e2cb0e813432e95f9513d) )
521 ROM_LOAD( "01", 0x40000, 0x08000, CRC(34935e93) SHA1(8cd02a72659f6cb0536b54c1c8b34dae818fbfdc) )
522 ROM_LOAD( "04", 0x48000, 0x10000, CRC(bcf41795) SHA1(1d18afc974ac43fe6194e2840bbb2e93cd2b6cff) )
523 ROM_LOAD( "05", 0x58000, 0x08000, CRC(d38b94aa) SHA1(773d01427744fda9104f673d2b4183a0f7471a39) )
524
525 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
526 ROM_LOAD( "14", 0x00000, 0x10000, CRC(d6457420) SHA1(d03d2e944e768b297ec0c3389320c42bc0259d00) ) /* Tiles */
527 ROM_LOAD( "12", 0x10000, 0x10000, CRC(08787b7a) SHA1(23b10b75c4cbff8effadf4c6ed15d90b87648ce9) )
528 ROM_LOAD( "13", 0x20000, 0x10000, CRC(c30c37dc) SHA1(0f7a325738eafa85239497e2b97aa51a6f2ffc4d) )
529 ROM_LOAD( "11", 0x30000, 0x10000, CRC(1f006d9f) SHA1(74bc2d4d022ad7c65be781f974919262cacb4b64) )
530
531 ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM sounds */
532 ROM_LOAD( "18", 0x00000, 0x10000, CRC(5c55b242) SHA1(62ba60b2f02483875da12aefe849f7e2fd137ef1) )
533 ROM_END
534
535 ROM_START( actfancj )
536 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* Need to allow full RAM allocation for now */
537 ROM_LOAD( "fd08-1.bin", 0x00000, 0x10000, CRC(69004b60) SHA1(7c6b876ca04377d2aa2d3c3f19d8e6cc7345363d) )
538 ROM_LOAD( "fd09-1.bin", 0x10000, 0x10000, CRC(a455ae3e) SHA1(960798271c8370c1c4ffce2a453f59d7a301c9f9) )
539 ROM_LOAD( "10", 0x20000, 0x10000, CRC(cabad137) SHA1(41ca833649671a29e9395968cde2be8137a9ff0a) )
540
541 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
542 ROM_LOAD( "17-1", 0x08000, 0x8000, CRC(289ad106) SHA1(cf1b32ac41d3d92860fab04d82a08efe57b6ecf3) )
543
544 ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
545 ROM_LOAD( "15", 0x00000, 0x10000, CRC(a1baf21e) SHA1(b85cf9180efae6c95cc0310064b52a78e591826a) ) /* Chars */
546 ROM_LOAD( "16", 0x10000, 0x10000, CRC(22e64730) SHA1(f1376c6e2c9d021eca7ccee3daab00593ba724b6) )
547
548 ROM_REGION( 0x60000, REGION_GFX2, ROMREGION_DISPOSE )
549 ROM_LOAD( "02", 0x00000, 0x10000, CRC(b1db0efc) SHA1(a7bd7748ea37f473499ba5bf8ab4995b9240ff48) ) /* Sprites */
550 ROM_LOAD( "03", 0x10000, 0x08000, CRC(f313e04f) SHA1(fe69758910d38f742971c1027fc8f498c88262b1) )
551 ROM_LOAD( "06", 0x18000, 0x10000, CRC(8cb6dd87) SHA1(fab4fe76d2426c906a9070cbf7ce81200ba27ff6) )
552 ROM_LOAD( "07", 0x28000, 0x08000, CRC(dd345def) SHA1(44fbf9da636a4e18c421fdc0a1eadc3c7ba66068) )
553 ROM_LOAD( "00", 0x30000, 0x10000, CRC(d50a9550) SHA1(b366826e0df11ab6b97e2cb0e813432e95f9513d) )
554 ROM_LOAD( "01", 0x40000, 0x08000, CRC(34935e93) SHA1(8cd02a72659f6cb0536b54c1c8b34dae818fbfdc) )
555 ROM_LOAD( "04", 0x48000, 0x10000, CRC(bcf41795) SHA1(1d18afc974ac43fe6194e2840bbb2e93cd2b6cff) )
556 ROM_LOAD( "05", 0x58000, 0x08000, CRC(d38b94aa) SHA1(773d01427744fda9104f673d2b4183a0f7471a39) )
557
558 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
559 ROM_LOAD( "14", 0x00000, 0x10000, CRC(d6457420) SHA1(d03d2e944e768b297ec0c3389320c42bc0259d00) ) /* Tiles */
560 ROM_LOAD( "12", 0x10000, 0x10000, CRC(08787b7a) SHA1(23b10b75c4cbff8effadf4c6ed15d90b87648ce9) )
561 ROM_LOAD( "13", 0x20000, 0x10000, CRC(c30c37dc) SHA1(0f7a325738eafa85239497e2b97aa51a6f2ffc4d) )
562 ROM_LOAD( "11", 0x30000, 0x10000, CRC(1f006d9f) SHA1(74bc2d4d022ad7c65be781f974919262cacb4b64) )
563
564 ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM sounds */
565 ROM_LOAD( "18", 0x00000, 0x10000, CRC(5c55b242) SHA1(62ba60b2f02483875da12aefe849f7e2fd137ef1) )
566 ROM_END
567
568 ROM_START( triothep )
569 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* Need to allow full RAM allocation for now */
570 ROM_LOAD( "ff16", 0x00000, 0x20000, CRC(84d7e1b6) SHA1(28381d2e1f6d22a959383eb2e8d73f2e03f4d39f) )
571 ROM_LOAD( "ff15.bin", 0x20000, 0x10000, CRC(6eada47c) SHA1(98fc4e93c47bc42ea7c20e8ac994b117cd7cb5a5) )
572 ROM_LOAD( "ff14.bin", 0x30000, 0x10000, CRC(4ba7de4a) SHA1(bf552fa33746f3d27f9b193424a38fef58fe0765) )
573
574 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
575 ROM_LOAD( "ff18.bin", 0x00000, 0x10000, CRC(9de9ee63) SHA1(c91b824b9a791cb90365d45c8e1b69e67f7d065f) )
576
577 ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
578 ROM_LOAD( "ff12.bin", 0x00000, 0x10000, CRC(15fb49f2) SHA1(a81ff1dbc813ab9b37edb832e01aab9a9a3ed5a1) ) /* Chars */
579 ROM_LOAD( "ff13.bin", 0x10000, 0x10000, CRC(e20c9623) SHA1(b5a58599a016378f34217396212f81ede9272598) )
580
581 ROM_REGION( 0x60000, REGION_GFX2, ROMREGION_DISPOSE )
582 ROM_LOAD( "ff11.bin", 0x00000, 0x10000, CRC(19e885c7) SHA1(694f0aa4c1c976320d985ee50bb59c1894b853ed) ) /* Sprites */
583 ROM_LOAD( "ff10.bin", 0x10000, 0x08000, CRC(4b6b477a) SHA1(77486e0ff957cbfdae16d2b5977e95b7a7ced948) )
584 ROM_LOAD( "ff09.bin", 0x18000, 0x10000, CRC(79c6bc0e) SHA1(d4bf195f6114103d2eb68f3aaf65d4044947f600) )
585 ROM_LOAD( "ff08.bin", 0x28000, 0x08000, CRC(1391e445) SHA1(bd53a969567bb5a46a35bd02e84bbb58c446a0a2) )
586 ROM_LOAD( "ff03.bin", 0x30000, 0x10000, CRC(b36ad42d) SHA1(9d72cbb0904e82271e4835d668b133f17dec8255) )
587 ROM_LOAD( "ff02.bin", 0x40000, 0x08000, CRC(6b9d24ce) SHA1(9d6d52e742fc37d83682291f918f3348395f0cd8) )
588 ROM_LOAD( "ff01.bin", 0x48000, 0x10000, CRC(68d80a66) SHA1(526ed8c920915877f5ee0519c9c8eee7e5580c54) )
589 ROM_LOAD( "ff00.bin", 0x58000, 0x08000, CRC(41232442) SHA1(1c10a4f5607e41d6239cb478ed7355963ad6b2d0) )
590
591 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
592 ROM_LOAD( "ff04.bin", 0x00000, 0x10000, CRC(7cea3c87) SHA1(b58156140a75f88ee6ec97ca7cdc02619ec51726) ) /* Tiles */
593 ROM_LOAD( "ff06.bin", 0x10000, 0x10000, CRC(5e7f3e8f) SHA1(c92ec281b3985b442957f7d9237eb38a6d621cd4) )
594 ROM_LOAD( "ff05.bin", 0x20000, 0x10000, CRC(8bb13f05) SHA1(f524cb0a38d0025c93124fc329d913e000155e9b) )
595 ROM_LOAD( "ff07.bin", 0x30000, 0x10000, CRC(0d7affc3) SHA1(59f9fbf13216aaf67c7d1ad3a11a1738c4afd9e5) )
596
597 ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM sounds */
598 ROM_LOAD( "ff17.bin", 0x00000, 0x10000, CRC(f0ab0d05) SHA1(29d3ab513a8d46a1cb70f5333fa56bb787a58288) )
599 ROM_END
600
601 /******************************************************************************/
602
603 static READ_HANDLER( cycle_r )
604 {
605 int pc=activecpu_get_pc();
606 int ret=actfancr_ram[0x26];
607
608 if (offset==1) return actfancr_ram[0x27];
609
610 if (pc==0xe29a && ret==0) {
611 cpu_spinuntil_int();
612 return 1;
613 }
614
615 return ret;
616 }
617
READ_HANDLER(cyclej_r)618 static READ_HANDLER( cyclej_r )
619 {
620 int pc=activecpu_get_pc();
621 int ret=actfancr_ram[0x26];
622
623 if (offset==1) return actfancr_ram[0x27];
624
625 if (pc==0xe2b1 && ret==0) {
626 cpu_spinuntil_int();
627 return 1;
628 }
629
630 return ret;
631 }
632
DRIVER_INIT(actfancr)633 static DRIVER_INIT( actfancr )
634 {
635 install_mem_read_handler(0, 0x1f0026, 0x1f0027, cycle_r);
636 }
637
DRIVER_INIT(actfancj)638 static DRIVER_INIT( actfancj )
639 {
640 install_mem_read_handler(0, 0x1f0026, 0x1f0027, cyclej_r);
641 }
642
643
644
645 GAME( 1989, actfancr, 0, actfancr, actfancr, actfancr, ROT0, "Data East Corporation", "Act-Fancer Cybernetick Hyper Weapon (World revision 2)" )
646 GAME( 1989, actfanc1, actfancr, actfancr, actfancr, actfancr, ROT0, "Data East Corporation", "Act-Fancer Cybernetick Hyper Weapon (World revision 1)" )
647 GAME( 1989, actfancj, actfancr, actfancr, actfancr, actfancj, ROT0, "Data East Corporation", "Act-Fancer Cybernetick Hyper Weapon (Japan revision 1)" )
648 GAME( 1989, triothep, 0, triothep, triothep, 0, ROT0, "Data East Corporation", "Trio The Punch - Never Forget Me... (Japan)" )
649