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