To:	Users
From:	Bob Supnik
Subj:	LGP Simulator Usage
Date:	15-Feb-2004

			COPYRIGHT NOTICE

The following copyright notice applies to both the SIMH source and binary:

   Original code published in 1993-2004, written by Robert M Supnik
   Copyright (c) 1993-2004, Robert M Supnik

   Permission is hereby granted, free of charge, to any person obtaining a
   copy of this software and associated documentation files (the "Software"),
   to deal in the Software without restriction, including without limitation
   the rights to use, copy, modify, merge, publish, distribute, sublicense,
   and/or sell copies of the Software, and to permit persons to whom the
   Software is furnished to do so, subject to the following conditions:

   The above copyright notice and this permission notice shall be included in
   all copies or substantial portions of the Software.

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

   Except as contained in this notice, the name of Robert M Supnik shall not be
   used in advertising or otherwise to promote the sale, use or other dealings
   in this Software without prior written authorization from Robert M Supnik.

This memorandum documents the GRI-909 simulator.


1. Simulator Files

sim/		scp.h
		sim_console.h
		sim_defs.h
		sim_fio.h
		sim_rev.h
		sim_sock.h
		sim_timer.h
		sim_tmxr.h
		scp.c
		sim_console.c
		sim_fio.c
		sim_sock.c
		sim_timer.c
		sim_tmxr.c

sim/gri/	lgp_defs.h
		lgp_cpu.c
		lgp_stddev.c
		lgp_sys.c

2. LGP Features

The LGP is configured as follows:

device		simulates
name(s)

CPU		LGP-30 or LGP-21 CPU with 4096 words of memory
TTI		Typewriter input (keyboard and reader)
TTO		Typewriter output (printer and punch)
PTR		high-speed paper tape reader
PTP		high-speed paper tape punch

The LGP simulator implements the following unique stop conditions:

	- LGP-30 only: arithmetic overflow
	- LGP-21 only: reference to undefined I/O device.

The LOAD and DUMP commands are not implemented.

2.1 CPU

The CPU implements either the LGP-30 or the LGP-21:

	SET CPU LGP30		set LGP-30
	SET CPU LGP21		set LGP-21

The default is the LGP-30.  Memory size is fixed at 4096 words.

The following commands implement various front panel functions:

	D A value		equivalent to the MANUAL INPUT button
	SET CPU FILL{=value}	equivalent to the FILL INSTRUCTION button;
				if no value is given, fills IR from A;
				otherwise, fills IR from the specified value
	SET CPU EXEC{=value}	equivalent to the EXECUTE button;
				if no value is given, executes the instruction
				in IR; otherwise, executes the instruction
				specified by the value
	SET CPU MANUAL		equivalent to setting the MANUAL INPUT switch
				on the Typewriter; Typewriter input is taken
				from the keyboard
	SET CPU TAPE		equivalent to clearing the MANUAL INPUT switch
				on the Typewriter; TYpewriter input is taken
				from the Typewriter paper tape reader

The following commands control the display of information:

	SET CPU LGPHEX		numeric displays use LGP hexadecimal encoding
	SET CPU STANDARD	numeric displays use standard hexadecimal
	SET CPU TRACK		symbolic addresses are ttss, where tt = track
				(0-63) and ss = sector (0-63)
	SET CPU NORMAL		symbolic addresses are normal linear addresses,
				from 0 to 4095.

The defaults are STANDARD hex and TRACK addresses.

The LGP-30 implements the following additional commands:

	SET CPU 4B		sets the CPU to 4-bit input mode
	SET CPU 6B		sets the CPU to 6-bit input mode
	SET CPU INPUT=TTI	sets the CPU to read from the Typewriter
	SET CPU INPUT=PTR	sets the CPU to read from the high-speed reader
	SET CPU OUTPUT=TTO	sets the CPU to output to the Typewriter
	SET CPU OUTPUT=PTP	sets the CPU to output to the high-speed punch

The defaults are TAPE input, 4B input mode, input and output assigned to the
Typewriter.

CPU registers include the visible state of the processor as well as the
control registers for the interrupt system.

	name		size	comments

	PC		12	counter
	A		32	accumulator
	IR		32	instruction register
	OVF		1	overflow flag (LGP-21 only)
	TSW		1	transfer switch
	BP32		1	breakpoint 32 switch
	BP16		1	breakpoint 16 switch
	BP8		1	breakpoint 8 switch
	BP4		1	breakpoint 4 switch
	INPST		1	input pending flag
	INPDN		1	input done flag
	OUTST		1	output pending flag
	OUTDN		1	output done flag
	WRU		8	interrupt character

