New NOT WORKING machine

=======================
BT Merlin M2105  [Nigel Barnes]
This commit is contained in:
Nigel Barnes 2016-07-16 21:21:50 +01:00
parent 4345b83f37
commit e7b79b1b52
9 changed files with 431 additions and 110 deletions

View File

@ -570,6 +570,8 @@ if (BUSES["ECONET"]~=null) then
MAME_DIR .. "src/devices/bus/econet/econet.h", MAME_DIR .. "src/devices/bus/econet/econet.h",
MAME_DIR .. "src/devices/bus/econet/e01.cpp", MAME_DIR .. "src/devices/bus/econet/e01.cpp",
MAME_DIR .. "src/devices/bus/econet/e01.h", MAME_DIR .. "src/devices/bus/econet/e01.h",
MAME_DIR .. "src/devices/bus/econet/ebridge.cpp",
MAME_DIR .. "src/devices/bus/econet/ebridge.h",
} }
end end
@ -583,6 +585,8 @@ if (BUSES["ELECTRON"]~=null) then
files { files {
MAME_DIR .. "src/devices/bus/electron/exp.cpp", MAME_DIR .. "src/devices/bus/electron/exp.cpp",
MAME_DIR .. "src/devices/bus/electron/exp.h", MAME_DIR .. "src/devices/bus/electron/exp.h",
MAME_DIR .. "src/devices/bus/electron/m2105.cpp",
MAME_DIR .. "src/devices/bus/electron/m2105.h",
} }
end end

View File

@ -32,7 +32,7 @@ device_electron_expansion_interface::device_electron_expansion_interface(const m
//------------------------------------------------- //-------------------------------------------------
// ~device_electron_expansion_card_interface - destructor // ~device_electron_expansion_interface - destructor
//------------------------------------------------- //-------------------------------------------------
device_electron_expansion_interface::~device_electron_expansion_interface() device_electron_expansion_interface::~device_electron_expansion_interface()
@ -49,8 +49,22 @@ device_electron_expansion_interface::~device_electron_expansion_interface()
//------------------------------------------------- //-------------------------------------------------
electron_expansion_slot_device::electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : electron_expansion_slot_device::electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, ELECTRON_EXPANSION_SLOT, "Expansion port", tag, owner, clock, "electron_expansion_slot", __FILE__), device_t(mconfig, ELECTRON_EXPANSION_SLOT, "Acorn Electron Expansion port", tag, owner, clock, "electron_expansion_slot", __FILE__),
device_slot_interface(mconfig, *this) device_slot_interface(mconfig, *this),
m_io(nullptr),
m_card(nullptr),
m_irq_handler(*this),
m_nmi_handler(*this),
m_reset_handler(*this)
{
}
//-------------------------------------------------
// expansion_slot_device - destructor
//-------------------------------------------------
electron_expansion_slot_device::~electron_expansion_slot_device()
{ {
} }
@ -61,10 +75,12 @@ electron_expansion_slot_device::electron_expansion_slot_device(const machine_con
void electron_expansion_slot_device::device_start() void electron_expansion_slot_device::device_start()
{ {
m_card = dynamic_cast<device_electron_expansion_interface *>(get_card_device()); // resolve callbacks
m_irq_handler.resolve_safe();
m_nmi_handler.resolve_safe();
m_reset_handler.resolve_safe();
} }
//------------------------------------------------- //-------------------------------------------------
// device_reset - device-specific reset // device_reset - device-specific reset
//------------------------------------------------- //-------------------------------------------------
@ -77,6 +93,15 @@ void electron_expansion_slot_device::device_reset()
} }
} }
//-------------------------------------------------
// set_io_space - set address space we are attached to
//-------------------------------------------------
void electron_expansion_slot_device::set_io_space(address_space *io)
{
m_io = io;
}
//------------------------------------------------- //-------------------------------------------------
// SLOT_INTERFACE( electron_expansion_devices ) // SLOT_INTERFACE( electron_expansion_devices )
@ -90,7 +115,7 @@ void electron_expansion_slot_device::device_reset()
//#include "aplus5.h" //#include "aplus5.h"
//#include "slogger.h" //#include "slogger.h"
//#include "fbjoy.h" //#include "fbjoy.h"
//#include "m2105.h" #include "m2105.h"
SLOT_INTERFACE_START( electron_expansion_devices ) SLOT_INTERFACE_START( electron_expansion_devices )
@ -100,5 +125,5 @@ SLOT_INTERFACE_START( electron_expansion_devices )
//SLOT_INTERFACE("aplus5", ELECTRON_APLUS5) //SLOT_INTERFACE("aplus5", ELECTRON_APLUS5)
//SLOT_INTERFACE("slogger", ELECTRON_SLOGGER) //SLOT_INTERFACE("slogger", ELECTRON_SLOGGER)
//SLOT_INTERFACE("fbjoy", ELECTRON_FBJOY) //SLOT_INTERFACE("fbjoy", ELECTRON_FBJOY)
//SLOT_INTERFACE("m2105", ELECTRON_M2105) SLOT_INTERFACE("m2105", ELECTRON_M2105)
SLOT_INTERFACE_END SLOT_INTERFACE_END

