1 /***************************************************************************
2
3 Appoooh memory map (preliminary)
4 Similar to Bank Panic
5
6 driver by Tatsuyuki Satoh
7
8
9 0000-9fff ROM
10 a000-dfff BANKED ROM
11 e000-e7ff RAM
12 e800-efff RAM??
13
14 write:
15 f000-f01f Sprite RAM #1
16 f020-f3ff Video RAM #1
17 f420-f7ff Color RAM #1
18 f800-f81f Sprite RAM #2
19 f820-fbff Video RAM #2
20 fc20-ffff Color RAM #2
21
22 I/O
23
24 read:
25 00 IN0
26 01 IN1
27 03 DSW
28 04 IN2
29
30 write:
31 00 SN76496 #1
32 01 SN76496 #2
33 02 SN76496 #3
34 03 MSM5205 address write
35 04 bit 0 = NMI enable
36 bit 1 = flipscreen
37 bit 2-3 = ?
38 bit 4-5 = priority
39 bit 6 = bank rom select
40 bit 7 = ?
41 05 horizontal scroll ??
42
43 Credits:
44 - Tatsuyuki Satoh: MAME driver
45
46 ***************************************************************************/
47
48 #include "driver.h"
49 #include "appoooh.h"
50
51 static unsigned char *adpcmptr = 0;
52 static int appoooh_adpcm_data;
53
appoooh_adpcm_int(int num)54 static void appoooh_adpcm_int(int num)
55 {
56 if( adpcmptr )
57 {
58 if( appoooh_adpcm_data==-1)
59 {
60 appoooh_adpcm_data = *adpcmptr++;
61 MSM5205_data_w(0,appoooh_adpcm_data >> 4);
62 if(appoooh_adpcm_data==0x70)
63 {
64 adpcmptr = 0;
65 MSM5205_reset_w(0,1);
66 }
67 }else{
68 MSM5205_data_w(0,appoooh_adpcm_data & 0x0f );
69 appoooh_adpcm_data =-1;
70 }
71 }
72 }
73 /* adpcm address write */
WRITE_HANDLER(appoooh_adpcm_w)74 static WRITE_HANDLER( appoooh_adpcm_w )
75 {
76 unsigned char *RAM = memory_region(REGION_SOUND1);
77 adpcmptr = &RAM[data*256];
78 MSM5205_reset_w(0,0);
79 appoooh_adpcm_data=-1;
80 }
81
82
83
MEMORY_READ_START(readmem)84 static MEMORY_READ_START( readmem )
85 { 0x0000, 0x9fff, MRA_ROM },
86 { 0xa000, 0xdfff, MRA_BANK1 },
87 { 0xe000, 0xe7ff, MRA_RAM },
88 { 0xe800, 0xefff, MRA_RAM }, /* RAM ? */
89 { 0xf000, 0xffff, MRA_RAM },
90 MEMORY_END
91
92 static MEMORY_WRITE_START( writemem )
93 { 0x0000, 0xdfff, MWA_ROM },
94 { 0xe000, 0xe7ff, MWA_RAM },
95 { 0xe800, 0xefff, MWA_RAM }, /* RAM ? */
96 { 0xf000, 0xf01f, MWA_RAM, &spriteram },
97 { 0xf020, 0xf3ff, appoooh_fg_videoram_w, &appoooh_fg_videoram },
98 { 0xf420, 0xf7ff, appoooh_fg_colorram_w, &appoooh_fg_colorram },
99 { 0xf800, 0xf81f, MWA_RAM, &spriteram_2 },
100 { 0xf820, 0xfbff, appoooh_bg_videoram_w, &appoooh_bg_videoram },
101 { 0xfc20, 0xffff, appoooh_bg_colorram_w, &appoooh_bg_colorram },
102 MEMORY_END
103
104 static PORT_READ_START( readport )
105 { 0x00, 0x00, input_port_0_r }, /* IN0 */
106 { 0x01, 0x01, input_port_1_r }, /* IN1 */
107 { 0x03, 0x03, input_port_3_r }, /* DSW */
108 { 0x04, 0x04, input_port_2_r }, /* IN2 */
109 PORT_END
110
111 static PORT_WRITE_START( writeport )
112 { 0x00, 0x00, SN76496_0_w },
113 { 0x01, 0x01, SN76496_1_w },
114 { 0x02, 0x02, SN76496_2_w },
115 { 0x03, 0x03, appoooh_adpcm_w },
116 { 0x04, 0x04, appoooh_out_w },
117 { 0x05, 0x05, appoooh_scroll_w }, /* unknown */
118 PORT_END
119
120
121
122 INPUT_PORTS_START( appoooh )
123 PORT_START /* IN0 */
124 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
125 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
126 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
127 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
128 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
129 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
130 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )
131 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 )
132
133 PORT_START /* IN1 */
134 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
135 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
136 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
137 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
138 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
139 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
140 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
141 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_COCKTAIL )
142
143 PORT_START /* IN2 */
144 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 )
145 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_COCKTAIL )
146 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
147 PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */
148
149 PORT_START /* DSW */
150 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
151 PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
152 PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
153 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
154 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
155 PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
156 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
157 PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
158 PORT_DIPSETTING( 0x06, DEF_STR( 1C_4C ) )
159 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coin_B ) )
160 PORT_DIPSETTING( 0x18, DEF_STR( 3C_1C ) )
161 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
162 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
163 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
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( Cabinet ) )
168 PORT_DIPSETTING( 0x40, DEF_STR( Upright ) )
169 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
170 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Difficulty ) )
171 PORT_DIPSETTING( 0x00, "Easy" )
172 PORT_DIPSETTING( 0x80, "Hard" )
173 INPUT_PORTS_END
174
175
176
177 static struct GfxLayout charlayout =
178 {
179 8,8, /* 8*8 characters */
180 2048, /* 2048 characters */
181 3, /* 3 bits per pixel */
182 { 2*2048*8*8, 1*2048*8*8, 0*2048*8*8 }, /* the bitplanes are separated */
183 { 7, 6, 5, 4, 3, 2, 1, 0 },
184 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
185 8*8 /* every char takes 8 consecutive bytes */
186 };
187
188 static struct GfxLayout spritelayout =
189 {
190 16,16, /* 8*8 characters */
191 512, /* 512 characters */
192 3, /* 3 bits per pixel */
193 { 2*2048*8*8, 1*2048*8*8, 0*2048*8*8 }, /* the bitplanes are separated */
194 { 7, 6, 5, 4, 3, 2, 1, 0 ,
195 8*8+7,8*8+6,8*8+5,8*8+4,8*8+3,8*8+2,8*8+1,8*8+0},
196 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
197 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
198 32*8 /* every char takes 8 consecutive bytes */
199 };
200
201 static struct GfxDecodeInfo gfxdecodeinfo[] =
202 {
203 { REGION_GFX1, 0, &charlayout, 0, 32 },
204 { REGION_GFX2, 0, &charlayout, 32*8, 32 },
205 { REGION_GFX1, 0, &spritelayout, 0, 32 },
206 { REGION_GFX2, 0, &spritelayout, 32*8, 32 },
207 { -1 } /* end of array */
208 };
209
210
211
212 static struct SN76496interface sn76496_interface =
213 {
214 3, /* 3 chips */
215 { 18432000/6, 18432000/6, 18432000/6 }, /* ??? */
216 { 30, 30, 30 }
217 };
218
219 static struct MSM5205interface msm5205_interface =
220 {
221 1, /* 1 chip */
222 384000, /* 384KHz */
223 { appoooh_adpcm_int },/* interrupt function */
224 { MSM5205_S64_4B }, /* 6KHz */
225 { 50 }
226 };
227
228
229
230 static MACHINE_DRIVER_START( appoooh )
231
232 /* basic machine hardware */
233 MDRV_CPU_ADD(Z80,18432000/6) /* ??? the main xtal is 18.432 MHz */
234 MDRV_CPU_MEMORY(readmem,writemem)
235 MDRV_CPU_PORTS(readport,writeport)
236 MDRV_CPU_VBLANK_INT(nmi_line_pulse,1)
237
238 MDRV_FRAMES_PER_SECOND(60)
239 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
240
241 /* video hardware */
242 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
243 MDRV_SCREEN_SIZE(32*8, 32*8)
244 MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
245 MDRV_GFXDECODE(gfxdecodeinfo)
246 MDRV_PALETTE_LENGTH(32)
247 MDRV_COLORTABLE_LENGTH(32*8+32*8)
248
249 MDRV_PALETTE_INIT(appoooh)
250 MDRV_VIDEO_START(appoooh)
251 MDRV_VIDEO_UPDATE(appoooh)
252
253 /* sound hardware */
254 MDRV_SOUND_ADD(SN76496, sn76496_interface)
255 MDRV_SOUND_ADD(MSM5205, msm5205_interface)
256 MACHINE_DRIVER_END
257
258
259
260 /***************************************************************************
261
262 Game driver(s)
263
264 ***************************************************************************/
265
266 ROM_START( appoooh )
267 ROM_REGION( 0x14000, REGION_CPU1, 0 ) /* 64k for code + 16k bank */
268 ROM_LOAD( "epr-5906.bin", 0x00000, 0x2000, CRC(fffae7fe) SHA1(b4bb60eb6331e503759bd963eafefa69331d6b86) )
269 ROM_LOAD( "epr-5907.bin", 0x02000, 0x2000, CRC(57696cd6) SHA1(74a005d18d55fed9ece9b579d2e7e6619a47538b) )
270 ROM_LOAD( "epr-5908.bin", 0x04000, 0x2000, CRC(4537cddc) SHA1(ecb71cab7b9269d713399987cbc45ff54735019f) )
271 ROM_LOAD( "epr-5909.bin", 0x06000, 0x2000, CRC(cf82718d) SHA1(4408c468a422735ae8f69c03003157782f1a0210) )
272 ROM_LOAD( "epr-5910.bin", 0x08000, 0x2000, CRC(312636da) SHA1(18817df6f2e480810726f7b11f289c59e712ee45) )
273 ROM_LOAD( "epr-5911.bin", 0x0a000, 0x2000, CRC(0bc2acaa) SHA1(1ae904658ce9e44cdb79f0a13202aaff5c9f9480) ) /* bank0 */
274 ROM_LOAD( "epr-5913.bin", 0x0c000, 0x2000, CRC(f5a0e6a7) SHA1(7fad534d1fba52078c4ea580ca7601fdd23cbfa6) ) /* a000-dfff */
275 ROM_LOAD( "epr-5912.bin", 0x10000, 0x2000, CRC(3c3915ab) SHA1(28b501bda992ac06b10dbb5f1f7d6009f2f5f48c) ) /* bank1 */
276 ROM_LOAD( "epr-5914.bin", 0x12000, 0x2000, CRC(58792d4a) SHA1(8acdb0ebee5faadadd64bd64db1fdf881ee70333) ) /* a000-dfff */
277
278 ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE )
279 ROM_LOAD( "epr-5895.bin", 0x00000, 0x4000, CRC(4b0d4294) SHA1(f9f4d928c76b32cbcbaf7bfd0ebec2d4dfc37566) ) /* playfield #1 chars */
280 ROM_LOAD( "epr-5896.bin", 0x04000, 0x4000, CRC(7bc84d75) SHA1(36e98eaac1ba23ab842080205bdb5b76b888ddc2) )
281 ROM_LOAD( "epr-5897.bin", 0x08000, 0x4000, CRC(745f3ffa) SHA1(03f5d1d567e786e7835defc6995d1b39aee2c28d) )
282
283 ROM_REGION( 0x0c000, REGION_GFX2, ROMREGION_DISPOSE )
284 ROM_LOAD( "epr-5898.bin", 0x00000, 0x4000, CRC(cf01644d) SHA1(0cc1b7f7a3b33b0edf4e277e320467b19dfc5bc8) ) /* playfield #2 chars */
285 ROM_LOAD( "epr-5899.bin", 0x04000, 0x4000, CRC(885ad636) SHA1(d040948f7cf030e4ab0f0509df23cb855e9c920c) )
286 ROM_LOAD( "epr-5900.bin", 0x08000, 0x4000, CRC(a8ed13f3) SHA1(31c4a52fea8f26b4a79564c7e8443a88d43aee12) )
287
288 ROM_REGION( 0x0220, REGION_PROMS, 0 )
289 ROM_LOAD( "pr5921.prm", 0x0000, 0x020, CRC(f2437229) SHA1(8fb4240142f4c77f820d7c153c22ff82f66aa7b1) ) /* palette */
290 ROM_LOAD( "pr5922.prm", 0x0020, 0x100, CRC(85c542bf) SHA1(371d92fca2ae609a47d3a2ea349f14f30b846da8) ) /* charset #1 lookup table */
291 ROM_LOAD( "pr5923.prm", 0x0120, 0x100, CRC(16acbd53) SHA1(e5791646730c6232efa2c0327b484472c47baf21) ) /* charset #2 lookup table */
292
293 ROM_REGION( 0xa000, REGION_SOUND1, 0 ) /* adpcm voice data */
294 ROM_LOAD( "epr-5901.bin", 0x0000, 0x2000, CRC(170a10a4) SHA1(7b0c8427c69525cbcbe9f88b22b12aafb6949bfd) )
295 ROM_LOAD( "epr-5902.bin", 0x2000, 0x2000, CRC(f6981640) SHA1(1a93913ecb64d1c459e5bbcc28c4ca3ea90f21e1) )
296 ROM_LOAD( "epr-5903.bin", 0x4000, 0x2000, CRC(0439df50) SHA1(1f981c1867366fa57de25ff8f421c121d82d7321) )
297 ROM_LOAD( "epr-5904.bin", 0x6000, 0x2000, CRC(9988f2ae) SHA1(f70786a46515feb92fe168fc6c4334ab105c05b2) )
298 ROM_LOAD( "epr-5905.bin", 0x8000, 0x2000, CRC(fb5cd70e) SHA1(c2b069ca29b78b845d0c35c7f7452b70c93cb867) )
299 ROM_END
300
301
302
303 GAME( 1984, appoooh, 0, appoooh, appoooh, 0, ROT0, "[Sanritsu] Sega", "Appoooh" )
304