mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
bus/bbc/tube: Added Acorn Z80 2nd Processor (Winchester) device.
This commit is contained in:
parent
d6cbfb3814
commit
52c23aba52
@ -111,6 +111,7 @@ void bbc_tube_devices(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
|
||||
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
|
||||
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
|
||||
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
|
||||
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
|
||||
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
|
||||
@ -139,6 +140,7 @@ void bbc_extube_devices(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
|
||||
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
|
||||
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
|
||||
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
|
||||
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
|
||||
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
|
||||
|
@ -19,6 +19,7 @@
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_TUBE_Z80, bbc_tube_z80_device, "bbc_tube_z80", "Acorn Z80 2nd Processor")
|
||||
DEFINE_DEVICE_TYPE(BBC_TUBE_Z80W, bbc_tube_z80w_device, "bbc_tube_z80w", "Acorn Z80 2nd Processor (Winchester)")
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -54,7 +55,14 @@ void bbc_tube_z80_device::tube_z80_io(address_map &map)
|
||||
|
||||
ROM_START( tube_z80 )
|
||||
ROM_REGION(0x1000, "rom", 0)
|
||||
ROM_LOAD("z80_120.rom", 0x0000, 0x1000, CRC(315bfc20) SHA1(069077df498599a9c880d4ec9f4bc53fcc602d82))
|
||||
ROM_SYSTEM_BIOS(0, "120", "Z80 v1.20")
|
||||
ROMX_LOAD("z80_120.rom", 0x0000, 0x1000, CRC(315bfc20) SHA1(069077df498599a9c880d4ec9f4bc53fcc602d82), ROM_BIOS(0))
|
||||
ROM_END
|
||||
|
||||
ROM_START( tube_z80w )
|
||||
ROM_REGION(0x1000, "rom", 0)
|
||||
ROM_SYSTEM_BIOS(0, "200", "Z80 v2.00") /* supplied with Acorn Business Computer */
|
||||
ROMX_LOAD("z80_200.rom", 0x0000, 0x1000, CRC(84672c3d) SHA1(47211cead3a1b0f9830dcdef8e54e29522c69bf8), ROM_BIOS(0))
|
||||
ROM_END
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -71,12 +79,9 @@ void bbc_tube_z80_device::device_add_mconfig(machine_config &config)
|
||||
|
||||
TUBE(config, m_ula);
|
||||
m_ula->hirq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_tube_slot_device::irq_w));
|
||||
m_ula->pnmi_handler().set(FUNC(bbc_tube_z80_device::nmi_w));
|
||||
m_ula->pnmi_handler().set_inputline(m_z80, INPUT_LINE_NMI);
|
||||
m_ula->pirq_handler().set_inputline(m_z80, INPUT_LINE_IRQ0);
|
||||
|
||||
/* internal ram */
|
||||
RAM(config, m_ram).set_default_size("64K").set_default_value(0);
|
||||
|
||||
/* software lists */
|
||||
SOFTWARE_LIST(config, "flop_ls_z80").set_original("bbc_flop_z80");
|
||||
}
|
||||
@ -90,6 +95,11 @@ const tiny_rom_entry *bbc_tube_z80_device::device_rom_region() const
|
||||
return ROM_NAME( tube_z80 );
|
||||
}
|
||||
|
||||
const tiny_rom_entry* bbc_tube_z80w_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( tube_z80w );
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
@ -98,14 +108,23 @@ const tiny_rom_entry *bbc_tube_z80_device::device_rom_region() const
|
||||
// bbc_tube_z80_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_tube_z80_device::bbc_tube_z80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_TUBE_Z80, tag, owner, clock),
|
||||
device_bbc_tube_interface(mconfig, *this),
|
||||
m_z80(*this, "z80"),
|
||||
m_ula(*this, "ula"),
|
||||
m_ram(*this, "ram"),
|
||||
m_rom(*this, "rom"),
|
||||
m_rom_enabled(true)
|
||||
bbc_tube_z80_device::bbc_tube_z80_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_z80(*this, "z80")
|
||||
, m_ula(*this, "ula")
|
||||
, m_rom(*this, "rom")
|
||||
, m_rom_enabled(true)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_tube_z80_device::bbc_tube_z80_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
|
||||
: bbc_tube_z80_device(mconfig, BBC_TUBE_Z80, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
bbc_tube_z80w_device::bbc_tube_z80w_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
|
||||
: bbc_tube_z80_device(mconfig, BBC_TUBE_Z80W, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
@ -115,7 +134,10 @@ bbc_tube_z80_device::bbc_tube_z80_device(const machine_config &mconfig, const ch
|
||||
|
||||
void bbc_tube_z80_device::device_start()
|
||||
{
|
||||
m_slot = dynamic_cast<bbc_tube_slot_device *>(owner());
|
||||
m_ram = std::make_unique<uint8_t[]>(0x10000);
|
||||
|
||||
/* register for save states */
|
||||
save_pointer(NAME(m_ram), 0x100000);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -124,8 +146,6 @@ void bbc_tube_z80_device::device_start()
|
||||
|
||||
void bbc_tube_z80_device::device_reset()
|
||||
{
|
||||
m_ula->reset();
|
||||
|
||||
m_rom_enabled = true;
|
||||
}
|
||||
|
||||
@ -165,19 +185,14 @@ uint8_t bbc_tube_z80_device::mem_r(offs_t offset)
|
||||
if (m_rom_enabled && (offset < 0x1000))
|
||||
data = m_rom->base()[offset & 0xfff];
|
||||
else
|
||||
data = m_ram->pointer()[offset];
|
||||
data = m_ram[offset];
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void bbc_tube_z80_device::mem_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_ram->pointer()[offset] = data;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_tube_z80_device::nmi_w)
|
||||
{
|
||||
m_z80->set_input_line(INPUT_LINE_NMI, state);
|
||||
m_ram[offset] = data;
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,7 +14,6 @@
|
||||
|
||||
#include "tube.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/tube.h"
|
||||
|
||||
//**************************************************************************
|
||||
@ -32,6 +31,8 @@ public:
|
||||
bbc_tube_z80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
bbc_tube_z80_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
@ -45,13 +46,13 @@ protected:
|
||||
|
||||
private:
|
||||
IRQ_CALLBACK_MEMBER( irq_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( nmi_w );
|
||||
|
||||
required_device<cpu_device> m_z80;
|
||||
required_device<tube_device> m_ula;
|
||||
required_device<ram_device> m_ram;
|
||||
required_memory_region m_rom;
|
||||
|
||||
std::unique_ptr<uint8_t[]> m_ram;
|
||||
|
||||
bool m_rom_enabled;
|
||||
|
||||
uint8_t mem_r(offs_t offset);
|
||||
@ -64,8 +65,20 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class bbc_tube_z80w_device : public bbc_tube_z80_device
|
||||
{
|
||||
public:
|
||||
bbc_tube_z80w_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry* device_rom_region() const override;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_TUBE_Z80, bbc_tube_z80_device)
|
||||
DECLARE_DEVICE_TYPE(BBC_TUBE_Z80W, bbc_tube_z80w_device)
|
||||
|
||||
|
||||
#endif /* MAME_BUS_BBC_TUBE_Z80_H */
|
||||
|
Loading…
Reference in New Issue
Block a user