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

⟦03aef631a⟧

    Length: 27550 (0x6b9e)
    Notes: pts_type(SC)
    Names: »LOGOP.SC«

Derivation

└─⟦8ac270cab⟧ Bits:30009705 Philips computer tape "LINSIM8-2"
    └─⟦this⟧ »LINSIM82/LOGOP.SC« 
└─⟦fce1dcf99⟧ Bits:30009704 Philips computer tape "KMD15"
    └─⟦this⟧ »LINSIM/LOGOP.SC« 

PTS(SC)

	IDENT LOGOP  	REL 1.1 82-09-28  870150040110 
			#1 
			UPDATE #0 77.01.26 JES 
* 
* 
*	CC SIMULATION TOOL
* 
*	OPERATOR CONTROL
* 
*	PROGRAMMER: PAN 
* 
******************************************************* 
* 
*	THIS MODULE COMMUNICATES WITH 
*	THE OPERATOR
* 
*	ALLOWED INPUT KEYS: 
*	
*	O: OPEN RECEIVER
* 
*	I: INSERT IN BUFFER SPECIFIED BY FOLLOWING HEXDEC NUMBER
*	   THEN FILL THE BUFFER WITH CHARACTERS 
*   	   /: THE TWO FOLLOWING CHARACTERS FORM AN ASCII CHARACTER 
*	   /83 OR /97 ARE AUTOMATICALLY FOLLOWED BY LRC CALCULATED
*	        FROM FIRST STX OR SOH 
*	   TO DELETE LAST CHARACTER PRESS: FEL
*	   *: END OF BUFFER 
*           CR:=* 
* 
*	L: LIST BUFFER
*	   *: ALL BUFFERS 
*           CR:=* 
*	   <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 
*           CR:=SEND
*	L: SEND CONTINUOUS
* 
*	R: RESET RECEIV BUFFER
* 
*        W: WRITE BUFFERS ON CASSETTE 
*        S: READ BUFFERS FROM CASSETTE
*        X: SHIFT IDLE MODE OF TRANSMITTER
*           CARRIER OFF/ MARK HOLD
*	H: STOP CONTINUOUS SENDING
*	
*	P: DISABLE OR ENABLE PRINTER
* 
**************************************************************
	EJECT
* 
* 
* 
	ENTRY	CODE 
	ENTRY	ASTART 
	ENTRY	ETX
	ENTRY	ETB
	ENTRY	SYN
	ENTRY	PRFLAG	
* 
* 
	EXTRN	TAB1	CHAR TABLE 1
	EXTRN	TAB2	CHAR TABLE 2
	EXTRN	TAB3 
	EXTRN	TAB4 
	EXTRN	AREA	TRANSMIT AREAS
	EXTRN	LENGTH	TOTAL INDIVIDUAL AREA LENGTH
	EXTRN	TRQ	TRANSMIT QUEUE 
	EXTRN	TRQE	END OF TRANSMIT QUEUE 
	EXTRN	LOGIN	LOG INPUT TASK START ADDRESS 
	EXTRN	WRITE	WRITE TASK ACTIVATION
	EXTRN	WRECB	WRITE ECB
	EXTRN	PRPOOL	OCCUPIE PRINTER BUFFER POOL 
	EXTRN	TEXT1
	EXTRN	TEXT2	***CASSETTE ERROR*** 
	EXTRN	TEXT3	***BUFFERS DUMPED ON CASSETTE*** 
	EXTRN	TEXT4	***BUFFERS LOADED*** 
	EXTRN	ASTOEB 
	EXTRN	CRCCAL 
* 
* 
*	EQUATES 
* 
* 
SOH	EQU	/01 
STX	EQU	/02 
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 
CODE	DATA	0	0 = ASCII , 1 = EBCDIC
XBCC	DATA	0	SWITCH FOR BCC ACCUMULATION 
SYN	DATA	0
ETB	DATA	0
ETX	DATA	0
HEXCHA	DATA	0 
	EJECT
* 
* 
*	START LOOP TEST TOOL
* 
* 
ASTART	EQU	*
	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,LOGIN	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
	CF	A14,PRTXT 
	CF	A14,READE	READ E OR A 
	DATA	KT050,FT050 
	LDK	A7,'?' 
	CF	A14,PRCH	INVALID KEY
	RB	OPCT10	TRY AGAIN
* 
* 
KT050	DATA	/0241,'E'
FT050	DATA	OPCT20,OPCT30
* 
* 
	EJECT
OPCT20	EQU	*
	CM	CODE
	LDK	A1,/16 
	ST	A1,SYN
	LDK	A1,/97 
	ST	A1,ETB
	LDK	A1,/83 
	ST	A1,ETX
	RF	OPCT40
OPCT30	EQU	*
	IM	CODE
	LDK	A1,/32 
	ST	A1,SYN
	LDK	A1,/26 
	ST	A1,ETB
	LDK	A1,/03 
	ST	A1,ETX
OPCT40	EQU	*
	CF	A14,CRLF
	LDKL	A8,CTECB
	LDK	A7,/84 
	LD	A3,SYN
	ST	A3,ECBBA,A8	STORE SYNCPATTERN 
	LDK	A1,5 
	ST	A1,ECBCW,A8 
	LKM
	DATA	1	TRANSFER SYNCPATTERN
	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	/0949,'LORWSXHP'	
FT100	DATA	INPUT,LIST,OPEN,RESET,WRTC,RDTC,IDLE,STPCON
	DATA	PRTCON	 
*	
*	PRINTER CONTROL 
*	
PRTCON	EQU	*	 
	LD	A1,PRFLAG	GET THE PRINTER FLAG
	RF(Z)	PRTC05	NOT SET, SET IT	
	CM	PRFLAG	SET, CLEAR IT	 
	RB	OPCONT	 
PRTC05	EQU	*	 
	LDK	A1,'P'	PUT A P IN THE FLAG	
	ST	A1,PRFLAG	
	RB	OPCONT	 
PRFLAG	EQU	*	 
	DATA	0	
	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 
	SUR	A9,A9	RESET LRC
	CM	XBCC
	EJECT
* 
* 
*	READ INPUT CHAR 
* 
* 
IN200	CF	A14,READE
	DATA	KT300,FT300 
	CM	HEXCHA
	CF	A14,ITAB1	SEARCH IN TABLE 1 
	LDR	A1,A1
	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,/0D2F,/2300	'*',CR,'/','#' 
FT300	DATA	IN900,IN900,IN800,IN700
	EJECT
* 
*   BACK-SPACE
* 
* 
IN700	SUK	A5,1
	RF(N)	IN710	BUFFER START 
	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	LDKL	A7,/FF 
	CF	A14,STORE	STORE END CHARACTER 
	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
QT155	EQU	*	
	LDKL	A7,'UT' 
	LKM
	DATA	-4,WRITE
	ABL	OPCONT 
*	
*	SEND CONTINUOUS 
*	
QT160	EQU	*	
	STR	A3,A5	STORE TIME OUT	
	ADK	A5,2	INCR. INDEX 
	LDKL	A3,/CCCC	INDICATE CONTINUOUS	 
	STR	A3,A5	 
	ST	A5,CUEND	SAVE QUEUE-END	
	RB	QT155	ACTIVATE WRITE TASK	
CUEND	EQU	*	
	DATA	0	
*	
*	STOP CONTINUOUS SENDING 
*	
STPCON	EQU	*	 
	LD	A5,CUEND	RESTORE QUEUE POINTER	 
	ABL(Z)	OPCONT	NO QUEUE, QUIT	
	LDKL	A3,/FFFF	END OF QUEUE INDICATION
	STR	A3,A5	FLAG END OF QUEUE.	
	CM	CUEND	CLEAR QUEUE POINTER	
	ABL	OPCONT	GET NEXT COMMAND
