bbc: ROMs required by expansion devices are now allocated empty slots in host machine at startup.

- Removed machine().root_device() from all bbc expansion devices.
- Added configuration option to fit Econet upgrade.
- Added OS 0.92 as BIOS option in bbca and bbcb
- Added Opus Challenger ADFS 1MHz bus device (Master only).
- Moved torch MCP ROMs to bbc_tube_zep100 device, to be inserted at startup.

bbc_acorn8271: Removed lesser known DFS ROMs, they are now softlisted if required.

bbc_opus8272: Added Opus DDOS 3.05.

bbc_opus2791: Added Opus DDOS 3.12.
This commit is contained in:
Nigel Barnes 2018-11-18 16:40:56 +00:00
parent 8446d1244f
commit 2047104b85
31 changed files with 520 additions and 600 deletions

View File

@ -175,8 +175,9 @@ void bbcm_1mhzbus_devices(device_slot_interface &device)
//device.option_add("m5000", BBC_M5000); /* Hybrid Music 5000 Synthesiser */
//device.option_add("m87", BBC_M87); /* Peartree Music 87 Synthesiser */
//device.option_add("multiform", BBC_MULTIFORM); /* Technomatic Multiform Z80 */
//device.option_add("opusa", BBC_OPUSA); /* Opus Challenger ADFS */
device.option_add("opusa", BBC_OPUSA); /* Opus Challenger ADFS */
//device.option_add("ramdisc", BBC_RAMDISC); /* Morley Electronics RAM Disc */
//device.option_add("graduate", BBC_GRADUATE); /* The Torch Graduate G400/G800 */
device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */
//device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */
device.option_add("cfa3000opt", CFA3000_OPT); /* Henson CFA 3000 Option Board */

View File

@ -46,6 +46,7 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(BBC_OPUS3, bbc_opus3_device, "bbc_opus3", "Opus Challenger 3-in-1")
DEFINE_DEVICE_TYPE(BBC_OPUSA, bbc_opusa_device, "bbc_opusa", "Opus Challenger ADFS")
//-------------------------------------------------
@ -55,6 +56,8 @@ DEFINE_DEVICE_TYPE(BBC_OPUS3, bbc_opus3_device, "bbc_opus3", "Opus Challenger 3-
FLOPPY_FORMATS_MEMBER(bbc_opus3_device::floppy_formats)
FLOPPY_ACORN_SSD_FORMAT,
FLOPPY_ACORN_DSD_FORMAT,
FLOPPY_ACORN_ADFS_OLD_FORMAT,
FLOPPY_ACORN_DOS_FORMAT,
FLOPPY_FSD_FORMAT,
FLOPPY_OPUS_DDOS_FORMAT,
FLOPPY_OPUS_DDCPM_FORMAT
@ -67,7 +70,7 @@ void bbc_floppies(device_slot_interface &device)
ROM_START( opus3 )
ROM_REGION(0x4000, "dfs_rom", 0)
ROM_REGION(0x4000, "exp_rom", 0)
ROM_DEFAULT_BIOS("ch103")
ROM_SYSTEM_BIOS(0, "ch100", "Challenger 1.00")
ROMX_LOAD("chal100.rom", 0x0000, 0x4000, CRC(740a8335) SHA1(f3c75c21bcd7d4a4dfff922fd287230dcdb91d0e), ROM_BIOS(0))
@ -77,6 +80,13 @@ ROM_START( opus3 )
ROMX_LOAD("chal103.rom", 0x0000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33), ROM_BIOS(2))
ROM_END
ROM_START( opusa )
ROM_REGION(0x8000, "exp_rom", 0)
ROM_DEFAULT_BIOS("ch200")
ROM_SYSTEM_BIOS(0, "ch200", "Challenger ADFS")
ROMX_LOAD("challenger adfs_dfs.rom", 0x0000, 0x8000, CRC(e922c19a) SHA1(b9f5c749412528e4f8e9cda9f13e10f8405bb195), ROM_BIOS(0))
ROM_END
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
@ -99,6 +109,11 @@ const tiny_rom_entry *bbc_opus3_device::device_rom_region() const
return ROM_NAME( opus3 );
}
const tiny_rom_entry *bbc_opusa_device::device_rom_region() const
{
return ROM_NAME( opusa );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@ -107,15 +122,24 @@ const tiny_rom_entry *bbc_opus3_device::device_rom_region() const
// bbc_opus3_device - constructor
//-------------------------------------------------
bbc_opus3_device::bbc_opus3_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_1mhzbus_interface(mconfig, *this)
, m_ramdisk(*this, "ramdisk")
, m_fdc(*this, "wd1770")
, m_floppy0(*this, "wd1770:0")
, m_floppy1(*this, "wd1770:1")
, m_ramdisk_page(0)
{
}
bbc_opus3_device::bbc_opus3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_OPUS3, tag, owner, clock),
device_bbc_1mhzbus_interface(mconfig, *this),
m_dfs_rom(*this, "dfs_rom"),
m_ramdisk(*this, "ramdisk"),
m_fdc(*this, "wd1770"),
m_floppy0(*this, "wd1770:0"),
m_floppy1(*this, "wd1770:1"),
m_ramdisk_page(0)
: bbc_opus3_device(mconfig, BBC_OPUS3, tag, owner, clock)
{
}
bbc_opusa_device::bbc_opusa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bbc_opus3_device(mconfig, BBC_OPUSA, tag, owner, clock)
{
}
@ -127,16 +151,10 @@ void bbc_opus3_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_opus3_device::device_reset()
void bbc_opusa_device::device_start()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************

View File

@ -29,9 +29,10 @@ public:
bbc_opus3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
bbc_opus3_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;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
@ -47,7 +48,6 @@ private:
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
required_memory_region m_dfs_rom;
required_device<ram_device> m_ramdisk;
required_device<wd1770_device> m_fdc;
required_device<floppy_connector> m_floppy0;
@ -59,8 +59,24 @@ private:
};
class bbc_opusa_device : public bbc_opus3_device
{
public:
// construction/destruction
bbc_opusa_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 const tiny_rom_entry *device_rom_region() const override;
};
// device type definition
DECLARE_DEVICE_TYPE(BBC_OPUS3, bbc_opus3_device)
DECLARE_DEVICE_TYPE(BBC_OPUSA, bbc_opusa_device)
#endif // MAME_BUS_BBC_1MHZBUS_OPUS3_H

View File