View File

@ -14,7 +14,7 @@
0V 8 7 0V 0V 8 7 0V
+5V 10 9 +5V +5V 10 9 +5V
16MHz 12 11 SOUND O/P 16MHz 12 11 SOUND O/P
PHI OUT 14 13 13 IN PHI OUT 14 13 /13 IN
NMI 16 15 RST NMI 16 15 RST
R/W 18 17 IRQ R/W 18 17 IRQ
D6 20 19 D7 D6 20 19 D7
@ -106,8 +106,20 @@ AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as
MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \ MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD() \ #define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD(_def_slot) \
MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, 0, electron_expansion_devices, nullptr) MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, electron_expansion_devices, _def_slot) \
MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(DEVWRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, irq_w)) \
MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(DEVWRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, nmi_w)) \
MCFG_ELECTRON_EXPANSION_SLOT_RES_HANDLER(DEVWRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, reset_w))
#define MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(_devcb) \
devcb = &electron_expansion_slot_device::set_irq_handler(*device, DEVCB_##_devcb);
#define MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(_devcb) \
devcb = &electron_expansion_slot_device::set_nmi_handler(*device, DEVCB_##_devcb);
#define MCFG_ELECTRON_EXPANSION_SLOT_RES_HANDLER(_devcb) \
devcb = &electron_expansion_slot_device::set_reset_handler(*device, DEVCB_##_devcb);
//************************************************************************** //**************************************************************************
@ -118,13 +130,30 @@ AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as
class device_electron_expansion_interface; class device_electron_expansion_interface;
class electron_expansion_slot_device : public device_t, class electron_expansion_slot_device : public device_t, public device_slot_interface
public device_slot_interface
{ {
public: public:
// construction/destruction // construction/destruction
electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~electron_expansion_slot_device() {} virtual ~electron_expansion_slot_device();
void set_io_space(address_space *io);
// callbacks
template<class _Object> static devcb_base &set_irq_handler(device_t &device, _Object object)
{ return downcast<electron_expansion_slot_device &>(device).m_irq_handler.set_callback(object); }
template<class _Object> static devcb_base &set_nmi_handler(device_t &device, _Object object)
{ return downcast<electron_expansion_slot_device &>(device).m_nmi_handler.set_callback(object); }
template<class _Object> static devcb_base &set_reset_handler(device_t &device, _Object object)
{ return downcast<electron_expansion_slot_device &>(device).m_reset_handler.set_callback(object); }
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_reset_handler(state); }
address_space *m_io;
protected: protected:
// device-level overrides // device-level overrides
@ -132,10 +161,15 @@ protected:
virtual void device_reset() override; virtual void device_reset() override;
device_electron_expansion_interface *m_card; device_electron_expansion_interface *m_card;
private:
devcb_write_line m_irq_handler;
devcb_write_line m_nmi_handler;
devcb_write_line m_reset_handler;
}; };
// ======================> device_electron_expansion_card_interface // ======================> device_electron_expansion_interface
class device_electron_expansion_interface : public device_slot_card_interface class device_electron_expansion_interface : public device_slot_card_interface
{ {

View File

@ -0,0 +1,154 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
BT Merlin M2105
**********************************************************************/
#include "m2105.h"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type ELECTRON_M2105 = &device_creator<electron_m2105_device>;
//-------------------------------------------------
// ROM( m2105 )
//-------------------------------------------------
ROM_START( m2105 )
ROM_REGION(0x40000, "exp_rom", 0)
ROM_DEFAULT_BIOS("350")
ROM_SYSTEM_BIOS(0, "350", "v3.50")
ROMX_LOAD("ic22-sm-35l-1.ic22", 0x30000, 0x4000, CRC(e8f8a639) SHA1(eb7fa1e884be9c072ae0c1e598507b802422127f), ROM_BIOS(1))
ROMX_LOAD("ic23-sm-35l-1.ic23", 0x34000, 0x4000, CRC(b1bb1d83) SHA1(07ca3a93744519b8d03bbf1c3c3537c0a0a3c6fe), ROM_BIOS(1))
ROMX_LOAD("sk01-pc-35l-1.ic24", 0x38000, 0x4000, CRC(54fd4c09) SHA1(9588296306581580ba223cf6bce4be61476f14c4), ROM_BIOS(1))
ROMX_LOAD("sk02-pc-35l-1.ic24", 0x3c000, 0x4000, CRC(c08de988) SHA1(86f2da5f8e9a5301ad40360e286f841f42e94a99), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "340", "v3.40")
ROMX_LOAD("ic22-sm-34l-1.ic22", 0x30000, 0x4000, CRC(b514b15f) SHA1(a9c6c20b5a4f860b000511dde2f54497bcdd97b0), ROM_BIOS(2))
ROMX_LOAD("ic23-sm-34l-1.ic23", 0x34000, 0x4000, CRC(18875889) SHA1(d1a7dd87c4d99869a1961becec5e9d567d8fad53), ROM_BIOS(2))
ROMX_LOAD("sk01-pc-34l-1.ic24", 0x38000, 0x4000, CRC(a8796c9e) SHA1(29bc01b8f7617b252e4b243d13b1bbd3cd32cc3b), ROM_BIOS(2))
ROMX_LOAD("sk02-pc-34l-1.ic24", 0x3c000, 0x4000, CRC(fa74063c) SHA1(cdc31c606e69e7a6d221b7340a310d475d487fc9), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "207", "v2.07")
ROMX_LOAD("ic22-sm-207l-1.ic22", 0x30000, 0x4000, CRC(0c431547) SHA1(13d2eab49b9c79f507b7dd8436d1e56cf43be412), ROM_BIOS(3))
ROMX_LOAD("ic23-sm-207l-1.ic23", 0x34000, 0x4000, CRC(15044d49) SHA1(e75fe4321579a9027527a0e256050d1444b3fe82), ROM_BIOS(3))
ROMX_LOAD("sk01-pc-207l-1.ic24", 0x38000, 0x4000, CRC(0850bcea) SHA1(270e7a31e69e1454cfb70ced23a50f5d97efe4d5), ROM_BIOS(3))
ROMX_LOAD("sk02-pc-207l-1.ic24", 0x3c000, 0x4000, CRC(d8b9143f) SHA1(4e132c7a6dae4caf7203139b51882706d508c449), ROM_BIOS(3))
ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */
ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6))
ROM_END
//-------------------------------------------------
// ADDRESS_MAP( m2105 )
//-------------------------------------------------
//static ADDRESS_MAP_START( m2105_mem, AS_IO, 8, electron_m2105_device )
// AM_RANGE(0x30000, 0x3ffff) AM_MIRROR(0x4000) AM_ROM AM_REGION("m2105_rom", 0)
//ADDRESS_MAP_END
//-------------------------------------------------
// MACHINE_DRIVER( m2105 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( m2105 )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
/* system via */
MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000)
/*MCFG_VIA6522_READPA_HANDLER(READ8(electron_m2105_device, m2105_via_system_read_porta))
MCFG_VIA6522_READPB_HANDLER(READ8(electron_m2105_device, m2105_via_system_read_portb))
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(electron_m2105_device, m2105_via_system_write_porta))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(electron_m2105_device, m2105_via_system_write_portb))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(electron_m2105_device, m2105_via_system_irq_w))*/
/* user via */
MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000)
//MCFG_VIA6522_READPB_HANDLER(READ8(electron_m2105_device, m2105_via_user_read_portb))
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
//MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(electron_m2105_device, m2105_via_user_write_portb))
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe))
//MCFG_VIA6522_IRQ_HANDLER(WRITELINE(electron_m2105_device, m2105_via_user_irq_w))
/* speech hardware */
MCFG_DEVICE_ADD("vsm", SPEECHROM, 0)
MCFG_SOUND_ADD("tms5220", TMS5220, 640000)
MCFG_TMS52XX_SPEECHROM("vsm")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* duart */
MCFG_MC68681_ADD("sc2681", XTAL_3_6864MHz)
//MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int0_w))
//MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232_1", rs232_port_device, write_txd))
//MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232_2", rs232_port_device, write_txd))
//MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(electron_m2105_device, sio_out_w))
//MCFG_RS232_PORT_ADD("rs232_1", default_rs232_devices, "terminal")
//MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_a_w))
//MCFG_RS232_PORT_ADD("rs232_2", default_rs232_devices, nullptr)
//MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_b_w))
/* printer */
MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor electron_m2105_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( m2105 );
}
const rom_entry *electron_m2105_device::device_rom_region() const
{
return ROM_NAME( m2105 );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// electron_m2105_device - constructor
//-------------------------------------------------
electron_m2105_device::electron_m2105_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, ELECTRON_M2105, "BT Merlin M2105", tag, owner, clock, "electron_m2105", __FILE__),
device_electron_expansion_interface(mconfig, *this),
m_exp_rom(*this, "exp_rom"),
m_via6522_0(*this, "via6522_0"),
m_via6522_1(*this, "via6522_1"),
m_tms(*this, "tms5220"),
m_centronics(*this, "centronics")
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void electron_m2105_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void electron_m2105_device::device_reset()
{
}

