trunk/src/mess/drivers/pve500.c
r32672 | r32673 | |
19 | 19 | SELFdIAG Error___ _F3 F3_CtC3c |
20 | 20 | |
21 | 21 | 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. |
23 | 23 | |
24 | 24 | According to the service manual, this error code means: "ICF3 CTC CH-3 counter operation failure (No interruption)" |
25 | 25 | |
r32672 | r32673 | |
46 | 46 | |
47 | 47 | #include "emu.h" |
48 | 48 | #include "cpu/z80/tmpz84c015.h" |
| 49 | #include "cpu/mb88xx/mb88xx.h" |
49 | 50 | #include "sound/beep.h" |
50 | 51 | #include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */ |
51 | 52 | #include "pve500.lh" |
52 | 53 | #include "machine/mb8421.h" |
| 54 | #include "machine/eepromser.h" |
53 | 55 | |
54 | 56 | #define IO_EXPANDER_PORTA 0 |
55 | 57 | #define IO_EXPANDER_PORTB 1 |
r32672 | r32673 | |
64 | 66 | : driver_device(mconfig, type, tag) |
65 | 67 | , m_maincpu(*this, "maincpu") |
66 | 68 | , m_subcpu(*this, "subcpu") |
| 69 | , m_eeprom(*this, "eeprom") |
67 | 70 | , m_buzzer(*this, "buzzer") |
68 | 71 | { } |
69 | 72 | |
r32672 | r32673 | |
74 | 77 | |
75 | 78 | DECLARE_WRITE8_MEMBER(io_expander_w); |
76 | 79 | DECLARE_READ8_MEMBER(io_expander_r); |
| 80 | DECLARE_WRITE8_MEMBER(eeprom_w); |
| 81 | DECLARE_READ8_MEMBER(eeprom_r); |
77 | 82 | DECLARE_DRIVER_INIT(pve500); |
78 | 83 | private: |
79 | 84 | virtual void machine_start(); |
80 | 85 | virtual void machine_reset(); |
81 | 86 | required_device<tmpz84c015_device> m_maincpu; |
82 | 87 | required_device<tmpz84c015_device> m_subcpu; |
| 88 | required_device<eeprom_serial_er5911_device> m_eeprom; |
83 | 89 | required_device<beep_device> m_buzzer; |
84 | 90 | UINT8 io_SEL, io_LD, io_LE, io_SC, io_KY; |
85 | 91 | }; |
r32672 | r32673 | |
110 | 116 | ADDRESS_MAP_END |
111 | 117 | |
112 | 118 | static 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 |
114 | 120 | AM_RANGE (0xC000, 0xDFFF) AM_RAM // ICD6: 8kbytes of RAM |
115 | 121 | AM_RANGE (0xE000, 0xE7FF) AM_MIRROR(0x1800) AM_DEVREADWRITE("mb8421", mb8421_device, left_r, left_w) |
116 | 122 | ADDRESS_MAP_END |
r32672 | r32673 | |
120 | 126 | ADDRESS_MAP_END |
121 | 127 | |
122 | 128 | static 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 |
124 | 130 | AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander |
125 | 131 | AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w) |
126 | 132 | ADDRESS_MAP_END |
r32672 | r32673 | |
246 | 252 | m_subcpu->trg1(state); |
247 | 253 | } |
248 | 254 | |
| 255 | READ8_MEMBER(pve500_state::eeprom_r) |
| 256 | { |
| 257 | return (m_eeprom->ready_read() << 1) | m_eeprom->do_read(); |
| 258 | } |
| 259 | |
| 260 | WRITE8_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 | |
249 | 267 | READ8_MEMBER(pve500_state::io_expander_r) |
250 | 268 | { |
251 | 269 | // printf("READ IO_EXPANDER_PORT%c\n", 'A'+offset); |
r32672 | r32673 | |
356 | 374 | MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("switcher", rs232_port_device, write_txd)) |
357 | 375 | MCFG_TMPZ84C015_OUT_TXDB_CB(DEVWRITELINE("serial_mixer", rs232_port_device, write_txd)) |
358 | 376 | |
| 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 | |
359 | 389 | /* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/ |
360 | 390 | MCFG_RS232_PORT_ADD("recorder", default_rs232_devices, NULL) |
361 | 391 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE("maincpu", tmpz84c015_device, rxa_w)) |
r32672 | r32673 | |
396 | 426 | |
397 | 427 | ROM_REGION( 0x8000, "subcpu", 0 ) |
398 | 428 | 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 ) |
399 | 438 | ROM_END |
400 | 439 | |
401 | 440 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
trunk/src/emu/machine/eepromser.h
r32672 | r32673 | |
56 | 56 | #define MCFG_EEPROM_SERIAL_ER5911_16BIT_ADD(_tag) \ |
57 | 57 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_ER5911_16BIT, 0) |
58 | 58 | |
| 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 | |
59 | 64 | // X24c44 16 bit ram/eeprom combo |
60 | 65 | #define MCFG_EEPROM_SERIAL_X24C44_ADD(_tag) \ |
61 | 66 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_X24C44_16BIT, 0) |
r32672 | r32673 | |
282 | 287 | // ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box |
283 | 288 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8) |
284 | 289 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16) |
| 290 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 8) |
| 291 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, msm16911, MSM16911, 16) |
285 | 292 | |
286 | 293 | // X24c44 8 bit 32byte ram/eeprom combo |
287 | 294 | DECLARE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16) |
trunk/src/emu/cpu/mb88xx/mb88xx.c
r32672 | r32673 | |
19 | 19 | |
20 | 20 | |
21 | 21 | const device_type MB88 = &device_creator<mb88_cpu_device>; |
| 22 | const device_type MB88201 = &device_creator<mb88201_cpu_device>; |
| 23 | const device_type MB88202 = &device_creator<mb88202_cpu_device>; |
22 | 24 | const device_type MB8841 = &device_creator<mb8841_cpu_device>; |
23 | 25 | const device_type MB8842 = &device_creator<mb8842_cpu_device>; |
24 | 26 | const device_type MB8843 = &device_creator<mb8843_cpu_device>; |
r32672 | r32673 | |
76 | 78 | ADDRESS MAPS |
77 | 79 | ***************************************************************************/ |
78 | 80 | |
| 81 | static ADDRESS_MAP_START(program_9bit, AS_PROGRAM, 8, mb88_cpu_device) |
| 82 | AM_RANGE(0x000, 0x1ff) AM_ROM |
| 83 | ADDRESS_MAP_END |
| 84 | |
79 | 85 | static ADDRESS_MAP_START(program_10bit, AS_PROGRAM, 8, mb88_cpu_device) |
80 | 86 | AM_RANGE(0x000, 0x3ff) AM_ROM |
81 | 87 | ADDRESS_MAP_END |
r32672 | r32673 | |
84 | 90 | AM_RANGE(0x000, 0x7ff) AM_ROM |
85 | 91 | ADDRESS_MAP_END |
86 | 92 | |
| 93 | static ADDRESS_MAP_START(data_4bit, AS_DATA, 8, mb88_cpu_device) |
| 94 | AM_RANGE(0x00, 0x0f) AM_RAM |
| 95 | ADDRESS_MAP_END |
| 96 | |
| 97 | static ADDRESS_MAP_START(data_5bit, AS_DATA, 8, mb88_cpu_device) |
| 98 | AM_RANGE(0x00, 0x1f) AM_RAM |
| 99 | ADDRESS_MAP_END |
| 100 | |
87 | 101 | static ADDRESS_MAP_START(data_6bit, AS_DATA, 8, mb88_cpu_device) |
88 | 102 | AM_RANGE(0x00, 0x3f) AM_RAM |
89 | 103 | ADDRESS_MAP_END |
r32672 | r32673 | |
105 | 119 | |
106 | 120 | 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) |
107 | 121 | : 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) ) ) |
110 | 124 | , m_io_config("io", ENDIANNESS_BIG, 8, 3, 0) |
111 | 125 | , m_PLA(NULL) |
112 | 126 | { |
113 | 127 | } |
114 | 128 | |
| 129 | mb88201_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 | } |
115 | 133 | |
| 134 | mb88202_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 | |
116 | 140 | mb8841_cpu_device::mb8841_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
117 | 141 | : mb88_cpu_device(mconfig, MB8841, "MB8841", tag, owner, clock, "mb8841", __FILE__, 11, 7) |
118 | 142 | { |