summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/eis_sad8852.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/eis_sad8852.cpp')
-rw-r--r--src/devices/bus/isa/eis_sad8852.cpp240
1 files changed, 240 insertions, 0 deletions
diff --git a/src/devices/bus/isa/eis_sad8852.cpp b/src/devices/bus/isa/eis_sad8852.cpp
new file mode 100644
index 00000000000..1c6a6bb4162
--- /dev/null
+++ b/src/devices/bus/isa/eis_sad8852.cpp
@@ -0,0 +1,240 @@
+// license:BSD-3-Clause
+// copyright-holders:Joakim Larsson Edström
+/***********************************************************************************************************
+ *
+ * Ericsson Information Systems/Nokia Data/ICL, SAD 8852 IBM 3270/5250 terminal emulation adapter
+ *
+ * This board is a terminal adapter for AT class PC machines to be connected as a terminal to
+ * IBM mainframes. There are two on board connectors, a BNC connector to act as a 3270 terminal
+ * and a twinax connector for the older 5250 terminal.
+ *
+ * The original design was probably done by the Alfaskop division at Ericsson Information Systems (EIS)
+ * The Alfaskop division was aquired by Ericsson from Datasaab AB in 1980 who was very successful selling
+ * IBM compatible terminals at strict 10% below IBM list price, whatever that was, usually quite high.
+ * The Ericsson PC AT WS286, their first 16 bit PC, was introduced 1986 and as the SAD8852 card is a 16 bit
+ * ISA card it is likelly to have been designed for the launch as Ericsson targeted the office market only.
+ * EIS was aquired by the Nokia Data division in 1988 which in turn was aquired by ICL 1991 and the terminal
+ * division by Wyse 1996. Firmware confirms 1987 as copyrigt date which fits the WS286 time line well.
+ *
+ * TODO:
+ * - Hook up 8274 and the rest of the local memory map
+ * - Hook up ISA IRQ:s
+ * - Find suitable software package to analyze control protocol between main cpu and the board cpu
+ * - Add bitbanger device and hook it up to an (emulated?!) IBM mainframe
+ *
+ ************************************************************************************************************/
+/*
+ Links:
+ ------
+ https://www.ibm.com/support/knowledgecenter/en/SSEQ5Y_5.9.0/com.ibm.pcomm.doc/books/html/admin_guide11.htm
+ http://www.ebay.fr/itm/iCL-94V0-SAD-8852-ROA-1195296-R4B-Card-Expansion-Card/222825926815?hash=item33e175d09f:g:zAUAAOSwe7laPCr8
+ https://www.sweclockers.com/forum/trad/1392179-intel-80188-16-bit-isa-expansionskort-vad-ar-detta (in swedish)
+ http://www.veteranklubbenalfa.se/veteran/litt/jub97v3_4.pdf (PDF about the computer industry of Sweden, in swedish)
+
+ PCB layouts and assembly years from online pictures and physical unit.
+ Ericsson - marked TVK 119 5211 R3, rev date xxxx, assembled in 1987 indicated by chip dates
+ Nokia Data - marked TVK 119 5211 R3, rev date 9127, assembled in 1991 indicated by chip dates
+ ICL - marked TVK 119 5211 R3, rev date 9343, assembled in 1993 indicated by chip dates
+ +--------------------------------------------------------------------------------------+ ___
+ | IC18 IC24 +----------+ ||
+ | IC1 IC9 |IC31 EPROM| +--------------+ IC44 ||
+ | IC19 IC25 |27128 | | IC35 i8274 | IC51 ||
+ | IC2 IC10 +----------+ | MPSC serial | IC45 ||
+ | +--------------+ +--------+ ||
+ | IC3 IC11 IC17 IC32 SW1 1-10 IC57 ||
+ | +----------+ IC23 IC40 IC46 +--------+ ||
+ | IC4 IC12 IC36 | | IC52 IC58 IC63 o-|
+ | IC20 | IC33 | IC37 IC41 IC47 ||
+ | IC5 IC13 IC26 | i80188 | IC53 XTAL IC59 ||
+ | IC21 | CPU | IC38 IC42 IC48 19.17MHz ||
+ | IC6 IC14 IC27 | | IC54 IC62 ||
+ | +----------+ J3 J2 ||---
+ | IC7 IC15 XTAL IC39 IC43 IC49 I IC55 IC60 || |= Twinax (5250)
+ | IC28 12Mhz R J1 ||---
+ | IC8 IC16 IC50 Q IC56 IC61 o-|
+ | IC22 IC29 IC30 IC34 +--------------------------------------------+|---
+ +-----------------------------------------+ ||||||||| ||||||||||||||||||||||||| | |- BNC (3270)
+ |---
+ |
+ IC's
+ ------------------------------------------------------------------------------
+ IC1- IC40-
+ IC16 41256-12 256Kbits DRAM => 512KB IC42 74ALS273
+ IC17 PAL20L8ACNS '1020045 R2A' IC43 74F138
+ IC18 74F109 IC44 ROP101506 kS09240CB012Y- custom Philips chip?
+ IC19- IC45 74ALS540
+ IC20 74F00 IC46-
+ IC21- IC47 74ALS684
+ IC22 74ALS153 IC48 74ALS521
+ IC23 74LS139 IC49 74F257
+ IC24 74F74 IC50 74ALS541
+ IC25 74LS258 IC51 LM339 - quad voltage comparator
+ IC26 74F32 IC52 74ALS74
+ IC27- IC53 XTAL 19.170MHz SCC oscillator
+ IC28 74ALS153 IC54 74ALS38
+ IC29 74F175 IC55 74F138
+ IC30 74F08 IC56 74ALS541
+ IC31 EPROM 'RON 1020044/R2A D500 IC31' IC57 SN75452BP - dual very-fast NAND
+ IC32 74ALS573 IC58 74F109
+ IC33 i80188 CPU IC59 74F10
+ IC34 74F00 IC60 74ALS573
+ IC35 i8274 MPSC serial controller IC61 74ALS541
+ IC36 74ALS573 IC62 74F32
+ IC37 74F10 IC63 74F175
+ IC38 74ALS245
+ IC39 74F00
+
+ General description
+ -------------------
+ The PCB has a 10 bit DIP switch and three jumper fields
+
+ SW1 has 10 positions labeled '1' to '10', left to right, default bit value is off (down) and only bit '10' is on (up)
+ J1 has 2 positions labeled 'AT' and 'PC' top to bottom, 'AT' is default
+ J2 has 2 positions labeled 'AT' and 'PC' top to bottom, 'AT' is default
+ J3 has 7 positions labeled 'IRQ2', IRQ3', 'IRQ4', 'IRQ10', 'IRQ11, 'IRQ12' and 'IRQ15' top to bottom, 'IRQ11' is default
+
+ */
+
+#include "emu.h"
+#include "eis_sad8852.h"
+#include "cpu/i86/i186.h"
+#include "machine/z80sio.h"
+
+#define LOG_READ (1U << 1)
+
+//#define VERBOSE (LOG_GENERAL)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGR(...) LOGMASKED(LOG_READ, __VA_ARGS__)
+
+#ifdef _MSC_VER
+#define FUNCNAME __func__
+#else
+#define FUNCNAME __PRETTY_FUNCTION__
+#endif
+
+DEFINE_DEVICE_TYPE(ISA16_SAD8852, isa16_sad8852_device, "sad8852", "SAD8852 IBM mainframe terminal adapter")
+
+#define I80188_TAG "ic33"
+
+//-------------------------------------------------
+// Access methods from ISA bus
+//-------------------------------------------------
+READ8_MEMBER( isa16_sad8852_device::sad8852_r )
+{
+ LOG("%s sad8852_r(): offset=%d\n", FUNCNAME, offset);
+ return 0xff;
+}
+
+WRITE8_MEMBER( isa16_sad8852_device::sad8852_w )
+{
+ LOG("%s : offset=%d data=0x%02x\n", FUNCNAME, offset, data);
+}
+
+//-------------------------------------------------
+// ROM( sad8852 )
+//-------------------------------------------------
+ROM_START( sad8852 )
+ ROM_REGION( 0x4000, I80188_TAG, 0 )
+ ROM_LOAD( "ron_1020044_r2a_d500_ic31.bin", 0x0000, 0x4000, CRC(cbdd042a) SHA1(7a3d43e6b1f6fcd4402c54aaacf169ac74141cd2) )
+ROM_END
+
+const tiny_rom_entry *isa16_sad8852_device::device_rom_region() const
+{
+ return ROM_NAME( sad8852 );
+}
+
+//-------------------------------------------------
+// ADDRESS maps
+//-------------------------------------------------
+ADDRESS_MAP_START(isa16_sad8852_device::sad8852_mem)
+ AM_RANGE(0x00000, 0x80000) AM_RAM
+ AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION(I80188_TAG, 0)
+ADDRESS_MAP_END
+
+ADDRESS_MAP_START(isa16_sad8852_device::sad8852_io)
+ADDRESS_MAP_END
+
+//----------------------------------------------------------
+// UI I/O
+// - TODO: Figure out function of SW1, J1 and J2
+// SW1 bits 1-8 are gated to data bus through IC45
+//----------------------------------------------------------
+static INPUT_PORTS_START( sad8852_ports )
+ PORT_START("SW1")
+ PORT_DIPNAME( 0x3ff, 0x001, "Unknown" )
+ PORT_DIPSETTING( 0x00, "None" )
+ PORT_DIPSETTING( 0x01, "Default" )
+
+ PORT_START("J1")
+ PORT_CONFNAME( 0x01, 0x01, "PC - AT")
+ PORT_CONFSETTING( 0x00, "PC")
+ PORT_CONFSETTING( 0x01, "AT")
+
+ PORT_START("J2")
+ PORT_CONFNAME( 0x01, 0x01, "PC - AT")
+ PORT_CONFSETTING( 0x00, "PC")
+ PORT_CONFSETTING( 0x01, "AT")
+
+ PORT_START("J3")
+ PORT_CONFNAME( 0x07, 0x04, "ISA IRQ")
+ PORT_CONFSETTING( 0x00, "IRQ2")
+ PORT_CONFSETTING( 0x01, "IRQ3")
+ PORT_CONFSETTING( 0x02, "IRQ4")
+ PORT_CONFSETTING( 0x03, "IRQ10")
+ PORT_CONFSETTING( 0x04, "IRQ11")
+ PORT_CONFSETTING( 0x05, "IRQ12")
+ PORT_CONFSETTING( 0x06, "IRQ15")
+INPUT_PORTS_END
+
+ioport_constructor isa16_sad8852_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( sad8852_ports );
+}
+
+//-------------------------------------------------
+// Board configuration
+//-------------------------------------------------
+MACHINE_CONFIG_START(isa16_sad8852_device::device_add_mconfig)
+ MCFG_CPU_ADD(I80188_TAG, I80188, XTAL(12'000'000) / 2) // Chip revision is 6 MHz
+ MCFG_CPU_PROGRAM_MAP( sad8852_mem )
+ MCFG_CPU_IO_MAP(sad8852_io)
+
+ MCFG_DEVICE_ADD("terminal", I8274_NEW, XTAL(12'000'000) / 3) // Needs verification
+MACHINE_CONFIG_END
+
+isa16_sad8852_device::isa16_sad8852_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, ISA16_SAD8852, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_sw1(*this, "SW1")
+ , m_j1(*this, "J1")
+ , m_j2(*this, "J2")
+ , m_isairq(*this, "J3")
+ , m_installed(false)
+ , m_irq(4)
+{
+}
+
+//-------------------------------------------------
+// Overloading methods
+//-------------------------------------------------
+void isa16_sad8852_device::device_start()
+{
+ set_isa_device();
+ m_installed = false;
+}
+
+
+void isa16_sad8852_device::device_reset()
+{
+ if (!m_installed)
+ {
+ m_isa->install_device(0x378, 0x378, // Wrong, need to find real i/o addresses
+ read8_delegate(FUNC( isa16_sad8852_device::sad8852_r ), this),
+ write8_delegate(FUNC( isa16_sad8852_device::sad8852_w ), this) );
+ m_irq = m_isairq->read();
+ m_installed = true;
+ }
+}