Previous 199869 Revisions Next

r31877 Tuesday 2nd September, 2014 at 19:18:43 UTC by hap
(MESS) pve500.c: hooked up MB8421 RAM [FSanches]

(note to FS: we can't confirm that your driver crashes on load)
[src/mess]mess.mak
[src/mess/drivers]pve500.c

trunk/src/mess/drivers/pve500.c
r31876r31877
2828
2929  Changelog:
3030
31     2014 SEP 01 [Felipe Sanches]:
32   * hooked-up MB8421 device (dual-port SRAM)
33
3134     2014 JUN 24 [Felipe Sanches]:
32   * figured out the multiplexing signals for the 7seg display
35   * figured out the multiplexing signals for the 7-seg display
3336
3437     2014 JUN 23 [Felipe Sanches]:
3538   * hooked-up the RS422 ports
r31876r31877
4649#include "sound/beep.h"
4750#include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */
4851#include "pve500.lh"
52#include "machine/mb8421.h"
4953
5054#define IO_EXPANDER_PORTA 0
5155#define IO_EXPANDER_PORTB 1
r31876r31877
6367      , m_buzzer(*this, "buzzer")
6468   { }
6569
66   DECLARE_WRITE8_MEMBER(dualport_ram_left_w);
67   DECLARE_WRITE8_MEMBER(dualport_ram_right_w);
68   DECLARE_READ8_MEMBER(dualport_ram_left_r);
69   DECLARE_READ8_MEMBER(dualport_ram_right_r);
70   DECLARE_WRITE_LINE_MEMBER(mb8421_intl);
71   DECLARE_WRITE_LINE_MEMBER(mb8421_intr);
7072   DECLARE_WRITE_LINE_MEMBER(GPI_w);
7173   DECLARE_WRITE_LINE_MEMBER(external_monitor_w);
7274
r31876r31877
7476   DECLARE_READ8_MEMBER(io_expander_r);
7577   DECLARE_DRIVER_INIT(pve500);
7678private:
77   UINT8 dualport_7FE_data;
78   UINT8 dualport_7FF_data;
79
8079   virtual void machine_start();
8180   virtual void machine_reset();
8281   required_device<tmpz84c015_device> m_maincpu;
r31876r31877
113112static ADDRESS_MAP_START(maincpu_prg, AS_PROGRAM, 8, pve500_state)
114113   AM_RANGE (0x0000, 0xBFFF) AM_ROM // ICB7: 48kbytes EEPROM
115114   AM_RANGE (0xC000, 0xDFFF) AM_RAM // ICD6: 8kbytes of RAM
116   AM_RANGE (0xE7FE, 0xE7FE) AM_MIRROR(0x1800) AM_READ(dualport_ram_left_r)
117   AM_RANGE (0xE7FF, 0xE7FF) AM_MIRROR(0x1800) AM_WRITE(dualport_ram_left_w)
118   AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_RAM AM_SHARE("sharedram") //  ICF5: 2kbytes of RAM shared between the two CPUs
115   AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_DEVREADWRITE("mb8421", mb8421_device, left_r, left_w)
119116ADDRESS_MAP_END
120117
121118static ADDRESS_MAP_START(subcpu_io, AS_IO, 8, pve500_state)
r31876r31877
125122static ADDRESS_MAP_START(subcpu_prg, AS_PROGRAM, 8, pve500_state)
126123   AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EEPROM
127124   AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander
128   AM_RANGE (0xC7FE, 0xC7FE) AM_MIRROR(0x1800) AM_WRITE(dualport_ram_right_w)
129   AM_RANGE (0xC7FF, 0xC7FF) AM_MIRROR(0x1800) AM_READ(dualport_ram_right_r)
130   AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_RAM AM_SHARE("sharedram") //  ICF5: 2kbytes of RAM shared between the two CPUs
125   AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w)
131126ADDRESS_MAP_END
132127
133128DRIVER_INIT_MEMBER( pve500_state, pve500 )
r31876r31877
239234   m_buzzer->set_frequency(3750); //CLK2 coming out of IC D4 (frequency divider circuitry)
240235}
241236
242READ8_MEMBER(pve500_state::dualport_ram_left_r)
237WRITE_LINE_MEMBER(pve500_state::mb8421_intl)
243238{
244   //printf("dualport_ram: Left READ\n");
245   m_subcpu->trg1(1); //(INT_Right)
246   return dualport_7FE_data;
239   // shared ram interrupt request from subcpu side
240   m_maincpu->trg1(state);
247241}
248242
249WRITE8_MEMBER(pve500_state::dualport_ram_left_w)
243WRITE_LINE_MEMBER(pve500_state::mb8421_intr)
250244{
251   //printf("dualport_ram: Left WRITE\n");
252   dualport_7FF_data = data;
253   m_subcpu->trg1(0); //(INT_Right)
245   // shared ram interrupt request from maincpu side
246   m_subcpu->trg1(state);
254247}
255248
256READ8_MEMBER(pve500_state::dualport_ram_right_r)
257{
258   //printf("dualport_ram: Right READ\n");
259   m_maincpu->trg1(1); //(INT_Left)
260   return dualport_7FF_data;
261}
262
263WRITE8_MEMBER(pve500_state::dualport_ram_right_w)
264{
265   //printf("dualport_ram: Right WRITE\n");
266   dualport_7FE_data = data;
267   m_maincpu->trg1(0); //(INT_Left)
268}
269
270249READ8_MEMBER(pve500_state::io_expander_r)
271250{
272251//  printf("READ IO_EXPANDER_PORT%c\n", 'A'+offset);
r31876r31877
396375   MCFG_RS232_PORT_ADD("serial_mixer", default_rs232_devices, NULL)
397376   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("subcpu", tmpz84c015_device, rxb_w))
398377
399/* TODO:
400-> There are a few LEDs and a sequence of 7-seg displays with atotal of 27 digits
401*/
378   /* ICF5: 2kbytes of RAM shared between the two CPUs (dual-port RAM)*/
379   MCFG_DEVICE_ADD("mb8421", MB8421, 0)
380   MCFG_MB8421_INTL_HANDLER(WRITELINE(pve500_state, mb8421_intl))
381   MCFG_MB8421_INTR_HANDLER(WRITELINE(pve500_state, mb8421_intr))
402382
403383   /* video hardware */
404384   MCFG_DEFAULT_LAYOUT(layout_pve500)
trunk/src/mess/mess.mak
r31876r31877
431431MACHINES += MATSUCD
432432MACHINES += MB14241
433433MACHINES += MB3773
434#MACHINES += MB8421
434MACHINES += MB8421
435435MACHINES += MB87078
436436MACHINES += MB8795
437437MACHINES += MB89352

Previous 199869 Revisions Next


© 1997-2024 The MAME Team