@ -25,13 +25,13 @@ DEFINE_DEVICE_TYPE(BBC_BITSTIK2, bbc_bitstik2_device, "bbc_bitstik2", "Robo Bits
//-------------------------------------------------
ROM_START(bitstik1)
ROM_REGION(0x4000, "rom", 0)
ROM_REGION(0x4000, "exp_rom", 0)
ROM_LOAD("bitstik1.rom", 0x0000, 0x2000, CRC(a3c539f8) SHA1(c6f2cf2f6d1e48819a8381c6a1c97ca8fa5ab117))
ROM_RELOAD(0x2000, 0x2000)
ROM_END
ROM_START(bitstik2)
ROM_REGION(0x4000, "rom", 0)
ROM_REGION(0x4000, "exp_rom", 0)
ROM_LOAD("bitstik2.rom", 0x0000, 0x2000, CRC(a2b5a743) SHA1(4d0040af6bdc6a587e42d4aa36d528b768cf9549))
ROM_RELOAD(0x2000, 0x2000)
ROM_END
@ -93,8 +93,7 @@ bbc_bitstik_device::bbc_bitstik_device(const machine_config &mconfig, device_typ
device_t(mconfig, type, tag, owner, clock),
device_bbc_analogue_interface(mconfig, *this),
m_channel(*this, "CHANNEL%u", 0),
m_buttons(*this, "BUTTONS"),
m_rom(*this, "rom")
m_buttons(*this, "BUTTONS")
{
}
@ -118,16 +117,6 @@ void bbc_bitstik_device::device_start()
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_bitstik_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(13, memregion("rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************

View File

@ -35,7 +35,6 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
@ -46,7 +45,6 @@ protected:
private:
required_ioport_array<4> m_channel;
required_ioport m_buttons;
required_memory_region m_rom;
};
class bbc_bitstik1_device : public bbc_bitstik_device

View File

@ -99,18 +99,6 @@ void bbc_mertec_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_mertec_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(0, m_ext_rom->base() + 0x0000);
machine().root_device().membank("bank5")->configure_entry(0, m_ext_rom->base() + 0x1000);
machine().root_device().membank("bank4")->configure_entry(1, m_ext_rom->base() + 0x4000);
machine().root_device().membank("bank5")->configure_entry(1, m_ext_rom->base() + 0x5000);
}
//**************************************************************************
// IMPLEMENTATION

View File

@ -35,7 +35,6 @@ public:
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;

View File

@ -26,7 +26,10 @@ DEFINE_DEVICE_TYPE(BBC_ACORN1770, bbc_acorn1770_device, "bbc_acorn1770", "Acorn
FLOPPY_FORMATS_MEMBER( bbc_acorn8271_device::floppy_formats )
FLOPPY_ACORN_SSD_FORMAT,
FLOPPY_ACORN_DSD_FORMAT,
FLOPPY_FSD_FORMAT
FLOPPY_ACORN_ADFS_OLD_FORMAT,
FLOPPY_ACORN_DOS_FORMAT,
FLOPPY_FSD_FORMAT,
FLOPPY_PC_FORMAT
FLOPPY_FORMATS_END0
static void bbc_floppies_525(device_slot_interface &device)
@ -52,47 +55,17 @@ ROM_START( acorn8271 )
ROMX_LOAD("dnfs100.rom", 0x0000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0), ROM_BIOS(2))
ROM_SYSTEM_BIOS(3, "dnfs120", "Acorn DFS 1.20")
ROMX_LOAD("dnfs120.rom", 0x0000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232), ROM_BIOS(3))
// Amcom
ROM_SYSTEM_BIOS(4, "amdfs0000", "Amcom DFS 00000")
ROMX_LOAD("amcomdfs_00000.rom", 0x0000, 0x2000, CRC(28947e95) SHA1(43eb9bfc70bb710e01c0c9d48703ea812f9266e4), ROM_BIOS(4))
ROM_RELOAD( 0x2000, 0x2000)
ROM_SYSTEM_BIOS(5, "amdfs7259", "Amcom DFS A7259")
ROMX_LOAD("amcomdfs_a7259.rom", 0x0000, 0x2000, CRC(a3366a98) SHA1(7b8b08edf5ebf17fcbcfbb2af0c189ac903285c2), ROM_BIOS(5))
ROM_RELOAD( 0x2000, 0x2000)
ROM_SYSTEM_BIOS(6, "amdfs7874", "Amcom DFS A7874")
ROMX_LOAD("amcomdfs_a7874.rom", 0x0000, 0x2000, CRC(a7efeee8) SHA1(b6b06c7435d570d25a10fff1c703d16942deb8fb), ROM_BIOS(6))
ROM_RELOAD(0x2000, 0x2000)
ROM_SYSTEM_BIOS(7, "amdfs4084", "Amcom DFS B4084")
ROMX_LOAD("amcomdfs_b4084.rom", 0x0000, 0x2000, CRC(487b049b) SHA1(559e056fe77ede2c87a314fcd8d3e2cab2b49b09), ROM_BIOS(7))
ROM_RELOAD( 0x2000, 0x2000)
ROM_SYSTEM_BIOS(8, "amdfs4088", "Amcom DFS B4088")
ROMX_LOAD("amcomdfs_b4088.rom", 0x0000, 0x2000, CRC(3b6e2f82) SHA1(3f5e5039a926c980957f169de2112793eb1a9890), ROM_BIOS(8))
ROM_RELOAD( 0x2000, 0x2000)
ROM_SYSTEM_BIOS(9, "amdfs4218", "Amcom DFS B4218")
ROMX_LOAD("amcomdfs_b4218.rom", 0x0000, 0x2000, CRC(98248af5) SHA1(17986b029d641047555eedc538d6790f0cf911a9), ROM_BIOS(9))
ROM_RELOAD( 0x2000, 0x2000)
// Watford Electronics
ROM_SYSTEM_BIOS(10, "wdfs110", "Watford Electronics DFS 1.10")
ROMX_LOAD("wedfs110.rom", 0x0000, 0x4000, CRC(73c47a91) SHA1(658eb78b104806e76a0e51de9eb238a51daf646d), ROM_BIOS(10))
ROM_SYSTEM_BIOS(11, "wdfs130", "Watford Electronics DFS 1.30")
ROMX_LOAD("wedfs130.rom", 0x0000, 0x4000, CRC(153edf1f) SHA1(01455e8762fe21a5fbb0c383793bcc6e9c34904c), ROM_BIOS(11))
ROM_SYSTEM_BIOS(12, "wdfs141", "Watford Electronics DFS 1.41")
ROMX_LOAD("wedfs141.rom", 0x0000, 0x4000, CRC(fda3f58d) SHA1(4f3984ebb35709b39369cb516440dd0589920337), ROM_BIOS(12))
ROM_SYSTEM_BIOS(13, "wdfs142", "Watford Electronics DFS 1.42")
ROMX_LOAD("wedfs142.rom", 0x0000, 0x4000, CRC(aef838de) SHA1(0caee270eddd8feb3fa75f721775e9b80f853358), ROM_BIOS(13))
ROM_SYSTEM_BIOS(14, "wdfs143", "Watford Electronics DFS 1.43")
ROMX_LOAD("wedfs143.rom", 0x0000, 0x4000, CRC(3755ee18) SHA1(69bc258880b8e163ff85a293a25e5f00931d030b), ROM_BIOS(14))
ROM_SYSTEM_BIOS(15, "wdfs144", "Watford Electronics DFS 1.44")
ROMX_LOAD("wedfs144.rom", 0x0000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5), ROM_BIOS(15))
// Computer Users Club
ROM_SYSTEM_BIOS(16, "bsdos219", "BS-DOS 2.19")
ROMX_LOAD("bs-dos219.rom", 0x0000, 0x4000, CRC(299b17b2) SHA1(175fdcc802a7d94d7c36d6f3fd52a192a7cfbc98), ROM_BIOS(16))
ROM_SYSTEM_BIOS(17, "bsdos222", "BS-DOS 2.22")
ROMX_LOAD("bs-dos222.rom", 0x0000, 0x4000, CRC(63cf49d1) SHA1(92948e5843b9d9715354e21f14de2453bc250bf4), ROM_BIOS(17))
// Others
ROM_SYSTEM_BIOS(18, "cucdos", "C.U.C DOS 1.00")
ROMX_LOAD("cucdos.rom", 0x0000, 0x2000, CRC(4adf8ecb) SHA1(ca3c1f9e89799459b6fd5197304129441443ca54), ROM_BIOS(18))
ROM_RELOAD( 0x2000, 0x2000)
ROM_SYSTEM_BIOS(4, "wdfs130", "Watford Electronics DFS 1.30")
ROMX_LOAD("wedfs130.rom", 0x0000, 0x4000, CRC(153edf1f) SHA1(01455e8762fe21a5fbb0c383793bcc6e9c34904c), ROM_BIOS(4))
ROM_SYSTEM_BIOS(5, "wdfs141", "Watford Electronics DFS 1.41")
ROMX_LOAD("wedfs141.rom", 0x0000, 0x4000, CRC(fda3f58d) SHA1(4f3984ebb35709b39369cb516440dd0589920337), ROM_BIOS(5))
ROM_SYSTEM_BIOS(6, "wdfs142", "Watford Electronics DFS 1.42")
ROMX_LOAD("wedfs142.rom", 0x0000, 0x4000, CRC(aef838de) SHA1(0caee270eddd8feb3fa75f721775e9b80f853358), ROM_BIOS(6))
ROM_SYSTEM_BIOS(7, "wdfs143", "Watford Electronics DFS 1.43")
ROMX_LOAD("wedfs143.rom", 0x0000, 0x4000, CRC(3755ee18) SHA1(69bc258880b8e163ff85a293a25e5f00931d030b), ROM_BIOS(7))
ROM_SYSTEM_BIOS(8, "wdfs144", "Watford Electronics DFS 1.44")
ROMX_LOAD("wedfs144.rom", 0x0000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5), ROM_BIOS(8))
ROM_END
ROM_START( acorn1770 )
@ -109,11 +82,6 @@ ROM_START( acorn1770 )
ROMX_LOAD("dfs v2.25,acorn.rom", 0x0000, 0x4000, CRC(f855a75b) SHA1(f11271748e6303c60182955e5fa478624b616fcf), ROM_BIOS(3))
ROM_SYSTEM_BIOS(4, "dfs226", "Acorn DFS 2.26")
ROMX_LOAD("dfs v2.26,acorn.rom", 0x0000, 0x4000, CRC(5ae33e94) SHA1(cf2ebc422a8d24ec6f1a0320520c38a0e704109a), ROM_BIOS(4))
// Advanced Computer Products
ROM_SYSTEM_BIOS(5, "acp108", "Advanced 1770 DFS 1.08")
ROMX_LOAD("advanced 1770 dfs 1.08,acp.rom", 0x0000, 0x4000, CRC(eb0eaa34) SHA1(d16ba3c8ed5e5ab6af62aad13a8e567b1c3639c2), ROM_BIOS(5))
ROM_SYSTEM_BIOS(6, "acp200", "Advanced 1770 DFS 2.00")
ROMX_LOAD("advanced 1770 dfs 2.00,acp.rom", 0x0000, 0x4000, CRC(65c0d170) SHA1(6907806e2b5b904a6f2041c11f8ccbd298d63ab9), ROM_BIOS(6))
ROM_END
@ -124,7 +92,7 @@ ROM_END
void bbc_acorn8271_device::device_add_mconfig(machine_config &config)
{
I8271(config, m_fdc, 16_MHz_XTAL / 8);
m_fdc->intrq_wr_callback().set(FUNC(bbc_acorn8271_device::fdc_intrq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->hdl_wr_callback().set(FUNC(bbc_acorn8271_device::motor_w));
m_fdc->opt_wr_callback().set(FUNC(bbc_acorn8271_device::side_w));
@ -135,6 +103,7 @@ void bbc_acorn8271_device::device_add_mconfig(machine_config &config)
void bbc_acorn1770_device::device_add_mconfig(machine_config &config)
{
WD1770(config, m_fdc, 16_MHz_XTAL / 2);
m_fdc->set_force_ready(true);
m_fdc->intrq_wr_callback().set(FUNC(bbc_acorn1770_device::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(bbc_acorn1770_device::fdc_drq_w));
@ -164,7 +133,6 @@ const tiny_rom_entry *bbc_acorn1770_device::device_rom_region() const
bbc_acorn8271_device::bbc_acorn8271_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_ACORN8271, tag, owner, clock)
, device_bbc_fdc_interface(mconfig, *this)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "i8271")
, m_floppy0(*this, "i8271:0")
, m_floppy1(*this, "i8271:1")
@ -174,11 +142,9 @@ bbc_acorn8271_device::bbc_acorn8271_device(const machine_config &mconfig, const
bbc_acorn1770_device::bbc_acorn1770_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_ACORN1770, tag, owner, clock)
, device_bbc_fdc_interface(mconfig, *this)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "wd1770")
, m_floppy0(*this, "wd1770:0")
, m_floppy1(*this, "wd1770:1")
, m_drive_control(0)
{
}
@ -193,23 +159,6 @@ void bbc_acorn8271_device::device_start()
void bbc_acorn1770_device::device_start()
{
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_acorn8271_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
void bbc_acorn1770_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
m_drive_control = 0xfe;
}
@ -257,11 +206,6 @@ WRITE_LINE_MEMBER(bbc_acorn8271_device::side_w)
if (m_floppy1->get_device()) m_floppy1->get_device()->ss_w(state);
}
WRITE_LINE_MEMBER(bbc_acorn8271_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}
READ8_MEMBER(bbc_acorn1770_device::read)
{
@ -273,7 +217,7 @@ READ8_MEMBER(bbc_acorn1770_device::read)
}
else
{
data = m_drive_control;
data = 0xfe;
}
return data;
}
@ -288,8 +232,6 @@ WRITE8_MEMBER(bbc_acorn1770_device::write)
{
floppy_image_device *floppy = nullptr;
m_drive_control = data;
// bit 0, 1: drive select
if (BIT(data, 0)) floppy = m_floppy0->get_device();
if (BIT(data, 1)) floppy = m_floppy1->get_device();

View File

@ -17,6 +17,7 @@
#include "machine/wd_fdc.h"
#include "formats/acorn_dsk.h"
#include "formats/fsd_dsk.h"
#include "formats/pc_dsk.h"
//**************************************************************************
// TYPE DEFINITIONS
@ -35,7 +36,6 @@ public:
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;
@ -45,11 +45,9 @@ protected:
virtual DECLARE_WRITE8_MEMBER(write) override;
private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(motor_w);
DECLARE_WRITE_LINE_MEMBER(side_w);
required_memory_region m_dfs_rom;
required_device<i8271_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
@ -66,7 +64,6 @@ public:
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;
@ -79,12 +76,10 @@ private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
required_memory_region m_dfs_rom;
required_device<wd1770_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
int m_drive_control;
int m_fdc_ie;
};

View File

@ -44,7 +44,7 @@ ROM_END
void bbc_ams3_device::device_add_mconfig(machine_config &config)
{
I8271(config, m_fdc, 16_MHz_XTAL / 8);
m_fdc->intrq_wr_callback().set(FUNC(bbc_ams3_device::fdc_intrq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->hdl_wr_callback().set(FUNC(bbc_ams3_device::motor_w));
m_fdc->opt_wr_callback().set(FUNC(bbc_ams3_device::side_w));
// Hitachi HFD 305S
@ -69,7 +69,6 @@ const tiny_rom_entry *bbc_ams3_device::device_rom_region() const
bbc_ams3_device::bbc_ams3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_AMS3, tag, owner, clock)
, device_bbc_fdc_interface(mconfig, *this)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "i8271")
, m_floppy0(*this, "i8271:0")
, m_floppy1(*this, "i8271:1")
@ -85,16 +84,6 @@ void bbc_ams3_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_ams3_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base() + 0x0000);
machine().root_device().membank("bank4")->configure_entry(13, memregion("dfs_rom")->base() + 0x4000);
}
//**************************************************************************
// IMPLEMENTATION
@ -139,8 +128,3 @@ WRITE_LINE_MEMBER(bbc_ams3_device::side_w)
if (m_floppy0->get_device()) m_floppy0->get_device()->ss_w(state);
if (m_floppy1->get_device()) m_floppy1->get_device()->ss_w(state);
}
WRITE_LINE_MEMBER(bbc_ams3_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}

View File

@ -33,7 +33,6 @@ public:
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;
@ -47,7 +46,6 @@ private:
DECLARE_WRITE_LINE_MEMBER(motor_w);
DECLARE_WRITE_LINE_MEMBER(side_w);
required_memory_region m_dfs_rom;
required_device<i8271_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;

View File

@ -106,7 +106,6 @@ bbc_cumanafdc_device::bbc_cumanafdc_device(const machine_config &mconfig, device
m_fdc(*this, "mb8877a"),
m_floppy0(*this, "mb8877a:0"),
m_floppy1(*this, "mb8877a:1"),
m_dfs_rom(*this, "dfs_rom"),
m_drive_control(0)
{
}
@ -133,15 +132,6 @@ void bbc_cumanafdc_device::device_start()
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_cumanafdc_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION

View File

@ -37,7 +37,6 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual DECLARE_READ8_MEMBER(read) override;
virtual DECLARE_WRITE8_MEMBER(write) override;
@ -49,8 +48,6 @@ protected:
bool m_invert;
private:
required_memory_region m_dfs_rom;
int m_drive_control;
int m_fdc_ie;
};

View File