2.2 Typewriter Input (TTI)

The Typewriter input consists of two units: the keyboard (unit 0) and
the paper-tape reader (unit 1).  The keyboard is permanently associated
with the console window.  The paper-tape reader can be attached to a
disk file.  The RPOS register specifies the number of the next data item
to be read.  Thus, by changing RPOS, the user can backspace or advance
the reader.

The Typewriter input has the following options:

	SET TTI1 ASCII		default tape file format is ASCII-encoded
				Flex
	SET TTI1 FLEX		default tape file format is transposed Flex
	SET TTI1 CSTOP		reader recognizes conditional stop
	SET TTI1 NOCSTOP	reader ignores conditional stop
	SET TTI RSTART		start the reader; equivalent to the
				START READER lever
	SET TTI RSTOP		stop the reader; equivalent to the
				STOP READER lever
	SET TTI START		send START signal to the CPU; equivalent
				to the START COMPUTE lever

Transposed Flex has the tape channels in this order: 6-1-2-3-4-5.

The ATTACH command recognizes two switches:

	ATT -A TTI1 file	file format is ASCII-encoded Flex
	ATT -F TTI1 file	file format is transposed Flex

The Typewriter input implements these registers:

	name		size	comments

	BUF		6	data buffer
	RDY		1	data ready flag
	KPOS		32	count of keyboard characters
	RPOS		32	position in the reader input file
	TIME		24	time between keyboard polls/reader characters
	STOP_IOE	1	stop on I/O error

Error handling for the Typewriter paper-tape reader is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	end of file	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

2.3 Typewriter Output (TTO)

The Typewriter output consists of two units: the printer (unit 0) and
the paper-tape punch (unit 1).  The printer is permanently associated
with the console window.  The paper-tape punch can be attached to a
disk file.  The PPOS register specifies the number of the next data item
to be written.  Thus, by changing PPOS, the user can backspace or advance
the reader.

The Typewriter output has the following options:

	SET TTO1 ASCII		default tape file format is ASCII-encoded
				Flex
	SET TTO1 FLEX		default tape file format is transposed Flex
	SET TTO1 FEED=n		punch 'n' feed (0) characters


Transposed Flex has the tape channels in this order: 6-1-2-3-4-5.  The
default is ASCII-encoded Flex.

The ATTACH command recognizes two switches:

	ATT -A TTO1 file	file format is ASCII-encoded Flex
	ATT -F TTO1 file	file format is transposed Flex

The Typewriter output implements these registers:

	name		size	comments

	BUF		6	data buffer
	UC		1	upper case flag
	TPOS		32	count of output characters
	PPOS		32	position in the punch output file
	TIME		24	time from I/O initiation to completion
	STOP_IOE	1	stop on I/O error

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop


2.4 High Speed Paper-Tape Reader (PTR)

The paper tape reader (PTR) reads data from or a disk file.  The POS
register specifies the number of the next data item to be read.
Thus, by changing POS, the user can backspace or advance the reader.

The paper-tape reader has the following options:

	SET PTR ASCII		default tape file format is ASCII-encoded
				Flex
	SET PTR FLEX		default tape file format is transposed Flex

Transposed Flex has the tape channels in this order: 6-1-2-3-4-5.  The
default is ASCII-encoded Flex.

The ATTACH command recognizes two switches:

	ATT -A PTR file	file format is ASCII-encoded Flex
	ATT -F PTR file	file format is transposed Flex

The paper tape reader implements these registers:

	name		size	comments

	BUF		t	last data item processed
	RDY		1	data ready flag
	POS		32	position in the input file
	TIME		24	time from I/O initiation to completion
	STOP_IOE	1	stop on I/O error

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	end of file	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

2.5 High Speed Paper-Tape Punch (PTP)

The paper tape punch (PTP) writes data to a disk file.  The POS
register specifies the number of the next data item to be written.
Thus, by changing POS, the user can backspace or advance the punch.

The paper tape punch has the following options:

	SET PTP ASCII		default tape file format is ASCII-encoded
				Flex
	SET PTP FLEX		default tape file format is transposed Flex
	SET PTP FEED=n		punch 'n' feed (0) characters

