bus/archimedes/podule: Podules for Acorn Archimedes:

- Baildon Electronics IDE HD Interface
- SJ Research Nexus Interface (A500) (not working)
- Wild Vision/Computer Concepts Eagle M2 (not working)
This commit is contained in:
Nigel Barnes 2021-11-15 21:01:27 +00:00
parent 47c023bceb
commit 76bff24a89
8 changed files with 482 additions and 6 deletions

View File

@ -344,6 +344,8 @@ if (BUSES["ARCHIMEDES_PODULE"]~=null) then
MAME_DIR .. "src/devices/bus/archimedes/podule/a448.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/armadeus.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/armadeus.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/eaglem2.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/eaglem2.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/ether1.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/ether1.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/etherd.cpp",
@ -352,6 +354,8 @@ if (BUSES["ARCHIMEDES_PODULE"]~=null) then
MAME_DIR .. "src/devices/bus/archimedes/podule/etherr.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/faxpack.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/faxpack.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/ide_be.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/ide_be.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/ide_rdev.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/ide_rdev.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/io.cpp",
@ -368,6 +372,8 @@ if (BUSES["ARCHIMEDES_PODULE"]~=null) then
MAME_DIR .. "src/devices/bus/archimedes/podule/laserd.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/midimax.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/midimax.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/nexus.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/nexus.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/rom.cpp",
MAME_DIR .. "src/devices/bus/archimedes/podule/rom.h",
MAME_DIR .. "src/devices/bus/archimedes/podule/rs423.cpp",

View File

