electron: added preliminary expansion port

This commit is contained in:
Nigel Barnes 2016-05-30 19:31:41 +01:00
parent 02879abeac
commit 364ac3ea14
6 changed files with 281 additions and 1 deletions

View File

@ -574,6 +574,19 @@ if (BUSES["ECONET"]~=null) then
end
---------------------------------------------------
--
--@src/devices/bus/electron/exp.h,BUSES["ELECTRON"] = true
---------------------------------------------------
if (BUSES["ELECTRON"]~=null) then
files {
MAME_DIR .. "src/devices/bus/electron/exp.cpp",
MAME_DIR .. "src/devices/bus/electron/exp.h",
}
end
---------------------------------------------------
--
--@src/devices/bus/ep64/exp.h,BUSES["EP64"] = true

View File

@ -618,6 +618,7 @@ BUSES["CRVISION"] = true
BUSES["DMV"] = true
BUSES["ECBBUS"] = true
BUSES["ECONET"] = true
BUSES["ELECTRON"] = true
BUSES["EP64"] = true
BUSES["EPSON_SIO"] = true
BUSES["GAMEBOY"] = true
@ -1067,7 +1068,7 @@ files {
MAME_DIR .. "src/mame/machine/xbox.cpp",
MAME_DIR .. "src/mame/includes/saturn.h",
MAME_DIR .. "src/mame/drivers/saturn.cpp",
MAME_DIR .. "src/mame/machine/saturn.cpp",
MAME_DIR .. "src/mame/machine/saturn.cpp",
}
end
--------------------------------------------------

View File

