DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦b76dad0bc⟧

    Length: 23826 (0x5d12)
    Notes: pts_type(SC)
    Names: »SIMHOP.SC«

Derivation

└─⟦fce1dcf99⟧ Bits:30009704 Philips computer tape "KMD15"
    └─⟦this⟧ »DLCSIM/SIMHOP.SC« 

PTS(SC)

	IDENT SIMHOP	REL 1.1 78-04-21  870150240110
* 
* 
*	CC SIMULATION TOOL
* 
*	OPERATOR CONTROL
* 
*	PROGRAMMER: HSON
* 
*	76-04-30
* 
******************************************************* 
* 
*	THIS MODULE COMMUNICATES WITH 
*	THE OPERATOR
* 
*	ALLOWED INPUT KEYS: 
*	
*	O: OPEN RECEIVER
*        C:CLOSE RECEIVER 
* 
*	I: INSERT IN BUFFER SPECIFIED BY FOLLOWING HEXDEC NUMBER
*	   THEN FILL THE BUFFER WITH CHARACTERS 
*	   TO DELETE LAST CHARACTER PRESS: FEL
*	   *: END OF BUFFER 
* 
*	L: LIST BUFFER
*	   *: ALL BUFFERS 
*	   <HEXDEC>: ONE BUFFER 
* 
*	<HEXDEC>: PUT THIS BUFFER IN TRANSMITT QUEUE
*   	   (TIME OUT FOR RESPONSE MAY BE SPECIFIED AFTER:
*	    WITH UP TO TWO HEXDEC CHARACTERS) 
*	   N,: NEW BUFFER IN QUEUE
*	   SEND: TRANSMITT THE BUFFER QUEUE 
* 
*	R: RESET RECEIV BUFFER
* 
*        B:READ BUFFERS FROM CASSETTE 
*        W:WRITE BUFFERS ON CASSETTE
* 
**************************************************************
	EJECT
* 
* 
* 
	ENTRY	ASTART 
	ENTRY	PROTYP 
* 
* 
	EXTRN	TAB1	CHAR TABLE 1
	EXTRN	AREA	TRANSMIT AREAS
	EXTRN	LENGTH	TOTAL INDIVIDUAL AREA LENGTH
	EXTRN	TRQ	TRANSMIT QUEUE 
	EXTRN	TRQE	END OF TRANSMIT QUEUE 
	EXTRN	SIMHIN	LOG INPUT TASK START ADDRESS
	EXTRN	SIMHWR	SIMHWR TASK ACTIVATION
	EXTRN	WRECB	WRITE ECB
	EXTRN	PRPOOL	OCCUPIE PRINTER BUFFER POOL 
	EXTRN	TEXT1
	EXTRN	TEXT2
* 
* 
*	EQUATES 
* 
* 
ECBBA	EQU	2 
ECBRL	EQU	4 
ECBRC	EQU	8 
ECBCW	EQU	10
* 
* 
	RES	20	STACK FOR A14 
STB	EQU	*-2 
PROCCB	DATA	0	ADDRESS TO PRINTER OCCUPIED BUFFFER 
HEXCHA	DATA	0 
PROTYP	DATA	1	COMMON FLAG FOR HDLC SDLC 
	EJECT
* 
* 
*	START LOOP TEST TOOL
* 
* 
ASTART	EQU	*
	LD	A8,PROCCB 
	RF(Z)	ASTA20 
	LKM
	DATA	-8,PRPOOL	RELEASE PRINTER 
	CM	PROCCB	RELEASE PRINTER BUFFER 
ASTA20	EQU	*
	LDK	A1,/80 
	SC	A1,WRECB	SET WRITE ECB NOT BUSY 
	LDKL	A7,'OP' 
	LKM
	DATA	-4,OPCTRL	ACTIVATE OPERATOR CONTROL TASK
	LDKL	A7,'IN' 
	LKM
	DATA	-4,SIMHIN	ACTIVATE LOG TASK 
	LKM
	DATA	3 
	EJECT
