// 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