mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
abc310: Added 80286 2nd processor.
This commit is contained in:
parent
5911529240
commit
a65015f5cb
@ -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",
|
||||
|
@ -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) */
|
||||
|
155
src/devices/bus/bbc/tube/tube_80286.cpp
Normal file
155
src/devices/bus/bbc/tube/tube_80286.cpp
Normal file
@ -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;
|
||||
}
|
63
src/devices/bus/bbc/tube/tube_80286.h
Normal file
63
src/devices/bus/bbc/tube/tube_80286.h
Normal file
@ -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 */
|
@ -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 */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user