mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
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:
parent
49c49c511a
commit
120ba87d70
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user