View File

@ -0,0 +1,55 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
BT Merlin M2105
**********************************************************************/
#ifndef __ELECTRON_M2105__
#define __ELECTRON_M2105__
#include "emu.h"
#include "exp.h"
#include "machine/6522via.h"
#include "machine/mc68681.h"
#include "sound/tms5220.h"
#include "bus/centronics/ctronics.h"
#include "bus/rs232/rs232.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class electron_m2105_device:
public device_t,
public device_electron_expansion_interface
{
public:
// construction/destruction
electron_m2105_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
virtual const rom_entry *device_rom_region() const override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
required_memory_region m_exp_rom;
required_device<via6522_device> m_via6522_0;
required_device<via6522_device> m_via6522_1;
required_device<tms5220_device> m_tms;
required_device<centronics_device> m_centronics;
};
// device type definition
extern const device_type ELECTRON_M2105;
#endif /* __ELECTRON_M2105__ */

View File

@ -54,7 +54,6 @@ that can be done through BASIC programs seem to behave properly (most of the tim
Incomplete: Incomplete:
- Sound (sound is too high?) - Sound (sound is too high?)
- Graphics (seems to be wrong for several games)
- 1 MHz bus is not emulated - 1 MHz bus is not emulated
- Bus claiming by ULA is not implemented - Bus claiming by ULA is not implemented
- Currently the cartridge support always loads the upper rom in page 12 - Currently the cartridge support always loads the upper rom in page 12
@ -223,8 +222,11 @@ static MACHINE_CONFIG_START( electron, electron_state )
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart") MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart")
MCFG_GENERIC_LOAD(electron_state, electron_cart) MCFG_GENERIC_LOAD(electron_state, electron_cart)
/* expansion ports */ /* expansion port */
MCFG_ELECTRON_EXPANSION_SLOT_ADD("exp", electron_expansion_devices, nullptr) MCFG_ELECTRON_EXPANSION_SLOT_ADD("exp", electron_expansion_devices, nullptr)
MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(INPUTLINE("maincpu", M6502_NMI_LINE))
MCFG_ELECTRON_EXPANSION_SLOT_RES_HANDLER(INPUTLINE("maincpu", INPUT_LINE_RESET))
/* software lists */ /* software lists */
MCFG_SOFTWARE_LIST_ADD("cass_list", "electron_cass") MCFG_SOFTWARE_LIST_ADD("cass_list", "electron_cass")
@ -232,31 +234,48 @@ static MACHINE_CONFIG_START( electron, electron_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( btm2105, electron )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_COLOR(rgb_t::amber)
/* expansion port */
MCFG_DEVICE_MODIFY("exp")
MCFG_DEVICE_SLOT_INTERFACE(electron_expansion_devices, "m2105", true)
/* software lists */
MCFG_SOFTWARE_LIST_REMOVE("cass_list")
MACHINE_CONFIG_END
/* Electron Rom Load */ /* Electron Rom Load */
ROM_START(electron) ROM_START(electron)
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x44000, "user1", 0 ) /* OS Rom */ ROM_REGION( 0x44000, "user1", 0 ) /* OS Rom */
ROM_LOAD( "os.rom", 0x40000, 0x4000, CRC(bf63fb1f) SHA1(a48b8fa0cfb09140e808ac8a187316c605a0b32e) ) /* Os rom */ ROM_LOAD( "os.rom", 0x40000, 0x4000, CRC(bf63fb1f) SHA1(a48b8fa0cfb09140e808ac8a187316c605a0b32e) ) /* OS rom */
/* 00000 0 available for cartridges */ /* 00000 0 Second external socket on the expansion module (SK2) */
/* 04000 1 available for cartridges */ /* 04000 1 Second external socket on the expansion module (SK2) */
/* 08000 2 available for cartridges */ /* 08000 2 First external socket on the expansion module (SK1) */
/* 0c000 3 available for cartridges */ /* 0c000 3 First external socket on the expansion module (SK1) */
/* 10000 4 available for cartridges */ /* 10000 4 Disc */
/* 14000 5 available for cartridges */ /* 14000 5 USER applications */
/* 18000 6 available for cartridges */ /* 18000 6 USER applications */
/* 1c000 7 available for cartridges */ /* 1c000 7 Modem interface ROM */
/* 20000 8 keyboard */ /* 20000 8 Keyboard */
/* 24000 9 keyboard mirror */ /* 24000 9 Keyboard mirror */
/* 28000 10 Basic rom */ /* 28000 10 BASIC rom */
/* 2c000 11 BASIC rom mirror */
/* 30000 12 Expansion module operating system */
/* 34000 13 High priority slot in expansion module */
/* 38000 14 ECONET */
/* 3c000 15 Reserved */
ROM_LOAD("basic.rom", 0x28000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) ROM_LOAD("basic.rom", 0x28000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281))
/* 2c000 11 Basic rom mirror */
ROM_COPY("user1", 0x28000, 0x2c000, 0x4000) ROM_COPY("user1", 0x28000, 0x2c000, 0x4000)
/* 30000 12 available for cartridges with a language ROM */
/* 34000 13 available for cartridges with a language ROM */
/* 38000 14 available for cartridges with a language ROM */
/* 3c000 15 available for cartridges with a language ROM */
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
#define rom_btm2105 rom_electron
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP ( 1983, electron, 0, 0, electron, electron, driver_device, 0, "Acorn", "Acorn Electron", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) COMP ( 1983, electron, 0, 0, electron, electron, driver_device, 0, "Acorn", "Acorn Electron", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
//COMP ( 1985, btm2501, electron, 0, electron, electron, driver_device, 0, "British Telecom Business Systems", "Merlin M2501", MACHINE_NOT_WORKING ) COMP ( 1985, btm2105, electron, 0, btm2105, electron, driver_device, 0, "British Telecom Business Systems", "BT Merlin M2105", MACHINE_NOT_WORKING )

View File

@ -76,6 +76,7 @@ public:
m_beeper(*this, "beeper"), m_beeper(*this, "beeper"),
m_cart(*this, "cartslot"), m_cart(*this, "cartslot"),
m_keybd(*this, "LINE") m_keybd(*this, "LINE")
m_exp(*this, "exp")
{ } { }
ULA m_ula; ULA m_ula;
@ -105,6 +106,7 @@ public:
required_device<beep_device> m_beeper; required_device<beep_device> m_beeper;
required_device<generic_slot_device> m_cart; required_device<generic_slot_device> m_cart;
required_ioport_array<14> m_keybd; required_ioport_array<14> m_keybd;
required_device<electron_expansion_slot_device> m_exp;
inline UINT8 read_vram( UINT16 addr ); inline UINT8 read_vram( UINT16 addr );
inline void electron_plot_pixel(bitmap_ind16 &bitmap, int x, int y, UINT32 color); inline void electron_plot_pixel(bitmap_ind16 &bitmap, int x, int y, UINT32 color);
void electron_interrupt_handler(int mode, int interrupt); void electron_interrupt_handler(int mode, int interrupt);

View File

@ -367,9 +367,36 @@ void electron_state::machine_start()
lo_rom = memregion("user1")->base(); lo_rom = memregion("user1")->base();
membank("bank2")->configure_entries(0, 1, lo_rom, 0x4000); membank("bank2")->configure_entries(0, 1, lo_rom, 0x4000);
membank("bank2")->configure_entries(1, 11, memregion("user1")->base() + 0x04000, 0x4000); membank("bank2")->configure_entries(1, 1, up_rom, 0x4000);
membank("bank2")->configure_entries(12, 1, up_rom, 0x4000);
membank("bank2")->configure_entries(13, 3, memregion("user1")->base() + 0x34000, 0x4000); for (int page = 2; page < 16; page++)
membank("bank2")->configure_entries(page, 1, memregion("user1")->base() + page * 0x4000, 0x4000);
/* enumerate expansion ROMs */
electron_expansion_slot_device* exp_port = m_exp;
while (exp_port != nullptr)
{
device_t* temp;
temp = dynamic_cast<device_t*>(exp_port->get_card_device());
if (temp != nullptr)
{
for (int page = 4; page < 16; page++)
{
memory_region *temp_region = temp->memregion("exp_rom");
if (temp_region != nullptr && temp_region->base() != nullptr && temp_region->base()[page * 0x4000 + 0x06] != 0x00)
{
membank("bank2")->configure_entries(page, 1, temp_region->base() + page * 0x4000, 0x4000);
}
exp_port = temp->subdevice<electron_expansion_slot_device>("exp");
}
}
else
{
exp_port = nullptr;
}
}
m_ula.interrupt_status = 0x82; m_ula.interrupt_status = 0x82;
m_ula.interrupt_control = 0x00; m_ula.interrupt_control = 0x00;

View File

@ -11741,6 +11741,7 @@ avenger // (c) 1975 Electra
@source:electron.cpp @source:electron.cpp
electron // 1983 Acorn Electron electron // 1983 Acorn Electron
btm2105 // 1985 BT Merlin M2105
@source:elekscmp.cpp @source:elekscmp.cpp
elekscmp // elekscmp //