* 
* 
*	OPERATOR CONTROL TASK 
* 
* 
OPCTRL	EQU	*
	LDKL	A14,STB 
	LDK	A7,' ' 
	CF	A14,OCCPR	OCCUPIE PRINTER 
OPCT10	EQU	*
	CF	A14,CRLF
	LDKL	A2,TEXT1
	ADKL	A11,1 
	CF	A14,PRTXT 
* 
*  HERE TO SET COMMON FLAG FOR HDLC/SDLC
* 
	ADKL	A11,1 
	LDKL	A8,CTECB
	LDK	A7,/84 
	LD	A1,PROTYP 
	ST	A1,ECBBA,A8 
	LDK	A1,6 
	ST	A1,ECBCW,A8 
	LKM		SET FLAG
	DATA	1 
	EJECT
OPCT40	EQU	*
	ADKL	A11,1 
	CF	A14,CRLF
OPCT50	LDKL	A2,TEXT2
	ADKL	A11,1 
	CF	A14,PRTXT 
	CF	A14,READE	READ 2 OR 4 
	DATA	KT075,FT075 
	LDK	A7,'?' 
	CF	A14,PRCH
	CF	A14,CRLF
	RB	OPCT50
* 
* 
KT075	DATA	/0232,'4'
FT075	DATA	OPCT60,OPCT70
* 
* 
OPCT60	LDK	A2,1	2-WIRE WANTED 
	RF	OPCT80
OPCT70	LDK	A2,0	4-WIRE WANTED 
OPCT80	ADKL	A11,1 
	CF	A14,CRLF
	LDKL	A8,CTECB
	LDK	A7,/84 
	ST	A2,ECBBA,A8 
	LDK	A1,7 
	ST	A1,ECBCW,A8 
	LKM
	DATA	1 
	LDKL	A8,CTECB
	RF	OPCONT
	EJECT
* 
*	PRINT TEXT
* 
PRTXT	EQU	* 
	LDR*	A3,A2	GET LENGTH
	ST	A2,PRXECB+2 
	ADK	A3,2 
	ST	A3,PRXECB+4 
	LDK	A7,/86 
	LDKL	A8,PRXECB 
	LKM
	DATA	1	STANDARD WRITE
	CF	A14,CRLF
	RTN	A14
* 
* 
PRXECB	DATA	/31,0,0,0,0,0 
* 
* 
	EJECT
OPCONT	EQU	*
	LD	A8,PROCCB	GET BUFFER ADDRESS
	RF(Z)	OPCO10	NO BUFFER 
	LKM
	DATA	-8,PRPOOL	RELEASE PRINTER 
	CM	PROCCB
OPCO10	EQU	*
	LDKL	A14,STB 
	CF	A14,CRLF
	CF	A14,READ	READ COMMAND 
	DATA	KT100,FT100 
	CF	A14,HEXCH 
	ABL(Z)	QT	QUEUE AREA FOR TRANSM. 
	EJECT
* 
* 
*   TYPE: ? 
* 
ERRORA	EQU	*
	CF	A14,OCCPR	OCCUPIE PRINTER 
ERROR	EQU	* 
	LDKL	A14,STB	LOAD STACK BASE 
	LDK	A7,'?'	INVALID KEY 
	CF	A14,PRCH	PRINT '?'
	RB	OPCONT
* 
* 
KT100	DATA	/0749,'LORWSH' 
FT100	DATA	INPUT,LIST,OPEN,RESET,WRTC,RDTC,HALT 
	EJECT
* 
* 
*	INPUT TO TRANSMIT BUFFER
* 
*	A9 =LRC 
*	A10=AREA POINTER
*	A11=CHAR COUNTER FOR CURRENT LINE 
* 
* 
INPUT	EQU	* 
	CF	A14,OCCPR	OCCUPIE PRINTER 
	CF	A14,PRSPAC	SPACE
	CF	A14,READE	READ AREA NUMBER
	DATA	0 
	DATA	FT200 
FT200	EQU	* 
	CF	A14,HEXCH 
	RB(NZ)	ERROR 
IN050	EQU	* 
	LDKL	A10,AREA	COMPUT E AREA BASE 
IN100	SUK	A7,1
	RF(N)	IN120
	ADKL	A10,LENGTH
	RB	IN100 
IN120	LDR	A12,A10	SAVE AREA BASE
	CF	A14,CRLF
	ADKL	A10,2	ADJUST POINTER
	LDKL	A11,0 
	LDK	A5,0	RESET INDEX 
	EJECT
* 
* 
*	READ INPUT CHAR 
* 
* 
IN200	CF	A14,READE
	DATA	KT300,FT300 
	CM	HEXCHA
	CF	A14,ITAB1	SEARCH IN TABLE 1 
	RB(NZ)	ERROR	NOT FOUND 
IN230	CWK	A11,/70 
	RB(NG)	IN200	LINE NOT FULL 
	CF	A14,CRLF	NEW LINE 
	RB	IN200 
KT300	DATA	/042A,/2F23,/2900
FT300	DATA	IN900,IN800,IN700,IN600
	EJECT
* 
* 
*	END OF INPUT AND DECLARATION OF 
*	NR OF SIGNIFICANT BITS
* 
* 
IN600	CF	A14,RDHEX	READ '1-7' 
	LDR	A6,A7
	ANK	A6,8 
	ABL(NZ)	ERROR
	SLL	A7,13
	ORR	A5,A7
	RF	IN900 
* 
* 
*	BACKSPACE 
* 
* 
IN700	SUK	A5,1
	RF(N)	IN710	BUFFER BEGIN 
	SUKL	A10,1 
	RB	IN200 
IN710	LDK	A5,0
	RB	IN200 
	EJECT
* 
* 
*	HEXADECIMAL INPUT 
* 
* 
IN800	CF	A14,RDHEX	READ HEXADECIMAL 
	LDR	A6,A7	SAVE FIRST DIGIT 
	SLL	A6,4 
	CF	A14,RDHEX	READ 2ND DIGIT
	IM	HEXCHA
	ADR	A7,A6
	CF	A14,STORE	STORE IT
	CF	A14,PRSPAC	SPACE
	RB	IN230 
* 
* 
*	END OF INPUT
* 
* 
IN900	STR	A5,A12	SAVE LENGTH
	ABL	OPCONT	WAIT FOR NEXT COMMAND 
	EJECT
* 
* 
*	QUEUE AREA FOR TRANSMISSION 
* 
* 
QT	EQU	*
	LDR	A2,A7	SAVE CHAR. 
	LDR	A5,A7
	CF	A14,TRANSL	TRANSLATE FOR PRINTER
	CF	A14,OCCPR	OCCUPIE PRINTER 
	LDKL	A8,CTECB
	LDK	A1,4 
	ST	A1,ECBCW,A8	REMOVE REQUEST IF ANY 
	LDK	A7,/84 
	LKM
	DATA	1 
	LDR	A7,A2	RESTORE A7 
	LDKL	A5,TRQ
	LDK	A6,1 
QT050	EQU	* 
	STR	A7,A5
	ADK	A5,2	INCR. INDEX 
	LDK	A7,':' 
	CF	A14,PRCH	PRINT @
	LDK	A3,0 
	CF	A14,QTREAD	READ TIME OUT
	LDR	A3,A7
	LDR	A3,A3
	RF(NZ)	QT060 
	LDKL	A3,/8000
QT060	EQU	* 
	CF	A14,QTREAD
	SLL	A3,4 
	ORR	A3,A7
	LDR	A3,A3
	RF(NZ)	QT070 
	LDKL	A3,/8000
QT070	EQU	* 
	CF	A14,QTREAD
	ABL	ERROR
* 
* 
*	COMMA; READ NEXT TANSMITT BUFFER NUMBER 
* 
* 
QT100	EQU	* 
	LDKL	A14,STB 
	STR	A3,A5	STORE TIME OUT 
	ADK	A5,2	INCR INDEX
	CWK	A6,60
	RF(NG)	QT101 
	LDKL	A11,1 
	LDK	A6,1 
	CF	A14,CRLF
