1 // license:BSD-3-Clause
2 // copyright-holders:Manuel Abadia, David Haywood
3 /***************************************************************************
4
5 Target Hits (c) 1994 Gaelco (Designed & Developed by Zigurat. Produced by Gaelco)
6
7 Driver by Manuel Abadia <emumanu+mame@gmail.com>
8
9 ** NOTES: Merge with wrally.cpp??? Address map nearly identical & PCB
10 is reworked to add connections for light guns and different RAM
11
12 is the visible area correct? if it's larger than the startup
13 screen then scene 5 of desert chariots doesn't cover the entire
14 screen either.
15
16 the instructions say to reload the gun after each shot, but
17 there is no reload button listed in service mode, and it doesn't
18 seem to be required, was it a mechanical feature of the gun or
19 is our logic inverted somewhere, the gun test shows 'ON' when
20 you're not pressing fire too.
21
22 REF.940531
23 +-------------------------------------------------+
24 | C1 6116 |
25 | VOL C2 6116 |
26 | 30MHz |
27 | M6295 +----------+ |
28 | 1MHz |TMS | |
29 | 6116 |TPC1020AFN| |
30 |J 6116 | -084C | I7 |
31 |A +------------+ +----------+ H8* I9 |
32 |M |DS5002FP Box| +----------+ I11|
33 |M +------------+ |TMS | H12* I13|
34 |A 65756 |TPC1020AFN| |
35 | JP4 65756 | -084C | |
36 | JP5 +----------+ |
37 |SW1 PAL 65764|
38 | 24MHz MC68000P12 65764|
39 |SW2 C22 6116 |
40 | PAL C23 6116 |
41 +-------------------------------------------------+
42
43 CPU: MC68000P12 & DS5002FP (used for protection)
44 Sound: OKI M6295
45 OSC: 30MHz, 24MHz & 1MHz resonator
46 RAM: MHS HM3-65756K-5 32K x 8 SRAM (x2)
47 MHS HM3-65764E-5 8K x 8 SRAM (x2)
48 UM6116BK-35 2K x 8 SRAM (x6)
49 PAL: TI F20L8-25CNT DIP24 (x2)
50 VOL: Volume pot
51 SW: Two 8 switch dipswitches (SW1 unpopulated)
52 JP4: 5 pin header for light gun player 2
53 JP5: 5 pin header for light gun player 1
54
55 DS5002FP Box contains:
56 Dallas DS5002SP @ 12MHz
57 KM62256BLG-7L - 32Kx8 Low Power CMOS SRAM
58 3.6v Battery
59 JP1 - 5 pin port to program SRAM
60
61 * NOTE: PCB can use four 27C040 eproms at I7, I9, I11 & I13 or two 8Meg MASK
62 roms at H8 & H12. Same set up as used on the World Rally PCBs
63
64 ***************************************************************************/
65
66 #include "emu.h"
67 #include "includes/targeth.h"
68
69 #include "machine/gaelco_ds5002fp.h"
70 #include "cpu/mcs51/mcs51.h"
71 #include "cpu/m68000/m68000.h"
72 #include "sound/okim6295.h"
73 #include "screen.h"
74 #include "speaker.h"
75
76
77 static const gfx_layout tilelayout =
78 {
79 16,16, /* 16x16 tiles */
80 RGN_FRAC(1,4), /* number of tiles */
81 4, /* bitplanes */
82 { RGN_FRAC(3,4), RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(0,4) }, /* plane offsets */
83 { STEP8(0,1), STEP8(16*8,1) },
84 { STEP16(0,8) },
85 32*8
86 };
87
88 static GFXDECODE_START( gfx_targeth )
89 GFXDECODE_ENTRY( "gfx1", 0x000000, tilelayout, 0, 64 )
90 GFXDECODE_END
91
TIMER_CALLBACK_MEMBER(targeth_state::gun1_irq)92 TIMER_CALLBACK_MEMBER(targeth_state::gun1_irq)
93 {
94 /* IRQ 4: Read 1P Gun */
95 m_maincpu->set_input_line(4, HOLD_LINE);
96 m_gun_irq_timer[0]->adjust( m_screen->time_until_pos(128, 0 ) );
97 }
98
TIMER_CALLBACK_MEMBER(targeth_state::gun2_irq)99 TIMER_CALLBACK_MEMBER(targeth_state::gun2_irq)
100 {
101 /* IRQ 6: Read 2P Gun */
102 m_maincpu->set_input_line(6, HOLD_LINE);
103 m_gun_irq_timer[1]->adjust( m_screen->time_until_pos(160, 0 ) );
104 }
105
oki_bankswitch_w(uint8_t data)106 void targeth_state::oki_bankswitch_w(uint8_t data)
107 {
108 m_okibank->set_entry(data & 0x0f);
109 }
110
output_latch_w(offs_t offset,uint16_t data)111 void targeth_state::output_latch_w(offs_t offset, uint16_t data)
112 {
113 m_outlatch->write_bit(offset >> 3, BIT(data, 0));
114 }
115
WRITE_LINE_MEMBER(targeth_state::coin1_counter_w)116 WRITE_LINE_MEMBER(targeth_state::coin1_counter_w)
117 {
118 machine().bookkeeping().coin_counter_w(0, state);
119 }
120
WRITE_LINE_MEMBER(targeth_state::coin2_counter_w)121 WRITE_LINE_MEMBER(targeth_state::coin2_counter_w)
122 {
123 machine().bookkeeping().coin_counter_w(1, state);
124 }
125
shareram_w(offs_t offset,uint8_t data)126 void targeth_state::shareram_w(offs_t offset, uint8_t data)
127 {
128 // why isn't there address map functionality for this?
129 reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
130 }
131
shareram_r(offs_t offset)132 uint8_t targeth_state::shareram_r(offs_t offset)
133 {
134 // why isn't there address map functionality for this?
135 return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
136 }
137
138
mcu_hostmem_map(address_map & map)139 void targeth_state::mcu_hostmem_map(address_map &map)
140 {
141 map(0x8000, 0xffff).rw(FUNC(targeth_state::shareram_r), FUNC(targeth_state::shareram_w)); // confirmed that 0x8000 - 0xffff is a window into 68k shared RAM
142 }
143
main_map(address_map & map)144 void targeth_state::main_map(address_map &map)
145 {
146 map(0x000000, 0x0fffff).rom();
147 map(0x100000, 0x103fff).ram().w(FUNC(targeth_state::vram_w)).share("videoram"); /* Video RAM */
148 map(0x108000, 0x108001).portr("GUNX1");
149 map(0x108002, 0x108003).portr("GUNY1");
150 map(0x108004, 0x108005).portr("GUNX2");
151 map(0x108006, 0x108007).portr("GUNY2");
152 map(0x108000, 0x108007).writeonly().share("vregs"); /* Video Registers */
153 map(0x10800c, 0x10800d).nopw(); /* CLR Video INT */
154 map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* Palette */
155 map(0x440000, 0x440fff).ram().share("spriteram"); /* Sprite RAM */
156 map(0x700000, 0x700001).portr("DSW2");
157 map(0x700002, 0x700003).portr("DSW1");
158 map(0x700006, 0x700007).portr("SYSTEM"); /* Coins, Start & Fire buttons */
159 map(0x700008, 0x700009).portr("SERVICE"); /* Service & Guns Reload? */
160 map(0x70000a, 0x70000b).select(0x000070).w(FUNC(targeth_state::output_latch_w));
161 map(0x70000d, 0x70000d).w(FUNC(targeth_state::oki_bankswitch_w)); /* OKI6295 bankswitch */
162 map(0x70000f, 0x70000f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); /* OKI6295 status register */
163 map(0x700010, 0x700011).nopw(); /* ??? Guns reload related? */
164 map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
165 map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
166 }
167
168
oki_map(address_map & map)169 void targeth_state::oki_map(address_map &map)
170 {
171 map(0x00000, 0x2ffff).rom();
172 map(0x30000, 0x3ffff).bankr("okibank");
173 }
174
machine_start()175 void targeth_state::machine_start()
176 {
177 m_okibank->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
178
179 m_gun_irq_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(targeth_state::gun1_irq), this));
180 m_gun_irq_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(targeth_state::gun2_irq), this));
181
182 m_gun_irq_timer[0]->adjust(m_screen->time_until_pos(128, 0));
183 m_gun_irq_timer[1]->adjust(m_screen->time_until_pos(160, 0));
184 }
185
186 static INPUT_PORTS_START( targeth )
187 PORT_START("GUNX1")
188 PORT_BIT( 0x01ff, 200, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.20, -0.133, 0) PORT_MINMAX( 0, 400 + 4) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1)
189 PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
190
191 PORT_START("GUNY1")
192 PORT_BIT( 0x01ff, 128, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.12, -0.055, 0) PORT_MINMAX(4,255) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1)
193 PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
194
195 PORT_START("GUNX2")
196 PORT_BIT( 0x01ff, 200, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.20, -0.133, 0) PORT_MINMAX( 0, 400 + 4) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(2)
197 PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
198
199 PORT_START("GUNY2")
200 PORT_BIT( 0x01ff, 128, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.12, -0.055, 0) PORT_MINMAX(4,255) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(2)
201 PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
202
203 PORT_START("DSW1")
DEF_STR(Coin_A)204 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
205 PORT_DIPSETTING( 0x02, DEF_STR( 6C_1C ) )
206 PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) )
207 PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) )
208 PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
209 PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
210 PORT_DIPSETTING( 0x01, DEF_STR( 3C_2C ) )
211 PORT_DIPSETTING( 0x00, DEF_STR( 4C_3C ) )
212 PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
213 PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
214 PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) )
215 PORT_DIPSETTING( 0x00, DEF_STR( 3C_4C ) )
216 PORT_DIPSETTING( 0x08, DEF_STR( 2C_3C ) )
217 PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) )
218 PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) )
219 PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) )
220 PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) )
221 PORT_DIPSETTING( 0x10, DEF_STR( 1C_6C ) )
222 PORT_DIPNAME( 0x40, 0x40, "Credit configuration" )
223 PORT_DIPSETTING( 0x40, "Start 1C/Continue 1C" )
224 PORT_DIPSETTING( 0x00, "Start 2C/Continue 1C" )
225 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) )
226 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
227
228 PORT_START("DSW2")
229 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
230 PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
231 PORT_DIPSETTING( 0x03, DEF_STR( Normal ) )
232 PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
233 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
234 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
235 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
236 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
237 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
238 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
239 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
240 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
241 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
242 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
243 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
244 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
245 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
246 PORT_DIPNAME( 0x40, 0x40, "Gun alarm" ) /* Service mode gets default from here when uninitialized */
247 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
248 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
249 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
250 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
251
252 PORT_START("SYSTEM")
253 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
254 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
255 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
256 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
257 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
258 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
259 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
260 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
261
262 PORT_START("SERVICE")
263 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
264 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* this MUST be low or the game doesn't boot */
265 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* Reload 1P? */
266 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* Reload 2P? */
267 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
268 INPUT_PORTS_END
269
270
271 void targeth_state::targeth(machine_config &config)
272 {
273 /* basic machine hardware */
274 M68000(config, m_maincpu, XTAL(24'000'000)/2); /* 12 MHz */
275 m_maincpu->set_addrmap(AS_PROGRAM, &targeth_state::main_map);
276 m_maincpu->set_vblank_int("screen", FUNC(targeth_state::irq2_line_hold));
277
278 gaelco_ds5002fp_device &ds5002fp(GAELCO_DS5002FP(config, "gaelco_ds5002fp", XTAL(24'000'000) / 2));
279 ds5002fp.set_addrmap(0, &targeth_state::mcu_hostmem_map);
280 config.set_perfect_quantum("gaelco_ds5002fp:mcu");
281
282 LS259(config, m_outlatch);
283 m_outlatch->q_out_cb<2>().set(FUNC(targeth_state::coin1_counter_w));
284 m_outlatch->q_out_cb<3>().set(FUNC(targeth_state::coin2_counter_w));
285
286 /* video hardware */
287 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
288 m_screen->set_refresh_hz(60);
289 m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
290 m_screen->set_size(64*16, 16*16);
291 m_screen->set_visarea(3*8, 23*16-8-1, 16, 16*16-8-1);
292 m_screen->set_screen_update(FUNC(targeth_state::screen_update));
293 m_screen->set_palette(m_palette);
294
295 GFXDECODE(config, "gfxdecode", m_palette, gfx_targeth);
296 PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
297
298 /* sound hardware */
299 SPEAKER(config, "mono").front_center();
300
301 okim6295_device &oki(OKIM6295(config, "oki", XTAL(1'000'000), okim6295_device::PIN7_HIGH)); // 1MHz resonator - pin 7 not verified
302 oki.set_addrmap(0, &targeth_state::oki_map);
303 oki.add_route(ALL_OUTPUTS, "mono", 1.0);
304 }
305
306 ROM_START( targeth )
307 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
308 ROM_LOAD16_BYTE( "th2_b_c_23.c23", 0x000000, 0x040000, CRC(840887d6) SHA1(9a36b346608d531a62a2e0704ea44f12e07f9d91) ) // The "B" was hand written
309 ROM_LOAD16_BYTE( "th2_b_c_22.c22", 0x000001, 0x040000, CRC(d2435eb8) SHA1(ce75a115dad8019c8e66a1c3b3e15f54781f65ae) ) // The "B" was hand written
310
311 ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */
312 ROM_LOAD( "targeth_ds5002fp.bin", 0x00000, 0x8000, CRC(abcdfee4) SHA1(c5955d5dbbcecbe1c2ae77d59671ae40eb814d30) )
313
314 ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
315 ROM_LOAD( "targeth_ds5002fp_scratch", 0x00, 0x80, CRC(c927bcb1) SHA1(86b5c7ee6a4a5f0aa538a6742253da1afadb4345) ) // default state so you don't have to manually initialize game
316 DS5002FP_SET_MON( 0x49 )
317 DS5002FP_SET_RPCTL( 0x00 )
318 DS5002FP_SET_CRCR( 0x80 )
319
320 ROM_REGION( 0x200000, "gfx1", 0 ) /* Graphics */
321 ROM_LOAD( "targeth.i13", 0x000000, 0x080000, CRC(b892be24) SHA1(9cccaaacf20e77c7358f0ceac60b8a1012f1216c) )
322 ROM_LOAD( "targeth.i11", 0x080000, 0x080000, CRC(6797faf9) SHA1(112cffe72f91cb46c262e19a47b0cab3237dd60f) )
323 ROM_LOAD( "targeth.i9", 0x100000, 0x080000, CRC(0e922c1c) SHA1(6920e345c82e76f7e0af6101f39eb65ac1f112b9) )
324 ROM_LOAD( "targeth.i7", 0x180000, 0x080000, CRC(d8b41000) SHA1(cbe91eb91bdc7a60b2333c6bea37d08a57902669) )
325
326 ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
327 ROM_LOAD( "targeth.c1", 0x000000, 0x080000, CRC(d6c9dfbc) SHA1(3ec70dea94fc89df933074012a52de6034571e87) )
328 /* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
329 ROM_LOAD( "targeth.c3", 0x080000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
330 ROM_END
331
332 ROM_START( targetha )
333 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
334 ROM_LOAD16_BYTE( "th2_n_c_23.c23", 0x000000, 0x040000, CRC(b99b25dc) SHA1(1bf35b2c05a58f934d06eb6ef93f592d9f16344a) ) // The "N" was hand written
335 ROM_LOAD16_BYTE( "th2_n_c_22.c22", 0x000001, 0x040000, CRC(6d34f0cf) SHA1(f44a1231f4fac1f9d443990e8fe2b4aaa3f338be) ) // The "N" was hand written
336
337 ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */
338 ROM_LOAD( "targeth_ds5002fp.bin", 0x00000, 0x8000, CRC(abcdfee4) SHA1(c5955d5dbbcecbe1c2ae77d59671ae40eb814d30) )
339
340 ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
341 ROM_LOAD( "targeth_ds5002fp_scratch", 0x00, 0x80, CRC(c927bcb1) SHA1(86b5c7ee6a4a5f0aa538a6742253da1afadb4345) ) // default state so you don't have to manually initialize game
342 DS5002FP_SET_MON( 0x49 )
343 DS5002FP_SET_RPCTL( 0x00 )
344 DS5002FP_SET_CRCR( 0x80 )
345
346 ROM_REGION( 0x200000, "gfx1", 0 ) /* Graphics */
347 ROM_LOAD( "targeth.i13", 0x000000, 0x080000, CRC(b892be24) SHA1(9cccaaacf20e77c7358f0ceac60b8a1012f1216c) )
348 ROM_LOAD( "targeth.i11", 0x080000, 0x080000, CRC(6797faf9) SHA1(112cffe72f91cb46c262e19a47b0cab3237dd60f) )
349 ROM_LOAD( "targeth.i9", 0x100000, 0x080000, CRC(0e922c1c) SHA1(6920e345c82e76f7e0af6101f39eb65ac1f112b9) )
350 ROM_LOAD( "targeth.i7", 0x180000, 0x080000, CRC(d8b41000) SHA1(cbe91eb91bdc7a60b2333c6bea37d08a57902669) )
351
352 ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
353 ROM_LOAD( "targeth.c1", 0x000000, 0x080000, CRC(d6c9dfbc) SHA1(3ec70dea94fc89df933074012a52de6034571e87) )
354 /* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
355 ROM_LOAD( "targeth.c3", 0x080000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
356 ROM_END
357
358 ROM_START( targeth10 )
359 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
360 ROM_LOAD16_BYTE( "c23.bin", 0x000000, 0x040000, CRC(e38a54e2) SHA1(239bfa6f1c0fc8aa0ad7de9be237bef55b384007) )
361 ROM_LOAD16_BYTE( "c22.bin", 0x000001, 0x040000, CRC(24fe3efb) SHA1(8f48f08a6db28966c9263be119883c9179e349ed) )
362
363 ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */
364 ROM_LOAD( "targeth_ds5002fp.bin", 0x00000, 0x8000, CRC(abcdfee4) SHA1(c5955d5dbbcecbe1c2ae77d59671ae40eb814d30) )
365
366 ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
367 ROM_LOAD( "targeth_ds5002fp_scratch", 0x00, 0x80, CRC(c927bcb1) SHA1(86b5c7ee6a4a5f0aa538a6742253da1afadb4345) ) // default state so you don't have to manually initialize game
368 DS5002FP_SET_MON( 0x49 )
369 DS5002FP_SET_RPCTL( 0x00 )
370 DS5002FP_SET_CRCR( 0x80 )
371
372 ROM_REGION( 0x200000, "gfx1", 0 ) /* Graphics */
373 ROM_LOAD( "targeth.i13", 0x000000, 0x080000, CRC(b892be24) SHA1(9cccaaacf20e77c7358f0ceac60b8a1012f1216c) )
374 ROM_LOAD( "targeth.i11", 0x080000, 0x080000, CRC(6797faf9) SHA1(112cffe72f91cb46c262e19a47b0cab3237dd60f) )
375 ROM_LOAD( "targeth.i9", 0x100000, 0x080000, CRC(0e922c1c) SHA1(6920e345c82e76f7e0af6101f39eb65ac1f112b9) )
376 ROM_LOAD( "targeth.i7", 0x180000, 0x080000, CRC(d8b41000) SHA1(cbe91eb91bdc7a60b2333c6bea37d08a57902669) )
377
378 ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
379 ROM_LOAD( "targeth.c1", 0x000000, 0x080000, CRC(d6c9dfbc) SHA1(3ec70dea94fc89df933074012a52de6034571e87) )
380 /* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
381 ROM_LOAD( "targeth.c3", 0x080000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
382 ROM_END
383
384 GAME( 1994, targeth, 0, targeth, targeth, targeth_state, empty_init, ROT0, "Gaelco", "Target Hits (ver 1.1, Checksum 5152)", 0 )
385 GAME( 1994, targetha, targeth, targeth, targeth, targeth_state, empty_init, ROT0, "Gaelco", "Target Hits (ver 1.1, Checksum 86E1)", 0 )
386 GAME( 1994, targeth10, targeth, targeth, targeth, targeth_state, empty_init, ROT0, "Gaelco", "Target Hits (ver 1.0, Checksum FBCB)", 0 )
387