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