diff options
-rw-r--r-- | scripts/src/bus.lua | 2 | ||||
-rw-r--r-- | src/devices/bus/bbc/tube/tube.cpp | 4 | ||||
-rw-r--r-- | src/devices/bus/bbc/tube/tube_80286.cpp | 155 | ||||
-rw-r--r-- | src/devices/bus/bbc/tube/tube_80286.h | 63 | ||||
-rw-r--r-- | src/mame/drivers/bbc.cpp | 9 |
5 files changed, 227 insertions, 6 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index bc95ad1eca0..ffe4bfa3ad4 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -300,6 +300,8 @@ if (BUSES["BBC_TUBE"]~=null) then MAME_DIR .. "src/devices/bus/bbc/tube/tube_65c102.h", MAME_DIR .. "src/devices/bus/bbc/tube/tube_80186.cpp", MAME_DIR .. "src/devices/bus/bbc/tube/tube_80186.h", + MAME_DIR .. "src/devices/bus/bbc/tube/tube_80286.cpp", + MAME_DIR .. "src/devices/bus/bbc/tube/tube_80286.h", MAME_DIR .. "src/devices/bus/bbc/tube/tube_casper.cpp", MAME_DIR .. "src/devices/bus/bbc/tube/tube_casper.h", MAME_DIR .. "src/devices/bus/bbc/tube/tube_z80.cpp", diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp index bff15cd5008..ea21071b7c0 100644 --- a/src/devices/bus/bbc/tube/tube.cpp +++ b/src/devices/bus/bbc/tube/tube.cpp @@ -123,7 +123,7 @@ WRITE8_MEMBER(bbc_tube_slot_device::host_w) #include "tube_6502.h" #include "tube_65c102.h" #include "tube_80186.h" -//#include "tube_80286.h" +#include "tube_80286.h" //#include "tube_arm.h" #include "tube_casper.h" //#include "tube_x25.h" @@ -141,7 +141,7 @@ SLOT_INTERFACE_START( bbc_extube_devices ) // SLOT_INTERFACE("32016", BBC_TUBE_32016) /* Acorn ANC05 32016 2nd processor */ // SLOT_INTERFACE("camb", BBC_TUBE_CAMB) /* Acorn ANC06 Cambridge Co-Processor */ // SLOT_INTERFACE("arm", BBC_TUBE_ARM) /* Acorn ANC13 ARM Evaluation System */ -// SLOT_INTERFACE("80286", BBC_TUBE_80286) /* Acorn 80286 2nd Processor */ + SLOT_INTERFACE("80286", BBC_TUBE_80286) /* Acorn 80286 2nd Processor */ // SLOT_INTERFACE("a500", BBC_TUBE_A500) /* Acorn A500 2nd Processor */ SLOT_INTERFACE("casper", BBC_TUBE_CASPER) /* Casper 68000 2nd Processor */ // SLOT_INTERFACE("zep100", BBC_TUBE_ZEP100) /* Torch Z80 Communicator (ZEP100) */ diff --git a/src/devices/bus/bbc/tube/tube_80286.cpp b/src/devices/bus/bbc/tube/tube_80286.cpp new file mode 100644 index 00000000000..75fa5d2b46a --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_80286.cpp @@ -0,0 +1,155 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn 80286 2nd Processor + +**********************************************************************/ + + +#include "emu.h" +#include "tube_80286.h" +#include "softlist_dev.h" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_TUBE_80286, bbc_tube_80286_device, "bbc_tube_80286", "Acorn 80286 2nd Processor") + + +//------------------------------------------------- +// ADDRESS_MAP( tube_80286_mem ) +//------------------------------------------------- + +static ADDRESS_MAP_START(tube_80286_mem, AS_PROGRAM, 16, bbc_tube_80286_device) + ADDRESS_MAP_GLOBAL_MASK(0xfffff) + AM_RANGE(0x00000, 0xbffff) AM_RAM AM_SHARE("ram") + AM_RANGE(0xc0000, 0xc3fff) AM_ROM AM_REGION("bootstrap", 0) AM_MIRROR(0x3c000) +ADDRESS_MAP_END + +//------------------------------------------------- +// ADDRESS_MAP( tube_80286_io ) +//------------------------------------------------- + +static ADDRESS_MAP_START(tube_80286_io, AS_IO, 16, bbc_tube_80286_device) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x50, 0x51) AM_READ8(disable_boot_rom, 0x00ff) + AM_RANGE(0x60, 0x61) AM_WRITE8(irq_latch_w, 0x00ff) + AM_RANGE(0x80, 0x8f) AM_DEVREADWRITE8("ula", tube_device, parasite_r, parasite_w, 0x00ff) +ADDRESS_MAP_END + +//------------------------------------------------- +// ROM( tube_80286 ) +//------------------------------------------------- + +ROM_START( tube_80286 ) + ROM_REGION(0x4000, "bootstrap", 0) + ROM_LOAD16_BYTE("M512_LO_IC31.rom", 0x0000, 0x2000, CRC(c0df8707) SHA1(7f6d843d5aea6bdb36cbd4623ae942b16b96069d)) // 2201,287-02 + ROM_LOAD16_BYTE("M512_HI_IC32.rom", 0x0001, 0x2000, CRC(e47f10b2) SHA1(45dc8d7e7936afbec6de423569d9005a1c350316)) // 2201,288-02 +ROM_END + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +MACHINE_CONFIG_MEMBER(bbc_tube_80286_device::device_add_mconfig) + MCFG_CPU_ADD("i80286", I80286, XTAL_12MHz / 2) + MCFG_CPU_PROGRAM_MAP(tube_80286_mem) + MCFG_CPU_IO_MAP(tube_80286_io) + MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(DEVICE_SELF, bbc_tube_80286_device, irq_callback) + + MCFG_TUBE_ADD("ula") + MCFG_TUBE_PNMI_HANDLER(INPUTLINE("i80286", INPUT_LINE_NMI)) + MCFG_TUBE_PIRQ_HANDLER(INPUTLINE("i80286", INPUT_LINE_INT0)) + + /* internal ram */ + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("1M") + + /* software lists */ + MCFG_SOFTWARE_LIST_ADD("flop_ls_80186", "bbc_flop_80186") +MACHINE_CONFIG_END + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *bbc_tube_80286_device::device_rom_region() const +{ + return ROM_NAME( tube_80286 ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_tube_80286_device - constructor +//------------------------------------------------- + +bbc_tube_80286_device::bbc_tube_80286_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_TUBE_80286, tag, owner, clock), + device_bbc_tube_interface(mconfig, *this), + m_i80286(*this, "i80286"), + m_ula(*this, "ula"), + m_ram(*this, "ram"), + m_bootstrap(*this, "bootstrap") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_tube_80286_device::device_start() +{ + m_slot = dynamic_cast<bbc_tube_slot_device *>(owner()); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void bbc_tube_80286_device::device_reset() +{ + m_ula->reset(); +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +READ8_MEMBER(bbc_tube_80286_device::host_r) +{ + return m_ula->host_r(space, offset); +} + +WRITE8_MEMBER(bbc_tube_80286_device::host_w) +{ + m_ula->host_w(space, offset, data); +} + +READ8_MEMBER(bbc_tube_80286_device::disable_boot_rom) +{ + m_i80286->space(AS_PROGRAM).install_ram(0xc0000, 0xfffff, m_ram->pointer() + 0xc0000); + + return 0xff; +} + +WRITE8_MEMBER(bbc_tube_80286_device::irq_latch_w) +{ + m_irq_latch = data; +} + +//------------------------------------------------- +// irq vector callback +//------------------------------------------------- + +IRQ_CALLBACK_MEMBER(bbc_tube_80286_device::irq_callback) +{ + return m_irq_latch; +}
\ No newline at end of file diff --git a/src/devices/bus/bbc/tube/tube_80286.h b/src/devices/bus/bbc/tube/tube_80286.h new file mode 100644 index 00000000000..31015fc8a56 --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_80286.h @@ -0,0 +1,63 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn 80286 2nd Processor + +**********************************************************************/ + + +#ifndef MAME_BUS_BBC_TUBE_80286_H +#define MAME_BUS_BBC_TUBE_80286_H + +#include "tube.h" +#include "cpu/i86/i286.h" +#include "machine/ram.h" +#include "machine/tube.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_tube_80286_device + +class bbc_tube_80286_device : + public device_t, + public device_bbc_tube_interface +{ +public: + // construction/destruction + bbc_tube_80286_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + DECLARE_READ8_MEMBER( disable_boot_rom ); + DECLARE_WRITE8_MEMBER( irq_latch_w ); + +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; + + virtual DECLARE_READ8_MEMBER( host_r ) override; + virtual DECLARE_WRITE8_MEMBER( host_w ) override; + +private: + uint8_t m_irq_latch; + + IRQ_CALLBACK_MEMBER( irq_callback ); + + required_device<i80286_cpu_device> m_i80286; + required_device<tube_device> m_ula; + required_device<ram_device> m_ram; + required_memory_region m_bootstrap; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_TUBE_80286, bbc_tube_80286_device) + + +#endif /* MAME_BUS_BBC_TUBE_80286_H */ diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp index 4b6ad39cf54..0fc573744b5 100644 --- a/src/mame/drivers/bbc.cpp +++ b/src/mame/drivers/bbc.cpp @@ -777,7 +777,8 @@ FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_bbc ) FLOPPY_OPUS_DDOS_FORMAT, FLOPPY_OPUS_DDCPM_FORMAT, FLOPPY_TORCH_CPN_FORMAT, - FLOPPY_FSD_FORMAT + FLOPPY_FSD_FORMAT, + FLOPPY_PC_FORMAT FLOPPY_FORMATS_END0 FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_bbcm ) @@ -1208,9 +1209,9 @@ static MACHINE_CONFIG_DERIVED( abc310, bbcbp ) MCFG_DEVICE_REMOVE("wd1770:1") /* Add 80286 co-processor */ - //MCFG_DEVICE_MODIFY("tube") - //MCFG_SLOT_DEFAULT_OPTION("80286") - //MCFG_SLOT_FIXED(true) + MCFG_DEVICE_MODIFY("tube") + MCFG_SLOT_DEFAULT_OPTION("80286") + MCFG_SLOT_FIXED(true) /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ |