From d4df190a68330865a063cc27e063e5a149f0f658 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Thu, 7 Nov 2019 18:06:55 +0000 Subject: autoc15: Added RAM disc device. daisy: Corrected ROM SHA1 (nw) --- scripts/src/bus.lua | 2 + src/devices/bus/bbc/exp/autocue.cpp | 100 ++++++++++++++++++++++++++++++++++++ src/devices/bus/bbc/exp/autocue.h | 51 ++++++++++++++++++ src/devices/bus/bbc/exp/exp.cpp | 6 +-- src/mame/drivers/bbc.cpp | 6 +-- 5 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 src/devices/bus/bbc/exp/autocue.cpp create mode 100644 src/devices/bus/bbc/exp/autocue.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 06a03d3471e..1fb766bc5d6 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -433,6 +433,8 @@ if (BUSES["BBC_EXP"]~=null) then files { MAME_DIR .. "src/devices/bus/bbc/exp/exp.cpp", MAME_DIR .. "src/devices/bus/bbc/exp/exp.h", + MAME_DIR .. "src/devices/bus/bbc/exp/autocue.cpp", + MAME_DIR .. "src/devices/bus/bbc/exp/autocue.h", MAME_DIR .. "src/devices/bus/bbc/exp/mertec.cpp", MAME_DIR .. "src/devices/bus/bbc/exp/mertec.h", } diff --git a/src/devices/bus/bbc/exp/autocue.cpp b/src/devices/bus/bbc/exp/autocue.cpp new file mode 100644 index 00000000000..929f4eb2eaa --- /dev/null +++ b/src/devices/bus/bbc/exp/autocue.cpp @@ -0,0 +1,100 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Autocue RAM Disc + + The RAM is accessible through JIM (page &FD). One page is visible in JIM at a time. + The selected page is controlled by the two paging registers: + + &FCFE Paging register MSB + &FCFF Paging register LSB + + 256K board has 1024 pages &000 to &3FF + 512K board has 2048 pages &000 to &7FF + +**********************************************************************/ + + +#include "emu.h" +#include "autocue.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_AUTOCUE, bbc_autocue_device, "bbc_autocue", "Autocue RAM Disc"); + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void bbc_autocue_device::device_add_mconfig(machine_config &config) +{ + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_autocue_device - constructor +//------------------------------------------------- + +bbc_autocue_device::bbc_autocue_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_AUTOCUE, tag, owner, clock) + , device_bbc_exp_interface(mconfig, *this) + , m_nvram(*this, "nvram") + , m_ram_page(0) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_autocue_device::device_start() +{ + /* ram disk - board with 8 x HM62256LFP-12 - 256K expandable to 512K */ + m_ram = make_unique_clear(0x40000); + m_nvram->set_base(m_ram.get(), 0x40000); +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +void bbc_autocue_device::fred_w(offs_t offset, uint8_t data) +{ + switch (offset) + { + case 0xff: m_ram_page = (m_ram_page & 0x00ff) | (data << 8); break; + case 0xfe: m_ram_page = (m_ram_page & 0xff00) | (data << 0); break; + } + //logerror("Write ram_page=%04x\n", m_ram_page); +} + +uint8_t bbc_autocue_device::jim_r(offs_t offset) +{ + uint8_t data = 0xff; + + if (m_ram_page < 0x400) + { + data = m_ram[(m_ram_page << 8) | offset]; + } + //logerror("Read %04x -> %02x\n", offset | 0xfd00, data); + return data; +} + +void bbc_autocue_device::jim_w(offs_t offset, uint8_t data) +{ + //logerror("Write %04x <- %02x\n", offset | 0xfd00, data); + if (m_ram_page < 0x400) + { + m_ram[(m_ram_page << 8) | offset] = data; + } +} \ No newline at end of file diff --git a/src/devices/bus/bbc/exp/autocue.h b/src/devices/bus/bbc/exp/autocue.h new file mode 100644 index 00000000000..0151e94e9bf --- /dev/null +++ b/src/devices/bus/bbc/exp/autocue.h @@ -0,0 +1,51 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Autocue RAM Disc + +**********************************************************************/ + + +#ifndef MAME_BUS_BBC_EXP_AUTOCUE_H +#define MAME_BUS_BBC_EXP_AUTOCUE_H + +#include "exp.h" +#include "machine/nvram.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class bbc_autocue_device : + public device_t, + public device_bbc_exp_interface +{ +public: + // construction/destruction + bbc_autocue_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; + +private: + required_device m_nvram; + std::unique_ptr m_ram; + + uint16_t m_ram_page; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_AUTOCUE, bbc_autocue_device); + + +#endif /* MAME_BUS_BBC_EXP_AUTOCUE_H */ diff --git a/src/devices/bus/bbc/exp/exp.cpp b/src/devices/bus/bbc/exp/exp.cpp index 8bbc78889d7..4209249a0f9 100644 --- a/src/devices/bus/bbc/exp/exp.cpp +++ b/src/devices/bus/bbc/exp/exp.cpp @@ -149,12 +149,12 @@ void bbc_exp_slot_device::pb_w(uint8_t data) // slot devices -//#include "autocue.h" +#include "autocue.h" #include "mertec.h" void bbc_exp_devices(device_slot_interface &device) { - //device.option_add("autocue", BBC_AUTOCUE); /* Autocue RAM disk board */ - device.option_add("mertec", BBC_MERTEC); /* Mertec Compact Companion */ + device.option_add_internal("autocue", BBC_AUTOCUE); /* Autocue RAM disk board */ + device.option_add("mertec", BBC_MERTEC); /* Mertec Compact Companion */ } diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp index 1563b485ded..b0ae71e2577 100644 --- a/src/mame/drivers/bbc.cpp +++ b/src/mame/drivers/bbc.cpp @@ -1796,8 +1796,8 @@ void bbcm_state::autoc15(machine_config &config) m_hd6845->out_vsync_callback().set(FUNC(bbc_state::bbc_vsync_changed)); /* Autocue RAM disc */ - //m_exp->set_default_option("autocue"); - //m_exp->set_fixed(true); + m_exp->set_default_option("autocue"); + m_exp->set_fixed(true); } @@ -2382,7 +2382,7 @@ ROM_START(daisy) /* 38000 rom 14 IC24 View + MOS code */ /* 3c000 rom 15 IC24 Terminal + Tube host + CFS */ ROM_LOAD("simdist_2_22-2-89_dhrfdsy.rom", 0x10000, 0x8000, CRC(8a9d9c4a) SHA1(278c5c63e06359601cdf972f55e98f5a7442a713)) - ROM_LOAD("daisy_irfdsy_vr4_5-1-89.rom", 0x18000, 0x8000, CRC(9662d779) SHA1(99234b55fde57680e4217b72ef4ccb8fc56edeff)) + ROM_LOAD("daisy_irfdsy_vr4_5-1-89.rom", 0x18000, 0x8000, CRC(9662d779) SHA1(0841c1fd34c152f3f02ace8633f1fa3f5139069e)) ROM_LOAD("hibas03_a063.rom", 0x20000, 0x4000, CRC(6ea7affc) SHA1(99234b55fde57680e4217b72ef4ccb8fc56edeff)) ROM_REGION(0x4000, "mos", 0) -- cgit v1.2.3