Previous 199869 Revisions Next

r31086 Monday 23rd June, 2014 at 15:42:58 UTC by hap
F.Sanches added buzzer rs422 ports
[src/mess/drivers]pve500.c

trunk/src/mess/drivers/pve500.c
r31085r31086
1616
1717#include "emu.h"
1818#include "cpu/z80/tmpz84c015.h"
19#include "sound/beep.h"
20#include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */
1921#include "pve500.lh"
2022
2123#define IO_EXPANDER_PORTA 0
r31085r31086
3133      : driver_device(mconfig, type, tag)
3234      , m_maincpu(*this, "maincpu")
3335      , m_subcpu(*this, "subcpu")
36      , m_buzzer(*this, "buzzer")
3437   { }
3538
3639   DECLARE_WRITE8_MEMBER(dualport_ram_left_w);
3740   DECLARE_WRITE8_MEMBER(dualport_ram_right_w);
3841   DECLARE_READ8_MEMBER(dualport_ram_left_r);
3942   DECLARE_READ8_MEMBER(dualport_ram_right_r);
43   DECLARE_WRITE_LINE_MEMBER(GPI_w);
44   DECLARE_WRITE_LINE_MEMBER(buzzer_w);
45   DECLARE_WRITE_LINE_MEMBER(external_monitor_w);
4046
4147   DECLARE_WRITE8_MEMBER(io_expander_w);
4248   DECLARE_READ8_MEMBER(io_expander_r);
r31085r31086
4955   virtual void machine_reset();
5056   required_device<tmpz84c015_device> m_maincpu;
5157   required_device<tmpz84c015_device> m_subcpu;
58   required_device<beep_device> m_buzzer;
5259   UINT8 io_SEL, io_LD, io_LE, io_SC, io_KY;
5360};
5461
62WRITE_LINE_MEMBER( pve500_state::GPI_w )
63{
64   /* TODO: Implement-me */
65}
5566
67WRITE_LINE_MEMBER( pve500_state::buzzer_w )
68{
69    m_buzzer->set_state(state);
70}
71
72WRITE_LINE_MEMBER( pve500_state::external_monitor_w )
73{
74   /* TODO: Implement-me */
75}
76
5677static const z80_daisy_config maincpu_daisy_chain[] =
5778{
5879   TMPZ84C015_DAISY_INTERNAL,
r31085r31086
6182   { NULL }
6283};
6384
85static const z80_daisy_config subcpu_daisy_chain[] =
86{
87   TMPZ84C015_DAISY_INTERNAL,
88   { NULL }
89};
6490
91
6592static ADDRESS_MAP_START(maincpu_io, AS_IO, 8, pve500_state)
6693   ADDRESS_MAP_GLOBAL_MASK(0xff)
6794   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("external_sio", z80sio0_device, cd_ba_r, cd_ba_w)
r31085r31086
76103   AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_RAM AM_SHARE("sharedram") //  ICF5: 2kbytes of RAM shared between the two CPUs
77104ADDRESS_MAP_END
78105
106static ADDRESS_MAP_START(subcpu_io, AS_IO, 8, pve500_state)
107   ADDRESS_MAP_GLOBAL_MASK(0xff)
108ADDRESS_MAP_END
109
79110static ADDRESS_MAP_START(subcpu_prg, AS_PROGRAM, 8, pve500_state)
80111   AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EEPROM
81112   AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander
r31085r31086
191222
192223void pve500_state::machine_reset()
193224{
225   /* Setup beep */
226   m_buzzer->set_state(0);
227   m_buzzer->set_frequency(3750); //CLK2 coming out of IC D4 (frequency divider circuitry)
194228}
195229
196230READ8_MEMBER(pve500_state::dualport_ram_left_r)
197231{
198   //printf("dualport_ram: Left READ\n");
232   printf("dualport_ram: Left READ\n");
199233   m_subcpu->trg1(1); //(INT_Right)
200234   return dualport_7FE_data;
201235}
202236
203237WRITE8_MEMBER(pve500_state::dualport_ram_left_w)
204238{
205   //printf("dualport_ram: Left WRITE\n");
239   printf("dualport_ram: Left WRITE\n");
206240   dualport_7FF_data = data;
207241   m_subcpu->trg1(0); //(INT_Right)
208242}
209243
210244READ8_MEMBER(pve500_state::dualport_ram_right_r)
211245{
212   //printf("dualport_ram: Right READ\n");
246   printf("dualport_ram: Right READ\n");
213247   m_maincpu->trg1(1); //(INT_Left)
214248   return dualport_7FF_data;
215249}
216250
217251WRITE8_MEMBER(pve500_state::dualport_ram_right_w)
218252{
219   //printf("dualport_ram: Right WRITE\n");
253   printf("dualport_ram: Right WRITE\n");
220254   dualport_7FE_data = data;
221255   m_maincpu->trg1(0); //(INT_Left)
222256}
223257
224258READ8_MEMBER(pve500_state::io_expander_r)
225259{
260   printf("READ IO_EXPANDER_PORT%c\n", 'A'+offset);
226261   switch (offset){
227262      case IO_EXPANDER_PORTA:
228263         return io_SC;
r31085r31086
250285
251286WRITE8_MEMBER(pve500_state::io_expander_w)
252287{
253   //printf("io_expander_w: offset=%d data=%02X\n", offset, data);
254288   switch (offset){
255289      case IO_EXPANDER_PORTA:
290         printf("io_expander_w: PORTA (io_SC=%02X)\n", data);
256291         io_SC = data;
257292         break;
258293      case IO_EXPANDER_PORTB:
294         printf("io_expander_w: PORTB (io_LE=%02X)\n", data);
259295         io_LE = data;
260296         break;
261297      case IO_EXPANDER_PORTC:
298         printf("io_expander_w: PORTC (io_KY=%02X)\n", data);
262299         io_KY = data;
263300         break;
264301      case IO_EXPANDER_PORTD:
302         printf("io_expander_w: PORTD (io_LD=%02X)\n", data);
265303         io_LD = data;
266304         break;
267305      case IO_EXPANDER_PORTE:
268306         io_SEL = data;
307         printf("io_expander_w PORTE (io_SEL=%02X)\n", data);
269308         for (int i=0; i<4; i++){
270309            if (io_SEL & (1 << i)){
271310               for (int j=0; j<8; j++){
272311                  if (io_SC & (1<<j)){
273312                     output_set_digit_value(8*i + j, BITSWAP8(io_LD & 0x7F, 7, 0, 1, 2, 3, 4, 5, 6));
274                     //printf("io_expander_w PORTE data=%02X\n", data);
275313                  }
276314               }
277315            }
r31085r31086
283321}
284322
285323static MACHINE_CONFIG_START( pve500, pve500_state )
324  /* Main CPU */
286325   MCFG_CPU_ADD("maincpu", TMPZ84C015, XTAL_12MHz / 2) /* TMPZ84C015BF-6 */
287326   MCFG_CPU_PROGRAM_MAP(maincpu_prg)
288327   MCFG_CPU_IO_MAP(maincpu_io)
289328   MCFG_CPU_CONFIG(maincpu_daisy_chain)
329   MCFG_TMPZ84C015_OUT_DTRA_CB(WRITELINE(pve500_state, GPI_w))
330   MCFG_TMPZ84C015_OUT_DTRB_CB(WRITELINE(pve500_state, buzzer_w))
331   MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("recorder", rs232_port_device, write_txd))
332   MCFG_TMPZ84C015_OUT_TXDB_CB(DEVWRITELINE("player1", rs232_port_device, write_txd))
290333
291334   MCFG_DEVICE_ADD("external_ctc", Z80CTC, XTAL_12MHz / 2)
292335   MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
293336
294337   MCFG_Z80SIO0_ADD("external_sio", XTAL_12MHz / 2, 0, 0, 0, 0)
295338   MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
339   MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE("player2", rs232_port_device, write_txd))
340   MCFG_Z80DART_OUT_TXDB_CB(DEVWRITELINE("edl_inout", rs232_port_device, write_txd))
296341
342  /* Secondary CPU */
297343   MCFG_CPU_ADD("subcpu", TMPZ84C015, XTAL_12MHz / 2) /* TMPZ84C015BF-6 */
298344   MCFG_CPU_PROGRAM_MAP(subcpu_prg)
345   MCFG_CPU_IO_MAP(subcpu_io)
346   MCFG_CPU_CONFIG(subcpu_daisy_chain)
347   MCFG_TMPZ84C015_OUT_DTRB_CB(WRITELINE(pve500_state, external_monitor_w))
348   MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("switcher", rs232_port_device, write_txd))
349   MCFG_TMPZ84C015_OUT_TXDB_CB(DEVWRITELINE("serial_mixer", rs232_port_device, write_txd))
299350
351   /* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/
352   MCFG_RS232_PORT_ADD("recorder", default_rs232_devices, NULL)
353   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("maincpu:tmpz84c015_sio", z80dart_device, rxa_w))
354
355   MCFG_RS232_PORT_ADD("player1", default_rs232_devices, NULL)
356   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("maincpu:tmpz84c015_sio", z80dart_device, rxb_w))
357
358   MCFG_RS232_PORT_ADD("player2", default_rs232_devices, NULL)
359   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("external_sio", z80dart_device, rxa_w))
360
361   MCFG_RS232_PORT_ADD("edl_inout", default_rs232_devices, NULL)
362   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("external_sio", z80dart_device, rxb_w))
363
364   MCFG_RS232_PORT_ADD("switcher", default_rs232_devices, NULL)
365   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("subcpu:tmpz84c015_sio", z80dart_device, rxa_w))
366
367   MCFG_RS232_PORT_ADD("serial_mixer", default_rs232_devices, NULL)
368   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("subcpu:tmpz84c015_sio", z80dart_device, rxb_w))
369
300370/* TODO:
301371-> There are a few LEDs and a sequence of 7-seg displays with atotal of 27 digits
302-> Sound hardware consists of a buzzer connected to a signal of the maincpu SIO and a logic-gate that attaches/detaches it from the
303   system clock Which apparently means you can only beep the buzzer to a certain predefined tone or keep it mute.
304372*/
305373
306374   /* video hardware */
307375   MCFG_DEFAULT_LAYOUT(layout_pve500)
308376
377   /* audio hardware */
378   MCFG_SPEAKER_STANDARD_MONO("mono")
379   MCFG_SOUND_ADD("buzzer", BEEP, 0)
380   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
381
309382MACHINE_CONFIG_END
310383
311384ROM_START( pve500 )
r31085r31086
317390ROM_END
318391
319392/*    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT   CLASS           INIT   COMPANY    FULLNAME                    FLAGS */
320COMP( 1995, pve500, 0,      0,      pve500,     pve500, pve500_state, pve500, "SONY", "PVE-500", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND)
393COMP( 1995, pve500, 0,      0,      pve500,     pve500, pve500_state, pve500, "SONY", "PVE-500", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team