@ -0,0 +1,104 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Electron Expansion Port emulation
**********************************************************************/
#include "exp.h"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type ELECTRON_EXPANSION_SLOT = &device_creator<electron_expansion_slot_device>;
//**************************************************************************
// DEVICE ELECTRON_EXPANSION CARD INTERFACE
//**************************************************************************
//-------------------------------------------------
// device_electron_expansion_interface - constructor
//-------------------------------------------------
device_electron_expansion_interface::device_electron_expansion_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device)
{
m_slot = dynamic_cast<electron_expansion_slot_device *>(device.owner());
}
//-------------------------------------------------
// ~device_electron_expansion_card_interface - destructor
//-------------------------------------------------
device_electron_expansion_interface::~device_electron_expansion_interface()
{
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// electron_expansion_slot_device - constructor
//-------------------------------------------------
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_slot_interface(mconfig, *this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void electron_expansion_slot_device::device_start()
{
m_card = dynamic_cast<device_electron_expansion_interface *>(get_card_device());
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void electron_expansion_slot_device::device_reset()
{
if (get_card_device())
{
get_card_device()->reset();
}
}
//-------------------------------------------------
// SLOT_INTERFACE( electron_expansion_devices )
//-------------------------------------------------
// slot devices
//#include "plus1.h"
//#include "plus3.h"
//#include "aplus3.h"
//#include "aplus5.h"
//#include "slogger.h"
//#include "fbjoy.h"
//#include "m2105.h"
SLOT_INTERFACE_START( electron_expansion_devices )
//SLOT_INTERFACE("plus1", ELECTRON_PLUS1)
//SLOT_INTERFACE("plus3", ELECTRON_PLUS3)
//SLOT_INTERFACE("aplus3", ELECTRON_APLUS3)
//SLOT_INTERFACE("aplus5", ELECTRON_APLUS5)
//SLOT_INTERFACE("slogger", ELECTRON_SLOGGER)
//SLOT_INTERFACE("fbjoy", ELECTRON_FBJOY)
//SLOT_INTERFACE("m2105", ELECTRON_M2105)
SLOT_INTERFACE_END

View File

@ -0,0 +1,158 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
Electron Expansion Port emulation
**********************************************************************
Pinout:
18V AC 2 1 18V AC
AC RETURN 4 3 AC RETURN
-5V 6 5 -5V
0V 8 7 0V
+5V 10 9 +5V
16MHz 12 11 SOUND O/P
PHI OUT 14 13 ÷13 IN
NMI 16 15 RST
R/W 18 17 IRQ
D6 20 19 D7
D4 22 21 D5
D2 24 23 D3
D0 26 25 D1
NC 28 27 RDY
SLOT 30 29 SLOT
A14 32 31 A15
A12 34 33 A13
A10 36 35 A11
A0 38 37 A9
A2 40 39 A1
A4 42 41 A3
A6 44 43 A5
A8 46 45 A7
0V 48 47 0V
+5V 50 49 +5V
Signal Definitions:
18V AC (pins 1,2) - These lines are connected directly to the output from the Electron mains power
AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as long as no power is
taken from +5V (pins 9,10,49,50). For safety reasons these lines must never
be used as an AC input to the Electron.
-5V (pins 5,6) - A -5V supply from the Electron. Up to 20mA (total) may safely be drawn
from this line by expansion modules.
0V (pins 7,8,47,48) - Ground. Expansion modules with their own power supply must have the 0V
lines commoned with the Electron.
+5V (pins 9,10,49,50) - A +5V supply from the Electron. Up to 500mA (total) may safely be drawn
from this line by expansion modules as long as no power is taken from 18V
AC (pins 1,2,3,4).
SOUND O/P (pin 11) - Sound output. A 3V peak to peak source via a 1K series resistor from the
Electron ULA.
16 MHz (pin 12) - 16 Megahertz from the Electron main oscillator. This output may be used
for clock generation within an expansion module.
/13 IN (pin 13) - 16 Megahertz divided by 13. This output may be used for baud rate
generation. If divided by 1024 it will give approximately 1200Hz.
PHI OUT (pin 14) - The 6502 input clock. The low time is nominally 250ns. The high time may
be 250ns (2MHz operation when reading ROMs) or 750ns or 1250ns
(stretched clock for a 1MHz access, the length depending on the phase of the
2MHz clock) or up to 40us (if in modes 0-3)
RST (pin 15) - Reset (active low). This is an OUTPUT ONLY for the system reset line. It
may be used to initialise expansion modules on power up and when the
BREAK key is pressed.
NMI (pin 16) - Non-Maskable Interrupt (negative edge triggered). This is the system NMI
line which is open collector (wire-OR) and may be asserted by an expansion
module. The pull-up resistor on this line inside the ULA is 3k3. Care must
be taken to avoid masking other interrupts by holding the line low. Using
NMI on the Electron requires knowledge of operating system protocols.
IRQ (pin 17) - Interrupt Request (active low). This is the system IRQ line which is open
collector (wire-OR) and may be asserted by an expansion module. The pull-
up resistor on this line inside the ULA is 3k3. It is essential for the correct
operation of the machine that interrupts to not occur until the software is
capable of dealing with them. Interrupts on the Electron expansion bus should
therefore be disabled on power-up and reset. Significant use of interrupt
service time may affect other machine functions, eg the real time clock.
R/W (pin 18) - The system read/write line from the 6502.
D7-D0 (pins 19-26) - Bi-directional data bus. The direction of data is determined by R/W.
RDY (pin 27) - 6502 ready line (active low). May be asserted by an expansion module to
stop the processor when reading slow memory. This line works on read only
(R/W=1).
(pin 28) - No connection
(pins 29,30) - Polarising key connector.
A0-A15 (pins 31-46) - 6502 address bus.
**********************************************************************/
#pragma once
#ifndef __ELECTRON_EXPANSION_SLOT__
#define __ELECTRON_EXPANSION_SLOT__
#include "emu.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define ELECTRON_EXPANSION_SLOT_TAG "exp"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_ELECTRON_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD() \
MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, 0, electron_expansion_devices, nullptr)
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> electron_expansion_slot_device
class device_electron_expansion_interface;
class electron_expansion_slot_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~electron_expansion_slot_device() {}
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
device_electron_expansion_interface *m_card;
};
// ======================> device_electron_expansion_card_interface
class device_electron_expansion_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_electron_expansion_interface(const machine_config &mconfig, device_t &device);
virtual ~device_electron_expansion_interface();
protected:
electron_expansion_slot_device *m_slot;
};
// device type definition
extern const device_type ELECTRON_EXPANSION_SLOT;
SLOT_INTERFACE_EXTERN( electron_expansion_devices );
#endif

View File

@ -223,6 +223,9 @@ static MACHINE_CONFIG_START( electron, electron_state )
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart")
MCFG_GENERIC_LOAD(electron_state, electron_cart)
/* expansion ports */
MCFG_ELECTRON_EXPANSION_SLOT_ADD("exp", electron_expansion_devices, nullptr)
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cass_list","electron_cass")
MCFG_SOFTWARE_LIST_ADD("cart_list","electron_cart")

View File

@ -16,6 +16,7 @@
#include "imagedev/cassette.h"
#include "sound/beep.h"
#include "bus/electron/exp.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"