summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/bbc/tube/tube_80186.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/bbc/tube/tube_80186.cpp')
-rw-r--r--src/devices/bus/bbc/tube/tube_80186.cpp53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/devices/bus/bbc/tube/tube_80186.cpp b/src/devices/bus/bbc/tube/tube_80186.cpp
index 85331ab1b2a..9621110e7ca 100644
--- a/src/devices/bus/bbc/tube/tube_80186.cpp
+++ b/src/devices/bus/bbc/tube/tube_80186.cpp
@@ -19,6 +19,7 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(BBC_TUBE_80186, bbc_tube_80186_device, "bbc_tube_80186", "Acorn 80186 Co-Processor")
+DEFINE_DEVICE_TYPE(BBC_TUBE_PCPLUS, bbc_tube_pcplus_device, "bbc_tube_pcplus", "Solidisk PC-Plus Co-Processor")
//-------------------------------------------------
@@ -50,6 +51,16 @@ ROM_START( tube_80186 )
ROM_END
//-------------------------------------------------
+// ROM( tube_pcplus )
+//-------------------------------------------------
+
+ROM_START( tube_pcplus )
+ ROM_REGION(0x4000, "bootstrap", 0)
+ ROM_LOAD16_BYTE("pcplus_ic31.rom", 0x0000, 0x2000, CRC(5149417b) SHA1(a905c8570d70597bb2b2fca47a1a47783956af9c))
+ ROM_LOAD16_BYTE("pcplus_ic32.rom", 0x0001, 0x2000, CRC(e47f10b2) SHA1(45dc8d7e7936afbec6de423569d9005a1c350316))
+ROM_END
+
+//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
@@ -72,6 +83,14 @@ void bbc_tube_80186_device::device_add_mconfig(machine_config &config)
SOFTWARE_LIST(config, "flop_ls_80186").set_original("bbc_flop_80186");
}
+void bbc_tube_pcplus_device::device_add_mconfig(machine_config &config)
+{
+ bbc_tube_80186_device::device_add_mconfig(config);
+
+ /* internal ram */
+ m_ram->set_default_size("1M");
+}
+
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
@@ -81,6 +100,11 @@ const tiny_rom_entry *bbc_tube_80186_device::device_rom_region() const
return ROM_NAME( tube_80186 );
}
+const tiny_rom_entry *bbc_tube_pcplus_device::device_rom_region() const
+{
+ return ROM_NAME( tube_pcplus );
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -89,13 +113,23 @@ const tiny_rom_entry *bbc_tube_80186_device::device_rom_region() const
// bbc_tube_80186_device - constructor
//-------------------------------------------------
+bbc_tube_80186_device::bbc_tube_80186_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_bbc_tube_interface(mconfig, *this)
+ , m_i80186(*this, "i80186")
+ , m_ula(*this, "ula")
+ , m_ram(*this, "ram")
+ , m_bootstrap(*this, "bootstrap")
+{
+}
+
bbc_tube_80186_device::bbc_tube_80186_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BBC_TUBE_80186, tag, owner, clock),
- device_bbc_tube_interface(mconfig, *this),
- m_i80186(*this, "i80186"),
- m_ula(*this, "ula"),
- m_ram(*this, "ram"),
- m_bootstrap(*this, "bootstrap")
+ : bbc_tube_80186_device(mconfig, BBC_TUBE_80186, tag, owner, clock)
+{
+}
+
+bbc_tube_pcplus_device::bbc_tube_pcplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_80186_device(mconfig, BBC_TUBE_PCPLUS, tag, owner, clock)
{
}
@@ -121,6 +155,13 @@ void bbc_tube_80186_device::device_reset()
program.install_rom(0xc0000, 0xc3fff, 0x3c000, m_bootstrap->base());
}
+void bbc_tube_pcplus_device::device_reset()
+{
+ address_space &program = m_i80186->space(AS_PROGRAM);
+
+ program.install_ram(0x00000, 0xfffff, m_ram->pointer());
+ program.install_rom(0xf0000, 0xf3fff, 0x0c000, m_bootstrap->base());
+}
//**************************************************************************
// IMPLEMENTATION