1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /***************************************************************************
4 
5     P&P Marketing Police Trainer hardware
6 
7     driver by Aaron Giles
8 
9     Games supported:
10         * Police Trainer
11         * Sharpshooter
12 
13     Known bugs:
14         * Flip screen not supported
15 
16 Note:   For Police Trainer v1.3B sets that run on the same Rev 0.5B PCB as Sharpshooter: If you
17         boot the game while holding the test button down until you get to the factory test screen,
18         all program roms fail the checksum.  This result has been verified on original hardware.
19         See below for specific information on each set.
20 Note:   Police Trainer v1.0 (Rev 0.2 PCB), the checksum results in MAME have been verified to be
21         the same as an original PCB.
22 Note:   Starting with Police Trainer v1.3B, support for high scores has been removed.
23 
24 Note:   All versions of Police Trainer "claim" to be version 1.5 both in an audio sample and
25         during the demo routine the screen shows: POLICE TRAINER   VERSION 1.5   The actual
26         version can be verified by checking the labels or during the factory test. Boot (or
27         reset) Police Trainer and hold the test button down to get the factory test screen.
28         Police Trainer will show the actual "SOFTWARE REV", except for v1.0 which will show
29         "FACTORY TEST"  To date, no version higher then v1.3B has been found and v1.2 has
30         NEVER been seen.
31 
32 To ID the version of your SharpShooter, check the 2nd printed line on each type of ROM.
33 
34 Program Roms:  C121012 - Code version 1.2, Graphics v1.0 & Sound v1.2
35 Graphic Roms:  G10     - Graphics rom v1.0 (in diagnostics mode it's called "Art")
36   Sound Roms:  S12     - Sound rom v1.2
37 
38 Noted differences in versions of SharpShooter:
39  Added a "Welcome to Sharpshooter" start-up screen showing rom versions for v1.9
40  Initial High Score names are changed between v1.1 and v1.2
41   Circus of Mystery:
42     The balloon challenge has been rewritten for v1.7
43     Jugglers throw balls painted with targets for v1.1 & v1.2  Version 1.7 uses regular targets
44   Alien Encounter:
45     First saucer challenge has been modified for v1.7
46 
47 The ATTILA Video System PCB (by EXIT Entertainment):
48 
49 Sharpshooter PCB is Rev 0.5B
50 Police Trainer PCB is Rev 0.3 / Rev 0.2
51 
52 |------------JAMMA Connector------------|
53 |                     CN7               |
54 | GUN1   XILINX-1              93C66    |
55 | GUN2                                  |
56 |                                       |
57 | LED1 LED2         IDT71024 x 2  Bt481 |
58 |             AT001                     |
59 |  DSW(8)                               |
60 |U127                       U113    U162|
61 |U125  IDT71256 x 4         U112        |
62 |U123                       U111    U160|
63 |U121                       U110        |
64 |U126                                   |
65 |U124  OSC    IDT79R3041  XILINX-2      |
66 |U122  48.000MHz             XILINX-3   |
67 |U120                          BSMT2000 |
68 |---------------------------------------|
69 
70 Chips:
71   CPU: IDT 79R3041-25J (MIPS R3000 core)
72 Sound: BSMT2000
73 Other: Bt481AKPJ110 (44 Pin PQFP, Brooktree RAMDAC)
74        AT001 (160 Pin PQFP, P&P Marketing, custom programmed XILINX XC4310)
75        ATMEL 93C66 (EEPROM)
76        CN7 - 4 pin connector for stereo speaker output
77 PLDs:
78        XILINX-1 XC9536 Labeled as U175A (Rev 2/3: Not Used)
79        XILINX-2 XC9536 Labeled as U109A (Rev 2/3: Lattice ispLSI 2032-80LJ - U109.P)
80        XILINX-3 XC9536 Labeled as U151A (Rev 2/3: Lattice ispLSI 2032-80LJ - U151.P)
81 
82 Note #1: Bt481A 256-Word Color Palette 15, 16 & 24-bit Color Power-Down RAMDAC
83 Note #2: For Rev 2 & 3 PCBs there is an optional daughter card to help with horizontal
84          light gun accuracy
85 
86 The main video chip is stamped:
87 
88 Rev 2 PCB              Rev 3 PCB              Rev 5B PCB
89 ------------------------------------------------------------
90 XILINX                 P & P                  P & P
91 XC4310                 Marketing              Marketing
92 PQ160C 5380            AJ001                  AT001
93 PC5380-9651            5380-JY3306A           5380-N1045503A
94  PROTO                                        AKI9749
95 
96 ***************************************************************************/
97 
98 #include "emu.h"
99 #include "includes/policetr.h"
100 
101 
102 /* constants */
103 #define MASTER_CLOCK    48000000
104 
105 
106 /*************************************
107  *
108  *  Interrupt handling
109  *
110  *************************************/
111 
WRITE_LINE_MEMBER(policetr_state::vblank)112 WRITE_LINE_MEMBER(policetr_state::vblank)
113 {
114 	m_maincpu->set_input_line(state ? INPUT_LINE_IRQ4 : INPUT_LINE_IRQ5, ASSERT_LINE);
115 }
116 
117 /*************************************
118  *
119  *  Output ports
120  *
121  *************************************/
122 
control_w(offs_t offset,uint32_t data,uint32_t mem_mask)123 void policetr_state::control_w(offs_t offset, uint32_t data, uint32_t mem_mask)
124 {
125 	// bit $80000000 = BSMT access/ROM read
126 	// bit $40000000 = N.C. (per schematic)
127 	// bit $20000000 = LED (PCB, red)
128 	// bit $10000000 = LED (PCB, green)
129 	// bit $00800000 = EEPROM data
130 	// bit $00400000 = EEPROM clock
131 	// bit $00200000 = EEPROM enable (on 1)
132 	// bit $00200000 = Ticket Output (marked "omit for production" on I/O board schematic in Police Trainer manual)
133 	// bit $00080000 = LED (coin 2)
134 	// bit $00040000 = LED (coin 1)
135 	// bit $00020000 = Coin lockout 2 (as noted on the schematic; not used by the actual game)
136 	// bit $00010000 = Coin lockout 1 (as noted on the schematic; not used by the actual game)
137 
138 	const uint32_t old = m_control_data;
139 	COMBINE_DATA(&m_control_data);
140 
141 	/* handle EEPROM I/O */
142 	if (ACCESSING_BITS_16_23)
143 	{
144 		machine().bookkeeping().coin_lockout_w(0, BIT(m_control_data, 16));
145 		machine().bookkeeping().coin_lockout_w(1, BIT(m_control_data, 17));
146 		m_leds[LED_COIN1] = BIT(m_control_data, 18);
147 		m_leds[LED_COIN2] = BIT(m_control_data, 19);
148 
149 		m_eeprom->di_write(BIT(data, 23));
150 		m_eeprom->cs_write(BIT(data, 21));
151 		m_eeprom->clk_write(BIT(data, 22));
152 	}
153 
154 	if (ACCESSING_BITS_24_31)
155 	{
156 		m_leds[LED_PCB_RED] = !BIT(m_control_data, 28);
157 		m_leds[LED_PCB_GREEN] = !BIT(m_control_data, 29);
158 
159 		/* toggling BSMT off then on causes a reset */
160 		if (!BIT(old, 31) && BIT(m_control_data, 31))
161 		{
162 			m_bsmt->reset();
163 		}
164 	}
165 
166 	/* log any unknown bits */
167 	if (data & 0x0f1fffff)
168 		logerror("%s: control_w = %08X & %08X\n", machine().describe_context(), data, mem_mask);
169 }
170 
171 
172 
173 /*************************************
174  *
175  *  BSMT2000 I/O
176  *
177  *************************************/
178 
bsmt2000_reg_w(offs_t offset,uint32_t data,uint32_t mem_mask)179 void policetr_state::bsmt2000_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask)
180 {
181 	if (BIT(m_control_data, 31))
182 		m_bsmt->write_data(data);
183 	else
184 		COMBINE_DATA(&m_bsmt_data_offset);
185 }
186 
187 
bsmt2000_data_w(offs_t offset,uint32_t data,uint32_t mem_mask)188 void policetr_state::bsmt2000_data_w(offs_t offset, uint32_t data, uint32_t mem_mask)
189 {
190 	m_bsmt->write_reg(data);
191 	COMBINE_DATA(&m_bsmt_data_bank);
192 }
193 
194 
READ_LINE_MEMBER(policetr_state::bsmt_status_r)195 READ_LINE_MEMBER(policetr_state::bsmt_status_r)
196 {
197 	return m_bsmt->read_status();
198 }
199 
200 
bsmt2000_data_r(offs_t offset)201 uint8_t policetr_state::bsmt2000_data_r(offs_t offset)
202 {
203 	return m_bsmt_region[(m_bsmt_data_bank << 16) + m_bsmt_data_offset];
204 }
205 
206 
207 
208 /*************************************
209  *
210  *  Busy loop optimization
211  *
212  *************************************/
213 
speedup_w(offs_t offset,uint32_t data,uint32_t mem_mask)214 void policetr_state::speedup_w(offs_t offset, uint32_t data, uint32_t mem_mask)
215 {
216 	COMBINE_DATA(m_speedup_data);
217 
218 	/* see if the PC matches */
219 	if ((m_maincpu->pcbase() & 0x1fffffff) == m_speedup_pc)
220 	{
221 		uint64_t curr_cycles = m_maincpu->total_cycles();
222 
223 		/* if less than 50 cycles from the last time, count it */
224 		if (curr_cycles - m_last_cycles < 50)
225 		{
226 			m_loop_count++;
227 
228 			/* more than 2 in a row and we spin */
229 			if (m_loop_count > 2)
230 				m_maincpu->spin_until_interrupt();
231 		}
232 		else
233 			m_loop_count = 0;
234 
235 		m_last_cycles = curr_cycles;
236 	}
237 }
238 
239 
240 
241 /*************************************
242  *
243  *  Main CPU memory handlers
244  *
245  *************************************/
246 
ramdac_map(address_map & map)247 void policetr_state::ramdac_map(address_map &map)
248 {
249 	map(0x000, 0x2ff).rw(m_ramdac, FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb888_w));
250 }
251 
mem(address_map & map)252 void policetr_state::mem(address_map &map)
253 {
254 	map.global_mask(0x3fffffff);
255 
256 	map(0x00000000, 0x0001ffff).ram().share(m_rambase);
257 	map(0x00200000, 0x0020000f).w(FUNC(policetr_state::video_w));
258 	map(0x00400000, 0x00400003).r(FUNC(policetr_state::video_r));
259 	map(0x00500000, 0x00500003).nopw();        // copies ROM here at startup, plus checksum
260 	map(0x00600002, 0x00600002).r(FUNC(policetr_state::bsmt2000_data_r));
261 	map(0x00700000, 0x00700003).w(FUNC(policetr_state::bsmt2000_reg_w));
262 	map(0x00800000, 0x00800003).w(FUNC(policetr_state::bsmt2000_data_w));
263 	map(0x00900001, 0x00900001).w(m_ramdac, FUNC(ramdac_device::index_w));
264 	map(0x00920001, 0x00920001).w(m_ramdac, FUNC(ramdac_device::pal_w));
265 	map(0x00a00000, 0x00a00003).w(FUNC(policetr_state::control_w));
266 	map(0x00a00000, 0x00a00003).portr("IN0");
267 	map(0x00a20000, 0x00a20003).portr("IN1");
268 	map(0x00a40000, 0x00a40003).portr("DSW");
269 	map(0x00e00000, 0x00e00003).nopw();        // watchdog???
270 	map(0x1fc00000, 0x1fc7ffff).rom().region("maincpu", 0);
271 }
272 
273 
mem(address_map & map)274 void sshooter_state::mem(address_map &map)
275 {
276 	map.global_mask(0x3fffffff);
277 
278 	map(0x00000000, 0x0001ffff).ram().share(m_rambase);
279 	map(0x00200000, 0x00200003).w(FUNC(sshooter_state::bsmt2000_data_w));
280 	map(0x00300001, 0x00300001).w(m_ramdac, FUNC(ramdac_device::index_w));
281 	map(0x00320001, 0x00320001).w(m_ramdac, FUNC(ramdac_device::pal_w));
282 	map(0x00400000, 0x00400003).r(FUNC(sshooter_state::video_r));
283 	map(0x00500000, 0x00500003).nopw();        // copies ROM here at startup, plus checksum
284 	map(0x00600002, 0x00600002).r(FUNC(sshooter_state::bsmt2000_data_r));
285 	map(0x00700000, 0x00700003).w(FUNC(sshooter_state::bsmt2000_reg_w));
286 	map(0x00800000, 0x0080000f).w(FUNC(sshooter_state::video_w));
287 	map(0x00a00000, 0x00a00003).w(FUNC(sshooter_state::control_w));
288 	map(0x00a00000, 0x00a00003).portr("IN0");
289 	map(0x00a20000, 0x00a20003).portr("IN1");
290 	map(0x00a40000, 0x00a40003).portr("DSW");
291 	map(0x00e00000, 0x00e00003).nopw();        // watchdog???
292 	map(0x1fc00000, 0x1fcfffff).rom().region("maincpu", 0);
293 }
294 
295 
296 
297 /*************************************
298  *
299  *  Port definitions
300  *
301  *************************************/
302 
303 static INPUT_PORTS_START( policetr )
304 	PORT_START("IN0")
305 	PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2SPR1  (note 1) */
306 	PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2PUSH3 (note 1) */
307 	PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2PUSH2 (note 1) */
308 	PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2USH1  (note 1) */
309 	PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2RIGHT (note 1) */
310 	PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2LEFT  (note 1) */
311 	PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2DOWN  (note 1) */
312 	PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P2UP    (note 1) */
313 	PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1SPR1  (note 1) */
314 	PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1PUSH3 (note 1) */
315 	PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1PUSH2 (note 1) */
316 	PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1PUSH1 (note 1) */
317 	PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1RIGHT (note 1) */
318 	PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1LEFT  (note 1) */
319 	PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1DOWN  (note 1) */
320 	PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /P1UP    (note 1) */
321 
322 	PORT_START("IN1")
323 	PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_START2 )
324 	PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_START1 )
325 	PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_COIN2 )
326 	PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_COIN1 )
327 	PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /TILT (note 1) */
328 	PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_SERVICE1 )
329 	PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /SERVICE (note 1) */
PORT_READ_LINE_MEMBER(policetr_state,bsmt_status_r)330 	PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_CUSTOM )  PORT_READ_LINE_MEMBER(policetr_state, bsmt_status_r)
331 	PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_BUTTON1 )  PORT_PLAYER(1)
332 	PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNKNOWN )  /* /XSW2 (note 2) */
333 	PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON1 )  PORT_PLAYER(2)
334 	PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNKNOWN )  /* /XSW2 (note 2) */
335 	PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* TKTSNS (note 3) */
336 	PORT_BIT( 0x20000000, IP_ACTIVE_HIGH, IPT_CUSTOM )  PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM read */
337 	PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /VOLMDN (note 1) */
338 	PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED )   /* /VOLMUP (note 1) */
339 
340 	/* Note 1: Input is unused but is shown in the service menu and noted as written on the I/O schematic in the Police Trainer manual. */
341 	/* Note 2: It is unknown if this input is used, but it is noted as written on the I/O schematic in the Police Trainer manual. */
342 	/* Note 3: Per the I/O schematic in the Police Trainer manual, the ticket dispenser connector is omitted for production. */
343 
344 	PORT_START("DSW")
345 	PORT_DIPUNUSED_DIPLOC( 0x00010000, 0x00010000, "SW1:1" )
346 	PORT_DIPUNUSED_DIPLOC( 0x00020000, 0x00020000, "SW1:2" )
347 	PORT_DIPUNUSED_DIPLOC( 0x00040000, 0x00040000, "SW1:3" )
348 	PORT_DIPUNUSED_DIPLOC( 0x00080000, 0x00080000, "SW1:4" )
349 	PORT_DIPNAME( 0x00100000, 0x00100000, "Special Hardware Test" ) PORT_DIPLOCATION("SW1:5") /* reset game with TEST button held down to see it */
350 	PORT_DIPSETTING(          0x00100000, DEF_STR( Off ) )
351 	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
352 	PORT_DIPUNUSED_DIPLOC( 0x00200000, 0x00200000, "SW1:6" )
353 	PORT_DIPNAME( 0x00400000, 0x00400000, "Monitor Sync" ) PORT_DIPLOCATION("SW1:7")
354 	PORT_DIPSETTING(          0x00000000, "+" )
355 	PORT_DIPSETTING(          0x00400000, "-" )
356 	PORT_DIPNAME( 0x00800000, 0x00800000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8") /* For use with mirrored CRTs - Not supported */
357 	PORT_DIPSETTING(          0x00000000, DEF_STR( Off ) )
358 	PORT_DIPSETTING(          0x00800000, DEF_STR( On ) )   /* Will invert the Y axis of guns */
359 	PORT_BIT( 0xff000000, IP_ACTIVE_LOW, IPT_UNKNOWN )
360 
361 	PORT_START("GUNX1")             /* fake analog X */
362 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.012, 0.008, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
363 
364 	PORT_START("GUNY1")             /* fake analog Y */
365 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.05, 0.002, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10)
366 
367 	PORT_START("GUNX2")             /* fake analog X */
368 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.012, 0.008, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
369 
370 	PORT_START("GUNY2")             /* fake analog Y */
371 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.05, 0.002, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2)
372 INPUT_PORTS_END
373 
374 
375 static INPUT_PORTS_START( polict10 )
376 	PORT_INCLUDE( policetr )
377 
378 	PORT_MODIFY("GUNX1")                /* fake analog X */
379 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.018, -0.037, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
380 
381 	PORT_MODIFY("GUNY1")                /* fake analog Y */
382 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, -0.033, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10)
383 
384 	PORT_MODIFY("GUNX2")                /* fake analog X */
385 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.018, -0.037, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
386 
387 	PORT_MODIFY("GUNY2")                /* fake analog Y */
388 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, -0.033, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2)
389 INPUT_PORTS_END
390 
391 
392 static INPUT_PORTS_START( sshooter )
393 	PORT_INCLUDE( policetr )
394 
395 	PORT_MODIFY("DSW")
396 	PORT_DIPUNUSED_DIPLOC( 0x00100000, 0x00100000, "SW1:5" )
397 INPUT_PORTS_END
398 
399 
400 static INPUT_PORTS_START( sshoot11 )
401 	PORT_INCLUDE( policetr )
402 
403 	PORT_MODIFY("DSW")
404 	PORT_DIPUNUSED_DIPLOC( 0x00100000, 0x00100000, "SW1:5" )
405 
406 	PORT_MODIFY("GUNX1")                /* fake analog X */
407 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.012, 0.208, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
408 
409 	PORT_MODIFY("GUNY1")                /* fake analog Y */
410 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.093, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10)
411 
412 	PORT_MODIFY("GUNX2")                /* fake analog X */
413 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.012, 0.208, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
414 
415 	PORT_MODIFY("GUNY2")                /* fake analog Y */
416 	PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.093, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2)
417 INPUT_PORTS_END
418 
419 
420 /*************************************
421  *
422  *  Machine driver
423  *
424  *************************************/
425 
426 void policetr_state::machine_start()
427 {
428 	m_leds.resolve();
429 
430 	save_item(NAME(m_control_data));
431 	save_item(NAME(m_bsmt_data_bank));
432 	save_item(NAME(m_bsmt_data_offset));
433 	save_item(NAME(m_last_cycles));
434 	save_item(NAME(m_loop_count));
435 }
436 
policetr(machine_config & config)437 void policetr_state::policetr(machine_config &config)
438 {
439 	/* basic machine hardware */
440 	R3041(config, m_maincpu, MASTER_CLOCK/2);
441 	m_maincpu->set_endianness(ENDIANNESS_BIG);
442 	m_maincpu->set_addrmap(AS_PROGRAM, &policetr_state::mem);
443 
444 	EEPROM_93C66_16BIT(config, m_eeprom);
445 
446 	/* video hardware */
447 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
448 	m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
449 	m_screen->set_refresh_hz(60);
450 	m_screen->set_size(400, 262);  /* needs to be verified */
451 	m_screen->set_visarea(0, 393, 0, 239);
452 	m_screen->set_screen_update(FUNC(policetr_state::screen_update));
453 	m_screen->screen_vblank().set(FUNC(policetr_state::vblank));
454 
455 	PALETTE(config, m_palette).set_entries(256);
456 
457 	RAMDAC(config, m_ramdac, 0, m_palette);  // BT481A Palette RAMDAC
458 	m_ramdac->set_addrmap(0, &policetr_state::ramdac_map);
459 
460 	/* sound hardware */
461 	SPEAKER(config, m_lspeaker).front_left();
462 	SPEAKER(config, m_rspeaker).front_right();
463 
464 	BSMT2000(config, m_bsmt, MASTER_CLOCK/2);
465 	m_bsmt->add_route(0, *m_lspeaker, 1.0);
466 	m_bsmt->add_route(1, *m_rspeaker, 1.0);
467 }
468 
sshooter(machine_config & config)469 void sshooter_state::sshooter(machine_config &config)
470 {
471 	policetr(config);
472 	m_maincpu->set_addrmap(AS_PROGRAM, &sshooter_state::mem);
473 }
474 
475 
476 
477 /*************************************
478  *
479  *  ROM definition(s)
480  *
481  *************************************/
482 
483 ROM_START( policetr ) /* Rev 0.3 PCB with the newer AT001 video chip, reports as SOFTWARE REV 1.3B - first version to remove support for high scores */
484 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
485 	ROM_LOAD16_BYTE( "u121_police_trainer_p-p_marketing.u121", 0x000000, 0x100000, CRC(56b0b00a) SHA1(4034fe373a61f756f4813f0c20b1cf05e4338059) ) // mask ROM labeled: U121   POLICE TRAINER   P&P MARKETING
CRC(ca664142)486 	ROM_LOAD16_BYTE( "u120_police_trainer_p-p_marketing.u120", 0x000001, 0x100000, CRC(ca664142) SHA1(2727ecb9287b4ed30088e017bb6b8763dfb75b2f) ) // mask ROM labeled: U120   POLICE TRAINER   P&P MARKETING
487 	ROM_LOAD16_BYTE( "u125_police_trainer_p-p_marketing.u125", 0x200000, 0x100000, CRC(e9ccf3a0) SHA1(b3fd8c094f76ace4cf403c3d0f6bd6c5d8db7d6a) ) // mask ROM labeled: U125   POLICE TRAINER   P&P MARKETING
488 	ROM_LOAD16_BYTE( "u124_police_trainer_p-p_marketing.u124", 0x200001, 0x100000, CRC(f4acf921) SHA1(5b244e9a51304318fa0c03eb7365b3c12627d19b) ) // mask ROM labeled: U124   POLICE TRAINER   P&P MARKETING
489 
490 	ROM_REGION32_BE( 0x80000, "maincpu", 0 )  /* 2MB for R3000 code */
491 	ROM_LOAD32_BYTE( "u113_no_hi_a589.u113", 0x00000, 0x20000, CRC(4bfb0fb5) SHA1(12367688bb821de2c54faed8eec27e74d4dac856) ) // hand written labeled:   U113 NO HI A589
492 	ROM_LOAD32_BYTE( "u112_no_hi_36da.u112", 0x00001, 0x20000, CRC(505a89bf) SHA1(77e289311c5d358478d02bf8e5b14adb8ab1caeb) ) // hand written labeled:   U112 NO HI 36DA
493 	ROM_LOAD32_BYTE( "u111_no_hi_e6e6.u111", 0x00002, 0x20000, CRC(68e5936e) SHA1(1a8833584a6b74f22fe3bdbb7cd23983da7e6fe1) ) // hand written labeled:   U111 NO HI E6E6
494 	ROM_LOAD32_BYTE( "u110_no_hi_9f17.u110", 0x00003, 0x20000, CRC(0392824d) SHA1(c394b9a74d11cf9ff5b4edf97178a85276b63852) ) // hand written labeled:   U110 NO HI 9F17
495 
496 	ROM_REGION( 0x1000000, "bsmt", 0 )
497 	ROM_LOAD( "u160_police_trainer_p-p_marketing.u160", 0x000000, 0x100000, CRC(f267f813) SHA1(ae58507947fe2e9701b5df46565fd9908e2f9d77) ) // mask ROM labeled: U160   POLICE TRAINER   P&P MARKETING
498 	ROM_RELOAD(                                         0x3f8000, 0x100000 )
499 	ROM_LOAD( "u162_police_trainer_p-p_marketing.u162", 0x100000, 0x100000, CRC(75fe850e) SHA1(ab8cf24ae6e5cf80f6a9a34e46f2b1596879643b) ) // mask ROM labeled: U162   POLICE TRAINER   P&P MARKETING
500 	ROM_RELOAD(                                         0x4f8000, 0x100000 )
501 ROM_END
502 
503 
504 ROM_START( policetr13 ) /* Rev 0.3 PCB with the program chips dated 04/01/97, reports as SOFTWARE REV 1.3 */
505 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
506 	ROM_LOAD16_BYTE( "u121_police_trainer_p-p_marketing.u121", 0x000000, 0x100000, CRC(56b0b00a) SHA1(4034fe373a61f756f4813f0c20b1cf05e4338059) ) // mask ROM labeled: U121   POLICE TRAINER   P&P MARKETING
507 	ROM_LOAD16_BYTE( "u120_police_trainer_p-p_marketing.u120", 0x000001, 0x100000, CRC(ca664142) SHA1(2727ecb9287b4ed30088e017bb6b8763dfb75b2f) ) // mask ROM labeled: U120   POLICE TRAINER   P&P MARKETING
508 	ROM_LOAD16_BYTE( "u125_police_trainer_p-p_marketing.u125", 0x200000, 0x100000, CRC(e9ccf3a0) SHA1(b3fd8c094f76ace4cf403c3d0f6bd6c5d8db7d6a) ) // mask ROM labeled: U125   POLICE TRAINER   P&P MARKETING
509 	ROM_LOAD16_BYTE( "u124_police_trainer_p-p_marketing.u124", 0x200001, 0x100000, CRC(f4acf921) SHA1(5b244e9a51304318fa0c03eb7365b3c12627d19b) ) // mask ROM labeled: U124   POLICE TRAINER   P&P MARKETING
510 
511 	ROM_REGION32_BE( 0x80000, "maincpu", 0 )
512 	ROM_LOAD32_BYTE( "1.3_4-1-97_u113_a707.u113", 0x00000, 0x20000, CRC(7b34d366) SHA1(b86cfe155e0685992aebbcc7db705fdbadc42bf9) ) // labeled: 1.3  4/1/97   U113  A707, later versions are known to be labeled: Police Trainer v1.3   U113  A707
513 	ROM_LOAD32_BYTE( "1.3_4-1-97_u112_381c.u112", 0x00001, 0x20000, CRC(57d059c8) SHA1(ed0c624fc0afbeb6616bba8a67ce5b18d7c119fc) ) // labeled: 1.3  4/1/97   U112  381C, later versions are known to be labeled: Police Trainer v1.3   U112  381C
514 	ROM_LOAD32_BYTE( "1.3_4-1-97_u111_e96e.u111", 0x00002, 0x20000, CRC(fb5ce933) SHA1(4a07ac3e2d86262061092f112cab89f8660dce3d) ) // labeled: 1.3  4/1/97   U111  E96E, later versions are known to be labeled: Police Trainer v1.3   U111  E96E
515 	ROM_LOAD32_BYTE( "1.3_4-1-97_u110_a2fd.u110", 0x00003, 0x20000, CRC(40bd6f60) SHA1(156000d3c439eab45962f0a2681bd806a17f47ee) ) // labeled: 1.3  4/1/97   U110  A2FD, later versions are known to be labeled: Police Trainer v1.3   U110  A2FD
516 
517 	ROM_REGION( 0x1000000, "bsmt", 0 )
518 	ROM_LOAD( "u160_police_trainer_p-p_marketing.u160", 0x000000, 0x100000, CRC(f267f813) SHA1(ae58507947fe2e9701b5df46565fd9908e2f9d77) ) // mask ROM labeled: U160   POLICE TRAINER   P&P MARKETING
519 	ROM_RELOAD(                                         0x3f8000, 0x100000 )
520 	ROM_LOAD( "u162_police_trainer_p-p_marketing.u162", 0x100000, 0x100000, CRC(75fe850e) SHA1(ab8cf24ae6e5cf80f6a9a34e46f2b1596879643b) ) // mask ROM labeled: U162   POLICE TRAINER   P&P MARKETING
521 	ROM_RELOAD(                                         0x4f8000, 0x100000 )
522 ROM_END
523 
524 
525 ROM_START( policetr11 ) /* Rev 0.3 PCB with the program chips dated 01/06/97, reports as SOFTWARE REV 1.1 */
526 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
527 	ROM_LOAD16_BYTE( "u121_police_trainer_p-p_marketing.u121", 0x000000, 0x100000, CRC(56b0b00a) SHA1(4034fe373a61f756f4813f0c20b1cf05e4338059) ) // mask ROM labeled: U121   POLICE TRAINER   P&P MARKETING
528 	ROM_LOAD16_BYTE( "u120_police_trainer_p-p_marketing.u120", 0x000001, 0x100000, CRC(ca664142) SHA1(2727ecb9287b4ed30088e017bb6b8763dfb75b2f) ) // mask ROM labeled: U120   POLICE TRAINER   P&P MARKETING
529 	ROM_LOAD16_BYTE( "u125_police_trainer_p-p_marketing.u125", 0x200000, 0x100000, CRC(e9ccf3a0) SHA1(b3fd8c094f76ace4cf403c3d0f6bd6c5d8db7d6a) ) // mask ROM labeled: U125   POLICE TRAINER   P&P MARKETING
530 	ROM_LOAD16_BYTE( "u124_police_trainer_p-p_marketing.u124", 0x200001, 0x100000, CRC(f4acf921) SHA1(5b244e9a51304318fa0c03eb7365b3c12627d19b) ) // mask ROM labeled: U124   POLICE TRAINER   P&P MARKETING
531 
532 	ROM_REGION32_BE( 0x80000, "maincpu", 0 )  /* 2MB for R3000 code */
533 	ROM_LOAD32_BYTE( "1.1_1-6-97_u113_87a7.u113", 0x00000, 0x20000, CRC(3d62f6d6) SHA1(342ffa38a6972bbb03c89b4dd603c2cc60609d3d) ) // labeled: 1.1  1/6/97   U113 87A7
534 	ROM_LOAD32_BYTE( "1.1_1-6-97_u112_9bdb.u112", 0x00001, 0x20000, CRC(942b280b) SHA1(c342ba3255203ce28ff59479da00f26f0bd026e0) ) // labeled: 1.1  1/6/97   U112 9BDB
535 	ROM_LOAD32_BYTE( "1.1_1-6-97_u111_7aa2.u111", 0x00002, 0x20000, CRC(da6c45a7) SHA1(471bd372d2ad5bcb29af19dae09f3cfab4b010fd) ) // labeled: 1.1  1/6/97   U111 7AA2
536 	ROM_LOAD32_BYTE( "1.1_1-6-97_u110_ac17.u110", 0x00003, 0x20000, CRC(f1c8a8c0) SHA1(8a2d1ada002be6f2a3c2d21d193e7cde6531545a) ) // labeled: 1.1  1/6/97   U110 AC17
537 
538 	ROM_REGION( 0x1000000, "bsmt", 0 )
539 	ROM_LOAD( "u160_police_trainer_p-p_marketing.u160", 0x000000, 0x100000, CRC(f267f813) SHA1(ae58507947fe2e9701b5df46565fd9908e2f9d77) ) // mask ROM labeled: U160   POLICE TRAINER   P&P MARKETING
540 	ROM_RELOAD(                                         0x3f8000, 0x100000 )
541 	ROM_LOAD( "u162_police_trainer_p-p_marketing.u162", 0x100000, 0x100000, CRC(75fe850e) SHA1(ab8cf24ae6e5cf80f6a9a34e46f2b1596879643b) ) // mask ROM labeled: U162   POLICE TRAINER   P&P MARKETING
542 	ROM_RELOAD(                                         0x4f8000, 0x100000 )
543 ROM_END
544 
545 
546 ROM_START( policetr10 ) /* Rev 0.2 PCB with all chips dated 10/07/96, there is no mention of version on any chip or during the "Factory Test" checksum screen */
547 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
548 	/* Same data as the other sets, but split in 4 meg roms */
549 	ROM_LOAD16_BYTE( "u121_10-7-96.u121", 0x000000, 0x080000, CRC(9d31e805) SHA1(482f38e07ddb758e1fb444af7b56a0ef6ea945c8) ) // labeled: U121   10/7/96
550 	ROM_LOAD16_BYTE( "u120_10-7-96.u120", 0x000001, 0x080000, CRC(b03b9d46) SHA1(2bb8fcb1df09aa762b98adf2e1edd186203746c0) ) // labeled: U120   10/7/96
551 	ROM_LOAD16_BYTE( "u123_10-7-96.u123", 0x100000, 0x080000, CRC(80557cf1) SHA1(ba96fd5b6673b382013e1810a36edb827caaff4b) ) // labeled: U123   10/7/96
552 	ROM_LOAD16_BYTE( "u122_10-7-96.u122", 0x100001, 0x080000, CRC(eca09f41) SHA1(bbb1466d39c09598899a3f50b3bb8f9d58b274ec) ) // labeled: U122   10/7/96
553 	ROM_LOAD16_BYTE( "u125_10-7-96.u125", 0x200000, 0x080000, CRC(24bddc51) SHA1(6d7c85dba47c675c65e1cb751d581af0d2c678ad) ) // labeled: U125   10/7/96
554 	ROM_LOAD16_BYTE( "u124_10-7-96.u124", 0x200001, 0x080000, CRC(f1a43dee) SHA1(2c0aa894e148315168239c7df391ef1f2b4d32a1) ) // labeled: U124   10/7/96
555 	ROM_LOAD16_BYTE( "u127_10-7-96.u127", 0x300000, 0x080000, CRC(5031ea1e) SHA1(c1f9272f9874150d510f22c44c186fad0ed3a7e4) ) // labeled: U127   10/7/96
556 	ROM_LOAD16_BYTE( "u126_10-7-96.u126", 0x300001, 0x080000, CRC(33bf2653) SHA1(357da2da7df417109adbf600f3455c224f6c076f) ) // labeled: U126   10/7/96
557 
558 	ROM_REGION32_BE( 0x80000, "maincpu", 0 )  /* 2MB for R3000 code */
559 	ROM_LOAD32_BYTE( "u113_10-7-96.u113", 0x00000, 0x20000, CRC(3e27a0ce) SHA1(0d010da68f950a10a74eddc57941e4c0e2144071) ) // labeled: U113   10/7/96
560 	ROM_LOAD32_BYTE( "u112_10-7-96.u112", 0x00001, 0x20000, CRC(fcbcf4ca) SHA1(374291600043cfbbd87260b12961ac6d68caeda0) ) // labeled: U112   10/7/96
561 	ROM_LOAD32_BYTE( "u111_10-7-96.u111", 0x00002, 0x20000, CRC(61f79667) SHA1(25298cd8706b5c59f7c9e0f8d44db0df73c23403) ) // labeled: U111   10/7/96
562 	ROM_LOAD32_BYTE( "u110_10-7-96.u110", 0x00003, 0x20000, CRC(5c3c1548) SHA1(aab977274ecff7cb5fd540a3d0da7940e9707906) ) // labeled: U110   10/7/96
563 
564 	ROM_REGION( 0x1000000, "bsmt", 0 )
565 	/* Same data as the other sets, but split in 4 meg roms */
566 	ROM_LOAD( "u160_10-7-96.u160", 0x000000, 0x080000, CRC(cd374405) SHA1(e53689d4344c78c3faac22747ada28bc3add8c56) ) // labeled: U160   10/7/96
567 	ROM_RELOAD(                    0x3f8000, 0x080000 )
568 	ROM_LOAD( "u161_10-7-96.u161", 0x080000, 0x080000, CRC(c33e3497) SHA1(a7d488f04bba3f1b884b0df210c3793f41967d73) ) // labeled: U161   10/7/96
569 	ROM_RELOAD(                    0x478000, 0x080000 )
570 	ROM_LOAD( "u162_10-7-96.u162", 0x100000, 0x080000, CRC(e7e02312) SHA1(ac92b8615b18528820a40dad025173e9f24072bf) ) // labeled: U162   10/7/96
571 	ROM_RELOAD(                    0x4f8000, 0x080000 )
572 	ROM_LOAD( "u163_10-7-96.u163", 0x180000, 0x080000, CRC(1053b94a) SHA1(b3ff6a269c1cc4a91a08bc277b896e3e6c4eceee) ) // labeled: U163   10/7/96
573 	ROM_RELOAD(                    0x578000, 0x080000 )
574 ROM_END
575 
576 
577 ROM_START( policetr13a ) /* Rev 0.5B PCB, unknown program rom date. Actual version is V1.3B */
578 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
579 	ROM_LOAD16_BYTE( "u121_police_trainer_p-p_marketing.u121", 0x000000, 0x100000, CRC(56b0b00a) SHA1(4034fe373a61f756f4813f0c20b1cf05e4338059) ) // mask ROM labeled: U121   POLICE TRAINER   P&P MARKETING
580 	ROM_LOAD16_BYTE( "u120_police_trainer_p-p_marketing.u120", 0x000001, 0x100000, CRC(ca664142) SHA1(2727ecb9287b4ed30088e017bb6b8763dfb75b2f) ) // mask ROM labeled: U120   POLICE TRAINER   P&P MARKETING
581 	ROM_LOAD16_BYTE( "u125_police_trainer_p-p_marketing.u125", 0x200000, 0x100000, CRC(e9ccf3a0) SHA1(b3fd8c094f76ace4cf403c3d0f6bd6c5d8db7d6a) ) // mask ROM labeled: U125   POLICE TRAINER   P&P MARKETING
582 	ROM_LOAD16_BYTE( "u124_police_trainer_p-p_marketing.u124", 0x200001, 0x100000, CRC(f4acf921) SHA1(5b244e9a51304318fa0c03eb7365b3c12627d19b) ) // mask ROM labeled: U124   POLICE TRAINER   P&P MARKETING
583 
584 	ROM_REGION32_BE( 0x100000, "maincpu", 0 ) /* Program roms are type 27C020 */
585 /*
586 Note: With this version, the program roms are twice the size of those found on all other Police Trainer sets. Like the set listed below,
587       if you hold the test button down and boot (or reset) the game within Mame. All 4 program ROMs fail the checksum code and the listed
588       checksums on the screen match the set below.  IE: U110=556D, U111=E5F1, U112=974C & U113=CB73
589 
590       However, if you check the Diagnostics screen, the program rom checksum is 6819480C which is different then the set below. So it
591       looks like it's checking the extra code.  The roms do not contain identical halves, so it's unknown what the "new" data is or does.
592 
593       This set has also been found using mask roms for the program roms which would indicate it was the final version.
594 */
595 	ROM_LOAD32_BYTE( "police_trainer_av1.3_u113_fb46.u113", 0x00000, 0x40000, CRC(909c052d) SHA1(23bd4849261ee5cc2414a4043ee929ccf1bd6806) ) // labeled: Police Trainer   Av1.3   U113  FB46
596 	ROM_LOAD32_BYTE( "police_trainer_av1.3_u112_201d.u112", 0x00001, 0x40000, CRC(f9dc9ca8) SHA1(52de7bc8c9aa7834d953b9f9e2a65e06f8042f0a) ) // labeled: Police Trainer   Av1.3   U112  201D
597 	ROM_LOAD32_BYTE( "police_trainer_av1.3_u111_f343.u111", 0x00002, 0x40000, CRC(8c4f3a64) SHA1(4953e6fc26bae7d6e7c7230f4ca76e3f5032af14) ) // labeled: Police Trainer   Av1.3   U111  F343
598 	ROM_LOAD32_BYTE( "police_trainer_av1.3_u110_050c.u110", 0x00003, 0x40000, CRC(738a8277) SHA1(423a9bcecb82959f38ae79a0728d72eb13ed93b3) ) // labeled: Police Trainer   Av1.3   U110  050C
599 
600 	ROM_REGION( 0x1000000, "bsmt", 0 )
601 	ROM_LOAD( "u160_police_trainer_p-p_marketing.u160", 0x000000, 0x100000, CRC(f267f813) SHA1(ae58507947fe2e9701b5df46565fd9908e2f9d77) ) // mask ROM labeled: U160   POLICE TRAINER   P&P MARKETING
602 	ROM_RELOAD(                                         0x3f8000, 0x100000 )
603 	ROM_LOAD( "u162_police_trainer_p-p_marketing.u162", 0x100000, 0x100000, CRC(75fe850e) SHA1(ab8cf24ae6e5cf80f6a9a34e46f2b1596879643b) ) // mask ROM labeled: U162   POLICE TRAINER   P&P MARKETING
604 	ROM_RELOAD(                                         0x4f8000, 0x100000 )
605 ROM_END
606 
607 
608 ROM_START( policetr13b ) /* Rev 0.5B PCB, unknown program rom date Actual version is V1.3B */
609 	ROM_REGION( 0x400000, "gfx", ROMREGION_ERASE00 )
610 	ROM_LOAD16_BYTE( "u121_police_trainer_p-p_marketing.u121", 0x000000, 0x100000, CRC(56b0b00a) SHA1(4034fe373a61f756f4813f0c20b1cf05e4338059) ) // mask ROM labeled: U121   POLICE TRAINER   P&P MARKETING
611 	ROM_LOAD16_BYTE( "u120_police_trainer_p-p_marketing.u120", 0x000001, 0x100000, CRC(ca664142) SHA1(2727ecb9287b4ed30088e017bb6b8763dfb75b2f) ) // mask ROM labeled: U120   POLICE TRAINER   P&P MARKETING
612 	ROM_LOAD16_BYTE( "u125_police_trainer_p-p_marketing.u125", 0x200000, 0x100000, CRC(e9ccf3a0) SHA1(b3fd8c094f76ace4cf403c3d0f6bd6c5d8db7d6a) ) // mask ROM labeled: U125   POLICE TRAINER   P&P MARKETING
613 	ROM_LOAD16_BYTE( "u124_police_trainer_p-p_marketing.u124", 0x200001, 0x100000, CRC(f4acf921) SHA1(5b244e9a51304318fa0c03eb7365b3c12627d19b) ) // mask ROM labeled: U124   POLICE TRAINER   P&P MARKETING
614 
615 	ROM_REGION32_BE( 0x100000, "maincpu", 0 ) /* Program roms are type 27C010 */
616 /*
617 Note: If you hold the test button down and boot (or reset) the game within Mame. All 4 program ROMs fail the checksum code, IE: they
618       show in red instead of green.  But, the listed checksums on the screen match the checksums printed on the ROM labels. However,
619       this has been verified to happen on a real PCB
620 
621       The program rom checksum in the diagnostic screen is 17551773
622 */
623 	ROM_LOAD32_BYTE( "police_trainer_v1.3b_u113_cb73.u113", 0x00000, 0x20000, CRC(d636c00d) SHA1(ef989eb85b51a64ca640297c1286514c8d7f8f76) ) // labeled: Police Trainer   v1.3B   U113  CB73
624 	ROM_LOAD32_BYTE( "police_trainer_v1.3b_u112_974c.u112", 0x00001, 0x20000, CRC(86f0497e) SHA1(d177023f7cb2e01de60ef072212836dc94759c1a) ) // labeled: Police Trainer   v1.3B   U112  974C
625 	ROM_LOAD32_BYTE( "police_trainer_v1.3b_u111_e5f1.u111", 0x00002, 0x20000, CRC(39e96d6a) SHA1(efe6ffe70432b94c98f3d7247408a6d2f6f9e33d) ) // labeled: Police Trainer   v1.3B   U111  E5F1
626 	ROM_LOAD32_BYTE( "police_trainer_v1.3b_u110_556d.u110", 0x00003, 0x20000, CRC(d7e6f4cb) SHA1(9dffe4937bc5cf47d870f06ae0dced362cd2dd66) ) // labeled: Police Trainer   v1.3B   U110  556D
627 
628 	ROM_REGION( 0x1000000, "bsmt", 0 )
629 	ROM_LOAD( "u160_police_trainer_p-p_marketing.u160", 0x000000, 0x100000, CRC(f267f813) SHA1(ae58507947fe2e9701b5df46565fd9908e2f9d77) ) // mask ROM labeled: U160   POLICE TRAINER   P&P MARKETING
630 	ROM_RELOAD(                                         0x3f8000, 0x100000 )
631 	ROM_LOAD( "u162_police_trainer_p-p_marketing.u162", 0x100000, 0x100000, CRC(75fe850e) SHA1(ab8cf24ae6e5cf80f6a9a34e46f2b1596879643b) ) // mask ROM labeled: U162   POLICE TRAINER   P&P MARKETING
632 	ROM_RELOAD(                                         0x4f8000, 0x100000 )
633 ROM_END
634 
635 
636 ROM_START( sshooter ) /* Rev 0.5B PCB, Added a "Welcome" start-up screen which shows "This is Version C191012" */
637 	ROM_REGION( 0x800000, "gfx", ROMREGION_ERASE00 ) /* Graphics v1.0 */
638 	ROM_LOAD16_BYTE( "u121_1-1_g10_021998_ecie-9418_sharpshooter.u121", 0x000000, 0x100000, CRC(22e27dd6) SHA1(cb9e8c450352bb116a9c0407cc8ce6d8ae9d9881) ) // U121 1:1   G10   021998 ECIE:9418   SharpShooter
639 	ROM_LOAD16_BYTE( "u120_1-2_g10_021998_ecie-3395_sharpshooter.u120", 0x000001, 0x100000, CRC(30173b1b) SHA1(366464444ce208391ca350f1639403f0c2217330) ) // U120 1:2   G10   021998 ECIE:3395   SharpShooter
640 	ROM_LOAD16_BYTE( "u125_2-1_g10_021998_ecie-4584_sharpshooter.u125", 0x200000, 0x100000, CRC(79e8520a) SHA1(682e5c7954f96db65a137f05cde67c310b85b526) ) // U125 2:1   G10   021998 ECIE:4584   SharpShooter
641 	ROM_LOAD16_BYTE( "u124_2-2_g10_021998_ecie-c816_sharpshooter.u124", 0x200001, 0x100000, CRC(8e805970) SHA1(bfc9940ed6425f136d768170275279c590da7003) ) // U124 2:2   G10   021998 ECIE:C816   SharpShooter
642 	ROM_LOAD16_BYTE( "u123_3-1_g10_021998_ecie-4167_sharpshooter.u123", 0x400000, 0x100000, CRC(d045bb62) SHA1(839209ff6a8e5db63a51a3494a6c973e0068a3c6) ) // U123 3:1   G10   021998 ECIE:4167   SharpShooter
643 	ROM_LOAD16_BYTE( "u122_3-2_g10_021998_ecie-70fc_sharpshooter.u122", 0x400001, 0x100000, CRC(163cc133) SHA1(a5e84b5060fd32362aa097d0194ce72e8a90357c) ) // U122 3:2   G10   021998 ECIE:70FC   SharpShooter
644 	ROM_LOAD16_BYTE( "u127_4-1_g10_021998_ecie-da65_sharpshooter.u127", 0x600000, 0x100000, CRC(76a7a591) SHA1(9fd7cce21b01f388966a3e8388ba95820ac10bfd) ) // U127 4:1   G10   021998 ECIE:DA65   SharpShooter
645 	ROM_LOAD16_BYTE( "u126_4-2_g10_021998_ecie-7bdf_sharpshooter.u126", 0x600001, 0x100000, CRC(ab1b9d60) SHA1(ff51a71443f7774d3abf96c2eb8ef6a54d73dd8e) ) // U126 4:2   G10   021998 ECIE:7BDF   SharpShooter
646 
647 	ROM_REGION32_BE( 0x100000, "maincpu", 0 )
648 	ROM_LOAD32_BYTE( "sharpshooter_v1.9_u113_664a.u113", 0x00000, 0x40000, CRC(de536a90) SHA1(76f0e0e2457d91b3c1bd2b3501591646a18db348) ) // 1:1 - labeled Sharpshooter v1.9   U113  664A
649 	ROM_LOAD32_BYTE( "sharpshooter_v1.9_u112_9dae.u112", 0x00001, 0x40000, CRC(2e4e1837) SHA1(b4088269e1e7a3913d2841eb24f53b1c413cd0cc) ) // 1:2 - labeled Sharpshooter v1.9   U112  9DAE
650 	ROM_LOAD32_BYTE( "sharpshooter_v1.9_u111_c3b6.u111", 0x00002, 0x40000, CRC(485d03e8) SHA1(ebdf166b2354b318e6bfb68e0fb5647381b9c405) ) // 1:3 - labeled Sharpshooter v1.9   U111  C3B6
651 	ROM_LOAD32_BYTE( "sharpshooter_v1.9_u110_9b6b.u110", 0x00003, 0x40000, CRC(df6a0a45) SHA1(a73a9dcdc669c6e61a5983f3b2a2721fe1b35f34) ) // 1:4 - labeled Sharpshooter v1.9   U110  9B6B
652 
653 	ROM_REGION( 0x1000000, "bsmt", 0 ) /* Sound v1.2 */
654 	ROM_LOAD( "u160_1-1_s12_030398_ecie-4791.u160", 0x000000, 0x100000, CRC(1c603d42) SHA1(880992871be52129684052d542946de0cc32ba9a) ) // U160 1:1   S12   030398 ECIE:4791   SharpShooter
655 	ROM_RELOAD(                                     0x3f8000, 0x100000 )
656 	ROM_LOAD( "u162_2-1_s12_030398_ecie-d722.u162", 0x100000, 0x100000, CRC(40ef448a) SHA1(c96f7b169be2576e9f3783af84c07259efefb812) ) // U162 2:1   S12   030398 ECIE:D722   SharpShooter
657 	ROM_RELOAD(                                     0x4f8000, 0x100000 )
658 ROM_END
659 
660 
661 ROM_START( sshooter17 ) /* Rev 0.5B PCB, unknown program rom date */
662 	ROM_REGION( 0x800000, "gfx", ROMREGION_ERASE00 ) /* Graphics v1.0 */
663 	ROM_LOAD16_BYTE( "u121_1-1_g10_021998_ecie-9418_sharpshooter.u121", 0x000000, 0x100000, CRC(22e27dd6) SHA1(cb9e8c450352bb116a9c0407cc8ce6d8ae9d9881) ) // U121 1:1   G10   021998 ECIE:9418   SharpShooter
664 	ROM_LOAD16_BYTE( "u120_1-2_g10_021998_ecie-3395_sharpshooter.u120", 0x000001, 0x100000, CRC(30173b1b) SHA1(366464444ce208391ca350f1639403f0c2217330) ) // U120 1:2   G10   021998 ECIE:3395   SharpShooter
665 	ROM_LOAD16_BYTE( "u125_2-1_g10_021998_ecie-4584_sharpshooter.u125", 0x200000, 0x100000, CRC(79e8520a) SHA1(682e5c7954f96db65a137f05cde67c310b85b526) ) // U125 2:1   G10   021998 ECIE:4584   SharpShooter
666 	ROM_LOAD16_BYTE( "u124_2-2_g10_021998_ecie-c816_sharpshooter.u124", 0x200001, 0x100000, CRC(8e805970) SHA1(bfc9940ed6425f136d768170275279c590da7003) ) // U124 2:2   G10   021998 ECIE:C816   SharpShooter
667 	ROM_LOAD16_BYTE( "u123_3-1_g10_021998_ecie-4167_sharpshooter.u123", 0x400000, 0x100000, CRC(d045bb62) SHA1(839209ff6a8e5db63a51a3494a6c973e0068a3c6) ) // U123 3:1   G10   021998 ECIE:4167   SharpShooter
668 	ROM_LOAD16_BYTE( "u122_3-2_g10_021998_ecie-70fc_sharpshooter.u122", 0x400001, 0x100000, CRC(163cc133) SHA1(a5e84b5060fd32362aa097d0194ce72e8a90357c) ) // U122 3:2   G10   021998 ECIE:70FC   SharpShooter
669 	ROM_LOAD16_BYTE( "u127_4-1_g10_021998_ecie-da65_sharpshooter.u127", 0x600000, 0x100000, CRC(76a7a591) SHA1(9fd7cce21b01f388966a3e8388ba95820ac10bfd) ) // U127 4:1   G10   021998 ECIE:DA65   SharpShooter
670 	ROM_LOAD16_BYTE( "u126_4-2_g10_021998_ecie-7bdf_sharpshooter.u126", 0x600001, 0x100000, CRC(ab1b9d60) SHA1(ff51a71443f7774d3abf96c2eb8ef6a54d73dd8e) ) // U126 4:2   G10   021998 ECIE:7BDF   SharpShooter
671 
672 	ROM_REGION32_BE( 0x100000, "maincpu", 0 )
673 	ROM_LOAD32_BYTE( "sharpshooter_v1.7_u113_32ad.u113", 0x00000, 0x40000, CRC(a8c96af5) SHA1(a62458156603b74e0d84ce6928f7bb868bf5a219) ) // 1:1 - labeled Sharpshooter v1.7   U113  32AD
674 	ROM_LOAD32_BYTE( "sharpshooter_v1.7_u112_511d.u112", 0x00001, 0x40000, CRC(c732d5fa) SHA1(2bcc26c8bbf55394173ca65b4b0df01bc6b719bb) ) // 1:2 - labeled Sharpshooter v1.7   U112  511D
675 	ROM_LOAD32_BYTE( "sharpshooter_v1.7_u111_a569.u111", 0x00002, 0x40000, CRC(4240fa2f) SHA1(54223207c1e228d6b836918601c0f65c2692e5bc) ) // 1:3 - labeled Sharpshooter v1.7   U111  A569
676 	ROM_LOAD32_BYTE( "sharpshooter_v1.7_u110_a30c.u110", 0x00003, 0x40000, CRC(8ae744ce) SHA1(659cd27865cf5507aae6b064c5bc24b927cf5f5a) ) // 1:4 - labeled Sharpshooter v1.7   U110  A30C
677 
678 	ROM_REGION( 0x1000000, "bsmt", 0 ) /* Sound v1.2 */
679 	ROM_LOAD( "u160_1-1_s12_030398_ecie-4791.u160", 0x000000, 0x100000, CRC(1c603d42) SHA1(880992871be52129684052d542946de0cc32ba9a) ) // U160 1:1   S12   030398 ECIE:4791   SharpShooter
680 	ROM_RELOAD(                                     0x3f8000, 0x100000 )
681 	ROM_LOAD( "u162_2-1_s12_030398_ecie-d722.u162", 0x100000, 0x100000, CRC(40ef448a) SHA1(c96f7b169be2576e9f3783af84c07259efefb812) ) // U162 2:1   S12   030398 ECIE:D722   SharpShooter
682 	ROM_RELOAD(                                     0x4f8000, 0x100000 )
683 ROM_END
684 
685 
686 ROM_START( sshooter12 ) /* Rev 0.5B PCB, program roms dated 04/17/98 */
687 	ROM_REGION( 0x800000, "gfx", ROMREGION_ERASE00 ) /* Graphics v1.0 */
688 	ROM_LOAD16_BYTE( "u121_1-1_g10_021998_ecie-9418_sharpshooter.u121", 0x000000, 0x100000, CRC(22e27dd6) SHA1(cb9e8c450352bb116a9c0407cc8ce6d8ae9d9881) ) // U121 1:1   G10   021998 ECIE:9418   SharpShooter
689 	ROM_LOAD16_BYTE( "u120_1-2_g10_021998_ecie-3395_sharpshooter.u120", 0x000001, 0x100000, CRC(30173b1b) SHA1(366464444ce208391ca350f1639403f0c2217330) ) // U120 1:2   G10   021998 ECIE:3395   SharpShooter
690 	ROM_LOAD16_BYTE( "u125_2-1_g10_021998_ecie-4584_sharpshooter.u125", 0x200000, 0x100000, CRC(79e8520a) SHA1(682e5c7954f96db65a137f05cde67c310b85b526) ) // U125 2:1   G10   021998 ECIE:4584   SharpShooter
691 	ROM_LOAD16_BYTE( "u124_2-2_g10_021998_ecie-c816_sharpshooter.u124", 0x200001, 0x100000, CRC(8e805970) SHA1(bfc9940ed6425f136d768170275279c590da7003) ) // U124 2:2   G10   021998 ECIE:C816   SharpShooter
692 	ROM_LOAD16_BYTE( "u123_3-1_g10_021998_ecie-4167_sharpshooter.u123", 0x400000, 0x100000, CRC(d045bb62) SHA1(839209ff6a8e5db63a51a3494a6c973e0068a3c6) ) // U123 3:1   G10   021998 ECIE:4167   SharpShooter
693 	ROM_LOAD16_BYTE( "u122_3-2_g10_021998_ecie-70fc_sharpshooter.u122", 0x400001, 0x100000, CRC(163cc133) SHA1(a5e84b5060fd32362aa097d0194ce72e8a90357c) ) // U122 3:2   G10   021998 ECIE:70FC   SharpShooter
694 	ROM_LOAD16_BYTE( "u127_4-1_g10_021998_ecie-da65_sharpshooter.u127", 0x600000, 0x100000, CRC(76a7a591) SHA1(9fd7cce21b01f388966a3e8388ba95820ac10bfd) ) // U127 4:1   G10   021998 ECIE:DA65   SharpShooter
695 	ROM_LOAD16_BYTE( "u126_4-2_g10_021998_ecie-7bdf_sharpshooter.u126", 0x600001, 0x100000, CRC(ab1b9d60) SHA1(ff51a71443f7774d3abf96c2eb8ef6a54d73dd8e) ) // U126 4:2   G10   021998 ECIE:7BDF   SharpShooter
696 
697 	ROM_REGION32_BE( 0x100000, "maincpu", 0 )
698 	ROM_LOAD32_BYTE( "u113_1-1_c121012_041798_9c16-3c05_sharpshooter.u113", 0x00000, 0x40000, CRC(73dbaf4b) SHA1(a85fad95d63333f4fe5647f31258b3a22c5c2c0d) ) // U113 1:1   C121012   041798 9C16:3C05   Sharpshooter
699 	ROM_LOAD32_BYTE( "u112_1-2_c121012_041798_9c16-e3bf_sharpshooter.u112", 0x00001, 0x40000, CRC(06fbc2de) SHA1(8bdfcbc33b5fc010464dcd7691f9ecd6ba2168ba) ) // U112 1:2   C121012   041798 9C16:E3BF   Sharpshooter
700 	ROM_LOAD32_BYTE( "u111_1-3_c121012_041798_9c16-d0a1_sharpshooter.u111", 0x00002, 0x40000, CRC(0b291731) SHA1(bd04f0b1b52198344df625fcddfc6c6ccb0bd923) ) // U111 1:3   C121012   041798 9C16:D0A1   Sharpshooter
701 	ROM_LOAD32_BYTE( "u110_1-4_c121012_041798_9c16-abb1_sharpshooter.u110", 0x00003, 0x40000, CRC(76841008) SHA1(ccbb88c8d63bf929814144a9d8757c9c7048fdef) ) // U110 1:4   C121012   041798 9C16:ABB1   Sharpshooter
702 
703 	ROM_REGION( 0x1000000, "bsmt", 0 ) /* Sound v1.2 */
704 	ROM_LOAD( "u160_1-1_s12_030398_ecie-4791.u160", 0x000000, 0x100000, CRC(1c603d42) SHA1(880992871be52129684052d542946de0cc32ba9a) ) // U160 1:1   S12   030398 ECIE:4791   SharpShooter
705 	ROM_RELOAD(                                     0x3f8000, 0x100000 )
706 	ROM_LOAD( "u162_2-1_s12_030398_ecie-d722.u162", 0x100000, 0x100000, CRC(40ef448a) SHA1(c96f7b169be2576e9f3783af84c07259efefb812) ) // U162 2:1   S12   030398 ECIE:D722   SharpShooter
707 	ROM_RELOAD(                                     0x4f8000, 0x100000 )
708 ROM_END
709 
710 
711 ROM_START( sshooter11 ) /* Rev 0.5B PCB, program roms dated 04/03/98 */
712 	ROM_REGION( 0x800000, "gfx", ROMREGION_ERASE00 ) /* Graphics v1.0 */
713 	ROM_LOAD16_BYTE( "u121_1-1_g10_021998_ecie-9418_sharpshooter.u121", 0x000000, 0x100000, CRC(22e27dd6) SHA1(cb9e8c450352bb116a9c0407cc8ce6d8ae9d9881) ) // U121 1:1   G10   021998 ECIE:9418   SharpShooter
714 	ROM_LOAD16_BYTE( "u120_1-2_g10_021998_ecie-3395_sharpshooter.u120", 0x000001, 0x100000, CRC(30173b1b) SHA1(366464444ce208391ca350f1639403f0c2217330) ) // U120 1:2   G10   021998 ECIE:3395   SharpShooter
715 	ROM_LOAD16_BYTE( "u125_2-1_g10_021998_ecie-4584_sharpshooter.u125", 0x200000, 0x100000, CRC(79e8520a) SHA1(682e5c7954f96db65a137f05cde67c310b85b526) ) // U125 2:1   G10   021998 ECIE:4584   SharpShooter
716 	ROM_LOAD16_BYTE( "u124_2-2_g10_021998_ecie-c816_sharpshooter.u124", 0x200001, 0x100000, CRC(8e805970) SHA1(bfc9940ed6425f136d768170275279c590da7003) ) // U124 2:2   G10   021998 ECIE:C816   SharpShooter
717 	ROM_LOAD16_BYTE( "u123_3-1_g10_021998_ecie-4167_sharpshooter.u123", 0x400000, 0x100000, CRC(d045bb62) SHA1(839209ff6a8e5db63a51a3494a6c973e0068a3c6) ) // U123 3:1   G10   021998 ECIE:4167   SharpShooter
718 	ROM_LOAD16_BYTE( "u122_3-2_g10_021998_ecie-70fc_sharpshooter.u122", 0x400001, 0x100000, CRC(163cc133) SHA1(a5e84b5060fd32362aa097d0194ce72e8a90357c) ) // U122 3:2   G10   021998 ECIE:70FC   SharpShooter
719 	ROM_LOAD16_BYTE( "u127_4-1_g10_021998_ecie-da65_sharpshooter.u127", 0x600000, 0x100000, CRC(76a7a591) SHA1(9fd7cce21b01f388966a3e8388ba95820ac10bfd) ) // U127 4:1   G10   021998 ECIE:DA65   SharpShooter
720 	ROM_LOAD16_BYTE( "u126_4-2_g10_021998_ecie-7bdf_sharpshooter.u126", 0x600001, 0x100000, CRC(ab1b9d60) SHA1(ff51a71443f7774d3abf96c2eb8ef6a54d73dd8e) ) // U126 4:2   G10   021998 ECIE:7BDF   SharpShooter
721 
722 	ROM_REGION32_BE( 0x100000, "maincpu", 0 )
723 	ROM_LOAD32_BYTE( "u113_1-1_c111012_040398_9c16-b347_sharpshooter.u113", 0x00000, 0x40000, CRC(c19693f3) SHA1(2f1576261f741d5e69d30f645aea0ed359b8dc03) ) // U113 1:1   C111012   040398 9C16:B347   Sharpshooter
724 	ROM_LOAD32_BYTE( "u112_1-2_c111012_040398_9c16-502a_sharpshooter.u112", 0x00001, 0x40000, CRC(a5ab6d82) SHA1(b2cc3fd875f0c6702cee973b77fd608f4cfe0555) ) // U112 1:2   C111012   040398 9C16:502A   Sharpshooter
725 	ROM_LOAD32_BYTE( "u111_1-3_c111012_040398_9c16-239d_sharpshooter.u111", 0x00002, 0x40000, CRC(ec209b5f) SHA1(1408b509853b325e865d0b23d237bca321e73f60) ) // U111 1:3   C111012   040398 9C16:239D   Sharpshooter
726 	ROM_LOAD32_BYTE( "u110_1-4_c111012_040398_9c16-80c3_sharpshooter.u110", 0x00003, 0x40000, CRC(0f1de201) SHA1(5001de3349357545a6a45102340caf0008b50d7b) ) // U110 1:4   C111012   040398 9C16:80C3   Sharpshooter
727 
728 	ROM_REGION( 0x1000000, "bsmt", 0 ) /* Sound v1.2 */
729 	ROM_LOAD( "u160_1-1_s12_030398_ecie-4791.u160", 0x000000, 0x100000, CRC(1c603d42) SHA1(880992871be52129684052d542946de0cc32ba9a) ) // U160 1:1   S12   030398 ECIE:4791   SharpShooter
730 	ROM_RELOAD(                                     0x3f8000, 0x100000 )
731 	ROM_LOAD( "u162_2-1_s12_030398_ecie-d722.u162", 0x100000, 0x100000, CRC(40ef448a) SHA1(c96f7b169be2576e9f3783af84c07259efefb812) ) // U162 2:1   S12   030398 ECIE:D722   SharpShooter
732 	ROM_RELOAD(                                     0x4f8000, 0x100000 )
733 ROM_END
734 
735 
736 
737 /*************************************
738  *
739  *  Driver initialization
740  *
741  *************************************/
742 
743 void policetr_state::driver_init()
744 {
745 	m_maincpu->space(AS_PROGRAM).install_write_handler(m_speedup_addr, m_speedup_addr+3, write32s_delegate(*this, FUNC(policetr_state::speedup_w)));
746 	m_speedup_data = m_rambase + m_speedup_addr/4;
747 }
748 
749 
750 
751 /*************************************
752  *
753  *  Game driver(s)
754  *
755  *************************************/
756 
757 GAME( 1996, policetr,    0,        policetr, policetr, policetr_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.3B, Rev 0.3 PCB)",        0 )
758 GAME( 1996, policetr13,  policetr, policetr, policetr, policetr_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.3)",                      0 )
759 GAME( 1996, policetr11,  policetr, policetr, polict10, policetr_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.1)",                      0 )
760 GAME( 1996, policetr10,  policetr, policetr, polict10, polict10_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.0)",                      0 )
761 
762 GAME( 1996, policetr13a, policetr, sshooter, policetr, plctr13b_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.3B Newer, Rev 0.5B PCB)", 0 )
763 GAME( 1996, policetr13b, policetr, sshooter, policetr, plctr13b_state, empty_init, ROT0, "P&P Marketing", "Police Trainer (Rev 1.3B, Rev 0.5B PCB)",       0 )
764 
765 GAME( 1998, sshooter,    0,        sshooter, sshooter, sshooter_state, empty_init, ROT0, "P&P Marketing", "Sharpshooter (Rev 1.9)",                        0 )
766 GAME( 1998, sshooter17,  sshooter, sshooter, sshooter, sshoot17_state, empty_init, ROT0, "P&P Marketing", "Sharpshooter (Rev 1.7)",                        0 )
767 GAME( 1998, sshooter12,  sshooter, sshooter, sshoot11, sshoot12_state, empty_init, ROT0, "P&P Marketing", "Sharpshooter (Rev 1.2)",                        0 )
768 GAME( 1998, sshooter11,  sshooter, sshooter, sshoot11, sshoot11_state, empty_init, ROT0, "P&P Marketing", "Sharpshooter (Rev 1.1)",                        0 )
769