trunk/src/mame/drivers/ksys573.c
r26565 | r26566 | |
290 | 290 | (CN4, CN3, CN2 is printed pattern only, no actual connector) |
291 | 291 | |
292 | 292 | |
293 | | |
294 | | Digital I/O PCB |
295 | | --------------- |
296 | | |
297 | | GX894-PWB(B)A (C)1999 KONAMI CO. LTD. |
298 | | |
299 | | |-------------| |
300 | | | CN12 | |
301 | | | | |
302 | | | PC847 PC847 | |
303 | | | | |
304 | | | CN11 | |
305 | | | | |
306 | | | PC847 PC847 | |
307 | | | | |
308 | | | DS2401 CN10 | |
309 | | | | |
310 | | | PC847 PC847 | |
311 | | | | |
312 | | | CN14 CN13 | |
313 | | |----------| |----------| |
314 | | | PC847 | |
315 | | | ADM232 CN17 XC9536 | |
316 | | | | |
317 | | | 19.6608MHz |-----------| |
318 | | | ADM232 CN15 CY7C109 | |
319 | | | HY51V65164A HY51V65164A | |
320 | | | HY51V65164A | |
321 | | | CN16 XCS40XL | |
322 | | | | |
323 | | | AK4309B CN18 29.450MHz MAS3507D | |
324 | | | | |
325 | | | CN3 | |
326 | | | HYC24855 RCA-L/R | |
327 | | |-----------------------------------------------| |
328 | | |
329 | | Notes: |
330 | | |
331 | | PC847 - High Density Mounting Type Photocoupler |
332 | | CN12 - 13 pin connector with 8 wires to external connectors |
333 | | CN11 - 12 pin connector with 8 wires to external connectors |
334 | | DS2401 - DS2401 911C2 Silicon serial number |
335 | | CN10 - 10 pin connector with 8 wires to external connectors |
336 | | CN14 - 7 pin connector |
337 | | CN13 - 5 pin connector with 2 wires to external connectors |
338 | | ADM232 - ADM232AARN 9933 H48475 High Speed, 5 V, 0.1 uF CMOS RS-232 Drivers/Receivers |
339 | | CN17 - 3 pin connector |
340 | | XC9536 - XILINX XC9536 PC44AEM9933 F1096429A 15C |
341 | | CN15 - 8 pin connector |
342 | | CY7C109 - CY7C109-25VC 931 H 04 404825 128k x 8 Static RAM |
343 | | HY51V65164A - 64M bit dynamic EDO RAM |
344 | | CN16 - 4 pin connector joining this PCB to the CD-DA IN on the MAIN PCB. |
345 | | XCS40XL - XILINX XCS40XL PQ208AKP9929 A2033251A 4C |
346 | | AK4309B - AKM AK4309B 3N932N 16bit SCF DAC |
347 | | CN18 - 6 pin connector |
348 | | MAS3507D - IM MAS3507D D8 9173 51 HM U 072953.000 ES MPEG 1/2 Layer 2/3 Audio Decoder |
349 | | CN3 - Connector joining this PCB to the MAIN PCB |
350 | | HYC24855 - ? |
351 | | RCA-L/R - RCA connectors for left/right audio output |
352 | | |
353 | | Drummania 10th Mix Multisession |
354 | | ------------------------------- |
355 | | |
356 | | This box is used with multi-session System 573 games. |
357 | | |
358 | | Main board is standard GX700 PCB with CDROM (Drummania 10th Mix Multisession) |
359 | | and Digital I/O Board GX894-PWB(B)A |
360 | | BIOS is on a small plug-in daughterboard. |
361 | | Daughterboard contains one EPROM, one PAL22V10, 2 logic chips and a PIC16F84. |
362 | | The dumps provided are the EPROM dumped separately and a dump of the 'board' |
363 | | with it plugged in (reading may be affected by the PIC) |
364 | | |
365 | | |
366 | | PCB Layout of External Multisession Box |
367 | | --------------------------------------- |
368 | | |
369 | | GXA25-PWB(A)(C)2000 KONAMI |
370 | | |--------------------------------------------------------------------------| |
371 | | |CN9 ADM232 LS273 PC16552 PC16552 XC9536(1) CN13| |
372 | | |DSW(8) LS245 LS273 18.432MHz DS2401 | |
373 | | | |-------| |-------| |-------| |-------| | |
374 | | | MB3793 |TOSHIBA| |TOSHIBA| |TOSHIBA| |TOSHIBA|M48T58Y.6T| |
375 | | | |TC9446F| |TC9446F| |TC9446F| |TC9446F| | |
376 | | | |-016 | |-016 | |-016 | |-016 | CN12| |
377 | | | |-------| |-------| |-------| |-------| | |
378 | | | LV14 XC9572XL | |
379 | | | CN16 CN17 CN18 CN19 XC9536(2)| |
380 | | |PQ30RV21 LCX245 LCX245 CN11| |
381 | | | 33.8688MHz PQ30RV21 | |
382 | | | 8.25MHz HY57V641620 | |
383 | | | |------------| HY57V641620 XC2S200 | |
384 | | | |TOSHIBA | FLASH.20T | |
385 | | | |TMPR3927AF | CN10| |
386 | | | | | | |
387 | | | | | LS245 F245 F245 | |
388 | | | | |HY57V641620 LCX245 DIP40 | |
389 | | | |------------| HY57V641620 LCX245 ATAPI44 | |
390 | | | LCX245 LED(HDD) ATAPI40 | |
391 | | | CN7 LCX245 CN14 LED(CD) CN5 | |
392 | | |--------------------------------------------------------------------------| |
393 | | Notes: (all IC's shown) |
394 | | TMPR3927 - Toshiba TMPR3927AF Risc Microprocessor (QFP240) |
395 | | FLASH.20T - Fujitsu 29F400TC Flash ROM (TSOP48) |
396 | | ATAPI44 - IDE44 44-pin laptop type HDD connector (not used) |
397 | | ATAPI40 - IDE40 40-pin flat cable HDD connector used for connection of CDROM drive |
398 | | XC9572XL - XILINX XC9572XL In-system Programmable CPLD stamped 'XA25A1' (TQFP100) |
399 | | XC9536(1) - XILINX CPLD stamped 'XA25A3' (PLCC44) |
400 | | XC9536(2) - XILINX CPLD stamped 'XA25A2' (PLCC44) |
401 | | XC2S200 - XILINX XC2S200 SPARTAN FPGA (QFP208) |
402 | | DS2401 - MAXIM Dallas DS2401 Silicon Serial Number (SOIC6) |
403 | | M48T58Y - ST M48T58Y Timekeeper NVRAM 8k bytes x8-bit (DIP28). Chip appears empty (0x04 fill) or unused |
404 | | MB3793 - Fujitsu MB3793 Power-Voltage Monitoring IC with Watchdog Timer (SOIC8) |
405 | | DIP40 - Empty DIP40 socket |
406 | | HY57V641620 - Hyundai/Hynix HY57V641620 4 Banks x 1M x 16Bit Synchronous DRAM |
407 | | PC16552D - National PC16552D Dual Universal Asynchronous Receiver/Transmitter with FIFO's |
408 | | TC9446F - Toshiba TC9446F-016 Audio Digital Processor for Decode of Dolby Digital (AC-3) MPEG2 Audio |
409 | | CN16-CN19 - Connector for sub board (3 of them are present). One board connects via a thin cable from |
410 | | CN1 to the main board to a connector on the security board labelled 'AMP BOX'. |
411 | | |
412 | | Sub Board Layout |
413 | | ---------------- |
414 | | |
415 | | GXA25-PWB(B) (C) 2000 KONAMI |
416 | | |---------------------------------| |
417 | | | TLP2630 LV14 ADM232 | |
418 | | |CN2 CN1| |
419 | | |A2430 AK5330 | |
420 | | | | |
421 | | | RCA L/R| |
422 | | |ZUS1R50505 6379A | |
423 | | | LM358 | |
424 | | |---------------------------------| |
425 | | |
426 | 293 | PCMCIA Flash Card |
427 | 294 | ----------------- |
428 | 295 | |
r26565 | r26566 | |
486 | 353 | #include "machine/ds2401.h" |
487 | 354 | #include "machine/linflash.h" |
488 | 355 | #include "machine/k573cass.h" |
| 356 | #include "machine/k573dio.h" |
| 357 | #include "machine/k573msu.h" |
489 | 358 | #include "machine/mb89371.h" |
490 | | #include "machine/mpeg573.h" |
491 | 359 | #include "machine/timekpr.h" |
492 | 360 | #include "machine/upd4701.h" |
493 | 361 | #include "sound/spu.h" |
r26565 | r26566 | |
712 | 580 | |
713 | 581 | static ADDRESS_MAP_START( konami573d_map, AS_PROGRAM, 32, ksys573_state ) |
714 | 582 | AM_IMPORT_FROM( konami573_map ) |
715 | | AM_RANGE( 0x1f640000, 0x1f6400ff ) AM_DEVICE16( "mpeg573", mpeg573_device, amap, 0xffffffff ) |
| 583 | AM_RANGE( 0x1f640000, 0x1f6400ff ) AM_DEVICE16( "k573dio", k573dio_device, amap, 0xffffffff ) |
716 | 584 | ADDRESS_MAP_END |
717 | 585 | |
718 | 586 | static ADDRESS_MAP_START( konami573a_map, AS_PROGRAM, 32, ksys573_state ) |
r26565 | r26566 | |
2225 | 2093 | static MACHINE_CONFIG_DERIVED( k573d, konami573 ) |
2226 | 2094 | MCFG_CPU_MODIFY( "maincpu" ) |
2227 | 2095 | MCFG_CPU_PROGRAM_MAP( konami573d_map ) |
2228 | | MCFG_MPEG573_ADD( "mpeg573", XTAL_19_6608MHz, NOOP ) |
| 2096 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_ADD( "k573dio", XTAL_19_6608MHz ) |
2229 | 2097 | MACHINE_CONFIG_END |
2230 | 2098 | |
2231 | 2099 | // Variants with additional analogue i/o board |
r26565 | r26566 | |
2354 | 2222 | MACHINE_CONFIG_END |
2355 | 2223 | |
2356 | 2224 | static MACHINE_CONFIG_DERIVED( ddr3m, k573d ) |
2357 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2358 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2225 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2226 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2359 | 2227 | |
2360 | 2228 | MCFG_FRAGMENT_ADD( pccard2_32mb ) |
2361 | 2229 | MCFG_FRAGMENT_ADD( cassyyi ) |
2362 | 2230 | MACHINE_CONFIG_END |
2363 | 2231 | |
2364 | 2232 | static MACHINE_CONFIG_DERIVED( ddr3mp, k573d ) |
2365 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2366 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2233 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2234 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2367 | 2235 | |
2368 | 2236 | MCFG_FRAGMENT_ADD( pccard2_32mb ) |
2369 | 2237 | MCFG_FRAGMENT_ADD( cassxzi ) |
2370 | 2238 | MACHINE_CONFIG_END |
2371 | 2239 | |
2372 | 2240 | static MACHINE_CONFIG_DERIVED( ddrusa, k573d ) |
2373 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2374 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2241 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2242 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2375 | 2243 | |
2376 | 2244 | MCFG_FRAGMENT_ADD( casszi ) |
2377 | 2245 | MACHINE_CONFIG_END |
2378 | 2246 | |
2379 | 2247 | static MACHINE_CONFIG_DERIVED( ddr5m, k573d ) |
2380 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2381 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2248 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2249 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2382 | 2250 | |
2383 | 2251 | MCFG_FRAGMENT_ADD( pccard2_32mb ) |
2384 | 2252 | MCFG_FRAGMENT_ADD( casszi ) |
r26565 | r26566 | |
2396 | 2264 | MACHINE_CONFIG_END |
2397 | 2265 | |
2398 | 2266 | static MACHINE_CONFIG_DERIVED( dsfdr, k573d ) |
2399 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2400 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2267 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2268 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2401 | 2269 | |
2402 | 2270 | MCFG_FRAGMENT_ADD( cassxzi ) |
2403 | 2271 | MACHINE_CONFIG_END |
2404 | 2272 | |
2405 | 2273 | static MACHINE_CONFIG_DERIVED( dsem, k573d ) |
2406 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2407 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
| 2274 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2275 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddr_output_callback ) ) |
2408 | 2276 | |
2409 | 2277 | MCFG_FRAGMENT_ADD( cassxi ) |
2410 | 2278 | MACHINE_CONFIG_END |
r26565 | r26566 | |
2412 | 2280 | // Dance Dance Revolution Solo |
2413 | 2281 | |
2414 | 2282 | static MACHINE_CONFIG_DERIVED( ddrsolo, k573d ) |
2415 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2416 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
| 2283 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2284 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
2417 | 2285 | |
2418 | 2286 | MCFG_FRAGMENT_ADD( cassyi ) |
2419 | 2287 | MACHINE_CONFIG_END |
2420 | 2288 | |
2421 | 2289 | static MACHINE_CONFIG_DERIVED( ddrs2k, k573d ) |
2422 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2423 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
| 2290 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2291 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
2424 | 2292 | |
2425 | 2293 | MCFG_FRAGMENT_ADD( cassyyi ) |
2426 | 2294 | MACHINE_CONFIG_END |
2427 | 2295 | |
2428 | 2296 | static MACHINE_CONFIG_DERIVED( ddr4ms, k573d ) |
2429 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2430 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
| 2297 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2298 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, ddrsolo_output_callback ) ) |
2431 | 2299 | |
2432 | 2300 | MCFG_FRAGMENT_ADD( pccard2_32mb ) |
2433 | 2301 | MCFG_FRAGMENT_ADD( cassxzi ) |
r26565 | r26566 | |
2440 | 2308 | MACHINE_CONFIG_END |
2441 | 2309 | |
2442 | 2310 | static MACHINE_CONFIG_DERIVED( drmn2m, k573d ) |
2443 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2444 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, drmn_output_callback ) ) |
| 2311 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2312 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, drmn_output_callback ) ) |
2445 | 2313 | |
2446 | 2314 | MCFG_FRAGMENT_ADD( cassxzi ) |
2447 | 2315 | MACHINE_CONFIG_END |
2448 | 2316 | |
2449 | 2317 | static MACHINE_CONFIG_DERIVED( drmn4m, k573d ) |
2450 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2451 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, drmn_output_callback ) ) |
| 2318 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2319 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, drmn_output_callback ) ) |
2452 | 2320 | |
2453 | 2321 | MCFG_FRAGMENT_ADD( casszi ) |
| 2322 | |
| 2323 | MCFG_DEVICE_ADD( "k573msu", KONAMI_573_MULTI_SESSION_UNIT, 0 ) |
2454 | 2324 | MACHINE_CONFIG_END |
2455 | 2325 | |
2456 | 2326 | // Guitar Freaks |
r26565 | r26566 | |
2543 | 2413 | MACHINE_CONFIG_END |
2544 | 2414 | |
2545 | 2415 | static MACHINE_CONFIG_DERIVED( dmx, k573d ) |
2546 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2547 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, dmx_output_callback ) ) |
| 2416 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2417 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, dmx_output_callback ) ) |
2548 | 2418 | |
2549 | 2419 | MCFG_FRAGMENT_ADD( casszi ) |
2550 | 2420 | MACHINE_CONFIG_END |
2551 | 2421 | |
2552 | 2422 | static MACHINE_CONFIG_DERIVED( mamboagg, k573d ) |
2553 | | MCFG_DEVICE_MODIFY( "mpeg573" ) |
2554 | | MCFG_MPEG573_OUTPUT_CALLBACK( WRITE8( ksys573_state, mamboagg_output_callback ) ) |
| 2423 | MCFG_DEVICE_MODIFY( "k573dio" ) |
| 2424 | MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( WRITE8( ksys573_state, mamboagg_output_callback ) ) |
2555 | 2425 | |
2556 | 2426 | MCFG_FRAGMENT_ADD( casszi ) |
2557 | 2427 | MACHINE_CONFIG_END |
trunk/src/mame/machine/mpeg573.c
r26565 | r26566 | |
1 | | #include "emu.h" |
2 | | #include "mpeg573.h" |
3 | | |
4 | | const device_type MPEG573 = &device_creator<mpeg573_device>; |
5 | | |
6 | | DEVICE_ADDRESS_MAP_START(amap, 16, mpeg573_device) |
7 | | AM_RANGE(0x00, 0x01) AM_READ(a00_r) |
8 | | AM_RANGE(0x02, 0x03) AM_READ(a02_r) |
9 | | AM_RANGE(0x04, 0x05) AM_READ(a04_r) |
10 | | AM_RANGE(0x06, 0x07) AM_READ(a06_r) |
11 | | AM_RANGE(0x0a, 0x0b) AM_READ(a0a_r) |
12 | | AM_RANGE(0x80, 0x81) AM_READ(a80_r) |
13 | | AM_RANGE(0xa0, 0xa1) AM_WRITE(mpeg_start_adr_high_w) |
14 | | AM_RANGE(0xa2, 0xa3) AM_WRITE(mpeg_start_adr_low_w) |
15 | | AM_RANGE(0xa4, 0xa5) AM_WRITE(mpeg_end_adr_high_w) |
16 | | AM_RANGE(0xa6, 0xa7) AM_WRITE(mpeg_end_adr_low_w) |
17 | | AM_RANGE(0xa8, 0xa9) AM_WRITE(mpeg_key_1_w) |
18 | | AM_RANGE(0xac, 0xad) AM_READWRITE(mas_i2c_r, mas_i2c_w) |
19 | | AM_RANGE(0xae, 0xaf) AM_WRITE(mpeg_ctrl_w) |
20 | | AM_RANGE(0xb0, 0xb1) AM_WRITE(ram_write_adr_high_w) |
21 | | AM_RANGE(0xb2, 0xb3) AM_WRITE(ram_write_adr_low_w) |
22 | | AM_RANGE(0xb4, 0xb5) AM_READWRITE(ram_r, ram_w) |
23 | | AM_RANGE(0xb6, 0xb7) AM_WRITE(ram_read_adr_high_w) |
24 | | AM_RANGE(0xb8, 0xb9) AM_WRITE(ram_read_adr_low_w) |
25 | | AM_RANGE(0xe0, 0xe1) AM_WRITE(output_1_w) |
26 | | AM_RANGE(0xe2, 0xe3) AM_WRITE(output_0_w) |
27 | | AM_RANGE(0xe4, 0xe5) AM_WRITE(output_3_w) |
28 | | AM_RANGE(0xe6, 0xe7) AM_WRITE(output_7_w) |
29 | | AM_RANGE(0xea, 0xeb) AM_WRITE(mpeg_key_2_w) |
30 | | AM_RANGE(0xec, 0xed) AM_WRITE(mpeg_key_3_w) |
31 | | AM_RANGE(0xee, 0xef) AM_READWRITE(digital_id_r, digital_id_w) |
32 | | AM_RANGE(0xf6, 0xf7) AM_READ(fpga_status_r) |
33 | | AM_RANGE(0xf8, 0xf9) AM_WRITE(fpga_firmware_w) |
34 | | AM_RANGE(0xfa, 0xfb) AM_WRITE(output_4_w) |
35 | | AM_RANGE(0xfc, 0xfd) AM_WRITE(output_5_w) |
36 | | AM_RANGE(0xfe, 0xff) AM_WRITE(output_2_w) |
37 | | ADDRESS_MAP_END |
38 | | |
39 | | static MACHINE_CONFIG_FRAGMENT( mpeg573 ) |
40 | | MCFG_MAS3507D_ADD( "mpeg" ) |
41 | | MCFG_DS2401_ADD( "digital_id" ) |
42 | | MACHINE_CONFIG_END |
43 | | |
44 | | mpeg573_device::mpeg573_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
45 | | : device_t(mconfig, MPEG573, "Konami 573 digital audio board", tag, owner, clock, "mpeg573", __FILE__), |
46 | | mas3507d(*this, "mpeg"), |
47 | | digital_id(*this, "digital_id"), |
48 | | output_cb(*this) |
49 | | { |
50 | | } |
51 | | |
52 | | void mpeg573_device::device_start() |
53 | | { |
54 | | output_cb.resolve_safe(); |
55 | | ram = auto_alloc_array( machine(), UINT16, 12 * 1024 * 1024 ); |
56 | | save_pointer( NAME(ram), 12 * 1024 * 1024 ); |
57 | | } |
58 | | |
59 | | void mpeg573_device::device_reset() |
60 | | { |
61 | | ram_adr = 0; |
62 | | memset(output_data, 0, sizeof(output_data)); |
63 | | } |
64 | | |
65 | | ROM_START( mpeg573 ) |
66 | | ROM_REGION( 0x000008, "digital_id", 0 ) |
67 | | ROM_LOAD( "digital-id.bin", 0x000000, 0x000008, CRC(2b977f4d) SHA1(2b108a56653f91cb3351718c45dfcf979bc35ef1) ) |
68 | | ROM_END |
69 | | |
70 | | const rom_entry *mpeg573_device::device_rom_region() const |
71 | | { |
72 | | return ROM_NAME(mpeg573); |
73 | | } |
74 | | |
75 | | machine_config_constructor mpeg573_device::device_mconfig_additions() const |
76 | | { |
77 | | return MACHINE_CONFIG_NAME( mpeg573 ); |
78 | | } |
79 | | |
80 | | void mpeg573_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
81 | | { |
82 | | } |
83 | | |
84 | | READ16_MEMBER(mpeg573_device::a00_r) |
85 | | { |
86 | | logerror("%s: a00_r (%s)\n", tag(), machine().describe_context()); |
87 | | return 0x0000; |
88 | | } |
89 | | |
90 | | READ16_MEMBER(mpeg573_device::a02_r) |
91 | | { |
92 | | logerror("%s: a02_r (%s)\n", tag(), machine().describe_context()); |
93 | | return 0x0001; |
94 | | } |
95 | | |
96 | | READ16_MEMBER(mpeg573_device::a04_r) |
97 | | { |
98 | | logerror("%s: a04_r (%s)\n", tag(), machine().describe_context()); |
99 | | return 0x0000; |
100 | | } |
101 | | |
102 | | READ16_MEMBER(mpeg573_device::a06_r) |
103 | | { |
104 | | logerror("%s: a06_r (%s)\n", tag(), machine().describe_context()); |
105 | | return 0x0000; |
106 | | } |
107 | | |
108 | | READ16_MEMBER(mpeg573_device::a0a_r) |
109 | | { |
110 | | logerror("%s: a0a_r (%s)\n", tag(), machine().describe_context()); |
111 | | return 0x0000; |
112 | | } |
113 | | |
114 | | READ16_MEMBER(mpeg573_device::a80_r) |
115 | | { |
116 | | logerror("%s: a80_r (%s)\n", tag(), machine().describe_context()); |
117 | | return 0x1234; |
118 | | } |
119 | | |
120 | | WRITE16_MEMBER(mpeg573_device::mpeg_start_adr_high_w) |
121 | | { |
122 | | logerror("FPGA MPEG start address high %04x\n", data); |
123 | | } |
124 | | |
125 | | WRITE16_MEMBER(mpeg573_device::mpeg_start_adr_low_w) |
126 | | { |
127 | | logerror("FPGA MPEG start address low %04x\n", data); |
128 | | } |
129 | | |
130 | | WRITE16_MEMBER(mpeg573_device::mpeg_end_adr_high_w) |
131 | | { |
132 | | logerror("FPGA MPEG end address high %04x\n", data); |
133 | | } |
134 | | |
135 | | WRITE16_MEMBER(mpeg573_device::mpeg_end_adr_low_w) |
136 | | { |
137 | | logerror("FPGA MPEG end address low %04x\n", data); |
138 | | } |
139 | | |
140 | | WRITE16_MEMBER(mpeg573_device::mpeg_key_1_w) |
141 | | { |
142 | | logerror("FPGA MPEG key 1/3 %04x\n", data); |
143 | | } |
144 | | |
145 | | READ16_MEMBER(mpeg573_device::mas_i2c_r) |
146 | | { |
147 | | return (mas3507d->i2c_scl_r() << 13) | (mas3507d->i2c_sda_r() << 12); |
148 | | } |
149 | | |
150 | | WRITE16_MEMBER(mpeg573_device::mas_i2c_w) |
151 | | { |
152 | | mas3507d->i2c_scl_w(data & 0x2000); |
153 | | mas3507d->i2c_sda_w(data & 0x1000); |
154 | | } |
155 | | |
156 | | WRITE16_MEMBER(mpeg573_device::mpeg_ctrl_w) |
157 | | { |
158 | | logerror("FPGA MPEG control %c%c%c\n", |
159 | | data & 0x8000 ? '#' : '.', |
160 | | data & 0x4000 ? '#' : '.', |
161 | | data & 0x2000 ? '#' : '.'); |
162 | | } |
163 | | |
164 | | WRITE16_MEMBER(mpeg573_device::ram_write_adr_high_w) |
165 | | { |
166 | | // read and write address are shared |
167 | | ram_adr = (ram_adr & 0x0000ffff) | (data << 16); |
168 | | } |
169 | | |
170 | | WRITE16_MEMBER(mpeg573_device::ram_write_adr_low_w) |
171 | | { |
172 | | // read and write address are shared |
173 | | ram_adr = (ram_adr & 0xffff0000) | data; |
174 | | } |
175 | | |
176 | | READ16_MEMBER(mpeg573_device::ram_r) |
177 | | { |
178 | | UINT16 res = ram[ram_adr >> 1]; |
179 | | ram_adr += 2; |
180 | | return res; |
181 | | } |
182 | | |
183 | | WRITE16_MEMBER(mpeg573_device::ram_w) |
184 | | { |
185 | | ram[ram_adr >> 1] = data; |
186 | | ram_adr += 2; |
187 | | } |
188 | | |
189 | | WRITE16_MEMBER(mpeg573_device::ram_read_adr_high_w) |
190 | | { |
191 | | // read and write address are shared |
192 | | ram_adr = (ram_adr & 0x0000ffff) | (data << 16); |
193 | | } |
194 | | |
195 | | WRITE16_MEMBER(mpeg573_device::ram_read_adr_low_w) |
196 | | { |
197 | | // read and write address are shared |
198 | | ram_adr = (ram_adr & 0xffff0000) | data; |
199 | | } |
200 | | |
201 | | WRITE16_MEMBER(mpeg573_device::output_1_w) |
202 | | { |
203 | | output(1, data); |
204 | | } |
205 | | |
206 | | WRITE16_MEMBER(mpeg573_device::output_0_w) |
207 | | { |
208 | | output(0, data); |
209 | | } |
210 | | |
211 | | WRITE16_MEMBER(mpeg573_device::output_3_w) |
212 | | { |
213 | | output(3, data); |
214 | | } |
215 | | |
216 | | WRITE16_MEMBER(mpeg573_device::output_7_w) |
217 | | { |
218 | | output(7, data); |
219 | | } |
220 | | |
221 | | WRITE16_MEMBER(mpeg573_device::mpeg_key_2_w) |
222 | | { |
223 | | logerror("FPGA MPEG key 2/3 %04x\n", data); |
224 | | } |
225 | | |
226 | | WRITE16_MEMBER(mpeg573_device::mpeg_key_3_w) |
227 | | { |
228 | | logerror("FPGA MPEG key 3/3 %04x\n", data); |
229 | | } |
230 | | |
231 | | READ16_MEMBER(mpeg573_device::digital_id_r) |
232 | | { |
233 | | return digital_id->read() << 12; |
234 | | } |
235 | | |
236 | | WRITE16_MEMBER(mpeg573_device::digital_id_w) |
237 | | { |
238 | | digital_id->write( !( ( data >> 12 ) & 1 ) ); |
239 | | } |
240 | | |
241 | | READ16_MEMBER(mpeg573_device::fpga_status_r) |
242 | | { |
243 | | logerror("%s: fpga_status_r (%s)\n", tag(), machine().describe_context()); |
244 | | |
245 | | // fpga/digital board status checks |
246 | | // wants & c000 = 8000 (just after program upload?) |
247 | | // write 0000 to +f4.w |
248 | | // write 8000 to +f6.w |
249 | | |
250 | | /* fails if !8000 */ |
251 | | /* fails if 4000 */ |
252 | | /* fails if !2000 */ |
253 | | /* fails if !1000 */ |
254 | | return 0x8000 | 0x2000 | 0x1000; |
255 | | } |
256 | | |
257 | | WRITE16_MEMBER(mpeg573_device::fpga_firmware_w) |
258 | | { |
259 | | // Firmware bits in bit 15, always the same firmware |
260 | | } |
261 | | |
262 | | WRITE16_MEMBER(mpeg573_device::output_4_w) |
263 | | { |
264 | | output(4, data); |
265 | | } |
266 | | |
267 | | WRITE16_MEMBER(mpeg573_device::output_5_w) |
268 | | { |
269 | | output(5, data); |
270 | | } |
271 | | |
272 | | WRITE16_MEMBER(mpeg573_device::output_2_w) |
273 | | { |
274 | | output(2, data); |
275 | | } |
276 | | |
277 | | void mpeg573_device::output(int offset, UINT16 data) |
278 | | { |
279 | | data = (data >> 12) & 0x0f; |
280 | | static const int shift[] = { 0, 2, 3, 1 }; |
281 | | for(int i = 0; i < 4; i++) { |
282 | | int oldbit = (output_data[offset] >> shift[i]) & 1; |
283 | | int newbit = (data >> shift[i]) & 1; |
284 | | if(oldbit != newbit) |
285 | | output_cb(4*offset + i, newbit, 0xff); |
286 | | } |
287 | | output_data[offset] = data; |
288 | | } |
trunk/src/mame/machine/mpeg573.h
r26565 | r26566 | |
1 | | #ifndef _MPEG573_H_ |
2 | | #define _MPEG573_H_ |
3 | | |
4 | | #include "sound/mas3507d.h" |
5 | | #include "machine/ds2401.h" |
6 | | |
7 | | #define MCFG_MPEG573_ADD(_tag, _clock, _output_cb ) \ |
8 | | MCFG_DEVICE_ADD(_tag, MPEG573, _clock) \ |
9 | | downcast<mpeg573_device *>(device)->set_output_cb(DEVCB2_##_output_cb); |
10 | | |
11 | | #define MCFG_MPEG573_OUTPUT_CALLBACK( _output_cb ) \ |
12 | | downcast<mpeg573_device *>(device)->set_output_cb(DEVCB2_##_output_cb); |
13 | | |
14 | | class mpeg573_device : public device_t |
15 | | { |
16 | | public: |
17 | | mpeg573_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
18 | | |
19 | | template<class _write> void set_output_cb(_write _output_cb) |
20 | | { |
21 | | output_cb.set_callback(_output_cb); |
22 | | } |
23 | | |
24 | | required_device<mas3507d_device> mas3507d; |
25 | | required_device<ds2401_device> digital_id; |
26 | | |
27 | | DECLARE_ADDRESS_MAP(amap, 16); |
28 | | |
29 | | DECLARE_READ16_MEMBER(a00_r); |
30 | | DECLARE_READ16_MEMBER(a02_r); |
31 | | DECLARE_READ16_MEMBER(a04_r); |
32 | | DECLARE_READ16_MEMBER(a06_r); |
33 | | DECLARE_READ16_MEMBER(a0a_r); |
34 | | DECLARE_READ16_MEMBER(a80_r); |
35 | | DECLARE_WRITE16_MEMBER(mpeg_start_adr_high_w); |
36 | | DECLARE_WRITE16_MEMBER(mpeg_start_adr_low_w); |
37 | | DECLARE_WRITE16_MEMBER(mpeg_end_adr_high_w); |
38 | | DECLARE_WRITE16_MEMBER(mpeg_end_adr_low_w); |
39 | | DECLARE_WRITE16_MEMBER(mpeg_key_1_w); |
40 | | DECLARE_READ16_MEMBER(mas_i2c_r); |
41 | | DECLARE_WRITE16_MEMBER(mas_i2c_w); |
42 | | DECLARE_WRITE16_MEMBER(mpeg_ctrl_w); |
43 | | DECLARE_WRITE16_MEMBER(ram_write_adr_high_w); |
44 | | DECLARE_WRITE16_MEMBER(ram_write_adr_low_w); |
45 | | DECLARE_READ16_MEMBER(ram_r); |
46 | | DECLARE_WRITE16_MEMBER(ram_w); |
47 | | DECLARE_WRITE16_MEMBER(ram_read_adr_high_w); |
48 | | DECLARE_WRITE16_MEMBER(ram_read_adr_low_w); |
49 | | DECLARE_WRITE16_MEMBER(output_0_w); |
50 | | DECLARE_WRITE16_MEMBER(output_1_w); |
51 | | DECLARE_WRITE16_MEMBER(output_7_w); |
52 | | DECLARE_WRITE16_MEMBER(output_3_w); |
53 | | DECLARE_WRITE16_MEMBER(mpeg_key_2_w); |
54 | | DECLARE_WRITE16_MEMBER(mpeg_key_3_w); |
55 | | DECLARE_READ16_MEMBER(digital_id_r); |
56 | | DECLARE_WRITE16_MEMBER(digital_id_w); |
57 | | DECLARE_READ16_MEMBER(fpga_status_r); |
58 | | DECLARE_WRITE16_MEMBER(fpga_firmware_w); |
59 | | DECLARE_WRITE16_MEMBER(output_4_w); |
60 | | DECLARE_WRITE16_MEMBER(output_2_w); |
61 | | DECLARE_WRITE16_MEMBER(output_5_w); |
62 | | |
63 | | protected: |
64 | | virtual void device_start(); |
65 | | virtual void device_reset(); |
66 | | virtual const rom_entry *device_rom_region() const; |
67 | | virtual machine_config_constructor device_mconfig_additions() const; |
68 | | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
69 | | |
70 | | private: |
71 | | devcb2_write8 output_cb; |
72 | | |
73 | | UINT16 *ram; |
74 | | UINT32 ram_adr; |
75 | | UINT8 output_data[8]; |
76 | | |
77 | | void output(int offset, UINT16 data); |
78 | | }; |
79 | | |
80 | | extern const device_type MPEG573; |
81 | | |
82 | | #endif |
trunk/src/mame/machine/k573msu.c
r0 | r26566 | |
| 1 | // license:MAME |
| 2 | // copyright-holders:smf |
| 3 | /* |
| 4 | * Konami 573 Multi Session Unit |
| 5 | * |
| 6 | */ |
| 7 | |
| 8 | #include "k573msu.h" |
| 9 | |
| 10 | /* |
| 11 | |
| 12 | PCB Layout of External Multisession Box |
| 13 | --------------------------------------- |
| 14 | |
| 15 | GXA25-PWB(A)(C)2000 KONAMI |
| 16 | |--------------------------------------------------------------------------| |
| 17 | |CN9 ADM232 LS273 PC16552 PC16552 XC9536(1) CN13| |
| 18 | |DSW(8) LS245 LS273 18.432MHz DS2401 | |
| 19 | | |-------| |-------| |-------| |-------| | |
| 20 | | MB3793 |TOSHIBA| |TOSHIBA| |TOSHIBA| |TOSHIBA|M48T58Y.6T| |
| 21 | | |TC9446F| |TC9446F| |TC9446F| |TC9446F| | |
| 22 | | |-016 | |-016 | |-016 | |-016 | CN12| |
| 23 | | |-------| |-------| |-------| |-------| | |
| 24 | | LV14 XC9572XL | |
| 25 | | CN16 CN17 CN18 CN19 XC9536(2)| |
| 26 | |PQ30RV21 LCX245 LCX245 CN11| |
| 27 | | 33.8688MHz PQ30RV21 | |
| 28 | | 8.25MHz HY57V641620 | |
| 29 | | |------------| HY57V641620 XC2S200 | |
| 30 | | |TOSHIBA | FLASH.20T | |
| 31 | | |TMPR3927AF | CN10| |
| 32 | | | | | |
| 33 | | | | LS245 F245 F245 | |
| 34 | | | |HY57V641620 LCX245 DIP40 | |
| 35 | | |------------| HY57V641620 LCX245 ATAPI44 | |
| 36 | | LCX245 LED(HDD) ATAPI40 | |
| 37 | | CN7 LCX245 CN14 LED(CD) CN5 | |
| 38 | |--------------------------------------------------------------------------| |
| 39 | Notes: (all IC's shown) |
| 40 | TMPR3927 - Toshiba TMPR3927AF Risc Microprocessor (QFP240) |
| 41 | FLASH.20T - Fujitsu 29F400TC Flash ROM (TSOP48) |
| 42 | ATAPI44 - IDE44 44-pin laptop type HDD connector (not used) |
| 43 | ATAPI40 - IDE40 40-pin flat cable HDD connector used for connection of CDROM drive |
| 44 | XC9572XL - XILINX XC9572XL In-system Programmable CPLD stamped 'XA25A1' (TQFP100) |
| 45 | XC9536(1) - XILINX CPLD stamped 'XA25A3' (PLCC44) |
| 46 | XC9536(2) - XILINX CPLD stamped 'XA25A2' (PLCC44) |
| 47 | XC2S200 - XILINX XC2S200 SPARTAN FPGA (QFP208) |
| 48 | DS2401 - MAXIM Dallas DS2401 Silicon Serial Number (SOIC6) |
| 49 | M48T58Y - ST M48T58Y Timekeeper NVRAM 8k bytes x8-bit (DIP28). Chip appears empty (0x04 fill) or unused |
| 50 | MB3793 - Fujitsu MB3793 Power-Voltage Monitoring IC with Watchdog Timer (SOIC8) |
| 51 | DIP40 - Empty DIP40 socket |
| 52 | HY57V641620 - Hyundai/Hynix HY57V641620 4 Banks x 1M x 16Bit Synchronous DRAM |
| 53 | PC16552D - National PC16552D Dual Universal Asynchronous Receiver/Transmitter with FIFO's |
| 54 | TC9446F - Toshiba TC9446F-016 Audio Digital Processor for Decode of Dolby Digital (AC-3) MPEG2 Audio |
| 55 | CN16-CN19 - Connector for sub board (3 of them are present). One board connects via a thin cable from |
| 56 | CN1 to the main board to a connector on the security board labelled 'AMP BOX'. |
| 57 | |
| 58 | Sub Board Layout |
| 59 | ---------------- |
| 60 | |
| 61 | GXA25-PWB(B) (C) 2000 KONAMI |
| 62 | |---------------------------------| |
| 63 | | TLP2630 LV14 ADM232 | |
| 64 | |CN2 CN1| |
| 65 | |A2430 AK5330 | |
| 66 | | | |
| 67 | | RCA L/R| |
| 68 | |ZUS1R50505 6379A | |
| 69 | | LM358 | |
| 70 | |---------------------------------| |
| 71 | |
| 72 | */ |
| 73 | |
| 74 | k573msu_device::k573msu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 75 | device_t(mconfig, KONAMI_573_MULTI_SESSION_UNIT, "Konami Multi Session Unit", tag, owner, clock, "k573msu", __FILE__) |
| 76 | { |
| 77 | } |
| 78 | |
| 79 | void k573msu_device::device_start() |
| 80 | { |
| 81 | } |
| 82 | |
| 83 | ROM_START( k573msu ) |
| 84 | ROM_REGION( 0x080000, "tmpr3927", 0 ) |
| 85 | ROM_LOAD( "flash.20t", 0x000000, 0x080000, CRC(b70c65b0) SHA1(d3b2bf9d3f8b1caf70755a0d7fa50ef8bbd758b8) ) // from "GXA25-PWB(A)(C)2000 KONAMI" |
| 86 | |
| 87 | ROM_REGION( 0x002000, "m48t58y", 0 ) |
| 88 | ROM_LOAD( "m48t58y.6t", 0x000000, 0x002000, CRC(609ef020) SHA1(71b87c8b25b9613b4d4511c53d0a3a3aacf1499d) ) |
| 89 | ROM_END |
| 90 | |
| 91 | const rom_entry *k573msu_device::device_rom_region() const |
| 92 | { |
| 93 | return ROM_NAME( k573msu ); |
| 94 | } |
| 95 | |
| 96 | const device_type KONAMI_573_MULTI_SESSION_UNIT = &device_creator<k573msu_device>; |
trunk/src/mame/machine/k573dio.c
r0 | r26566 | |
| 1 | #include "emu.h" |
| 2 | #include "k573dio.h" |
| 3 | |
| 4 | /* |
| 5 | Digital I/O PCB |
| 6 | --------------- |
| 7 | |
| 8 | GX894-PWB(B)A (C)1999 KONAMI CO. LTD. |
| 9 | |
| 10 | |-------------| |
| 11 | | CN12 | |
| 12 | | | |
| 13 | | PC847 PC847 | |
| 14 | | | |
| 15 | | CN11 | |
| 16 | | | |
| 17 | | PC847 PC847 | |
| 18 | | | |
| 19 | | DS2401 CN10 | |
| 20 | | | |
| 21 | | PC847 PC847 | |
| 22 | | | |
| 23 | | CN14 CN13 | |
| 24 | |----------| |----------| |
| 25 | | PC847 | |
| 26 | | ADM232 CN17 XC9536 | |
| 27 | | | |
| 28 | | 19.6608MHz |-----------| |
| 29 | | ADM232 CN15 CY7C109 | |
| 30 | | HY51V65164A HY51V65164A | |
| 31 | | HY51V65164A | |
| 32 | | CN16 XCS40XL | |
| 33 | | | |
| 34 | | AK4309B CN18 29.450MHz MAS3507D | |
| 35 | | | |
| 36 | | CN3 | |
| 37 | | HYC24855 RCA-L/R | |
| 38 | |-----------------------------------------------| |
| 39 | |
| 40 | Notes: |
| 41 | |
| 42 | PC847 - High Density Mounting Type Photocoupler |
| 43 | CN12 - 13 pin connector with 8 wires to external connectors |
| 44 | CN11 - 12 pin connector with 8 wires to external connectors |
| 45 | DS2401 - DS2401 911C2 Silicon serial number |
| 46 | CN10 - 10 pin connector with 8 wires to external connectors |
| 47 | CN14 - 7 pin connector |
| 48 | CN13 - 5 pin connector with 2 wires to external connectors |
| 49 | ADM232 - ADM232AARN 9933 H48475 High Speed, 5 V, 0.1 uF CMOS RS-232 Drivers/Receivers |
| 50 | CN17 - 3 pin connector |
| 51 | XC9536 - XILINX XC9536 PC44AEM9933 F1096429A 15C |
| 52 | CN15 - 8 pin connector |
| 53 | CY7C109 - CY7C109-25VC 931 H 04 404825 128k x 8 Static RAM |
| 54 | HY51V65164A - 64M bit dynamic EDO RAM |
| 55 | CN16 - 4 pin connector joining this PCB to the CD-DA IN on the MAIN PCB. |
| 56 | XCS40XL - XILINX XCS40XL PQ208AKP9929 A2033251A 4C |
| 57 | AK4309B - AKM AK4309B 3N932N 16bit SCF DAC |
| 58 | CN18 - 6 pin connector |
| 59 | MAS3507D - IM MAS3507D D8 9173 51 HM U 072953.000 ES MPEG 1/2 Layer 2/3 Audio Decoder |
| 60 | CN3 - Connector joining this PCB to the MAIN PCB |
| 61 | HYC24855 - ? |
| 62 | RCA-L/R - RCA connectors for left/right audio output |
| 63 | |
| 64 | */ |
| 65 | |
| 66 | const device_type KONAMI_573_DIGITAL_IO_BOARD = &device_creator<k573dio_device>; |
| 67 | |
| 68 | DEVICE_ADDRESS_MAP_START(amap, 16, k573dio_device) |
| 69 | AM_RANGE(0x00, 0x01) AM_READ(a00_r) |
| 70 | AM_RANGE(0x02, 0x03) AM_READ(a02_r) |
| 71 | AM_RANGE(0x04, 0x05) AM_READ(a04_r) |
| 72 | AM_RANGE(0x06, 0x07) AM_READ(a06_r) |
| 73 | AM_RANGE(0x0a, 0x0b) AM_READ(a0a_r) |
| 74 | AM_RANGE(0x80, 0x81) AM_READ(a80_r) |
| 75 | AM_RANGE(0xa0, 0xa1) AM_WRITE(mpeg_start_adr_high_w) |
| 76 | AM_RANGE(0xa2, 0xa3) AM_WRITE(mpeg_start_adr_low_w) |
| 77 | AM_RANGE(0xa4, 0xa5) AM_WRITE(mpeg_end_adr_high_w) |
| 78 | AM_RANGE(0xa6, 0xa7) AM_WRITE(mpeg_end_adr_low_w) |
| 79 | AM_RANGE(0xa8, 0xa9) AM_WRITE(mpeg_key_1_w) |
| 80 | AM_RANGE(0xac, 0xad) AM_READWRITE(mas_i2c_r, mas_i2c_w) |
| 81 | AM_RANGE(0xae, 0xaf) AM_WRITE(mpeg_ctrl_w) |
| 82 | AM_RANGE(0xb0, 0xb1) AM_WRITE(ram_write_adr_high_w) |
| 83 | AM_RANGE(0xb2, 0xb3) AM_WRITE(ram_write_adr_low_w) |
| 84 | AM_RANGE(0xb4, 0xb5) AM_READWRITE(ram_r, ram_w) |
| 85 | AM_RANGE(0xb6, 0xb7) AM_WRITE(ram_read_adr_high_w) |
| 86 | AM_RANGE(0xb8, 0xb9) AM_WRITE(ram_read_adr_low_w) |
| 87 | AM_RANGE(0xe0, 0xe1) AM_WRITE(output_1_w) |
| 88 | AM_RANGE(0xe2, 0xe3) AM_WRITE(output_0_w) |
| 89 | AM_RANGE(0xe4, 0xe5) AM_WRITE(output_3_w) |
| 90 | AM_RANGE(0xe6, 0xe7) AM_WRITE(output_7_w) |
| 91 | AM_RANGE(0xea, 0xeb) AM_WRITE(mpeg_key_2_w) |
| 92 | AM_RANGE(0xec, 0xed) AM_WRITE(mpeg_key_3_w) |
| 93 | AM_RANGE(0xee, 0xef) AM_READWRITE(digital_id_r, digital_id_w) |
| 94 | AM_RANGE(0xf6, 0xf7) AM_READ(fpga_status_r) |
| 95 | AM_RANGE(0xf8, 0xf9) AM_WRITE(fpga_firmware_w) |
| 96 | AM_RANGE(0xfa, 0xfb) AM_WRITE(output_4_w) |
| 97 | AM_RANGE(0xfc, 0xfd) AM_WRITE(output_5_w) |
| 98 | AM_RANGE(0xfe, 0xff) AM_WRITE(output_2_w) |
| 99 | ADDRESS_MAP_END |
| 100 | |
| 101 | static MACHINE_CONFIG_FRAGMENT( k573dio ) |
| 102 | MCFG_MAS3507D_ADD( "mpeg" ) |
| 103 | MCFG_DS2401_ADD( "digital_id" ) |
| 104 | MACHINE_CONFIG_END |
| 105 | |
| 106 | k573dio_device::k573dio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 107 | : device_t(mconfig, KONAMI_573_DIGITAL_IO_BOARD, "Konami 573 digital I/O board", tag, owner, clock, "k573dio", __FILE__), |
| 108 | mas3507d(*this, "mpeg"), |
| 109 | digital_id(*this, "digital_id"), |
| 110 | output_cb(*this) |
| 111 | { |
| 112 | } |
| 113 | |
| 114 | void k573dio_device::device_start() |
| 115 | { |
| 116 | output_cb.resolve_safe(); |
| 117 | ram = auto_alloc_array( machine(), UINT16, 12 * 1024 * 1024 ); |
| 118 | save_pointer( NAME(ram), 12 * 1024 * 1024 ); |
| 119 | } |
| 120 | |
| 121 | void k573dio_device::device_reset() |
| 122 | { |
| 123 | ram_adr = 0; |
| 124 | memset(output_data, 0, sizeof(output_data)); |
| 125 | } |
| 126 | |
| 127 | ROM_START( k573dio ) |
| 128 | ROM_REGION( 0x000008, "digital_id", 0 ) |
| 129 | ROM_LOAD( "digital-id.bin", 0x000000, 0x000008, CRC(2b977f4d) SHA1(2b108a56653f91cb3351718c45dfcf979bc35ef1) ) |
| 130 | ROM_END |
| 131 | |
| 132 | const rom_entry *k573dio_device::device_rom_region() const |
| 133 | { |
| 134 | return ROM_NAME(k573dio); |
| 135 | } |
| 136 | |
| 137 | machine_config_constructor k573dio_device::device_mconfig_additions() const |
| 138 | { |
| 139 | return MACHINE_CONFIG_NAME( k573dio ); |
| 140 | } |
| 141 | |
| 142 | void k573dio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 143 | { |
| 144 | } |
| 145 | |
| 146 | READ16_MEMBER(k573dio_device::a00_r) |
| 147 | { |
| 148 | logerror("%s: a00_r (%s)\n", tag(), machine().describe_context()); |
| 149 | return 0x0000; |
| 150 | } |
| 151 | |
| 152 | READ16_MEMBER(k573dio_device::a02_r) |
| 153 | { |
| 154 | logerror("%s: a02_r (%s)\n", tag(), machine().describe_context()); |
| 155 | return 0x0001; |
| 156 | } |
| 157 | |
| 158 | READ16_MEMBER(k573dio_device::a04_r) |
| 159 | { |
| 160 | logerror("%s: a04_r (%s)\n", tag(), machine().describe_context()); |
| 161 | return 0x0000; |
| 162 | } |
| 163 | |
| 164 | READ16_MEMBER(k573dio_device::a06_r) |
| 165 | { |
| 166 | logerror("%s: a06_r (%s)\n", tag(), machine().describe_context()); |
| 167 | return 0x0000; |
| 168 | } |
| 169 | |
| 170 | READ16_MEMBER(k573dio_device::a0a_r) |
| 171 | { |
| 172 | logerror("%s: a0a_r (%s)\n", tag(), machine().describe_context()); |
| 173 | return 0x0000; |
| 174 | } |
| 175 | |
| 176 | READ16_MEMBER(k573dio_device::a80_r) |
| 177 | { |
| 178 | logerror("%s: a80_r (%s)\n", tag(), machine().describe_context()); |
| 179 | return 0x1234; |
| 180 | } |
| 181 | |
| 182 | WRITE16_MEMBER(k573dio_device::mpeg_start_adr_high_w) |
| 183 | { |
| 184 | logerror("FPGA MPEG start address high %04x\n", data); |
| 185 | } |
| 186 | |
| 187 | WRITE16_MEMBER(k573dio_device::mpeg_start_adr_low_w) |
| 188 | { |
| 189 | logerror("FPGA MPEG start address low %04x\n", data); |
| 190 | } |
| 191 | |
| 192 | WRITE16_MEMBER(k573dio_device::mpeg_end_adr_high_w) |
| 193 | { |
| 194 | logerror("FPGA MPEG end address high %04x\n", data); |
| 195 | } |
| 196 | |
| 197 | WRITE16_MEMBER(k573dio_device::mpeg_end_adr_low_w) |
| 198 | { |
| 199 | logerror("FPGA MPEG end address low %04x\n", data); |
| 200 | } |
| 201 | |
| 202 | WRITE16_MEMBER(k573dio_device::mpeg_key_1_w) |
| 203 | { |
| 204 | logerror("FPGA MPEG key 1/3 %04x\n", data); |
| 205 | } |
| 206 | |
| 207 | READ16_MEMBER(k573dio_device::mas_i2c_r) |
| 208 | { |
| 209 | return (mas3507d->i2c_scl_r() << 13) | (mas3507d->i2c_sda_r() << 12); |
| 210 | } |
| 211 | |
| 212 | WRITE16_MEMBER(k573dio_device::mas_i2c_w) |
| 213 | { |
| 214 | mas3507d->i2c_scl_w(data & 0x2000); |
| 215 | mas3507d->i2c_sda_w(data & 0x1000); |
| 216 | } |
| 217 | |
| 218 | WRITE16_MEMBER(k573dio_device::mpeg_ctrl_w) |
| 219 | { |
| 220 | logerror("FPGA MPEG control %c%c%c\n", |
| 221 | data & 0x8000 ? '#' : '.', |
| 222 | data & 0x4000 ? '#' : '.', |
| 223 | data & 0x2000 ? '#' : '.'); |
| 224 | } |
| 225 | |
| 226 | WRITE16_MEMBER(k573dio_device::ram_write_adr_high_w) |
| 227 | { |
| 228 | // read and write address are shared |
| 229 | ram_adr = (ram_adr & 0x0000ffff) | (data << 16); |
| 230 | } |
| 231 | |
| 232 | WRITE16_MEMBER(k573dio_device::ram_write_adr_low_w) |
| 233 | { |
| 234 | // read and write address are shared |
| 235 | ram_adr = (ram_adr & 0xffff0000) | data; |
| 236 | } |
| 237 | |
| 238 | READ16_MEMBER(k573dio_device::ram_r) |
| 239 | { |
| 240 | UINT16 res = ram[ram_adr >> 1]; |
| 241 | ram_adr += 2; |
| 242 | return res; |
| 243 | } |
| 244 | |
| 245 | WRITE16_MEMBER(k573dio_device::ram_w) |
| 246 | { |
| 247 | ram[ram_adr >> 1] = data; |
| 248 | ram_adr += 2; |
| 249 | } |
| 250 | |
| 251 | WRITE16_MEMBER(k573dio_device::ram_read_adr_high_w) |
| 252 | { |
| 253 | // read and write address are shared |
| 254 | ram_adr = (ram_adr & 0x0000ffff) | (data << 16); |
| 255 | } |
| 256 | |
| 257 | WRITE16_MEMBER(k573dio_device::ram_read_adr_low_w) |
| 258 | { |
| 259 | // read and write address are shared |
| 260 | ram_adr = (ram_adr & 0xffff0000) | data; |
| 261 | } |
| 262 | |
| 263 | WRITE16_MEMBER(k573dio_device::output_1_w) |
| 264 | { |
| 265 | output(1, data); |
| 266 | } |
| 267 | |
| 268 | WRITE16_MEMBER(k573dio_device::output_0_w) |
| 269 | { |
| 270 | output(0, data); |
| 271 | } |
| 272 | |
| 273 | WRITE16_MEMBER(k573dio_device::output_3_w) |
| 274 | { |
| 275 | output(3, data); |
| 276 | } |
| 277 | |
| 278 | WRITE16_MEMBER(k573dio_device::output_7_w) |
| 279 | { |
| 280 | output(7, data); |
| 281 | } |
| 282 | |
| 283 | WRITE16_MEMBER(k573dio_device::mpeg_key_2_w) |
| 284 | { |
| 285 | logerror("FPGA MPEG key 2/3 %04x\n", data); |
| 286 | } |
| 287 | |
| 288 | WRITE16_MEMBER(k573dio_device::mpeg_key_3_w) |
| 289 | { |
| 290 | logerror("FPGA MPEG key 3/3 %04x\n", data); |
| 291 | } |
| 292 | |
| 293 | READ16_MEMBER(k573dio_device::digital_id_r) |
| 294 | { |
| 295 | return digital_id->read() << 12; |
| 296 | } |
| 297 | |
| 298 | WRITE16_MEMBER(k573dio_device::digital_id_w) |
| 299 | { |
| 300 | digital_id->write( !( ( data >> 12 ) & 1 ) ); |
| 301 | } |
| 302 | |
| 303 | READ16_MEMBER(k573dio_device::fpga_status_r) |
| 304 | { |
| 305 | logerror("%s: fpga_status_r (%s)\n", tag(), machine().describe_context()); |
| 306 | |
| 307 | // fpga/digital board status checks |
| 308 | // wants & c000 = 8000 (just after program upload?) |
| 309 | // write 0000 to +f4.w |
| 310 | // write 8000 to +f6.w |
| 311 | |
| 312 | /* fails if !8000 */ |
| 313 | /* fails if 4000 */ |
| 314 | /* fails if !2000 */ |
| 315 | /* fails if !1000 */ |
| 316 | return 0x8000 | 0x2000 | 0x1000; |
| 317 | } |
| 318 | |
| 319 | WRITE16_MEMBER(k573dio_device::fpga_firmware_w) |
| 320 | { |
| 321 | // Firmware bits in bit 15, always the same firmware |
| 322 | } |
| 323 | |
| 324 | WRITE16_MEMBER(k573dio_device::output_4_w) |
| 325 | { |
| 326 | output(4, data); |
| 327 | } |
| 328 | |
| 329 | WRITE16_MEMBER(k573dio_device::output_5_w) |
| 330 | { |
| 331 | output(5, data); |
| 332 | } |
| 333 | |
| 334 | WRITE16_MEMBER(k573dio_device::output_2_w) |
| 335 | { |
| 336 | output(2, data); |
| 337 | } |
| 338 | |
| 339 | void k573dio_device::output(int offset, UINT16 data) |
| 340 | { |
| 341 | data = (data >> 12) & 0x0f; |
| 342 | static const int shift[] = { 0, 2, 3, 1 }; |
| 343 | for(int i = 0; i < 4; i++) { |
| 344 | int oldbit = (output_data[offset] >> shift[i]) & 1; |
| 345 | int newbit = (data >> shift[i]) & 1; |
| 346 | if(oldbit != newbit) |
| 347 | output_cb(4*offset + i, newbit, 0xff); |
| 348 | } |
| 349 | output_data[offset] = data; |
| 350 | } |
trunk/src/mame/machine/k573dio.h
r0 | r26566 | |
| 1 | #pragma once |
| 2 | |
| 3 | #ifndef _K573DIO_H_ |
| 4 | #define _K573DIO_H_ |
| 5 | |
| 6 | #include "sound/mas3507d.h" |
| 7 | #include "machine/ds2401.h" |
| 8 | |
| 9 | #define MCFG_KONAMI_573_DIGITAL_IO_BOARD_ADD(_tag, _clock) \ |
| 10 | MCFG_DEVICE_ADD(_tag, KONAMI_573_DIGITAL_IO_BOARD, _clock) |
| 11 | |
| 12 | #define MCFG_KONAMI_573_DIGITAL_IO_BOARD_OUTPUT_CALLBACK( _output_cb ) \ |
| 13 | downcast<k573dio_device *>(device)->set_output_cb(DEVCB2_##_output_cb); |
| 14 | |
| 15 | class k573dio_device : public device_t |
| 16 | { |
| 17 | public: |
| 18 | k573dio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 19 | |
| 20 | template<class _write> void set_output_cb(_write _output_cb) |
| 21 | { |
| 22 | output_cb.set_callback(_output_cb); |
| 23 | } |
| 24 | |
| 25 | required_device<mas3507d_device> mas3507d; |
| 26 | required_device<ds2401_device> digital_id; |
| 27 | |
| 28 | DECLARE_ADDRESS_MAP(amap, 16); |
| 29 | |
| 30 | DECLARE_READ16_MEMBER(a00_r); |
| 31 | DECLARE_READ16_MEMBER(a02_r); |
| 32 | DECLARE_READ16_MEMBER(a04_r); |
| 33 | DECLARE_READ16_MEMBER(a06_r); |
| 34 | DECLARE_READ16_MEMBER(a0a_r); |
| 35 | DECLARE_READ16_MEMBER(a80_r); |
| 36 | DECLARE_WRITE16_MEMBER(mpeg_start_adr_high_w); |
| 37 | DECLARE_WRITE16_MEMBER(mpeg_start_adr_low_w); |
| 38 | DECLARE_WRITE16_MEMBER(mpeg_end_adr_high_w); |
| 39 | DECLARE_WRITE16_MEMBER(mpeg_end_adr_low_w); |
| 40 | DECLARE_WRITE16_MEMBER(mpeg_key_1_w); |
| 41 | DECLARE_READ16_MEMBER(mas_i2c_r); |
| 42 | DECLARE_WRITE16_MEMBER(mas_i2c_w); |
| 43 | DECLARE_WRITE16_MEMBER(mpeg_ctrl_w); |
| 44 | DECLARE_WRITE16_MEMBER(ram_write_adr_high_w); |
| 45 | DECLARE_WRITE16_MEMBER(ram_write_adr_low_w); |
| 46 | DECLARE_READ16_MEMBER(ram_r); |
| 47 | DECLARE_WRITE16_MEMBER(ram_w); |
| 48 | DECLARE_WRITE16_MEMBER(ram_read_adr_high_w); |
| 49 | DECLARE_WRITE16_MEMBER(ram_read_adr_low_w); |
| 50 | DECLARE_WRITE16_MEMBER(output_0_w); |
| 51 | DECLARE_WRITE16_MEMBER(output_1_w); |
| 52 | DECLARE_WRITE16_MEMBER(output_7_w); |
| 53 | DECLARE_WRITE16_MEMBER(output_3_w); |
| 54 | DECLARE_WRITE16_MEMBER(mpeg_key_2_w); |
| 55 | DECLARE_WRITE16_MEMBER(mpeg_key_3_w); |
| 56 | DECLARE_READ16_MEMBER(digital_id_r); |
| 57 | DECLARE_WRITE16_MEMBER(digital_id_w); |
| 58 | DECLARE_READ16_MEMBER(fpga_status_r); |
| 59 | DECLARE_WRITE16_MEMBER(fpga_firmware_w); |
| 60 | DECLARE_WRITE16_MEMBER(output_4_w); |
| 61 | DECLARE_WRITE16_MEMBER(output_2_w); |
| 62 | DECLARE_WRITE16_MEMBER(output_5_w); |
| 63 | |
| 64 | protected: |
| 65 | virtual void device_start(); |
| 66 | virtual void device_reset(); |
| 67 | virtual const rom_entry *device_rom_region() const; |
| 68 | virtual machine_config_constructor device_mconfig_additions() const; |
| 69 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 70 | |
| 71 | private: |
| 72 | devcb2_write8 output_cb; |
| 73 | |
| 74 | UINT16 *ram; |
| 75 | UINT32 ram_adr; |
| 76 | UINT8 output_data[8]; |
| 77 | |
| 78 | void output(int offset, UINT16 data); |
| 79 | }; |
| 80 | |
| 81 | extern const device_type KONAMI_573_DIGITAL_IO_BOARD; |
| 82 | |
| 83 | #endif |