1 /****************************************************************************
2
3 Gotya / The Hand driver by Zsolt Vasvari
4
5
6 TODO: Emulated sound
7
8 Hitachi HD38880BP
9 HD38882PA06
10
11 I think HD38880 is a CPU/MCU, because the game just sends it a sound command (0-0x1a)
12
13 ****************************************************************************/
14
15 /****************************************************************************
16 About GotYa (from the board owner)
17
18 I believe it is a prototype for several reasons.
19 There were quite a few jumpers on the board, hand written labels with
20 the dates on them. I also have the manual, the game name is clearly Got-Ya
21 and is a Game-A-Tron game. The game itself had a few flyers from GAT inside
22 so I have a hard time believing it was a bootleg.
23
24 ----
25
26 so despite the fact that 'gotya' might look like its a bootleg of thehand,
27 its more likely just a prototype / alternate version, its hard to tell
28 ****************************************************************************/
29
30 #include "driver.h"
31 #include "vidhrdw/generic.h"
32
33
34 extern UINT8 *gotya_scroll;
35 extern UINT8 *gotya_videoram2;
36
37 extern WRITE_HANDLER( gotya_videoram_w );
38 extern WRITE_HANDLER( gotya_colorram_w );
39 extern WRITE_HANDLER( gotya_videoram2_w );
40
41 extern PALETTE_INIT( gotya );
42 extern VIDEO_START( gotya );
43 extern VIDEO_UPDATE( gotya );
44
45 extern WRITE_HANDLER( gotya_video_control_w );
46
47 extern WRITE_HANDLER( gotya_soundlatch_w );
48
49
MEMORY_READ_START(readmem)50 static MEMORY_READ_START( readmem )
51 { 0x0000, 0x3fff, MRA_ROM },
52 { 0x5000, 0x5fff, MRA_RAM },
53 { 0x6000, 0x6000, input_port_0_r },
54 { 0x6001, 0x6001, input_port_1_r },
55 { 0x6002, 0x6002, input_port_2_r },
56 { 0xc000, 0xd3ff, MRA_RAM },
57 MEMORY_END
58
59 static MEMORY_WRITE_START( writemem )
60 { 0x0000, 0x3fff, MWA_ROM },
61 { 0x5000, 0x5fff, MWA_RAM },
62 { 0x6004, 0x6004, gotya_video_control_w },
63 { 0x6005, 0x6005, gotya_soundlatch_w },
64 { 0x6006, 0x6006, MWA_RAM, &gotya_scroll },
65 { 0x6007, 0x6007, watchdog_reset_w },
66 { 0xc000, 0xc7ff, gotya_videoram_w, &videoram },
67 { 0xc800, 0xcfff, gotya_colorram_w, &colorram },
68 { 0xd000, 0xd3df, MWA_RAM, &gotya_videoram2 },
69 { 0xd3e0, 0xd3ff, MWA_RAM, &spriteram },
70 MEMORY_END
71
72
73 INPUT_PORTS_START( gotya )
74 PORT_START /* IN0 */
75 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
76 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
77 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
78 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
79 PORT_SERVICE( 0x10, IP_ACTIVE_LOW )
80 PORT_BITX(0x20, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1, "P1 Paper", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
81 PORT_BITX(0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1, "P1 Scissors", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
82 PORT_BITX(0x80, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1, "P1 Rock", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
83
84 PORT_START /* IN1 */
85 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
86 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
87 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
88 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
89 PORT_DIPNAME( 0x10, 0x10, "Sound Test" )
90 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
91 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
92 PORT_BITX(0x20, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2, "P2 Paper", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
93 PORT_BITX(0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2, "P2 Scissors", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
94 PORT_BITX(0x80, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2, "P2 Rock", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
95
96 PORT_START /* DSW1 */
97 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
98 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )
99 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
100 PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) )
101 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
102 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
103 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Difficulty ) )
104 PORT_DIPSETTING( 0x00, "Easy" )
105 PORT_DIPSETTING( 0x10, "Hard" )
106 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) )
107 PORT_DIPSETTING( 0x00, "None" )
108 PORT_DIPSETTING( 0x20, "15000" )
109 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Lives ) )
110 PORT_DIPSETTING( 0x00, "3" )
111 PORT_DIPSETTING( 0x40, "5" )
112 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
113 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
114 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
115
116 INPUT_PORTS_END
117
118
119 static struct GfxLayout charlayout =
120 {
121 8,8, /* 8*8 characters */
122 256, /* 256 characters */
123 2, /* 2 bits per pixel */
124 { 0, 4 }, /* the bitplanes are packed in one byte */
125 { 0, 1, 2, 3, 8*8+0, 8*8+1, 8*8+2, 8*8+3 },
126 { 7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8 },
127 16*8 /* every char takes 16 consecutive bytes */
128 };
129
130 static struct GfxLayout spritelayout =
131 {
132 16,16, /* 16*16 characters */
133 64, /* 64 characters */
134 2, /* 2 bits per pixel */
135 { 0, 4 }, /* the bitplanes are packed in one byte */
136 { 0, 1, 2, 3, 24*8+0, 24*8+1, 24*8+2, 24*8+3,
137 16*8+0, 16*8+1, 16*8+2, 16*8+3, 8*8+0, 8*8+1, 8*8+2, 8*8+3 },
138 { 39*8, 38*8, 37*8, 36*8, 35*8, 34*8, 33*8, 32*8,
139 7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8 },
140 64*8 /* every char takes 64 consecutive bytes */
141 };
142
143 static struct GfxDecodeInfo gfxdecodeinfo[] =
144 {
145 { REGION_GFX1, 0, &charlayout, 0, 16 },
146 { REGION_GFX2, 0, &spritelayout, 0, 16 },
147 { -1 } /* end of array */
148 };
149
150
151 static const char *sample_names[] =
152 { // Address triggered at
153 "*thehand",
154 "01.wav", /* game start tune */ // 075f
155 "02.wav", /* coin in */ // 0074
156 "03.wav", /* eat dot */ // 0e45
157 "05.wav", /* eat dollar sign */ // 0e45
158
159 "06.wav", /* door open */ // 19e1
160 "07.wav", /* door close */ // 1965
161
162 "08.wav", /* theme song */ // 0821
163 //"09.wav" // 1569
164
165 /* one of these two is played after eating the last dot */
166 "0a.wav", /* piccolo */ // 17af
167 "0b.wav", /* tune */ // 17af
168
169 //"0f.wav" // 08ee
170 "10.wav", /* 'We're even. Bye Bye!' */ // 162a
171 "11.wav", /* 'You got me!' */ // 1657
172 "12.wav", /* 'You have lost out' */ // 085e
173
174 "13.wav", /* 'Rock' */ // 14de
175 "14.wav", /* 'Scissors' */ // 14f3
176 "15.wav", /* 'Paper' */ // 1508
177
178 /* one of these is played when going by the girl between levels */
179 "16.wav", /* 'Very good!' */ // 194a
180 "17.wav", /* 'Wonderful!' */ // 194a
181 "18.wav", /* 'Come on!' */ // 194a
182 "19.wav", /* 'I love you!' */ // 194a
183 "1a.wav", /* 'See you again!' */ // 194a
184 0 /* end of array */
185 };
186
187 static struct Samplesinterface samples_interface =
188 {
189 4, /* 4 channels */
190 50, /* volume */
191 sample_names
192 };
193
194
195 static MACHINE_DRIVER_START( gotya )
196
197 /* basic machine hardware */
198 MDRV_CPU_ADD(Z80,18432000/6) /* 3.072 MHz ??? */
199 MDRV_CPU_MEMORY(readmem,writemem)
200 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
201
202 MDRV_FRAMES_PER_SECOND(60)
203 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
204
205 /* video hardware */
206 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
207 MDRV_SCREEN_SIZE(36*8, 32*8)
208 MDRV_VISIBLE_AREA(0, 36*8-1, 2*8, 30*8-1)
209 MDRV_GFXDECODE(gfxdecodeinfo)
210 MDRV_PALETTE_LENGTH(8)
211 MDRV_COLORTABLE_LENGTH(16*4)
212
213 MDRV_PALETTE_INIT(gotya)
214 MDRV_VIDEO_START(gotya)
215 MDRV_VIDEO_UPDATE(gotya)
216
217 /* sound hardware */
218 MDRV_SOUND_ADD(SAMPLES, samples_interface)
219 MACHINE_DRIVER_END
220
221 /***************************************************************************
222
223 Game driver(s)
224
225 ***************************************************************************/
226
227 ROM_START( thehand )
228 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for main CPU */
229 ROM_LOAD( "hand6.bin", 0x0000, 0x1000, CRC(a33b806c) SHA1(1e552af5362e7b003f55e78bb59589e1db55557c) )
230 ROM_LOAD( "hand5.bin", 0x1000, 0x1000, CRC(89bcde82) SHA1(d074bb6a1975160eb533d5fd9289170a68209046) )
231 ROM_LOAD( "hand4.bin", 0x2000, 0x1000, CRC(c6844a83) SHA1(84e220dce3f5ddee9dd0377f3bebdd4027fc9108) )
232 ROM_LOAD( "gb-03.bin", 0x3000, 0x1000, CRC(f34d90ab) SHA1(bec5f6a34a273f308083a280f2b425d9c273c69b) )
233
234 ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */
235 ROM_LOAD( "hand12.bin", 0x0000, 0x1000, CRC(95773b46) SHA1(db8d7ace4eafd4c72edfeff6003ca6e96e0239b5) )
236
237 ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */
238 ROM_LOAD( "gb-11.bin", 0x0000, 0x1000, CRC(5d5eca1b) SHA1(d7c6b5f4d398d5e33cc411ed593d6f53a9979493) )
239
240 ROM_REGION( 0x0120, REGION_PROMS, 0 )
241 ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) /* color PROM */
242 ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) /* lookup table */
243
244 ROM_REGION( 0x1000, REGION_USER1, 0 ) /* no idea what these are */
245 ROM_LOAD( "hand1.bin", 0x0000, 0x0800, CRC(ccc537e0) SHA1(471fd49225aa14b91d085178e1b58b6c4ae76481) )
246 ROM_LOAD( "gb-02.bin", 0x0800, 0x0800, CRC(65a7e284) SHA1(91e9c34dcf20608863ad5475dc0c4309971c8eee) )
247
248 ROM_REGION( 0x4000, REGION_USER2, 0 ) /* HD38880 code? */
249 ROM_LOAD( "gb-10.bin", 0x0000, 0x1000, CRC(8101915f) SHA1(c4d21b1938ea7e0d47c48e74037f005280ac101b) )
250 ROM_LOAD( "gb-09.bin", 0x1000, 0x1000, CRC(619bba76) SHA1(2a2deffe6f058fc840329fbfffbc0c70a0147c14) )
251 ROM_LOAD( "gb-08.bin", 0x2000, 0x1000, CRC(82f59528) SHA1(6bfa2329eb291040bfc229c56420865253b0132a) )
252 ROM_LOAD( "hand7.bin", 0x3000, 0x1000, CRC(fbf1c5de) SHA1(dd3181a8da1972e3c997678bb868256a10f33d04) )
253 ROM_END
254
255 ROM_START( gotya )
256 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for main CPU */
257 ROM_LOAD( "gb-06.bin", 0x0000, 0x1000, CRC(7793985a) SHA1(23aa8bd161e700bea59b92075423cdf55e9a26c3) )
258 ROM_LOAD( "gb-05.bin", 0x1000, 0x1000, CRC(683d188b) SHA1(5341c62f5cf384c73be0d7a0a230bb8cebfbe709) )
259 ROM_LOAD( "gb-04.bin", 0x2000, 0x1000, CRC(15b72f09) SHA1(bd941722ed1310d5c8ca8a44899368cba3815f3b) )
260 ROM_LOAD( "gb-03.bin", 0x3000, 0x1000, CRC(f34d90ab) SHA1(bec5f6a34a273f308083a280f2b425d9c273c69b) ) /* this is the only ROM that passes the ROM test */
261
262 ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */
263 ROM_LOAD( "gb-12.bin", 0x0000, 0x1000, CRC(4993d735) SHA1(9e47876238a8af3659721191a5f75c33507ed1a5) )
264
265 ROM_REGION( 0x1000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */
266 ROM_LOAD( "gb-11.bin", 0x0000, 0x1000, CRC(5d5eca1b) SHA1(d7c6b5f4d398d5e33cc411ed593d6f53a9979493) )
267
268 ROM_REGION( 0x0120, REGION_PROMS, 0 )
269 ROM_LOAD( "prom.1a", 0x0000, 0x0020, CRC(4864a5a0) SHA1(5b49f60b085fa026d4e8d4a5ad28ee7037a8ff9c) ) /* color PROM */
270 ROM_LOAD( "prom.4c", 0x0020, 0x0100, CRC(4745b5f6) SHA1(02a7f759e9bc8089cbd9213a71bbe671f9641638) ) /* lookup table */
271
272 ROM_REGION( 0x1000, REGION_USER1, 0 ) /* no idea what these are */
273 ROM_LOAD( "gb-01.bin", 0x0000, 0x0800, CRC(c31dba64) SHA1(15ae54b7d475ca3f0a3acc45cd8da2916c5fdef2) )
274 ROM_LOAD( "gb-02.bin", 0x0800, 0x0800, CRC(65a7e284) SHA1(91e9c34dcf20608863ad5475dc0c4309971c8eee) )
275
276 ROM_REGION( 0x4000, REGION_USER2, 0 ) /* HD38880 code? */
277 ROM_LOAD( "gb-10.bin", 0x0000, 0x1000, CRC(8101915f) SHA1(c4d21b1938ea7e0d47c48e74037f005280ac101b) )
278 ROM_LOAD( "gb-09.bin", 0x1000, 0x1000, CRC(619bba76) SHA1(2a2deffe6f058fc840329fbfffbc0c70a0147c14) )
279 ROM_LOAD( "gb-08.bin", 0x2000, 0x1000, CRC(82f59528) SHA1(6bfa2329eb291040bfc229c56420865253b0132a) )
280 ROM_LOAD( "gb-07.bin", 0x3000, 0x1000, CRC(92a9f8bf) SHA1(9231cd86f24f1e6a585c3a919add50c1f8e42a4c) )
281 ROM_END
282
283 GAME( 1981, thehand, 0, gotya, gotya, 0, ROT270, "T.I.C." , "The Hand" )
284 GAME( 1981, gotya, thehand, gotya, gotya, 0, ROT270, "Game-A-Tron", "Got-Ya (12/24/1981, prototype?)" )
285