QT101	EQU	* 
	CF	A14,QTRED1
	ABL	QT050
* 
* 
*	SEND; ACTIVATE WRITE TASK 
* 
* 
QT150	EQU	* 
	STR	A3,A5	STORE TIME OUT 
	ADK	A5,2	INCR INDEX
	LDKL	A3,/FFFF
	STR	A3,A5
	LDKL	A7,'WR' 
	LKM
	DATA	-4,SIMHWR 
	ABL	OPCONT 
* 
*	+ ; READ TRANSMIT DELAY 
* 
QT200	EQU	* 
	LDKL	A14,STB 
	LDKL	A3,/8000
	CF	A14,RDHEX 
	ADR	A3,A7
	CF	A14,QTREAD
	SLL	A3,4 
	ADKL	A3,/8000
	ORR	A3,A7
	RB	QT070 
	EJECT
* 
* 
*	READ TIME OUT 
* 
* 
QTREAD	EQU	*
	LDKL	A1,TRQE 
	SUK	A1,10
	CWR	A5,A1
	ABL(G)	ERROR 
	ADK	A6,1 
	CF	A14,READE 
	DATA	KT600,FT600 
	CF	A14,HEXCH 
	ABL(NZ)	ERROR
	RTN 	A14 
* 
* 
KT600	DATA	/022C,/2800
FT600	DATA	QT100,QT150
* 
*	READ BUFFER NR OR + 
* 
QTRED1	EQU	*
	LDKL	A1,TRQE 
	SUK	A1,10
	CWR	A5,A1
	ABL(G)	ERROR 
	ADK	A6,1 
	CF	A14,READE 
	DATA	KT650,FT650 
	CF	A14,HEXCH 
	ABL(NZ)	ERROR
	RTN	A14
* 
KT650	DATA	/012B
FT650	DATA	QT200
	EJECT
* 
* 
*	CHECK HEXADEC. INPUT AND TRANSLATE
* 
* 	CR=0  OK 
*	CR=1,2  ILLEGAL CHAR
* 
* 
HEXCH	EQU	* 
	ADKL	A14,4	SKIP STACK
	LDR	A1,A7
	SUK	A1,'0' 
	RF(N)	HEXC90 
	SUK	A1,9 
	RF(NP)	HEXC10	NUMBER 
	SUK	A1,8 
	RF(N)	HEXC90 
	SUK	A1,5 
	RF(P)	HEXC90 
	ADK	A1,15	TRANSLATE HEX LETTER 
	LDR	A7,A1
	RF	HEX20 
HEXC10	EQU	*
	ADK	A1,9 
	LDR	A7,A1
HEX20	EQU	* 
	SUR	A1,A1
	RF	HEX99 
HEXC90	EQU	*
	LDK	A1,1 
HEX99	EQU	* 
	ABR*	A14 
	EJECT
* 
* 
*	LIST COMMAND
* 
* 
LIST	EQU	*
	CF	A14,OCCPR	OCCUPIE PRINTER 
	CF	A14,PRSPAC
	CF	A14,READE 
	DATA	0,FT400 
FT400	EQU	* 
	CF	A14,HEXCH 
	RF(Z)	LI100
	CWK	A7,/2A 
	ABL(NZ)	ERROR
	EJECT
* 
* 
*	LIST ALL AREAS
* 
* 
LISALL	LDK	A5,0	AREA NUMBER IN A5 
LISA10	CF	A14,LISAR	LIST ONE AREA 
	ADK	A5,1 
	CWK	A5,16
	RB(NE)	LISA10
	ABL	OPCONT 
* 
* 
*	LIST ONE AREA 
* 
* 
LI100	EQU	* 
	LDR	A5,A7
	CF	A14,LISAR 
	ABL	OPCONT 
* 
* 
*	TRANSLATE NUMBER IN A7 TO ASCII 
* 
* 
TRANSL	EQU	*
	CF	A14,CRLF
	LDK	A7,'0' 
	ADR	A7,A5	PRINT AREA NUMBER
	CWK	A7,/39 
	RF(NG)	LI180 
	ADK	A7,7 
LI180	EQU	* 
	RTN	A14
	EJECT
* 
* 
*	LIST ONE AREA 
* 
*	A5 CONTAINS AREA NUMBER 
* 
* 
LISAR	EQU	* 
	CF	A14,TRANSL
	CF	A14,PRCH
	LDK	A1,2 
	ST	A1,PRECBL	EMPTY PRINTBUFFER 
	LDK	A1,1 
	ST	A1,LSPACE 
	LDKL	A10,AREA
	LDK	A1,0 
LI200	CWR	A1,A5 
	RF(E)	LI210
	ADKL	A10,LENGTH
	ADK	A1,1 
	RB	LI200 
LI210	LDR*	A9,A10	GET LENGTH
	LDKL	A12,0 
	LDR	A1,A9
	ANKL	A1,/E000
	RF(Z)	LI211	NO ODD BITS
	SRL	A1,13
	LDR	A12,A1 
LI211	EQU	* 
	ANKL	A9,/1FFF
	CWK	A9,500 
	RF(NG)	LI215 
	LDKL	A9,0
LI215	EQU	* 
	ADKL	A10,2 
LI220	SUKL	A9,1 
	RF(N)	LI250	ALL EDITED 
	LCR	A7,A10	GET CHARACTER 
	ADKL	A10,1 
	CF	A14,STAB1 
	RF(Z)	LI230
LI225	EQU	* 
	CF	A14,EDHEXL	EDIT IN HEXA 
LI230	EQU	* 
	LDK	A1,100 
	CW	A1,PRECBL 
	RB(G)	LI220
LI240	EQU	* 
	CF	A14,PRLINE
	RB	LI220 
LI250	EQU	* 
	LDR	A12,A12
	RF(Z)	LI260
	LDK	A1,'S' 
	CF	A14,STOREL
	LDK	A1,'=' 
	CF	A14,STOREL
	LDR	A7,A12 
	CF	A14,EDHEXL
LI260	EQU	* 
	CF	A14,PRLINE
	RTN	A14
	EJECT
* 
* 
*	CONTROL COMMANDS
* 
* 
OPEN	LDK	A2,1 
	RF	WRCTRL
RESET	LDK	A2,2
WRCTRL	EQU	*
	CF	A14,OCCPR	OCCUPIE PRINTER 
	LDKL	A8,CTECB	LOAD ECB ADDRESS 
	LDK	A7,/84	AND AORDER
	ST	A2,ECBCW,A8	STORE COMMAND IN CW 
	LKM
	DATA	1 
	ABL	OPCONT	NEXT COMMAND
* 
* 
CTECB	DATA	/62,0,0,0,0,0
* 
* 
*	HALT INPUT FROM THE FLYING PIGEON 
* 
* 
HALT	EQU	*
	CF	A14,OCCPR 
	LDK	A1,5 
	LDKL	A8,CTECB
	LDK	A7,/84 
	ST	A1,ECBCW,A8 
	LKM
	DATA	1 
	ABL	OPCT40 
	EJECT
* 
* 
*	PRINT ONE CHARACTER FROM A7 
* 
* 
PRCH	LDKL	A8,PRECB
	SC*	A7,ECBBA,A8
	LDK	A7,/85 
	LKM
	DATA	1 
	ADKL	A11,1	COUNT CHARACTERS
	LDK	A7,0 
	ST	A7,XSPACE	RESET SPACE INDICATOR 
	LC*	A7,ECBBA,A8	RESTORE A7 
	RTN	A14
* 
* 
TYECB	DATA	/20,TYBUF,1,0,0,0
TYBUF	RES	1 
PRECB	DATA	/31,PRBUF,1,0,0,0
PRBUF	DATA	0
	EJECT
* 
* 
*	GENERATE CRLF 
* 
* 
CRLF	LDR	A11,A11
	RF(Z)	CRLF90	ALREADY NEW LINE
	LDK	A7,/0D 
	CF	A14,PRCH
	LDK	A7,/0A 
	CF	A14,PRCH
	IM	XSPACE	SET SPACE INDICATOR
	SUR	A11,A11
CRLF90	EQU	*
	RTN	A14
	EJECT
* 
* 
*	READ ONE CHARACTER FROM KEYBOARD TO A7
* 
*	TWO WORDS FOLLOWING CALL GIVE KEYTABLE AND FUNCTION TABLE ADDRESSES 
* 
*	ON ERROR GO TO NEXT INSTRUCTION ELSE TO FUNCTION
* 
*	A1 IS DESTROYED 
* 
* 
READ	LD	A7,4,A14
	LD	A1,2,A7	GET FUNCTION TABLE ADDRESS
	LDR*	A7,A7	GET KEYTABLE ADDRESS
	LDKL	A8,TYECB
	ST	A7,ECBCW,A8	STORE KEYTABLE ADDRESS
	LDK	A7,/82	STANDARD READ 
	LKM
	DATA	1 
READ05	EQU	*
	ADKL	A11,1	COUNT CHARS 
	LDK	A7,1 
	ST	A7,XSPACE	SET SPACE INDICATOR 
	LC*	A7,ECBBA,A8	GET CHARACTER TO A7
	ANK	A7,/7F 
	LD	A2,ECBRC,A8 
	RF(Z)	READ10	READING OK
	LDK	A1,4 
	ADS	A1,4,A14	INCR RETURN ADDRESS 
	RTN	A14
READ10	AD	A1,ECBCW,A8	ADD INDEX 
	ADKL	A14,4 
	ABR*	A1	RETURN TO FUNCTION 
* 
* 
*	READ AND ECHO 
* 
* 
READE	EQU	* 
	LD	A7,4,A14
* 
	LD	A1,2,A7	GET FUNCTION TABLE ADDRESS
	LDR*	A7,A7	GET KEYTABLE ADDRESS
	LDKL	A8,TYECB
	ST	A7,ECBCW,A8	STORE KEYTABLE ADDRESS
	LDK	A7,/82	STANDARD READ 
	LKM
	DATA	1 
	LC*	A7,ECBBA,A8
	CF	A14,PRCH	ECHO 
	LDKL	A8,TYECB
	RB	READ05
	EJECT
* 
* 
*	SEARCH FOR A7 CHAR IN TABLE 1 
* 
*	CR=0 IF FOUND 
*	CR=1 IF NOT FOUND 
* 
* 
ITAB1	LDK	A2,3
	LDK	A1,1	CR IF NOT FOUND 
ITAB10	CW	A2,TAB1 
	RF(G)	ITAB30	END OF TABLE
	CC	A7,TAB1-1,A2
	RF(E)	ITAB20	FOUND 
	ADK	A2,2 
	RB	ITAB10
ITAB20	LC	A7,TAB1,A2	GET CODE 
	CF	A14,STORE	AND STORE IT
	LDK	A1,0	CR=0
ITAB30	ADKL	A14,4 
	ADK	A1,0 
	ABR*	A14	RETURN
	EJECT
* 
* 
*	STORE A7 CHARACTER IN TRANSMIT AREA 
* 
*	A10=BUFFER POINTER
* 
* 
STORE	EQU	* 
STOR10	CWK	A5,LENGTH
	ABL(E)	ERROR	OVERFLOW
	ADK	A5,1	COUNT CHAR
	SCR	A7,A10 
	ADKL	A10,1 
STOR20	RTN	A14
	EJECT
* 
* 
*	READ HEXADECIMAL CHARACTER
* 
* 
RDHEX	CF	A14,READE
	DATA	KTRDH 
KTRDH	DATA	0	NO KEYTABLE
RDH100	SUK	A7,/30 
	ABL(N)	ERROR 
	CWK	A7,9 
	RF(NG)	RDH110
	SUK	A7,7 
	ABL(N)	ERROR 
	CWK	A7,/F
	ABL(G)	ERROR 
RDH110	RTN	A14
	EJECT
* 
* 
*	EDIT	CHAR FROM A7 IN HEXADECIMAL FORM 
* 
* 
EDHEX	LDR	A6,A7	SAVE A7 
	CF	A14,SPACE 
	LDK	A7,'/' 
	CF	A14,PRCH
	LDR	A7,A6
	SRL	A7,4 
	LC	A7,HEXTAB,A7
	CF	A14,PRCH	1ST CHAR 
	LDR	A7,A6
	ANK	A7,/F
	LC	A7,HEXTAB,A7
	CF	A14,PRCH	2ND CHAR 
	CF	A14,SPACE	SPACE 
	RTN	A14
HEXTAB	DATA	'0123456789ABCDEF'
* 
	EJECT
* 
* 
*	EDIT	CHAR FROM A7 IN HEXADECIMAL FORM 
* 
* 
EDHEXL	CF	A14,SPACEL
	LDK	A1,'/' 
	CF	A14,STOREL
	LDR	A1,A7
	SRL	A1,4 
	LC	A1,HEXTAX,A1
	CF	A14,STOREL	1ST CHAR 
	LDR	A1,A7
	ANK	A1,/F
	LC	A1,HEXTAX,A1
	CF	A14,STOREL	2ND CHAR 
	CF	A14,SPACEL	SPACEL 
	RTN	A14
HEXTAX	DATA	'0123456789ABCDEF'
	EJECT
* 
* 
*	PRINT ONE LINE ON PRINTER 
* 
* 
PRLINE	LDK	A1,2 
	CW	A1,PRECBL 
	RF(E)	PRLI10	NOTHING IN BUFFER 
	LDK	A7,/86	STD WRITE AND WAIT
	LDKL	A8,PRLECB 
	LKM
	DATA	1 
PRLI05	EQU	*
	ST	A1,PRECBL	RESET LENGTH
	LDK	A1,1 
	ST	A1,XSPACE	SET SPACE INDICATOR 
PRLI10	RTN	A14
PRLECB	DATA	/31,PRLBUF,2,0,0,0
PRECBL	EQU	PRLECB+4	REQUESTED LENGTH
PRLBUF	DATA	0 
	RES	60 
	EJECT
* 
* 
*	SEARCH FOR A7 CHAR IN TABLE 1 
* 
* 
*	CR=1 IF NOT FOUND ELSE
*	CR=0 AND CORRESPONDING CODE IS STORED 
* 
* 
STAB1	LDK	A2,3	SET INDEX
	LDK	A1,1	CR IF NOT FOUND 
STAB10	CW	A2,TAB1 
	RF(G)	STAB30	END OF TABLE
	CC	A7,TAB1,A2
	RF(E)	STAB20	FOUND 
	ADK	A2,2 
	RB	STAB10	TRY NEXT 
STAB20	LC	A1,TAB1-1,A2	GET CORRESPONDING CODE 
	CF	A14,STOREL	AND PRINT IT 
	LDK	A1,0 
STAB30	LC	A2,2,A14	SET CR FOR RETURN
	ANK	A2,/FC 
	ANK	A1,3 
	ADR	A1,A2
	SC	A1,2,A14
	RTN	A14
	EJECT
* 
* 
*	STORE CHAR FROM A1 IN PRINT BUFFER
* 
* 
STOREL	LD	A2,PRECBL 
	SC	A1,PRLBUF,A2
	IM	PRECBL
	LDK	A1,0 
	ST	A1,LSPACE 
	RTN	A14
* 
*	PUT SPACE IN BUFFER 
* 
SPACEL	LD	A1,LSPACE 
	RF(NZ)	LSP100
	LDK	A1,/20 
	CF	A14,STOREL
	IM	LSPACE
LSP100	RTN	A14
LSPACE	DATA	0	SPACE INDICATOR 
	EJECT
* 
* 
*	PUT SPACE IN BUFFER 
* 
* 
SPACE	LD	A1,XSPACE
	RF(NZ)	SPA100
PRSPAC	LDK	A7,' ' 
	CF	A14,PRCH
	IM	XSPACE
SPA100	RTN	A14
XSPACE	DATA	0	SPACE INDICATOR 
* 
* 
* 
*	OCCUPIE PRINTER AND ECHO CHARACHTER IN A7 
* 
* 
OCCPR	EQU	* 
	LDR	A1,A7	SAVE CHAR
	LDK	A7,1 
	LKM	 
	DATA	-7,PRPOOL	GET BUFFER
	ST	A8,PROCCB	SAVE BUFFER ADDRESS 
	CF	A14,CRLF
	LDR	A7,A1	RESTORE CHAR 
	CF	A14,PRCH	ECHO 
	RTN	A14
* 
* 
* 
	EJECT
* 
* 
*	WRITE BUFFERS ON CASSETTE 
* 
* 
WRTC	EQU	*
	CF	A14,LOAD	LOAD CASSETTE
	CM	TCECB+10
	CF	A14,WRTM	WRITE TAPE MARK
	LDK	A1,32
	LDKL	A2,AREA 
WRTC10	EQU	*
	ST	A2,ECBBA,A8 
	LDKL	A3,256
	ST	A3,ECBRL,A8 
	LDK	A7,/86 
	LDKL	A8,TCECB
	LKM
	DATA	1	WRITE ONE BLOCK 
	LD	A3,TCECB+8
	ANK	A3,4 
	RF(NZ)	WRTC20
	ADKL	A2,256
	SUK	A1,1 
	RB(NZ)	WRTC10	NOT END OF AREA
	CF	A14,WRTM
	CF	A14,UNLOAD
	ABL	OPCONT 
WRTC20	EQU	*
	CF	A14,UNLOAD
	ABL	ERROR
TCECB	DATA	/12,AREA,256,0,0,0 
* 
*	LOAD CASSETTE 
* 
LOAD	EQU	*
	LDK	A7,/B7 
	LDKL	A8,TCECB
	IM	TCECB+10	NO SEQUENCE NUMBER 
LOAD10	EQU	*
	LKM
	DATA	1	LOAD CASSETTE 
	LD	A3,TCECB+8
	ANKL	A3,/0201
	RB(NZ)	WRTC20
	RTN	A14
* 
*	WRITE TAPE MARK 
* 
WRTM	EQU	*
	LDK	A7,/A2 
	LDKL	A8,TCECB
	RB	LOAD10
* 
*	UNLOAD CASSETTE 
* 
UNLOAD	EQU	*
	LDK	A7,/B8 
	LDKL	A8,TCECB
	LKM
	DATA	1 
	RTN	A14
* 
LOAD1	EQU	* 
	LDK	A7,/B7 
	LDKL	A8,TCECB
	IM	TCECB+10
	LKM
	DATA	1 
	LD	A3,TCECB+8
	ANK	A3,1 
	RB(NZ)	WRTC20
	RTN	A14
	EJECT
* 
* 
*	READ BUFFERS FROM CASSETTE
* 
* 
RDTC	EQU	*
	CF	A14,LOAD1	LOAD1 CASSETTE
RDTC10	EQU	*
	LDK	A7,/82 
	LDKL	A8,TCECB
	LDKL	A2,AREA 
	ST	A2,ECBBA,A8 
	LDK	A1,32
	LKM
	DATA	1	READ ONE BLOCK
	LC	A3,TCECB+8
	ANK	A3,/10 
	RB(NZ)	RDTC10	TAPE MARK
RDTC20	EQU	*
	ADKL	A2,256
	SUK	A1,1 
	RF(Z)	RDTC30	AREA FILLED 
	ST	A2,ECBBA,A8 
	LKM
	DATA	1	READ ONE BLOCK
	LC	A3,TCECB+8
	ANK	A3,/10 
	RF(NZ)	RDTC30	TAPE MARK
	RB	RDTC20
RDTC30	EQU	*
	CF	A14,UNLOAD
	ABL	OPCONT 
	END	ASTART 

Full view