RSM/TX ;	RSM-2D		VERSION 1.0
 ;	SMALL SYSTEM SOFTWARE
 ;		TOM NUSSMEIER
 ;		GARY THURMOND
 ;
 ;
 	ORG	6C00H
 MONI	EQU	$
 SCPAD	EQU	$+1300H
 PAGE	EQU	3C00H
 STAT	EQU	387FH
 SHIFT	EQU	3880H
 BUFL	EQU	48
 CTIM0	EQU	129
 CTIM1	EQU	15
 CTIM2	EQU	96
 CTIM3	EQU	1
 CTIM4	EQU	65
 CTIM5	EQU	133
 PORT	EQU	37E8H
 	ORG	SCPAD
 STAK	EQU	$+80H
 RAM	EQU	STAK
 IBUF	DS	48
 BSTAK	DS	1
 IFLAG	DS	1
 CHAR	DS	1
 FLGP	DS	1
 FLGBP	DS	1
 TCNTR	DS	1
 DECNB	DS	1
 YTEMP	DS	2
 BSTOR	DS	2
 CURS	DS	2
 FLAG	DS	1
 FLG2	DS	1
 FLG4	DS	1
 PNTR	DS	2
 END	DS	2
 FLGLF	DS	1
 FLGPR	DS	1
 NULCT	DS	1
 BAUD	DS	2
 	ORG	MONI
 	JP	START
 	JP	CRT
 	JP	KEYB
 	JP	KEYBC
 	JP	PRINT
 	DS	9
 CMSG	DB	44
 	DB	'RSM-2.0  16K (C) 1978',13
 	DB	'SMALL SYSTEM SOFTWARE',13
 KEYBG	PUSH	HL
 	LD	HL,CHAR
 	LD	A,(STAT)
 	OR	A
 	JR	Z,KEYG1
 	EXX
 	CALL	SCAN
 	EXX
 	CP	(HL)
 	JR	Z,KEYG2
 KEYG1	LD	(HL),A
 	AND	7FH
 KEYG2	POP	HL
 	RET
 SCAN	LD	B,0
 	DJNZ	$
 	LD	DE,TBL
 	LD	HL,SHIFT
 	LD	C,(HL)
 	LD	L,1
 	XOR	A
 SCAN1	OR	(HL)
 	JR	NZ,SCAN2
 	INC	DE
 	SLA	L
 	JP	P,SCAN1
 	XOR	A
 	RET
 SCAN2	EX	DE,HL
 	LD	B,(HL)
 SCAN3	INC	B
 	SRL	A
 	JR	NZ,SCAN3
 	LD	A,B
 	CP	40H
 	RET	Z
 	JR	NC,SCAN6
 	CP	3CH
 	JR	NC,SCAN7
 	CP	30H
 	JR	NC,SCAN8
 	LD	HL,TBL2
 SCAN4	INC	HL
 	DJNZ	SCAN4
 	LD	A,(HL)
 SCAN5	AND	3FH
 	RET
 SCAN6	BIT	0,C
 	RET	Z
 	JR	SCAN5
 SCAN7	BIT	0,C
 	RET	NZ
 	JR	SCAN9
 SCAN8	BIT	0,C
 	RET	Z
 SCAN9	AND	2FH
 	RET
 TBL	DB	3FH,47H,4FH
 	DB	57H,2FH,37H
 TBL2	DB	0,13,12,3
 	DB	1BH,3,1DH,1EH
 	DB	' '
 BLINK	LD	A,(3C3FH)
 	XOR	10
 	LD	(3C3FH),A
 	RET
 NOPLS	LD	B,CTIM0
 	DJNZ	$-2
 	XOR	A
 	RET
 PULS	LD	A,5
 	OUT	(-1),A
 	LD	B,CTIM1
 	DJNZ	$-2
 	LD	A,6
 	OUT	(-1),A
 	LD	B,CTIM1
 	DJNZ	$-2
 	LD	A,4
 	OUT	(-1),A
 	LD	B,CTIM2
 	DJNZ	$-2
 	RET
 PREP	XOR	A		;WRITE TAPE
 	LD	B,A		;LEADER AND
 	LD	A,4		;SYNC BYTE
 	OUT	(-1),A
 PREP2	DJNZ	PREP2
 	DJNZ	PREP2+2
 	XOR	A
 PREP1	CALL	COUT
 	DJNZ	PREP1
 	CALL	STAR
 	LD	A,0A5H
 COUT	EXX			;WRITE TAPE BYTE
 	LD	C,8
 	LD	D,A
 COUTA	CALL	PULS
 	LD	B,CTIM3
 	DJNZ	$-2
 	LD	A,D
 	RLCA
 	LD	D,A
 	CALL	NC,NOPLS
 	CALL	C,PULS
 	DEC	C
 	JR	NZ,COUTA
 	EXX
 KEYBC	LD	A,(STAT)	;KEYBOARD WITH
 	OR	A		;BREAK CHECK
 	RET	Z
 	CALL	KEYBG
 	RET	Z
 	CP	3
 	RET	NZ
 	JP	START
 PAUSE	LD	A,(FLGP)	;MONITOR PAUSE
 	CP	' '
 	JR	Z,KEYB
 	CALL	KEYBC
 	RET	Z
 	CP	' '
 	RET	NZ
 KEYB	CALL	KEYBC		;KEYBOARD WITH
 	JR	Z,KEYB		;STATUS WAIT
 	LD	(FLGP),A
 	CP	1EH		;RIGHT ARROW
 	RET	NZ
 	LD	A,(PORT)
 	LD	(FLGPR),A
 	LD	A,13
 	RET
 SYNC	LD	A,4		;WRITE TAPE LEADER
 	OUT	(-1),A
 	XOR	A
 SYNC1	CALL	CIN1
 	CP	0A5H
 	JR	NZ,SYNC1
 STAR	LD	A,'*'
 	LD	(3C3EH),A
 	RET
 ENDCK	ADD	A,B		;CHECK FOR END OF
 	LD	B,A		;TAPE READ/WRITE
 	INC	HL
 	DEC	DE
 	XOR	A
 	CP	E
 	RET	NZ
 	CALL	BLINK
 	XOR	A
 	CP	D
 	RET
 R4	PUSH	AF		;READ TAPE LEADER
 	CALL	CIN
 	LD	H,A
 	CALL	CIN
 	LD	L,A
 	CALL	CIN
 	LD	D,A
 	CALL	CIN
 	LD	E,A
 	POP	AF
 	RET
 CERR	DB	16,'CHECKSUM ERROR  '
 DISK2	PUSH	BC		;READ/WRITE DISK
 	CALL	DISK3
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 DISK3	LD	(37EEH),DE
 	LD	HL,37ECH
 	LD	(HL),18H
 	PUSH	BC
 	POP	BC
 	PUSH	BC
 	POP	BC
 BUSY	LD	A,(HL)
 	RRCA
 	JR	C,BUSY
 PAT1	LD	(HL),88H
 	PUSH	DE
 	LD	DE,37EFH
 	PUSH	BC
 	POP	BC
 	PUSH	BC
 	POP	BC
 	JR	LOOP
 DRQ	RRCA
 	JR	NC,ERRT
 LOOP	LD	A,(HL)
 	BIT	1,A
 	JR	Z,DRQ
 PAT2	LD	A,(DE)
 	LD	(BC),A
 	INC	BC
 	JR	LOOP
 ERRT	LD	A,(HL)
 	AND	1CH
 	POP	DE
 	RET	Z
 	LD	(HL),0D0H
 	RET
 HEXC	CP	'0'		;HEX CHECK
 	RET	C
 	CP	'9'+1
 	CCF
 	RET	NC
 	CP	'A'
 	RET	C
 	CP	'F'+1
 	CCF
 	RET
 AHEX	ADD	HL,HL		;ASCII TO BINARY
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,HL
 	SUB	48
 	CP	10
 	JR	C,$+2
 	SUB	7
 	ADD	A,L
 	LD	L,A
 	RET
 STRNG	LD	B,(HL)		;PRINT STRING
 	INC	HL
 STR1	LD	A,(HL)
 	CALL	CRT
 	DJNZ	STRNG+1
 	RET
 DLMT	CP	3		;DUMP LIMIT
 	JR	C,LENG
 	LD	HL,-1
 LENG	EX	DE,HL		;LENGTH COMPUTATION
 	LD	A,E
 	SUB	L
 	LD	E,A
 	LD	A,D
 	SBC	A,H
 	LD	D,A
 	RET
 IDEC	PUSH	BC		;INTERPRET HL
 	PUSH	DE		;AS DECIMAL
 	LD	B,H
 	LD	C,L
 	LD	HL,0
 	LD	A,B
 	CALL	CONV
 	JR	C,$+4
 	LD	A,C
 	CALL	CONV
 	POP	DE
 	POP	BC
 	RET
 CONV	LD	B,A
 	CALL	N2
 	RET	C
 	LD	A,B
 	JR	N1
 N2	RLCA
 	RLCA
 	RLCA
 	RLCA
 N1	AND	15
 	CP	10
 	CCF
 	RET	C
 	LD	D,H
 	LD	E,L
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,DE
 	ADD	HL,HL
 	LD	D,0
 	LD	E,A
 	ADD	HL,DE
 	RET
 ERR	LD	B,5		;OUTPUT "ERROR"
 	LD	HL,CERR+9
 	CALL	STRNG+1
 	JR	START
 HLSP2	CALL	HLOUT		;OUTPUT HL REGS
 	JR	SP2		;AND 2 SPACES
 ADRO	CALL	CRLF		;OUTPUT ADDRESS
 	CALL	HLOUT
 	LD	A,':'
 	CALL	CRT
 SP2	CALL	SP1
 SP1	LD	A,' '
 	JP	CRT
 HLOUT	LD	A,H		;OUTPUT H,L REGISTERS
 	CALL	OUTH
 	LD	A,L
 	JR	OUTH
 OUTM	LD	A,(HL)		;OUTPUT HEX FORMAT
 OUTH	PUSH	AF
 	RRCA
 	RRCA
 	RRCA
 	RRCA
 	CALL	BIASC
 	POP	AF
 BIASC	AND	15		;BINARY TO ASCII
 	CP	10
 	JR	C,NUMB
 	ADD	A,7
 NUMB	ADD	A,'0'
 	JP	CRT
 LDHL	CALL	CIN
 	LD	L,A
 	CALL	CIN
 	LD	H,A
 	RET
 CIN	PUSH	BC		;TAPE INPUT
 	PUSH	HL
 	LD	B,8
 CINA	CALL	CIN1
 	DJNZ	CINA
 	POP	HL
 	POP	BC
 	RET
 CIN1	PUSH	BC		;READ 1 BIT
 	PUSH	AF
 CIN1A	CALL	KEYBC
 	IN	A,(-1)
 	RLA
 	JR	NC,CIN1A
 	LD	B,CTIM4
 	DJNZ	$-2
 	LD	A,4
 	OUT	(-1),A
 	LD	B,CTIM5
 	DJNZ	$-2
 	IN	A,(-1)
 	LD	B,A
 	LD	A,4
 	OUT	(-1),A
 	POP	AF
 	RL	B
 	RLA
 	POP	BC
 	RET
 INITC	LD	(IFLAG),A	;HOT INITIALIZATION
 START	DI
 	LD	SP,STAK
 	LD	A,(IFLAG)
 	CP	0C9H
 	JR	Z,PRMPT
 INIT	LD	HL,IBUF		;INITIALIZATION
 	LD	B,0
 INIT2	LD	(HL),0
 	INC	HL
 	DJNZ	INIT2
 	LD	A,0C9H
 	LD	(IFLAG),A
 	LD	(RAM),A
 	LD	A,12
 	CALL	CRT
 	XOR	A
 	CALL	SETBD+1
 	LD	HL,CMSG
 	CALL	STRNG
 PRMPT	XOR	A
 	OUT	(-1),A
 	LD	HL,START
 	PUSH	HL
 	LD	HL,PR1
 	CALL	STRNG
 	XOR	A
 	LD	(FLGPR),A
 CMND	CALL	KEYB
 	CP	8
 	JR	Z,CMND
 	CP	12
 	JP	Z,CRT
 	CP	20H
 	JR	C,CMND
 	CALL	CRT
 	CALL	COMM
 	JR	Z,BS1
 	LD	HL,IBUF
 	LD	BC,BUFL
 	LD	(HL),A
 	INC	HL
 	CALL	READ
 	CP	13
 	JP	Z,DECOD
 	JR	CMND
 BS1	LD	A,1DH		;BACKSPACE
 	CALL	CRT
 	JR	CMND
 BLANK	DEC	HL
 	CP	(HL)
 	INC	HL
 	JR	NZ,FULL
 BS2	LD	A,1DH
 	CALL	CRT
 READ	CALL	KEYB		;LOAD BUFFER
 	CP	12
 	JR	Z,READ
 	CALL	CRT
 	LD	(HL),A
 	CP	13
 	RET	Z
 	CP	1DH
 	JR	Z,ERASE
 	CP	' '
 	JR	Z,BLANK
 	JR	C,READ
 	CALL	HEXC
 	JR	C,BS2
 FULL	LD	A,L
 	CP	C
 	JR	Z,BS2
 	INC	HL
 	JR	READ
 ERASE	DEC	L		;DELETE CHARACTER
 	JR	NZ,READ
 	RET
 COMM	LD	HL,CTBLE-3	;COMMAND SEARCH
 	LD	DE,3
 	LD	B,A
 COM1	ADD	HL,DE
 	LD	A,(HL)
 	OR	A
 	RET	Z
 	CP	B
 	JR	NZ,COM1
 	INC	HL
 	LD	E,(HL)
 	INC	HL
 	LD	D,(HL)
 	OR	A
 	RET
 CTBLE	DB	'A'
 	DW	ASCI
 	DB	'B'
 	DW	HEXAR
 	DB	'C'
 	DW	CHEK
 	DB	'D'
 	DW	DUMP
 	DB	'E'
 	DW	EDIT
 	DB	'F'
 	DW	LOOK
 	DB	'G'
 	DW	EXCT
 	DB	'H'
 	DW	LOOK
 	DB	'I'
 	DW	ICMD
 	DB	'K'
 	DW	ECHO
 	DB	'L'
 	DW	DLOAD
 	DB	'M'
 	DW	MOVE
 	DB	'O'
 	DW	OUTCM
 	DB	'P'
 	DW	PUNCH
 	DB	'Q'
 	DW	CKSUM
 	DB	'R'
 	DW	INP
 	DB	'S'
 	DW	SYMB
 	DB	'T'
 	DW	TEST
 	DB	'U'
 	DW	USER
 	DB	'V'
 	DW	VRFY
 	DB	'W'
 	DW	WRIT
 	DB	'X'
 	DW	XCHG
 	DB	'Y'
 	DW	YCMND
 	DB	'Z'
 	DW	ZERO
 	DB	'@'
 	DW	BKPT
 	DB	'$'
 	DW	DSAVE
 	DW	0,0,0
 	DB	0
 DECOD	LD	A,(IBUF)	;DECODE BUFFER
 	CALL	COMM
 	LD	HL,IBUF
 	LD	B,4
 	EX	DE,HL
 NXT	INC	DE
 	LD	A,(DE)
 	CP	13
 	JR	Z,SETUP
 	CP	' '
 	JR	Z,COUNT
 	DEC	DE
 	LD	A,4
 	CP	B
 	JR	Z,COUNT
 	INC	DE
 	LD	A,(DE)
 	CALL	AHEX
 	JR	NXT
 COUNT	DEC	B
 	JR	Z,SETUP
 	PUSH	HL
 	LD	HL,0
 	JR	NXT
 SETUP	LD	A,B		;SETUP REGISTERS
 	LD	BC,0
 	LD	DE,0
 	CP	4
 	JR	Z,AD0
 	CP	3
 	JR	Z,AD1
 	CP	2
 	JR	Z,AD2
 	PUSH	HL
 	POP	BC
 	POP	HL
 AD2	POP	DE
 	INC	HL
 	RET
 AD0	PUSH	HL
 	LD	HL,0
 AD1	PUSH	HL
 	LD	B,10H
 	ADD	HL,BC
 	LD	B,0
 	POP	DE
 	RET
 PR1	DB	10,13,'COMMAND?',13
 CRLF	LD	A,13
 CRT	EXX			;VIDEO DRIVER
 	PUSH	AF
 	AND	7FH
 	LD	HL,PAGE-1
 	CP	12		;CLEAR CHECK
 	JR	Z,SPFIL
 	LD	HL,(CURS)
 	LD	(HL),' '
 	CP	1DH		;BACKARROW
 	JR	Z,BS
 	CP	13
 	JR	Z,SCROL
 	CP	' '
 	JR	C,EXIT+3
 	LD	(HL),A
 	INC	HL
 	BIT	6,H
 	JR	Z,EXIT
 SCROL	LD	BC,1800H
 	DEC	C
 	JR	NZ,SCROL+3
 	DJNZ	SCROL+3
 	LD	BC,960
 	LD	DE,PAGE
 	LD	HL,PAGE+64
 	LDIR
 	EX	DE,HL
 SPFIL	INC	HL
 	BIT	6,H
 	JR	NZ,FINI
 	LD	(HL),' '
 	JR	SPFIL
 FINI	LD	HL,PAGE+961
 BS	DEC	HL
 EXIT	LD	(CURS),HL
 	LD	(HL),8FH
 	LD	A,(FLGPR)
 	EXX
 	OR	A
 	JR	NZ,PRINT-1
 	POP	AF
 	RET
 	POP	AF
 PRINT	PUSH	AF		;PRINT DRIVER
 	CP	13
 	JR	Z,CRTN
 	POP	AF
 PRT1	PUSH	HL
 	PUSH	AF
 	LD	HL,PORT
 	LD	A,(FLGPR)
 	RLCA
 	JR	C,TRS2
 PRT2	POP	AF
 	PUSH	AF
 	CP	10
 	JR	Z,PRT4
 PRT3	CALL	KEYBC
 	BIT	7,(HL)
 	JR	NZ,PRT3
 	POP	AF
 	LD	(HL),A
 	PUSH	AF
 PRT4	POP	AF
 	POP	HL
 	RET
 TRS2	POP	AF		;TRS-232 DRIVER
 	PUSH	AF
 	PUSH	BC
 	SCF
 	PUSH	AF
 	CALL	ZER0
 	LD	B,9
 TRS2A	POP	AF
 	RRA
 	PUSH	AF
 	CALL	NC,ZER0
 	CALL	C,ONE
 	DJNZ	TRS2A
 	LD	A,(BAUD+1)
 	BIT	1,A
 	CALL	NZ,ONE
 	POP	AF
 	POP	BC
 	POP	AF
 	POP	HL
 	RET
 ZER0	LD	A,1
 	JR	ONE+1
 ONE	XOR	A
 	OUT	(-1),A
 	LD	HL,(BAUD)
 ONE1	DEC	HL
 	LD	A,H
 	OR	L
 	JR	NZ,ONE1
 	RET
 CRTN	LD	A,' '
 	CALL	PRT1
 	LD	A,13
 	CALL	PRT1
 	LD	A,(FLGLF)
 	OR	A
 	LD	A,10
 	CALL	Z,PRT1
 	PUSH	BC
 	CALL	NULLS
 	POP	BC
 	POP	AF
 	RET
 NULLS	LD	A,(NULCT)
 	LD	B,A
 NULL1	XOR	A
 	DEC	B
 	RET	M
 	CALL	PRT1
 	JR	NULL1
 ASCI	DEC	HL		;ASCII DUMP (A)
 	PUSH	AF
 	LD	A,L
 	OR	H
 	LD	C,A
 	POP	AF
 	CP	3
 	JR	C,$+1
 	LD	C,A
 	INC	HL
 	CALL	DLMT
 ASC1	CALL	ADRO
 	LD	B,48
 	INC	C
 	DEC	C
 	JR	NZ,ASC2
 	LD	DE,-1
 	LD	B,16
 ASC2	LD	A,D
 	OR	E
 	RET	Z
 	LD	A,(HL)
 	AND	7FH
 	DEC	DE
 	INC	C
 	DEC	C
 	JR	Z,ASC5
 	CP	8
 	JR	Z,ASC3
 	CP	13
 	JR	Z,ASC4
 	CP	20H
 	JR	NC,$+2
 ASC3	LD	A,'.'
 	CALL	CRT
 ASC7	INC	HL
 	DJNZ	ASC2
 	DEC	HL
 ASC4	INC	HL
 	CALL	PAUSE
 	JR	ASC1
 ASC5	CP	20H
 	JR	C,ASC6
 	CP	8
 	JR	Z,ASC6
 	CALL	CRT
 	LD	A,(HL)
 	RLCA
 	JR	NC,ASC9
 	LD	A,'.'
 	CALL	CRT
 ASC8	CALL	SP1
 	JR	ASC7
 ASC6	CALL	OUTM
 	JR	ASC8
 ASC9	CALL	SP2
 	JR	ASC7
 HEXAR	CP	3		;HEX ARITHMETIC (B)
 	JR	C,HEX2
 	EX	DE,HL
 DECML	LD	DE,-10000	;DECIMAL OUTPUT
 	CALL	DIVD
 	LD	DE,-1000
 	CALL	DIVD
 	LD	DE,-100
 	CALL	DIVD
 DEC2	LD	DE,-10
 	CALL	DIVD
 	LD	DE,-1
 DIVD	LD	A,'0'-1
 	PUSH	HL
 	POP	BC
 	INC	A
 	PUSH	HL
 	ADD	HL,DE
 	JR	C,DIVD+3
 	POP	HL
 	JP	CRT
 HEX2	DEC	HL
 	PUSH	HL
 	LD	HL,YMSG
 	CALL	STRNG
 	CALL	CRLF
 	POP	HL
 	PUSH	HL
 	CALL	LENG
 	CALL	SP1
 	CALL	HLSP2
 	EX	DE,HL
 	EX	(SP),HL
 	CALL	HLSP2
 	EX	DE,HL
 	PUSH	HL
 	CALL	LENG
 	POP	BC
 	PUSH	HL
 	ADD	HL,BC
 	CALL	HLSP2
 	EX	DE,HL
 	CALL	HLSP2
 	LD	(YTEMP),HL
 	POP	HL
 	EX	(SP),HL
 	CALL	HLOUT
 	EX	(SP),HL
 	PUSH	HL
 	LD	HL,(YTEMP)
 	EX	(SP),HL
 	PUSH	DE
 	PUSH	HL
 	PUSH	BC
 	CALL	CRLF
 	LD	B,6
 	PUSH	BC
 HEX1	POP	BC
 	DEC	B
 	RET	Z
 	POP	HL
 	PUSH	BC
 	CALL	DECML
 	CALL	SP1
 	JR	HEX1
 YMSG	DB	28,'  A     B    A+B   A-B   B-A'
 DUMP	CALL	DLMT		;DUMP HEX (D)
 	CALL	ADRO
 	LD	B,16
 DM1	CALL	OUTM
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	RET	Z
 	CALL	SP1
 	DJNZ	DM1
 	CALL	PAUSE
 	JR	DUMP+3
 	DEC	DE
 EDIT	EX	DE,HL		;EDIT MEMORY (E)
 	CALL	ADRO
 	EX	DE,HL
 EDIT2	EX	DE,HL
 	CALL	OUTM
 	EX	DE,HL
 	LD	A,'-'
 	CALL	CRT
 	LD	HL,0
 	LD	B,1
 EDIT3	CALL	KEYBG
 	JR	Z,EDIT3
 	LD	C,A
 	CALL	HEXC
 	LD	A,C
 	JR	NC,EDIT4
 	CP	' '
 	JR	Z,EDIT5
 	CP	13
 	JR	Z,EDIT6
 	CP	1BH
 	JR	Z,EDIT-1
 	CP	3
 	JR	NZ,EDIT3
 EDIT8	DEC	B
 	JR	Z,EDIT9
 	LD	A,L
 	LD	(DE),A
 EDIT9	INC	DE
 	JP	SP2
 EDIT4	CALL	CRT
 	LD	B,A
 	CALL	AHEX
 	JR	EDIT3
 EDIT5	CALL	EDIT8
 	JR	EDIT2
 EDIT6	CALL	EDIT8
 	JR	EDIT
 LOOK	CALL	LENG		;1,2 BYTE SEARCH (F,H)
 	LD	A,(HL)
 	CP	C
 	CALL	Z,LK2
 	LD	A,D
 	OR	E
 	RET	Z
 	INC	HL
 	DEC	DE
 	JR	LOOK+3
 LK2	LD	A,(IBUF)
 	CP	'F'
 	JR	NZ,LK3
 	CALL	ADRO
 	CALL	OUTM
 	CALL	SP2
 	INC	HL
 	CALL	OUTM
 	DEC	HL
 	JP	PAUSE
 LK3	INC	HL
 	LD	A,(HL)
 	CP	B
 	DEC	HL
 	RET	NZ
 	DEC	HL
 	CALL	ADRO
 	CALL	OUTM
 	CALL	SP2
 	INC	HL
 	INC	HL
 	CALL	OUTM
 	DEC	HL
 	CALL	OUTM
 	JP	PAUSE
 EXCT	PUSH	DE		;EXECUTE (G)
 	RET
 ICMD	CP	4		;EXECUTE (I)
 	JP	Z,INITC		;INITIALIZATION OR
 	LD	D,E		;INPUT FROM PORT
 	LD	E,0DBH
 	LD	A,0CDH
 	LD	BC,OUTH
 ICMD1	LD	H,L
 	LD	L,B
 	LD	B,C
 	LD	C,A
 	LD	A,H
 	LD	H,0C3H
 	PUSH	HL
 	PUSH	BC
 	PUSH	DE
 	LD	HL,0
 	ADD	HL,SP
 	JP	(HL)
 OUTCM	LD	D,E		;OUTPUT TO PORT (O)
 	LD	E,0D3H
 	DEC	L
 	XOR	A
 	LD	B,A
 	LD	C,A
 	JR	ICMD1
 ECHO	LD	A,12		;KEYBOARD ECHO (K)
 	CALL	CRT
 	CALL	KEYB
 	JR	ECHO+2
 MOVE	CP	2		;MOVE MEMORY (M)
 	JP	NC,ERR
 	PUSH	HL
 	CALL	LENG
 	PUSH	DE
 	EX	DE,HL
 	PUSH	BC
 	POP	HL
 	CALL	LENG
 	JR	NC,GTR
 	POP	DE
 	POP	AF
 MV1	LD	A,(HL)
 	LD	(BC),A
 	INC	BC
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,MV1
 	RET
 GTR	POP	DE
 	PUSH	DE
 	POP	HL
 	ADD	HL,BC
 	POP	BC
 	DEC	HL
 	DEC	BC
 MV2	LD	A,(BC)
 	LD	(HL),A
 	DEC	BC
 	DEC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,MV2
 	RET
 USER	DEC	HL		;USER (U)
 	JP	RAM
 VRFY	CP	2		;VERIFY MEMORY (V)
 	JP	NC,ERR
 	CALL	LENG
 VR1	LD	A,(BC)
 	CP	(HL)
 	CALL	NZ,VR2
 	INC	HL
 	INC	BC
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,VR1
 	RET
 VR2	CALL	ADRO
 	CALL	OUTM
 	CALL	SP2
 	LD	A,(BC)
 	CALL	OUTH
 	JP	PAUSE
 WRIT	PUSH	AF		;WRITE TAPE (W)
 	CALL	LENG
 	POP	AF
 	PUSH	HL
 	CP	2
 	JR	NC,$+2
 	PUSH	BC
 	POP	HL
 	CALL	PREP
 	LD	A,H
 	CALL	COUT
 	LD	A,L
 	CALL	COUT
 	POP	HL
 	LD	A,D
 	CALL	COUT
 	LD	A,E
 	CALL	COUT
 WR1	LD	B,0
 WR2	LD	A,(HL)
 	CALL	COUT
 	LD	A,(HL)
 	CALL	ENDCK
 	JR	NZ,WR2
 	LD	A,B
 	CALL	COUT
 IN6	LD	C,B
 	JP	CKSM2
 SYSTM	POP	AF		;READ SYSTEM
 	LD	HL,IBUF		;TAPE (R0)
 	PUSH	HL
 	LD	(HL),7
 	INC	HL
 	CALL	SYNC
 	LD	B,6
 	CALL	CIN
 	CP	55H
 	JP	NZ,ERR
 SYST1	CALL	CIN
 	LD	(HL),A
 	INC	HL
 	DJNZ	SYST1
 	LD	(HL),' '
 	POP	HL
 	CALL	STRNG
 SYST2	CALL	BLINK
 	CALL	CIN
 	CP	78H
 	JR	Z,LAST
 	CALL	CIN
 	LD	B,A
 	CALL	LDHL
 	ADD	A,L
 	LD	C,A
 SYST3	CALL	CIN
 	LD	(HL),A
 	INC	HL
 	ADD	A,C
 	LD	C,A
 	DJNZ	SYST3
 	CALL	CIN
 	CP	C
 	JR	Z,SYST2
 	XOR	A
 	OUT	(-1),A
 	CALL	CRLF
 	JP	ERR
 LAST	CALL	LDHL
 	XOR	A
 	OUT	(-1),A
 	JP	HLOUT
 CHEK	LD	C,0		;CHECK TAPE (C)
 	JR	LDGO+2
 INP	LD	C,1		;READ TAPE (R)
 	CP	3
 	JR	NZ,LDGO+2
 	PUSH	AF
 	LD	A,D
 	OR	E
 	JR	Z,SYSTM
 	POP	AF
 	JR	LDGO+2
 LDGO	LD	C,2		;LOAD AND GO (L)
 	DEC	HL
 	PUSH	AF
 	CALL	SYNC
 	POP	AF
 	CP	4
 	CALL	Z,R4
 	CP	3
 	JR	NZ,IN2
 	PUSH	DE
 	CALL	R4
 	POP	HL
 IN2	PUSH	HL
 	LD	B,0
 IN3	CALL	CIN
 	INC	C
 	DEC	C
 	JR	Z,$+1
 	LD	(HL),A
 	CALL	ENDCK
 	JR	NZ,IN3
 	POP	HL
 	CALL	CIN
 	CP	B
 	JR	NZ,IN5
 	LD	A,C
 	CP	2
 	JP	NZ,IN6
 	EX	(SP),HL
 	XOR	A
 	OUT	(-1),A
 	RET
 IN5	PUSH	AF
 	LD	C,B
 	XOR	A
 	OUT	(-1),A
 	LD	HL,CERR
 	CALL	STRNG
 	POP	AF
 	CALL	OUTH
 	CALL	SP2
 	JR	CKSM3
 CKSUM	CALL	LENG		;CHECKSUM (Q)
 	LD	C,0
 	LD	A,C
 	ADD	A,(HL)
 	LD	C,A
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,CKSUM+4
 CKSM2	LD	B,9
 	XOR	A
 	OUT	(-1),A
 	LD	HL,CERR
 	CALL	STRNG+1
 CKSM3	LD	A,C
 	JP	OUTH
 DLOAD	CP	2		;LOAD FROM DISK (L)
 	JR	Z,DLD1
 	JR	NC,LDGO
 	DEC	BC
 DLD1	INC	BC
 	PUSH	BC
 	PUSH	HL
 	LD	A,88H
 	LD	HL,21AH
 	JR	DSV1
 DSAVE	CP	2		;SAVE TO DISK ($)
 	JR	Z,DSV2
 DSV3	JP	NC,ERR
 	DEC	BC
 DSV2	INC	BC
 	PUSH	BC
 	PUSH	HL
 	LD	A,0A8H
 	LD	HL,120AH
 DSV1	DI
 	POP	BC
 	DEC	BC
 	LD	(PAT1+1),A
 	LD	(PAT2),HL
 	EX	DE,HL
 	LD	A,L
 	AND	15
 	CP	10
 	JR	NC,DSV3
 	PUSH	AF
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,HL
 	LD	L,H
 	LD	H,0
 	CALL	IDEC
 	LD	A,L
 	CP	80		;80 TRACKS
 	JR	NC,DSV3
 	LD	H,A
 	POP	AF
 	LD	L,A
 	EX	DE,HL
 	POP	HL
 	CALL	IDEC
 	PUSH	HL
 	DI
 	LD	A,1
 	LD	(37E1H),A
 	LD	HL,0
 DISK	DEC	HL
 	LD	A,H
 	OR	L
 	JR	NZ,DISK
 DISK1	LD	A,1
 	LD	(37E1H),A
 	POP	HL
 	DEC	L
 	RET	M
 	PUSH	HL
 	CALL	DISK2
 	JR	NC,DERR
 	INC	E
 	LD	A,E
 	SUB	10
 	JR	NZ,DISK1
 	LD	E,A
 	INC	D
 	JR	DISK1
 DERR	LD	HL,MSGD
 	CALL	STRNG
 	JP	ERR
 MSGD	DB	5,'Disk '
 TEST	CALL	LENG		;MEMORY TEST (T)
 	LD	BC,5A5AH
 CYCL	CALL	RNDM
 	PUSH	BC
 	PUSH	HL
 	PUSH	DE
 TLOP	CALL	RNDM
 	LD	(HL),B
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,TLOP
 	CALL	PAUSE
 	POP	DE
 	POP	HL
 	POP	BC
 	PUSH	HL
 	PUSH	DE
 RLOP	CALL	RNDM
 	LD	A,(HL)
 	CP	B
 	CALL	NZ,MERR
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,RLOP
 	LD	HL,TCNTR
 	INC	(HL)
 	PUSH	BC
 	CALL	Z,TESTN
 	POP	BC
 	POP	DE
 	POP	HL
 	JR	CYCL
 MERR	PUSH	AF		;ERROR FOUND
 	CALL	PAUSE
 	CALL	ADRO
 	LD	A,B
 	CALL	OUTH
 	CALL	SP2
 	POP	AF
 	JP	OUTH
 RNDM	LD	A,B		;PSEUDO-RANDOM
 	AND	0B4H		;NUMBER GENERATOR
 	AND	A
 	JP	PE,PEVE
 	SCF
 PEVE	LD	A,C
 	RLA
 	LD	C,A
 	LD	A,B
 	RLA
 	LD	B,A
 	RET
 TESTN	LD	A,(DECNB)	;TEST COUNTER
 	ADD	A,1
 	DAA
 	LD	(DECNB),A
 	CALL	OUTH
 	LD	HL,NMSG
 	CALL	STRNG
 	JP	CRLF
 NMSG	DB	6,' Tests'
 XCHG	CP	2		;EXCHANGE MEMORY
 	JP	NC,ERR
 	CALL	LENG
 XCH1	LD	A,(BC)
 	PUSH	AF
 	LD	A,(HL)
 	LD	(BC),A
 	POP	AF
 	LD	(HL),A
 	INC	HL
 	INC	BC
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,XCH1
 	RET
 YCMND	CP	2		;SET PRINT
 	JR	Z,SETNL		;VALUES AT (Y)
 	JR	C,SETLF
 	CP	3
 	JR	Z,SETBD
 	LD	E,3
 	INC	L
 	LD	H,0
 	INC	C
 SETLF	LD	A,C
 	CP	2
 JERR2	JP	NC,ERR
 	DEC	A
 	LD	(FLGLF),A
 SETNL	CALL	IDEC
 	LD	A,L
 	DEC	A
 	CP	128
 	JR	NC,JERR2
 	LD	(NULCT),A
 SETBD	LD	A,E
 	CP	7
 	JR	NC,JERR2
 	OR	A
 	JR	NZ,$+2
 	LD	A,3
 	LD	HL,BDTBL-2
 	ADD	A,A
 	ADD	A,L
 	LD	L,A
 	LD	E,(HL)
 	INC	HL
 	LD	D,(HL)
 	LD	(BAUD),DE
 	RET
 BDTBL	DW	618,452,225,149,111,54
 ZERO	CALL	LENG		;FILL MEMORY (Z)
 	LD	(HL),C
 	INC	HL
 	DEC	DE
 	LD	A,D
 	OR	E
 	JR	NZ,ZERO+3
 	RET
 BKPT	CP	4		;SET BREAKPOINT (@)
 	JR	Z,BP3
 	PUSH	DE
 	LD	A,(FLGBP)
 	OR	A
 	JR	Z,BP2
 	CALL	RESBP
 BP2	POP	HL
 	LD	(BSTOR),HL
 	LD	A,H
 	OR	L
 	JR	Z,BP3
 	LD	DE,FLGBP
 	LD	(DE),A
 	INC	DE
 	LD	A,(HL)
 	LD	(DE),A
 	LD	(HL),0CDH
 	INC	HL
 	INC	DE
 	LD	A,(HL)
 	LD	(DE),A
 	LD	(HL),0B0H
 	INC	HL
 	INC	DE
 	LD	A,(HL)
 	LD	(DE),A
 	LD	(HL),BRKH
 BP3	LD	HL,MSGBP
 	CALL	STRNG
 	LD	HL,(BSTOR)
 	JP	HLOUT
 RESBP	LD	HL,(BSTOR)	;RESET BREAKPOINT
 	LD	DE,FLGBP
 	XOR	A
 	LD	(DE),A
 	INC	DE
 	LD	B,3
 RSB1	LD	A,(DE)
 	LD	(HL),A
 	INC	HL
 	INC	DE
 	DEC	B
 	JR	NZ,RSB1
 	XOR	A
 	LD	(DE),A
 	INC	DE
 	LD	(DE),A
 	RET
 BREAK	DI			;DISPLAY BREAK
 	EXX
 	LD	(BSTAK-6),HL
 	POP	HL
 	POP	HL
 	LD	(BSTAK-2),HL
 	LD	HL,0
 	PUSH	AF
 	ADD	HL,SP
 	POP	AF
 	LD	(BSTAK-4),IY
 	LD	SP,BSTAK-6
 	EX	AF,AF'
 	PUSH	DE
 	PUSH	BC
 	PUSH	AF
 	PUSH	HL
 	EXX
 	EX	AF,AF'
 	PUSH	IX
 	PUSH	HL
 	PUSH	DE
 	PUSH	BC
 	PUSH	AF
 	CALL	BP3
 	LD	HL,MSGBK
 	CALL	STRNG
 	LD	C,2
 BRK1	CALL	CRLF
 	LD	B,6
 BRK2	POP	HL
 	CALL	HLOUT
 	CALL	SP1
 	DJNZ	BRK2
 	DEC	C
 	JR	NZ,BRK1
 	CALL	RESBP
 	JP	START
 BRKH	EQU	75H
 BRKI	EQU	7500H
 BRKL	EQU	0B0H
 MSGBP	DB	10,13,'Break at '
 MSGBK	DB	31,13,13
 	DB	'AF   BC   DE   HL   IX/Y STAK'
 PUNCH	CP	2		;WRITE SYSTEM
 	JR	Z,PNCH1		;TAPE (P)
 	JP	NC,ERR
 	PUSH	BC
 	JR	PNCH1+1
 PNCH1	PUSH	DE
 	CALL	LENG
 	PUSH	HL
 	PUSH	DE
 	CALL	RNAME
 	CALL	PREP
 	LD	B,7
 	LD	HL,IBUF
 PNCH2	LD	A,(HL)
 	CALL	COUT
 	INC	HL
 	DJNZ	PNCH2
 	POP	HL
 	POP	DE
 PNCH3	CALL	BLINK
 	DEC	H
 	JP	M,LSTBK
 	XOR	A
 	CALL	BKOUT
 	JR	PNCH3
 LSTBK	XOR	A		;LAST BLOCK
 	CP	L
 	JR	Z,PNCH4
 	LD	A,L
 	CALL	BKOUT
 PNCH4	LD	A,78H
 	CALL	COUT
 	POP	HL
 	LD	A,L
 	CALL	COUT
 	LD	A,H
 	JP	COUT
 BKOUT	LD	B,A		;WRITE BLOCK
 	LD	A,3CH
 	CALL	COUT
 	LD	A,B
 	CALL	COUT
 	LD	A,E
 	CALL	COUT
 	LD	A,D
 	CALL	COUT
 	LD	A,D
 	ADD	A,E
 	LD	C,A
 BK1	LD	A,(DE)
 	CALL	COUT
 	LD	A,(DE)
 	ADD	A,C
 	LD	C,A
 	INC	DE
 	DJNZ	BK1
 	LD	A,C
 	JP	COUT
 RNAME	LD	HL,FMSG		;READ NAME
 	CALL	STRNG
 	LD	B,8
 	LD	HL,IBUF+8
 RNM1	DEC	HL
 	LD	(HL),' '
 	DJNZ	RNM1
 	LD	(HL),55H
 	INC	HL
 	LD	B,6
 	INC	B
 RNM2	CALL	KEYB
 	CP	13
 	JP	Z,CRLF
 	CP	1DH
 	JR	Z,RNM3
 	CP	' '+1
 	JR	C,RNM2
 	DEC	B
 	JR	Z,RNM2-1
 	LD	(HL),A
 	CALL	CRT
 	INC	HL
 	JR	RNM2
 RNM3	LD	A,B
 	CP	7
 	JR	Z,RNM2
 	DEC	HL
 	LD	(HL),' '
 	LD	A,1DH
 	CALL	CRT
 	JR	RNM2-1
 FMSG	DB	7,13,'Name?',13
 	END	START
 	JR	Z,RNM2-1
 	LD	(HL),A
 	CALL	CRT
 	INC	HL
 	JR	RNM2
 RNM3	LD	A,B
 	CP	7
 	JR	Z,RNM2
 	DEC	HL
 