* 
*	+ ; 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	/042C,/280D,/4C00	',''(''CR' OR'Z' 
FT600	DATA	QT100,QT150,QT150,QT160	 
* 
*	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 
	RF(Z)	LISALL 
	CWK	A7,/0D	CR? 
	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
	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 
	CW	A7,ETX
	RF(E)	LI270	ETX
	CW	A7,ETB
	RF(E)	LI270	ETB
	LD	A1,CODE 
	RF(NZ)	LI260	EBCDIC
	CF	A14,STAB1 
	RF(Z)	LI230	TEXT FOUND 
	CF	A14,STAB2 
	RF(Z)	LI230	TEXT FOUND 
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	* 
	CF	A14,PRLINE
	RTN	A14
LI260	EQU	* 
	CF	A14,STAB3 
	RB(Z)	LI230
	CF	A14,STAB4 
	RB(Z)	LI230
	RB	LI225 
LI270	EQU	* 
	LD	A1,CODE 
	RF(NZ)	LI280 
	CF	A14,STAB2	ASCII 
LI275	EQU	* 
	SUKL	A9,1
	RB(N)	LI250	ALL DONE 
	LCR	A7,A10	GET LRC 
	ADKL	A10,1 
	CF	A14,EDHEXL
	RB	LI230 
LI280	EQU	* 
	CF	A14,STAB4	EBCDIC
	SUKL	A9,1
	RB(N)	LI250	ALL DONE 
	LCR	A7,A10	GET FIRST CRC CHARACTER 
	ADKL	A10,1 
	CF	A14,EDHEXL
	RB	LI275 
	EJECT
* 
* 
*	CONTROL COMMANDS
* 
* 
IDLE	LDK	A2,6	SHIFT IDLE TRANSMITT
	RF	WRCTRL
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	/60,0,0,0,0,0
	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 
	ABR*	A14	RETURN
	EJECT
* 
* 
*	STORE A7 CHARACTER IN TRANSMIT AREA 
* 
*	A9 =LRC OR CRC
*	A10=BUFFER POINTER
* 
* 
STORE	EQU	* 
	LD	A1,CODE 
	RF(Z)	STOREA	ASCII 
	LD	A1,HEXCHA 
	RF(NZ)	STOR01
	LDR	A1,A7
	CF	A14,ASTOEB
	LDR	A7,A2
STOR01	EQU	*
	CF	A14,CRCCAL	CALCULATE CRC
	RF	STOREB
STOREA	EQU	*
	XRR	A9,A7	CALCULATE LRC
STOREB	EQU	*
	CWK	A7,SOH 
	RF(E)	STOR08 
	CWK	A7,STX 
	RF(NE)	STOR10
STOR08	EQU	*
	LD	A1,XBCC 
	RF(NZ)	STOR10
	IM	XBCC
	SUR	A9,A9	STX: RESET BCC 
STOR10	CWK	A5,LENGTH
	ABL(E)	ERROR	OVERFLOW
	ADK	A5,1	COUNT CHAR
	SCR	A7,A10 
	ADKL	A10,1 
	CW	A7,ETX
	RF(E)	STOR11 
	CW	A7,ETB
	RF(NE)	STOR20
STOR11	EQU	*
	LDR	A7,A9
	CWK	A5,LENGTH
	ABL(E)	ERROR 
	ADK	A5,1	COUNT CHAR
	LD	A1,CODE 
	RF(NZ)	STOR30
	ORK	A7,/80 
	ECR	A1,A7	GENERATE PARITY ON LRC 
STOR12	SLL	A1,1 
	RF(Z)	STOR15 
	RB(NN)	STOR12
	XRK	A7,/80 
	RB	STOR12
STOR15	EQU	*
	SCR	A7,A10 
	ADKL	A10,1 
	CF	A14,EDHEX	PRINT LRC 
STOR20	RTN	A14
STOR30	EQU	*
	SCR	A7,A10 
	ADKL	A10,1 
	ANK	A7,/FF 
	CF	A14,EDHEX 
	LDR	A7,A9
	SRL	A7,8 
	CWK	A5,LENGTH
	ABL(E)	ERROR 
	ADK	A5,1 
	SCR	A7,A10 
	ADKL	A10,1 
	CF	A14,EDHEX 
	RB	STOR20
	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