Transposed Flex has the tape channels in this order: 6-1-2-3-4-5.  The
default is ASCII-encoded Flex.

The ATTACH command recognizes two switches:

	ATT -A PTP file	file format is ASCII-encoded Flex
	ATT -F PTP file	file format is transposed Flex

The paper tape punch implements these registers:

	name		size	comments

	BUF		6	last data item processed
	POS		32	position in the output file
	TIME		24	time from I/O initiation to completion
	STOP_IOE	1	stop on I/O error

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

2.6 Symbolic Display and Input

The LGP simulator implements symbolic display and input.  Display is
controlled by command line switches:

	-a			display as character (tape files only)
	-h			display as standard hexadecimal
	-l			display as LGP hexadecimal
	-m			display instruction mnemonics
	-n			display addresses in normal format
				(overrides SET CPU TRACK)
	-t			display addresses as track/sector
				(overrides SET CPU NORMAL)

Input parsing is controlled by the first character typed in or by command
line switches:

	' or -a			Flex character
	- or opcode		instruction mnemonic
	numeric			hexadecimal number

LGP hexadecimal differs from standard hexadecimal in the characters used
for digits 10-15

	digit	standard hex	LPG hex

	10	A		F
	11	B		G
	12	C		J
	13	D		K
	14	E		Q
	15	F		W

There is only instruction format:

	{-}op address

'op' is always a single letter.  A track/sector address (specified by
SET CPU TRACK or switch -t) is two decimal numbers between 0 and 63,
representing the track and sector.  A linear address (specified by
SET CPU NORMAL or switch -n) is one decimal number between 0 and 4095.
For example:

	sim> d -n 64 10640
	sim> ex -mn 64
	64:	B 400
	sim> ex -mt 100
	0100:	B 0616

2.7 Character Set

The LGP Typewriter was a Friden Flexowriter.  Input was always upper case;
output could be either upper case or lower case.  The following table provides
equivalences between LPG Typewriter coding and ASCII.

Typewriter	Input		LC output	UC output
code (hex)

00		illegal		illegal		illegal
01		z or Z		z		Z
02		0 or )		0		)
03		space		space		space
04		illegal		lower case	lower case
05		b or B		b		B
06		1 or L		1		L
07		- or _		0		_
10		illegal		upper case	upper case
11		y or Y		y		Y
12		2 or *		2		*
13		+ or =		+		=
14		illegal		color shift	color shift
15		r or R		r		R
16		3 or "		3		"
17		; or :		;		:
20		newline		newline		newline
21		i or I		i		I
22		4 or ^		4		^
23		/ or ?		/		?
24		illegal		backspace	backspace
25		d or D		d		D
26		5 or %		5		%
27		. or ]		.		]
30		tab		tab		tab
31		n or N		n		N
32		6 or $		6		$
33		, or [		,		[
34		illegal		illegal		illegal
35		m or M		m		M
36		7 or ~		7		~
37		v or V		v		V
40		' (cond stop)	'		'
41		p or P		p		P
42		8 or #		8		#
43		o or O		o		O
44		illegal		illegal		illegal
45		e or E		e		E
46		9 or (		9		(
47		x or X		x		X
50		illegal		illegal		illegal
51		u or U		u		U
52		f or F		f		F
53		illegal		illegal		illegal
54		illegal		illegal		illegal
55		t or T		t		T
56		g or G		g		G
57		illegal		illegal		illegal
60		illegal		illegal		illegal
61		h or H		h		H
62		j or J		j		J
63		illegal		illegal		illegal
64		illegal		illegal		illegal
65		c or C		c		C
66		k or K		k		K
67		illegal		illegal		illegal
70		illegal		illegal		illegal
71		a or A		a		A
72		q or Q		q		Q
73		illegal		illegal		illegal
74		illegal		illegal		illegal
75		s or S		s		S
76		w or W		w		W
77		illegal		illegal		illegal

Certain characters on the Flexowriter keyboard don't exist in ASCII.
The following table provides ASCII substitution characters for the unique
Flexowriter characters (this is compatible with the coding in the LGP30
paper tape archive):

Typewriter	Flex		ASCII
code

UC 12		delta		^
UC 1E		pi		~
UC 22		sigma		#

Certain Flexowriter codes have no character equivalent of any kind.
For paper-tape reader and punch files, these are encoded as #dd, where
dd is a decimal number between 0 and 63.
