diff options
Diffstat (limited to 'src/mame/drivers/mvme162.cpp')
-rw-r--r-- | src/mame/drivers/mvme162.cpp | 334 |
1 files changed, 0 insertions, 334 deletions
diff --git a/src/mame/drivers/mvme162.cpp b/src/mame/drivers/mvme162.cpp deleted file mode 100644 index 9c2f40a4efd..00000000000 --- a/src/mame/drivers/mvme162.cpp +++ /dev/null @@ -1,334 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Joakim Larsson Edstrom -/*************************************************************************** - * - * Motorola MVME series of CPU boards: MVME-162 - * - * 16/05/2016, rebased 2019 - * - * - * || - * || || MVME-162 - * ||||--||_____________________________________________________________ - * ||||--|| | - * || || _ |__ - * C| | | | - * || | | | - * C| | | | - * || | | | - * C| | | | - * || | | | - * C| | |VME| - * || | | | - * || | |P1 | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || |_| | - * || |___| - * || | - * || | - * || | - * || | - * || | - * || | - * || | - * || | - * || |___ - * || _| | - * || | | | - * || | | | - * || | | | - * || | | | - * || | |VME| - * || | | | - * || | |P2 | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || | | | - * || |_| | - * || |___| - * || || + - * ||||--|| | - * ||||--||--------------------------------------------------------------+ - * || - * - * History of Motorola VME division (https://en.wikipedia.org/wiki/VMEbus) - *--------------------------------- - * See mvme147.cpp - * - * Misc links about this board: - * ---------------------------- - * http://bitsavers.informatik.uni-stuttgart.de/pdf/motorola/VME/MVME162/ - * http://www.m88k.com/mvme162.html - * - * Description(s) - * ------------- - * MVME-162 has the following feature set - * - 25/33MHz MHzMC68040 or MC68LC040 Microprocessor - * - 1 or 4 MB of DRAM with parity protection on a mezzanine module, or 16 MB ECC DRAM on a mezzanine board - * - 128 KB of SRAM with battery backup, or 2 MB SRAM on a mezzanine board with battery backup - * - Four JEDEC standard 32-pin DIP PROM sockets - * - One Intel 28F008SA 1M x 8 Flash memory device with write protection. - * - Status LEDs for FAIL, RUN, SCON, and FUSES - * - 8K by 8 Non-Volatile RAM (NVRAM) and time of day (TOD) clock with battery backup - * - RESET and ABORT switches - * - Four 32-bit Tick Timers and Watchdog Timer (in the MCchip ASIC) for periodic interrupts - * - Two 32-bit Tick Timers and Watchdog Timer (in the VMEchip2 ASIC) for periodic interrupts - * - Eight software interrupts (for MVME162LX versions that have the VMEchip2) - * - Optional SCSI Bus interface with DMA - * - Four serial ports with EIA-232-D interface (serial port controllers are the Z85230s - * - Optional Ethernet transceiver interface with DMA Two IndustryPack interfaces - * VMEbus interface - * - VMEbus system controller functions - * - VMEbus interface to local bus (A24/A32, - * - D8/D16/D32 (D8/D16/D32/D64 BLT) (BLT = Block Transfer) - * - Local bus to VMEbus interface (A16/A24/A32, D8/D16/D32) - * - VMEbus interrupter - * - VMEbus interrupt handler - * - Global CSR for interprocessor communications - * - DMA for fast local memory - VMEbus transfers (A16/A24/A32, D16/D32 (D16/D32/D64 BLT) - * - * Address Map - * -------------------------------------------------------------------------- - * Decscription - * -------------------------------------------------------------------------- - * 00000000-001FFFFF Boot ROM until ROM0 bit is cleared - * Programmable DRAM on Parity Mezzanine D32 1-4MB - * Programmable DRAM on ECC Mezzanine D32 16MB - * Programmable On-board SRAM D32 128KB - * Programmable SRAM on Mezzanine D32 2MB - * Programmable VMEbus A32/A24 D32/D16 - * Programmable IP_a Memory D32-D8 64KB-8MB - * Programmable IP_b Memory D32-D8 64KB-8MB - * FF800000-FF9FFFFF Flash/EPROM D32 2Mb - * FFA00000-FFBFFFFF EPROM/Flash D32 2Mb - * FFC00000-FFDFFFFF Not decoded - * FFE00000-FFE1FFFF On-board SRAM D32 128Kb - * FFE80000-FFEFFFFF Not decoded - * ------------------------ Local I/O devices D8/D16/D32 - * FFF00000-FFF3FFFF Reserved 256KB - * FFF40000-FFF400FF VMEchip2 (LCSR) D32 256B - * FFF40100-FFF401FF VMEchip2 (GCSR) D32-D8 256B - * FFF40200-FFF40FFF Reserved 3.5KB - * FFF41000-FFF41FFF Reserved 4KB - * FFF42000-FFF41FFF MCchip D32-D8 4KB - * FFF43000-FFF430FF MCECC #1 D8 256B - * FFF43100-FFF431FF MCECC #2 D8 256B - * FFF43200-FFF43FFF MCECC:s mirrored - * FFF44000-FFF44FFF Reserved - * FFF45000-FFF45800 SCC #1 (Z85230) D8 2Kb - * FFF45801-FFF45FFF SCC #2 (Z85230) D8 2Kb - * FFF46000-FFF46FFF LAN (82596CA) D32 4Kb - * FFF47000-FFF47FFF SCSI (53C710) D32-D8 4Kb - * FFF48000-FFF57FFF Reserved - * FFF58000-FFF587FF IPIC IP_* D32-D16 - * FFF58800-FFF58FFF Reserved - * FFFBC000-FFFBC01F IPIC Registers D32-D8 - * FFFBC800-FFFBFFFF Reserved - * FFFC0000-FFFC7FFF MK48T08 (BBRAM, TOD Clock) D32-D8 32Kb - * FFFC8000-FFFCBFFF MK48T08 & Disable Flash writes D32-D8 16Kb - * FFFC8000-FFFCBFFF MK48T08 & Enable Flash writes D32-D8 16Kb - * FFFD0000-FFFEFFFF Reserved - * FFFF0000-FFFFFFFF VMEbux short I/O D16 - * -------------------------------------------------------------------------- - * - * TODO: (at a high level) - * - Add all SCC - * - Pass 162bug bootup tests - * - Add more divices as required by each board configuration (at least 30+ variants) - * - Write and add ASIC devices - * - Add local bus(es) - * - Add VME bus - * - Boot pSOS and VxWorks - * - Add variants of boards, preferably as runtime configurations - * - ****************************************************************************/ - -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "machine/z80scc.h" -#include "bus/rs232/rs232.h" -#include "machine/clock.h" -#include "machine/timekpr.h" - -#define LOG_SETUP (1U << 1) - -//#define VERBOSE (LOG_GENERAL | LOG_SETUP) -//#define LOG_OUTPUT_STREAM std::cout - -#include "logmacro.h" - -#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__) - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#ifdef _MSC_VER -#define FUNCNAME __func__ -#else -#define FUNCNAME __PRETTY_FUNCTION__ -#endif - -/*Serial Communications Interface -The MVME162LX uses two Zilog Z85230 serial port controllers to implement the four serial communications -interfaces. Each interface supports CTS, DCD, RTS, and DTR control signals; as well as the TXD and RXD -transmit/receive data signals. Because the serial clocks are omitted in the MVME162LX implementation, -serial communications are strictly asynchronous. The MVME162LX hardware supports serial baud rates of -110b/s to 38.4Kb/s. The Z85230 supplies an interrupt vector during interrupt acknowledge cycles. -The vector is modified based upon the interrupt source within the Z85230. Interrupt request levels are -programmed via the MCchip. The Z85230s are interfaced as DTE (data terminal equipment) with EIA-232-D -signal levels. The four serial ports are routed to four RJ45 telephone connectors on the MVME162LX front panel.*/ - -/* This gives prompt at the RS232 terminal device (9600) */ -#define BAUDGEN_CLOCK 10_MHz_XTAL // Not verified nor seen on the PCB:s -#define SCC_CLOCK (BAUDGEN_CLOCK) - -class mvme162_state : public driver_device -{ -public: -mvme162_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device (mconfig, type, tag) - , m_maincpu (*this, "maincpu") - , m_sccterm(*this, "scc") - { - } - - void mvme162(machine_config &confg); - -private: - DECLARE_READ32_MEMBER (bootvect_r); - DECLARE_WRITE32_MEMBER (bootvect_w); - virtual void machine_start () override; - virtual void machine_reset () override; - void mvme162_mem(address_map &map); - - required_device<cpu_device> m_maincpu; - required_device<scc85230_device> m_sccterm; - //required_device<scc85230_device> m_sccterm2; - - // Pointer to System ROMs needed by bootvect_r and masking RAM buffer for post reset accesses - uint32_t *m_sysrom; - uint32_t m_sysram[2]; - - // PCC registers - uint8_t m_genpurp_stat; - - // VME chip registers - uint8_t m_vc_cntl_conf; -}; - -void mvme162_state::mvme162_mem(address_map &map) -{ - map.unmap_value_high(); - - map(0x00000000, 0x00000007).ram().w(FUNC(mvme162_state::bootvect_w)); /* After first write we act as RAM */ - map(0x00000000, 0x00000007).rom().r(FUNC(mvme162_state::bootvect_r)); /* ROM mirror just during reset */ - - map(0x00000008, 0x003fffff).ram(); /* 4 Mb RAM */ - - map(0xff800000, 0xff9fffff).rom().region("roms", 0x800000); /* ROM/EEPROM bank 1 - 162bug/firmware */ - map(0xffa00000, 0xffbfffff).rom().region("roms", 0xa00000); /* ROM/EEPROM bank 2 - unpopulated/VxWorks/etc */ - - map(0xffe00000, 0xffe1ffff).ram(); /* 128KB on board SRAM */ - - /* SGS-Thompson M48T18 RAM and clock chip, only 4088 bytes used, and 8 bytes for the RTC, out of 8Kb though */ - map(0xfffc0000, 0xfffc7fff).rw("m48t18", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)); - - map(0xfff45000, 0xfff457ff).rw(m_sccterm, FUNC(scc85230_device::ab_dc_r), FUNC(scc85230_device::ab_dc_w)).umask32(0x00ff00ff); /* Port 1&2 - Dual serial port Z80-SCC */ -} - -/* Input ports */ -static INPUT_PORTS_START (mvme162) -INPUT_PORTS_END - -/* Start it up */ -void mvme162_state::machine_start () -{ - LOG("--->%s\n", FUNCNAME); - - /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ - m_sysrom = (uint32_t*)(memregion ("roms")->base () + 0x800000); - m_genpurp_stat = 0x02; /* Indicate power up reset */ - m_vc_cntl_conf = 0x01; /* We are the system controller */ -} - -void mvme162_state::machine_reset () -{ - LOG("--->%s\n", FUNCNAME); - - /* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */ - if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */ - m_sysrom = (uint32_t*)(memregion ("roms")->base () + 0x800000); - m_genpurp_stat &= 0xfe; /* Clear parity error bit - not used by MAME at this point so just for the record */ -} - -/* - Boot vector handler. Devices mapped at $FFF80000-$FFF9FFFF also appear at $00000000-$001FFFFF when the ROM0 bit - in the MCchip EPROM control register is high (ROM0=1). ROM0 is set to 1 after each reset. The ROM0 bit must be - cleared before other resources (DRAM or SRAM) can be mapped in this range ($00000000 - $001FFFFF). -*/ -READ32_MEMBER (mvme162_state::bootvect_r) -{ - return m_sysrom[offset]; -} - -WRITE32_MEMBER (mvme162_state::bootvect_w) -{ - m_sysram[offset % sizeof(m_sysram)] &= ~mem_mask; - m_sysram[offset % sizeof(m_sysram)] |= (data & mem_mask); - m_sysrom = &m_sysram[0]; // redirect all upcomming accesses to masking RAM until reset. -} - -/* - * Machine configuration - */ -void mvme162_state::mvme162(machine_config &config) -{ - M68040(config, m_maincpu, 25_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &mvme162_state::mvme162_mem); - - M48T02(config, "m48t18", 0); /* t08 differs only in accepted voltage levels compared to t18 */ - - /* Terminal Port config */ - SCC85230(config, m_sccterm, SCC_CLOCK); - m_sccterm->out_txda_callback().set("rs232trm", FUNC(rs232_port_device::write_txd)); - m_sccterm->out_dtra_callback().set("rs232trm", FUNC(rs232_port_device::write_dtr)); - m_sccterm->out_rtsa_callback().set("rs232trm", FUNC(rs232_port_device::write_rts)); - - rs232_port_device &rs232trm(RS232_PORT(config, "rs232trm", default_rs232_devices, "terminal")); - rs232trm.rxd_handler().set(m_sccterm, FUNC(scc85230_device::rxa_w)); - rs232trm.cts_handler().set(m_sccterm, FUNC(scc85230_device::ctsa_w)); -} - -/* ROM definitions */ -ROM_START (mvme162) - ROM_REGION32_BE(0xf00000, "roms", 0) - ROM_DEFAULT_BIOS("162bug-v4.0") - - ROM_SYSTEM_BIOS(0, "162bug-v2.3", "MVME162 162bug v2.3") - ROMX_LOAD("162bug_2.3.bin", 0x800000, 0x80000, CRC (301f52a8) SHA1 (ffc77561dce26a70020452baef76f4eb9dc14543), ROM_BIOS(0)) - - ROM_SYSTEM_BIOS(1, "162bug-v4.0", "MVME162 162bug v4.0") - ROMX_LOAD("162bug_4.0.bin", 0x800000, 0x80000, CRC (56728e5b) SHA1 (0b8b6725c21d8a9048d24857d6acd2b68a7f3ba0), ROM_BIOS(1)) - - ROM_SYSTEM_BIOS(2, "probe", "MVME162 pSOS pROBE+ boot loader") - ROMX_LOAD("162probe+_3.1.0.bin", 0x800000, 0x80000, CRC (1d050793) SHA1 (d060fbbf548b2559c0d251fae5a2eb87b0132f0b), ROM_BIOS(2)) - - ROM_SYSTEM_BIOS(3, "vxworks", "MVME162 WindRiver VxWorks boot loader") - ROMX_LOAD("162bug_2.3.bin", 0x800000, 0x80000, CRC (301f52a8) SHA1 (ffc77561dce26a70020452baef76f4eb9dc14543), ROM_BIOS(3)) - ROMX_LOAD("vxworks_5.1.1_162lx-223.bin", 0xa00000, 0x20000, CRC (b40b39ac) SHA1 (fbc7f7e05ff276fe4570daeadcc5c08fc11f1a2b), ROM_BIOS(3)) -ROM_END - -/* Driver */ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP (1993, mvme162, 0, 0, mvme162, mvme162, mvme162_state, empty_init, "Motorola", "MVME-162", MACHINE_NOT_WORKING) |