Previous 199869 Revisions Next

r26566 Monday 9th December, 2013 at 17:40:40 UTC by smf
Created a skeleton for the Konami 573 Multi Session Unit, renamed digital io board source file to match and moved pcb layout from driver. [smf]
[src/mame]mame.mak
[src/mame/drivers]ksys573.c
[src/mame/machine]k573dio.c* k573dio.h* k573msu.c* k573msu.h* mpeg573.c mpeg573.h

trunk/src/mame/mame.mak
r26565r26566
11841184   $(DRIVERS)/konamim2.o \
11851185   $(DRIVERS)/kontest.o \
11861186   $(DRIVERS)/konendev.o \
1187   $(DRIVERS)/ksys573.o $(MACHINE)/k573cass.o $(MACHINE)/mpeg573.o $(MACHINE)/zs01.o \
1187   $(DRIVERS)/ksys573.o $(MACHINE)/k573cass.o $(MACHINE)/k573dio.o $(MACHINE)/k573msu.o $(MACHINE)/zs01.o \
11881188   $(DRIVERS)/labyrunr.o $(VIDEO)/labyrunr.o \
11891189   $(DRIVERS)/lethal.o $(VIDEO)/lethal.o \
11901190   $(DRIVERS)/mainevt.o $(VIDEO)/mainevt.o \
trunk/src/mame/drivers/ksys573.c
r26565r26566
290290        (CN4, CN3, CN2 is printed pattern only, no actual connector)
291291
292292
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
426293  PCMCIA Flash Card
427294  -----------------
428295
r26565r26566
486353#include "machine/ds2401.h"
487354#include "machine/linflash.h"
488355#include "machine/k573cass.h"
356#include "machine/k573dio.h"
357#include "machine/k573msu.h"
489358#include "machine/mb89371.h"
490#include "machine/mpeg573.h"
491359#include "machine/timekpr.h"
492360#include "machine/upd4701.h"
493361#include "sound/spu.h"
r26565r26566
712580
713581static ADDRESS_MAP_START( konami573d_map, AS_PROGRAM, 32, ksys573_state )
714582   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 )
716584ADDRESS_MAP_END
717585
718586static ADDRESS_MAP_START( konami573a_map, AS_PROGRAM, 32, ksys573_state )
r26565r26566
22252093static MACHINE_CONFIG_DERIVED( k573d, konami573 )
22262094   MCFG_CPU_MODIFY( "maincpu" )
22272095   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 )
22292097MACHINE_CONFIG_END
22302098
22312099// Variants with additional analogue i/o board
r26565r26566
23542222MACHINE_CONFIG_END
23552223
23562224static 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 ) )
23592227
23602228   MCFG_FRAGMENT_ADD( pccard2_32mb )
23612229   MCFG_FRAGMENT_ADD( cassyyi )
23622230MACHINE_CONFIG_END
23632231
23642232static 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 ) )
23672235
23682236   MCFG_FRAGMENT_ADD( pccard2_32mb )
23692237   MCFG_FRAGMENT_ADD( cassxzi )
23702238MACHINE_CONFIG_END
23712239
23722240static 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 ) )
23752243
23762244   MCFG_FRAGMENT_ADD( casszi )
23772245MACHINE_CONFIG_END
23782246
23792247static 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 ) )
23822250
23832251   MCFG_FRAGMENT_ADD( pccard2_32mb )
23842252   MCFG_FRAGMENT_ADD( casszi )
r26565r26566
23962264MACHINE_CONFIG_END
23972265
23982266static 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 ) )
24012269
24022270   MCFG_FRAGMENT_ADD( cassxzi )
24032271MACHINE_CONFIG_END
24042272
24052273static 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 ) )
24082276
24092277   MCFG_FRAGMENT_ADD( cassxi )
24102278MACHINE_CONFIG_END
r26565r26566
24122280// Dance Dance Revolution Solo
24132281
24142282static 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 ) )
24172285
24182286   MCFG_FRAGMENT_ADD( cassyi )
24192287MACHINE_CONFIG_END
24202288
24212289static 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 ) )
24242292
24252293   MCFG_FRAGMENT_ADD( cassyyi )
24262294MACHINE_CONFIG_END
24272295
24282296static 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 ) )
24312299
24322300   MCFG_FRAGMENT_ADD( pccard2_32mb )
24332301   MCFG_FRAGMENT_ADD( cassxzi )
r26565r26566
24402308MACHINE_CONFIG_END
24412309
24422310static 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 ) )
24452313
24462314   MCFG_FRAGMENT_ADD( cassxzi )
24472315MACHINE_CONFIG_END
24482316
24492317static 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 ) )
24522320
24532321   MCFG_FRAGMENT_ADD( casszi )
2322
2323   MCFG_DEVICE_ADD( "k573msu", KONAMI_573_MULTI_SESSION_UNIT, 0 )
24542324MACHINE_CONFIG_END
24552325
24562326// Guitar Freaks
r26565r26566
25432413MACHINE_CONFIG_END
25442414
25452415static 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 ) )
25482418
25492419   MCFG_FRAGMENT_ADD( casszi )
25502420MACHINE_CONFIG_END
25512421
25522422static 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 ) )
25552425
25562426   MCFG_FRAGMENT_ADD( casszi )
25572427MACHINE_CONFIG_END
trunk/src/mame/machine/mpeg573.c
r26565r26566
1#include "emu.h"
2#include "mpeg573.h"
3
4const device_type MPEG573 = &device_creator<mpeg573_device>;
5
6DEVICE_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)
37ADDRESS_MAP_END
38
39static MACHINE_CONFIG_FRAGMENT( mpeg573 )
40   MCFG_MAS3507D_ADD( "mpeg" )
41   MCFG_DS2401_ADD( "digital_id" )
42MACHINE_CONFIG_END
43
44mpeg573_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
52void 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
59void mpeg573_device::device_reset()
60{
61   ram_adr = 0;
62   memset(output_data, 0, sizeof(output_data));
63}
64
65ROM_START( mpeg573 )
66   ROM_REGION( 0x000008, "digital_id", 0 )
67   ROM_LOAD( "digital-id.bin",   0x000000, 0x000008, CRC(2b977f4d) SHA1(2b108a56653f91cb3351718c45dfcf979bc35ef1) )
68ROM_END
69
70const rom_entry *mpeg573_device::device_rom_region() const
71{
72   return ROM_NAME(mpeg573);
73}
74
75machine_config_constructor mpeg573_device::device_mconfig_additions() const
76{
77   return MACHINE_CONFIG_NAME( mpeg573 );
78}
79
80void mpeg573_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
81{
82}
83
84READ16_MEMBER(mpeg573_device::a00_r)
85{
86   logerror("%s: a00_r (%s)\n", tag(), machine().describe_context());
87   return 0x0000;
88}
89
90READ16_MEMBER(mpeg573_device::a02_r)
91{
92   logerror("%s: a02_r (%s)\n", tag(), machine().describe_context());
93   return 0x0001;
94}
95
96READ16_MEMBER(mpeg573_device::a04_r)
97{
98   logerror("%s: a04_r (%s)\n", tag(), machine().describe_context());
99   return 0x0000;
100}
101
102READ16_MEMBER(mpeg573_device::a06_r)
103{
104   logerror("%s: a06_r (%s)\n", tag(), machine().describe_context());
105   return 0x0000;
106}
107
108READ16_MEMBER(mpeg573_device::a0a_r)
109{
110   logerror("%s: a0a_r (%s)\n", tag(), machine().describe_context());
111   return 0x0000;
112}
113
114READ16_MEMBER(mpeg573_device::a80_r)
115{
116   logerror("%s: a80_r (%s)\n", tag(), machine().describe_context());
117   return 0x1234;
118}
119
120WRITE16_MEMBER(mpeg573_device::mpeg_start_adr_high_w)
121{
122   logerror("FPGA MPEG start address high %04x\n", data);
123}
124
125WRITE16_MEMBER(mpeg573_device::mpeg_start_adr_low_w)
126{
127   logerror("FPGA MPEG start address low %04x\n", data);
128}
129
130WRITE16_MEMBER(mpeg573_device::mpeg_end_adr_high_w)
131{
132   logerror("FPGA MPEG end address high %04x\n", data);
133}
134
135WRITE16_MEMBER(mpeg573_device::mpeg_end_adr_low_w)
136{
137   logerror("FPGA MPEG end address low %04x\n", data);
138}
139
140WRITE16_MEMBER(mpeg573_device::mpeg_key_1_w)
141{
142   logerror("FPGA MPEG key 1/3 %04x\n", data);
143}
144
145READ16_MEMBER(mpeg573_device::mas_i2c_r)
146{
147   return (mas3507d->i2c_scl_r() << 13) | (mas3507d->i2c_sda_r() << 12);
148}
149
150WRITE16_MEMBER(mpeg573_device::mas_i2c_w)
151{
152   mas3507d->i2c_scl_w(data & 0x2000);
153   mas3507d->i2c_sda_w(data & 0x1000);
154}
155
156WRITE16_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
164WRITE16_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
170WRITE16_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
176READ16_MEMBER(mpeg573_device::ram_r)
177{
178   UINT16 res = ram[ram_adr >> 1];
179   ram_adr += 2;
180   return res;
181}
182
183WRITE16_MEMBER(mpeg573_device::ram_w)
184{
185   ram[ram_adr >> 1] = data;
186   ram_adr += 2;
187}
188
189WRITE16_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
195WRITE16_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
201WRITE16_MEMBER(mpeg573_device::output_1_w)
202{
203   output(1, data);
204}
205
206WRITE16_MEMBER(mpeg573_device::output_0_w)
207{
208   output(0, data);
209}
210
211WRITE16_MEMBER(mpeg573_device::output_3_w)
212{
213   output(3, data);
214}
215
216WRITE16_MEMBER(mpeg573_device::output_7_w)
217{
218   output(7, data);
219}
220
221WRITE16_MEMBER(mpeg573_device::mpeg_key_2_w)
222{
223   logerror("FPGA MPEG key 2/3 %04x\n", data);
224}
225
226WRITE16_MEMBER(mpeg573_device::mpeg_key_3_w)
227{
228   logerror("FPGA MPEG key 3/3 %04x\n", data);
229}
230
231READ16_MEMBER(mpeg573_device::digital_id_r)
232{
233   return digital_id->read() << 12;
234}
235
236WRITE16_MEMBER(mpeg573_device::digital_id_w)
237{
238   digital_id->write( !( ( data >> 12 ) & 1 ) );
239}
240
241READ16_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
257WRITE16_MEMBER(mpeg573_device::fpga_firmware_w)
258{
259   // Firmware bits in bit 15, always the same firmware
260}
261
262WRITE16_MEMBER(mpeg573_device::output_4_w)
263{
264   output(4, data);
265}
266
267WRITE16_MEMBER(mpeg573_device::output_5_w)
268{
269   output(5, data);
270}
271
272WRITE16_MEMBER(mpeg573_device::output_2_w)
273{
274   output(2, data);
275}
276
277void 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
r26565r26566
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
14class mpeg573_device : public device_t
15{
16public:
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
63protected:
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
70private:
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
80extern const device_type MPEG573;
81
82#endif
trunk/src/mame/machine/k573msu.c
r0r26566
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
74k573msu_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
79void k573msu_device::device_start()
80{
81}
82
83ROM_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) )
89ROM_END
90
91const rom_entry *k573msu_device::device_rom_region() const
92{
93   return ROM_NAME( k573msu );
94}
95
96const device_type KONAMI_573_MULTI_SESSION_UNIT = &device_creator<k573msu_device>;
Property changes on: trunk/src/mame/machine/k573msu.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mame/machine/k573msu.h
r0r26566
1// license:MAME
2// copyright-holders:smf
3/*
4 * Konami 573 Multi Session Unit
5 *
6 */
7
8#pragma once
9
10#ifndef __K573MSU_H__
11#define __K573MSU_H__
12
13#include "emu.h"
14
15extern const device_type KONAMI_573_MULTI_SESSION_UNIT;
16
17class k573msu_device : public device_t
18{
19public:
20   k573msu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
21
22protected:
23   virtual void device_start();
24
25   virtual const rom_entry *device_rom_region() const;
26};
27
28#endif
Property changes on: trunk/src/mame/machine/k573msu.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mame/machine/k573dio.c
r0r26566
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
66const device_type KONAMI_573_DIGITAL_IO_BOARD = &device_creator<k573dio_device>;
67
68DEVICE_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)
99ADDRESS_MAP_END
100
101static MACHINE_CONFIG_FRAGMENT( k573dio )
102   MCFG_MAS3507D_ADD( "mpeg" )
103   MCFG_DS2401_ADD( "digital_id" )
104MACHINE_CONFIG_END
105
106k573dio_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
114void 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
121void k573dio_device::device_reset()
122{
123   ram_adr = 0;
124   memset(output_data, 0, sizeof(output_data));
125}
126
127ROM_START( k573dio )
128   ROM_REGION( 0x000008, "digital_id", 0 )
129   ROM_LOAD( "digital-id.bin",   0x000000, 0x000008, CRC(2b977f4d) SHA1(2b108a56653f91cb3351718c45dfcf979bc35ef1) )
130ROM_END
131
132const rom_entry *k573dio_device::device_rom_region() const
133{
134   return ROM_NAME(k573dio);
135}
136
137machine_config_constructor k573dio_device::device_mconfig_additions() const
138{
139   return MACHINE_CONFIG_NAME( k573dio );
140}
141
142void k573dio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
143{
144}
145
146READ16_MEMBER(k573dio_device::a00_r)
147{
148   logerror("%s: a00_r (%s)\n", tag(), machine().describe_context());
149   return 0x0000;
150}
151
152READ16_MEMBER(k573dio_device::a02_r)
153{
154   logerror("%s: a02_r (%s)\n", tag(), machine().describe_context());
155   return 0x0001;
156}
157
158READ16_MEMBER(k573dio_device::a04_r)
159{
160   logerror("%s: a04_r (%s)\n", tag(), machine().describe_context());
161   return 0x0000;
162}
163
164READ16_MEMBER(k573dio_device::a06_r)
165{
166   logerror("%s: a06_r (%s)\n", tag(), machine().describe_context());
167   return 0x0000;
168}
169
170READ16_MEMBER(k573dio_device::a0a_r)
171{
172   logerror("%s: a0a_r (%s)\n", tag(), machine().describe_context());
173   return 0x0000;
174}
175
176READ16_MEMBER(k573dio_device::a80_r)
177{
178   logerror("%s: a80_r (%s)\n", tag(), machine().describe_context());
179   return 0x1234;
180}
181
182WRITE16_MEMBER(k573dio_device::mpeg_start_adr_high_w)
183{
184   logerror("FPGA MPEG start address high %04x\n", data);
185}
186
187WRITE16_MEMBER(k573dio_device::mpeg_start_adr_low_w)
188{
189   logerror("FPGA MPEG start address low %04x\n", data);
190}
191
192WRITE16_MEMBER(k573dio_device::mpeg_end_adr_high_w)
193{
194   logerror("FPGA MPEG end address high %04x\n", data);
195}
196
197WRITE16_MEMBER(k573dio_device::mpeg_end_adr_low_w)
198{
199   logerror("FPGA MPEG end address low %04x\n", data);
200}
201
202WRITE16_MEMBER(k573dio_device::mpeg_key_1_w)
203{
204   logerror("FPGA MPEG key 1/3 %04x\n", data);
205}
206
207READ16_MEMBER(k573dio_device::mas_i2c_r)
208{
209   return (mas3507d->i2c_scl_r() << 13) | (mas3507d->i2c_sda_r() << 12);
210}
211
212WRITE16_MEMBER(k573dio_device::mas_i2c_w)
213{
214   mas3507d->i2c_scl_w(data & 0x2000);
215   mas3507d->i2c_sda_w(data & 0x1000);
216}
217
218WRITE16_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
226WRITE16_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
232WRITE16_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
238READ16_MEMBER(k573dio_device::ram_r)
239{
240   UINT16 res = ram[ram_adr >> 1];
241   ram_adr += 2;
242   return res;
243}
244
245WRITE16_MEMBER(k573dio_device::ram_w)
246{
247   ram[ram_adr >> 1] = data;
248   ram_adr += 2;
249}
250
251WRITE16_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
257WRITE16_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
263WRITE16_MEMBER(k573dio_device::output_1_w)
264{
265   output(1, data);
266}
267
268WRITE16_MEMBER(k573dio_device::output_0_w)
269{
270   output(0, data);
271}
272
273WRITE16_MEMBER(k573dio_device::output_3_w)
274{
275   output(3, data);
276}
277
278WRITE16_MEMBER(k573dio_device::output_7_w)
279{
280   output(7, data);
281}
282
283WRITE16_MEMBER(k573dio_device::mpeg_key_2_w)
284{
285   logerror("FPGA MPEG key 2/3 %04x\n", data);
286}
287
288WRITE16_MEMBER(k573dio_device::mpeg_key_3_w)
289{
290   logerror("FPGA MPEG key 3/3 %04x\n", data);
291}
292
293READ16_MEMBER(k573dio_device::digital_id_r)
294{
295   return digital_id->read() << 12;
296}
297
298WRITE16_MEMBER(k573dio_device::digital_id_w)
299{
300   digital_id->write( !( ( data >> 12 ) & 1 ) );
301}
302
303READ16_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
319WRITE16_MEMBER(k573dio_device::fpga_firmware_w)
320{
321   // Firmware bits in bit 15, always the same firmware
322}
323
324WRITE16_MEMBER(k573dio_device::output_4_w)
325{
326   output(4, data);
327}
328
329WRITE16_MEMBER(k573dio_device::output_5_w)
330{
331   output(5, data);
332}
333
334WRITE16_MEMBER(k573dio_device::output_2_w)
335{
336   output(2, data);
337}
338
339void 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}
Property changes on: trunk/src/mame/machine/k573dio.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/mame/machine/k573dio.h
r0r26566
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
15class k573dio_device : public device_t
16{
17public:
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
64protected:
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
71private:
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
81extern const device_type KONAMI_573_DIGITAL_IO_BOARD;
82
83#endif
Property changes on: trunk/src/mame/machine/k573dio.h
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain

Previous 199869 Revisions Next


© 1997-2024 The MAME Team