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 |