Previous 199869 Revisions Next

r32673 Sunday 12th October, 2014 at 00:25:13 UTC by Tafoid
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
[src/emu/cpu/mb88xx]mb88xx.c mb88xx.h
[src/emu/machine]eepromser.c eepromser.h
[src/mess/drivers]pve500.c

trunk/src/mess/drivers/pve500.c
r32672r32673
1919  SELFdIAG Error___ _F3 F3_CtC3c
2020
2121  which means it detected an error in the CTC circuitry (it means we're emulating it wrong!)
22  F3 is the coordinate of the subcpu EEPROM chip in the PCB.
22  F3 is the coordinate of the subcpu EPROM chip in the PCB.
2323
2424    According to the service manual, this error code means: "ICF3 CTC CH-3 counter operation failure (No interruption)"
2525
r32672r32673
4646
4747#include "emu.h"
4848#include "cpu/z80/tmpz84c015.h"
49#include "cpu/mb88xx/mb88xx.h"
4950#include "sound/beep.h"
5051#include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */
5152#include "pve500.lh"
5253#include "machine/mb8421.h"
54#include "machine/eepromser.h"
5355
5456#define IO_EXPANDER_PORTA 0
5557#define IO_EXPANDER_PORTB 1
r32672r32673
6466      : driver_device(mconfig, type, tag)
6567      , m_maincpu(*this, "maincpu")
6668      , m_subcpu(*this, "subcpu")
69      , m_eeprom(*this, "eeprom")
6770      , m_buzzer(*this, "buzzer")
6871   { }
6972
r32672r32673
7477
7578   DECLARE_WRITE8_MEMBER(io_expander_w);
7679   DECLARE_READ8_MEMBER(io_expander_r);
80   DECLARE_WRITE8_MEMBER(eeprom_w);
81   DECLARE_READ8_MEMBER(eeprom_r);
7782   DECLARE_DRIVER_INIT(pve500);
7883private:
7984   virtual void machine_start();
8085   virtual void machine_reset();
8186   required_device<tmpz84c015_device> m_maincpu;
8287   required_device<tmpz84c015_device> m_subcpu;
88   required_device<eeprom_serial_er5911_device> m_eeprom;
8389   required_device<beep_device> m_buzzer;
8490   UINT8 io_SEL, io_LD, io_LE, io_SC, io_KY;
8591};
r32672r32673
110116ADDRESS_MAP_END
111117
112118static ADDRESS_MAP_START(maincpu_prg, AS_PROGRAM, 8, pve500_state)
113   AM_RANGE (0x0000, 0xBFFF) AM_ROM // ICB7: 48kbytes EEPROM
119   AM_RANGE (0x0000, 0xBFFF) AM_ROM // ICB7: 48kbytes EPROM
114120   AM_RANGE (0xC000, 0xDFFF) AM_RAM // ICD6: 8kbytes of RAM
115121   AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_DEVREADWRITE("mb8421", mb8421_device, left_r, left_w)
116122ADDRESS_MAP_END
r32672r32673
120126ADDRESS_MAP_END
121127
122128static ADDRESS_MAP_START(subcpu_prg, AS_PROGRAM, 8, pve500_state)
123   AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EEPROM
129   AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EPROM
124130   AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander
125131   AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w)
126132ADDRESS_MAP_END
r32672r32673
246252   m_subcpu->trg1(state);
247253}
248254
255READ8_MEMBER(pve500_state::eeprom_r)
256{
257   return (m_eeprom->ready_read() << 1) | m_eeprom->do_read();
258}
259
260WRITE8_MEMBER(pve500_state::eeprom_w)
261{
262   m_eeprom->di_write( (data & (1 << 2)) ? ASSERT_LINE : CLEAR_LINE);
263   m_eeprom->clk_write( (data & (1 << 3)) ? ASSERT_LINE : CLEAR_LINE);
264   m_eeprom->cs_write( (data & (1 << 4)) ? ASSERT_LINE : CLEAR_LINE);
265}
266
249267READ8_MEMBER(pve500_state::io_expander_r)
250268{
251269//  printf("READ IO_EXPANDER_PORT%c\n", 'A'+offset);
r32672r32673
356374   MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("switcher", rs232_port_device, write_txd))
357375   MCFG_TMPZ84C015_OUT_TXDB_CB(DEVWRITELINE("serial_mixer", rs232_port_device, write_txd))
358376
377   // PIO callbacks
378   MCFG_TMPZ84C015_IN_PA_CB(READ8(pve500_state, eeprom_r))
379   MCFG_TMPZ84C015_OUT_PA_CB(WRITE8(pve500_state, eeprom_w))
380
381   /* Search Dial MCUs */
382   MCFG_CPU_ADD("dial_mcu_left", MB88201, XTAL_4MHz) /* PLAYER DIAL MCU */
383   MCFG_CPU_ADD("dial_mcu_right", MB88201, XTAL_4MHz) /* RECORDER DIAL MCU */
384
385   /* Serial EEPROM (128 bytes, 8-bit data organization) */
386   /* The EEPROM stores the setup data */
387   MCFG_EEPROM_SERIAL_MSM16911_8BIT_ADD("eeprom")
388
359389   /* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/
360390   MCFG_RS232_PORT_ADD("recorder", default_rs232_devices, NULL)
361391   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("maincpu", tmpz84c015_device, rxa_w))
r32672r32673
396426
397427   ROM_REGION( 0x8000, "subcpu", 0 )
398428   ROM_LOAD("pve500.icg5",  0x00000, 0x8000, CRC(28cca60a) SHA1(308d70062653769250327ede7a4e1a8a76fc9ab9) ) //32kbyte sub-cpu program
429
430   ROM_REGION( 0x200, "dial_mcu_left", 0 ) /* PLAYER DIAL MCU */
431   ROM_LOAD( "pve500.icd3", 0x0000, 0x0200, NO_DUMP )
432
433   ROM_REGION( 0x200, "dial_mcu_right", 0 ) /* RECORDER DIAL MCU */
434   ROM_LOAD( "pve500.icc3", 0x0000, 0x0200, NO_DUMP )
435
436   ROM_REGION( 0x80, "eeprom", 0 ) /* The EEPROM stores the setup data */
437   ROM_LOAD( "pve500.ice3", 0x0000, 0x080, NO_DUMP )
399438ROM_END
400439
401440/*    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT   CLASS           INIT   COMPANY    FULLNAME                    FLAGS */
trunk/src/emu/machine/eepromser.c
r32672r32673
11541154// ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box
11551155DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8, 128, 9)
11561156DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16, 64, 8)
1157DEFINE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 8, 128, 9)
1158DEFINE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 16, 64, 8)
11571159
11581160// X24c44 8 bit 32byte ram/eeprom combo
11591161DEFINE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16, 16, 4)
trunk/src/emu/machine/eepromser.h
r32672r32673
5656#define MCFG_EEPROM_SERIAL_ER5911_16BIT_ADD(_tag) \
5757   MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_ER5911_16BIT, 0)
5858
59#define MCFG_EEPROM_SERIAL_MSM16911_8BIT_ADD(_tag) \
60   MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_MSM16911_8BIT, 0)
61#define MCFG_EEPROM_SERIAL_MSM16911_16BIT_ADD(_tag) \
62   MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_MSM16911_16BIT, 0)
63
5964// X24c44 16 bit ram/eeprom combo
6065#define MCFG_EEPROM_SERIAL_X24C44_ADD(_tag) \
6166   MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_X24C44_16BIT, 0)
r32672r32673
282287// ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box
283288DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8)
284289DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16)
290DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 8)
291DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 16)
285292
286293// X24c44 8 bit 32byte ram/eeprom combo
287294DECLARE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16)
trunk/src/emu/cpu/mb88xx/mb88xx.h
r32672r32673
155155};
156156
157157
158class mb88201_cpu_device : public mb88_cpu_device
159{
160public:
161   // construction/destruction
162   mb88201_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
163};
164
165
166class mb88202_cpu_device : public mb88_cpu_device
167{
168public:
169   // construction/destruction
170   mb88202_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
171};
172
173
158174class mb8841_cpu_device : public mb88_cpu_device
159175{
160176public:
r32672r32673
188204
189205
190206extern const device_type MB88;
207extern const device_type MB88201;
208extern const device_type MB88202;
191209extern const device_type MB8841;
192210extern const device_type MB8842;
193211extern const device_type MB8843;
trunk/src/emu/cpu/mb88xx/mb88xx.c
r32672r32673
1919
2020
2121const device_type MB88 = &device_creator<mb88_cpu_device>;
22const device_type MB88201 = &device_creator<mb88201_cpu_device>;
23const device_type MB88202 = &device_creator<mb88202_cpu_device>;
2224const device_type MB8841 = &device_creator<mb8841_cpu_device>;
2325const device_type MB8842 = &device_creator<mb8842_cpu_device>;
2426const device_type MB8843 = &device_creator<mb8843_cpu_device>;
r32672r32673
7678    ADDRESS MAPS
7779***************************************************************************/
7880
81static ADDRESS_MAP_START(program_9bit, AS_PROGRAM, 8, mb88_cpu_device)
82   AM_RANGE(0x000, 0x1ff) AM_ROM
83ADDRESS_MAP_END
84
7985static ADDRESS_MAP_START(program_10bit, AS_PROGRAM, 8, mb88_cpu_device)
8086   AM_RANGE(0x000, 0x3ff) AM_ROM
8187ADDRESS_MAP_END
r32672r32673
8490   AM_RANGE(0x000, 0x7ff) AM_ROM
8591ADDRESS_MAP_END
8692
93static ADDRESS_MAP_START(data_4bit, AS_DATA, 8, mb88_cpu_device)
94   AM_RANGE(0x00, 0x0f) AM_RAM
95ADDRESS_MAP_END
96
97static ADDRESS_MAP_START(data_5bit, AS_DATA, 8, mb88_cpu_device)
98   AM_RANGE(0x00, 0x1f) AM_RAM
99ADDRESS_MAP_END
100
87101static ADDRESS_MAP_START(data_6bit, AS_DATA, 8, mb88_cpu_device)
88102   AM_RANGE(0x00, 0x3f) AM_RAM
89103ADDRESS_MAP_END
r32672r32673
105119
106120mb88_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)
107121   : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
108   , m_program_config("program", ENDIANNESS_BIG, 8, program_width, 0, ( (program_width == 10) ? ADDRESS_MAP_NAME(program_10bit) : ADDRESS_MAP_NAME(program_11bit) ) )
109   , m_data_config("data", ENDIANNESS_BIG, 8, data_width, 0, ( (data_width == 6) ? ADDRESS_MAP_NAME(data_6bit) : ADDRESS_MAP_NAME(data_7bit) ) )
122   , 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) ) )
123   , 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) ) )
110124   , m_io_config("io", ENDIANNESS_BIG, 8, 3, 0)
111125   , m_PLA(NULL)
112126{
113127}
114128
129mb88201_cpu_device::mb88201_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
130   : mb88_cpu_device(mconfig, MB88201, "MB88201", tag, owner, clock, "mb88201", __FILE__, 9, 4)
131{
132}
115133
134mb88202_cpu_device::mb88202_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
135   : mb88_cpu_device(mconfig, MB88202, "MB88202", tag, owner, clock, "mb88202", __FILE__, 10, 5)
136{
137}
138
139
116140mb8841_cpu_device::mb8841_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
117141   : mb88_cpu_device(mconfig, MB8841, "MB8841", tag, owner, clock, "mb8841", __FILE__, 11, 7)
118142{

Previous 199869 Revisions Next


© 1997-2024 The MAME Team