autoc15: Added RAM disc device.

daisy: Corrected ROM SHA1 (nw)
This commit is contained in:
Nigel Barnes 2019-11-07 18:06:55 +00:00
parent 7104687b70
commit d4df190a68
5 changed files with 159 additions and 6 deletions

View File

@ -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",
}

View File

@ -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<uint8_t[]>(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;
}
}

View File

@ -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<nvram_device> m_nvram;
std::unique_ptr<uint8_t[]> 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 */

View File

@ -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 */
}

View File

@ -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)