1 // license:BSD-3-Clause
2 // copyright-holders:Olivier Galibert
3 /*
4 * Sega System 24
5 *
6 * Kudos to Charles MacDonald (http://cgfm2.emuviews.com) for his
7 * very useful research
8 *
9 * 3 Player controls for Gain Ground added by 'Unknown'
10 */
11
12 /* Missing:
13 - linescroll in special modes (qgh title, mahmajn2/qrouka attract mode)
14 - screen flipping (mix register 13 & 2)
15 - FRC timer IRQ is currently in a slight off-beat (timer should be reset every time
16 that the mode changes, but current MAME framework doesn't seem to like it)
17 */
18
19 /*
20 Sega System24 Overview
21 Sega, 1987-1994
22
23 PCB Layout
24 ----------
25
26 Note: The differences in the revisions is just the use of different sized RAMs
27 and the quantities of RAM used.
28
29 (1st Revision)
30 837-6442 SYSTEM 24 (C)SEGA 1987
31 |-------------------------------------------------------------------------------|
32 | YM2151 DSW1 EPRxxxxx.IC1 --------------------------| TMM41464-10 |
33 | DSW2 EPRxxxxx.IC2 |-------------------------- TMM41464-10 |
34 | CN2 TMM41464-10 |
35 | 68000 |---------| TMM41464-10 |
36 | |---------| |--------------| | 315-5295| TMM41464-10 |
37 | | 315-5296| |HITACHI FD1094| |(QFP100) | TMM41464-10 |
38 |-| |(QFP100) | |317-0xxx-0xx | | | TMM41464-10 |
39 | | | |--------------| |---------| TMM41464-10 |
40 |-| |---------| MB81C466-10 |
41 | MB81C466-10 |
42 | |---------| MB81C466-10 |
43 |S |---------| | 315-5295| MB81C466-10 |
44 |E 20MHz | 315-5295| |(QFP100) | MB81C466-10 |
45 |G |(QFP100) | | | MB81C466-10 |
46 |A | | |---------| MB81C466-10 |
47 | |---------| MB81C466-10 |
48 |5 |---------| |
49 |6 |---------| |---------| | 315-5293| |
50 | | 315-5294| | 315-5292| | (QFP160)| |
51 | |(QFP100) | | (QFP160)| 32MHz | | |
52 | MB81C78A-45 | | | | |---------| |
53 |-| MB81C78A-45 |---------| |---------|M5M4464-12 x4 MB81461-12 x6 |
54 | |
55 |-| YM3012 |
56 | |--------| |
57 | |315-5242| HM65256 HM65256 HM65256 M5M4464-12 x4 MB81461-12 x6 |
58 | |(QFP44) | HM65256 HM65256 HM65256 |
59 |------------|--------|---------------------------------------------------------|
60
61
62 (2nd Revision)
63 837-6442-01 SYSTEM 24 (C) SEGA 1987
64 |-------------------------------------------------------------------------------|
65 | YM2151 DSW1 EPRxxxxx.IC1 --------------------------| TMM41464-10 |
66 | DSW2 EPRxxxxx.IC2 |-------------------------- TMM41464-10 |
67 | CN2 TMM41464-10 |
68 | 68000 |---------| TMM41464-10 |
69 | |---------| |--------------| | 315-5295| TMM41464-10 |
70 | | 315-5296| |HITACHI FD1094| |(QFP100) | TMM41464-10 |
71 |-| |(QFP100) | |317-0xxx-0xx | | | TMM41464-10 |
72 | | | |--------------| |---------| TMM41464-10 |
73 |-| |---------| TMM41464-10 |
74 | TMM41464-10 |
75 | |---------| TMM41464-10 |
76 |S |---------| | 315-5295| TMM41464-10 |
77 |E 20MHz | 315-5295| |(QFP100) | TMM41464-10 |
78 |G |(QFP100) | | | TMM41464-10 |
79 |A | | |---------| TMM41464-10 |
80 | |---------| TMM41464-10 |
81 |5 |---------| |
82 |6 |---------| |---------| | 315-5293| |
83 | | 315-5294| | 315-5292| | (QFP160)| |
84 | |(QFP100) | | (QFP160)| 32MHz | | |
85 | MB81C78A-45 | | | | |---------| |
86 |-| MB81C78A-45 |---------| |---------|M5M4464-12 x4 MB81461-12 x6 |
87 | |
88 |-| YM3012 (*) |
89 | |--------| |
90 | |315-5242| HM65256 HM65256 HM65256 M5M4464-12 x4 MB81461-12 x6 |
91 | |(QFP44) | HM65256 HM65256 HM65256 |
92 |------------|--------|---------------------------------------------------------|
93 (*) Unpopulated Sockets for MB81C4256 x4
94
95
96 (3rd Revision)
97 837-6442-02 SYSTEM 24 (C) SEGA 1987
98 |-------------------------------------------------------------------------------|
99 | YM2151 DSW1 EPRxxxxx.IC1 --------------------------| TC514256-10 |
100 | DSW2 EPRxxxxx.IC2 |-------------------------- TC514256-10 |
101 | CN2 TC514256-10 |
102 | 68000 |---------| TC514256-10 |
103 | |---------| |--------------| | 315-5295| TC514256-10 |
104 | | 315-5296| |HITACHI FD1094| |(QFP100) | TC514256-10 |
105 |-| |(QFP100) | |317-0xxx-0xx | | | TC514256-10 |
106 | | | |--------------| |---------| TC514256-10 |
107 |-| |---------| |
108 | |
109 | |---------| |
110 |S |---------| | 315-5295| |
111 |E 20MHz | 315-5295| |(QFP100) | |
112 |G |(QFP100) | | | |
113 |A | | |---------| |
114 | |---------| |
115 |5 |---------| |
116 |6 |---------| |---------| | 315-5293| |
117 | | 315-5294| | 315-5292| | (QFP160)| |
118 | |(QFP100) | | (QFP160)| 32MHz | | |
119 | MB81C78A-45 | | | | |---------| |
120 |-| MB81C78A-45 |---------| |---------| MB81461-12 x6 |
121 | |
122 |-| YM3012 |
123 | |--------| |
124 | |315-5242| HM65256 HM65256 TC51832 TC514256-10 x4 MB81461-12 x6 |
125 | |(QFP44) | HM65256 HM65256 TC51832 |
126 |------------|--------|---------------------------------------------------------|
127 Notes:
128 315-5292: Custom Sega IC (QFP160, Tilemap Generator)
129 315-5293: Custom Sega IC (QFP160, Object Generator)
130 315-5294: Custom Sega IC (QFP100, Mixer Chip)
131 315-5295: Custom Sega IC (QFP100, Object Generator)
132 315-5296: Custom Sega IC (QFP100, I/O Chip)
133 315-5242: Custom Sega IC (QFP44, Colour Encoder)
134 68000 clock: 10.000MHz
135 Hitachi FD1094 clock: 10.000MHz
136 YM2151 clock: 4.000MHz
137 VSync: 58Hz
138 HSync: 24.33kHz (All System24 games require 24kHz monitor)
139 CN2 (Above PCB): Connector for ROM Board (Not used for floppy-based games)
140 CN2 (Below PCB): Connector for Floppy Controller Board (Not used for ROM-based games)
141 Main PCB Pinout same as System 16
142 Floppy Drive is a standard 1.44 High Density drive, but the controller is custom and
143 the floppy disk format is custom. The floppy disk can be read with "Anadisk"
144 depending on the PC being used and it's floppy controller. Most clone PC's can't read the
145 System 24 floppies even with "Anadisk"[1]. But many brand-name PC's can. It's likely due to the
146 proprietary nature of the components used in brand-name PC's. Generally the older and crappier
147 the PC is, the better chance you have of being able to read the floppy ;-)
148
149 [1] Actually, most can _except_ for the Hotrod disks. Those 8K sectors are deadly.
150
151
152 Floppy Controller PCB Layout
153 ----------------------------
154
155 837-6443 ___________
156 |---------------| DATA |-- ||||---|
157 | PWR |
158 | 74LS367 74LS05 |
159 | 74LS367 74LS174 |
160 | MB4107 74LS05 |
161 | |
162 | MB89311 74LS139 8MHz |
163 | CN1 |
164 | --------------------------| |
165 | |-------------------------- |
166 |--------------------------------------|
167
168
169 I/O Controller PCB Layout
170 -------------------------
171
172 834-6510
173 (sticker 834-6510-01) ___________
174 |----------------------| IDC 34 |---|
175 | |
176 | |
177 | D4701 |
178 | MSM6253RS |
179 | |
180 | D4701 MSM6253RS 74LS139 |
181 | |
182 | CN1 |
183 | --------------------------| |
184 | |-------------------------- |
185 |--------------------------------------|
186 Notes:
187 - For games other than Hot Rod, ICs other than LS139 and one uPD4701A are not
188 populated. Hot Rod doesn't seem to use the second MSM6253 (whose four inputs
189 are labeled "BLAKE" on the schematics), but has it populated anyway.
190
191 - CN1 is shown for completeness, it's actually underneath the I/O PCB.
192
193 - The custom I/O board plugs into the top connector on the main board and
194 is used for player steering controls. The wiring diagram has 8 pins coming from
195 the connector. Four are labelled 'JST4P 1P (L)', the other four are labelled
196 'JST4P 2P (R)'. I assume this is for an analog wheel or similar for player 1
197 (being on the left) and player 2 (being on the right)
198 The wiring diagram also lists some buttons for both PL1 and PL2 coming from
199 the regular 56-way edge connector.... 'Nitro' and 'Accel'
200 The manual shows a controller that looks like a spinner which they call
201 a 'sensor board' with part 839-0138 and has a photo-sensor disc, which looks
202 like it's used for steering.
203 This board is used on Hot Rod, Rough Racer and the Golf games only.
204
205
206 ROM Board Layout
207 ----------------
208
209 837-7187-01
210 171-5875-01B
211 (SYSTEM24) (C)SEGA 1989 . 1991
212 |------------------------------------------|
213 | |
214 | |
215 | J1 |
216 |CN1 ROM1.IC4 ROM2.IC5 J2 |
217 ||-| J3 |
218 || | J4 |
219 || | ROM3.IC6 ROM4.IC7 |
220 || | J5 |
221 || | J6 |
222 || | ROM5.IC8 ROM6.IC9 J7 |
223 || | J8 |
224 || | J9 |
225 || | ROM7.IC10 ROM8.IC11 |
226 || | |
227 || | 74HC4040 74LS139 |
228 ||-| EPM5032DC.IC2 |
229 |------------------------------------------|
230 Notes:
231 CN1: Connector for joining ROM board to Main Board. This connector is above and below the PCB to allow for chaining of several boards.
232
233 The ROM Daughter board has a protection device on it at location IC2. It's an Erasable Programmable Logic Device; EPLD, like a normal PLD,
234 but uses an EPROM and is erasable and re-programmable. It's type is Altera EPM5032DC. It's part of the Altera MAX 5000 Programmable Logic
235 Device Family and (generally) has it's protection bit set at the factory.
236
237 All jumpers are 2 pins, they're either shorted or not shorted. All ROMs are configured as the same type.
238 See the table below for details.
239 Jumpers to set ROM sizes:
240 2M (J1, J3, J6, J8)
241 4M (J2, J3, J7, J9)
242 8M (J2, J4, J5, J9)
243
244
245 FD1094/Floppy/ROM details
246 -------------------------
247
248 Game FD1094 Floppy ROMs Other
249 -------------------------------------------------------------------------------------------------------------------------------------------------------------
250 Hot Rod (3p Turbo) none DS3-5000-01D Main Board: EPR11338.IC1, EPR11339.IC2 I/O Controller PCB, Floppy Controller PCB
251
252 Hot Rod (4p Rev C) none DS3-5000-01A Main Board: EPR11338.IC1, EPR11339.IC2 I/O Controller PCB, Floppy Controller PCB
253 Rev C
254
255 Hot Rod (4p Japanese none DS3-5000-01A Main Board: EPR11338.IC1, EPR11339.IC2 I/O Controller PCB, Floppy Controller PCB
256 Rev B) Rev B
257
258 Scramble Spirits none DS3-5000-02? Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
259
260 Scramble Spirits 317-0058-02D DS3-5000-02D Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
261 (Encrypted Version)
262
263 Gain Ground (Japan) 317-0058-03B DS3-5000-03B Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
264
265 Gain Ground 317-0058-03D DS3-5000-03D Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
266
267 Crack Down (Japan) 317-0058-04B DS3-5000-04B Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
268 Rev A
269
270 Crack Down 317-0058-04D DS3-5000-04D Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
271
272 Super Masters Golf 317-0058-05B DS3-5000-05B Main Board: EPR12186.IC1, EPR12187.IC2 I/O Controller PCB, Floppy Controller PCB
273 Rev B
274
275 Super Masters Golf 317-0058-05D DS3-5000-05D Main Board: EPR12186.IC1, EPR12187.IC2 I/O Controller PCB, Floppy Controller PCB
276 Rev D
277
278 Rough Racer 317-0058-06B DS3-5000-06B Main Board: EPR12186.IC1, EPR12187.IC2 I/O Controller PCB, Floppy Controller PCB
279
280 Bonanza Bros none DS3-5000-07D Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
281 Daughter Board: MPR13187.IC4, MPR13188.IC5, MPR13189.IC6
282 MPR13190.IC7
283 EPLD: 317-0156
284
285 Quiz Syukudai wo 317-0058-08B DS3-5000-08B Main Board: EPR12186.IC1, EPR12187.IC2 Floppy Controller PCB
286 Wasuremashita
287
288 Dynamic Country Club 317-0058-09D DS3-5000-09D Main Board: EPR13947.IC1, EPR13948.IC2 I/O Controller PCB, Floppy Controller PCB
289 (Disk version)
290
291 Dynamic Country Club none none Main Board: EPR13947.IC1, EPR13948.IC2
292 (ROM version) Daughter Board: EPR15345.IC4 EPR15344.IC5, MPR14097.IC6
293 MPR14096.IC7
294 EPLD: 317-0177
295
296 Quiz Mekuromeku Story none none Main Board: EPR15342.IC1, EPR15343.IC2
297 Daughter Board: EPR15344.IC4, EPR15345.IC5, EPR15346.IC6
298 EPR15347.IC7, EPR15348.IC8, EPR15349.IC9
299 EPLD: 317-0205
300
301 Tokoro San no none none Main Board: EPR14812.IC1, EPR14813.IC2
302 MahMahjan Daughter Board: MPR14819.IC4, MPR14820.IC5, MPR14821.IC6
303 MPR14822IC.7, MPR14823.IC8, MPR14824.IC9
304 MPR14825.IC10, MPR14826.IC11
305 EPLD: 317-0200
306
307 Quiz Rouka Ni none none Main Board: EPR14484.IC1, EPR14485.IC2
308 Tattenasai Daughter Board: EPR14482.IC5, EPR14483.IC7
309 EPLD: 317-0191
310
311 Tokoro San no none none Main Board: EPR16798.IC1, EPR16799.IC2
312 MahMahjan 2 Daughter Board: MPR16800.IC4, MPR16801.IC5, MPR16802.IC6
313 MPR16803.IC7, MPR16804.IC8, MPR16805.IC9
314 MPR16806.IC10, MPR16807.IC11
315 EPLD: 317-0220
316
317 Quiz Ghost Hunter none none Main Board: EPR16899B.IC1, EPR16900B.IC2
318 Daughter Board: MPR16901A.IC4, MPR16902A.IC5, MPR16903.IC6
319 MPR16904.IC7, MPR16905.IC8, MPR16906.IC9
320 MPR16907.IC10, MPR16908.IC11
321 EPLD: 317-0226
322
323 Notes:
324 A regular 68000-10 is used in position IC3. If used, the Hitachi CPU sits at position IC4.
325 Where FD1094 is listed as 'none', a standard 68000 CPU is used instead at IC4 on the PCB.
326
327 The last 3 digits of the floppy number is also the last part of the Hitachi CPU number....they're a matching pair.
328 So if one had the Hitachi part number and a floppy without a label, it's possible to create the correct floppy disk name from
329 the last 3 digits of the Hitachi FD1094 part number.
330
331 */
332
333
334 /* system24temp_ functions / variables are from shared rewrite files,
335 once the rest of the rewrite is complete they can be removed, I
336 just made a copy & renamed them for now to avoid any conflicts
337 */
338
339 #include "emu.h"
340 #include "includes/segas24.h"
341 #include "includes/segaipt.h"
342
343 #include "cpu/m68000/m68000.h"
344 #include "machine/fd1094.h"
345 #include "machine/msm6253.h"
346 #include "machine/nvram.h"
347 #include "machine/upd4701.h"
348 #include "machine/315_5296.h"
349 #include "sound/dac.h"
350 #include "sound/ym2151.h"
351 #include "video/segaic24.h"
352 #include "speaker.h"
353
354
355 #define MASTER_CLOCK XTAL(20'000'000)
356 #define VIDEO_CLOCK XTAL(32'000'000)
357 #define TIMER_CLOCK (VIDEO_CLOCK/4)
358 #define HSYNC_CLOCK (VIDEO_CLOCK/2/656.0)
359 /* TODO: understand why divisors don't match at all with the reference */
360 #define FRC_CLOCK_MODE0 (MASTER_CLOCK/2)/24 // /16 according to Charles
361 #define FRC_CLOCK_MODE1 (MASTER_CLOCK/2)/1536 // /1024 according to Charles, but /1536 sounds better
362
363 #define FDC_LEGACY_LOG 0
364 #define FDC_LOG(x) do { if (FDC_LEGACY_LOG) logerror x; } while (0)
365
366 enum {
367 IRQ_YM2151 = 1,
368 IRQ_TIMER = 2,
369 IRQ_VBLANK = 3,
370 IRQ_SPRITE = 4,
371 IRQ_FRC = 5
372 };
373
374 // Floppy Disk Controller
375
fdc_init()376 void segas24_state::fdc_init()
377 {
378 m_fdc_track_side = 0;
379 m_fdc_mode = 0;
380 m_fdc_status = 0;
381 m_fdc_track = 0;
382 m_fdc_sector = 0;
383 m_fdc_data = 0;
384 m_fdc_phys_track = 0;
385 m_fdc_irq = false;
386 m_fdc_drq = false;
387 m_fdc_index_count = 0;
388 }
389
device_post_load()390 void segas24_state::device_post_load()
391 {
392 switch(m_fdc_mode) {
393 case 0x9:
394 case 0xb:
395 m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side) + (m_track_size - m_fdc_span)];
396 break;
397 default:
398 break;
399 }
400 }
401
fdc_r(offs_t offset)402 uint16_t segas24_state::fdc_r(offs_t offset)
403 {
404 if(!m_track_size)
405 return 0xffff;
406
407 switch(offset) {
408 case 0:
409 m_fdc_irq = false;
410 return m_fdc_status;
411 case 1:
412 return m_fdc_track;
413 case 2:
414 return m_fdc_sector;
415 case 3:
416 default: {
417 int res = m_fdc_data;
418 if(m_fdc_drq) {
419 m_fdc_span--;
420 // FDC_LOG(("Read %02x (%d)\n", res, m_fdc_span));
421 if(m_fdc_span) {
422 m_fdc_pt++;
423 m_fdc_data = *m_fdc_pt;
424 } else {
425 FDC_LOG(("FDC: transfert complete\n"));
426 m_fdc_drq = false;
427 m_fdc_status = 0;
428 m_fdc_irq = true;
429 }
430 } else
431 FDC_LOG(("FDC: data read with drq down\n"));
432 return res;
433 }
434 }
435 }
436
fdc_w(offs_t offset,uint16_t data,uint16_t mem_mask)437 void segas24_state::fdc_w(offs_t offset, uint16_t data, uint16_t mem_mask)
438 {
439 if(!m_track_size)
440 return;
441
442 if(ACCESSING_BITS_0_7) {
443 data &= 0xff;
444 switch(offset) {
445 case 0:
446 m_fdc_irq = false;
447 switch(data >> 4) {
448 case 0x0:
449 FDC_LOG(("FDC: Restore\n"));
450 m_fdc_phys_track = m_fdc_track = 0;
451 m_fdc_irq = true;
452 m_fdc_status = 4;
453 break;
454 case 0x1:
455 FDC_LOG(("FDC: Seek %d\n", m_fdc_data));
456 m_fdc_phys_track = m_fdc_track = m_fdc_data;
457 m_fdc_irq = true;
458 m_fdc_status = m_fdc_track ? 0 : 4;
459 break;
460 case 0x9:
461 m_fdc_track_side = (data & 8 ? 1 : 0);
462 m_fdc_mode = 0x9;
463 FDC_LOG(("Read multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, m_fdc_track_side, m_fdc_phys_track));
464 m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side)];
465 m_fdc_span = m_track_size;
466 m_fdc_status = 3;
467 m_fdc_drq = true;
468 m_fdc_data = *m_fdc_pt;
469 break;
470 case 0xb:
471 m_fdc_track_side = (data & 8 ? 1 : 0);
472 m_fdc_mode = 0xb;
473 FDC_LOG(("Write multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, m_fdc_track_side, m_fdc_phys_track));
474 m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side)];
475 m_fdc_span = m_track_size;
476 m_fdc_status = 3;
477 m_fdc_drq = true;
478 break;
479 case 0xd:
480 m_fdc_mode = 0xd;
481 FDC_LOG(("FDC: Forced interrupt\n"));
482 m_fdc_span = 0;
483 m_fdc_drq = false;
484 m_fdc_irq = BIT(data, 0);
485 m_fdc_status = 0;
486 break;
487 case 0xf:
488 if(data == 0xfe)
489 FDC_LOG(("FDC: Assign mode %02x\n", m_fdc_data));
490 else if(data == 0xfd)
491 FDC_LOG(("FDC: Assign parameter %02x\n", m_fdc_data));
492 else
493 FDC_LOG(("FDC: Unknown command %02x\n", data));
494 break;
495 default:
496 FDC_LOG(("FDC: Unknown command %02x\n", data));
497 break;
498 }
499 break;
500 case 1:
501 FDC_LOG(("FDC: Track register %02x\n", data));
502 m_fdc_track = data;
503 break;
504 case 2:
505 FDC_LOG(("FDC: Sector register %02x\n", data));
506 m_fdc_sector = data;
507 break;
508 case 3:
509 if(m_fdc_drq) {
510 // FDC_LOG("Write %02x (%d)\n", data, m_fdc_span);
511 *m_fdc_pt++ = data;
512 m_fdc_span--;
513 if(!m_fdc_span) {
514 FDC_LOG(("FDC: transfert complete\n"));
515 m_fdc_drq = false;
516 m_fdc_status = 0;
517 m_fdc_irq = true;
518 }
519 } else
520 FDC_LOG(("FDC: Data register %02x\n", data));
521 m_fdc_data = data;
522 break;
523 }
524 }
525 }
526
fdc_status_r()527 uint16_t segas24_state::fdc_status_r()
528 {
529 if(!m_track_size)
530 return 0xffff;
531
532 return 0x90 | (m_fdc_irq ? 2 : 0) | (m_fdc_drq ? 1 : 0) | (m_fdc_phys_track ? 0x40 : 0) | (m_fdc_index_count ? 0x20 : 0);
533 }
534
fdc_ctrl_w(offs_t offset,uint16_t data,uint16_t mem_mask)535 void segas24_state::fdc_ctrl_w(offs_t offset, uint16_t data, uint16_t mem_mask)
536 {
537 if(ACCESSING_BITS_0_7)
538 FDC_LOG(("FDC control %02x\n", data & 0xff));
539 }
540
541
542 // I/O Mappers
543
dcclub_p1_r()544 uint8_t segas24_state::dcclub_p1_r()
545 {
546 static const uint8_t pos[16] = { 0, 1, 3, 2, 6, 4, 12, 8, 9, 0, 0, 0 };
547 return (m_p1->read() & 0xf) | ((~pos[m_paddle->read()>>4]<<4) & 0xf0);
548 }
549
dcclub_p3_r()550 uint8_t segas24_state::dcclub_p3_r()
551 {
552 static const uint8_t pos[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2 };
553 return(~pos[m_paddle->read()>>4] & 0x03) | 0xfc;
554 }
555
556
mahmajn_input_line_r()557 uint8_t segas24_state::mahmajn_input_line_r()
558 {
559 return ~(1 << m_cur_input_line);
560 }
561
mahmajn_inputs_r()562 uint8_t segas24_state::mahmajn_inputs_r()
563 {
564 return m_mj_inputs[m_cur_input_line].read_safe(0xff);
565 }
566
mahmajn_mux_w(uint8_t data)567 void segas24_state::mahmajn_mux_w(uint8_t data)
568 {
569 if(data & 4)
570 m_cur_input_line = (m_cur_input_line + 1) & 7;
571 }
572
hotrod_lamps_w(uint8_t data)573 void segas24_state::hotrod_lamps_w(uint8_t data)
574 {
575 // Lamps
576 }
577
iod_r(offs_t offset)578 uint16_t segas24_state::iod_r(offs_t offset)
579 {
580 logerror("IO daughterboard read %02x %s\n", offset, machine().describe_context());
581 return 0xffff;
582 }
583
iod_w(offs_t offset,uint16_t data,uint16_t mem_mask)584 void segas24_state::iod_w(offs_t offset, uint16_t data, uint16_t mem_mask)
585 {
586 logerror("IO daughterboard write %02x, %04x & %04x %s\n", offset, data, mem_mask, machine().describe_context());
587 }
588
589 /* HACK for Gain Ground to avoid 'forced free play' issue
590
591 Notes from Olivier
592
593 The encrypted CPU does:
594
595 849c: moveq #-1, d1
596 849e: move.w 0xa00000, d0
597 84a4: cmp.w 0xa00000, d0
598 84aa: beq.s 84a4
599 84ac: add.w #0x200, d0
600 84b0: andi.w #0xfff, d0
601 84b4: cmp.w 0xa00000, d0 // 16 cycles
602 84ba: dbeq d1, 84b4 // 10 cycles
603 84be: addi.w #0x1b5f, d1
604 84c2: bpl 84c8
605 84c4: st 0x404 // Force freeplay
606 84c8: ...
607
608
609 a00000 is the timer 12bit counter. It is configured to be clocked by
610 the hsync pulse. That code counts how many loops it takes for the
611 counter to count 512 times. The force freeplay happens if the count
612 is more than 7007.
613
614 Pixel clock is 16MHz, hsync is every 656 pixels, cpu clock is 10MHz.
615 So that's 656*10/16=410 cpu clocks per hsync, or 410*512=209902 total.
616 With 26 cycles per loop, that's 8073 loops. Freeplay it is.
617
618 --- Update from Charles MacDonald ---
619
620 I ran some tests. For the two CPUs, A (68000) and B (FD1094), normally
621 there are no wait states when CPU A accesses $A00000. As that address
622 is on CPU A's bus, CPU B's accesses to it take twice as long (eight 10 MHz
623 clocks instead of four) due to contention. The only exception is when
624 CPU A is completely idle from a STOP instruction, at which point CPU B
625 can access that memory at full speed (four clocks per access).
626
627 Assuming Gain Ground has CPU A running code out of BIOS ROM or work RAM,
628 and CPU B is running out of work RAM, then each one of those $A00000
629 accesses will eat up double the time.
630
631 The other factor is DRAM refresh for the work RAM, both CPUs have some
632 memory access stretched out by four cycles every 19 to 20 ms. It looks
633 like both DRAM banks are refreshed in parallel which seems to explain
634 why refresh on CPU A's bus doesn't count as contention for CPU B and
635 vice-versa. So there's only refresh event that eats up time for both
636 CPUs to worry about.
637
638
639
640 */
641
TIMER_CALLBACK_MEMBER(segas24_state::gground_hack_timer_callback)642 TIMER_CALLBACK_MEMBER(segas24_state::gground_hack_timer_callback)
643 {
644 m_subcpu->set_clock_scale(1.0f);
645 }
646
647
648 // Cpu #1 reset control
649
650
WRITE_LINE_MEMBER(segas24_state::cnt1)651 WRITE_LINE_MEMBER(segas24_state::cnt1)
652 {
653 if (bool(state) != m_cnt1)
654 {
655 if (state)
656 {
657 m_subcpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
658 m_subcpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
659 //osd_printf_debug("enable 2nd cpu!\n");
660 //machine().debug_break();
661 if (m_gground_hack_timer)
662 {
663 m_subcpu->set_clock_scale(0.7f); // reduce clock speed temporarily so a check passes, see notes above
664 m_gground_hack_timer->adjust(attotime::from_seconds(2));
665 }
666 }
667 else
668 m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
669 }
670
671 m_cnt1 = bool(state);
672 }
673
674
675 // Rom board bank access
676
677
reset_bank()678 void segas24_state::reset_bank()
679 {
680 if (m_romboard != nullptr)
681 {
682 m_rombank[0]->set_entry(m_curbank & 15);
683 m_rombank[1]->set_entry(m_curbank & 15);
684 }
685 }
686
curbank_r()687 uint8_t segas24_state::curbank_r()
688 {
689 return m_curbank;
690 }
691
curbank_w(uint8_t data)692 void segas24_state::curbank_w(uint8_t data)
693 {
694 m_curbank = data;
695 reset_bank();
696 }
697
frc_mode_r()698 uint8_t segas24_state::frc_mode_r()
699 {
700 return m_frc_mode & 1;
701 }
702
frc_mode_w(uint8_t data)703 void segas24_state::frc_mode_w(uint8_t data)
704 {
705 /* reset frc if a write happens here */
706 m_frc_cnt_timer->reset();
707 m_frc_mode = data & 1;
708 }
709
frc_r()710 uint8_t segas24_state::frc_r()
711 {
712 int32_t result = (m_frc_cnt_timer->time_elapsed() * (m_frc_mode ? FRC_CLOCK_MODE1 : FRC_CLOCK_MODE0).dvalue()).as_double();
713
714 result %= ((m_frc_mode) ? 0x67 : 0x100);
715
716 return result;
717 }
718
frc_w(uint8_t data)719 void segas24_state::frc_w(uint8_t data)
720 {
721 /* Undocumented behaviour, Bonanza Bros. seems to use this for irq ack'ing ... */
722 m_maincpu->set_input_line(IRQ_FRC+1, CLEAR_LINE);
723 m_subcpu->set_input_line(IRQ_FRC+1, CLEAR_LINE);
724 }
725
726
727 // Protection magic latch
728
729 const uint8_t segas24_state::s_mahmajn_mlt[8] = { 5, 1, 6, 2, 3, 7, 4, 0 };
730 const uint8_t segas24_state::s_mahmajn2_mlt[8] = { 6, 0, 5, 3, 1, 4, 2, 7 };
731 const uint8_t segas24_state::s_qgh_mlt[8] = { 3, 7, 4, 0, 2, 6, 5, 1 };
732 const uint8_t segas24_state::s_bnzabros_mlt[8] = { 2, 4, 0, 5, 7, 3, 1, 6 };
733 const uint8_t segas24_state::s_qrouka_mlt[8] = { 1, 6, 4, 7, 0, 5, 3, 2 };
734 const uint8_t segas24_state::s_quizmeku_mlt[8] = { 0, 3, 2, 4, 6, 1, 7, 5 };
735 const uint8_t segas24_state::s_dcclub_mlt[8] = { 4, 7, 3, 0, 2, 6, 5, 1 };
736
737
mlatch_r()738 uint8_t segas24_state::mlatch_r()
739 {
740 return m_mlatch;
741 }
742
mlatch_w(uint8_t data)743 void segas24_state::mlatch_w(uint8_t data)
744 {
745 int i;
746 uint8_t mxor = 0;
747 if(!m_mlatch_table) {
748 logerror("Protection: magic latch accessed but no table loaded %s\n", machine().describe_context());
749 return;
750 }
751
752 if(data != 0xff) {
753 for(i=0; i<8; i++)
754 if(m_mlatch & (1<<i))
755 mxor |= 1 << m_mlatch_table[i];
756 m_mlatch = data ^ mxor;
757 logerror("Magic latching %02x ^ %02x as %02x %s\n", data & 0xff, mxor, m_mlatch, machine().describe_context());
758 } else {
759 logerror("Magic latch reset %s\n", machine().describe_context());
760 m_mlatch = 0x00;
761 }
762 }
763
764
765 // Timers and IRQs
766
irq_timer_sync()767 void segas24_state::irq_timer_sync()
768 {
769 attotime ctime = machine().time();
770
771 switch(m_irq_tmode) {
772 case 0:
773 break;
774 case 1: {
775 // Don't remove the floor(), the value may be slightly negative
776 int ppos = floor((m_irq_synctime - m_irq_vsynctime).as_double() * HSYNC_CLOCK.dvalue());
777 int cpos = floor((ctime - m_irq_vsynctime).as_double() * HSYNC_CLOCK.dvalue());
778 m_irq_tval += cpos-ppos;
779 break;
780 }
781 case 2: {
782 fatalerror("segas24_state::irq_timer_sync - case 2\n");
783 }
784 case 3: {
785 int ppos = floor((m_irq_synctime - m_irq_vsynctime).as_double() * TIMER_CLOCK.dvalue());
786 int cpos = floor((ctime - m_irq_vsynctime).as_double() * TIMER_CLOCK.dvalue());
787 m_irq_tval += cpos-ppos;
788 break;
789 }
790 }
791
792 m_irq_synctime = ctime;
793 }
794
irq_timer_start(int old_tmode)795 void segas24_state::irq_timer_start(int old_tmode)
796 {
797 switch(m_irq_tmode) {
798 case 0:
799 if(old_tmode) {
800 m_irq_tval++;
801 if(m_irq_tval == 0x1000)
802 m_irq_timer->adjust(attotime::zero);
803 else
804 m_irq_timer->enable(false);
805 }
806 break;
807 case 1: {
808 int count = 0x1000 - m_irq_tval;
809 m_irq_timer->adjust(attotime::from_hz(HSYNC_CLOCK)*count);
810 break;
811 }
812 case 2:
813 fatalerror("segas24_state::irq_timer_start - case 2\n");
814 case 3: {
815 int count = 0x1000 - m_irq_tval;
816 m_irq_timer->adjust(attotime::from_hz(TIMER_CLOCK)*count);
817 break;
818 }
819 }
820 }
821
TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_cb)822 TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_cb)
823 {
824 irq_timer_sync();
825
826 if(m_irq_tval != 0x1000)
827 fprintf(stderr, "Error: timer desync %x != 1000\n", m_irq_tval);
828
829 m_irq_tval = m_irq_tdata;
830 irq_timer_start(m_irq_tmode);
831
832 m_irq_timer_pend0 = m_irq_timer_pend1 = true;
833 if(m_irq_allow0 & (1 << IRQ_TIMER))
834 m_maincpu->set_input_line(IRQ_TIMER+1, ASSERT_LINE);
835 if(m_irq_allow1 & (1 << IRQ_TIMER))
836 m_subcpu->set_input_line(IRQ_TIMER+1, ASSERT_LINE);
837
838 if (m_irq_tmode == 1 || m_irq_tmode == 2)
839 {
840 // m_screen->update_now();
841 m_screen->update_partial(m_screen->vpos());
842 }
843 }
844
TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_clear_cb)845 TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_clear_cb)
846 {
847 m_irq_sprite = m_irq_vblank = false;
848 m_maincpu->set_input_line(IRQ_VBLANK+1, CLEAR_LINE);
849 m_maincpu->set_input_line(IRQ_SPRITE+1, CLEAR_LINE);
850 m_subcpu->set_input_line(IRQ_VBLANK+1, CLEAR_LINE);
851 m_subcpu->set_input_line(IRQ_SPRITE+1, CLEAR_LINE);
852 }
853
TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_frc_cb)854 TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_frc_cb)
855 {
856 if(m_irq_allow0 & (1 << IRQ_FRC) && m_frc_mode == 1)
857 m_maincpu->set_input_line(IRQ_FRC+1, ASSERT_LINE);
858
859 if(m_irq_allow1 & (1 << IRQ_FRC) && m_frc_mode == 1)
860 m_subcpu->set_input_line(IRQ_FRC+1, ASSERT_LINE);
861 }
862
irq_init()863 void segas24_state::irq_init()
864 {
865 m_irq_tdata = 0;
866 m_irq_tmode = 0;
867 m_irq_allow0 = 0;
868 m_irq_allow1 = 0;
869 m_irq_timer_pend0 = false;
870 m_irq_timer_pend1 = false;
871 m_irq_vblank = false;
872 m_irq_sprite = false;
873 m_irq_tval = 0;
874 m_irq_synctime = attotime::zero;
875 m_irq_vsynctime = attotime::zero;
876 }
877
irq_w(offs_t offset,uint16_t data,uint16_t mem_mask)878 void segas24_state::irq_w(offs_t offset, uint16_t data, uint16_t mem_mask)
879 {
880 switch(offset) {
881 case 0: {
882 irq_timer_sync();
883 COMBINE_DATA(&m_irq_tdata);
884 m_irq_tdata &= 0xfff;
885 irq_timer_start(m_irq_tmode);
886 break;
887 }
888 case 1:
889 if(ACCESSING_BITS_0_7) {
890 uint8_t old_tmode = m_irq_tmode;
891 irq_timer_sync();
892 m_irq_tmode = data & 3;
893 irq_timer_start(old_tmode);
894 }
895 break;
896 case 2:
897 m_irq_allow0 = data & 0x3f;
898 m_irq_timer_pend0 = false;
899 m_maincpu->set_input_line(IRQ_TIMER+1, CLEAR_LINE);
900 m_maincpu->set_input_line(IRQ_YM2151+1, m_irq_yms && (m_irq_allow0 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE);
901 m_maincpu->set_input_line(IRQ_VBLANK+1, m_irq_vblank && (m_irq_allow0 & (1 << IRQ_VBLANK)) ? ASSERT_LINE : CLEAR_LINE);
902 m_maincpu->set_input_line(IRQ_SPRITE+1, m_irq_sprite && (m_irq_allow0 & (1 << IRQ_SPRITE)) ? ASSERT_LINE : CLEAR_LINE);
903 //m_maincpu->set_input_line(IRQ_FRC+1, m_irq_frc && (m_irq_allow0 & (1 << IRQ_FRC)) ? ASSERT_LINE : CLEAR_LINE);
904 break;
905 case 3:
906 m_irq_allow1 = data & 0x3f;
907 m_irq_timer_pend1 = false;
908 m_subcpu->set_input_line(IRQ_TIMER+1, CLEAR_LINE);
909 m_subcpu->set_input_line(IRQ_YM2151+1, m_irq_yms && (m_irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE);
910 m_subcpu->set_input_line(IRQ_VBLANK+1, m_irq_vblank && (m_irq_allow1 & (1 << IRQ_VBLANK)) ? ASSERT_LINE : CLEAR_LINE);
911 m_subcpu->set_input_line(IRQ_SPRITE+1, m_irq_sprite && (m_irq_allow1 & (1 << IRQ_SPRITE)) ? ASSERT_LINE : CLEAR_LINE);
912 //m_subcpu->set_input_line(IRQ_FRC+1, m_irq_frc && (m_irq_allow1 & (1 << IRQ_FRC)) ? ASSERT_LINE : CLEAR_LINE);
913 break;
914 }
915 }
916
917 // gground bp at 849c (84a4)
918 // cmp.w $a00000, d0 | 16
919 // dbeq d1, 84b4 | 10
920 // 26 cycles/tour
921 // 0x200 counts
922 // 656 cycles/ligne
923 // 656*0x200/26 = 12918 (3276) -> cd89 (got e087, delta = 1f78, 8056)
924 // 410 cycles/ligne
925 // 410*0x200/26 = 8073
926
irq_r(offs_t offset)927 uint16_t segas24_state::irq_r(offs_t offset)
928 {
929 switch(offset) {
930 case 2:
931 m_irq_timer_pend0 = false;
932 m_maincpu->set_input_line(IRQ_TIMER+1, CLEAR_LINE);
933 break;
934 case 3:
935 m_irq_timer_pend1 = false;
936 m_subcpu->set_input_line(IRQ_TIMER+1, CLEAR_LINE);
937 break;
938 }
939 irq_timer_sync();
940 return m_irq_tval & 0xfff;
941 }
942
TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_vbl)943 TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_vbl)
944 {
945 int irq, mask;
946 int scanline = param;
947
948 /* TODO: perhaps vblank irq happens at 400, sprite IRQ certainly don't at 0! */
949 if(scanline == 0) { irq = IRQ_SPRITE; m_irq_sprite = true; }
950 else if(scanline == 384) { irq = IRQ_VBLANK; m_irq_vblank = true; }
951 else
952 return;
953
954 m_irq_timer_clear->adjust(attotime::from_hz(HSYNC_CLOCK));
955
956 mask = 1 << irq;
957
958 if(m_irq_allow0 & mask)
959 m_maincpu->set_input_line(1+irq, ASSERT_LINE);
960
961 if(m_irq_allow1 & mask)
962 m_subcpu->set_input_line(1+irq, ASSERT_LINE);
963
964 if(scanline == 384) {
965 // Ensure one index pulse every 20 frames
966 // The is some code in bnzabros at 0x852 that makes it crash
967 // if the pulse train is too fast
968 m_fdc_index_count++;
969 if(m_fdc_index_count >= 20)
970 m_fdc_index_count = 0;
971 }
972
973 irq_timer_sync();
974 m_irq_vsynctime = machine().time();
975 }
976
WRITE_LINE_MEMBER(segas24_state::irq_ym)977 WRITE_LINE_MEMBER(segas24_state::irq_ym)
978 {
979 m_irq_yms = state;
980 m_maincpu->set_input_line(IRQ_YM2151+1, m_irq_yms && (m_irq_allow0 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE);
981 m_subcpu->set_input_line(IRQ_YM2151+1, m_irq_yms && (m_irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE);
982 }
983
984
985 // 315-5242
986
paletteram_r(offs_t offset)987 uint16_t segas24_state::paletteram_r(offs_t offset)
988 {
989 return m_paletteram[offset];
990 }
991
paletteram_w(offs_t offset,uint16_t data,uint16_t mem_mask)992 void segas24_state::paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
993 {
994 int r, g, b;
995 COMBINE_DATA (m_paletteram + offset);
996 data = m_paletteram[offset];
997
998 r = (data & 0x00f) << 4;
999 if(data & 0x1000)
1000 r |= 8;
1001
1002 g = data & 0x0f0;
1003 if(data & 0x2000)
1004 g |= 8;
1005
1006 b = (data & 0xf00) >> 4;
1007 if(data & 0x4000)
1008 b |= 8;
1009
1010 r |= r >> 5;
1011 g |= g >> 5;
1012 b |= b >> 5;
1013
1014 m_palette->set_pen_color(offset, rgb_t(r, g, b));
1015
1016 if(data & 0x8000) {
1017 r = 255-0.6*(255-r);
1018 g = 255-0.6*(255-g);
1019 b = 255-0.6*(255-b);
1020 } else {
1021 r = 0.6*r;
1022 g = 0.6*g;
1023 b = 0.6*b;
1024 }
1025 m_palette->set_pen_color(offset+m_palette->entries()/2, rgb_t(r, g, b));
1026 }
1027
1028
1029 /*
1030 CPU1:
1031 00-03 ROM (1)
1032 04-07 ROM
1033 08-0f ramlo (2)
1034 10-13 ROM
1035 14-17 ROM
1036 f0-f3 ramprg (3)
1037 fc-ff ramhi (4)
1038
1039 CPU2:
1040 00-03 ramprg
1041 04-07 ROM
1042 08-0f ramlo
1043 10-13 ROM
1044 14-17 ROM
1045 f0-f3 ramprg
1046 fc-ff ramhi
1047 */
1048
1049 /*************************************
1050 *
1051 * Shared memory handlers
1052 *
1053 *************************************/
1054
1055 /*
1056 Both CPUs have the same memory map, except for the first 512K where
1057 CPU A has ROM and CPU B has work RAM mapped there.
1058
1059 The memory map can be broken down into the following regions:
1060
1061 000000-07FFFF : BIOS ROM (for CPU A only)
1062 CPU B work RAM (for CPU B only)
1063 080000-0FFFFF : CPU A work RAM
1064 100000-1FFFFF : BIOS ROM
1065 200000-3FFFFF : Tilemap generator
1066 400000-5FFFFF : Mixer chip
1067 600000-7FFFFF : Sprite generator
1068 800000-9FFFFF : I/O chip
1069 A00000-AFFFFF : Timer and interrupt controller chip
1070 B00000-EFFFFF : Extra chip selects for expansion
1071 F00000-F7FFFF : CPU B work RAM
1072 F80000-FFFFFF : CPU A work RAM
1073
1074 The BIOS ROM mirror at $100000 is common to both CPUs.
1075 */
1076
1077
common_map(address_map & map)1078 void segas24_state::common_map(address_map &map)
1079 {
1080 map(0x080000, 0x0bffff).mirror(0x040000).ram().share("share1");
1081 map(0x100000, 0x13ffff).mirror(0x0c0000).rom().region("maincpu", 0);
1082 map(0x200000, 0x20ffff).mirror(0x110000).rw("tile", FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w));
1083 map(0x220000, 0x220001).mirror(0x11fffe).nopw(); /* Horizontal split position (ABSEL) */
1084 map(0x240000, 0x240001).mirror(0x11fffe).nopw(); /* Scanline trigger position (XHOUT) */
1085 map(0x260000, 0x260001).mirror(0x10fffe).nopw(); /* Frame trigger position (XVOUT) */
1086 map(0x270000, 0x270001).mirror(0x10fffe).nopw(); /* Synchronization mode */
1087 map(0x280000, 0x29ffff).mirror(0x160000).rw("tile", FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w));
1088 map(0x400000, 0x403fff).mirror(0x1f8000).rw(FUNC(segas24_state::paletteram_r), FUNC(segas24_state::paletteram_w)).share("paletteram");
1089 map(0x404000, 0x40401f).mirror(0x1fbfe0).rw("mixer", FUNC(segas24_mixer_device::read), FUNC(segas24_mixer_device::write));
1090 map(0x600000, 0x63ffff).mirror(0x180000).rw("sprite", FUNC(segas24_sprite_device::read), FUNC(segas24_sprite_device::write));
1091 map(0x800000, 0x80003f).mirror(0x1ffe00).rw("io", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
1092 map(0x800040, 0x80007f).mirror(0x1ffe00).rw(FUNC(segas24_state::iod_r), FUNC(segas24_state::iod_w));
1093 map(0x800100, 0x800103).mirror(0x1ffe00).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
1094 map(0xa00000, 0xa00007).mirror(0x0ffff8).rw(FUNC(segas24_state::irq_r), FUNC(segas24_state::irq_w));
1095 map(0xb00000, 0xb00007).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_r), FUNC(segas24_state::fdc_w));
1096 map(0xb00008, 0xb0000f).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_status_r), FUNC(segas24_state::fdc_ctrl_w));
1097 map(0xbc0003, 0xbc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
1098 map(0xbc0005, 0xbc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
1099 map(0xbc0007, 0xbc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
1100 map(0xcc0003, 0xcc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
1101 map(0xcc0005, 0xcc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
1102 map(0xcc0007, 0xcc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
1103 map(0xf00000, 0xf3ffff).mirror(0x040000).ram().share("subcpu");
1104 map(0xf80000, 0xfbffff).mirror(0x040000).ram().share("share1");
1105 }
1106
rombd_common_map(address_map & map)1107 void segas24_state::rombd_common_map(address_map &map)
1108 {
1109 map(0xb80000, 0xbbffff).bankr("rombank1");
1110 map(0xbc0001, 0xbc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
1111 map(0xc80000, 0xcbffff).bankr("rombank2");
1112 map(0xcc0001, 0xcc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
1113 }
1114
roughrac_common_map(address_map & map)1115 void segas24_state::roughrac_common_map(address_map &map)
1116 {
1117 map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd4701", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
1118 }
1119
hotrod_common_map(address_map & map)1120 void segas24_state::hotrod_common_map(address_map &map)
1121 {
1122 map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd1", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
1123 map(0xc00008, 0xc0000f).mirror(0x07ffe0).r("upd2", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
1124 map(0xc00011, 0xc00011).mirror(0x07ffec).rw("adc1", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::select_w));
1125 map(0xc00013, 0xc00013).mirror(0x07ffec).rw("adc2", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::select_w));
1126 }
1127
1128
1129 /*************************************
1130 *
1131 * CPU 1 memory handlers
1132 *
1133 *************************************/
1134
cpu1_map(address_map & map)1135 void segas24_state::cpu1_map(address_map &map)
1136 {
1137 common_map(map);
1138 map(0x000000, 0x03ffff).mirror(0x040000).rom().region("maincpu", 0);
1139 }
1140
rombd_cpu1_map(address_map & map)1141 void segas24_state::rombd_cpu1_map(address_map &map)
1142 {
1143 cpu1_map(map);
1144 rombd_common_map(map);
1145 }
1146
roughrac_cpu1_map(address_map & map)1147 void segas24_state::roughrac_cpu1_map(address_map &map)
1148 {
1149 cpu1_map(map);
1150 roughrac_common_map(map);
1151 }
1152
hotrod_cpu1_map(address_map & map)1153 void segas24_state::hotrod_cpu1_map(address_map &map)
1154 {
1155 cpu1_map(map);
1156 hotrod_common_map(map);
1157 }
1158
dcclubj_cpu1_map(address_map & map)1159 void segas24_state::dcclubj_cpu1_map(address_map &map)
1160 {
1161 rombd_cpu1_map(map);
1162 roughrac_common_map(map);
1163 }
1164
1165 /*************************************
1166 *
1167 * CPU 2 memory handlers
1168 *
1169 *************************************/
1170
cpu2_map(address_map & map)1171 void segas24_state::cpu2_map(address_map &map)
1172 {
1173 common_map(map);
1174 map(0x000000, 0x03ffff).mirror(0x040000).ram().share("subcpu");
1175 }
1176
rombd_cpu2_map(address_map & map)1177 void segas24_state::rombd_cpu2_map(address_map &map)
1178 {
1179 cpu2_map(map);
1180 rombd_common_map(map);
1181 }
1182
roughrac_cpu2_map(address_map & map)1183 void segas24_state::roughrac_cpu2_map(address_map &map)
1184 {
1185 cpu2_map(map);
1186 roughrac_common_map(map);
1187 }
1188
hotrod_cpu2_map(address_map & map)1189 void segas24_state::hotrod_cpu2_map(address_map &map)
1190 {
1191 cpu2_map(map);
1192 hotrod_common_map(map);
1193 }
1194
dcclubj_cpu2_map(address_map & map)1195 void segas24_state::dcclubj_cpu2_map(address_map &map)
1196 {
1197 rombd_cpu2_map(map);
1198 roughrac_common_map(map);
1199 }
1200
decrypted_opcodes_map(address_map & map)1201 void segas24_state::decrypted_opcodes_map(address_map &map)
1202 {
1203 map(0x00000, 0xfffff).bankr("fd1094_decrypted_opcodes");
1204 }
1205
1206 /*************************************
1207 *
1208 * Generic driver initialization
1209 *
1210 *************************************/
1211
machine_start()1212 void segas24_state::machine_start()
1213 {
1214 if ((m_romboard != nullptr) && (m_rombank[0] != nullptr) && (m_rombank[1] != nullptr))
1215 {
1216 uint8_t *usr1 = m_romboard->base();
1217 m_rombank[0]->configure_entries(0, 16, usr1, 0x40000);
1218 m_rombank[1]->configure_entries(0, 16, usr1, 0x40000);
1219
1220 save_item(NAME(m_curbank));
1221 }
1222
1223 if (m_track_size)
1224 {
1225 subdevice<nvram_device>("floppy_nvram")->set_base(&m_floppy[0], 2*m_track_size);
1226
1227 save_item(NAME(m_fdc_track_side));
1228 save_item(NAME(m_fdc_mode));
1229 save_item(NAME(m_fdc_status));
1230 save_item(NAME(m_fdc_track));
1231 save_item(NAME(m_fdc_sector));
1232 save_item(NAME(m_fdc_data));
1233 save_item(NAME(m_fdc_phys_track));
1234 save_item(NAME(m_fdc_irq));
1235 save_item(NAME(m_fdc_drq));
1236 save_item(NAME(m_fdc_span));
1237 save_item(NAME(m_fdc_index_count));
1238 }
1239
1240 save_item(NAME(m_mlatch));
1241
1242 save_item(NAME(m_irq_tdata));
1243 save_item(NAME(m_irq_tval));
1244 save_item(NAME(m_irq_tmode));
1245 save_item(NAME(m_irq_allow0));
1246 save_item(NAME(m_irq_allow1));
1247 save_item(NAME(m_irq_timer_pend0));
1248 save_item(NAME(m_irq_timer_pend1));
1249 save_item(NAME(m_irq_yms));
1250 save_item(NAME(m_irq_vblank));
1251 save_item(NAME(m_irq_sprite));
1252
1253 save_item(NAME(m_frc_mode));
1254
1255 save_item(NAME(m_cnt1));
1256 }
1257
machine_reset()1258 void segas24_state::machine_reset()
1259 {
1260 m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
1261 m_cnt1 = true;
1262 fdc_init();
1263 irq_init();
1264 m_mlatch = 0x00;
1265 m_frc_mode = 0;
1266 m_frc_cnt_timer->reset();
1267 if ((m_romboard != nullptr) && (m_rombank[0] != nullptr) && (m_rombank[1] != nullptr))
1268 {
1269 m_curbank = 0;
1270 reset_bank();
1271 }
1272 }
1273
1274 /*************************************
1275 *
1276 * Generic port definitions
1277 *
1278 *************************************/
1279
1280 static INPUT_PORTS_START( system24_generic )
1281 PORT_START("P1")
1282 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
1283 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
1284 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
1285 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) //enabled with "Separate"
1286 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1287 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1288 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1289 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1290
1291 PORT_START("P2")
1292 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
1293 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1294 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
1295 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE3 ) //enabled with "Separate"
1296 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1297 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1298 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1299 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1300
1301 PORT_START("P3")
1302 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1303
1304 PORT_START("SERVICE")
1305 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1306 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1307 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE )
1308 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
1309 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
1310 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
1311 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
1312 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 )
1313
1314 PORT_START("COINAGE")
SEGA_COINAGE_LOC(SW1)1315 SEGA_COINAGE_LOC(SW1)
1316
1317 PORT_START("DSW")
1318 PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:1" )
1319 PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:2" )
1320 PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" )
1321 PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" )
1322 PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:5" )
1323 PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:6" )
1324 PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW2:7" )
1325 PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
1326 INPUT_PORTS_END
1327
1328
1329 /*************************************
1330 *
1331 * Game-specific port definitions
1332 *
1333 *************************************/
1334
1335 static INPUT_PORTS_START( hotrod )
1336 PORT_INCLUDE( system24_generic )
1337
1338 PORT_MODIFY("P1")
1339 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1340 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1341 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
1342 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
1343 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN5 )
1344 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN6 )
1345 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN7 )
1346 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN8 )
1347
1348 PORT_MODIFY("P2")
1349 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
1350 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
1351 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1352 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
1353 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 )
1354 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 )
1355 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE4 )
1356 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
1357
1358 PORT_MODIFY("DSW")
1359 //"SW2:1" unused
1360 //"SW2:2" unused
1361 //"SW2:3" unused
1362 //"SW2:4" unused
1363 //"SW2:5" unused
1364 PORT_DIPNAME( 0x20, 0x20, "Start Credit" ) PORT_DIPLOCATION("SW2:6")
1365 PORT_DIPSETTING( 0x20, "1" )
1366 PORT_DIPSETTING( 0x00, "2" )
1367 PORT_DIPNAME( 0x40, 0x40, "Coin Chute" ) PORT_DIPLOCATION("SW2:7")
1368 PORT_DIPSETTING( 0x40, "Separate" )
1369 PORT_DIPSETTING( 0x00, "Common" )
1370 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8")
1371 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
1372 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1373
1374 PORT_START("DIAL1")
1375 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(1)
1376
1377 PORT_START("DIAL2")
1378 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(2)
1379
1380 PORT_START("DIAL3")
1381 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(3)
1382
1383 PORT_START("DIAL4")
1384 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(4)
1385
1386 PORT_START("PEDAL1")
1387 PORT_BIT( 0xff, 0x01, IPT_PEDAL ) PORT_MINMAX(0x01,0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
1388
1389 PORT_START("PEDAL2")
1390 PORT_BIT( 0xff, 0x01, IPT_PEDAL ) PORT_MINMAX(0x01,0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
1391
1392 PORT_START("PEDAL3")
1393 PORT_BIT( 0xff, 0x01, IPT_PEDAL ) PORT_MINMAX(0x01,0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(3)
1394
1395 PORT_START("PEDAL4")
1396 PORT_BIT( 0xff, 0x01, IPT_PEDAL ) PORT_MINMAX(0x01,0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(4)
1397 INPUT_PORTS_END
1398
1399 static INPUT_PORTS_START( hotrodj )
1400 PORT_INCLUDE( hotrod )
1401
1402 PORT_MODIFY("DSW")
1403 //"SW2:1" unused
1404 //"SW2:2" unused
1405 PORT_DIPNAME( 0x04, 0x04, "Start Credit" ) PORT_DIPLOCATION("SW2:3")
1406 PORT_DIPSETTING( 0x04, "1" )
1407 PORT_DIPSETTING( 0x00, "2" )
1408 PORT_DIPNAME( 0x08, 0x08, "Play Mode" ) PORT_DIPLOCATION("SW2:4")
1409 PORT_DIPSETTING( 0x08, "4 Player" )
1410 PORT_DIPSETTING( 0x00, "2 Player" )
1411 PORT_DIPNAME( 0x10, 0x10, "Game Style" ) PORT_DIPLOCATION("SW2:5")
1412 PORT_DIPSETTING( 0x10, "4 Sides" )
1413 PORT_DIPSETTING( 0x00, "2 Sides" )
1414 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:6")
1415 PORT_DIPSETTING( 0x20, DEF_STR( Japanese ) )
1416 PORT_DIPSETTING( 0x00, DEF_STR( English ) )
1417 //"SW2:7" not divert from "hotrod"
1418 //"SW2:8" not divert from "hotrod"
1419 INPUT_PORTS_END
1420
1421 static INPUT_PORTS_START( bnzabros )
1422 PORT_INCLUDE( system24_generic )
1423
1424 PORT_MODIFY("DSW")
1425 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1")
1426 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
1427 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1428 PORT_DIPNAME( 0x02, 0x02, "Start Credit" ) PORT_DIPLOCATION("SW2:2")
1429 PORT_DIPSETTING( 0x02, "1" )
1430 PORT_DIPSETTING( 0x00, "2" )
1431 PORT_DIPNAME( 0x04, 0x04, "Coin Chute" ) PORT_DIPLOCATION("SW2:3")
1432 PORT_DIPSETTING( 0x04, "Common" )
1433 PORT_DIPSETTING( 0x00, "Individual" )
1434 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:4")
1435 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
1436 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1437 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
1438 PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
1439 PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
1440 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
1441 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1442 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8")
1443 PORT_DIPSETTING( 0x00, "1" )
1444 PORT_DIPSETTING( 0x40, "2" )
1445 PORT_DIPSETTING( 0xc0, "3" )
1446 PORT_DIPSETTING( 0x80, "4" )
1447 INPUT_PORTS_END
1448
1449 static INPUT_PORTS_START( crkdown )
1450 PORT_INCLUDE( system24_generic )
1451
1452 PORT_MODIFY("DSW")
1453 //"SW2:1" unused
1454 //"SW2:2" unused
1455 //"SW2:3" unused
1456 //"SW2:4" unused
1457 //"SW2:5" unused
1458 //"SW2:6" unused
1459 PORT_DIPNAME( 0x40, 0x40, "Coin Chute" ) PORT_DIPLOCATION("SW2:7")
1460 PORT_DIPSETTING( 0x40, "Common" ) // Japanese manual says "Single"
1461 PORT_DIPSETTING( 0x00, "Separate" ) // Japanese manual says "Twin"
1462 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8")
1463 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
1464 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1465 INPUT_PORTS_END
1466
1467 static INPUT_PORTS_START( roughrac )
1468 PORT_INCLUDE( system24_generic )
1469
1470 PORT_MODIFY("DSW")
1471 PORT_DIPNAME( 0x01, 0x01, "Start Credit" ) PORT_DIPLOCATION("SW2:1")
1472 PORT_DIPSETTING( 0x01, "1" )
1473 PORT_DIPSETTING( 0x00, "2" )
1474 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1475 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1476 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1477 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3")
1478 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
1479 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1480 PORT_DIPNAME( 0x08, 0x08, "Game Instruction" ) PORT_DIPLOCATION("SW2:4")
1481 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
1482 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
1483 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
1484 PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
1485 PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
1486 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
1487 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1488 PORT_DIPNAME( 0x40, 0x40, "Start Money" ) PORT_DIPLOCATION("SW2:7")
1489 PORT_DIPSETTING( 0x40, "15000" )
1490 PORT_DIPSETTING( 0x00, "20000" )
1491 PORT_DIPNAME( 0x80, 0x80, "Start Intro" ) PORT_DIPLOCATION("SW2:8")
1492 PORT_DIPSETTING( 0x80, "10" )
1493 PORT_DIPSETTING( 0x00, "15" )
1494
1495 PORT_START("DIAL1")
1496 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(1)
1497
1498 PORT_START("DIAL2")
1499 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(2)
1500 INPUT_PORTS_END
1501
1502 static INPUT_PORTS_START( sspirits )
1503 PORT_INCLUDE( system24_generic )
1504
1505 PORT_MODIFY("DSW")
1506 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1")
1507 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
1508 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1509 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1510 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1511 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1512 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
1513 PORT_DIPSETTING( 0x00, "2" )
1514 PORT_DIPSETTING( 0x0c, "3" )
1515 PORT_DIPSETTING( 0x08, "4" )
1516 PORT_DIPSETTING( 0x04, "5" )
1517 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6")
1518 PORT_DIPSETTING( 0x20, "500K" )
1519 PORT_DIPSETTING( 0x30, "600K" )
1520 PORT_DIPSETTING( 0x10, "800K" )
1521 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
1522 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
1523 PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
1524 PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
1525 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
1526 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1527 INPUT_PORTS_END
1528
1529 static INPUT_PORTS_START( qgh )
1530 PORT_INCLUDE( system24_generic )
1531
1532 PORT_MODIFY("DSW")
1533 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1")
1534 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
1535 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1536 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1537 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1538 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1539 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4")
1540 PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
1541 PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
1542 PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
1543 PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
1544 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
1545 PORT_DIPSETTING( 0x10, "3" )
1546 PORT_DIPSETTING( 0x00, "3" )
1547 PORT_DIPSETTING( 0x20, "4" )
1548 PORT_DIPSETTING( 0x30, "5" )
1549 //"SW2:7" unused
1550 //"SW2:8" unused
1551 INPUT_PORTS_END
1552
1553 static INPUT_PORTS_START( qsww )
1554 PORT_INCLUDE( system24_generic )
1555
1556 PORT_MODIFY("DSW")
1557 PORT_DIPNAME( 0x01, 0x01, "Start Credit" ) PORT_DIPLOCATION("SW2:1")
1558 PORT_DIPSETTING( 0x01, "1" )
1559 PORT_DIPSETTING( 0x00, "2" )
1560 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1561 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1562 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1563 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3")
1564 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
1565 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1566 //"SW2:4" unused
1567 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
1568 PORT_DIPSETTING( 0x10, "2" )
1569 PORT_DIPSETTING( 0x00, "3" )
1570 PORT_DIPSETTING( 0x30, "4" )
1571 PORT_DIPSETTING( 0x20, "5" )
1572 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
1573 PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
1574 PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
1575 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
1576 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1577 INPUT_PORTS_END
1578
1579
1580 static INPUT_PORTS_START( sgmast )
1581 PORT_INCLUDE( system24_generic )
1582
1583 PORT_MODIFY("P1")
1584 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Angle Left")
1585 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Club")
1586 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Angle Right")
1587 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Stance")
1588 /* For select the power shot rotate the stick from up-left (max power) to up (minimum power) and release */
1589 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_CUSTOM )
1590
1591 PORT_MODIFY("P2")
1592 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1593
1594 PORT_START("PADDLE")
1595 PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00,0xbf) PORT_SENSITIVITY(16) PORT_KEYDELTA(16) PORT_PLAYER(1) PORT_NAME("P1 Swing")
1596
1597 PORT_MODIFY("DSW")
1598 PORT_DIPNAME( 0x01, 0x01, "Start Credit" ) PORT_DIPLOCATION("SW2:1")
1599 PORT_DIPSETTING( 0x01, "1" )
1600 PORT_DIPSETTING( 0x00, "2" )
1601 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1602 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1603 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1604 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3")
1605 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
1606 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1607 PORT_DIPNAME( 0x08, 0x08, "Gameplay" ) PORT_DIPLOCATION("SW2:4")
1608 PORT_DIPSETTING( 0x08, "1 Hole 1 Credit" )
1609 PORT_DIPSETTING( 0x00, "Lose Ball Game Over" )
1610 //"SW2:5" unused
1611 PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7,8") // MeterWidth WindVelocity MeterSpeed
1612 PORT_DIPSETTING( 0x80, DEF_STR( Easiest ) ) // 64% 30% 50%
1613 PORT_DIPSETTING( 0xa0, DEF_STR( Easier ) ) // 64% 50% 75%
1614 PORT_DIPSETTING( 0xc0, DEF_STR( Easy ) ) // 100% 75% 75%
1615 PORT_DIPSETTING( 0xe0, DEF_STR( Normal ) ) // 100% 100% 100%
1616 PORT_DIPSETTING( 0x60, "Little Hard" ) // 118% 75% 100%
1617 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) // 118% 100% 100%
1618 PORT_DIPSETTING( 0x20, DEF_STR( Harder ) ) // 136% 75% 100%
1619 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 136% 100% 100%
1620 INPUT_PORTS_END
1621
1622 // Japanese version has an analog "angle" device in place of the two dedicated buttons
1623 static INPUT_PORTS_START( sgmastj )
1624 PORT_INCLUDE( sgmast )
1625
1626 PORT_MODIFY("P1")
1627 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
1628 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1629
1630 PORT_MODIFY("DSW")
1631 //"SW2:1" not divert from "sgmast"
1632 //"SW2:2" not divert from "sgmast"
1633 //"SW2:3" not divert from "sgmast"
1634 PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" )
1635 //"SW2:5" unused
1636 //"SW2:6" not divert from "sgmast"
1637 //"SW2:7" not divert from "sgmast"
1638 //"SW2:8" not divert from "sgmast"
1639
1640 PORT_START("DIAL1")
1641 PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(1) PORT_NAME("P1 Angle")
1642
1643 PORT_START("DIAL2")
1644 PORT_BIT( 0xfff, 0x000, IPT_UNUSED )
1645 INPUT_PORTS_END
1646
1647 static INPUT_PORTS_START( dcclub_dips )
1648 PORT_MODIFY("DSW")
1649 PORT_DIPNAME( 0x01, 0x01, "Start Credit" ) PORT_DIPLOCATION("SW2:1")
1650 PORT_DIPSETTING( 0x01, "1" )
1651 PORT_DIPSETTING( 0x00, "2" )
1652 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:2")
1653 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1654 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1655 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3")
1656 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
1657 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1658 PORT_DIPNAME( 0x08, 0x08, "Timing Meter" ) PORT_DIPLOCATION("SW2:4")
1659 PORT_DIPSETTING( 0x08, DEF_STR( Normal ) )
1660 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
1661 PORT_DIPNAME( 0x10, 0x10, "Initial Balls" ) PORT_DIPLOCATION("SW2:5")
1662 PORT_DIPSETTING( 0x00, "1" )
1663 PORT_DIPSETTING( 0x10, "2" )
1664 PORT_DIPNAME( 0x20, 0x20, "Balls Limit" ) PORT_DIPLOCATION("SW2:6")
1665 PORT_DIPSETTING( 0x00, "3" )
1666 PORT_DIPSETTING( 0x20, "4" )
1667 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
1668 PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
1669 PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
1670 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
1671 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1672 INPUT_PORTS_END
1673
1674 static INPUT_PORTS_START( dcclub )
1675 PORT_INCLUDE( sgmast )
1676 PORT_INCLUDE( dcclub_dips )
1677 INPUT_PORTS_END
1678
1679 static INPUT_PORTS_START( dcclubj )
1680 PORT_INCLUDE( sgmastj )
1681 PORT_INCLUDE( dcclub_dips )
1682 INPUT_PORTS_END
1683
1684 static INPUT_PORTS_START( quizmeku )
1685 PORT_INCLUDE( system24_generic )
1686
1687 PORT_MODIFY("P1")
1688 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
1689 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1690 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
1691
1692 PORT_MODIFY("P2")
1693 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START4 )
1694 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1695 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
1696
1697 PORT_MODIFY("P3")
1698 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
1699 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
1700 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
1701 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
1702 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
1703 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
1704 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
1705 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
1706
1707 PORT_MODIFY("DSW")
1708 PORT_DIPNAME( 0x01, 0x00, "Play Mode" ) PORT_DIPLOCATION("SW2:1")
1709 PORT_DIPSETTING( 0x01, "2 Player" )
1710 PORT_DIPSETTING( 0x00, "4 Player" )
1711 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1712 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1713 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1714 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
1715 PORT_DIPSETTING( 0x08, "2" )
1716 PORT_DIPSETTING( 0x0c, "3" )
1717 PORT_DIPSETTING( 0x04, "4" )
1718 PORT_DIPSETTING( 0x00, "5" )
1719 PORT_DIPNAME( 0x10, 0x10, "Answer Counts" ) PORT_DIPLOCATION("SW2:5")
1720 PORT_DIPSETTING( 0x10, "Every" )
1721 PORT_DIPSETTING( 0x00, "3" )
1722 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:6")
1723 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
1724 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1725 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
1726 PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
1727 PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
1728 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
1729 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1730 INPUT_PORTS_END
1731
1732 static INPUT_PORTS_START( qrouka )
1733 PORT_INCLUDE( system24_generic )
1734
1735 PORT_MODIFY("P1")
1736 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
1737 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1738 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
1739
1740 PORT_MODIFY("P2")
1741 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START4 )
1742 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
1743 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
1744
1745 PORT_MODIFY("P3")
1746 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
1747 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
1748 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
1749 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
1750 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
1751 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
1752 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
1753 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
1754
1755 PORT_MODIFY("SERVICE")
1756 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_CONDITION("DSW",0x08,EQUALS,0x00)
1757 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_CONDITION("DSW",0x08,EQUALS,0x00)
1758 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE )
1759 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
1760 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
1761 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
1762 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CONDITION("DSW",0x08,EQUALS,0x00)
1763 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW",0x08,EQUALS,0x00)
1764 /* alt coin mode */
1765 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW",0x08,EQUALS,0x08)
1766 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CONDITION("DSW",0x08,EQUALS,0x08)
1767 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW",0x08,EQUALS,0x08)
1768 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW",0x08,EQUALS,0x08)
1769
1770 PORT_MODIFY("DSW")
1771 PORT_DIPNAME( 0x01, 0x00, "Play Mode" ) PORT_DIPLOCATION("SW2:1")
1772 PORT_DIPSETTING( 0x01, "2 Player" )
1773 PORT_DIPSETTING( 0x00, "4 Player" )
1774 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1775 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1776 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1777 //"SW2:3" unused
1778 PORT_DIPNAME( 0x08, 0x08, "Coin Chute" ) PORT_DIPLOCATION("SW2:4")
1779 PORT_DIPSETTING( 0x08, "Common" )
1780 PORT_DIPSETTING( 0x00, "Separate" )
1781 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
1782 PORT_DIPSETTING( 0x10, "2" )
1783 PORT_DIPSETTING( 0x00, "3" )
1784 PORT_DIPSETTING( 0x30, "4" )
1785 PORT_DIPSETTING( 0x20, "5" )
1786 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
1787 PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
1788 PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
1789 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
1790 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1791 INPUT_PORTS_END
1792
1793 static INPUT_PORTS_START( mahmajn )
1794 PORT_INCLUDE( system24_generic )
1795
1796 PORT_MODIFY("P1")
1797 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1798
1799 PORT_MODIFY("P2")
1800 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1801
1802 PORT_MODIFY("P3")
1803 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1804
1805 PORT_START("MJ0")
1806 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
1807 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
1808 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
1809 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
1810 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
1811
1812 PORT_START("MJ1")
1813 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
1814 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
1815 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
1816 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
1817 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
1818
1819 PORT_START("MJ2")
1820 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I )
1821 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J )
1822 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
1823 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L )
1824 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
1825
1826 PORT_START("MJ3")
1827 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
1828 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
1829 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
1830 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
1831 PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
1832
1833 PORT_START("MJ4")
1834 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
1835 PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
1836
1837 PORT_START("MJ5")
1838 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
1839 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
1840 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
1841 PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
1842
1843 PORT_MODIFY("DSW")
1844 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1")
1845 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
1846 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1847 PORT_DIPNAME( 0x02, 0x02, "Start Score" ) PORT_DIPLOCATION("SW2:2")
1848 PORT_DIPSETTING( 0x00, "2000" )
1849 PORT_DIPSETTING( 0x02, "3000" )
1850 PORT_DIPNAME( 0x0c, 0x0c, "Difficulty (computer)" ) PORT_DIPLOCATION("SW2:3,4")
1851 PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
1852 PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
1853 PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
1854 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1855 PORT_DIPNAME( 0x30, 0x30, "Difficulty (player)" ) PORT_DIPLOCATION("SW2:5,6")
1856 PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
1857 PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
1858 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
1859 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
1860 //"SW2:7" unused
1861 //"SW2:8" unused
1862 INPUT_PORTS_END
1863
1864 static INPUT_PORTS_START( gground )
1865 PORT_INCLUDE( system24_generic )
1866
1867 PORT_MODIFY("P3")
1868 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
1869 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
1870 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
1871 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE4 ) //enabled with "Separate"
1872 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
1873 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
1874 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
1875 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
1876
1877 PORT_MODIFY("DSW")
1878 // Here is known problem.
1879 // Service mode works as I hoped.
1880 // But game mode doesn't. It works as all dipswitches are On.
1881 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1")
1882 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
1883 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1884 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
1885 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
1886 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1887 PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4,5")
1888 PORT_DIPSETTING( 0x00, DEF_STR( Easiest ) )
1889 PORT_DIPSETTING( 0x10, DEF_STR( Easier ) )
1890 PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
1891 PORT_DIPSETTING( 0x18, "Little Easy" )
1892 PORT_DIPSETTING( 0x1c, DEF_STR( Normal ) )
1893 PORT_DIPSETTING( 0x0c, "Little Hard" )
1894 PORT_DIPSETTING( 0x14, DEF_STR( Hard ) )
1895 PORT_DIPSETTING( 0x04, DEF_STR( Hardest ) )
1896 PORT_DIPNAME( 0x60, 0x60, "Time Limit Per Stage" ) PORT_DIPLOCATION("SW2:6,7")
1897 PORT_DIPSETTING( 0x20, DEF_STR( Easiest ) )
1898 PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
1899 PORT_DIPSETTING( 0x60, DEF_STR( Normal ) )
1900 PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
1901 PORT_DIPNAME( 0x80, 0x80, "Clock Of Time Limit" ) PORT_DIPLOCATION("SW2:8")
1902 PORT_DIPSETTING( 0x80, "1.00 sec" )
1903 PORT_DIPSETTING( 0x00, "0.80 sec" )
1904 INPUT_PORTS_END
1905
1906
1907 /*************************************
1908 *
1909 * Generic machine drivers
1910 *
1911 *************************************/
1912
1913 void segas24_state::system24(machine_config &config)
1914 {
1915 /* basic machine hardware */
1916 M68000(config, m_maincpu, MASTER_CLOCK/2);
1917 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu1_map);
1918 TIMER(config, "scantimer").configure_scanline(FUNC(segas24_state::irq_vbl), "screen", 0, 1);
1919
1920 M68000(config, m_subcpu, MASTER_CLOCK/2);
1921 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu2_map);
1922
1923 config.set_maximum_quantum(attotime::from_hz(6000));
1924
1925 sega_315_5296_device &io(SEGA_315_5296(config, "io", VIDEO_CLOCK/2));
1926 io.in_pa_callback().set_ioport("P1");
1927 io.in_pb_callback().set_ioport("P2");
1928 io.in_pc_callback().set_ioport("P3");
1929 io.out_pd_callback().set(FUNC(segas24_state::hotrod_lamps_w));
1930 io.in_pe_callback().set_ioport("SERVICE");
1931 io.in_pf_callback().set_ioport("COINAGE");
1932 io.in_pg_callback().set_ioport("DSW");
1933 io.out_ph_callback().set("dac", FUNC(dac_byte_interface::data_w));
1934 io.out_cnt1_callback().set(FUNC(segas24_state::cnt1));
1935 io.out_cnt2_callback().set("ymsnd", FUNC(ym2151_device::reset_w));
1936
1937 TIMER(config, "irq_timer").configure_generic(FUNC(segas24_state::irq_timer_cb));
1938 TIMER(config, "irq_timer_clear").configure_generic(FUNC(segas24_state::irq_timer_clear_cb));
1939 TIMER(config, "frc_timer").configure_generic(nullptr);
1940 TIMER(config, "irq_frc").configure_periodic(FUNC(segas24_state::irq_frc_cb), attotime::from_hz(FRC_CLOCK_MODE1));
1941
1942 S24TILE(config, m_vtile, 0, 0xfff).set_palette("palette");
1943 S24SPRITE(config, m_vsprite, 0);
1944 S24MIXER(config, m_vmixer, 0);
1945
1946 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1947 m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
1948 m_screen->set_raw(VIDEO_CLOCK/2, 656, 0/*+69*/, 496/*+69*/, 424, 0/*+25*/, 384/*+25*/);
1949 m_screen->set_screen_update(FUNC(segas24_state::screen_update));
1950 m_screen->set_palette(m_palette);
1951
1952 PALETTE(config, m_palette).set_entries(8192*2);
1953
1954 SPEAKER(config, "lspeaker").front_left();
1955 SPEAKER(config, "rspeaker").front_right();
1956
1957 ym2151_device &ymsnd(YM2151(config, "ymsnd", 4000000));
1958 ymsnd.irq_handler().set(FUNC(segas24_state::irq_ym));
1959 ymsnd.add_route(0, "lspeaker", 0.50);
1960 ymsnd.add_route(1, "rspeaker", 0.50);
1961
1962 DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
1963 }
1964
system24_rom(machine_config & config)1965 void segas24_state::system24_rom(machine_config &config)
1966 {
1967 system24(config);
1968 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu1_map);
1969 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu2_map);
1970 }
1971
mahmajn(machine_config & config)1972 void segas24_state::mahmajn(machine_config &config)
1973 {
1974 system24_rom(config);
1975 sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
1976 io.in_pa_callback().set(FUNC(segas24_state::mahmajn_input_line_r));
1977 io.in_pc_callback().set(FUNC(segas24_state::mahmajn_inputs_r));
1978 io.out_pd_callback().set(FUNC(segas24_state::mahmajn_mux_w));
1979 }
1980
system24_floppy(machine_config & config)1981 void segas24_state::system24_floppy(machine_config &config)
1982 {
1983 system24(config);
1984 NVRAM(config, "floppy_nvram", nvram_device::DEFAULT_NONE);
1985 }
1986
system24_floppy_rom(machine_config & config)1987 void segas24_state::system24_floppy_rom(machine_config &config)
1988 {
1989 system24_floppy(config);
1990 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu1_map);
1991 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu2_map);
1992 }
1993
system24_floppy_hotrod(machine_config & config)1994 void segas24_state::system24_floppy_hotrod(machine_config &config)
1995 {
1996 system24_floppy(config);
1997 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu1_map);
1998 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu2_map);
1999
2000 upd4701_device &upd1(UPD4701A(config, "upd1")); // IC4 on 834-6510 I/O board
2001 upd1.set_portx_tag("DIAL1");
2002 upd1.set_porty_tag("DIAL2");
2003
2004 upd4701_device &upd2(UPD4701A(config, "upd2")); // IC1
2005 upd2.set_portx_tag("DIAL3");
2006 upd2.set_porty_tag("DIAL4");
2007
2008 msm6253_device &adc1(MSM6253(config, "adc1", 0)); // IC5 - 33k/33p R/C clock
2009 adc1.set_input_tag<0>("PEDAL1");
2010 adc1.set_input_tag<1>("PEDAL2");
2011 adc1.set_input_tag<2>("PEDAL3");
2012 adc1.set_input_tag<3>("PEDAL4");
2013
2014 MSM6253(config, "adc2", 0); // IC2 - 33k/33p R/C clock
2015 }
2016
system24_floppy_fd1094(machine_config & config)2017 void segas24_state::system24_floppy_fd1094(machine_config &config)
2018 {
2019 system24_floppy(config);
2020 FD1094(config.replace(), m_subcpu, MASTER_CLOCK/2);
2021 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu2_map);
2022 m_subcpu->set_addrmap(AS_OPCODES, &segas24_state::decrypted_opcodes_map);
2023 }
2024
system24_floppy_fd_upd(machine_config & config)2025 void segas24_state::system24_floppy_fd_upd(machine_config &config)
2026 {
2027 system24_floppy_fd1094(config);
2028 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu1_map);
2029 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu2_map);
2030
2031 upd4701_device &upd4701(UPD4701A(config, "upd4701")); // IC4 on 834-6510 I/O board
2032 upd4701.set_portx_tag("DIAL1");
2033 upd4701.set_porty_tag("DIAL2");
2034 }
2035
dcclub(machine_config & config)2036 void segas24_state::dcclub(machine_config &config)
2037 {
2038 system24_rom(config);
2039 sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
2040 io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r));
2041 io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r));
2042 }
2043
dcclubj(machine_config & config)2044 void segas24_state::dcclubj(machine_config &config)
2045 {
2046 dcclub(config);
2047 m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::dcclubj_cpu1_map);
2048 m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::dcclubj_cpu2_map);
2049
2050 upd4701_device &upd4701(UPD4701A(config, "upd4701"));
2051 upd4701.set_portx_tag("DIAL1");
2052 upd4701.set_porty_tag("DIAL2");
2053 }
2054
system24_floppy_dcclub(machine_config & config)2055 void segas24_state::system24_floppy_dcclub(machine_config &config)
2056 {
2057 system24_floppy_fd1094(config);
2058 sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
2059 io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r));
2060 io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r));
2061 }
2062
sgmastj(machine_config & config)2063 void segas24_state::sgmastj(machine_config &config)
2064 {
2065 system24_floppy_fd_upd(config);
2066 sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
2067 io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r));
2068 io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r));
2069 }
2070
2071 /*************************************
2072 *
2073 * ROM definition(s)
2074 *
2075 *************************************/
2076
2077 //*************************************************************************************************************************
2078 // Hot Rod, Sega System 24
2079 // Sega game ID: 833-6570-01 HOT ROD
2080 // Main board: 837-6571
2081 // I/O Controller: 834-6510
2082 ROM_START( hotrod )
2083 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
2084 ROM_LOAD16_BYTE( "epr-11339.ic2", 0x000000, 0x20000, CRC(75130e73) SHA1(e079739f4a3da3807aac570442c5afef1a7d7b0e) )
2085 ROM_LOAD16_BYTE( "epr-11338.ic1", 0x000001, 0x20000, CRC(7d4a7ff3) SHA1(3d3af04d990d232ba0a8fe155de59bc632a0a461) )
2086
2087 ROM_REGION( 0x1d6000, "floppy", 0)
2088 ROM_LOAD( "ds3-5000-01d_3p_turbo.img", 0x000000, 0x1d6000, CRC(842006fd) SHA1(d5432f58c0fb39f2bf62786a0d842bdd469ab2cb) )
2089 ROM_END
2090
ROM_START(hotroda)2091 ROM_START( hotroda )
2092 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
2093 ROM_LOAD16_BYTE( "epr-11339.ic2", 0x000000, 0x20000, CRC(75130e73) SHA1(e079739f4a3da3807aac570442c5afef1a7d7b0e) )
2094 ROM_LOAD16_BYTE( "epr-11338.ic1", 0x000001, 0x20000, CRC(7d4a7ff3) SHA1(3d3af04d990d232ba0a8fe155de59bc632a0a461) )
2095
2096 ROM_REGION( 0x1d6000, "floppy", 0)
2097 ROM_LOAD( "ds3-5000-01d.img", 0x000000, 0x1d6000, CRC(e25c6b63) SHA1(fbf86d2ebccd8053b990939f63f5497907d18321) )
2098 ROM_END
2099
2100 ROM_START( hotrodja )
2101 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
2102 ROM_LOAD16_BYTE( "epr-11339.ic2", 0x000000, 0x20000, CRC(75130e73) SHA1(e079739f4a3da3807aac570442c5afef1a7d7b0e) )
2103 ROM_LOAD16_BYTE( "epr-11338.ic1", 0x000001, 0x20000, CRC(7d4a7ff3) SHA1(3d3af04d990d232ba0a8fe155de59bc632a0a461) )
2104
2105 ROM_REGION( 0x1d6000, "floppy", 0)
2106 ROM_LOAD( "ds3-5000-01a-rev-b.img", 0x000000, 0x1d6000, CRC(c18f6dca) SHA1(6f2b5a9567a340324a5f3fb57a3b744de0924a23) )
2107 ROM_END
2108
2109 ROM_START( hotrodj )
2110 ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
2111 ROM_LOAD16_BYTE( "epr-11339.ic2", 0x000000, 0x20000, CRC(75130e73) SHA1(e079739f4a3da3807aac570442c5afef1a7d7b0e) )
2112 ROM_LOAD16_BYTE( "epr-11338.ic1", 0x000001, 0x20000, CRC(7d4a7ff3) SHA1(3d3af04d990d232ba0a8fe155de59bc632a0a461) )
2113
2114 ROM_REGION( 0x1d6000, "floppy", 0)
2115 ROM_LOAD( "ds3-5000-01a-rev-c.img", 0x000000, 0x1d6000, CRC(852f9b5f) SHA1(159e161f55beed0f90cce8a73b0aeb4564d6af90) )
2116 ROM_END
2117
2118 ROM_START( qgh )
2119 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2120 ROM_LOAD16_BYTE( "16900b", 0x000000, 0x20000, CRC(20d7b7d1) SHA1(345b228c27e5f2fef9a2b8b5f619c59450a070f8) )
2121 ROM_LOAD16_BYTE( "16899b", 0x000001, 0x20000, CRC(397b3ba9) SHA1(1773212cd87dcff840f3953ec368be7e2394faf0) )
2122
2123 ROM_REGION16_BE( 0x400000, "romboard", 0)
2124 ROM_LOAD16_BYTE( "16902a", 0x000000, 0x80000, CRC(d35b7706) SHA1(341bca0af6b6d3f326328a88cdc69c7897b83a0d) )
2125 ROM_LOAD16_BYTE( "16901a", 0x000001, 0x80000, CRC(ab4bcb33) SHA1(8acd73096eb485c6dc83da6adfcc47d5d0f5b7f3) )
2126 ROM_LOAD16_BYTE( "16904", 0x100000, 0x80000, CRC(10987c88) SHA1(66f893690565aed613427421958ebe225a20ad0f) )
2127 ROM_LOAD16_BYTE( "16903", 0x100001, 0x80000, CRC(c19f9e46) SHA1(f1275674a8b44957428d79402f240ca21a34f48d) )
2128 ROM_LOAD16_BYTE( "16906", 0x200000, 0x80000, CRC(99c6773e) SHA1(568570b607d2cbbedb39ceae5bbc479478fae4ca) )
2129 ROM_LOAD16_BYTE( "16905", 0x200001, 0x80000, CRC(3922bbe3) SHA1(4378ca900f96138b5e33265ddac56af7b45afbc8) )
2130 ROM_LOAD16_BYTE( "16908", 0x300000, 0x80000, CRC(407ec20f) SHA1(c8a909d8e9ba024a37a5af6b7920fe7023f80d49) )
2131 ROM_LOAD16_BYTE( "16907", 0x300001, 0x80000, CRC(734b0a82) SHA1(d3fb31c55e79b99040beb7c49faaf2e17b95aa87) )
2132 ROM_END
2133
2134 ROM_START( qrouka )
2135 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2136 ROM_LOAD16_BYTE( "14485", 0x000000, 0x20000, CRC(fc0085f9) SHA1(0250d1e17e19b541b85198ec4207e55bfbd5c32e) )
2137 ROM_LOAD16_BYTE( "14484", 0x000001, 0x20000, CRC(f51c641c) SHA1(3f2fd0be7d58c75e88565393da5e810655413b53) )
2138
2139 ROM_REGION16_BE( 0x400000, "romboard", 0)
2140 ROM_LOAD16_BYTE( "14482", 0x000000, 0x80000, CRC(7a13dd97) SHA1(bfe9950d2cd41f3f866520923c1ed7b8da1990ec) )
2141 ROM_LOAD16_BYTE( "14483", 0x100000, 0x80000, CRC(f3eb51a0) SHA1(6904830ff5e7aa5f016e115572fb6da678896ede) )
2142 ROM_END
2143
2144 ROM_START( mahmajn )
2145 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2146 ROM_LOAD16_BYTE( "epr14813.bin", 0x000000, 0x20000, CRC(ea38cf4b) SHA1(118ab2e0ae20a4db5e619945dfbb3f200de3979c) )
2147 ROM_LOAD16_BYTE( "epr14812.bin", 0x000001, 0x20000, CRC(5a3cb4a7) SHA1(c0f21282140e8e6e927664f5f2b90525ae0207e9) )
2148
2149 ROM_REGION16_BE( 0x400000, "romboard", 0)
2150 ROM_LOAD16_BYTE( "mpr14820.bin", 0x000000, 0x80000, CRC(8d2a03d3) SHA1(b3339bcd101bcfe042e2a1cfdc8baef0a86624df) )
2151 ROM_LOAD16_BYTE( "mpr14819.bin", 0x000001, 0x80000, CRC(e84c4827) SHA1(54741295e1bdca7d0c78eb795a68b92212d43b2e) )
2152 ROM_LOAD16_BYTE( "mpr14822.bin", 0x100000, 0x80000, CRC(7c3dcc51) SHA1(a199c2c71cda44a2c8755074c1007d83c8d45d2d) )
2153 ROM_LOAD16_BYTE( "mpr14821.bin", 0x100001, 0x80000, CRC(bd8dc543) SHA1(fd50b14fa73307a62dc0b522cfedb8b3332c407e) )
2154 ROM_LOAD16_BYTE( "mpr14824.bin", 0x200000, 0x80000, CRC(38311933) SHA1(237d9a8ffe14ba9ec371bb571d7c9e74a93fe1f3) )
2155 ROM_LOAD16_BYTE( "mpr14823.bin", 0x200001, 0x80000, CRC(4c8d4550) SHA1(be8717d4080ce932fc8272ebe54e2b0a60b20edd) )
2156 ROM_LOAD16_BYTE( "mpr14826.bin", 0x300000, 0x80000, CRC(c31b8805) SHA1(b446388c83af2e14300b0c4248470d3a8c504f2c) )
2157 ROM_LOAD16_BYTE( "mpr14825.bin", 0x300001, 0x80000, CRC(191080a1) SHA1(407c1c5fa4c76732e8a444860094542e90a1e8e8) )
2158 ROM_END
2159
2160 ROM_START( mahmajn2 )
2161 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2162 ROM_LOAD16_BYTE( "epr16799.bin", 0x000000, 0x20000, CRC(3a34cf75) SHA1(d22bf6334668af29167cf4244d18f9cd2e7ff7d6) )
2163 ROM_LOAD16_BYTE( "epr16798.bin", 0x000001, 0x20000, CRC(662923fa) SHA1(dcd3964d899d3f34dab22ffcd1a5af895804fae1) )
2164
2165 ROM_REGION16_BE( 0x400000, "romboard", 0)
2166 ROM_LOAD16_BYTE( "mpr16801.bin", 0x000000, 0x80000, CRC(74855a17) SHA1(d2d8e7da7b261e7cb64605284d2c78fbd1465b69) )
2167 ROM_LOAD16_BYTE( "mpr16800.bin", 0x000001, 0x80000, CRC(6dbc1e02) SHA1(cce5734243ff171759cecb5c05c12dc743a25c1d) )
2168 ROM_LOAD16_BYTE( "mpr16803.bin", 0x100000, 0x80000, CRC(9b658dd6) SHA1(eaaae289a3555aa6a92f57eea964dbbf48c5c2a4) )
2169 ROM_LOAD16_BYTE( "mpr16802.bin", 0x100001, 0x80000, CRC(b4723225) SHA1(acb8923c7d9908b1112f8d1f2512f18236915e5d) )
2170 ROM_LOAD16_BYTE( "mpr16805.bin", 0x200000, 0x80000, CRC(d15528df) SHA1(bda1dd5c98867c2e7666380bca0bc7eef8022fbc) )
2171 ROM_LOAD16_BYTE( "mpr16804.bin", 0x200001, 0x80000, CRC(a0de08e2) SHA1(2c36b66e74b88fb076e2eaa250c6d06ee0b4ac88) )
2172 ROM_LOAD16_BYTE( "mpr16807.bin", 0x300000, 0x80000, CRC(816188bb) SHA1(76b2690a6156766a1af94f01f6de1209b7756b2c) )
2173 ROM_LOAD16_BYTE( "mpr16806.bin", 0x300001, 0x80000, CRC(54b353d3) SHA1(40632e4571b44ee215b5a1f7aab9d89c460a5c9e) )
2174 ROM_END
2175
2176 ROM_START( bnzabros )
2177 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2178 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2179 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2180
2181 ROM_REGION16_BE( 0x400000, "romboard", 0)
2182 ROM_LOAD16_BYTE( "mpr-13188-h.2", 0x000000, 0x80000, CRC(d3802294) SHA1(7608e71e8ef398ac24dbf851994253bca5ace625) )
2183 ROM_LOAD16_BYTE( "mpr-13187-h.1", 0x000001, 0x80000, CRC(e3d8c5f7) SHA1(5b1e8646debee2f2ef272ddd3320b0a17192fbbe) )
2184 ROM_LOAD16_BYTE( "mpr-13190.4", 0x100000, 0x40000, CRC(0b4df388) SHA1(340478bba82069ab745d6d8703e6801411fd2fc4) )
2185 ROM_RELOAD ( 0x180000, 0x40000)
2186 ROM_LOAD16_BYTE( "mpr-13189.3", 0x100001, 0x40000, CRC(5ea5a2f3) SHA1(514b5446303c50aeb1d6d10d0a3f210da2577e16) )
2187 ROM_RELOAD ( 0x180001, 0x40000)
2188
2189 ROM_REGION( 0x1c2000, "floppy", 0)
2190 ROM_LOAD( "ds3-5000-07d.img", 0x000000, 0x1c2000, CRC(2e70251f) SHA1(1c2616dfa5cc15e8ebf1424012f2dd66f3a001a1) ) /* Region letter needs to be verfied */
2191 ROM_END
2192
2193 ROM_START( bnzabrosj )
2194 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2195 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2196 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2197
2198 ROM_REGION16_BE( 0x400000, "romboard", 0)
2199 ROM_LOAD16_BYTE( "mpr-13188-h.2", 0x000000, 0x80000, CRC(d3802294) SHA1(7608e71e8ef398ac24dbf851994253bca5ace625) )
2200 ROM_LOAD16_BYTE( "mpr-13187-h.1", 0x000001, 0x80000, CRC(e3d8c5f7) SHA1(5b1e8646debee2f2ef272ddd3320b0a17192fbbe) )
2201 ROM_LOAD16_BYTE( "mpr-13190.4", 0x100000, 0x40000, CRC(0b4df388) SHA1(340478bba82069ab745d6d8703e6801411fd2fc4) )
2202 ROM_RELOAD ( 0x180000, 0x40000)
2203 ROM_LOAD16_BYTE( "mpr-13189.3", 0x100001, 0x40000, CRC(5ea5a2f3) SHA1(514b5446303c50aeb1d6d10d0a3f210da2577e16) )
2204 ROM_RELOAD ( 0x180001, 0x40000)
2205
2206 ROM_REGION( 0x1c2000, "floppy", 0)
2207 ROM_LOAD( "ds3-5000-07b.img", 0x000000, 0x1c2000, CRC(efa7f2a7) SHA1(eb905bff88fa40324fb92b91ac8a5878648c26e5) )
2208 ROM_END
2209
2210 ROM_START( quizmeku ) // Quiz Mekuromeku Story
2211 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2212 ROM_LOAD16_BYTE( "epr15343.ic2", 0x000000, 0x20000, CRC(c72399a7) SHA1(bfbf0079ea63f89bca4ce9081aed5d5c1d9d169a) )
2213 ROM_LOAD16_BYTE( "epr15342.ic1", 0x000001, 0x20000, CRC(0968ac84) SHA1(4e1170ac123adaec32819754b5075531ff1925fe) )
2214
2215 ROM_REGION16_BE( 0x400000, "romboard", 0) // ROM board: 834-7492-12E
2216 ROM_LOAD16_BYTE( "epr15345.ic5", 0x000000, 0x80000, CRC(88030b5d) SHA1(d2feeedb9a64c3dc8dd25716209f945d12fa9b53) )
2217 ROM_LOAD16_BYTE( "epr15344.ic4", 0x000001, 0x80000, CRC(dd11b382) SHA1(2b0f49fb307a9aba0f295de64782ee095c557170) )
2218 ROM_LOAD16_BYTE( "mpr15347.ic7", 0x100000, 0x80000, CRC(0472677b) SHA1(93ae57a2817b6b54c99814fca28ef51f7ff5e559) )
2219 ROM_LOAD16_BYTE( "mpr15346.ic6", 0x100001, 0x80000, CRC(746d4d0e) SHA1(7863abe36126684772a4459d5b6f3b24670ec02b) )
2220 ROM_LOAD16_BYTE( "mpr15349.ic9", 0x200000, 0x80000, CRC(770eecf1) SHA1(86cc5b4a325198dc1da1446ecd8e718415b7998a) )
2221 ROM_LOAD16_BYTE( "mpr15348.ic8", 0x200001, 0x80000, CRC(7666e960) SHA1(f3f88d5c8318301a8c73141de60292f8349ac0ce) )
2222 ROM_END
2223
2224 ROM_START( sspirits )
2225 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2226 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2227 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2228
2229 ROM_REGION( 0x1c2000, "floppy", 0)
2230 ROM_LOAD( "ds3-5000-02-.img", 0x000000, 0x1c2000, CRC(179b98e9) SHA1(f6fc52c599c336d5c6f7aa199515268b4b3218a8) )
2231 ROM_END
2232
2233 ROM_START( sspiritj )
2234 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2235 ROM_LOAD16_BYTE( "epr-11339.ic2", 0x000000, 0x20000, CRC(75130e73) SHA1(e079739f4a3da3807aac570442c5afef1a7d7b0e) )
2236 ROM_LOAD16_BYTE( "epr-11338.ic1", 0x000001, 0x20000, CRC(7d4a7ff3) SHA1(3d3af04d990d232ba0a8fe155de59bc632a0a461) )
2237
2238 ROM_REGION( 0x1d6000, "floppy", 0)
2239 ROM_LOAD( "ds3-5000-02-rev-a.img", 0x000000, 0x1d6000, CRC(0385470f) SHA1(62c1bfe3a88b2dee44629809e08b4b8a5770eaab) )
2240 ROM_END
2241
2242 ROM_START( sspirtfc )
2243 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2244 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2245 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2246
2247 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2248 ROM_LOAD( "317-0058-02c.key", 0x0000, 0x2000, CRC(ebae170e) SHA1(b6d1e1b6943a35b96e98e426ecb39bb5a42fb643) )
2249
2250 ROM_REGION( 0x1c2000, "floppy", 0)
2251 ROM_LOAD( "ds3-5000-02c.img", 0x000000, 0x1c2000, NO_DUMP )
2252 ROM_END
2253
2254 ROM_START( sgmast )
2255 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2256 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2257 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2258
2259 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2260 // reconstructed key; some of the RNG-independent bits could be incorrect
2261 ROM_LOAD( "317-0058-05d.key", 0x0000, 0x2000, BAD_DUMP CRC(c779738d) SHA1(f65355c20fbcb22781816d24633a509f13bec170) )
2262
2263 ROM_REGION( 0x1c2000, "floppy", 0)
2264 ROM_LOAD( "ds3-5000-05d.img", 0x000000, 0x1c2000, CRC(e9a69f93) SHA1(dc15e47ed78373688c1fab72a9605528068ad702) )
2265 ROM_END
2266
2267 ROM_START( sgmastc )
2268 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2269 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2270 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2271
2272 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2273 ROM_LOAD( "317-0058-05c.key", 0x0000, 0x2000, CRC(ae0eabe5) SHA1(692d7565bf9c5b32cc80bb4bd88c9193aa04cbb0) )
2274
2275 ROM_REGION( 0x1c2000, "floppy", 0)
2276 ROM_LOAD( "ds3-5000-05c.img", 0x000000, 0x1c2000, CRC(63a6ef3a) SHA1(f39fe0bf8930de994b1a77e0ba787d249d73c5e5) )
2277 ROM_END
2278
2279 ROM_START( sgmastj )
2280 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2281 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2282 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2283
2284 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2285 ROM_LOAD( "317-0058-05b.key", 0x0000, 0x2000, CRC(adc0c83b) SHA1(2328d82d5057062eeb0072fd57f0422218cf24fc) )
2286
2287 ROM_REGION( 0x1c2000, "floppy", 0)
2288 ROM_LOAD( "ds3-5000-05b.img", 0x000000, 0x1c2000, CRC(a136668c) SHA1(7203f9d11023605a0a4b52a4be330785c8f7b623) )
2289 ROM_END
2290
2291 ROM_START( qsww )
2292 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2293 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2294 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2295
2296 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2297 ROM_LOAD( "317-0058-08b.key", 0x0000, 0x2000, CRC(fe0a336a) SHA1(f7a5b2c1a057d0bb8c1ae0453c58aa8f5fb731b9) )
2298
2299 ROM_REGION( 0x1c2000, "floppy", 0)
2300 ROM_LOAD( "ds3-5000-08b.img", 0x000000, 0x1c2000, CRC(5a886d38) SHA1(2e974a9ffe3534da4fb117c579b8b0e61a63542c) )
2301 ROM_END
2302
2303 ROM_START( gground )
2304 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2305 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2306 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2307
2308 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2309 ROM_LOAD( "317-0058-03d.key", 0x0000, 0x2000, CRC(e1785bbd) SHA1(b4bebb2829299f1c0815d6a5f317a2526b322f63) ) /* Also labeled "rev-A" but is it different? */
2310
2311 ROM_REGION( 0x1c2000, "floppy", 0)
2312 ROM_LOAD( "ds3-5000-03d-rev-a.img", 0x000000, 0x1c2000, CRC(5c5910f2) SHA1(9ed564a03c0d4ca4a207f3ecfb7336c6cbcaa70f) )
2313 ROM_END
2314
2315 ROM_START( ggroundj )
2316 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2317 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2318 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2319
2320 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2321 ROM_LOAD( "317-0058-03b.key", 0x0000, 0x2000, CRC(84aecdba) SHA1(ceddf967359a6e76543fe1ab00be53d0a11fe1ab) )
2322
2323 ROM_REGION( 0x1c2000, "floppy", 0)
2324 ROM_LOAD( "ds3-5000-03b.img", 0x000000, 0x1c2000, CRC(7200dac9) SHA1(07cf33bf2a0da36e3852de409959f30128cdbf77) )
2325 ROM_END
2326
2327 ROM_START( crkdown )
2328 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2329 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2330 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2331
2332 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2333 ROM_LOAD( "317-0058-04c.key", 0x0000, 0x2000, CRC(16e978cc) SHA1(0e1482b5efa93b732d4cf0990919cb3fc903dca7) )
2334
2335 ROM_REGION( 0x1c2000, "floppy", 0)
2336 ROM_LOAD( "ds3-5000-04c.img", 0x000000, 0x1c2000, CRC(7d97ba5e) SHA1(43f98bd04d031dd435bbd1bf8e6688bc57ce9666) )
2337 ROM_END
2338
2339 ROM_START( crkdownu )
2340 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2341 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2342 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2343
2344 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2345 ROM_LOAD( "317-0058-04d.key", 0x0000, 0x2000, CRC(934ac358) SHA1(73418e22c9d201bc3fec5c63284858958c010e05) )
2346
2347 ROM_REGION( 0x1c2000, "floppy", 0)
2348 ROM_LOAD( "ds3-5000-04d.img", 0x000000, 0x1c2000, CRC(8679032c) SHA1(887b245a70652897fbda736b60e81a123866ec12) )
2349 ROM_END
2350
2351 ROM_START( crkdownj )
2352 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2353 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2354 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2355
2356 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2357 ROM_LOAD( "317-0058-04b.key", 0x0000, 0x2000, CRC(4a99a202) SHA1(d7375f09e7246ecd60ba0e48f049e9e252af92a8) ) /* Also labeled "rev-A" but is it different? */
2358
2359 ROM_REGION( 0x1c2000, "floppy", 0)
2360 ROM_LOAD( "ds3-5000-04b-rev-a.img", 0x000000, 0x1c2000, CRC(5daa1a9a) SHA1(ce2f07b83b607bbbdb70f1ae344c1d897d601809) )
2361 ROM_END
2362
2363 ROM_START( dcclub )
2364 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2365 ROM_LOAD16_BYTE( "epr13948.bin", 0x000000, 0x20000, CRC(d6a031c8) SHA1(45b7e3cd2c7412e24f547cd4185166199d3938d5) )
2366 ROM_LOAD16_BYTE( "epr13947.bin", 0x000001, 0x20000, CRC(7e3cff5e) SHA1(ff8cb776d2491796feeb8892c7e644e590438945) )
2367
2368 ROM_REGION16_BE( 0x400000, "romboard", 0)
2369 ROM_LOAD16_BYTE( "epr-15345.2", 0x000000, 0x80000, CRC(d9e120c2) SHA1(b18b76733078d8534c6f0d8950632ab51e6a10ab) )
2370 ROM_LOAD16_BYTE( "epr-15344.1", 0x000001, 0x80000, CRC(8f8b9f74) SHA1(de6b923118bea60197547ad016cb5d5e1a8f372b) )
2371 ROM_LOAD16_BYTE( "mpr-14097-t.4",0x100000, 0x80000, CRC(4bd74cae) SHA1(5aa90bd5d2b8e2338ef0fe41d1f794e8d51321e1) )
2372 ROM_LOAD16_BYTE( "mpr-14096-t.3",0x100001, 0x80000, CRC(38d96502) SHA1(c68b3c5c83fd0839c3f6f81189c310ec19bdf1c4) )
2373 ROM_END
2374
2375 // Dynamic Country Club (Japan), Sega System 24
2376 // ROM board: 834-7492-09E
2377 // Main board: 837-6442-02
2378 // I/O Controller: 834-6510-01
2379 ROM_START( dcclubj )
2380 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2381 ROM_LOAD16_BYTE( "epr13948.bin", 0x000000, 0x20000, CRC(d6a031c8) SHA1(45b7e3cd2c7412e24f547cd4185166199d3938d5) )
2382 ROM_LOAD16_BYTE( "epr13947.bin", 0x000001, 0x20000, CRC(7e3cff5e) SHA1(ff8cb776d2491796feeb8892c7e644e590438945) )
2383
2384 ROM_REGION16_BE( 0x400000, "romboard", 0)
2385 ROM_LOAD16_BYTE( "epr-14095a.2", 0x000000, 0x80000, CRC(88d184e9) SHA1(519f3a22e1619de9d5f13a45b85ebd249ebfa979) )
2386 ROM_LOAD16_BYTE( "epr-14094a.1", 0x000001, 0x80000, CRC(7dd2b7d4) SHA1(c7eaf9e2700e0c55f7e867f5cd3ffaa5aae97956) )
2387 ROM_LOAD16_BYTE( "mpr-14097-t.4",0x100000, 0x80000, CRC(4bd74cae) SHA1(5aa90bd5d2b8e2338ef0fe41d1f794e8d51321e1) )
2388 ROM_LOAD16_BYTE( "mpr-14096-t.3",0x100001, 0x80000, CRC(38d96502) SHA1(c68b3c5c83fd0839c3f6f81189c310ec19bdf1c4) )
2389 ROM_END
2390
2391 ROM_START( dcclubfd )
2392 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2393 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2394 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2395
2396 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2397 ROM_LOAD( "317-0058-09d.key", 0x0000, 0x2000, CRC(a91ebffb) SHA1(70b8b4272ca456491f254d115b434bb4ce73f049) )
2398
2399 ROM_REGION( 0x1c2000, "floppy", 0)
2400 ROM_LOAD( "ds3-5000-09d.img", 0x000000, 0x1c2000, CRC(69870887) SHA1(e47a997c2c783bf6670ab213ebe2ee35492eba34) )
2401 ROM_END
2402
2403 ROM_START( roughrac )
2404 ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2405 ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) )
2406 ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) )
2407
2408 ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */
2409 ROM_LOAD( "317-0058-06b.key", 0x000000, 0x2000, CRC(6a5bf536) SHA1(3fc3e93ce8a47d7ee86da889efad2e7eca6e2ee9) )
2410
2411 ROM_REGION( 0x1c2000, "floppy", 0)
2412 ROM_LOAD( "ds3-5000-06b.img", 0x000000, 0x1c2000, CRC(a7fb2149) SHA1(c04266ae31700b085ab45606aed83019a563de70) )
2413 ROM_END
2414
2415 /* I think the letter after the disk code is the region
2416 'b' = Japan
2417 'c' = Europe?
2418 'd' = US
2419 */
2420
2421
2422 /*************************************
2423 *
2424 * Game-specific driver inits
2425 *
2426 *************************************/
2427
2428 void segas24_state::init_qgh()
2429 {
2430 m_mlatch_table = s_qgh_mlt;
2431 m_track_size = 0;
2432 }
2433
init_dcclub()2434 void segas24_state::init_dcclub()
2435 {
2436 m_mlatch_table = s_dcclub_mlt;
2437 m_track_size = 0;
2438 }
2439
init_qrouka()2440 void segas24_state::init_qrouka()
2441 {
2442 m_mlatch_table = s_qrouka_mlt;
2443 m_track_size = 0;
2444 }
2445
init_quizmeku()2446 void segas24_state::init_quizmeku()
2447 {
2448 m_mlatch_table = s_quizmeku_mlt;
2449 m_track_size = 0;
2450 }
2451
init_mahmajn()2452 void segas24_state::init_mahmajn()
2453 {
2454 m_mlatch_table = s_mahmajn_mlt;
2455 m_track_size = 0;
2456 m_cur_input_line = 0;
2457 save_item(NAME(m_cur_input_line));
2458 }
2459
init_mahmajn2()2460 void segas24_state::init_mahmajn2()
2461 {
2462 m_mlatch_table = s_mahmajn2_mlt;
2463 m_track_size = 0;
2464 m_cur_input_line = 0;
2465 save_item(NAME(m_cur_input_line));
2466 }
2467
init_hotrod()2468 void segas24_state::init_hotrod()
2469 {
2470 m_mlatch_table = nullptr;
2471
2472 // Sector Size
2473 // 1 8192
2474 // 2 1024
2475 // 3 1024
2476 // 4 1024
2477 // 5 512
2478 // 6 256
2479
2480 m_track_size = 0x2f00;
2481 }
2482
init_bnzabros()2483 void segas24_state::init_bnzabros()
2484 {
2485 m_mlatch_table = s_bnzabros_mlt;
2486
2487 // Sector Size
2488 // 1 2048
2489 // 2 2048
2490 // 3 2048
2491 // 4 2048
2492 // 5 2048
2493 // 6 1024
2494 // 7 256
2495
2496 m_track_size = 0x2d00;
2497 }
2498
init_sspirits()2499 void segas24_state::init_sspirits()
2500 {
2501 m_mlatch_table = nullptr;
2502 m_track_size = 0x2d00;
2503 }
2504
init_sspiritj()2505 void segas24_state::init_sspiritj()
2506 {
2507 m_mlatch_table = nullptr;
2508 m_track_size = 0x2f00;
2509 }
2510
init_dcclubfd()2511 void segas24_state::init_dcclubfd()
2512 {
2513 m_mlatch_table = s_dcclub_mlt;
2514 m_track_size = 0x2d00;
2515 }
2516
2517
init_sgmast()2518 void segas24_state::init_sgmast()
2519 {
2520 m_mlatch_table = nullptr;
2521 m_track_size = 0x2d00;
2522 }
2523
init_qsww()2524 void segas24_state::init_qsww()
2525 {
2526 m_mlatch_table = nullptr;
2527 m_track_size = 0x2d00;
2528 }
2529
init_gground()2530 void segas24_state::init_gground()
2531 {
2532 m_mlatch_table = nullptr;
2533 m_track_size = 0x2d00;
2534
2535 m_gground_hack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas24_state::gground_hack_timer_callback), this));
2536 }
2537
init_crkdown()2538 void segas24_state::init_crkdown()
2539 {
2540 m_mlatch_table = nullptr;
2541 m_track_size = 0x2d00;
2542 }
2543
init_roughrac()2544 void segas24_state::init_roughrac()
2545 {
2546 m_mlatch_table = nullptr;
2547 m_track_size = 0x2d00;
2548 }
2549
2550
2551 /*************************************
2552 *
2553 * Game driver(s)
2554 *
2555 *************************************/
2556
2557 // YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY FULLNAME FLAGS
2558 /* Disk Based Games */
2559 /* 01 */GAME( 1988, hotrod, 0, system24_floppy_hotrod, hotrod, segas24_state, init_hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 1, Floppy Based)", 0 )
2560 /* 01 */GAME( 1988, hotroda, hotrod, system24_floppy_hotrod, hotrod, segas24_state, init_hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 2, Floppy Based)", 0 )
2561 /* 01 */GAME( 1988, hotrodj, hotrod, system24_floppy_hotrod, hotrodj, segas24_state, init_hotrod, ROT0, "Sega", "Hot Rod (Japan, 4 Players, Floppy Based, Rev C)", 0 )
2562 /* 01 */GAME( 1988, hotrodja, hotrod, system24_floppy_hotrod, hotrodj, segas24_state, init_hotrod, ROT0, "Sega", "Hot Rod (Japan, 4 Players, Floppy Based, Rev B)", 0 )
2563 /* 02 */GAME( 1988, sspirits, 0, system24_floppy, sspirits, segas24_state, init_sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based)", 0 )
2564 /* 02 */GAME( 1988, sspiritj, sspirits, system24_floppy, sspirits, segas24_state, init_sspiritj, ROT270, "Sega", "Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based)", 0 )
2565 /* 02 */GAME( 1988, sspirtfc, sspirits, system24_floppy_fd1094, sspirits, segas24_state, init_sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c)", MACHINE_NOT_WORKING ) /* MISSING disk image */
2566 /* 03 */GAME( 1988, gground, 0, system24_floppy_fd1094, gground, segas24_state, init_gground, ROT270, "Sega", "Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A)", 0 )
2567 /* 03 */GAME( 1988, ggroundj, gground, system24_floppy_fd1094, gground, segas24_state, init_gground, ROT270, "Sega", "Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b)", 0 )
2568 /* 04 */GAME( 1989, crkdown, 0, system24_floppy_fd1094, crkdown, segas24_state, init_crkdown, ROT0, "Sega", "Crack Down (World, Floppy Based, FD1094 317-0058-04c)", MACHINE_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display)
2569 /* 04 */GAME( 1989, crkdownu, crkdown, system24_floppy_fd1094, crkdown, segas24_state, init_crkdown, ROT0, "Sega", "Crack Down (US, Floppy Based, FD1094 317-0058-04d)", MACHINE_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display)
2570 /* 04 */GAME( 1989, crkdownj, crkdown, system24_floppy_fd1094, crkdown, segas24_state, init_crkdown, ROT0, "Sega", "Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A)", MACHINE_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display)
2571 /* 05 */GAME( 1989, sgmast, 0, system24_floppy_dcclub, sgmast, segas24_state, init_sgmast, ROT0, "Sega", "Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?)", 0 )
2572 /* 05 */GAME( 1989, sgmastc, sgmast, system24_floppy_dcclub, sgmast, segas24_state, init_sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", MACHINE_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs?
2573 /* 05 */GAME( 1989, sgmastj, sgmast, sgmastj, sgmastj, segas24_state, init_sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", MACHINE_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs?
2574 /* 06 */GAME( 1990, roughrac, 0, system24_floppy_fd_upd, roughrac, segas24_state, init_roughrac, ROT0, "Sega", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", 0 )
2575 /* 07 */GAME( 1990, bnzabros, 0, system24_floppy_rom, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", 0 )
2576 /* 07 */GAME( 1990, bnzabrosj, bnzabros, system24_floppy_rom, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", 0 )
2577 /* 08 */GAME( 1991, qsww, 0, system24_floppy_fd1094, qsww, segas24_state, init_qsww, ROT0, "Sega", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", MACHINE_IMPERFECT_GRAPHICS ) // wrong bg colour on title
2578 /* 09 */GAME( 1991, dcclubfd, dcclub, system24_floppy_dcclub, dcclub, segas24_state, init_dcclubfd, ROT0, "Sega", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", 0 )
2579
2580 // YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY FULLNAME FLAGS
2581 /* ROM Based */
2582 GAME( 1991, dcclub, 0, dcclub, dcclub, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (World, ROM Based)", 0 )
2583 GAME( 1991, dcclubj, dcclub, dcclubj, dcclubj, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (Japan, ROM Based)", 0 )
2584 GAME( 1991, qrouka, 0, system24_rom, qrouka, segas24_state, init_qrouka, ROT0, "Sega", "Quiz Rouka Ni Tattenasai (Japan, ROM Based)", 0 )
2585 GAME( 1992, quizmeku, 0, system24_rom, quizmeku, segas24_state, init_quizmeku, ROT0, "Sega", "Quiz Mekurumeku Story (Japan, ROM Based)", 0 ) /* Released in 05.1993 */
2586 GAME( 1992, mahmajn, 0, mahmajn, mahmajn, segas24_state, init_mahmajn, ROT0, "Sega", "Tokoro San no MahMahjan (Japan, ROM Based)", 0 )
2587 GAME( 1994, qgh, 0, system24_rom, qgh, segas24_state, init_qgh, ROT0, "Sega", "Quiz Ghost Hunter (Japan, ROM Based)", 0 )
2588 GAME( 1994, mahmajn2, 0, mahmajn, mahmajn, segas24_state, init_mahmajn2, ROT0, "Sega", "Tokoro San no MahMahjan 2 (Japan, ROM Based)", 0 )
2589