1 /*
2
3 Cross Pang (c)1998 F2 System
4
5 No Copyright Notice is displayed in the game however the following page
6 lists it as being by F2 System, Released April 1998
7 http://www.f2.co.kr/eng/f2system/intro5.asp
8
9 The sample rom says 'Oksan' (Oksan made Pass, its unclear how they are
10 related to this game)
11
12 The game uses an U6612 sound chip which is YM3812 compatible.
13
14 Audio Test isn't correct when a sound is tested, instead musics are right.
15
16 The alpha effect is a guess, it might be something more simple like flicker
17
18 driver by Pierpaolo Prazzoli
19 some bits by David Haywood
20
21 */
22
23 #include "driver.h"
24 #include "vidhrdw/generic.h"
25
26 extern data16_t *crospang_bg_videoram,*crospang_fg_videoram;
27
28 extern VIDEO_START( crospang );
29 extern VIDEO_UPDATE( crospang );
30
31 extern WRITE16_HANDLER ( crospang_fg_scrolly_w );
32 extern WRITE16_HANDLER ( crospang_bg_scrolly_w );
33 extern WRITE16_HANDLER ( crospang_fg_scrollx_w );
34 extern WRITE16_HANDLER ( crospang_bg_scrollx_w );
35 extern WRITE16_HANDLER ( crospang_fg_videoram_w );
36 extern WRITE16_HANDLER ( crospang_bg_videoram_w );
37
WRITE16_HANDLER(crospang_soundlatch_w)38 static WRITE16_HANDLER ( crospang_soundlatch_w )
39 {
40 if(ACCESSING_LSB)
41 {
42 soundlatch_w(0,data & 0xff);
43 }
44 }
45
46 /* main cpu */
47
MEMORY_READ16_START(crospang_readmem)48 static MEMORY_READ16_START( crospang_readmem )
49 { 0x000000, 0x03ffff, MRA16_ROM },
50 { 0x120000, 0x1207ff, MRA16_RAM },
51 { 0x122000, 0x1227ff, MRA16_RAM },
52 { 0x200000, 0x2005ff, MRA16_RAM },
53 { 0x210000, 0x2107ff, MRA16_RAM },
54 { 0x280000, 0x280001, input_port_0_word_r },
55 { 0x280002, 0x280003, input_port_1_word_r },
56 { 0x280004, 0x280005, input_port_2_word_r },
57 { 0x320000, 0x32ffff, MRA16_RAM },
58 MEMORY_END
59
60 static MEMORY_WRITE16_START( crospang_writemem )
61 { 0x000000, 0x03ffff, MWA16_ROM },
62 { 0x100000, 0x100001, MWA16_NOP },
63 { 0x100002, 0x100003, crospang_fg_scrolly_w },
64 { 0x100004, 0x100005, crospang_bg_scrollx_w },
65 { 0x100006, 0x100007, crospang_bg_scrolly_w },
66 { 0x100008, 0x100009, crospang_fg_scrollx_w },
67 { 0x10000e, 0x10000f, MWA16_NOP },
68 { 0x120000, 0x1207ff, crospang_fg_videoram_w, &crospang_fg_videoram },
69 { 0x122000, 0x1227ff, crospang_bg_videoram_w, &crospang_bg_videoram },
70 { 0x200000, 0x2005ff, paletteram16_xRRRRRGGGGGBBBBB_word_w, &paletteram16 },
71 { 0x210000, 0x2107ff, MWA16_RAM, &spriteram16, &spriteram_size },
72 { 0x270000, 0x270001, crospang_soundlatch_w },
73 { 0x320000, 0x32ffff, MWA16_RAM },
74 MEMORY_END
75
76 /* sound cpu */
77
78 static MEMORY_READ_START( crospang_sound_readmem )
79 { 0x0000, 0xbfff, MRA_ROM },
80 { 0xc000, 0xc7ff, MRA_RAM },
81 MEMORY_END
82
83 static MEMORY_WRITE_START( crospang_sound_writemem )
84 { 0x0000, 0xbfff, MWA_ROM },
85 { 0xc000, 0xc7ff, MWA_RAM },
86 MEMORY_END
87
88 static PORT_READ_START( crospang_sound_readport )
89 { 0x00, 0x00, YM3812_status_port_0_r },
90 { 0x02, 0x02, OKIM6295_status_0_r },
91 { 0x06, 0x06, soundlatch_r },
92 PORT_END
93
94 static PORT_WRITE_START( crospang_sound_writeport )
95 { 0x00, 0x00, YM3812_control_port_0_w },
96 { 0x01, 0x01, YM3812_write_port_0_w },
97 { 0x02, 0x02, OKIM6295_data_0_w },
98 PORT_END
99
100 INPUT_PORTS_START( crospang )
101 PORT_START /* Inputs */
102 PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_PLAYER1 )
103 PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_PLAYER1 )
104 PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_PLAYER1 )
105 PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER1 )
106 PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
107 PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
108 PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
109 PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
110 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_PLAYER2 )
111 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_PLAYER2 )
112 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_PLAYER2 )
113 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
114 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
115 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
116 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
117 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
118
119 PORT_START /* Coins */
120 PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
121 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )
122 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
123 PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN )
124
125 PORT_START /* DSW */
126 PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Coinage ) )
127 PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) )
128 PORT_DIPSETTING( 0x0001, DEF_STR( 2C_1C ) )
129 PORT_DIPSETTING( 0x0002, DEF_STR( 1C_1C ) )
130 PORT_DIPSETTING( 0x0003, DEF_STR( 1C_2C ) )
131 PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
132 PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
133 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
134 PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
135 PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
136 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
137 PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
138 PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
139 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
140 PORT_DIPNAME( 0x0020, 0x0020, "Number of Powers" )
141 PORT_DIPSETTING( 0x0000, "1" )
142 PORT_DIPSETTING( 0x0020, "2" )
143 PORT_DIPNAME( 0x00c0, 0x00c0, "Extra Balls" )
144 PORT_DIPSETTING( 0x00c0, "1" )
145 PORT_DIPSETTING( 0x0080, "2" )
146 PORT_DIPSETTING( 0x0040, "3" )
147 PORT_DIPSETTING( 0x0000, "4" )
148 PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
149 PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
150 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
151 PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
152 PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
153 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
154 PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
155 PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
156 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
157 PORT_DIPNAME( 0x1800, 0x1800, "Minimum Balls per Row" )
158 PORT_DIPSETTING( 0x1800, "3" )
159 PORT_DIPSETTING( 0x1000, "4" )
160 PORT_DIPSETTING( 0x0800, "5" )
161 PORT_DIPSETTING( 0x0000, "6" )
162 PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
163 PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
164 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
165 PORT_SERVICE( 0x4000, IP_ACTIVE_LOW )
166 PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
167 PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
168 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
169 INPUT_PORTS_END
170
171 static struct GfxLayout layout_16x16x4a =
172 {
173 16,16,
174 RGN_FRAC(1,4),
175 4,
176 { RGN_FRAC(0,4),RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) },
177 { 128,129,130,131,132,133,134,135, 0,1,2,3,4,5,6,7 },
178 { 8*0, 8*1, 8*2, 8*3, 8*4, 8*5, 8*6, 8*7, 8*8, 8*9, 8*10, 8*11, 8*12, 8*13, 8*14, 8*15 },
179 8*32
180 };
181
182 static struct GfxLayout layout_16x16x4 =
183 {
184 16,16,
185 RGN_FRAC(1,4),
186 4,
187 { RGN_FRAC(2,4),RGN_FRAC(0,4),RGN_FRAC(3,4),RGN_FRAC(1,4) },
188 { 0,1,2,3,4,5,6,7, 128,129,130,131,132,133,134,135 },
189 { 8*0, 8*1, 8*2, 8*3, 8*4, 8*5, 8*6, 8*7, 8*8, 8*9, 8*10, 8*11, 8*12, 8*13, 8*14, 8*15 },
190 8*32
191 };
192
193 static struct GfxDecodeInfo gfxdecodeinfo[] =
194 {
195 { REGION_GFX1, 0, &layout_16x16x4a, 0, 0x10 }, // [0] Sprites
196 { REGION_GFX2, 0, &layout_16x16x4, 0, 0x30 }, // [1] Tiles
197 { -1 }
198 };
199
irqhandler(int linestate)200 static void irqhandler(int linestate)
201 {
202 cpu_set_irq_line(1,0,linestate);
203 }
204
205 static struct YM3812interface ym3812_interface =
206 {
207 1,
208 14318180/4,
209 { 100 }, /* volume */
210 { irqhandler }, /* IRQ Line */
211 };
212
213 static struct OKIM6295interface okim6295_interface =
214 {
215 1,
216 { 6000 }, /* ? guess */
217 { REGION_SOUND1 },
218 { 100 }
219 };
220
221 static MACHINE_DRIVER_START( crospang )
222
223 /* basic machine hardware */
224 MDRV_CPU_ADD(M68000, 14318180/2)
225 MDRV_CPU_MEMORY(crospang_readmem,crospang_writemem)
226 MDRV_CPU_VBLANK_INT(irq6_line_hold,1)
227
228 MDRV_CPU_ADD(Z80, 14318180/4)
229 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
230 MDRV_CPU_MEMORY(crospang_sound_readmem,crospang_sound_writemem)
231 MDRV_CPU_PORTS(crospang_sound_readport,crospang_sound_writeport)
232
233 MDRV_FRAMES_PER_SECOND(60)
234 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
235
236 /* video hardware */
237 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_RGB_DIRECT)
238 MDRV_SCREEN_SIZE(64*8, 64*8)
239 MDRV_VISIBLE_AREA(0, 40*8-1, 0, 30*8-1)
240
241 MDRV_PALETTE_LENGTH(0x300)
242 MDRV_GFXDECODE(gfxdecodeinfo)
243
244 MDRV_VIDEO_START(crospang)
245 MDRV_VIDEO_UPDATE(crospang)
246
247 /* sound hardware */
248 MDRV_SOUND_ADD(YM3812, ym3812_interface)
249 MDRV_SOUND_ADD(OKIM6295, okim6295_interface)
250 MACHINE_DRIVER_END
251
252
253 ROM_START( crospang )
254 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68k */
255 ROM_LOAD16_BYTE( "p1.bin", 0x00001, 0x20000, CRC(0bcbbaad) SHA1(807f07be340d7af0aad8d49461b5a7f0221ea3b7) )
256 ROM_LOAD16_BYTE( "p2.bin", 0x00000, 0x20000, CRC(0947d204) SHA1(35e7e277c51888a66d305994bf05c3f6bfc3c29e) )
257
258 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* z80 */
259 ROM_LOAD( "s1.bin", 0x00000, 0x10000, CRC(d61a224c) SHA1(5cd1b2d136ad58ab550c7ba135558d6c8a4cd8f6) )
260
261 ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
262 ROM_LOAD( "s2.bin", 0x00000, 0x20000, CRC(9f9ecd22) SHA1(631ffe14018ba39658c435b8ecb23b19a14569ee) ) // sample rom contains oksan?
263
264 ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* sprites */
265 ROM_LOAD( "rom6.bin", 0x000000, 0x80000, CRC(9c633082) SHA1(18b8591b695ee429c9c9855d8cbba6249a4bd809) )
266 ROM_LOAD( "rom5.bin", 0x080000, 0x80000, CRC(53a34dc5) SHA1(2e5cf8093bf507e81d7447736b7727c3fd20c471) )
267 ROM_LOAD( "rom4.bin", 0x100000, 0x80000, CRC(9a91d494) SHA1(1c6280f662f1cf53f7f6defb7e215da75b573fdf) )
268 ROM_LOAD( "rom3.bin", 0x180000, 0x80000, CRC(cc6e1fce) SHA1(eb5b3ca7222f48916dc6206f987b2669fe7e7c6b) )
269
270 ROM_REGION( 0x80000, REGION_GFX2, 0 ) /* bg tiles */
271 ROM_LOAD( "rom1.bin", 0x00000, 0x40000, CRC(905042bb) SHA1(ed5b97e88d24e55f8fcfaaa34251582976cb2527) )
272 ROM_LOAD( "rom2.bin", 0x40000, 0x40000, CRC(bc4381e9) SHA1(af0690c253bead3448db5ec8fb258d8284646e89) )
273 ROM_END
274
275
276 GAME( 1998, crospang, 0, crospang, crospang, 0, ROT0, "F2 System", "Cross Pang" )
277