@ -55,8 +55,8 @@ ROM_END
void bbc_cv1797_device::device_add_mconfig(machine_config &config)
{
FD1797(config, m_fdc, 8_MHz_XTAL / 8);
m_fdc->intrq_wr_callback().set(FUNC(bbc_cv1797_device::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(bbc_cv1797_device::fdc_drq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_cv1797_device::motor_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
@ -79,7 +79,6 @@ const tiny_rom_entry *bbc_cv1797_device::device_rom_region() const
bbc_cv1797_device::bbc_cv1797_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_CV1797, tag, owner, clock)
, device_bbc_fdc_interface(mconfig, *this)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "fd1797")
, m_floppy0(*this, "fd1797:0")
, m_floppy1(*this, "fd1797:1")
@ -96,15 +95,6 @@ void bbc_cv1797_device::device_start()
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_cv1797_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
@ -157,16 +147,6 @@ WRITE8_MEMBER(bbc_cv1797_device::write)
}
}
WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}
WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_drq_w)
{
m_slot->drq_w(state);
}
WRITE_LINE_MEMBER(bbc_cv1797_device::motor_w)
{
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);

View File

@ -34,7 +34,6 @@ public:
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;
@ -46,11 +45,8 @@ protected:
private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
DECLARE_WRITE_LINE_MEMBER(motor_w);
required_memory_region m_dfs_rom;
required_device<fd1797_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;

View File

@ -121,7 +121,6 @@ WRITE8_MEMBER(bbc_fdc_slot_device::write)
#include "opus.h"
//#include "solidisk.h"
#include "watford.h"
//#include "zdfs.h"
void bbc_fdc_devices(device_slot_interface &device)
@ -142,5 +141,4 @@ void bbc_fdc_devices(device_slot_interface &device)
//device.option_add("stl1770_2", BBC_STL1770_2);
device.option_add("weddb2", BBC_WEDDB2);
device.option_add("weddb3", BBC_WEDDB3);
//device.option_add("zdfs", BBC_ZDFS);
}

View File

@ -56,8 +56,8 @@ ROM_END
void bbc_microware_device::device_add_mconfig(machine_config &config)
{
WD2793(config, m_fdc, 16_MHz_XTAL / 16); // Replay advert suggests Type R8272 UDM DFS
m_fdc->intrq_wr_callback().set(FUNC(bbc_microware_device::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(bbc_microware_device::fdc_drq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_microware_device::motor_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
@ -80,7 +80,6 @@ const tiny_rom_entry *bbc_microware_device::device_rom_region() const
bbc_microware_device::bbc_microware_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_MICROWARE, tag, owner, clock)
, device_bbc_fdc_interface(mconfig, *this)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "wd2793")
, m_floppy0(*this, "wd2793:0")
, m_floppy1(*this, "wd2793:1")
@ -97,15 +96,6 @@ void bbc_microware_device::device_start()
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_microware_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
@ -159,16 +149,6 @@ WRITE8_MEMBER(bbc_microware_device::write)
}
}
WRITE_LINE_MEMBER(bbc_microware_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}
WRITE_LINE_MEMBER(bbc_microware_device::fdc_drq_w)
{
m_slot->drq_w(state);
}
WRITE_LINE_MEMBER(bbc_microware_device::motor_w)
{
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);

View File

@ -36,7 +36,6 @@ public:
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;
@ -48,11 +47,8 @@ protected:
private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
DECLARE_WRITE_LINE_MEMBER(motor_w);
required_memory_region m_dfs_rom;
required_device<wd2793_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;

View File

