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