diff options
Diffstat (limited to 'src/mame/drivers/pve500.cpp')
-rw-r--r-- | src/mame/drivers/pve500.cpp | 472 |
1 files changed, 0 insertions, 472 deletions
diff --git a/src/mame/drivers/pve500.cpp b/src/mame/drivers/pve500.cpp deleted file mode 100644 index c8844ff77bd..00000000000 --- a/src/mame/drivers/pve500.cpp +++ /dev/null @@ -1,472 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders: Felipe Sanches -/*************************************************************************** - - SONY PVE-500 Editing Control Unit - "A/B roll edit controller for professional video editing applications" - - Driver by Felipe Correa da Silva Sanches <juca@members.fsf.org> - Technical info at https://www.garoa.net.br/wiki/PVE-500 - - Notes: - One can induce the self-diagnose by booting the device holding LEARN and P2-RESET buttons togheter - With the default keyboard map, this can be done by holding keys L and S while pressing F3. - (Don't forget to unlock the keyboard by using the UI TOGGLE key) - - This self-diagnose routine displays the value C817, which is the checksum value of the subcpu ROM - and afterwards it displays the following message: - - 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 EPROM chip in the PCB. - - According to the service manual, this error code means: "ICF3 CTC CH-3 counter operation failure (No interruption)" - - Known issues: - There's still an annoying blinking in the 7-seg display. - - Changelog: - - 2014 SEP 01 [Felipe Sanches]: - * hooked-up MB8421 device (dual-port SRAM) - - 2014 JUN 24 [Felipe Sanches]: - * figured out the multiplexing signals for the 7-seg display - - 2014 JUN 23 [Felipe Sanches]: - * hooked-up the RS422 ports - - 2014 JAN 14 [Felipe Sanches]: - * Initial driver skeleton -*/ - -#define LOG_7SEG_DISPLAY_SIGNALS 0 -#define DEBUGGING_INDUCE_SELFDIAGNOSE 0 - -#include "emu.h" -#include "bus/rs232/rs232.h" /* actually meant to be RS422 ports */ -#include "cpu/mb88xx/mb88xx.h" -#include "cpu/z80/tmpz84c015.h" -#include "machine/clock.h" -#include "machine/cxd1095.h" -#include "machine/eepromser.h" -#include "machine/mb8421.h" -#include "sound/beep.h" -#include "speaker.h" - -#include "pve500.lh" - -#define IO_EXPANDER_PORTA 0 -#define IO_EXPANDER_PORTB 1 -#define IO_EXPANDER_PORTC 2 -#define IO_EXPANDER_PORTD 3 -#define IO_EXPANDER_PORTE 4 - -class pve500_state : public driver_device -{ -public: - pve500_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_subcpu(*this, "subcpu") - , m_cxdio(*this, "cxdio") - , m_eeprom(*this, "eeprom") - , m_buzzer(*this, "buzzer") - , m_digits(*this, "digit%u", 0U) - { } - - void pve500(machine_config &config); - - void init_pve500(); - -private: - DECLARE_WRITE_LINE_MEMBER(mb8421_intl); - DECLARE_WRITE_LINE_MEMBER(mb8421_intr); - DECLARE_WRITE_LINE_MEMBER(GPI_w); - DECLARE_WRITE_LINE_MEMBER(cxdio_reset_w); - DECLARE_WRITE_LINE_MEMBER(external_monitor_w); - - DECLARE_READ8_MEMBER(io_ky_r); - DECLARE_WRITE8_MEMBER(io_sc_w); - DECLARE_WRITE8_MEMBER(io_le_w); - DECLARE_WRITE8_MEMBER(io_ld_w); - DECLARE_WRITE8_MEMBER(io_sel_w); - DECLARE_WRITE8_MEMBER(eeprom_w); - DECLARE_READ8_MEMBER(eeprom_r); - void maincpu_io(address_map &map); - void maincpu_prg(address_map &map); - void subcpu_io(address_map &map); - void subcpu_prg(address_map &map); - - virtual void machine_start() override; - virtual void machine_reset() override; - required_device<tmpz84c015_device> m_maincpu; - required_device<tmpz84c015_device> m_subcpu; - required_device<cxd1095_device> m_cxdio; - required_device<eeprom_serial_er5911_device> m_eeprom; - required_device<beep_device> m_buzzer; - output_finder<27> m_digits; - - uint8_t io_SEL, io_LD, io_LE, io_SC, io_KY; - int LD_data[4]; -}; - -WRITE_LINE_MEMBER(pve500_state::GPI_w) -{ - /* TODO: Implement-me */ -} - -WRITE_LINE_MEMBER(pve500_state::cxdio_reset_w) -{ - if (!state) - m_cxdio->reset(); -} - -WRITE_LINE_MEMBER(pve500_state::external_monitor_w) -{ - /* TODO: Implement-me */ -} - -static const z80_daisy_config maincpu_daisy_chain[] = -{ - { "external_ctc" }, - { "external_sio" }, - { nullptr } -}; - - -void pve500_state::maincpu_io(address_map &map) -{ - map(0x00, 0x03).mirror(0xff00).rw("external_sio", FUNC(z80sio0_device::cd_ba_r), FUNC(z80sio0_device::cd_ba_w)); - map(0x08, 0x0B).mirror(0xff00).rw("external_ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); -} - -void pve500_state::maincpu_prg(address_map &map) -{ - map(0x0000, 0xbfff).rom(); // ICB7: 48kbytes EPROM - map(0xc000, 0xdfff).ram(); // ICD6: 8kbytes of RAM - map(0xe000, 0xe7ff).mirror(0x1800).rw("mb8421", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w)); -} - -void pve500_state::subcpu_io(address_map &map) -{ -} - -void pve500_state::subcpu_prg(address_map &map) -{ - map(0x0000, 0x7fff).rom(); // ICG5: 32kbytes EPROM - map(0x8000, 0x8007).mirror(0x3ff8).rw(m_cxdio, FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)); - map(0xc000, 0xc7ff).mirror(0x3800).rw("mb8421", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)); -} - -void pve500_state::init_pve500() -{ -} - -static INPUT_PORTS_START( pve500 ) - PORT_START("SCAN0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS") PORT_CODE(KEYCODE_5) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A/B") PORT_CODE(KEYCODE_4) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("FROM TO") PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2") PORT_CODE(KEYCODE_2) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1") PORT_CODE(KEYCODE_1) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) - - PORT_START("SCAN1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALL STOP") PORT_CODE(KEYCODE_M) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LAST EDIT") PORT_CODE(KEYCODE_I) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUDIO SPLIT") PORT_CODE(KEYCODE_T) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A2") PORT_CODE(KEYCODE_9) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ASMBL") PORT_CODE(KEYCODE_6) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_7) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A1") PORT_CODE(KEYCODE_8) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) - - PORT_START("SCAN2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RVW/JUMP") PORT_CODE(KEYCODE_N) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUTO EDIT") PORT_CODE(KEYCODE_B) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PREVIEW") PORT_CODE(KEYCODE_V) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-FF") PORT_CODE(KEYCODE_R) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-REW") PORT_CODE(KEYCODE_E) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-STILL") PORT_CODE(KEYCODE_W) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-PLAY") PORT_CODE(KEYCODE_Q) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) - - PORT_START("SCAN3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-OUT") PORT_CODE(KEYCODE_K) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-IN") PORT_CODE(KEYCODE_J) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GO TO") PORT_CODE(KEYCODE_H) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-OUT") PORT_CODE(KEYCODE_G) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-IN") PORT_CODE(KEYCODE_F) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM+") PORT_CODE(KEYCODE_U) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM-") PORT_CODE(KEYCODE_Y) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) - - PORT_START("SCAN4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-FF") PORT_CODE(KEYCODE_OPENBRACE) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-REW") PORT_CODE(KEYCODE_QUOTE) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-STILL") PORT_CODE(KEYCODE_P) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-PLAY") PORT_CODE(KEYCODE_O) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EDIT") PORT_CODE(KEYCODE_EQUALS) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("REC") PORT_CODE(KEYCODE_MINUS) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) - - PORT_START("SCAN5") - PORT_DIPNAME( 0x03, 0x02, "R-EDIT REF" ) - PORT_DIPSETTING( 0x02, "TC" ) - PORT_DIPSETTING( 0x00, "RTC" ) - PORT_DIPSETTING( 0x01, "CTL" ) - - PORT_DIPNAME( 0x0C, 0x08, "P2-EDIT REF" ) - PORT_DIPSETTING( 0x08, "TC" ) - PORT_DIPSETTING( 0x00, "RTC" ) - PORT_DIPSETTING( 0x04, "CTL" ) - - PORT_DIPNAME( 0x30, 0x20, "P1-EDIT REF" ) - PORT_DIPSETTING( 0x20, "TC" ) - PORT_DIPSETTING( 0x00, "RTC" ) - PORT_DIPSETTING( 0x10, "CTL" ) - - PORT_START("SCAN6") - PORT_DIPNAME( 0x03, 0x02, "SYNCHRO" ) - PORT_DIPSETTING( 0x02, "ON/CF" ) - PORT_DIPSETTING( 0x00, "ON" ) - PORT_DIPSETTING( 0x01, "OFF" ) - - PORT_DIPNAME( 0x0C, 0x08, "PREROLL" ) - PORT_DIPSETTING( 0x08, "7" ) - PORT_DIPSETTING( 0x00, "5" ) - PORT_DIPSETTING( 0x04, "3" ) - - PORT_START("SCAN7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOTAL") PORT_CODE(KEYCODE_CLOSEBRACE) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LEARN") PORT_CODE(KEYCODE_L) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-1F") PORT_CODE(KEYCODE_Z) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-10F") PORT_CODE(KEYCODE_X) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-100F") PORT_CODE(KEYCODE_C) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-RESET") PORT_CODE(KEYCODE_A) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2-RESET") PORT_CODE(KEYCODE_S) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1-RESET") PORT_CODE(KEYCODE_D) -INPUT_PORTS_END - -void pve500_state::machine_start() -{ - io_LD = 0; - io_SC = 0; - io_LE = 0; - io_SEL = 0; - io_KY = 0; - m_digits.resolve(); -} - -void pve500_state::machine_reset() -{ - /* Setup beep */ - m_buzzer->set_state(0); -} - -WRITE_LINE_MEMBER(pve500_state::mb8421_intl) -{ - // shared ram interrupt request from subcpu side - m_maincpu->trg1(state); -} - -WRITE_LINE_MEMBER(pve500_state::mb8421_intr) -{ - // shared ram interrupt request from maincpu side - 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_ky_r) -{ - io_KY = 0x00; - if (!BIT(io_SC, 0)) io_KY |= ioport("SCAN0")->read(); - if (!BIT(io_SC, 1)) io_KY |= ioport("SCAN1")->read(); - if (!BIT(io_SC, 2)) io_KY |= ioport("SCAN2")->read(); - if (!BIT(io_SC, 3)) io_KY |= ioport("SCAN3")->read(); - if (!BIT(io_SC, 4)) io_KY |= ioport("SCAN4")->read(); - if (!BIT(io_SC, 5)) io_KY |= ioport("SCAN5")->read(); - if (!BIT(io_SC, 6)) io_KY |= ioport("SCAN6")->read(); - if (!BIT(io_SC, 7)) io_KY |= ioport("SCAN7")->read(); -#if DEBUGGING_INDUCE_SELFDIAGNOSE - io_KY = 0x42; //according to procedure described in the service manual -#endif - return io_KY; -} - -WRITE8_MEMBER(pve500_state::io_sc_w) -{ - const int swap[4] = {2,1,0,3}; - -#if LOG_7SEG_DISPLAY_SIGNALS - printf("CXD1095 PORTA (io_SC=%02X)\n", data); -#endif - io_SC = data; - - for (int j=0; j<8; j++){ - if (!BIT(io_SC,j)){ - int digits = (j < 3) ? 4 : 3; - for (int i = 0; i < digits; i++) - { - assert(8*swap[i] + j < 27); - m_digits[8*swap[i] + j] = LD_data[i]; - } - } - } -} - -WRITE8_MEMBER(pve500_state::io_le_w) -{ -#if LOG_7SEG_DISPLAY_SIGNALS - printf("CXD1095 PORTB (io_LE=%02X)\n", data); -#endif - io_LE = data; -} - -WRITE8_MEMBER(pve500_state::io_ld_w) -{ -#if LOG_7SEG_DISPLAY_SIGNALS - printf("CXD1095 PORTD (io_LD=%02X)\n", data); -#endif - io_LD = data; -} - -WRITE8_MEMBER(pve500_state::io_sel_w) -{ -#if LOG_7SEG_DISPLAY_SIGNALS - printf("CXD1095 PORTE (io_SEL=%02X)\n", data); -#endif - io_SEL = data; - for (int i=0; i<4; i++){ - if (BIT(io_SEL, i)){ - LD_data[i] = 0x7F & bitswap<8>(io_LD ^ 0xFF, 7, 0, 1, 2, 3, 4, 5, 6); - } - } -} - -void pve500_state::pve500(machine_config &config) -{ - /* Main CPU */ - TMPZ84C015(config, m_maincpu, 12_MHz_XTAL / 2); // TMPZ84C015BF-6 - m_maincpu->set_addrmap(AS_PROGRAM, &pve500_state::maincpu_prg); - m_maincpu->set_addrmap(AS_IO, &pve500_state::maincpu_io); - m_maincpu->set_daisy_config(maincpu_daisy_chain); - m_maincpu->out_dtra_callback().set(FUNC(pve500_state::GPI_w)); - m_maincpu->out_dtrb_callback().set(m_buzzer, FUNC(beep_device::set_state)).invert(); - m_maincpu->out_txda_callback().set("recorder", FUNC(rs232_port_device::write_txd)); - m_maincpu->out_txdb_callback().set("player1", FUNC(rs232_port_device::write_txd)); - - z80ctc_device& ctc(Z80CTC(config, "external_ctc", 12_MHz_XTAL / 2)); - ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - - z80sio0_device& sio(Z80SIO0(config, "external_sio", 12_MHz_XTAL / 2)); - sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - sio.out_txda_callback().set("player2", FUNC(rs232_port_device::write_txd)); - sio.out_txdb_callback().set("edl_inout", FUNC(rs232_port_device::write_txd)); - - /* Secondary CPU */ - TMPZ84C015(config, m_subcpu, 12_MHz_XTAL / 2); /* TMPZ84C015BF-6 */ - m_subcpu->set_addrmap(AS_PROGRAM, &pve500_state::subcpu_prg); - m_subcpu->set_addrmap(AS_IO, &pve500_state::subcpu_io); - m_subcpu->out_dtra_callback().set(FUNC(pve500_state::cxdio_reset_w)); - m_subcpu->out_dtrb_callback().set(FUNC(pve500_state::external_monitor_w)); - m_subcpu->out_txda_callback().set("switcher", FUNC(rs232_port_device::write_txd)); - m_subcpu->out_txdb_callback().set("serial_mixer", FUNC(rs232_port_device::write_txd)); - - // PIO callbacks - m_subcpu->in_pa_callback().set(FUNC(pve500_state::eeprom_r)); - m_subcpu->out_pa_callback().set(FUNC(pve500_state::eeprom_w)); - - // ICG3: I/O Expander - CXD1095(config, m_cxdio); - m_cxdio->out_porta_cb().set(FUNC(pve500_state::io_sc_w)); - m_cxdio->out_portb_cb().set(FUNC(pve500_state::io_le_w)); - m_cxdio->in_portc_cb().set(FUNC(pve500_state::io_ky_r)); - m_cxdio->out_portd_cb().set(FUNC(pve500_state::io_ld_w)); - m_cxdio->out_porte_cb().set(FUNC(pve500_state::io_sel_w)); - - /* Search Dial MCUs */ - MB88201(config, "dial_mcu_left", 4_MHz_XTAL).set_disable(); /* PLAYER DIAL MCU */ - MB88201(config, "dial_mcu_right", 4_MHz_XTAL).set_disable(); /* RECORDER DIAL MCU */ - - /* Serial EEPROM (128 bytes, 8-bit data organization) */ - /* The EEPROM stores the setup data */ - EEPROM_MSM16911_8BIT(config, "eeprom"); - - /* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/ - rs232_port_device &recorder(RS232_PORT(config, "recorder", default_rs232_devices, nullptr)); - recorder.rxd_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxa_w)); - - rs232_port_device &player1(RS232_PORT(config, "player1", default_rs232_devices, nullptr)); - player1.rxd_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxb_w)); - - rs232_port_device &player2(RS232_PORT(config, "player2", default_rs232_devices, nullptr)); - player2.rxd_handler().set("external_sio", FUNC(z80dart_device::rxa_w)); - - rs232_port_device &edl_inout(RS232_PORT(config, "edl_inout", default_rs232_devices, nullptr)); - edl_inout.rxd_handler().set("external_sio", FUNC(z80dart_device::rxb_w)); - - rs232_port_device &switcher(RS232_PORT(config, "switcher", default_rs232_devices, nullptr)); - switcher.rxd_handler().set(m_subcpu, FUNC(tmpz84c015_device::rxa_w)); - - rs232_port_device &serial_mixer(RS232_PORT(config, "serial_mixer", default_rs232_devices, nullptr)); - serial_mixer.rxd_handler().set(m_subcpu, FUNC(tmpz84c015_device::rxb_w)); - - clock_device &clk1(CLOCK(config, "clk1", 12_MHz_XTAL / 20)); - clk1.signal_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxca_w)); - clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txca_w)); - clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::rxcb_w)); - clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txcb_w)); - clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxca_w)); - clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txca_w)); - clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxcb_w)); - clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txcb_w)); - - /* ICF5: 2kbytes of RAM shared between the two CPUs (dual-port RAM)*/ - mb8421_device &mb8421(MB8421(config, "mb8421")); - mb8421.intl_callback().set(FUNC(pve500_state::mb8421_intl)); - mb8421.intr_callback().set(FUNC(pve500_state::mb8421_intr)); - - /* video hardware */ - config.set_default_layout(layout_pve500); - - /* audio hardware */ - SPEAKER(config, "mono").front_center(); - BEEP(config, "buzzer", 12_MHz_XTAL / 3200).add_route(ALL_OUTPUTS, "mono", 0.05); // 3.75 kHz CLK2 coming out of IC D4 (frequency divider circuitry) -} - -ROM_START( pve500 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("pve500.icb7", 0x00000, 0x10000, CRC(1036709c) SHA1(207d6fcad5c2f081a138184060ce7bd02736965b) ) //48kbyte main-cpu program + 16kbyte of unreachable memory - - 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 -COMP( 1995, pve500, 0, 0, pve500, pve500, pve500_state, init_pve500, "SONY", "PVE-500", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS) |