@ -50,20 +50,24 @@ static void bbc_floppies_525(device_slot_interface &device)
ROM_START( opus8272 )
ROM_REGION(0x4000, "dfs_rom", 0)
ROM_DEFAULT_BIOS("ddos300")
ROM_DEFAULT_BIOS("ddos305")
ROM_SYSTEM_BIOS(0, "ddos300", "Opus DDOS 3.00")
ROMX_LOAD("opus-ddos300.rom", 0x0000, 0x4000, CRC(1b5fa131) SHA1(6b4e0363a9d39807973a2ef0871a78b287cea27e), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "ddos305", "Opus DDOS 3.05")
ROMX_LOAD("opus-ddos305.rom", 0x0000, 0x4000, CRC(43c75fa4) SHA1(0b7194a234c2316ba825e878e3f69928bf3bb595), ROM_BIOS(1))
ROM_END
ROM_START( opus2791 )
ROM_REGION(0x4000, "dfs_rom", 0)
ROM_DEFAULT_BIOS("ddos316")
ROM_SYSTEM_BIOS(0, "ddos315", "Opus DDOS 3.15")
ROMX_LOAD("opus-ddos315.rom", 0x0000, 0x4000, CRC(5f06701c) SHA1(9e250dc7ddcde35b19e8f29f2cfe95a79f46d473), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "ddos316", "Opus DDOS 3.16")
ROMX_LOAD("opus-ddos316.rom", 0x0000, 0x4000, CRC(268ebc0d) SHA1(e608f6e40a5579147cc631f351aae275fdabec5b), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "edos04", "Opus EDOS 0.4")
ROMX_LOAD("opus-edos04.rom", 0x0000, 0x4000, CRC(1d8a3860) SHA1(05f461464707b4ca24636c9e726af561f227ccdb), ROM_BIOS(2))
ROM_SYSTEM_BIOS(0, "ddos312", "Opus DDOS 3.12")
ROMX_LOAD("opus-ddos312.rom", 0x0000, 0x4000, CRC(b2c393be) SHA1(6accaa0b13b0b939c86674cddd7bee1aea2f66cb), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "ddos315", "Opus DDOS 3.15")
ROMX_LOAD("opus-ddos315.rom", 0x0000, 0x4000, CRC(5f06701c) SHA1(9e250dc7ddcde35b19e8f29f2cfe95a79f46d473), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "ddos316", "Opus DDOS 3.16")
ROMX_LOAD("opus-ddos316.rom", 0x0000, 0x4000, CRC(268ebc0d) SHA1(e608f6e40a5579147cc631f351aae275fdabec5b), ROM_BIOS(2))
ROM_SYSTEM_BIOS(3, "edos04", "Opus EDOS 0.4")
ROMX_LOAD("opus-edos04.rom", 0x0000, 0x4000, CRC(1d8a3860) SHA1(05f461464707b4ca24636c9e726af561f227ccdb), ROM_BIOS(3))
ROM_END
ROM_START( opus2793 )
@ -92,7 +96,7 @@ ROM_END
void bbc_opus8272_device::device_add_mconfig(machine_config &config)
{
I8272A(config, m_fdc, true);
m_fdc->intrq_wr_callback().set(FUNC(bbc_opus8272_device::fdc_intrq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
@ -101,7 +105,7 @@ void bbc_opus8272_device::device_add_mconfig(machine_config &config)
void bbc_opus2791_device::device_add_mconfig(machine_config &config)
{
WD2791(config, m_fdc, 16_MHz_XTAL / 16);
m_fdc->drq_wr_callback().set(FUNC(bbc_opusfdc_device::fdc_drq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_opusfdc_device::motor_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
@ -111,7 +115,7 @@ void bbc_opus2791_device::device_add_mconfig(machine_config &config)
void bbc_opus2793_device::device_add_mconfig(machine_config &config)
{
WD2793(config, m_fdc, 16_MHz_XTAL / 16);
m_fdc->drq_wr_callback().set(FUNC(bbc_opusfdc_device::fdc_drq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_opusfdc_device::motor_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
@ -121,7 +125,7 @@ void bbc_opus2793_device::device_add_mconfig(machine_config &config)
void bbc_opus1770_device::device_add_mconfig(machine_config &config)
{
WD1770(config, m_fdc, 16_MHz_XTAL / 2);
m_fdc->drq_wr_callback().set(FUNC(bbc_opusfdc_device::fdc_drq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
@ -159,7 +163,6 @@ const tiny_rom_entry *bbc_opus1770_device::device_rom_region() const
bbc_opus8272_device::bbc_opus8272_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, BBC_OPUS8272, tag, owner, clock),
device_bbc_fdc_interface(mconfig, *this),
m_dfs_rom(*this, "dfs_rom"),
m_fdc(*this, "i8272"),
m_floppy0(*this, "i8272:0"),
m_floppy1(*this, "i8272:1")
@ -172,7 +175,6 @@ bbc_opusfdc_device::bbc_opusfdc_device(const machine_config &mconfig, device_typ
m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"),
m_dfs_rom(*this, "dfs_rom"),
m_drive_control(0)
{
}
@ -205,20 +207,6 @@ void bbc_opusfdc_device::device_start()
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_opus8272_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
void bbc_opusfdc_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
@ -276,11 +264,6 @@ WRITE8_MEMBER(bbc_opus8272_device::write)
}
}
WRITE_LINE_MEMBER(bbc_opus8272_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}
READ8_MEMBER(bbc_opusfdc_device::read)
{
@ -326,11 +309,6 @@ WRITE8_MEMBER(bbc_opusfdc_device::write)
}
}
WRITE_LINE_MEMBER(bbc_opusfdc_device::fdc_drq_w)
{
m_slot->drq_w(state);
}
WRITE_LINE_MEMBER(bbc_opusfdc_device::motor_w)
{
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);

View File

@ -30,7 +30,6 @@ public:
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;
@ -40,9 +39,6 @@ protected:
virtual DECLARE_WRITE8_MEMBER(write) override;
private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
required_memory_region m_dfs_rom;
required_device<i8272a_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
@ -56,7 +52,6 @@ class bbc_opusfdc_device :
public:
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
DECLARE_WRITE_LINE_MEMBER(motor_w);
protected:
@ -65,7 +60,6 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual DECLARE_READ8_MEMBER(read) override;
virtual DECLARE_WRITE8_MEMBER(write) override;
@ -75,8 +69,6 @@ protected:
optional_device<floppy_connector> m_floppy1;
private:
required_memory_region m_dfs_rom;
int m_drive_control;
};

View File

@ -68,8 +68,8 @@ ROM_END
void bbc_weddb2_device::device_add_mconfig(machine_config &config)
{
WD1772(config, m_fdc, 16_MHz_XTAL / 2);
m_fdc->intrq_wr_callback().set(FUNC(bbc_weddb2_device::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(bbc_weddb2_device::fdc_drq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
@ -78,8 +78,8 @@ void bbc_weddb2_device::device_add_mconfig(machine_config &config)
void bbc_weddb3_device::device_add_mconfig(machine_config &config)
{
WD1770(config, m_fdc, 16_MHz_XTAL / 2);
m_fdc->intrq_wr_callback().set(FUNC(bbc_weddb3_device::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(bbc_weddb3_device::fdc_drq_w));
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true);
@ -112,7 +112,6 @@ bbc_watfordfdc_device::bbc_watfordfdc_device(const machine_config &mconfig, devi
bbc_weddb2_device::bbc_weddb2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bbc_watfordfdc_device(mconfig, BBC_WEDDB2, tag, owner, clock)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "wd1772")
, m_floppy0(*this, "wd1772:0")
, m_floppy1(*this, "wd1772:1")
@ -122,7 +121,6 @@ bbc_weddb2_device::bbc_weddb2_device(const machine_config &mconfig, const char *
bbc_weddb3_device::bbc_weddb3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bbc_watfordfdc_device(mconfig, BBC_WEDDB3, tag, owner, clock)
, m_dfs_rom(*this, "dfs_rom")
, m_fdc(*this, "wd1770")
, m_floppy0(*this, "wd1770:0")
, m_floppy1(*this, "wd1770:1")
@ -144,20 +142,6 @@ void bbc_weddb3_device::device_start()
save_item(NAME(m_drive_control));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_weddb2_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
void bbc_weddb3_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
@ -251,13 +235,3 @@ WRITE8_MEMBER(bbc_weddb3_device::write)
if (!BIT(data, 5)) m_fdc->soft_reset();
}
}
WRITE_LINE_MEMBER(bbc_watfordfdc_device::fdc_intrq_w)
{
m_slot->intrq_w(state);
}
WRITE_LINE_MEMBER(bbc_watfordfdc_device::fdc_drq_w)
{
m_slot->drq_w(state);
}

View File

@ -27,9 +27,6 @@ class bbc_watfordfdc_device :
public:
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
protected:
// construction/destruction
bbc_watfordfdc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -43,7 +40,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
@ -52,7 +48,6 @@ protected:
virtual DECLARE_WRITE8_MEMBER(write) override;
private:
required_memory_region m_dfs_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
@ -68,7 +63,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
@ -77,7 +71,6 @@ protected:
virtual DECLARE_WRITE8_MEMBER(write) override;
private:
required_memory_region m_dfs_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;

View File

@ -39,7 +39,7 @@ ROM_START( tube_casper )
ROM_LOAD16_BYTE("casper.ic9", 0x0000, 0x2000, CRC(4105cbf4) SHA1(a3efeb6fb144da55b47c718239967ed0af4fff72))
ROM_LOAD16_BYTE("casper.ic10", 0x0001, 0x2000, CRC(f25bc320) SHA1(297db56283bb3164c31c21331837213cea426837))
ROM_REGION(0x8000, "host_rom", 0)
ROM_REGION(0x8000, "exp_rom", 0)
ROM_LOAD("rom1.rom", 0x0000, 0x4000, CRC(602b6a36) SHA1(7b24746dbcacb8772468532e92832d5c7f6648fd))
ROM_LOAD("rom2.rom", 0x4000, 0x4000, CRC(7c9efb43) SHA1(4195ce1ed928178fd645a267872a5b4f325d078a))
ROM_END
@ -92,8 +92,7 @@ bbc_tube_casper_device::bbc_tube_casper_device(const machine_config &mconfig, co
m_m68000(*this, "m68000"),
m_via6522_0(*this, "via6522_0"),
m_via6522_1(*this, "via6522_1"),
m_casper_rom(*this, "casper_rom"),
m_host_rom(*this, "host_rom")
m_casper_rom(*this, "casper_rom")
{
}
@ -103,17 +102,6 @@ bbc_tube_casper_device::bbc_tube_casper_device(const machine_config &mconfig, co
void bbc_tube_casper_device::device_start()
{
m_slot = dynamic_cast<bbc_tube_slot_device *>(owner());
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_tube_casper_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(13, memregion("host_rom")->base() + 0x0000);
machine().root_device().membank("bank4")->configure_entry(14, memregion("host_rom")->base() + 0x4000);
}

View File

@ -31,7 +31,6 @@ public:
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;
@ -45,7 +44,6 @@ private:
required_device<via6522_device> m_via6522_0;
required_device<via6522_device> m_via6522_1;
required_memory_region m_casper_rom;
required_memory_region m_host_rom;
void tube_casper_mem(address_map &map);
};

View File

@ -45,12 +45,20 @@ void bbc_tube_zep100_device::tube_zep100_io(address_map &map)
//-------------------------------------------------
ROM_START( tube_zep100 )
ROM_REGION(0x4000, "exp_rom", 0)
ROM_DEFAULT_BIOS("mcp120")
ROM_SYSTEM_BIOS(0, "mcp120", "MCP v1.20 (CBL)") // 1985
ROMX_LOAD("mcp120cbl.rom", 0x0000, 0x4000, CRC(851d0879) SHA1(2e54ef15692ba7dd9fcfd1ef0d660464a772b156), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "mcp041", "MCP v0.41 (CBL)") // 1983
ROMX_LOAD("mcp041cbl.rom", 0x0000, 0x4000, CRC(b36f07f4) SHA1(bd53f09bf73357845a6f97df1ee9e5aea5cdca90), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "cpn071", "CPN 0.71") // 1982
ROMX_LOAD("cpn71.rom", 0x0000, 0x2000, CRC(fcb1bdc8) SHA1(756e22f6d76eb26206765f92c78c7152944102b6), ROM_BIOS(2))
ROM_RELOAD( 0x2000, 0x2000)
ROM_REGION(0x2000, "rom", 0)
ROM_DEFAULT_BIOS("cccp102")
ROM_SYSTEM_BIOS(0, "cccp102", "CCCP 1.02")
ROMX_LOAD("cccp102.rom", 0x0000, 0x2000, CRC(2eb40a21) SHA1(e6ee738e5f2f8556002b79d18caa8ef21f14e08d), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "cccp094", "CCCP 0.94")
ROMX_LOAD("cccp094.rom", 0x0000, 0x2000, CRC(49989bd4) SHA1(62b57c858a3baa4ff943c31f77d331c414772a61), ROM_BIOS(1))
ROMX_LOAD("cccp094.rom", 0x0000, 0x2000, CRC(49989bd4) SHA1(62b57c858a3baa4ff943c31f77d331c414772a61), ROM_BIOS(2))
ROM_END
//-------------------------------------------------
@ -59,11 +67,11 @@ ROM_END
void bbc_tube_zep100_device::device_add_mconfig(machine_config &config)
{
Z80(config, m_z80, XTAL(4'000'000));
Z80(config, m_z80, 4_MHz_XTAL);
m_z80->set_addrmap(AS_PROGRAM, &bbc_tube_zep100_device::tube_zep100_mem);
m_z80->set_addrmap(AS_IO, &bbc_tube_zep100_device::tube_zep100_io);
VIA6522(config, m_via, XTAL(4'000'000) / 2);
VIA6522(config, m_via, 4_MHz_XTAL / 2);
m_via->writepb_handler().set(FUNC(bbc_tube_zep100_device::via_pb_w));
m_via->cb2_handler().set(m_ppi, FUNC(i8255_device::pc2_w));
m_via->ca2_handler().set(m_ppi, FUNC(i8255_device::pc6_w));
@ -75,12 +83,10 @@ void bbc_tube_zep100_device::device_add_mconfig(machine_config &config)
m_ppi->out_pc_callback().set(FUNC(bbc_tube_zep100_device::ppi_pc_w));
/* internal ram */
RAM(config, m_ram);
m_ram->set_default_size("64K");
m_ram->set_default_value(0x00);
RAM(config, m_ram).set_default_size("64K").set_default_value(0x00);
/* software lists */
SOFTWARE_LIST(config, "flop_ls_torch").set_type("bbc_flop_torch", SOFTWARE_LIST_ORIGINAL_SYSTEM);
SOFTWARE_LIST(config, "flop_ls_torch").set_type("bbc_flop_torch", SOFTWARE_LIST_ORIGINAL_SYSTEM).set_filter("Z80");
}
//-------------------------------------------------
@ -100,16 +106,21 @@ const tiny_rom_entry *bbc_tube_zep100_device::device_rom_region() const
// bbc_tube_zep100_device - constructor
//-------------------------------------------------
bbc_tube_zep100_device::bbc_tube_zep100_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_rom_enabled(true)
, m_z80(*this, "z80")
, m_via(*this, "via")
, m_ppi(*this, "ppi")
, m_ram(*this, "ram")
, m_rom(*this, "rom")
, m_port_b(0)
{
}
bbc_tube_zep100_device::bbc_tube_zep100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_TUBE_ZEP100, tag, owner, clock),
device_bbc_tube_interface(mconfig, *this),
m_z80(*this, "z80"),
m_via(*this, "via"),
m_ppi(*this, "ppi"),
m_ram(*this, "ram"),
m_rom(*this, "rom"),
m_port_b(0),
m_rom_enabled(true)
: bbc_tube_zep100_device(mconfig, BBC_TUBE_ZEP100, tag, owner, clock)
{
}
@ -119,7 +130,6 @@ bbc_tube_zep100_device::bbc_tube_zep100_device(const machine_config &mconfig, co
void bbc_tube_zep100_device::device_start()
{
m_slot = dynamic_cast<bbc_tube_slot_device *>(owner());
}
//-------------------------------------------------
@ -128,8 +138,6 @@ void bbc_tube_zep100_device::device_start()
void bbc_tube_zep100_device::device_reset()
{
m_via->reset();
m_rom_enabled = true;
}

View File

@ -33,6 +33,8 @@ public:
bbc_tube_zep100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
bbc_tube_zep100_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;
@ -44,6 +46,8 @@ protected:
virtual DECLARE_READ8_MEMBER( host_r ) override;
virtual DECLARE_WRITE8_MEMBER( host_w ) override;
bool m_rom_enabled;
private:
required_device<z80_device> m_z80;
required_device<via6522_device> m_via;
@ -52,7 +56,6 @@ private:
required_memory_region m_rom;
uint8_t m_port_b;
bool m_rom_enabled;
DECLARE_READ8_MEMBER( mem_r );
DECLARE_WRITE8_MEMBER( mem_w );

View File

@ -23,7 +23,7 @@
DEFINE_DEVICE_TYPE(BBC_BEEBSPCH, bbc_beebspch_device, "bbc_beebspch", "Beeb Speech Synthesiser")
ROM_START(beebspch)
ROM_REGION(0x4000, "rom", 0)
ROM_REGION(0x4000, "exp_rom", 0)
ROM_LOAD("watford_speech.rom", 0x0000, 0x2000, CRC(731642a8) SHA1(1bd31345af6043f394bc9d8e65180c93b2356905))
ROM_RELOAD(0x2000, 0x2000)
@ -65,7 +65,6 @@ void bbc_beebspch_device::device_add_mconfig(machine_config &config)
bbc_beebspch_device::bbc_beebspch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BBC_BEEBSPCH, tag, owner, clock)
, device_bbc_userport_interface(mconfig, *this)
, m_rom(*this, "rom")
, m_nsp(*this, "sp0256")
{
}
@ -79,15 +78,6 @@ void bbc_beebspch_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_beebspch_device::device_reset()
{
machine().root_device().membank("bank4")->configure_entry(13, memregion("rom")->base());
}
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************

View File

@ -33,7 +33,6 @@ public:
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;
@ -42,7 +41,6 @@ protected:
virtual DECLARE_WRITE8_MEMBER(pb_w) override;
private:
required_memory_region m_rom;
required_device<sp0256_device> m_nsp;
};

View File

@ -81,26 +81,26 @@ M = BBC Master
| &7000 | | | |
| | | | |
+ &8000 + + + +
|4 ANDY | | | |4
| ANDY | | | |
+ &9000 | | | +
| | | |4 |
|5 &A000 |4 |4 | |5
| | | | |
| &A000 | | | |
| | | | |
| &B000 | | + |
| | | |5 |
| | | | |
+ &C000 + + + +
| | | | |
|6 &D000 HAZEL | | | |6
| &D000 HAZEL | | | |
| | | | |
+ &E000 |6 |6 |6 +
+ &E000 | | | +
| | | | |
| &F000 | | | |
| | | | |
+ &FC00 FRED + + + +
&FD00 JIM + + + +
&FE00 SHEILA + + + +
+ &FD00 JIM + + + +
+ &FE00 SHEILA + + + +
+ &FF00 + + + +
| |6 |6 |6 |
| | | | |
+ &FFFF + + + +
@ -129,8 +129,8 @@ void bbc_state::bbca_mem(address_map &map)
map.unmap_value_high();
map(0x0000, 0x3fff).bankrw("bank1"); // 0000-3fff Regular RAM
map(0x4000, 0x7fff).bankrw("bank3"); // 4000-7fff Regular RAM mirrored
map(0x8000, 0xbfff).bankr("bank4").w(FUNC(bbc_state::bbc_bank4_w)); // 8000-bfff Paged ROM/RAM
map(0xc000, 0xffff).bankr("bank6"); // c000-fbff OS ROM
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbc_paged_r), FUNC(bbc_state::bbc_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xc000, 0xffff).rom().region("mos", 0); // c000-fbff OS ROM
map(0xfe00, 0xfeff).r(FUNC(bbc_state::bbc_fe_r)); // fe00-feff SHEILA Address Page
map(0xfe00, 0xfe00).mirror(0x06).rw(m_hd6845, FUNC(hd6845_device::status_r), FUNC(hd6845_device::address_w)); // fe00-fe07 6845 CRTC Video controller
map(0xfe01, 0xfe01).mirror(0x06).rw(m_hd6845, FUNC(hd6845_device::register_r), FUNC(hd6845_device::register_w));
@ -145,7 +145,7 @@ void bbc_state::bbca_mem(address_map &map)
void bbc_state::bbc_base(address_map &map)
{
map.unmap_value_high();
map(0xc000, 0xffff).bankr("bank6"); // c000-fbff OS ROM
map(0xc000, 0xffff).rom().region("mos", 0); // c000-fbff OS ROM
map(0xfc00, 0xfcff).rw(m_1mhzbus, FUNC(bbc_1mhzbus_slot_device::fred_r), FUNC(bbc_1mhzbus_slot_device::fred_w)); // fc00-fcff FRED Address Page
map(0xfd00, 0xfdff).rw(m_1mhzbus, FUNC(bbc_1mhzbus_slot_device::jim_r), FUNC(bbc_1mhzbus_slot_device::jim_w)); // fd00-fdff JIM Address Page
map(0xfe00, 0xfeff).r(FUNC(bbc_state::bbc_fe_r)); // fe00-feff SHEILA Address Page
@ -157,6 +157,7 @@ void bbc_state::bbc_base(address_map &map)
map(0xfe20, 0xfe2f).w(FUNC(bbc_state::video_ula_w)); // W: fe20-fe2f Video ULA Video system chip
map(0xfe40, 0xfe5f).rw(m_via6522_0, FUNC(via6522_device::read), FUNC(via6522_device::write)); // fe40-fe5f 6522 VIA SYSTEM VIA
map(0xfe60, 0xfe7f).rw(m_via6522_1, FUNC(via6522_device::read), FUNC(via6522_device::write)); // fe60-fe7f 6522 VIA USER VIA
map(0xfea0, 0xfebf).rw(m_adlc, FUNC(mc6854_device::read), FUNC(mc6854_device::write)); // fea0-febf 68B54 ADLC ECONET controller
map(0xfec0, 0xfedf).rw(m_upd7002, FUNC(upd7002_device::read), FUNC(upd7002_device::write)); // fec0-fedf uPD7002 Analogue to digital converter
map(0xfee0, 0xfeff).rw(m_tube, FUNC(bbc_tube_slot_device::host_r), FUNC(bbc_tube_slot_device::host_w)); // fee0-feff Tube ULA Tube system interface
}
@ -167,7 +168,7 @@ void bbc_state::bbcb_mem(address_map &map)
bbc_base(map);
map(0x0000, 0x3fff).bankrw("bank1"); // 0000-3fff Regular RAM
map(0x4000, 0x7fff).bankrw("bank3"); // 4000-7fff Regular RAM
map(0x8000, 0xbfff).bankr("bank4").w(FUNC(bbc_state::bbc_bank4_w)); // 8000-bfff Paged ROM/RAM
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbc_paged_r), FUNC(bbc_state::bbc_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xfe30, 0xfe3f).w(FUNC(bbc_state::bbc_romsel_w)); // W: fe30-fe3f 84LS161 Paged ROM selector
map(0xfe80, 0xfe83).mirror(0x08).m(m_i8271, FUNC(i8271_device::map)); // fe80-fe83 8271 FDC Floppy disc controller
map(0xfe84, 0xfe87).mirror(0x08).rw(m_i8271, FUNC(i8271_device::data_r), FUNC(i8271_device::data_w)); // fe84-fe9f 8271 FDC Floppy disc controller
@ -179,7 +180,7 @@ void bbc_state::bbcb_nofdc_mem(address_map &map)
bbc_base(map);
map(0x0000, 0x3fff).bankrw("bank1"); // 0000-3fff Regular RAM
map(0x4000, 0x7fff).bankrw("bank3"); // 4000-7fff Regular RAM
map(0x8000, 0xbfff).bankr("bank4").w(FUNC(bbc_state::bbc_bank4_w)); // 8000-bfff Paged ROM/RAM
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbc_paged_r), FUNC(bbc_state::bbc_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xfe30, 0xfe3f).w(FUNC(bbc_state::bbc_romsel_w)); // W: fe30-fe3f 84LS161 Paged ROM selector
map(0xfe80, 0xfe9f).rw(m_fdc, FUNC(bbc_fdc_slot_device::read), FUNC(bbc_fdc_slot_device::write)); // fe84-fe9f 8271 FDC Floppy disc controller
}
@ -190,8 +191,7 @@ void bbcbp_state::bbcbp_mem(address_map &map)
bbc_base(map);
map(0x0000, 0x2fff).bankrw("bank1"); // 0000-2fff Regular RAM
map(0x3000, 0x7fff).bankrw("bank2"); // 3000-7fff Video/Shadow RAM
map(0x8000, 0xafff).bankr("bank4").w(FUNC(bbc_state::bbcbp_bank4_w)); // 8000-afff Paged ROM or 12K of SWRAM
map(0xb000, 0xbfff).bankr("bank5").w(FUNC(bbc_state::bbcbp_bank5_w)); // b000-bfff Rest of paged ROM area
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbcbp_paged_r), FUNC(bbc_state::bbcbp_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xfe30, 0xfe3f).w(FUNC(bbc_state::bbcbp_romsel_w)); // W: fe30-fe3f 84LS161 Paged ROM selector
map(0xfe80, 0xfe83).w(FUNC(bbc_state::bbcbp_drive_control_w)); // fe80-fe83 1770 FDC Drive control register
map(0xfe84, 0xfe9f).rw(m_wd1770, FUNC(wd1770_device::read), FUNC(wd1770_device::write)); // fe84-fe9f 1770 FDC Floppy disc controller
@ -203,8 +203,7 @@ void bbcbp_state::reutapm_mem(address_map &map)
bbc_base(map);
map(0x0000, 0x2fff).bankrw("bank1"); // 0000-2fff Regular RAM
map(0x3000, 0x7fff).bankrw("bank2"); // 3000-7fff Video/Shadow RAM
map(0x8000, 0xafff).bankr("bank4").w(FUNC(bbc_state::bbcbp_bank4_w)); // 8000-afff Paged ROM or 12K of SWRAM
map(0xb000, 0xbfff).bankr("bank5").w(FUNC(bbc_state::bbcbp_bank5_w)); // b000-bfff Rest of paged ROM area
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbcbp_paged_r), FUNC(bbc_state::bbcbp_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xfe30, 0xfe3f).w(FUNC(bbc_state::bbcbp_romsel_w)); // W: fe30-fe3f 84LS161 Paged ROM selector
}
@ -217,13 +216,12 @@ void bbcbp_state::bbcbp_fetch(address_map &map)
void bbcm_state::bbcm_mem(address_map &map)
{
map(0x0000, 0x2fff).bankrw("bank1"); /* 0000-2fff Regular RAM */
map(0x3000, 0x7fff).bankrw("bank2"); /* 3000-7fff Video/Shadow RAM LYNNE */
map(0x8000, 0x8fff).bankr("bank4").w(FUNC(bbc_state::bbcm_bank4_w)); /* 8000-8fff Paged ROM/RAM or 4K of RAM ANDY */
map(0x9000, 0xbfff).bankr("bank5").w(FUNC(bbc_state::bbcm_bank5_w)); /* 9000-bfff Rest of paged ROM/RAM area */
map(0xc000, 0xffff).rom().region("mos", 0); /* c000-ffff OS ROM */
map(0xc000, 0xdfff).bankr("bank6").w(FUNC(bbc_state::bbcm_bank6_w)); /* c000-dfff OS ROM or 8K of RAM HAZEL */
map(0xfc00, 0xffff).m(m_bankdev, FUNC(address_map_bank_device::amap8)); /* fc00-ffff OS ROM or hardware IO */
map(0x0000, 0x2fff).bankrw("bank1"); // 0000-2fff Regular RAM
map(0x3000, 0x7fff).bankrw("bank2"); // 3000-7fff Video/Shadow RAM LYNNE
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbcm_paged_r), FUNC(bbc_state::bbcm_paged_w)); // 8000-8fff Paged ROM/RAM or 4K of RAM ANDY
map(0xc000, 0xffff).rom().region("mos", 0); // c000-ffff OS ROM
map(0xc000, 0xdfff).rw(FUNC(bbc_state::bbcm_hazel_r), FUNC(bbc_state::bbcm_hazel_w)); // c000-dfff OS ROM or 8K of RAM HAZEL
map(0xfc00, 0xffff).m(m_bankdev, FUNC(address_map_bank_device::amap8)); // fc00-ffff OS ROM or hardware IO
}
@ -709,6 +707,9 @@ static INPUT_PORTS_START(bbc_config)
PORT_CONFSETTING( 0x01, "B&W")
PORT_CONFSETTING( 0x02, "Green")
PORT_CONFSETTING( 0x03, "Amber")
PORT_CONFNAME( 0x04, 0x00, "Econet fitted")
PORT_CONFSETTING( 0x00, DEF_STR( No ))
PORT_CONFSETTING( 0x04, DEF_STR( Yes ))
INPUT_PORTS_END
@ -719,11 +720,14 @@ static INPUT_PORTS_START(bbcb_config)
PORT_CONFSETTING( 0x01, "B&W")
PORT_CONFSETTING( 0x02, "Green")
PORT_CONFSETTING( 0x03, "Amber")
PORT_CONFNAME( 0x0c, 0x00, "Sideways RAM Board")
PORT_CONFNAME( 0x04, 0x00, "Econet fitted")
PORT_CONFSETTING( 0x00, DEF_STR( No ))
PORT_CONFSETTING( 0x04, DEF_STR( Yes ))
PORT_CONFNAME( 0x38, 0x00, "Sideways RAM Board")
PORT_CONFSETTING( 0x00, DEF_STR( None ) )
//PORT_CONFSETTING( 0x04, "Solidisk 128K (fe62)" )
PORT_CONFSETTING( 0x08, "Acorn 64K (fe30)" )
PORT_CONFSETTING( 0x0c, "Acorn 128K (fe30)" )
//PORT_CONFSETTING( 0x08, "Solidisk 128K (fe62)" )
PORT_CONFSETTING( 0x10, "Acorn 64K (fe30)" )
PORT_CONFSETTING( 0x20, "Acorn 128K (fe30)" )
INPUT_PORTS_END
static INPUT_PORTS_START(bbca)
@ -837,7 +841,7 @@ void bbc_state::bbca(machine_config &config)
m_latch->q_out_cb<7>().set(FUNC(bbc_state::shiftlock_led_w));
/* internal ram */
RAM(config, m_ram).set_default_size("16K").set_extra_options("32K");
RAM(config, m_ram).set_default_size("16K").set_extra_options("32K").set_default_value(0xff);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@ -855,7 +859,9 @@ void bbc_state::bbca(machine_config &config)
m_hd6845->set_screen("screen");
m_hd6845->set_show_border_area(false);
m_hd6845->set_char_width(12);
//m_hd6845->set_begin_update_callback(FUNC(bbc_state::crtc_begin_update), this);
m_hd6845->set_update_row_callback(FUNC(bbc_state::crtc_update_row), this);
//m_hd6845->set_reconfigure_callback(FUNC(bbc_state::crtc_reconfig), this);
m_hd6845->out_de_callback().set(FUNC(bbc_state::bbc_de_changed));
m_hd6845->out_hsync_callback().set(FUNC(bbc_state::bbc_hsync_changed));
m_hd6845->out_vsync_callback().set(FUNC(bbc_state::bbc_vsync_changed));
@ -913,7 +919,7 @@ void bbc_state::bbca(machine_config &config)
/* software lists */
SOFTWARE_LIST(config, "cass_ls_a").set_original("bbca_cass");
SOFTWARE_LIST(config, "rom_ls").set_original("bbc_rom").set_filter("A");
SOFTWARE_LIST(config, "rom_ls").set_original("bbc_rom").set_filter("B");
}
@ -1337,7 +1343,7 @@ void bbcm_state::bbcm(machine_config &config)
m_latch->q_out_cb<7>().set(FUNC(bbc_state::shiftlock_led_w));
/* internal ram */
RAM(config, m_ram).set_default_size("128K");
RAM(config, m_ram).set_default_size("128K").set_default_value(0xff);
config.set_default_layout(layout_bbcm);
@ -1357,7 +1363,9 @@ void bbcm_state::bbcm(machine_config &config)
m_hd6845->set_screen("screen");
m_hd6845->set_show_border_area(false);
m_hd6845->set_char_width(12);
//m_hd6845->set_begin_update_callback(FUNC(bbc_state::crtc_begin_update), this);
m_hd6845->set_update_row_callback(FUNC(bbc_state::crtc_update_row), this);
//m_hd6845->set_reconfigure_callback(FUNC(bbc_state::crtc_reconfig), this);
m_hd6845->out_de_callback().set(FUNC(bbc_state::bbc_de_changed));
m_hd6845->out_hsync_callback().set(FUNC(bbc_state::bbc_hsync_changed));
m_hd6845->out_vsync_callback().set(FUNC(bbc_state::bbc_vsync_changed));
@ -1735,28 +1743,25 @@ void bbcm_state::autoc15(machine_config &config)
ROM_START(bbca)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 12 30000 IC52 SPARE SOCKET */
/* rom page 13 34000 IC88 SPARE SOCKET */
/* rom page 14 38000 IC100 SPARE SOCKET */
/* rom page 15 3c000 IC101 BASIC */
ROM_DEFAULT_BIOS("os12b2")
ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" )
ROM_DEFAULT_BIOS("os12")
ROM_SYSTEM_BIOS( 0, "os12", "OS 1.20" )
ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(0))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "os12b1", "OS 1.20 / BASIC1" )
ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(1))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "os10b2", "OS 1.00 / BASIC2" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(2))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(2))
ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(3))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(3))
ROM_SYSTEM_BIOS( 4, "os01b1", "OS 0.10 / BASIC1" )
ROMX_LOAD("os01.rom", 0x40000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(4))
// OS0.1 does not support rom paging, load BASIC into all pages
ROMX_LOAD("basic1.rom", 0x30000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4))
ROM_SYSTEM_BIOS( 1, "os10", "OS 1.00" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(1))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "os09", "OS 0.92")
ROMX_LOAD("os092.rom", 0x40000, 0x4000, CRC(59ef7eb8) SHA1(dca33995c0d008a527efe923d03333394b01022c), ROM_BIOS(2))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(2))
ROM_SYSTEM_BIOS( 3, "os01", "OS 0.10" )
ROMX_LOAD("os01.rom", 0x40000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(3))
/* OS0.1 does not support rom paging, load BASIC into all pages */
ROMX_LOAD("basic1.rom", 0x30000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(3))
ROM_RELOAD( 0x34000, 0x4000 )
ROM_RELOAD( 0x38000, 0x4000 )
ROM_RELOAD( 0x3c000, 0x4000 )
@ -1767,28 +1772,25 @@ ROM_END
ROM_START(bbcb)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 12 30000 IC52 DFS */
/* rom page 13 34000 IC88 SPARE SOCKET */
/* rom page 14 38000 IC100 SPARE SOCKET */
/* rom page 15 3c000 IC101 BASIC */
ROM_DEFAULT_BIOS("os12b2")
ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" )
ROM_DEFAULT_BIOS("os12")
ROM_SYSTEM_BIOS( 0, "os12", "OS 1.20" )
ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(0))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "os12b1", "OS 1.20 / BASIC1" )
ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(1))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "os10b2", "OS 1.00 / BASIC2" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(2))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(2))
ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(3))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(3))
ROM_SYSTEM_BIOS( 4, "os01b1", "OS 0.10 / BASIC1" )
ROMX_LOAD("os01.rom", 0x40000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(4))
// OS0.1 does not support rom paging, load BASIC into all pages
ROMX_LOAD("basic1.rom", 0x00000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4))
ROM_SYSTEM_BIOS( 1, "os10", "OS 1.00" )
ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(1))
ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "os09", "OS 0.92")
ROMX_LOAD("os092.rom", 0x40000, 0x4000, CRC(59ef7eb8) SHA1(dca33995c0d008a527efe923d03333394b01022c), ROM_BIOS(2))
ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(2))
ROM_SYSTEM_BIOS( 3, "os01", "OS 0.10" )
ROMX_LOAD("os01.rom", 0x40000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(3))
/* OS0.1 does not support rom paging, load BASIC into all pages */
ROMX_LOAD("basic1.rom", 0x00000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(3))
ROM_RELOAD( 0x04000, 0x4000 )
ROM_RELOAD( 0x08000, 0x4000 )
ROM_RELOAD( 0x0c000, 0x4000 )
@ -1804,7 +1806,7 @@ ROM_END
ROM_START(bbcb_de)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 12 30000 IC72 DFS */
/* rom page 13 34000 IC73 SPARE SOCKET */
/* rom page 14 38000 IC74 SPARE SOCKET */
@ -1822,7 +1824,7 @@ ROM_END
ROM_START(bbcb_us)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 12 30000 IC72 VIEW2.1 */
/* rom page 13 34000 IC73 US DNFS */
/* rom page 14 38000 IC74 US BASIC */
@ -1841,27 +1843,15 @@ ROM_END
ROM_START(torchf)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 12 30000 IC52 BASIC */
/* rom page 13 34000 IC88 DNFS */
/* rom page 14 38000 IC100 CPN */
/* rom page 14 38000 IC100 CPN (inserted by device) */
/* rom page 15 3c000 IC101 SPARE SOCKET */
ROM_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d)) /* os */
ROM_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d))
ROM_LOAD("basic2.rom", 0x30000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281))
ROM_LOAD("dnfs120-201666.rom", 0x34000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232))
ROM_DEFAULT_BIOS("mcp120cbl")
ROM_SYSTEM_BIOS( 0, "mcp120cbl", "MCP120CBL" )
ROMX_LOAD("mcp120cbl.rom", 0x38000, 0x4000, CRC(851d0879) SHA1(2e54ef15692ba7dd9fcfd1ef0d660464a772b156), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "mcp101ci", "MCP101CI" )
ROMX_LOAD("mcp101ci.rom", 0x38000, 0x4000, NO_DUMP, ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "mcp041cbl", "MCP041CBL" )
ROMX_LOAD("mcp041cbl.rom", 0x38000, 0x4000, CRC(b36f07f4) SHA1(bd53f09bf73357845a6f97df1ee9e5aea5cdca90), ROM_BIOS(2))
ROM_SYSTEM_BIOS( 3, "cpn071", "CPN71+" )
ROMX_LOAD("cpn071.rom", 0x38000, 0x2000, CRC(fcb1bdc8) SHA1(756e22f6d76eb26206765f92c78c7152944102b6), ROM_BIOS(3))
ROM_RELOAD( 0x3a000, 0x2000 )
ROM_REGION(0x4000, "mos", 0)
ROM_COPY("swr", 0x40000, 0, 0x4000)
@ -1875,7 +1865,7 @@ ROM_END
ROM_START(bbcbp)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_LOAD("bpos2.ic71", 0x3c000, 0x8000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2))
/* rom page 0 00000 SWRAM (B+ 128K only) */
/* rom page 1 04000 SWRAM (B+ 128K only) */
@ -1908,7 +1898,7 @@ ROM_END
ROM_START(abc110)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos200")
ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" )
ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(0))
@ -1953,7 +1943,7 @@ ROM_END
ROM_START(acw443)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos210")
ROM_SYSTEM_BIOS( 0, "mos210", "MOS2.10" )
ROMX_LOAD("acwmos210.rom", 0x40000, 0x4000, CRC(168d6753) SHA1(dcd01d8f5f6e0cd92ae626ca52a3db71abf5d282), ROM_BIOS(0))
@ -1990,7 +1980,7 @@ ROM_END
ROM_START(reutapm)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 0 00000 */
/* rom page 1 04000 */
/* rom page 2 08000 32K IN PAGE 3 */
@ -2016,7 +2006,7 @@ ROM_END
ROM_START(econx25)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_LOAD("0246,201_01_x25os.rom", 0x40000, 0x4000, CRC(8b652337) SHA1(6a5c7ace255c8ac96c983d5ba67084fbd71ff61e))
/* rom page 0 00000 */
/* rom page 1 04000 IC71 selectable with link S13 */
@ -2045,7 +2035,7 @@ ROM_END
ROM_START(bbcm)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos320")
ROM_SYSTEM_BIOS( 0, "mos320", "Original MOS 3.20" )
ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0f747ebe) SHA1(eacacbec3892dc4809ad5800e6c8299ff9eb528f), ROM_BIOS(0))
@ -2086,7 +2076,7 @@ ROM_END
ROM_START(bbcmaiv)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos320")
ROM_SYSTEM_BIOS( 0, "mos320", "MOS 3.20" )
ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0f747ebe) SHA1(eacacbec3892dc4809ad5800e6c8299ff9eb528f), ROM_BIOS(0))
@ -2120,7 +2110,7 @@ ROM_END
ROM_START(bbcmet)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos400")
ROM_SYSTEM_BIOS( 0, "mos400", "Econet MOS 4.00" )
ROMX_LOAD("mos400.ic24", 0x30000, 0x10000, CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(0))
@ -2154,7 +2144,7 @@ ROM_END
ROM_START(bbcmarm)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos320")
ROM_SYSTEM_BIOS( 0, "mos320", "Original MOS 3.20" )
ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0f747ebe) SHA1(eacacbec3892dc4809ad5800e6c8299ff9eb528f), ROM_BIOS(0))
@ -2176,7 +2166,6 @@ ROM_START(bbcmarm)
/* 34000 rom 13 IC24 ADFS */
/* 38000 rom 14 IC24 View + MOS code */
/* 3c000 rom 15 IC24 Terminal + Tube host + CFS */
//ROM_LOAD("anfs425-2201351.rom", 0x20000, 0x4000, CRC(c2a6655e) SHA1(14f75d36ffe9af14aaac42df55b4fe3729ba75cf))
ROM_REGION(0x4000, "mos", 0)
ROM_COPY("swr", 0x40000, 0, 0x4000)
@ -2188,7 +2177,7 @@ ROM_END
ROM_START(bbcmc)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos510")
ROM_SYSTEM_BIOS( 0, "mos510", "Enhanced MOS 5.10" )
ROMX_LOAD("mos510.ic49", 0x30000, 0x10000, BAD_DUMP CRC(9a2a6086) SHA1(094ab37b0b6437c4f1653eaa0602ef102737adb6), ROM_BIOS(0)) // Merged individual ROM bank dumps
@ -2219,7 +2208,7 @@ ROM_END
ROM_START(bbcmc_ar)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos511i")
ROM_SYSTEM_BIOS( 0, "mos511i", "International MOS 5.11i" )
ROMX_LOAD("mos511.ic49", 0x30000, 0x10000, BAD_DUMP CRC(8708803c) SHA1(d2170c8b9b536f3ad84a4a603a7fe712500cc751), ROM_BIOS(0)) // Merged individual ROM bank dumps
@ -2250,7 +2239,7 @@ ROM_END
ROM_START(pro128s)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos510o")
ROM_SYSTEM_BIOS(0, "mos510o", "Olivetti MOS 5.10")
ROMX_LOAD("mos510o.ic49", 0x30000, 0x10000, CRC(c16858d3) SHA1(ad231ed21a55e493b553703285530d1cacd3de7a), ROM_BIOS(0)) // System ROM 0258,211-01
@ -2279,7 +2268,7 @@ ROM_END
ROM_START(autoc15)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos510i")
ROM_SYSTEM_BIOS(0, "mos510i", "Swedish MOS 5.10i")
ROMX_LOAD("swedish_mega_29-1.ic49", 0x20000, 0x20000, CRC(67512992) SHA1(5d04b6e53a3a75af22ab10c652cceb9a63b23a6d), ROM_BIOS(0))
@ -2312,7 +2301,7 @@ ROM_END
ROM_START(discmon)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos320")
ROM_SYSTEM_BIOS(0, "mos320", "Original MOS 3.20")
ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0f747ebe) SHA1(eacacbec3892dc4809ad5800e6c8299ff9eb528f), ROM_BIOS(0))
@ -2346,7 +2335,7 @@ ROM_END
ROM_START(discmate)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_DEFAULT_BIOS("mos320")
ROM_SYSTEM_BIOS(0, "mos320", "Original MOS 3.20")
ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0f747ebe) SHA1(eacacbec3892dc4809ad5800e6c8299ff9eb528f), ROM_BIOS(0))
@ -2380,7 +2369,7 @@ ROM_END
ROM_START(cfa3000)
ROM_REGION(0x44000, "swr", 0) /* Sideways ROMs */
ROM_REGION(0x44000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
ROM_LOAD("cfa3000_3_4_iss10.3.ic41", 0x10000, 0x08000, CRC(ecb385ab) SHA1(eafa9b34cb1cf63790f74332bb7d85ee356b6973))
ROM_LOAD("cfa3000_sm_iss10.3.ic37", 0x18000, 0x08000, CRC(c07aee5f) SHA1(1994e3755dc15d1ea7e105bc19cd57893b719779))
ROM_LOAD("acorn_mos,tinsley_64k,iss10.3.ic24", 0x20000, 0x10000, CRC(4413c3ee) SHA1(76d0462b4dabe2461010fce2341570ff3d606d54))

View File

@ -100,9 +100,6 @@ public:
, m_bank1(*this, "bank1")
, m_bank2(*this, "bank2")
, m_bank3(*this, "bank3")
, m_bank4(*this, "bank4")
, m_bank5(*this, "bank5")
, m_bank6(*this, "bank6")
, m_bankdev(*this, "bankdev")
, m_bbcconfig(*this, "BBCCONFIG")
{ }
@ -118,18 +115,20 @@ public:
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE8_MEMBER(bbc_romsel_w);
DECLARE_WRITE8_MEMBER(bbc_bank4_w);
DECLARE_READ8_MEMBER(bbc_paged_r);
DECLARE_WRITE8_MEMBER(bbc_paged_w);
DECLARE_READ8_MEMBER(bbcbp_fetch_r);
DECLARE_WRITE8_MEMBER(bbcbp_romsel_w);
DECLARE_WRITE8_MEMBER(bbcbp_bank4_w);
DECLARE_WRITE8_MEMBER(bbcbp_bank5_w);
DECLARE_READ8_MEMBER(bbcbp_paged_r);
DECLARE_WRITE8_MEMBER(bbcbp_paged_w);
DECLARE_READ8_MEMBER(bbcm_fetch_r);
DECLARE_READ8_MEMBER(bbcm_acccon_r);
DECLARE_WRITE8_MEMBER(bbcm_acccon_w);
DECLARE_WRITE8_MEMBER(bbcm_romsel_w);
DECLARE_WRITE8_MEMBER(bbcm_bank4_w);
DECLARE_WRITE8_MEMBER(bbcm_bank5_w);
DECLARE_WRITE8_MEMBER(bbcm_bank6_w);
DECLARE_READ8_MEMBER(bbcm_paged_r);
DECLARE_WRITE8_MEMBER(bbcm_paged_w);
DECLARE_READ8_MEMBER(bbcm_hazel_r);
DECLARE_WRITE8_MEMBER(bbcm_hazel_w);
DECLARE_READ8_MEMBER(bbcm_tube_r);
DECLARE_WRITE8_MEMBER(bbcm_tube_w);
DECLARE_WRITE8_MEMBER(bbcbp_drive_control_w);
@ -182,7 +181,9 @@ public:
int get_analogue_input(int channel_number);
void upd7002_eoc(int data);
void setup_banks(memory_bank *membank, uint32_t shift);
std::string get_rom_name(uint8_t* header);
void insert_device_rom(memory_region *rom);
void setup_device_roms();
image_init_result load_rom16(device_image_interface &image, generic_slot_device *slot);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom0) { return load_rom16(image, m_rom[0]); }
@ -285,21 +286,14 @@ protected:
required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm
optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm
optional_memory_bank m_bank3; // bbca bbcb
required_memory_bank m_bank4; // bbca bbcb bbcbp bbcbp128 bbcm
optional_memory_bank m_bank5; // bbcbp bbcbp128 bbcm
required_memory_bank m_bank6; // bbca bbcb bbcbp bbcbp128 bbcm
optional_device<address_map_bank_device> m_bankdev; // bbcm
optional_ioport m_bbcconfig;
int m_monitortype; // monitor type (colour, green, amber)
int m_swramtype; // this stores the setting for the SWRAM type being used
int m_swrbank; // This is the latch that holds the sideways ROM bank to read
bool m_swrbank_ram; // Does ROM bank contain RAM
int m_paged_ram; // BBC B+ memory handling
int m_vdusel; // BBC B+ memory handling
bool m_lk18_ic41_paged_rom; // BBC Master Paged ROM/RAM select IC41
bool m_lk19_ic37_paged_rom; // BBC Master Paged ROM/RAM select IC37

