eepromuser.c: [Felipe Sanches]

- Added Support for MSM16911 Serial eeprom

mb88xx.c:  [Felipe Sanches]
 - Added support for Fujitsu M88201-202 MCU

(MESS) pve500.c:  [Felipe Sanchez]
 - Declare 4-bit MCUs used to control search dials.
 - Declare/Hook up Serial eeprom to Port A of the subcpu
This commit is contained in:
Scott Stone 2014-10-12 00:25:13 +00:00
parent 49c49c511a
commit 120ba87d70
5 changed files with 95 additions and 5 deletions

View File

@ -19,6 +19,8 @@
const device_type MB88 = &device_creator<mb88_cpu_device>;
const device_type MB88201 = &device_creator<mb88201_cpu_device>;
const device_type MB88202 = &device_creator<mb88202_cpu_device>;
const device_type MB8841 = &device_creator<mb8841_cpu_device>;
const device_type MB8842 = &device_creator<mb8842_cpu_device>;
const device_type MB8843 = &device_creator<mb8843_cpu_device>;
@ -76,6 +78,10 @@ const device_type MB8844 = &device_creator<mb8844_cpu_device>;
ADDRESS MAPS
***************************************************************************/
static ADDRESS_MAP_START(program_9bit, AS_PROGRAM, 8, mb88_cpu_device)
AM_RANGE(0x000, 0x1ff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START(program_10bit, AS_PROGRAM, 8, mb88_cpu_device)
AM_RANGE(0x000, 0x3ff) AM_ROM
ADDRESS_MAP_END
@ -84,6 +90,14 @@ static ADDRESS_MAP_START(program_11bit, AS_PROGRAM, 8, mb88_cpu_device)
AM_RANGE(0x000, 0x7ff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START(data_4bit, AS_DATA, 8, mb88_cpu_device)
AM_RANGE(0x00, 0x0f) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(data_5bit, AS_DATA, 8, mb88_cpu_device)
AM_RANGE(0x00, 0x1f) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(data_6bit, AS_DATA, 8, mb88_cpu_device)
AM_RANGE(0x00, 0x3f) AM_RAM
ADDRESS_MAP_END
@ -105,13 +119,23 @@ mb88_cpu_device::mb88_cpu_device(const machine_config &mconfig, const char *tag,
mb88_cpu_device::mb88_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source, int program_width, int data_width)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
, m_program_config("program", ENDIANNESS_BIG, 8, program_width, 0, ( (program_width == 10) ? ADDRESS_MAP_NAME(program_10bit) : ADDRESS_MAP_NAME(program_11bit) ) )
, m_data_config("data", ENDIANNESS_BIG, 8, data_width, 0, ( (data_width == 6) ? ADDRESS_MAP_NAME(data_6bit) : ADDRESS_MAP_NAME(data_7bit) ) )
, m_program_config("program", ENDIANNESS_BIG, 8, program_width, 0, ( (program_width == 9) ? ADDRESS_MAP_NAME(program_9bit) : (program_width == 10) ? ADDRESS_MAP_NAME(program_10bit) : ADDRESS_MAP_NAME(program_11bit) ) )
, m_data_config("data", ENDIANNESS_BIG, 8, data_width, 0, ( (data_width == 4) ? ADDRESS_MAP_NAME(data_4bit) : (data_width == 5) ? ADDRESS_MAP_NAME(data_5bit) : (data_width == 6) ? ADDRESS_MAP_NAME(data_6bit) : ADDRESS_MAP_NAME(data_7bit) ) )
, m_io_config("io", ENDIANNESS_BIG, 8, 3, 0)
, m_PLA(NULL)
{
}
mb88201_cpu_device::mb88201_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: mb88_cpu_device(mconfig, MB88201, "MB88201", tag, owner, clock, "mb88201", __FILE__, 9, 4)
{
}
mb88202_cpu_device::mb88202_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: mb88_cpu_device(mconfig, MB88202, "MB88202", tag, owner, clock, "mb88202", __FILE__, 10, 5)
{
}
mb8841_cpu_device::mb8841_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: mb88_cpu_device(mconfig, MB8841, "MB8841", tag, owner, clock, "mb8841", __FILE__, 11, 7)

View File

@ -155,6 +155,22 @@ private:
};
class mb88201_cpu_device : public mb88_cpu_device
{
public:
// construction/destruction
mb88201_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
class mb88202_cpu_device : public mb88_cpu_device
{
public:
// construction/destruction
mb88202_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
class mb8841_cpu_device : public mb88_cpu_device
{
public:
@ -188,6 +204,8 @@ public:
extern const device_type MB88;
extern const device_type MB88201;
extern const device_type MB88202;
extern const device_type MB8841;
extern const device_type MB8842;
extern const device_type MB8843;

View File

@ -1154,6 +1154,8 @@ DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 8, 2048, 11)
// ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box
DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8, 128, 9)
DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16, 64, 8)
DEFINE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 8, 128, 9)
DEFINE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 16, 64, 8)
// X24c44 8 bit 32byte ram/eeprom combo
DEFINE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16, 16, 4)

View File

@ -56,6 +56,11 @@
#define MCFG_EEPROM_SERIAL_ER5911_16BIT_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_ER5911_16BIT, 0)
#define MCFG_EEPROM_SERIAL_MSM16911_8BIT_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_MSM16911_8BIT, 0)
#define MCFG_EEPROM_SERIAL_MSM16911_16BIT_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_MSM16911_16BIT, 0)
// X24c44 16 bit ram/eeprom combo
#define MCFG_EEPROM_SERIAL_X24C44_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_X24C44_16BIT, 0)
@ -282,6 +287,8 @@ DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 8)
// ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box
DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8)
DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16)
DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 8)
DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 16)
// X24c44 8 bit 32byte ram/eeprom combo
DECLARE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16)