* 
* 
*	SEARCH FOR A7 CHAR IN TABLE 3 
* 
* 
*	CR=1 IF NOT FOUND ELSE
*	CR=0 AND CORRESPONDING CODE IS STORED 
* 
* 
STAB3	LDK	A2,3	SET INDEX
	LDK	A1,1	CR IF NOT FOUND 
STA10	CW	A2,TAB3
	RF(G)	STA30	END OF TABLE 
	CC	A7,TAB3,A2
	RF(E)	STA20	FOUND
	ADK	A2,2 
	RB	STA10	TRY NEXT
STA20	LC	A1,TAB3-1,A2	GET CODE
	CF	A14,STOREL	AND PRINT IT 
	LDK	A1,0 
STA30	LC	A2,2,A14	SET CR FOR RETURN 
	ANK	A2,/FC 
	ANK	A1,3 
	ADR	A1,A2
	SC	A1,2,A14
	RTN	A14
	EJECT
* 
* 
*	SEARCH FRO A7 CHAR IN TABLE 2 
* 
*	CR=1 IF NOT FOUND 
*	CR=0 IF FOUND AND CORRESPONDING TEXT IN BUFFER
* 
* 
STAB2	LDK	A4,3	SET INDEX
	LDK	A1,1	CR IF NOT FOUND 
STAB40	CW	A4,TAB2 
	RF(G)	STAB80	END OF TABLE
	CC	A7,TAB2,A4
	RF(E)	STAB50	FOUND 
	ADK	A4,4 
	RB	STAB40	NEXT CHAR
STAB50	CF	A14,SPACEL
	LD	A3,TAB2+1,A4	GET STRING ADDRESS 
	LDR*	A4,A3	GET LENGTH
	ADK	A3,2 
STAB60	SUK	A4,1 
	RF(N)	STAB70 
	LCR	A1,A3	PRINT TEXT 
	ADK	A3,1 
	CF	A14,STOREL
	RB	STAB60
STAB70	CF	A14,SPACEL	SPACEL 
	LDK	A1,0 
STAB80	RB	STAB30	SET CR FOR RETURN
	RTN	A14
	EJECT
* 
* 
*	SEARCH FRO A7 CHAR IN TABLE 4 
* 
*	CR=1 IF NOT FOUND 
*	CR=0 IF FOUND AND CORRESPONDING TEXT IN BUFFER
* 
* 
STAB4	LDK	A4,3	SET INDEX
	LDK	A1,1	CR IF NOT FOUND 
STA40	CW	A4,TAB4
	RF(G)	STA80	END OF TABLE 
	CC	A7,TAB4,A4
	RF(E)	STA50	FOUND
	ADK	A4,4 
	RB	STA40	NEXT CHAR 
STA50	CF	A14,SPACEL 
	LD	A3,TAB4+1,A4	GET STRING ADDRESS 
	LDR*	A4,A3	GET LENGTH
	ADK	A3,2 
STA60	SUK	A4,1
	RF(N)	STA70
	LCR	A1,A3	PRINT TEXT 
	ADK	A3,1 
	CF	A14,STOREL
	RB	STA60 
STA70	CF	A14,SPACEL	SPACEL
	LDK	A1,0 
STA80	RB	STA30
	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,OCCPR	OCCUPIE PRINTER ECHO COMMAND
	CF	A14,CRLF
	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
	LDKL	A2,TEXT3
	RF	RETCAS	RETURN TO OPERATOR CONTROL 
* 
*   CASSETTE ERROR
* 
WRTC20	EQU	*
	CF	A14,UNLOAD
	LDKL	A2,TEXT2
	RF	RETCAS	RETURN TO OPERATOR CONTROL 
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,OCCPR	OCCUPIE PRINTER ECHO COMMAND
	CF	A14,CRLF
	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
	LDKL	A2,TEXT4
* 
* 
*   PRINT MESSAGE AND RETURN TO OPERATOR CONTROL
* 
RETCAS	EQU	*
	CF	A14,PRTXT 
	LDKL	A11,1	SET A11 NOT ZERO
	ABL	OPCONT 
	END	ASTART 

Full view