View File

@ -32,6 +32,37 @@ TIMER_CALLBACK_MEMBER(bbc_state::reset_timer_cb)
****************************************/
WRITE8_MEMBER(bbc_state::bbc_romsel_w)
{
if (m_swramtype == 0)
{
/* no sideways expansion board fitted so address only the 4 on board ROM sockets */
m_swrbank = (data & 0x03) | 0x0c;
}
else
{
/* expansion board fitted so address all 16 ROM sockets */
m_swrbank = data & 0x0f;
}
}
READ8_MEMBER(bbc_state::bbc_paged_r)
{
uint8_t data;
std::string region_tag;
if (m_rom[m_swrbank] && memregion(region_tag.assign(m_rom[m_swrbank]->tag()).append(GENERIC_ROM_REGION_TAG).c_str()))
{
data = m_rom[m_swrbank]->read_rom(space, offset);
}
else
{
data = m_region_swr->base()[offset + (m_swrbank << 14)];
}
return data;
}
WRITE8_MEMBER(bbc_state::bbc_paged_w)
{
static const unsigned short swramtype[4][16] = {
// TODO: move sideways ROM/RAM boards to slot devices
@ -41,27 +72,9 @@ WRITE8_MEMBER(bbc_state::bbc_romsel_w)
{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1 }, // 3: 128K (banks 8 to 15) for Acorn sideways ram FE30 bank latch
};
if (m_swramtype == 0)
if (swramtype[m_swramtype][m_swrbank])
{
/* no sideways expansion board fitted so address only the 4 on board ROM sockets */
m_swrbank = (data & 0x03) | 0x0c;
m_swrbank_ram = false;
}
else
{
/* expansion board fitted so address all 16 ROM sockets and check if RAM fitted */
m_swrbank = data & 0x0f;
m_swrbank_ram = swramtype[m_swramtype][m_swrbank] ? true : false;
}
m_bank4->set_entry(m_swrbank);
}
WRITE8_MEMBER(bbc_state::bbc_bank4_w)
{
if (m_swrbank_ram)
{
m_region_swr->base()[(m_swrbank << 14) + offset] = data;
m_region_swr->base()[offset + (m_swrbank << 14)] = data;
}
}
@ -108,9 +121,6 @@ READ8_MEMBER(bbc_state::bbcbp_fetch_r)
WRITE8_MEMBER(bbc_state::bbcbp_romsel_w)
{
/* the BBC Model B+ 128K has extra RAM mapped in replacing the ROM banks 0,1,c and d. */
static const unsigned short swram_banks[16] = { 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0 };
/* the BBC Model B+ addresses all 16 ROM sockets and extra 12K of RAM at 0x8000 and 20K of shadow RAM at 0x3000 */
switch (offset & 0x07)
{
@ -118,28 +128,6 @@ WRITE8_MEMBER(bbc_state::bbcbp_romsel_w)
m_paged_ram = BIT(data, 7);
m_swrbank = data & 0x0f;
if (m_ram->size() == 128 * 1024)
{
m_swrbank_ram = swram_banks[m_swrbank] ? true : false;
}
else
{
m_swrbank_ram = false;
}
if (m_paged_ram)
{
/* if paged RAM then set 0x8000 to 0xafff to read from the RAM 8000 to 0xafff */
m_bank4->set_entry(0x10);
}
else
{
/* if paged ROM then set the ROM to be read from 0x8000 to 0xafff */
m_bank4->set_entry(m_swrbank);
}
/* set the ROM to be read from 0xb000 to 0xbfff */
m_bank5->set_entry(m_swrbank);
break;
case 0x04:
@ -150,26 +138,45 @@ WRITE8_MEMBER(bbc_state::bbcbp_romsel_w)
}
}
WRITE8_MEMBER(bbc_state::bbcbp_bank4_w)
READ8_MEMBER(bbc_state::bbcbp_paged_r)
{
if (m_paged_ram)
uint8_t data;
std::string region_tag;
if (m_paged_ram && offset < 0x3000)
{
data = m_ram->pointer()[offset + 0x8000];
}
else
{
if (m_rom[m_swrbank] && memregion(region_tag.assign(m_rom[m_swrbank]->tag()).append(GENERIC_ROM_REGION_TAG).c_str()))
{
data = m_rom[m_swrbank]->read_rom(space, offset);
}
else
{
data = m_region_swr->base()[offset + (m_swrbank << 14)];
}
}
return data;
}
WRITE8_MEMBER(bbc_state::bbcbp_paged_w)
{
/* the BBC Model B+ 128K has extra RAM mapped in replacing the ROM banks 0,1,c and d. */
static const unsigned short swram_banks[16] = { 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0 };
if (m_paged_ram && offset < 0x3000)
{
m_ram->pointer()[offset + 0x8000] = data;
}
else if (m_swrbank_ram)
else if (m_ram->size() == 128 * 1024 && swram_banks[m_swrbank])
{
m_region_swr->base()[offset + (m_swrbank << 14)] = data;
}
}
WRITE8_MEMBER(bbc_state::bbcbp_bank5_w)
{
if (m_swrbank_ram)
{
m_region_swr->base()[offset + (m_swrbank << 14) + 0x3000] = data;
}
}
/****************************************
BBC Master memory handling functions
@ -239,16 +246,6 @@ WRITE8_MEMBER(bbc_state::bbcm_acccon_w)
/* Bit IRR causes Interrupt Request. */
m_irqs->in_w<6>(m_acccon_irr);
/* Bit Y causes 8K of RAM (HAZEL) to be overlayed on the MOS VDU drivers. */
if (m_acccon_y)
{
m_bank6->set_base(m_ram->pointer() + 0x9000);
}
else
{
m_bank6->set_base(m_region_mos->base());
}
/* Bit D causes the CRT controller to display the contents of LYNNE. */
setvideoshadow(m_acccon_d);
@ -272,51 +269,61 @@ WRITE8_MEMBER(bbc_state::bbcm_romsel_w)
{
m_paged_ram = (data & 0x80) >> 7;
m_swrbank = data & 0x0f;
if ((!m_lk19_ic37_paged_rom && (m_swrbank == 4 || m_swrbank == 5)) || (!m_lk18_ic41_paged_rom && (m_swrbank == 6 || m_swrbank == 7)))
{
/* links are set for RAM so make read/write */
m_swrbank_ram = true;
}
else
{
/* links are set for ROM so make read-only */
m_swrbank_ram = false;
}
if (m_paged_ram)
{
m_bank4->set_entry(0x10);
m_bank5->set_entry(m_swrbank);
}
else
{
m_bank4->set_entry(m_swrbank);
m_bank5->set_entry(m_swrbank);
}
}
WRITE8_MEMBER(bbc_state::bbcm_bank4_w)
READ8_MEMBER(bbc_state::bbcm_paged_r)
{
if (m_paged_ram)
uint8_t data;
std::string region_tag;
if (m_paged_ram && offset < 0x1000)
{
data = m_ram->pointer()[offset + 0x8000];
}
else
{
if (m_rom[m_swrbank] && memregion(region_tag.assign(m_rom[m_swrbank]->tag()).append(GENERIC_ROM_REGION_TAG).c_str()))
{
data = m_rom[m_swrbank]->read_rom(space, offset);
}
else
{
data = m_region_swr->base()[offset + (m_swrbank << 14)];
}
}
return data;
}
WRITE8_MEMBER(bbc_state::bbcm_paged_w)
{
if (m_paged_ram && offset < 0x1000)
{
m_ram->pointer()[offset + 0x8000] = data;
}
else if (m_swrbank_ram)
else if ((!m_lk19_ic37_paged_rom && (m_swrbank == 4 || m_swrbank == 5)) || (!m_lk18_ic41_paged_rom && (m_swrbank == 6 || m_swrbank == 7)))
{
m_region_swr->base()[offset + (m_swrbank << 14)] = data;
}
}
WRITE8_MEMBER(bbc_state::bbcm_bank5_w)
READ8_MEMBER(bbc_state::bbcm_hazel_r)
{
if (m_swrbank_ram)
uint8_t data;
if (m_acccon_y)
{
m_region_swr->base()[offset + (m_swrbank << 14) + 0x1000] = data;
data = m_ram->pointer()[offset + 0x9000];
}
else
{
data = m_region_mos->base()[offset];
}
return data;
}
WRITE8_MEMBER(bbc_state::bbcm_bank6_w)
WRITE8_MEMBER(bbc_state::bbcm_hazel_w)
{
if (m_acccon_y)
{
@ -1155,7 +1162,7 @@ image_init_result bbc_state::load_rom16(device_image_interface &image, generic_s
uint32_t size = slot->common_get_size("rom");
// socket accepts 8K and 16K ROM only
if (size != 0x2000 && size != 0x4000)
if (size > 0x4000)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "ROM socket accepts 16K/8K only");
return image_init_result::FAIL;
@ -1165,7 +1172,7 @@ image_init_result bbc_state::load_rom16(device_image_interface &image, generic_s
slot->common_load_rom(slot->get_rom_base(), size, "rom");
uint8_t *crt = slot->get_rom_base();
if (size == 0x2000)
if (size <= 0x2000)
{
/* mirror 8K ROMs */
memcpy(crt + 0x2000, crt, 0x2000);
@ -1179,7 +1186,7 @@ image_init_result bbc_state::load_rom32(device_image_interface &image, generic_s
uint32_t size = slot->common_get_size("rom");
// socket accepts 32K,16K and 8K ROM only
if (size != 0x8000 && size != 0x4000 && size != 0x2000)
if (size > 0x8000)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "ROM socket accepts 32K/16K/8K only");
return image_init_result::FAIL;
@ -1189,14 +1196,14 @@ image_init_result bbc_state::load_rom32(device_image_interface &image, generic_s
slot->common_load_rom(slot->get_rom_base(), size, "rom");
uint8_t *crt = slot->get_rom_base();
if (size == 0x2000)
if (size <= 0x2000)
{
/* mirror 8K ROMs */
memcpy(crt + 0x2000, crt, 0x2000);
memcpy(crt + 0x4000, crt, 0x2000);
memcpy(crt + 0x6000, crt, 0x2000);
}
else if (size == 0x4000)
else if (size <= 0x4000)
{
/* mirror 16K ROMs */
memcpy(crt + 0x4000, crt, 0x4000);
@ -1317,34 +1324,106 @@ void bbc_state::init_cfa()
/**************************************
Setup pointers for rom/cartridge slots
Helpers for ROM management
***************************************/
void bbc_state::setup_banks(memory_bank *membank, uint32_t shift)
std::string bbc_state::get_rom_name(uint8_t* header)
{
std::string title = "";
/* check for valid copyright */
uint8_t offset = header[7];
if (header[offset + 0] == 0 && header[offset + 1] == '(' && header[offset + 2] == 'C' && header[offset + 3] == ')')
{
/* extract ROM title from header*/
for (int pos = 9; pos < header[7]; pos++)
title.append(1, header[pos] == 0x00 ? 0x20 : header[pos]);
}
return title;
}
void bbc_state::insert_device_rom(memory_region *rom)
{
std::string region_tag;
if (rom == nullptr) return;
/* check whether ROM already present */
for (int bank = 15; bank >= 0; bank--)
{
/* compare first 1K of bank with what we want to insert */
if (!memcmp(rom->base(), m_region_swr->base() + (bank * 0x4000), 0x400))
{
osd_printf_verbose("Found '%s' in romslot%d\n", get_rom_name(rom->base()).c_str(), bank);
return;
}
}
/* iterate over romslots until an empty socket is found */
for (int bank = 15; bank >= 0; bank--)
{
/* if bank has socket and is empty */
if (m_rom[bank] && !memregion(region_tag.assign(m_rom[bank]->tag()).append(GENERIC_ROM_REGION_TAG).c_str()))
{
uint8_t *swr = m_region_swr->base() + (bank * 0x4000);
switch (rom->bytes())
{
case 0x8000:
/* 32K (or 2x16K) ROM, check whether ROM exists in this and next bank */
if (swr[0x0006] == 0xff && swr[0x4006] == 0xff)
{
memcpy(m_region_swr->base() + (bank * 0x4000), rom->base(), 0x8000);
osd_printf_verbose("Inserting '%s' into romslot%d\n", get_rom_name(rom->base() + 0x4000).c_str(), bank + 1);
osd_printf_verbose("Inserting '%s' into romslot%d\n", get_rom_name(rom->base()).c_str(), bank);
return;
}
break;
case 0x4000:
case 0x2000:
/* 16/8K ROM, check whether ROM exists in this bank */
if (swr[0x0006] == 0xff)
{
memcpy(m_region_swr->base() + (bank * 0x4000), rom->base(), 0x4000);
osd_printf_verbose("Inserting '%s' into romslot%d\n", get_rom_name(rom->base()).c_str(), bank);
return;
}
break;
}
}
}
/* unable to insert ROM */
fatalerror("Unable to insert '%s'. Add a sideways ROM board for more sockets.\n", get_rom_name(rom->base()).c_str());
}
void bbc_state::setup_device_roms()
{
std::string region_tag;
memory_region *rom_region;
device_t* exp_device;
device_t* ext_device;
/* insert ROM for FDC devices (BBC Model B only), always place into romslot 12 */
if (m_fdc && (exp_device = dynamic_cast<device_t*>(m_fdc->get_card_device())))
{
if (exp_device->memregion("dfs_rom"))
{
memcpy(m_region_swr->base() + 0x30000, exp_device->memregion("dfs_rom")->base(), exp_device->memregion("dfs_rom")->bytes());
}
}
/* configure romslots */
for (int i = 0; i < 16; i++)
{
membank->configure_entry(i, m_region_swr->base() + (i * 0x4000) + shift);
/* TODO: expansion devices currently use machine().root_device(), add method to slot interfaces to return pointer to memregion("rom") */
//if (m_fdc->rom_region[i])
//{
// membank->configure_entry(i, m_fdc->rom_region[i] + shift);
//}
/* romslots populated by user override expansion devices */
if (m_rom[i] && (rom_region = memregion(region_tag.assign(m_rom[i]->tag()).append(GENERIC_ROM_REGION_TAG).c_str())))
{
switch (rom_region->bytes())
{
case 0x4000: /* 16K socket */
membank->configure_entry(i, rom_region->base() + shift);
memcpy(m_region_swr->base() + (i * 0x4000), rom_region->base(), rom_region->bytes());
break;
case 0x8000: /* 32K socket */
membank->configure_entry(i++, rom_region->base() + shift);
membank->configure_entry(i, rom_region->base() + shift + 0x4000);
memcpy(m_region_swr->base() + (i * 0x4000), rom_region->base(), rom_region->bytes());
i++;
break;
}
}
@ -1355,10 +1434,95 @@ void bbc_state::setup_banks(memory_bank *membank, uint32_t shift)
{
if (m_cart[i] && (rom_region = memregion(region_tag.assign(m_cart[i]->tag()).append(GENERIC_ROM_REGION_TAG).c_str())))
{
membank->configure_entry(i * 2, rom_region->base() + shift);
membank->configure_entry(i * 2 + 1, rom_region->base() + shift + 0x4000);
memcpy(m_region_swr->base() + (i * 0x8000), rom_region->base(), rom_region->bytes());
}
}
/* insert ROM(s) for Expansion port devices (Compact only), with additional Mertec slots */
if (m_exp && (ext_device = dynamic_cast<device_t*>(m_exp->get_card_device())))
{
/* only the Mertec device has ext_rom region and should be placed in romslots 0,1 */
if (ext_device->memregion("ext_rom"))
{
memcpy(m_region_swr->base(), ext_device->memregion("ext_rom")->base(), ext_device->memregion("ext_rom")->bytes());
}
bbc_analogue_slot_device* analogue_port = ext_device->subdevice<bbc_analogue_slot_device>("analogue");
if (analogue_port && (exp_device = dynamic_cast<device_t*>(analogue_port->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
bbc_userport_slot_device* user_port = ext_device->subdevice<bbc_userport_slot_device>("userport");
if (user_port && (exp_device = dynamic_cast<device_t*>(user_port->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
bbc_1mhzbus_slot_device* exp_port = ext_device->subdevice<bbc_1mhzbus_slot_device>("2mhzbus");
while (exp_port != nullptr)
{
if ((exp_device = dynamic_cast<device_t*>(exp_port->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
exp_port = exp_device->subdevice<bbc_1mhzbus_slot_device>("1mhzbus");
}
else
{
exp_port = nullptr;
}
}
}
/* insert ROM(s) for 1MHz bus devices, with pass-through */
if (m_1mhzbus)
{
bbc_1mhzbus_slot_device* exp_port = m_1mhzbus;
while (exp_port != nullptr)
{
if ((exp_device = dynamic_cast<device_t*>(exp_port->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
exp_port = exp_device->subdevice<bbc_1mhzbus_slot_device>("1mhzbus");
}
else
{
exp_port = nullptr;
}
}
}
/* insert ROM(s) for Tube devices */
if (m_tube && (exp_device = dynamic_cast<device_t*>(m_tube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
if (m_intube && (exp_device = dynamic_cast<device_t*>(m_intube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
if (m_extube && (exp_device = dynamic_cast<device_t*>(m_extube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
/* insert ROM(s) for Userport devices */
if (m_userport && (exp_device = dynamic_cast<device_t*>(m_userport->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
/* insert ROM(s) for Analogue port devices */
if (m_analog && (exp_device = dynamic_cast<device_t*>(m_analog->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
/* list all inserted ROMs */
for (int i = 15; i >= 0; i--)
{
osd_printf_info("ROM %X : %s\n", i, get_rom_name(m_region_swr->base() + (i * 0x4000)).c_str());
}
}
@ -1368,12 +1532,12 @@ void bbc_state::setup_banks(memory_bank *membank, uint32_t shift)
void bbc_state::machine_start()
{
setup_banks(m_bank4, 0x0000);
setup_device_roms();
}
void bbc_state::machine_reset()
{
m_swramtype = (m_bbcconfig.read_safe(0) & 0x0c) >> 2;
m_swramtype = (m_bbcconfig.read_safe(0) & 0x38) >> 3;
/* bank 1 regular lower RAM from 0000 to 3fff */
m_bank1->set_base(m_ram->pointer());
/* bank 3 regular higher RAM from 4000 to 7fff */
@ -1388,9 +1552,11 @@ void bbc_state::machine_reset()
m_bank3->set_base(m_ram->pointer() + 0x4000);
}
m_bank4->set_entry(0);
/* bank 7 OS ROM from c000 to ffff */
m_bank6->set_base(m_region_mos->base());
/* install econet hardware */
if (m_bbcconfig.read_safe(0) & 0x04)
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xfea0, 0xfebf, read8_delegate(FUNC(mc6854_device::read), m_adlc.target()), write8_delegate(FUNC(mc6854_device::write), m_adlc.target()));
else
m_maincpu->space(AS_PROGRAM).install_read_handler(0xfea0, 0xfebf, read8_delegate(FUNC(bbc_state::bbc_fe_r), this));
/* power-on reset timer, should produce "boo...beep" startup sound before sn76496 is initialised */
//m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
@ -1400,11 +1566,7 @@ void bbc_state::machine_reset()
void bbcbp_state::machine_start()
{
bbc_state::machine_start();
/* additional bank for paged ram */
m_bank4->configure_entry(16, m_ram->pointer() + 0x8000);
setup_banks(m_bank5, 0x3000);
setup_device_roms();
}
void bbcbp_state::machine_reset()
@ -1413,20 +1575,12 @@ void bbcbp_state::machine_reset()
m_bank1->set_base(m_ram->pointer());
/* bank 2 screen/shadow RAM from 3000 to 7fff */
m_bank2->set_base(m_ram->pointer() + 0x3000);
m_bank4->set_entry(0);
m_bank5->set_entry(0);
/* bank 6 OS ROM from c000 to ffff */
m_bank6->set_base(m_region_mos->base());
}
void bbcm_state::machine_start()
{
bbc_state::machine_start();
/* additional bank for paged ram */
m_bank4->configure_entry(16, m_ram->pointer() + 0x8000);
setup_banks(m_bank5, 0x1000);
setup_device_roms();
output().set_value("power_led", 0);
}
@ -1437,10 +1591,6 @@ void bbcm_state::machine_reset()
m_bank1->set_base(m_ram->pointer());
/* bank 2 screen/shadow RAM from 3000 to 7fff */
m_bank2->set_base(m_ram->pointer() + 0x3000);
m_bank4->set_entry(0);
m_bank5->set_entry(0);
/* bank 6 OS ROM from c000 to ffff */
m_bank6->set_base(m_region_mos->base());
m_bankdev->set_bank(0);
}