|
| 1 | +// license:BSD-3-Clause |
| 2 | +// copyright-holders:Patrick Mackinlay |
| 3 | + |
| 4 | +/* |
| 5 | + * Tektronix XD88 systems. |
| 6 | + * |
| 7 | + * Sources: |
| 8 | + * - https://wiki.unix-haters.org/doku.php?id=tektronix:xd88:resources |
| 9 | + * |
| 10 | + * TODO: |
| 11 | + * - everything |
| 12 | + */ |
| 13 | + |
| 14 | +#include "emu.h" |
| 15 | + |
| 16 | +#include "cpu/m88000/m88000.h" |
| 17 | + |
| 18 | +#include "machine/mc88200.h" |
| 19 | + |
| 20 | +//#define VERBOSE (LOG_GENERAL) |
| 21 | +#include "logmacro.h" |
| 22 | + |
| 23 | +namespace { |
| 24 | + |
| 25 | +class xd88_state : public driver_device |
| 26 | +{ |
| 27 | +public: |
| 28 | + xd88_state(machine_config const &mconfig, device_type type, char const *tag) |
| 29 | + : driver_device(mconfig, type, tag) |
| 30 | + , m_cpu(*this, "cpu") |
| 31 | + , m_cmmu(*this, "cmmu%u", 0U) |
| 32 | + , m_boot(*this, "boot") |
| 33 | + { |
| 34 | + } |
| 35 | + |
| 36 | + void xd88_01(machine_config &config); |
| 37 | + |
| 38 | +protected: |
| 39 | + virtual void machine_start() override; |
| 40 | + virtual void machine_reset() override; |
| 41 | + |
| 42 | + void cpu_map(address_map &map); |
| 43 | + |
| 44 | +private: |
| 45 | + required_device<mc88100_device> m_cpu; |
| 46 | + required_device_array<mc88200_device, 8> m_cmmu; |
| 47 | + |
| 48 | + memory_view m_boot; |
| 49 | +}; |
| 50 | + |
| 51 | +void xd88_state::machine_start() |
| 52 | +{ |
| 53 | +} |
| 54 | + |
| 55 | +void xd88_state::machine_reset() |
| 56 | +{ |
| 57 | + m_boot.select(0); |
| 58 | +} |
| 59 | + |
| 60 | +void xd88_state::cpu_map(address_map &map) |
| 61 | +{ |
| 62 | + // TODO: RAM options (8M is standard) |
| 63 | + map(0x0000'0000, 0x007f'ffff).ram(); |
| 64 | + |
| 65 | + map(0x0000'0000, 0x0003'ffff).view(m_boot); |
| 66 | + m_boot[0](0x0000'0000, 0x0003'ffff).rom().region("eprom", 0); |
| 67 | + |
| 68 | + map(0xfe00'0000, 0xfe03'ffff).rom().region("eprom", 0); |
| 69 | +} |
| 70 | + |
| 71 | +void xd88_state::xd88_01(machine_config &config) |
| 72 | +{ |
| 73 | + MC88100(config, m_cpu, 20'000'000); |
| 74 | + m_cpu->set_addrmap(AS_PROGRAM, &xd88_state::cpu_map); |
| 75 | + |
| 76 | + for (unsigned i = 0; i < std::size(m_cmmu); i++) |
| 77 | + MC88200(config, m_cmmu[i], 20'000'000, i).set_mbus(m_cpu, AS_PROGRAM); |
| 78 | + |
| 79 | + // TODO: multiple i&d cmmu's |
| 80 | + m_cpu->set_cmmu_d(m_cmmu[0]); |
| 81 | + m_cpu->set_cmmu_i(m_cmmu[4]); |
| 82 | +} |
| 83 | + |
| 84 | +ROM_START(xd88_01) |
| 85 | + ROM_REGION32_BE(0x40000, "eprom", 0) |
| 86 | + ROMX_LOAD("160-5796-04__u3930_v1.4.u3930", 0, 0x10000, CRC(db2ef744) SHA1(82ddb494fc1e2693da3d021c1cfeea49ef06ed3e), ROM_SKIP(3)) |
| 87 | + ROMX_LOAD("160-5797-04__u4230_v1.4.u4230", 1, 0x10000, CRC(8fe40d66) SHA1(30cacd590c2598cb6db1933309d2d60e57f375eb), ROM_SKIP(3)) |
| 88 | + ROMX_LOAD("160-5798-04__u4530_v1.4.u4530", 2, 0x10000, CRC(2aa2503c) SHA1(edc869a7ac9b6ce68603146884cf9a95ee22d39e), ROM_SKIP(3)) |
| 89 | + ROMX_LOAD("160-5799-04__u4830_v1.4.u4830", 3, 0x10000, CRC(f7ecedae) SHA1(6063e616e4c1de5af048bd2cb61ad64a57c7f5a4), ROM_SKIP(3)) |
| 90 | +ROM_END |
| 91 | + |
| 92 | +} // anonymous namespace |
| 93 | + |
| 94 | +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 95 | +COMP(1990, xd88_01, 0, 0, xd88_01, 0, xd88_state, empty_init, "Tektronix", "XD88/01", MACHINE_IS_SKELETON) |
0 commit comments