View File

@ -19,7 +19,7 @@
SELFdIAG Error___ _F3 F3_CtC3c
which means it detected an error in the CTC circuitry (it means we're emulating it wrong!)
F3 is the coordinate of the subcpu EEPROM chip in the PCB.
F3 is the coordinate of the subcpu EPROM chip in the PCB.
According to the service manual, this error code means: "ICF3 CTC CH-3 counter operation failure (No interruption)"
@ -46,10 +46,12 @@
#include "emu.h"
#include "cpu/z80/tmpz84c015.h"
#include "cpu/mb88xx/mb88xx.h"
#include "sound/beep.h"
#include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */
#include "pve500.lh"
#include "machine/mb8421.h"
#include "machine/eepromser.h"
#define IO_EXPANDER_PORTA 0
#define IO_EXPANDER_PORTB 1
@ -64,6 +66,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_subcpu(*this, "subcpu")
, m_eeprom(*this, "eeprom")
, m_buzzer(*this, "buzzer")
{ }
@ -74,12 +77,15 @@ public:
DECLARE_WRITE8_MEMBER(io_expander_w);
DECLARE_READ8_MEMBER(io_expander_r);
DECLARE_WRITE8_MEMBER(eeprom_w);
DECLARE_READ8_MEMBER(eeprom_r);
DECLARE_DRIVER_INIT(pve500);
private:
virtual void machine_start();
virtual void machine_reset();
required_device<tmpz84c015_device> m_maincpu;
required_device<tmpz84c015_device> m_subcpu;
required_device<eeprom_serial_er5911_device> m_eeprom;
required_device<beep_device> m_buzzer;
UINT8 io_SEL, io_LD, io_LE, io_SC, io_KY;
};
@ -110,7 +116,7 @@ static ADDRESS_MAP_START(maincpu_io, AS_IO, 8, pve500_state)
ADDRESS_MAP_END
static ADDRESS_MAP_START(maincpu_prg, AS_PROGRAM, 8, pve500_state)
AM_RANGE (0x0000, 0xBFFF) AM_ROM // ICB7: 48kbytes EEPROM
AM_RANGE (0x0000, 0xBFFF) AM_ROM // ICB7: 48kbytes EPROM
AM_RANGE (0xC000, 0xDFFF) AM_RAM // ICD6: 8kbytes of RAM
AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_DEVREADWRITE("mb8421", mb8421_device, left_r, left_w)
ADDRESS_MAP_END
@ -120,7 +126,7 @@ static ADDRESS_MAP_START(subcpu_io, AS_IO, 8, pve500_state)
ADDRESS_MAP_END
static ADDRESS_MAP_START(subcpu_prg, AS_PROGRAM, 8, pve500_state)
AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EEPROM
AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EPROM
AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander
AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w)
ADDRESS_MAP_END
@ -246,6 +252,18 @@ WRITE_LINE_MEMBER(pve500_state::mb8421_intr)
m_subcpu->trg1(state);
}
READ8_MEMBER(pve500_state::eeprom_r)
{
return (m_eeprom->ready_read() << 1) | m_eeprom->do_read();
}
WRITE8_MEMBER(pve500_state::eeprom_w)
{
m_eeprom->di_write( (data & (1 << 2)) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->clk_write( (data & (1 << 3)) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->cs_write( (data & (1 << 4)) ? ASSERT_LINE : CLEAR_LINE);
}
READ8_MEMBER(pve500_state::io_expander_r)
{
// printf("READ IO_EXPANDER_PORT%c\n", 'A'+offset);
@ -356,6 +374,18 @@ static MACHINE_CONFIG_START( pve500, pve500_state )
MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("switcher", rs232_port_device, write_txd))
MCFG_TMPZ84C015_OUT_TXDB_CB(DEVWRITELINE("serial_mixer", rs232_port_device, write_txd))
// PIO callbacks
MCFG_TMPZ84C015_IN_PA_CB(READ8(pve500_state, eeprom_r))
MCFG_TMPZ84C015_OUT_PA_CB(WRITE8(pve500_state, eeprom_w))
/* Search Dial MCUs */
MCFG_CPU_ADD("dial_mcu_left", MB88201, XTAL_4MHz) /* PLAYER DIAL MCU */
MCFG_CPU_ADD("dial_mcu_right", MB88201, XTAL_4MHz) /* RECORDER DIAL MCU */
/* Serial EEPROM (128 bytes, 8-bit data organization) */
/* The EEPROM stores the setup data */
MCFG_EEPROM_SERIAL_MSM16911_8BIT_ADD("eeprom")
/* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/
MCFG_RS232_PORT_ADD("recorder", default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("maincpu", tmpz84c015_device, rxa_w))
@ -396,6 +426,15 @@ ROM_START( pve500 )
ROM_REGION( 0x8000, "subcpu", 0 )
ROM_LOAD("pve500.icg5", 0x00000, 0x8000, CRC(28cca60a) SHA1(308d70062653769250327ede7a4e1a8a76fc9ab9) ) //32kbyte sub-cpu program
ROM_REGION( 0x200, "dial_mcu_left", 0 ) /* PLAYER DIAL MCU */
ROM_LOAD( "pve500.icd3", 0x0000, 0x0200, NO_DUMP )
ROM_REGION( 0x200, "dial_mcu_right", 0 ) /* RECORDER DIAL MCU */
ROM_LOAD( "pve500.icc3", 0x0000, 0x0200, NO_DUMP )
ROM_REGION( 0x80, "eeprom", 0 ) /* The EEPROM stores the setup data */
ROM_LOAD( "pve500.ice3", 0x0000, 0x080, NO_DUMP )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */