mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
New machines marked as NOT_WORKING
--- Data General AViiON 4600 [Plamen Mihaylov, Patrick Mackinlay]
This commit is contained in:
parent
82acede9cb
commit
35a5832063
@ -1887,6 +1887,11 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/ave_arb.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "aviion")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/aviion88k.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "bally")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/astrohome.cpp",
|
||||
|
250
src/mame/drivers/aviion88k.cpp
Normal file
250
src/mame/drivers/aviion88k.cpp
Normal file
@ -0,0 +1,250 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Patrick Mackinlay
|
||||
|
||||
/*
|
||||
* Data General AViiON M88k systems.
|
||||
*
|
||||
* Sources:
|
||||
* - https://archive.org/details/Aviion530Docs/40020761
|
||||
*
|
||||
* TODO:
|
||||
* - everything
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
// processors and memory
|
||||
#include "cpu/m88000/m88000.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/28fxxx.h"
|
||||
|
||||
// i/o devices
|
||||
#include "machine/timekpr.h"
|
||||
#include "machine/mc68681.h"
|
||||
#include "machine/53c7xx.h"
|
||||
#include "machine/scn_pci.h"
|
||||
#include "machine/scnxx562.h"
|
||||
|
||||
// busses and connectors
|
||||
#include "machine/nscsi_bus.h"
|
||||
#include "bus/nscsi/cd.h"
|
||||
#include "bus/nscsi/hd.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "bus/pc_kbd/pc_kbdc.h"
|
||||
#include "bus/pc_kbd/keyboards.h"
|
||||
|
||||
#include "sound/spkrdev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "debugger.h"
|
||||
|
||||
#define LOG_GENERAL (1U << 0)
|
||||
|
||||
#define VERBOSE 0
|
||||
#include "logmacro.h"
|
||||
|
||||
namespace {
|
||||
|
||||
class aviion88k_state : public driver_device
|
||||
{
|
||||
public:
|
||||
aviion88k_state(machine_config const &mconfig, device_type type, char const *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_cpu(*this, "cpu")
|
||||
, m_prom(*this, "prom%u", 0U)
|
||||
, m_ram(*this, "ram")
|
||||
, m_novram(*this, "novram")
|
||||
, m_uart(*this, "uart")
|
||||
, m_kbd(*this, "kbd")
|
||||
, m_duart(*this, "duart%u", 0U)
|
||||
, m_async(*this, { "console", "seriala", "mouse", "serialb" })
|
||||
, m_duscc(*this, "duscc")
|
||||
, m_scsibus(*this, "scsi")
|
||||
, m_scsi(*this, "scsi:7:ncr53c700")
|
||||
, m_speaker(*this, "speaker")
|
||||
, m_leds(*this, "CR%u", 1U)
|
||||
, m_mbus(*this, "mbus")
|
||||
{
|
||||
}
|
||||
|
||||
// machine config
|
||||
void aviion_4600(machine_config &config);
|
||||
|
||||
void init();
|
||||
|
||||
protected:
|
||||
// driver_device overrides
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
// address maps
|
||||
void cpu_map(address_map &map);
|
||||
|
||||
private:
|
||||
// processors and memory
|
||||
required_device<mc88100_device> m_cpu;
|
||||
required_device_array<intel_28f010_device, 4> m_prom;
|
||||
required_device<ram_device> m_ram;
|
||||
|
||||
// i/o devices
|
||||
required_device<timekeeper_device> m_novram;
|
||||
required_device<scn_pci_device> m_uart;
|
||||
required_device<pc_kbdc_device> m_kbd;
|
||||
required_device_array<scn2681_device, 2> m_duart;
|
||||
required_device_array<rs232_port_device, 4> m_async;
|
||||
required_device<duscc68562_device> m_duscc;
|
||||
required_device<nscsi_bus_device> m_scsibus;
|
||||
required_device<ncr53c7xx_device> m_scsi;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
|
||||
output_finder<3> m_leds;
|
||||
|
||||
memory_view m_mbus;
|
||||
};
|
||||
|
||||
void aviion88k_state::machine_start()
|
||||
{
|
||||
m_leds.resolve();
|
||||
}
|
||||
|
||||
void aviion88k_state::machine_reset()
|
||||
{
|
||||
// disable mbus address decode
|
||||
m_mbus.select(0);
|
||||
}
|
||||
|
||||
void aviion88k_state::init()
|
||||
{
|
||||
// map the configured ram
|
||||
m_mbus[1].install_ram(0x00000000, m_ram->mask(), m_ram->pointer());
|
||||
}
|
||||
|
||||
void aviion88k_state::cpu_map(address_map &map)
|
||||
{
|
||||
map(0x00000000, 0xffc7ffff).view(m_mbus);
|
||||
|
||||
// mbus address decode disabled
|
||||
m_mbus[0](0x00000000, 0x0007ffff).rw(m_prom[0], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).mirror(0xffc00000).umask32(0xff000000);
|
||||
m_mbus[0](0x00000000, 0x0007ffff).rw(m_prom[1], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).mirror(0xffc00000).umask32(0x00ff0000);
|
||||
m_mbus[0](0x00000000, 0x0007ffff).rw(m_prom[2], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).mirror(0xffc00000).umask32(0x0000ff00);
|
||||
m_mbus[0](0x00000000, 0x0007ffff).rw(m_prom[3], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).mirror(0xffc00000).umask32(0x000000ff);
|
||||
|
||||
// mbus address decode enabled
|
||||
m_mbus[1](0xffc00000, 0xffc7ffff).rw(m_prom[0], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0xff000000);
|
||||
m_mbus[1](0xffc00000, 0xffc7ffff).rw(m_prom[1], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0x00ff0000);
|
||||
m_mbus[1](0xffc00000, 0xffc7ffff).rw(m_prom[2], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0x0000ff00);
|
||||
m_mbus[1](0xffc00000, 0xffc7ffff).rw(m_prom[3], FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0x000000ff);
|
||||
|
||||
map(0xfff8'0000, 0xfff8'1fff).rw(m_novram, FUNC(mk48t12_device::read), FUNC(mk48t12_device::write)).umask32(0x000000ff);
|
||||
map(0xfff8'2000, 0xfff8'203f).rw(m_duart[0], FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask32(0x000000ff);
|
||||
map(0xfff8'2040, 0xfff8'207f).rw(m_duart[1], FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask32(0x000000ff);
|
||||
map(0xfff8'2800, 0xfff8'280f).rw(m_uart, FUNC(scn2661a_device::read), FUNC(scn2661a_device::write)).umask32(0x000000ff);
|
||||
|
||||
map(0xfff8'3100, 0xfff8'3103).lw32(
|
||||
[this](u32 data)
|
||||
{
|
||||
if (!BIT(data, 0))
|
||||
m_duart[0]->reset();
|
||||
if (!BIT(data, 1))
|
||||
m_duart[1]->reset();
|
||||
|
||||
// reset the keyboard or the uart?
|
||||
if (!BIT(data, 3))
|
||||
m_uart->reset();
|
||||
}, "srst_w");
|
||||
|
||||
map(0xfff8'8018, 0xfff8'801b).lr32([]() { return 0xa1; }, "whoami_r");
|
||||
}
|
||||
|
||||
static void aviion88k_scsi_devices(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("harddisk", NSCSI_HARDDISK);
|
||||
device.option_add("cdrom", NSCSI_CDROM);
|
||||
}
|
||||
|
||||
void aviion88k_state::aviion_4600(machine_config &config)
|
||||
{
|
||||
MC88100(config, m_cpu, 33'333'333);
|
||||
m_cpu->set_addrmap(AS_PROGRAM, &aviion88k_state::cpu_map);
|
||||
|
||||
INTEL_28F010(config, m_prom[0]);
|
||||
INTEL_28F010(config, m_prom[1]);
|
||||
INTEL_28F010(config, m_prom[2]);
|
||||
INTEL_28F010(config, m_prom[3]);
|
||||
|
||||
// 8 SIMM slots (populated with pairs of 4M or 16M modules)
|
||||
RAM(config, m_ram);
|
||||
m_ram->set_default_size("8M");
|
||||
m_ram->set_extra_options("16M,24M,32M,40M,48M,56M,64M,72M,80M,96M,104M,128M");
|
||||
m_ram->set_default_value(0);
|
||||
|
||||
MK48T12(config, m_novram);
|
||||
|
||||
// uart - keyboard interface
|
||||
SCN2661A(config, m_uart, 0);
|
||||
|
||||
// keyboard connector
|
||||
PC_KBDC(config, m_kbd, pc_at_keyboards, nullptr);
|
||||
m_kbd->out_clock_cb().set(m_uart, FUNC(scn2661a_device::rxc_w)).invert();
|
||||
m_kbd->out_clock_cb().append(m_uart, FUNC(scn2661a_device::txc_w)).invert();
|
||||
m_kbd->out_data_cb().set(m_uart, FUNC(scn2661a_device::rxd_w));
|
||||
|
||||
// duart 1
|
||||
SCN2681(config, m_duart[0], 14.7456_MHz_XTAL / 4); // SCC2692
|
||||
RS232_PORT(config, m_async[0], default_rs232_devices, "terminal"); // console: DCD,RXD,TXD,DTR,RTS,CTS
|
||||
RS232_PORT(config, m_async[1], default_rs232_devices, nullptr); // async A: DCD,RXD,TXD,DTR,DSR,RTS,CTS,RI
|
||||
|
||||
m_duart[0]->a_tx_cb().set(m_async[0], FUNC(rs232_port_device::write_txd));
|
||||
m_duart[0]->b_tx_cb().set(m_async[1], FUNC(rs232_port_device::write_txd));
|
||||
m_async[0]->rxd_handler().set(m_duart[0], FUNC(scn2681_device::rx_a_w));
|
||||
m_async[1]->rxd_handler().set(m_duart[0], FUNC(scn2681_device::rx_b_w));
|
||||
|
||||
// duart 2
|
||||
SCN2681(config, m_duart[1], 14.7456_MHz_XTAL / 4); // SCC2692
|
||||
RS232_PORT(config, m_async[2], default_rs232_devices, nullptr); // mouse: RTS,DTR,TXD,RXD
|
||||
RS232_PORT(config, m_async[3], default_rs232_devices, nullptr); // async B: DCD,RXD,TXD,DTR,DSR,RTS,CTS,RI
|
||||
|
||||
m_duart[1]->a_tx_cb().set(m_async[2], FUNC(rs232_port_device::write_txd));
|
||||
m_duart[1]->b_tx_cb().set(m_async[3], FUNC(rs232_port_device::write_txd));
|
||||
m_async[2]->rxd_handler().set(m_duart[1], FUNC(scn2681_device::rx_a_w));
|
||||
m_async[3]->rxd_handler().set(m_duart[1], FUNC(scn2681_device::rx_b_w));
|
||||
|
||||
// duscc
|
||||
DUSCC68562(config, m_duscc, 14.7456_MHz_XTAL);
|
||||
|
||||
// scsi bus and devices
|
||||
NSCSI_BUS(config, m_scsibus);
|
||||
NSCSI_CONNECTOR(config, "scsi:0", aviion88k_scsi_devices, "harddisk");
|
||||
NSCSI_CONNECTOR(config, "scsi:1", aviion88k_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsi:2", aviion88k_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsi:3", aviion88k_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsi:4", aviion88k_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsi:5", aviion88k_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsi:6", aviion88k_scsi_devices, nullptr);
|
||||
|
||||
// scsi host adapter (NCR53C700)
|
||||
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr53c700", NCR53C7XX).clock(66'000'000);
|
||||
|
||||
// TODO: ethernet (AM79C900)
|
||||
|
||||
// speaker
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker);
|
||||
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
ROM_START(aviion_4600)
|
||||
ROM_REGION(0x20000, "prom0", 0)
|
||||
ROM_LOAD("11513__x02__92-05.bin", 0, 0x20000, CRC(7031d7d4) SHA1(c1ca7567b764b7f48e53b9bc8df40407464f9f67))
|
||||
ROM_REGION(0x20000, "prom1", 0)
|
||||
ROM_LOAD("11514__x02__92-06.bin", 0, 0x20000, CRC(4fcf85e6) SHA1(9afeec63cf8098d4518dc0712ba92614d44cd859))
|
||||
ROM_REGION(0x20000, "prom2", 0)
|
||||
ROM_LOAD("11515__x02__92-05.bin", 0, 0x20000, CRC(c9ce39d7) SHA1(fbdd3287b9f9eb6a621d7c10d900ccaff02660c5))
|
||||
ROM_REGION(0x20000, "prom3", 0)
|
||||
ROM_LOAD("11516__x02__92-05.bin", 0, 0x20000, CRC(71b6d338) SHA1(eb85bd16a25b6cd790272f007b8117fcf13b6b40))
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP(1991, aviion_4600, 0, 0, aviion_4600, 0, aviion88k_state, init, "Data General", "AViiON 4600", MACHINE_IS_SKELETON)
|
@ -3117,6 +3117,9 @@ avigo_es // 1997 Avigo (Spanish)
|
||||
avigo_fr // 1997 Avigo (French)
|
||||
avigo_it // 1997 Avigo (Italian)
|
||||
|
||||
@source:aviion88k.cpp
|
||||
aviion_4600 // Data General AViiON 4600
|
||||
|
||||
@source:avrmax.cpp
|
||||
avrmax
|
||||
avrmaxg
|
||||
|
@ -100,6 +100,7 @@ attache.cpp
|
||||
aussiebyte.cpp
|
||||
ave_arb.cpp
|
||||
avigo.cpp
|
||||
aviion88k.cpp
|
||||
avrmax.cpp
|
||||
ax20.cpp
|
||||
b16.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user