summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Lord-Nightmare <Lord-Nightmare@users.noreply.github.com>2016-03-20 06:22:32 -0400
committer Lord-Nightmare <Lord-Nightmare@users.noreply.github.com>2016-03-20 06:22:32 -0400
commit6fae5233b8f623d7fecd1cce8655cd6e995bebef (patch)
treec8ba01beaf6e443402d4230cc39378514cf5b63a /src
parent4b065b5e826cdc4fefcbe985f81d15eee582307d (diff)
Symbolics 36xx: rename driver from s3600 to s3670 to better reflect the actual model of what we're trying to emulate. Added more memory maps from the patent, but these do not seem to match the 3670 exactly, more investigation is required. [Lord Nightmare]
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/symbolics.cpp111
-rw-r--r--src/mame/mame.lst2
2 files changed, 101 insertions, 12 deletions
diff --git a/src/mame/drivers/symbolics.cpp b/src/mame/drivers/symbolics.cpp
index 4e5ea4b918f..2455f51bab9 100644
--- a/src/mame/drivers/symbolics.cpp
+++ b/src/mame/drivers/symbolics.cpp
@@ -1,9 +1,43 @@
// license:BSD-3-Clause
// copyright-holders:Jonathan Gevaryahu
/******************************************************************************
- Symbolics 3600
+ Symbolics 36x0 (really in this case, 3670; the original 3600 is considerably rarer, 3670 is backwards compatible for the most part)
TODO: add credits, backstory, history, etc here
Front-end Processor dumped only, so far, plds/proms/pals not dumped yet
+
+ TODO:
+ The entire lispcpu half (more like 3/4) of the machine
+ Framebuffer 1152x864? (lives on the i/o card)
+ I8274 MPSC (z80dart.cpp) x2
+ 1024x4bit SRAM AM2148-50 x6 @F22-F27
+ 2048x8bit SRAM @F7 and @G7
+ keyboard/mouse (a 68k based console dedicated to this machine; talks through one of the MPSC chips)
+ am9517a-50 DMA controller
+ 'NanoFEP' i8749 mcu which runs the front panel and rtc clock (only on 3600, the 3670 lacks this)
+
+ DONE:
+ ROM Loading
+ 256K DRAM
+
+ Keyboard serial bit map:
+ Local (#x01), Caps Lock (LED) (#x02), Hyper (left) (#x03), Meta (left) (#x04), Control (right) (#x05), Super (right) (#x06), Scroll (#x07), Mode Lock (LED) (#x08), Select (#x0c), Symbol (left) (#x0d), Super (left) (#x0e), Control (left) (#x0f), Space (#x10), Meta (right) (#x11), Hyper (right) (#x12), End (#x13), Z (#x17), C (#x18), B (#x19), M (#x1a), . / > (#x1b), Shift (right) (#x1c), Repeat (#x1d), Abort (#x1e), Shift (left) (#x22), X (#x23), V (#x24), N (#x25), , / < (#x26), / / ? (#x27), Symbol (right) (#x28), Help (#x29), Rubout (#x2d), S (#x2e), F (#x2f), H (#x30), K (#x31), ; / : (#x32), Return (#x33), Complete (#x34), Network (#x38), A (#x39), D (#x3a), G (#x3b), J (#x3c), L (#x3d), ' / " (#x3e), Line (#x3f), Function (#x43), W (#x44), R (#x45), Y (#x46), I (#x47), P (#x48), ) / ] (#x49), Page (#x4a), Tab (#x4e), Q (#x4f), E (#x50), T (#x51), U (#x52), O (#x53), ( / [ (#x54), Back Space (#x55), : (#x59), 2 / @ (#x5a), 4 / $ (#x5b), 6 / ^ (#x5c), 8 / * (#x5d), 0 / ) (#x5e), = / + (#x5f), \ / { (#x60), 1 / ! (#x64), 3 / # (#x65), 5 / % (#x66), 7 / & (#x67), 9 / ( (#x68), - / _ (#x69), ` / ~ (#x6a), | / } (#x6b), Escape (#x6f), Refresh (#x70), Square (#x71), Circle (#x72), Triangle (#x73), Clear Input (#x74), Suspend (#x75), Resume (#x76)
+
+
+ Notes from US Patent 4887235 which has some FEP source code and limited memory info:
+ FEP main description starts on pdf page 47
+ FEP access the SPY bus which allows poking at the workings of the lisp cpu, as well as reading the ethernet interface (on 3600, later g-machine 3650 fep seems to use a separate z80 for this?) see patent pdf page 33
+ page 41 reveals the SPY bus is 8 data bits wide, and has an address of 6 bits
+ see page 97 of http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/Lisp_Machine_Hardware_Memos.pdf which explains what addresses do what.
+ FEP accesses a register called SQCLKC described with bits on pdf page 32, figure out where this maps
+
+ http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/3600_TechnicalSummary_Feb83.pdf <- page 114 describes the nanofep
+ http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/Symbolics_3600_Series_Basic_Field_Maint_Jul86.pdf <- page 84 describes the two types of FEP, older one with firmware v24 and newer one (emulated here) with firmware v127
+
+ fonts:
+ tiny7: 0x908 to 0xB08 in fep ROM is a thin font, 4 or 5 pixels wide, rows are in a weird scrambled order
+ normal or cptfont: 0x11e8 to 0x16d8 is a thick/wide font, 10? pixels wide
+ verylarge: 0x2a48 to 0x3638 is an even wider font, 14 pixels wide
+ tvfont?: 0x134d8-0x13ad0 is a thin font about 7 pixels wide with the rows in a weird scrambled order
******************************************************************************/
/* Core includes */
@@ -62,18 +96,63 @@ a23 a22 a21 a20 a19 a18 a17 a16 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4
? ? ? ? ? 0 0 1 1 0 * * * * * * * * * * * * * 1 R ROM 10L @D10 second half
? ? ? ? ? 0 0 1 1 1 * * * * * * * * * * * * * 0 R Open Bus (socket @D17 second half)
? ? ? ? ? 0 0 1 1 1 * * * * * * * * * * * * * 1 R Open Bus (socket @D11 second half)
-? ? ? ? ? 0 1 * * * * * * * * * * * * * * * * * RW RAM <- recheck this, might be a weird hole between 20000-20fff ?
-? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? * ? Something maps here...
- | | | | |
+? ? ? ? ? 0 1 * * * * * * * * * * * * * * * * * RW RAM (4164 DRAMs; these have parity as well, which is checked in the i/o area somehow?)
+1 1 1 1 1 1 1 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? * ? SPY BUS and FEP peripherals for OLD FEP hardware, not the NFEP we have here; the map of this area is listed in octal on pdf page 399 of us patent 4887235. The NFEP map is certainly not the same, but is probably similar.
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 * * * * RW SPY-CMEM (writes CMEM WD, reads UIR)
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 * W SPY-SQ-CTL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 R SPY-BOARD-ID (read a given board's id prom, board select is in U AMRA register)
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 * R SPY-SQ-STATUS
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 * ? SPY-NEXT-CPC
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0? ? SPY-TASK
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 R SPY-CTOS-HIGH
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0? R SPY-OPC
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0? W SPY-MC-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 R SPY-MC-ID
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 R SPY-MC-ERROR-STATUS
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 R SPY-ECC-SYNDROME
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 R SPY-ECC-ADDRESS
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 *? R SPY-MC-STATUS
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 W SPY-NET-SELECT
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 W SPY-NET-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 x? 0 RW MPSC-0-A
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 x? 1 RW MPSC-0-B
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 x? 0 RW MPSC-1-A
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 x? 1 RW MPSC-1-B
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 *? R? SPY-DMA-HIGH-ADDRS
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 *? R SPY-DMA-CONTROLLER
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 ?? R FEP-PADDLE-ID-PROM
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 ?? R FEP-BOARD-ID-PROM
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 W FEP-BOARD-ID-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 W FEP-DMA-AND-CLOCK-CTL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 W FEP-DMA-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 W FEP-PROC-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0? W FEP(SPY)-LBUS-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0 0? W FEP-SERIAL-BAUD-RATE-0
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0? W FEP-SERIAL-BAUD-RATE-1
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0? W FEP-HSB-CONTROL
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 0? W FEP-HSB-DATA
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0? W FEP-HSB-POINTER
+1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0? W P-PORT
+ | | | | | | hex
+ | | | | | | | | octal
+@310: write
+@A2A4: write to FF
+
+
*/
static ADDRESS_MAP_START(m68k_mem, AS_PROGRAM, 16, symbolics_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x01ffff) AM_ROM /* ROM lives here, and writing to 0x00-0x08 writes to the main lisp ram? */
+ //AM_RANGE(0x020000, 0x03ffff) AM_RAM /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
AM_RANGE(0x020000, 0x03ffff) AM_RAM /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
+ // 2x AM9128-10PC 2048x8 SRAMs @F7 and @G7 map somewhere
+ // 6x AM2148-50 1024x4bit SRAMs @F22-F27 map somewhere
//AM_RANGE(0x040000, 0xffffff) AM_READ(buserror_r);
//AM_RANGE(0x800000, 0xffffff) AM_RAM /* paged access to lispm ram? */
- // there is stuff mapped at 40000 and ffxxx as well, ffxxx may be the main lisp cpu's microcode and macrocode areas
+ //FF00B0 is readable, may be to read the MC/SQ/DP/AU continuity lines?
+ //FF00E1 is writable, may control the LBUS_POWER_RESET line, see http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/Lisp_Machine_Hardware_Memos.pdf page 90
+ //FF018A is writable, gets 0x5555 written to it
ADDRESS_MAP_END
static ADDRESS_MAP_START(m68k_io, AS_IO, 16, symbolics_state )
@@ -113,20 +192,30 @@ DRIVER_INIT_MEMBER(symbolics_state,symbolics)
static MACHINE_CONFIG_START( symbolics, symbolics_state )
/* basic machine hardware */
- //XTALS: 16MHz @H11, 4.9152MHz @J5, 66.67MHz @J10
- MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* MC68000L8 @A27; clock is guessed to be derived from the 16Mhz xtal @ H11 */
+ // per page 159 of http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/Lisp_Machine_Hardware_Memos.pdf:
+ //XTALS: 16MHz @H11 (68k CPU clock)
+ // 4.9152MHz @J5 (driving the two MPSCs serial clocks)
+ // 66.67MHz @J10 (main lispcpu/system clock)
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* MC68000L8 @A27; clock is derived from the 16Mhz xtal @ H11 */
MCFG_CPU_PROGRAM_MAP(m68k_mem)
MCFG_CPU_IO_MAP(m68k_io)
+ //ADD ME:
+ // Framebuffer
+ // DMA Controller
+ // I8274 MPSC #1 (synchronous serial for keyboard)
+ // I8274 MPSC #2 (EIA/debug console?)
+
MACHINE_CONFIG_END
/******************************************************************************
ROM Definitions
******************************************************************************/
-ROM_START( s3600 )
+ROM_START( s3670 )
ROM_REGION16_BE(0x40000,"maincpu", 0)
- ROM_SYSTEM_BIOS( 0, "v127", "Symbolics 3600 L-Machine FEP V127")
+ // the older 'FEP V24' has similar roms but a different hw layout and memory map
+ ROM_SYSTEM_BIOS( 0, "v127", "Symbolics 3600 L-Machine 'NFEP V127'")
ROMX_LOAD("00h.127.27c128.d13", 0x00000, 0x2000, CRC(b8d7c8da) SHA1(663a09359f5db63beeac00e5c2783ccc25b94250), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "00H.127" @D13
ROM_CONTINUE( 0x10000, 0x2000 )
ROMX_LOAD("00l.127.27128.d7", 0x00001, 0x2000, CRC(cc7bae9a) SHA1(057538eb821c4d00dde19cfe5136ccc0aee43800), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "00L.127" @D7
@@ -156,7 +245,7 @@ ROM_START( s3600 )
DY2ACK pal16L8A @C23
PROC.4 pal? @C25
UDMAHA.4 pal? @D3
- FEP 4642 16pprom? @D5
+ FEP 4642 16pprom? @D5 <- this is the serial number of the FEP board stored in a prom, readable at one of the local-io addresses
HRSQ.4 pal @D6
d7, d8, d10 are eproms, see above
d11 is empty socket marked 2764
@@ -178,4 +267,4 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
-COMP( 1984, s3600, 0, 0, symbolics, symbolics, symbolics_state, symbolics, "Symbolics", "3600", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 1984, s3670, 0, 0, symbolics, symbolics, symbolics_state, symbolics, "Symbolics", "3670", MACHINE_IS_SKELETON | MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 9abbe692733..44a58025a8e 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -33738,7 +33738,7 @@ swyft //
sym1 // Synertek SYM-1
@source:symbolics.cpp
-s3600 //
+s3670 //
@source:sys2900.cpp
sys2900 //