@ -0,0 +1,156 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Wild Vision/Computer Concepts Eagle M2
http://chrisacorns.computinghistory.org.uk/32bit_UpgradesA2G/CC_Eagle.html
Main components:
- Am7202A x 2 High Density First-In First-Out
- M514221B x 4
- SAA7191B Digital Multistandard ColourDecoder
- SAA7186 Digital video scaler
- SAA7197 Clock Generator Circuit
- TDA8708B Video analog input interface
- TDA8709A Video analog input interface
- YMZ263B Multimedia Audio & Game Interface Controller
TODO:
- everything, it's complex and not documented.
**********************************************************************/
#include "emu.h"
#include "eaglem2.h"
#include "machine/7200fifo.h"
#include "machine/saa7191.h"
#include "bus/midi/midi.h"
#include "imagedev/avivideo.h"
#include "speaker.h"
namespace {
class arc_eaglem2_device :
public device_t,
public device_archimedes_podule_interface
{
public:
// construction/destruction
arc_eaglem2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr feature_type unemulated_features() { return feature::CAPTURE | feature::SOUND; }
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
// device_archimedes_podule_interface overrides
virtual void ioc_map(address_map &map) override;
private:
required_memory_region m_podule_rom;
required_device<saa7191_device> m_dmsd;
required_device<idt7202_device> m_fifo_in;
required_device<idt7202_device> m_fifo_out;
required_device<avivideo_image_device> m_avivideo;
u8 m_rom_page;
};
void arc_eaglem2_device::ioc_map(address_map &map)
{
map(0x0000, 0x1fff).lr8(NAME([this](offs_t offset) { return m_podule_rom->base()[offset | ((m_rom_page << 11) & 0x1f800)]; })).umask32(0x000000ff);
map(0x2000, 0x2000).lw8(NAME([this](u8 data) { m_rom_page = data; }));
}
//-------------------------------------------------
// ROM( eagle )
//-------------------------------------------------
ROM_START( eagle )
ROM_REGION(0x20000, "podule_rom", 0)
ROM_LOAD("eagle.rom", 0x0000, 0x20000, CRC(9d9fa2e9) SHA1(b3633b8e1d58f59f5894d14a737c69b6d9d5d46d))
ROM_END
const tiny_rom_entry *arc_eaglem2_device::device_rom_region() const
{
return ROM_NAME( eagle );
}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
void arc_eaglem2_device::device_add_mconfig(machine_config &config)
{
SAA7191(config, m_dmsd);
IDT7202(config, m_fifo_in); // AM7202A
IDT7202(config, m_fifo_out); // AM7202A
IMAGE_AVIVIDEO(config, m_avivideo);
midi_port_device &mdin(MIDI_PORT(config, "mdin", midiin_slot, "midiin"));
mdin.rxd_handler().set("mdthru", FUNC(midi_port_device::write_txd));
midiout_slot(MIDI_PORT(config, "mdout"));
midiout_slot(MIDI_PORT(config, "mdthru"));
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// arc_eaglem2_device - constructor
//-------------------------------------------------
arc_eaglem2_device::arc_eaglem2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, ARC_EAGLEM2, tag, owner, clock)
, device_archimedes_podule_interface(mconfig, *this)
, m_podule_rom(*this, "podule_rom")
, m_dmsd(*this, "dmsd")
, m_fifo_in(*this, "fifo_in")
, m_fifo_out(*this, "fifo_out")
, m_avivideo(*this, "srcavi")
, m_rom_page(0)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void arc_eaglem2_device::device_start()
{
save_item(NAME(m_rom_page));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void arc_eaglem2_device::device_reset()
{
m_rom_page = 0x00;
}
} // anonymous namespace
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(ARC_EAGLEM2, device_archimedes_podule_interface, arc_eaglem2_device, "arc_eaglem2", "Wild Vision/Computer Concepts Eagle M2")

View File

@ -0,0 +1,19 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Wild Vision/Computer Concepts Eagle M2
**********************************************************************/
#ifndef MAME_BUS_ARCHIMEDES_PODULE_EAGLEM2_H
#define MAME_BUS_ARCHIMEDES_PODULE_EAGLEM2_H
#pragma once
#include "slot.h"
// device type definition
DECLARE_DEVICE_TYPE(ARC_EAGLEM2, device_archimedes_podule_interface)
#endif // MAME_BUS_ARCHIMEDES_PODULE_EAGLEM2_H

View File

@ -0,0 +1,130 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Baildon Electronics IDE HD Interface
http://chrisacorns.computinghistory.org.uk/32bit_UpgradesA2G/BE_IDEHD.html
**********************************************************************/
#include "emu.h"
#include "ide_be.h"
#include "bus/ata/ataintf.h"
namespace {
// ======================> arc_ide_be_device
class arc_ide_be_device :
public device_t,
public device_archimedes_podule_interface
{
public:
// construction/destruction
arc_ide_be_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
// device_archimedes_podule_interface overrides
virtual void ioc_map(address_map &map) override;
private:
required_memory_region m_podule_rom;
u8 m_rom_page;
};
void arc_ide_be_device::ioc_map(address_map &map)
{
map(0x0000, 0x1fff).lr8(NAME([this](offs_t offset) { return m_podule_rom->base()[offset | ((m_rom_page << 11) & 0x1800)]; })).umask32(0x000000ff);
map(0x2000, 0x2000).lw8(NAME([this](u8 data) { m_rom_page = data; }));
map(0x3000, 0x301f).rw("ata", FUNC(ata_interface_device::cs0_r), FUNC(ata_interface_device::cs0_w)).umask32(0x0000ffff);
}
//-------------------------------------------------
// ROM( ide_be )
//-------------------------------------------------
ROM_START( ide_be ) // if0
ROM_REGION(0x2000, "podule_rom", 0)
ROM_SYSTEM_BIOS(0, "be202", "BE IDEFS 2.02 (14 Jan 1991)")
ROMX_LOAD("ide1_be_2.02.rom", 0x0000, 0x2000, CRC(36d76e00) SHA1(25547b793d935ee44109ff9ac6ff4be010cdc33d), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "sfps114", "SF & PS IDEFS 1.14 (23 Apr 1991)")
ROMX_LOAD("ide1_sfps_1.14.rom", 0x0000, 0x2000, CRC(26761c5d) SHA1(eb42f98ac7708b08faf1bba2840bef0ccdffbc20), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "sfps113", "SF & PS IDEFS 1.13 (22 Oct 1990)")
ROMX_LOAD("ide1_sfps_1.13.rom", 0x0000, 0x2000, CRC(ef1dddff) SHA1(430432e6611b22da9c4fc1b03a986b08a120808b), ROM_BIOS(2))
ROM_SYSTEM_BIOS(3, "zidefs", "ZIDEFS 1.10 (13 May 2018)") // FIXME: not working ??
ROMX_LOAD("ide1_zidefs_1.10.rom", 0x0000, 0x2000, CRC(581fa41c) SHA1(f7d13fce76dbe7ac9a27fc7e4a859161bb98a9b5), ROM_BIOS(3))
ROM_END
const tiny_rom_entry *arc_ide_be_device::device_rom_region() const
{
return ROM_NAME( ide_be );
}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
void arc_ide_be_device::device_add_mconfig(machine_config &config)
{
ata_interface_device &ata(ATA_INTERFACE(config, "ata").options(ata_devices, "hdd", nullptr, false));
ata.irq_handler().set([this](int state) { set_pirq(state); });
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// arc_ide_be_device - constructor
//-------------------------------------------------
arc_ide_be_device::arc_ide_be_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, ARC_IDE_BE, tag, owner, clock)
, device_archimedes_podule_interface(mconfig, *this)
, m_podule_rom(*this, "podule_rom")
, m_rom_page(0)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void arc_ide_be_device::device_start()
{
save_item(NAME(m_rom_page));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void arc_ide_be_device::device_reset()
{
m_rom_page = 0x00;
}
} // anonymous namespace
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(ARC_IDE_BE, device_archimedes_podule_interface, arc_ide_be_device, "arc_ide_be", "Baildon Electronics IDE HD Interface")

View File

@ -0,0 +1,19 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Baildon Electronics IDE HD Interface
**********************************************************************/
#ifndef MAME_BUS_ARCHIMEDES_PODULE_IDE_BE_H
#define MAME_BUS_ARCHIMEDES_PODULE_IDE_BE_H
#pragma once
#include "slot.h"
// device type definition
DECLARE_DEVICE_TYPE(ARC_IDE_BE, device_archimedes_podule_interface)
#endif // MAME_BUS_ARCHIMEDES_PODULE_IDE_BE_H

View File

@ -0,0 +1,127 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
SJ Research Nexus Interface
http://chrisacorns.computinghistory.org.uk/32bit_UpgradesH2Z/SJR_A300NexusI4.html
**********************************************************************/
#include "emu.h"
#include "nexus.h"
//#include "machine/imsc012.h"
namespace {
class arc_nexus_device :
public device_t,
public device_archimedes_podule_interface
{
public:
// construction/destruction
arc_nexus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr feature_type unemulated_features() { return feature::COMMS; }
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
// device_archimedes_podule_interface overrides
virtual void ioc_map(address_map &map) override;
virtual void memc_map(address_map &map) override;
private:
required_memory_region m_podule_rom;
u8 m_rom_page;
};
void arc_nexus_device::ioc_map(address_map &map)
{
map(0x0000, 0x03fff).lr8(NAME([this](offs_t offset) { return m_podule_rom->base()[offset | ((m_rom_page << 12) & 0x7000)]; })).umask32(0x000000ff);
}
void arc_nexus_device::memc_map(address_map &map)
{
map(0x0040, 0x0040).lrw8(NAME([this]() { return m_rom_page; }), NAME([this](u8 data) { m_rom_page = data; }));
//map(0x0060, 0x006f).rw("c012", FUNC(imsc012_device::read), FUNC(imsc012_device::write)).umask32(0x000000ff);
}
//-------------------------------------------------
// ROM( nexus )
//-------------------------------------------------
ROM_START( nexus )
ROM_REGION(0x8000, "podule_rom", 0)
ROM_LOAD("a500_2.24.bin", 0x0000, 0x8000, CRC(5d857330) SHA1(4d1c8cf82fddde1e0772c475da1b3283986aa7d3))
ROM_END
const tiny_rom_entry *arc_nexus_device::device_rom_region() const
{
return ROM_NAME( nexus );
}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
void arc_nexus_device::device_add_mconfig(machine_config &config)
{
//IMSC012(config, "c012", 5_MHz_XTAL); // INMOS IMSC012-P20S link adaptor
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// arc_nexus_device - constructor
//-------------------------------------------------
arc_nexus_device::arc_nexus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, ARC_NEXUS_A500, tag, owner, clock)
, device_archimedes_podule_interface(mconfig, *this)
, m_podule_rom(*this, "podule_rom")
, m_rom_page(0)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void arc_nexus_device::device_start()
{
save_item(NAME(m_rom_page));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void arc_nexus_device::device_reset()
{
m_rom_page = 0xff;
}
} // anonymous namespace
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(ARC_NEXUS_A500, device_archimedes_podule_interface, arc_nexus_device, "arc_nexus_a500", "SJ Research Nexus Interface (A500)")

View File

@ -0,0 +1,19 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
SJ Research Nexus Interface
**********************************************************************/
#ifndef MAME_BUS_ARCHIMEDES_PODULE_NEXUS_H
#define MAME_BUS_ARCHIMEDES_PODULE_NEXUS_H
#pragma once
#include "slot.h"
// device type definition
DECLARE_DEVICE_TYPE(ARC_NEXUS_A500, device_archimedes_podule_interface)
#endif // MAME_BUS_ARCHIMEDES_PODULE_NEXUS_H

View File

@ -244,7 +244,7 @@ void device_archimedes_podule_interface::interface_post_start()
//#include "discbuffer.h"
//#include "colourcard.h"
//#include "digitiser_we.h"
//#include "eaglem2.h"
#include "eaglem2.h"
#include "ether1.h"
//#include "ether2.h"
//#include "ether3.h"
@ -258,7 +258,7 @@ void device_archimedes_podule_interface::interface_post_start()
//#include "hdisc.h"
//#include "hdisc_cw.h"
//#include "hdisc_we.h"
//#include "ide_be.h"
#include "ide_be.h"
//#include "ide_castle.h"
//#include "ide_hccs.h"
//#include "ide_ics.h"
@ -271,7 +271,7 @@ void device_archimedes_podule_interface::interface_post_start()
#include "lark.h"
#include "laserd.h"
#include "midimax.h"
//#include "nexus.h"
#include "nexus.h"
//#include "prisma3.h"
#include "rom.h"
//#include "rom_cc.h"
@ -302,7 +302,7 @@ void archimedes_exp_devices(device_slot_interface &device)
//device.option_add("cc", ARC_CC); // Wild Vision/Computer Concepts Colour Card
//device.option_add("ccgold", ARC_CCGOLD); // Wild Vision/Computer Concepts Colour Card Gold
//device.option_add("digitiser_we", ARC_DIGITISER_WE); // Watford Electronics Archimedes Video Digitiser
//device.option_add("eaglem2", ARC_EAGLEM2); // Wild Vision/Computer Concepts Eagle M2
device.option_add("eaglem2", ARC_EAGLEM2); // Wild Vision/Computer Concepts Eagle M2
device.option_add("ether1", ARC_ETHER1_AKA25); // Acorn AKA25 Ethernet
//device.option_add("ether2", ARC_ETHER2_AEH50); // Acorn AEH50 Ethernet II
//device.option_add("ether3_aeh54", ARC_ETHER3_AEH54); // Acorn AEH54 10Base2 Ethernet Podule
@ -314,7 +314,7 @@ void archimedes_exp_devices(device_slot_interface &device)
//device.option_add("hdisc_akd52", ARC_HDISC_AKD52); // Acorn AKD52 Hard Disc Podule
//device.option_add("hdisc_cw", ARC_HDISC_CW); // Computerware Hard Disk Podule
//device.option_add("hdisc_we", ARC_HDISC_WE); // Watford Electronics Archimedes Hard Disk Podule
//device.option_add("ide_be", ARC_IDE_BE); // Baildon Electronics IDE HD Interface
device.option_add("ide_be", ARC_IDE_BE); // Baildon Electronics IDE HD Interface
//device.option_add("ide_hccs", ARC_IDE_HCCS); // HCCS IDE Interface
device.option_add("ide_rdev", ARC_IDE_RDEV); // RISC Developments IDE Hard Disc System
//device.option_add("ide1v4_ics", ARC_IDE1V4_ICS); // ICS ideA Hard Disc System
@ -323,7 +323,7 @@ void archimedes_exp_devices(device_slot_interface &device)
device.option_add("lbp4", ARC_LBP4); // Computer Concepts LaserDirect LBP-4
device.option_add("midi_aka16", ARC_MIDI_AKA16); // Acorn AKA16 MIDI Podule
device.option_add("midimax", ARC_MIDIMAX); // Wild Vision MidiMax
//device.option_add("nexus_a500", ARC_NEXUS_A500); // SJ Research Nexus Interface (A500)
device.option_add("nexus_a500", ARC_NEXUS_A500); // SJ Research Nexus Interface (A500)
//device.option_add("prisma3", ARC_PRISMA3); // Millipede PRISMA-3 Podule
//device.option_add("prisma3p", ARC_PRISMA3P); // Millipede PRISMA-3 Plus Podule
device.option_add("rom_aka05", ARC_ROM_AKA05); // Acorn AKA05 ROM Podule