File: RKLFMT.PA of Tape: OS8/OS8-V3D/al-4695c-sa-os8-v3d-5
(Source file text) 

/RK8E/RK8L DISK FORMATTER
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
/RK8E/RK8L DISK FORMATTER PROGRAM: MD-08-DHRKD-D
/MAINDEC-08-DHRKD-D-D
/
/MODIFIED FOR OS8V3D BY ED STEINBERGER
/
DLSC=6740			/LOAD SECTOR COUNTER
DSKP=6741			/SKIP ON TRANSFER DONE OR ERROR
DCLR=6742			/CLEAR DISK CONTROL LOGIC
DLAG=6743			/LOAD ADDRESS AND GO
DLCA=6744			/LOAD CURRENT ADDRESS
DRST=6745			/READ STATUS REGISTER
DLDC=6746			/LOAD COMMAND REGISTER
DMAN=6747			/LOAD MAINTENANCE
/
LDSC=JMS I	XXLDSC
IOTCHN=JMS I	XCHANG
LODTRK=JMS I	XWRTRK
REDDSK=JMS I	XRDTRK
RECAL=JMS I	XRESTR
RECEIV=JMS I	XWAIT
KILBUF=JMS I	XKLBUF
ERROR=JMS I	XERRO
RDSTAT=JMS I	XRDST
LDADD=JMS I	XLDAD
DSKSKP=JMS I	XSDKP
LDCMD=JMS I	XLDCM
LDCUR=JMS I	XLDCA
CLRALL=JMS I	XCLDR
PRNTER=JMS I	XPRN
OCTEL=JMS I	XFROCT
TWOCT=JMS I	XTOCT
TYPE=JMS I	XPRINT
CRLF=JMS I	XCRLF
APT8A=JMS I	XAPT8
TIME=JMS I	XTIME
TICK=JMS I	XTICK
KAERRO=JMS I	XAERRO
/
*0
/
	304			/REV D
	5001
	0002
	0003
/
*10
/
AUTO10,	0
/
AUTO11,	0
/
*20
/
	0000			/PSEUDO SWITCH REGISTER
	0			/CONTROL WORD 1 - USE PSUEDO SWITCHES **ES**
	400			/CONTROL WORD 2 - SET CONSOLE PACKAGE ACTIVE **ES**
	0000			/RESERVED
XAPT8,	APT8
XTIME,	KTIME
XAERRO,	AERRO
XTICK,	KTICK
XCHANG,	CHANG
XWRTRK,	WRTTRK
XRDTRK,	REDTRK
XRESTR,	RESTOR
XWAIT,	WAIT
XKLBUF,	KLBUF
XPRINT,	PRINT
XERRO,	ERRO
XRDST,	RDST
XSDKP,	SDKP
XLDCM,	LDCM
XLDCA,	LDCA
XLDAD,	LDAD
XCLDR,	CLDR
XXLDSC,	XLDSC
XPRN,	PRN
XFROCT,	FROCT
XTOCT,	TOCT
XCRLF,	UPONE
XLOTRK,	LOTRK
XHITRK,	HITRK
BGNBUF,	WRKBUF
AMOUNT,	0
SWITCH,	0
K0003,	0003
K4,	4
K0007,	0007
K0040,	0040
M313,	-313
K0277,	0277
K0200,	0200
K0260,	0260
K4000,	4000
K7735,	7735
K7760,	7760
K0400,	400
K0037,	0037
KCDF,	CDF
M4,	-4
M10,	-10
DRIVNO,	0
CHAR,	0
LOWAD,	0
HIGHAD,	0
TRKCNT,	0
DSKCNT,	0
SBCNT1,	0
STCNT1,	0
STCNT2,	0
STCNT3,	0
TCNTR1,	0
TCNTR2,	0
TCNTR3,	0
TCNTR4,	0
TCNTR5,	0
/
GDREG2,	0
EXBIT,	0
CMREG,	0
STREG,	0
DAREG,	0
CAREG,	0
ADREG,	0
DTREG,	0
BGNTST,	FRMDSK
HOMEMA,	0
DATCNT,	0
CLKCNT,	-2
/
XMOVE,	MOVE
LOC8ED,	0
XEND,	ENDTST
SOFT,	0
ADPOT1,	DSK0A
DSK0A,	0
DSK1A,	0
DSK2A,	0
DSK3A,	0
DSK4A,	0
DSK5A,	0
DSK6A,	0
DSK7A,	0
ADPOT2,	DSK0B
DSK0B,	0
DSK1B,	0
DSK2B,	0
DSK3B,	0
DSK4B,	0
DSK5B,	0
DSK6B,	0
DSK7B,	0
PCOUNT,	0				/USED ONLY IF ON APT
/
*200
/
BGN,	RIF
	DCA	HOMEMA
	TAD	HOMEMA
	TAD	KCDF			/MAKE HOMEDF
	DCA	.+1
	HLT				/MAKE DF=IF
/NOW TEST FOR APT SYSTEM
/IF ON APT TERMINAL MESSAGES ARE SKIP
/TO AVOID TIMING PROBLEMS WITH THE SYSTEM
	APT8A				/TEST FOR APT SYSTEM
	JMS	XC8PSW			/GET SR=.
	*.-1			/**ES**
	NOP			/**ES**
	IOTCHN				/CHANGE DEVICE TO SWR3-8
	CRLF
	CRLF
	PRNTER				/PRINT "RK8E/RK8L DISK FORMATTER PROGRAM"
	MES1				/MESSAGE 1 POINTER
	CRLF
	PRNTER				/PRINT "FOR ALL QUESTIONS"
	MES2				/MESSAGE POINTER 2
ALLAGN,	TAD	M10
	DCA	STCNT1			/COUNTER FOR AMOUNT OF DISKS
	DCA	LOC8ED
	DCA	STCNT2
SAMAGN,	CRLF
	PRNTER			/PRINT "FORMAT DISK ? "
	MES3				/MESSAGE POINTER 3
	TAD	STCNT2
	TAD	K0260
	TYPE				/TYPE DISK NUMBER
QUES1,	TAD	K0277
	TYPE				/TYPE ?
	TAD	ADPOT1
	TAD	STCNT2
	DCA	STCNT3
	RECEIV				/WAIT FOR CHARACTER
	JMP	NOTDSK			/NO NOT THIS DISK
	JMP	QUES1			/NEITHER YES OR NO
WASDSK,	ISZ	LOC8ED
	CLA CLL CMA
NOTDSK,	DCA I	STCNT3			/YES, WAS CLEAR DISK POINTER
	ISZ	STCNT2			/UPDATE POINTER
	ISZ	STCNT1			/COUNT DISKS
	JMP	SAMAGN			/ASK ABOUT NEXT
/
DONE,	CRLF
	PRNTER				/PRINT "ARE YOU SURE ?"
	MES4				/MESSAGE POINTER 4
	RECEIV				/WAIT FOR CHARACTER
	JMP	ALLAGN			/NO, START ALL OVER
	JMP	DONE			/NEITHER TYPE ?
	TAD	LOC8ED
	CIA
	SNA				/ANY DISKS
	JMP	BGN			/NO, OPERATOR ERROR
	DCA	LOC8ED			/YES, AMOUNT LOCATED
/
/FIRST RECALIBRATE AND FORMAT IN WRITE ALL MODE
/ALL DISK DRIVES SELECTED BY OPERATOR,. MAKE THE FIRST
/TWO WORDS OF EVERY DISK SECTOR EQUAL TO THE 
/ABSOLUTE DISK ADDRESS.
/
FRMDSK,	JMS I	XMOVE			/MOVE DISK POINTERS
	TAD	LOC8ED
	DCA	AMOUNT
	TAD	AMOUNT
	DCA	DSKCNT			/COUNTER FOR AMOUNT OF DISKS
	DCA	TCNTR4
	TAD	ADPOT2
	DCA	TCNTR5			/A FEW COUNTERS
	TAD I	TCNTR5
	SZA CLA				/FORMAT THIS DISK
	JMP	FORMAT			/YES, GO
NEXFRM,	ISZ	TCNTR5			/NO, TRY NEXT
	ISZ	TCNTR4
	JMP	.-5
	HLT				/WHAT HAPPENED????
/
FORMAT,	TAD	TCNTR4
	AND	K0003			/MASK OUT
	CLL RAL				/MAKE DISK NUMBER
	DCA	DRIVNO
	TAD	TCNTR4
	AND	K4
	SZA CLA
	TAD	K0200
	DCA	EXBIT			/SET EXTENDED DRIVE BIT
	RECAL				/RECALIBRATE THIS DRIVE
	JMP	RENEX1			/RECALIBRATE NEXT EXISTING
	DCA	LOWAD			/SETUP ADDRESS POINTER
	DCA	HIGHAD			/SETUP ADDRESS POINTER
	TAD	M313
	DCA	TRKCNT			/COUNTER FOR AMOUNT OF TRACKS
/
/
WRTDSK,	TICK				/TIMING FOR APT IF NEEDED.
	-4				/OTHERWISE BOTH ARE SKIPPED
	LODTRK				/FORMAT A TRACK
	JMP	RENEX1			/TO NEXT DISK
	CLA CLL
	TAD	LOWAD
	TAD	K0040
	DCA	LOWAD			/UPDATE TO NEXT TRACK
	SZL CLA				/SET EXTENDED BIT
	ISZ	HIGHAD			/YES
	ISZ	TRKCNT			/UPDATE TRACK COUNTER
	JMP	WRTDSK			/DO NEXT TRACK
RENEX1,	ISZ	DSKCNT			/UPDATE DISK COUNTER
	JMP	NEXFRM			/DO NEXT DISK
/
/ROUTINE TO CHECK ADDRESSING INFORMATION ON THE DISK.
/THE FIRST TWO WORDS OF EVERY SECTOR SHOULD EQUAL
/THE ABSOLUTE DISK ADDRESS. ALL OTHER DATA IS
/NOT CHECKED.
/
CHKDSK,	TAD	AMOUNT
	DCA	DSKCNT			/AMOUNT OF DISKS
	DCA	TCNTR4
	TAD	ADPOT2
	DCA	TCNTR5
	TAD I	TCNTR5			/SOFTWARE INFORMATION
	SZA CLA				/CHECK THIS DISK
	JMP	CHKDAT			/CHECK THIS ONE
NEXCHK,	ISZ	TCNTR5			/UPDATE FOR NEXT DISK
	ISZ	TCNTR4
	JMP	.-5
	HLT				/WHAT HAPPENED?????
/
CHKDAT,	TAD	TCNTR4
	AND	K0003			/MASK OUT
	CLL RAL				/MAKE DRIVE NUMBER
	DCA	DRIVNO
	TAD	TCNTR4
	AND	K4
	SZA CLA
	TAD	K0200
	DCA	EXBIT			/SET EXTENDED DRIVE BIT
	RECAL				/RECALIBRATE
	JMP	RENEX2			/TRY NEXT DRIVE
	DCA	LOWAD
	DCA	HIGHAD			/SETUP STARTING DISK ADDRESS
	TAD	M313
	DCA	TRKCNT			/AMOUNT OF TRACKS TO DO
	JMP	CHECK
/
PAGE
/
CHECK,	TICK				/TIMING FOR APT IF NEEDED.
	-4				/SKIPPED IF NOT REQUIRED.
	REDDSK				/READ AND CHECK ONE CYLINDER
	JMP	RENEX2			/TO NEXT DISK
	CLA CLL
	TAD	LOWAD
	TAD	K0040
	DCA	LOWAD			/UPDATE TO NEXT CYLINDER
	SZL CLA				/TIME TO SET EXTENDED BIT
	ISZ	HIGHAD			/YES, SET IT
	ISZ	TRKCNT			/UPDATE CYLINDER COUNTER
	JMP	CHECK			/CHECK NEXT ONE
RENEX2,	ISZ	DSKCNT			/UPDATE DISK COUNTER
	JMP	NEXCHK			/CHECK NEXT
/
/
	TAD	22
	AND	K4000			/TEST FOR APT
	SNA CLA				/ARE WE?
	JMP	ENDTST			/NO. NORMAL RUN
	ISZ	PCOUNT			/INCREMENT PASS COUNT
	JMP	FRMDSK			/LOOP PROGRAM
ENDTST,	CRLF
	PRNTER				/PRINT "PASS COMPLETE"
	TEXEND
	CRLF
	PRNTER				/PRINT "TRY SAME SEQUENCE"
	MES5
	RECEIV				/WAIT FOR INPUT FROM OPERATOR
	JMP	ALLAGN			/NO, ASK AGAIN
	JMP	.-5
	JMP	FRMDSK			/TRY SAME SEQUENCE
/
/
/SUBROUTINE FOR "ERRORS," SCOPE LOOPS, AND
/ERROR TYPEOUTS.
/
ERRO,   0
	CLA CLL IAC
	TAD	ERRO			/GET PC STORED
	DCA	RETRN1			/STORE FOR RETURN
	KAERRO				/NOTIFY APT OF ERROR IS NEED BE
        CRLF
	CRLF
        TAD I   ERRO                    /GET TEXT POINTER
        AND     K0007                   /MASK 9-11
	TAD	HEDTAD			/MAKE ERROR HEADER TAD
	DCA	.+1
	HLT				/MODIFIED HEADER TAD
        DCA     .+2
        PRNTER                          /MODIFIED HEADER POINTER
        HLT
        CRLF
        PRNTER                          /PRINT PC:
        TEXPC
        TAD     ERRO                    /GET PC POINTER
        OCTEL                           /PRINT PC STORED
        TAD I   ERRO                    /GET TEXT POINTER
        CLL RAL
        SNL
        JMP     NTGD                    /NOT GD: REGISTER
        DCA     ERRO
        PRNTER                          /PRINT GD:
        TEXGD
        TAD     GDREG2
        OCTEL                           /PRINT FOUR OCTAL
        SKP CLA
NTGD,	DCA	ERRO
	PRNTER
	TEXEX
	TAD	EXBIT
	SZA CLA
	IAC
	OCTEL
        TAD     XTEXT
        DCA     PCNTR2
        TAD     XREG
        DCA     AUTO10
        TAD     K7771
        DCA     PCNTR1                  /COUNTER FOR    # OF HEADS
	CLA CLL CMA RAL
	DCA	PCNTR3
STRAUT, TAD     ERRO                    /GET TEXT POINTER
        SMA
        JMP     NOTEX                   /NOT THIS ONE
        CLL RAL
        DCA     ERRO
	TAD	PCNTR2			/GET TEXT MESSAGE POINTER
	ISZ	PCNTR2
	ISZ	PCNTR2
        DCA     .+2                     /STORE FOR PRNTER
        PRNTER                          /PRINT XX:
        HLT                             /MODIFIED TEXT POINTER
        TAD I   AUTO10
        OCTEL                           /PRINT FOUR OCTAL
	ISZ	PCNTR3
	SKP CLA
	CRLF
AGAIN,	ISZ	PCNTR1
        JMP     STRAUT                  /CHECK FOR NEXT XX:
	JMP I	RETRN1			/RETURN TO QUESTION
NOTEX,  CLL RAL
        DCA     ERRO
	ISZ	PCNTR2
	ISZ	PCNTR2
        ISZ     AUTO10
	JMP	AGAIN
/
RETRN1,	0
XTEXT,	TEXCM
XREG,	EXBIT
PCNTR1, 0
PCNTR2,	0
PCNTR3,	0
HEDTAD,	TAD	HEDLST
HEDLST,	ERTX1
	ERTX2
	ERTX3
	ERTX4
K7771,	7771
/
PAGE
/
/ROUTINE TO FORMAT CYLINDER
/MAKE FIRST TWO WORDS OF EVERY SECTOR
/EQUAL TO DISK ADDRESS.
/
WRTTRK,	0
	CLA CLL CML RAR
	DCA	GDREG2			/SETUP COMPARE REGISTER
	KILBUF				/CLEAR BUFFER
	TAD	K7735			/AMOUNT OF SECTORS TO DO
	DCA	TCNTR1			/SETUP COUNTER
	DCA	TCNTR2			/STARTING WITH 0
	TAD	K7760			/STOPPER
	DCA	TCNTR3			/SECTOR COUNTER POINTER STOP
LODR1,	TAD	TCNTR2
	AND	K0037			/MASK SECTOR BITS
	TAD	LOWAD			/ADD IN CYLINDER
	DCA I	XLOTRK			/SETUP TRACK WORD IN BUFFER
	TAD	EXBIT			/ADD IN EXTENDED BIT
	TAD	HIGHAD
	TAD	DRIVNO			/ADD IN DRIVE NUMBER
	DCA I	XHITRK			/SETUP TRACK WORD IN BUFFER
	TAD I	XHITRK
	AND	K7577
	TAD	HOMEMA			/CURRENT FIELD
	TAD	K5000			/FUNCTION WRITE ALL
	LDCMD				/LOAD COMMAND
	TAD	EXBIT
	LDSC				/LOAD EXTENDED DRIVE BIT
	CLA				/CLEAR EXTENDED DRIVE BIT
	TAD	BGNBUF
	LDCUR				/LOAD CURRENT ADDRESS
	TAD I	XLOTRK
	LDADD				/LOAD TRACK AND GO
	DSKSKP				/SKIP ON FLAG
	JMP	.-1			/WAIT FOR FLAG
	RDSTAT				/READ STATUS
	TAD	K4000
	SZA CLA				/WAS STATUS 0?
	JMP	LODER			/ERROR, STATUS ON WRITE ALL
	ISZ	TCNTR2
	ISZ	TCNTR3			/COUNT FIRST REVOLUTION
	SKP CLA				/STILL IN FIRST REV.
	DCA	TCNTR2			/SETUP FOR SECTOR "1"
	ISZ	TCNTR2
	ISZ	TCNTR1			/UPDATE SECTOR COUNTER
	JMP	LODR1			/TRY NEXT SECTOR
	ISZ	WRTTRK
	JMP I	WRTTRK			/THIS CYLINDER DONE
LODER,	ERROR				/ERROR, STATUS
	3602				/TEXT POINTER
/
	RECAL				/CLEAR CONTROL AND DRIVE
	JMP I	WRTTRK			/TO NEXT DISK
	CRLF
	PRNTER				/PRINT "TRY SAME AGAIN"
	ERMES1
	RECEIV				/WAIT FOR YES OR NO
	JMP	LODER-2			/WAS A NO TRY SAME CYLINDER
	JMP	.-5			/WAS NEITHER ASK AGAIN
	JMP	WRTTRK+1		/YES, TRY NEXT
K5000,	5000
K7577,	7577
/
/
/SUBROUTINE TO READ STATUS REGISTER
/
RDST,   0
IOT5,  DRST                            /READ STATUS IOT
        SKP
ERHLT5,	JMS	XC8ERR			/SKIP TRAP ERROR.
        DCA     STREG                   /SAVE RESULTS
        TAD     STREG
        JMP I   RDST                    /EXIT
/
/SUBROUTINE TO LOAD CURRENT ADDRESS REGISTER
/
LDCA,   0
        DCA     ADREG                   /SAVE IN ADDRESS
	TAD	ADREG
	DCA	CAREG			/SETUP INITIAL CURRENT ADDRESS
        TAD     ADREG
IOT4, DLCA                            /LOAD CURRENT ADDRESS IOT
        JMP I   LDCA                    /EXIT
ERHLT4,	JMS	XC8ERR			/SKIP TRAP ERROR.
	JMP	.-1
/
/
/SUBROUTINE TO LOAD TRACK ADDRESS REGISTER
/
LDAD,   0
	DCA	DAREG			/SAVE OUTBOUND DATA
	TAD	DAREG
IOT3,  DLAG                            /LOAD DISK ADDRESS REGISTER
        JMP I   LDAD                    /EXIT
ERHLT3,	JMS	XC8ERR			/SKIP TRAP ERROR.
	JMP	.-1
/
/
/SUBROUTINE TO LOAD COMMAND REGISTER
/
LDCM,   0
	DCA	CMREG			/SAVE OUTBOUND DATA
	DCA	INMODE
	JMS	XC8CKP			/CHECK FOR CONTROL CHARACTERS.
	CLA
	CLA
	TAD	CMREG
IOT6,	DLDC				/LOAD COMMAND REGISTER
        JMP I   LDCM                    /EXIT
ERHLT6,	JMS	XC8ERR			/SKIP TRAP ERROR.
	JMP	.-1
/
/
/SUBROUTINE ISSUE "DLSC"
XLDSC,	0
IOT0,	DLSC
	JMP I	XLDSC
ERHLT0,	JMS	XC8ERR
	JMP	.-1

/SUBROUTINE TO ISSUE "DSKP" DISK SKIP IOT
/
SDKP,   0
IOT1,  DSKP                            /DISK SKIP IOT
        SKP                             /DID NOT SKIP
        ISZ     SDKP
        JMP I   SDKP                    /EXIT
/
/SUBROUTINE TO ISSUE "DCLR" CLEAR IOT
/
CLDR,   0
IOT2,  DCLR                            /DCLR "CLEAR IOT"
        JMP I   CLDR                    /EXIT
ERHLT2,	JMS	XC8ERR			/SKIP TRAP ERROR.
	JMP	.-1
/
/ROUTINE TO ZERO WORK BUFFER
/
KLBUF,	0
	CLA CLL CMA
	TAD	BGNBUF			/START OF BUFFER -1
	DCA	AUTO10			/SETUP AUTO INDEX
	TAD	K7400
	DCA	DATCNT			/SETUP COUNTER
	DCA I	AUTO10			/CLEAR BUFFER
	ISZ	DATCNT			/UPDATE COUNTER
	JMP	.-2			/NOT ALL CLEARED YET
	JMP I	KLBUF			/BUFFER CLEARED
K7400,	7400
/
PAGE
/
/
/ROUTINE TO READ AND CHECK A CYLINDER
/
REDTRK,	0
	TAD	K7735
	DCA	TCNTR1			/AMOUNT OF SECTORS TO DO
	DCA	TCNTR2			/STARTING WITH 0
	TAD	K7760
	DCA	TCNTR3
	KILBUF				/CLEAR BUFFER
CHKR1,	CLA CLL CMA
	DCA	SOFT			/SETUP SOFT ERROR FLAG
	TAD	BGNBUF
	LDCUR				/LOAD CURRENT ADDRESS
	TAD	HIGHAD			/EXTENDED CYLINDER BIT
	TAD	DRIVNO			/CURRENT DRIVE
	TAD	HOMEMA			/CURRENT FIELD
	LDCMD				/LOAD COMMAND
	TAD	EXBIT			/LOAD EXTENDED DRIVE BIT
	LDSC
	CLA				/CLEAR EXTENDED DRIVE BIT
	TAD	TCNTR2
	AND	K0037			/MASK SECTOR BITS OFF
	TAD	LOWAD			/ADD IN OTHER DISK ADDRESS
	LDADD				/LOAD AND GO
	DSKSKP				/DISK SKIP IOT
	JMP	.-1			/WAIT FOR FLAG
	RDSTAT				/READ STATUS
	TAD	K4000			/ADD IN FUDGE FACTOR
	SNA CLA				/SKIP IF ERROR
	JMP	STAOK			/STATUS O.K.
	TAD	STREG			/GET STATUS READ
	AND	K0010
	SNA CLA				/WAS IT A CRC
	JMP	STAER			/NO, JUST A HARD ERROR
	DCA	SOFT			/CLEAR SOFT ERROR FLAG
STAOK,	TAD	CMREG			/GET LAST COMMAND
	AND	K0007
	TAD	EXBIT			/ADD EXTENDED DRIVE BIT
	CIA
	TAD I	XHITRK			/GET WORD READ FROM DISK
	SNA CLA				/SKIP IF ERROR
	JMP	FRSTOK			/FIRST WORD O.K.
	TAD I	XHITRK			/GET WORD
	DCA	DTREG			/SETUP ERROR PRINTER
	TAD	CMREG
	AND	K0007
	DCA	GDREG2			/SETUP GOOD FOR PRINTER
	JMP	DATER			/NO, DATA ERROR
FRSTOK,	TAD I	XLOTRK			/GET WORD READ
	CIA
	TAD	DAREG			/COMPARE TO GOOD
	SNA CLA				/SKIP IF ERROR
	JMP	DATOK			/WORD O.K.
	ISZ	ADREG			/SETUP ERROR PRINTER
	TAD	DAREG
	DCA	GDREG2			/SETUP GOOD WORD FOR PRINTER
	TAD I	XLOTRK			/GET WORD READ
	DCA	DTREG			/SETUP FOR PRINTER
	JMP	DATER			/DATA ERROR
DATOK,	TAD	SOFT			/GET SOFT ERROR FLAG
	SNA CLA				/WAS IT CLEAR
	JMP	STAER			/YES, STATUS ERROR
	TAD	TCNTR2
	TAD	K0003			/ADVANCE 3 SECTORS
	DCA	TCNTR2
	ISZ	TCNTR3
	JMP	CHKR1			/MORE TO FORMAT
	ISZ	REDTRK
	JMP I	REDTRK			/EXIT, O.K.
DATER,	TAD	K7741
	DCA	TCHKT			/SETUP TEXT POINTER
	JMP	CHKER			/ERROR
STAER,	TAD	K3600
	DCA	TCHKT			/SETUP TEXT POINTER
	CLA CLL CML RAR
	DCA	GDREG2			/SETUP GOOD STATUS PRINTER
CHKER,	ERROR				/ERROR, READ DATA
TCHKT,	0				/MODIFIED TEXT POINTER
	RECAL				/CLEAR CONTROL AND DRIVE
	JMP I	REDTRK			/TO NEXT DISK
	CRLF
	PRNTER				/PRINT "TRY SAME AGAIN"
	ERMES3
	RECEIV
	JMP	DATER-2			/CHECK NEXT 
	JMP	.-5			/RE-PRINT
	JMP	REDTRK+1		/TRY SAME AGAIN
/
/THIS ROUTINE WILL TEST FOR APT AND NOP CONSOLE
/PACKAGE IF NEED BE
/
APT8,	0
	TAD	22
	SMA CLA
	JMP I	APT8
	TAD	22
	AND	K7377			/ON APT. NOP CONSOLE PACKAGE
	DCA	22
	TAD	22
	AND	K0007			/ISOLATE DRIVE NUMBER OR
					/NUMBER OF DRIVES TO BE DONE
	DCA	STCNT1
	TAD	22
	AND	K0100
	SNA CLA				/SINGLE DRIVE TESTING
	JMP	MULDSK			/NO.SEVERAL TO DO
	TAD	ADPOT1			/GET DISK POINTER
	TAD	STCNT1			/ESTABLISH DRIVE TO DO
	DCA	STCNT1
	CLL CLA CMA			/-1
	DCA I	STCNT1
	CLL CLA CMA			/ONE DISK TO DO
	DCA	LOC8ED
	JMP I 	BGNTST
MULDSK,	TAD	STCNT1			/DRIVE TO BE DONE
	CMA
	DCA	STCNT1
	TAD	ADPOT1			/GET DISK POINTER
	TAD	STCNT2			/ESTABLISH DRIVE TO BE DONE
	DCA	STCNT3
	ISZ	LOC8ED
	CLL CLA CMA
	DCA I	STCNT3			/DO THIS DRIVE
	ISZ	STCNT2	
	ISZ	STCNT1
	JMP	MULDSK+3		/MORE TO DO
	TAD	LOC8ED
	CIA
	DCA	LOC8ED		/NUMBER TO BE DONE
	JMP I	BGNTST
K7377,	7377
PAGE
/
/SUBROUTINE TO PRINT TWO OCTAL
/
TOCT,   0
        DCA     SBCNT1                  /SAVE AC
        TAD     SBCNT1
        RAR
        RTR
        AND     K0007
        TAD     K0260
        TYPE                            /PRINT FIRST BYTE
        TAD     SBCNT1
        AND     K0007
        TAD     K0260
        TYPE                            /PRINT SECOND BIT
        JMP I   TOCT                    /EXIT
/
/
/
/ROUTINE TO DO CRLF
/
UPONE,  0
        CLA CLL
        TAD     K0215
        TYPE
        TAD     K0212
        TYPE
	TYPE				/TYPE ONE NULL
        JMP I   UPONE
/
K0215,	0215
K0212,	0212
/
/ROUTINE TO PRINT FOUR OCTAL
/
FROCT,  0
        RTL
        RTL
        DCA     UPONE
        TAD     M4
        DCA     TOCT
        TAD     UPONE
        AND     K0007
        TAD     K0260
        TYPE
        TAD     UPONE
        RTL
        RAL
        DCA     UPONE
        ISZ     TOCT
        JMP     .-11
	TAD	K0240
	TYPE
        JMP I   FROCT
/
/SUBROUTINE TO PRINT TEXT
/
PRN,    0
        CLA CLL
        TAD I   PRN                     /GET POINTER
        ISZ     PRN
        DCA     FROCT
        TAD I   FROCT
        AND     K7700
        SNA
        JMP     EXIT
        SMA
        CML
        IAC
        RTR
        RTR
        RTR
        TYPE
        TAD I   FROCT
        AND     K0077
        SNA
        JMP     EXIT
        TAD     K3740
        SMA
        TAD     K4100
        TAD     K0240
	TYPE
        ISZ     FROCT
        CLA CLL
        JMP     PRN+5
EXIT,   CLA CLL
        JMP I   PRN

/
K4100,	4100
K3740,	3740
/
/ROUTINE TO TYPE
/
PRINT,  0
        TLS
        TSF
	JMP	.-1
        TCF
        CLA
        JMP I   PRINT
K0240,	0240
K7700,	7700
K0077,	0077
K0010,	10
K7741,	7741
K3600,	3600
/ROUTINE TO WAIT FOR KEY FROM OPERATOR
/
WAIT,	0
	CLA CLL
	KCC
	KSF
	JMP 	.-1
	KRB
	TLS
	TSF
	JMP	.-1
	AND	K0177
	TAD	K0200
	DCA	CHAR
	TAD	CHAR
	DCA	C8CHAR
	ISZ	INMODE
	JMS	XC8CNT		/CHECK FOR CONTROL CHARACTERS.
	CLA
	CLA
	DCA	INMODE
	KCC
	TCF
	TAD	CHAR
	CIA
	TAD	K0316
	SNA CLA				/WAS IT A NO
	JMP I	WAIT			/YES
	ISZ	WAIT			/UPDATE RETURN POINTER
	TAD	CHAR
	CIA
	TAD	K0331
	SNA CLA				/WAS IT A YES
	ISZ	WAIT			/WAS A YES
	JMP I	WAIT			/WAS NEITHER
K0177,	0177
K0316,	0316
K0331,	0331
/
PAGE
/
/
/ROUTINE TO RECALIBRATE SELECTED DRIVE
/
RESTOR,	0
	CLA CLL IAC			/ENABLE CLEAR CONTROL
	CLRALL				/CLEAR CONTROL
	TAD	DRIVNO			/CURRENT DRIVE
	TAD	HOMEMA			/CURRENT FIELD
	LDCMD				/LOAD COMMAND
	TAD	EXBIT
	LDSC				/LOAD EXTENDED DRIVE BIT
	CLA CLL CML RAR			/MAYBE EXPECTED STATUS
	DCA	GDREG2			/SETUP COMPARE REGISTER
	CLA CLL CML RTL			/ENABLE RECALIBRATE BIT
	CLRALL				/"RECALIBRATE"
	DSKSKP				/DISK SKIP IOT
	JMP	.-1			/WAIT FOR FIRST DONE FLAG
	RDSTAT				/READ STATUS
	TAD	K2000
	SNA				/WAS IT BUSY AND DONE
	JMP	RESTA			/YES, THEN ITS O.K.
	TAD	K2000			/NO, THEN IT MUST BE JUST DONE
	SZA CLA				/WAS IT JUST DONE
	JMP	RESTER			/NO, ERROR
RESTA,	CLRALL				/CLEAR STATUS
	TAD	K0200			/ENABLE SET SECOND DONE FLAG
	TAD	CMREG			/ORIGINAL COMMAND
	LDCMD				/LOAD COMMAND
	DSKSKP				/DISK SKIP IOT
	JMP	.-1			/WAIT FOR SECOND DONE
	RDSTAT				/READ STATUS
	TAD	K4000
	SZA CLA				/WAS IT ONLY DONE FLAG
	JMP	RESTER			/NO, ERROR STATUS
	CLA CLL IAC			/ENABLE CLEAR CONTROL
	CLRALL				/CLEAR CONTROL
	ISZ	RESTOR			/UPDATE FOR GOOD RECALIBRATE
	JMP I	RESTOR			/RETURN
RESTER,	ERROR				/ERROR, STATUS
	3603				/TEXT POINTER
/
	CRLF
	PRNTER				/PRINT "TRY RECALIBRATE"
	ERMES2
	RECEIV				/WAIT FOR INPUT
	JMP	.+3			/TRY NEXT EXISTING DISK
	JMP	.-5
	JMP	RESTOR+1		/TRY AGAIN
	CLA CLL IAC
	TAD	AMOUNT			/GET AMOUNT ON SYSTEM
	SNA				/WAS THERE ONLY 1 LEFT
	JMP I	XEND			/LAST DISK
	DCA	AMOUNT			/MORE TO GO BUT CLEAR THIS ONE
	DCA I	TCNTR5			/CLEAR DISK POINTER
	JMP I	RESTOR			/TRY NEXT ONE
/
/
/ROUTINE TO CHANGE DEVICE CODES
/
CHANG,	0
	JMS	XC8SW			/GET SWITCH REGISTER BITS.
	RAR
	SNL CLA				/CHANGE DEVICE CODES?
	JMP I	CHANG			/NO.
	JMS	XC8SW			/GET SWITCHES.
	AND	A0770
	DCA	CSAVE1			/SAVE DESIRED
	TAD	CCNTR1
	DCA	CSAVE2
	TAD	CHNPOT
	DCA	RESTOR
CHANGR,	TAD I	RESTOR			/GET ADDRESS POINTER
	DCA	KWAIT
	TAD I	KWAIT			/GET OLD CODE
	AND	A7007			/MASK
	TAD	CSAVE1			/ADD IN DESIRED
	DCA I	KWAIT			/STORE DESIRED DEVICE CODE
	ISZ	RESTOR			/UPDATE POINTER
	ISZ	CSAVE2			/UPDATE CHANGE COUNTER
	JMP	CHANGR
	JMP I	CHANG			/EXIT TO PROGRAM.
/
KWAIT,	0
A7007,	7007
A0770,	0770
CSAVE1,	0
CSAVE2,	0
CCNTR1,	7771
CHNPOT,	CHNPOT+1
	IOT0
	IOT1
	IOT2
	IOT3
	IOT4
	IOT5
	IOT6
K2000,	2000
/
/THIS ROUTINE WILL GENERATE TIMING IF NEEDED BY THE APT SYSTEM
/
KTICK,	0
	CLL CLA
	TAD	22			/GET HARDWARE CONFIGURATION
	AND	K4000
	SNA CLA				/ON APT?
	JMP	EXTICK			/NO
	TAD I	KTICK			/GET TIMING VALUE
	DCA	COUNT			/ESATABLISH TIME
	ISZ	CLKCNT
	JMP	EXTICK			/RETURN
	TAD	COUNT			/GET VALUE OF COUNTER
	DCA	CLKCNT			/STORE IT
	ISZ	CNT			/TIMING NEED BE DONE?
	JMP	EXTICK
	TIME
	TAD	KCNT			/TIMING VALUE
	DCA	CNT			/INIT SECOND COUNTER
EXTICK,	ISZ	KTICK			/MOVE BEYOND TIMING VALUE
	JMP I	KTICK

COUNT,	0
CNT,	-2
KCNT,	-2
K0100,	0100
/
/
/ROUTINE TO NOTIFY APT OF USE IF REQUIRED
/
KTIME,	0
	IOF			/DISABLE INTERUPTS
	RDF			/GET PRESENT DATA FIELD
	TAD KCDF
	DCA .+1			/ESTABLISHES CURRENT DATA FIELD
	HLT
	CIF 70				/FIELD 7. LOCATION OF UV PROM
	JMS I K6500
	CLL CLA
	JMP I KTIME
/
K6500,	6500
/
PAGE
/
/
/THIS ROUTINE WILL NOTIFY APT OF AN ERROR AND SEND PC TO
/APT SYSTEM. ALL ERRORS WILL RESULT IN PROGRAM HLT AND A TIME OUT ON
/APT. APT WILL TAKE OVER FROM THERE.

/
AERRO,	0
	IOF			/DISABLE INTERUPTS
	CLA
	TAD	22		/CHECK FOR APT SYSTEM
	SMA CLA
	JMP I	AERRO		/RETURN NOT ON APT
	TAD I 	KERRO		/GET PC
	DCA SAVPC
	RDF			/GET CURRENT DATA FIELD
	TAD KCDF
	DCA .+2
	TAD SAVPC
	HLT			/REPLACED WILL CURRENT DATA FIELD
	CIF 70			/CHANGE IF FOR APT RETURN TO FIELD 7
	JMP I K6520		/NOTIFIES APT OF ERROR
	HLT
/
K6520,	6520
KERRO,	ERRO
SAVPC,	0
/
/
/ROUTINE TO MOVE DISK POINTERS
/
MOVE,	0
	TAD	ADPT1
	DCA	AUTO10

	TAD	ADPT2
	DCA	AUTO11
	TAD	M10
	DCA	MCNTR1
	TAD I	AUTO10			/FROM HERE
	DCA I	AUTO11			/TO THERE
	ISZ	MCNTR1			/4 POINTERS
	JMP	.-3
	JMP I	MOVE
/
ADPT1,	DSK0A-1
ADPT2,	DSK0B-1
MCNTR1,	0
/
/
TEXPC,  TEXT    "PC:"
TEXGD,  TEXT    "GD:"
TEXEX,	TEXT	"EX:"
TEXCM,	TEXT	"CM:"
TEXST,	TEXT	"ST:"
TEXDA,  TEXT    "DA:"
TEXCA,	TEXT	"CA:"
TEXAD,  TEXT    "AD:"
TEXDT,  TEXT    "DT:"
/
ERTX1,	TEXT	"READ STATUS ERROR"
ERTX2,	TEXT    "DISK DATA ERROR"
ERTX3,	TEXT	"WRITE STATUS ERROR"
ERTX4,	TEXT	"RECALIBRATE STATUS ERROR"
/
ERMES1,	TEXT "TRY TO FORMAT SAME CYLINDER AGAIN?"
ERMES2,	TEXT "TRY TO RECALIBRATE SAME DISK AGAIN?"
ERMES3,	TEXT "TRY TO CHECK SAME CYLINDER AGAIN?"
/
TEXEND,	TEXT	"RK8E/RK8L DISK FORMATTER PASS COMPLETE"
MES1,	TEXT "RK8E/RK8L DISK FORMATTER PROGRAM"
MES2,	TEXT "FOR ALL QUESTIONS, ANSWER Y FOR YES OR N FOR NO."
MES3,	TEXT "FORMAT DISK "
MES4,	TEXT "ARE YOU SURE?"
MES5,	TEXT "FORMAT SAME DISK(S) AGAIN?"
/
PAGE
/
WRKBUF=.
/
HITRK=.
LOTRK=.+1
/
ENDBUF=.+377
/


/CONSOL SRC -V2-R0- CONSOLE PACKAGE


/LAS= CALL C8CKSW OR JMS XC8SW
/THIS WILL READ THE SWITCH REGISTER FROM THE PLACE SPECIFIED
/BY LOCATION 20 BIT 0.


/THE PROGRAN SHOULD CHECK FOR A CONTROL CHARACTER FRON THE TERMINAL
/EVERY FIVE(5) SECONDS OR SOONER.

/LOCATIONS THAT NEED TO BE SET UP FOR USING THE CONSOLE PACKAGE.

/CNTVAL IN XC8PASS    THIS LOCATION DETERMINDS THE NUMBER OF
/PROGRAM COMPLETIONS THAT ARE NEEDED BEFORE THE PASS MESSAGE IS TYPED
/THE VALUE SHOULD PUT THE PASS MESSAGE OUT IN THE RANGE OF 1 TO 5 MINUTES.
/THIS SHOULD BE A POSITIVE NUNBER.

/C8STRT   THIS IS FOUND IN CNTRL ROUTINE CONTROL R PART
/IT IS THE RETURN WHEN CONTROL R IS ENTERED (RESTART PROGRAM)
/THE RETURN JUMPS TO XDOSW WHICH CONTAINS C8STRT SO PUT THE LABEL C8STRT
/WHERE YOU WANT TO RESTART THE PROGRAM.


/SETUP1 IN XC8ERR    THIS IS THE MASK BIT FOR HALT ON ERROR
/PLACE THE CORRECT BIT IN THIS LOCATION FOR HALTING ON ERRORS.

/SETUP2 IN XC8PASS   THIS IS THE MASK FOR HALT A END OF PASS.

/THE CALL TABLE IS A CONDITIONAL ASSEMBLY.
/TO ASSEMBLE THE CALL REMOVE THE / BEFORE CONSOL=0.
/IN COMBINING THE CONSOL PACKAGE TO A DIAGNOSTIC.
/THE CALL TABLE IS TO BE AT THE BEGINNING OF A PROGRAM.


/CONSOL=0
	PSKF=	6661
	PCLF=	6662
	PSKE=	6663
	PSTB=	6664
	PSIE=	6665
	GTF=	6004
	ACL=	7701
	CAF=	6007
	MQL=	7421
	MQA=	7501
/
*3000
/
/*********************************************************************
/C8PASS
/THIS IS CALLED AT THE END OF EACH PROGRAM COMPLETION
/THE VALUE OF** CNTVAL** WILL BE DETERMINED BY THE TIME IT TAKES
/THE PROGRAM TO COMPLETE THIS MANY C8PASS TO BE IN THE 1 TO 4 MINUTE
/RANGE
/	C8PASS=JMS   XC8PAS
/EX. OF CALL		C8PASS
	/		HLT		/HALT IF NON CONSOL PACKAGE
/		JMP	START1		/CONTINUE RUNNING THIS PROGRAM


/RETURN TO LOCATION CALL PLUS ONE WITH THE AC=0 IF NON CONSOL PACKAGE AND HLT
/IF CONTINUE TO RUN THEN RETURN TO CALL PLUS2 AC=0 
/THE LOCATION SETUP2 IS THE MASK BIT FOR THE HALT AT END OF PASS
/CHECK THAT IT IS CORRECT FOR THE CURRENT PROGRAM

/CALLS USED BY XC8PAS ARE  CHKCLA-XC8CRLF-XC8OCTA-XC8SW-XC8PNT-XC8INQ-


XC8PAS,	0
	CLA
	JMS	CHKCLA		/IS WORD 22 BIT 3 ACTIVE CONSOLE?
	JMP	DOPACK		/IS CLASSIC
	JMS	C8GET		/GET THE REGISTERS.
	JMS	XC8SW		/DEACTIVE CONSOL CHECK SR SETTING
	AND	(400		/FOR HALT ON END OF C8PASS
	SZA CLA			/1= HALT 0 CONTINUE
	JMP I	XC8PAS		/GO TO HALT
	JMP	C8BY1		/CONTINUE ON RUNNING PROGRAM
DOPACK,	JMS	CKCOUT		/CLASS CHECK C8PASS COUNT
	JMP	C8BY1		/C8PASS COUNT NOT DONE REDO PROGRAM
	ISZ	PASCNT		/C8PASS COUNT DONE SET C8PASS COUNT
	JMS	XC8CRLF
	JMS	XC8PNT		/C8PRNT BUFFER
	MESPAS			/
	TAD	PASCNT		/GET NUMBER
	JMS	XC8OCTA		/CONVERT IT TO ASCII
	JMS	XC8CRLF		/DO A CARRIAGE RETURN
	JMS	C8GET		/GET THE REGISTERS.
	JMS	XC8SW		/CHECK A HALT AT END OF C8PASS
SETUP2,	AND	(400		/MASK BIT
	SZA CLA			/HALT =1 NO SKIP CONTINUE =0
	JMS	XC8INQ		/STOP PROGRAM EXECUTION-LOOK FOR INPUT
C8BY1,	ISZ	XC8PAS		/BUMP RETURN
	JMP I	XC8PAS
CKCOUT,	0
	TAD	DOSET		/CHECK IF SET UP NEEDED
	SZA CLA			/0=SET UP C8PASS COUNT VALUE
				/1=C8PASS COUNT VALUE OK
	JMP	NOSET		/C8PASS COUNT VALUE ON
	TAD	CNTVAL		/GET COUNT VALUE FOR THIS PROG
	CMA			/SET TO NEGATIVE
	DCA	DOCNT		/STORE IN HERE
	ISZ	DOSET		/INDICATE VALUE SET UP
NOSET,	ISZ	DOCNT		/COUNT THE NUMBER OF PASSES
	JMP	C8BY1		/EXIT FOR ANOTHER PASS
	DCA	DOSET		/SET TO C8PRNT C8PASS
	ISZ	CKCOUT		/BUMP RETURN FOR
	JMP I	CKCOUT		/C8PASS C8TYPE OUT
DOCNT,	0
PASCNT,	0			/
DOSET,	0
CNTVAL,	0
MESPAS,	TEXT	"DHRKDD  PASS "



/*********************************************************************

/C8CKSW

/THIS ROUTINE CAN BE USED INPLACE OF A READ THE SWITCHES LAS.
/ROUTINE THAT WILL CHECK WHERE TO READ THE
/C8 SWITCHES FROM IE. FROM PANEL OR PSEUDO SWITCH REGISTER
/THE SELECTION IS DETERMINED BY THE STATE OF BIT 0 IN LOCATION 21.

	/C8CKSW=	JMS XC8SW
	/EX.	JMS	XC8SW		/READ THE C8SWIT REGISTER
					/RETURN WITH THE CONTENTS OF SWITCH REGISTER

/RETURN TO NEXT LOCATION FOLLOWING CALL WITH THE AC= TO VALUE OF C8SWIT SETTING

/CALLS USED ARE-XC8CKPA-



XC8SW,	0
	JMS	XC8CKPA		/GO CHECK THE IF ANY CONTRL
	NOP
	TAD	21		/GET WD FOR INDICATOR
	SPA CLA			/CHECK IF FROM PANEL 4000
	7614			/DO LAS AND SKIP GET FROM PANEL WITH LAS
	TAD	20		/PSEUDO SWITCH
	JMP I	XC8SW		/EXIT WITH STATUS BIT IN AC.


/*********************************************************************

/C8TTYI
/THIS ROUTINE WILL LOOK FOR A INPUT FROM THE TERMINAL
/AND REMOVE ANY PARITY BITS, THEN MAKE IT 8 BIT ASCI.
/	C8TTYI=	JMS XC8TTY
/EX.	JMS	XC8TTYI		/READ CHAR FROM THE CONSOL DEVICE
	/			/RETURN TO CALL PLUS ONE AC CONTAINS THE CHAR


/CALLS USED -NONE- BUT C8CHAR IS OFF PAGE AND IN ROUTINE CALLED XC8ECHO

/
/
XC8TTY,	0
	KSF			/LOOK FOR KEYBOARD FLAG
	JMP	.-1
	KRB			/GET CHAR
	AND	(177		/MASK FOR 7 BITS
	TAD	(200		/ADD THE EIGTH BIT
	DCA	C8CHAR		/STORE IT
	TAD	C8CHAR
	JMP I	XC8TTY		/EXIT



/*********************************************************************

/C8PRNT

/THIS ROUTINE WILL TYPE THE CONTENTS OF THE C8 PRINT BUFFER. THE LOCATION
/OF THE BUFFER WILL BE IN THE ADDRS FOLLOWING THE CALL.   PRINTING OF THE BUFFER
/WILL STOP WHEN A 00 CHAR IS DETECTED. CHARACTERS ARE PACKED 2 PER WORD.

/	C8PRNT=	JMS XC8PNT


/EX.	JMS	XC8PNT			/C8PRNT THE CONTENTS OF THE FOLLOWING BUFFER
/	MESS77				/LOCATION OF C8PRNT BUFFER

/C8PRNT WILL USE THE LOCATION FOLLOWING THE CALL AS THE POINTER FOR THE
/C8PRNT ROUTINE.RETURN TO CALL PLUS TWO WITH AC= 0

/CALLS USED ARE-XC8TYPE-XC8PNT



XC8PNT,	0
	CLA CLL
	TAD I	XC8PNT		/GET C8PRNT BUFFERS STARTING LOCATION
	DCA	PTSTOR		/STORE IN PTSTOR
	ISZ	XC8PNT		/BUMP RETURN
C8DO1,	TAD I	PTSTOR		/GET DATA WORD
	AND	(7700		/MASK FOR LEFT BYTE
	SNA			/CHECK IF 00 TERMINATE
	JMP I	XC8PNT		/EXIT
	SMA			/IS AC MINUS
	CML			/MAKE CHAR A 300 AFTER ROTATE
	IAC			/MAKE CHAR A 200 AFTER ROTATE
	RTR
	RTR
	RTR			/PUT CHAR IN BITS 4-11 MAKE IT 8 BIT ASCII
	JMS	XC8TYPE		/C8PRNT IT ON CONSOLE
	TAD I	PTSTOR		/GET DATA WORD
	AND	(0077		/MASK FOR RIGHT BYTE
	SNA			/CHECK IF 00 TERMINATOR
	JMP I	XC8PNT		//EXIT
	TAD	(3740		/ADD FUDGE FACTOR TO DETERMINE IF 200
	SMA			/OR 300 IS TO BE ADD TO CHAR
	TAD	(100		/ADD 100
	TAD	(240		/ADD 200
	JMS	XC8TYPE		/C8TYPE ONLY BITS 4-11
	ISZ	PTSTOR		/BUMP POINTER FOR NEXT WORD
	JMP	C8DO1		/DO AGAIN
PTSTOR,	0			/STOR FOR C8PRNT BUFFER
/**************************************************************************


/C8PAUS
/THIS ROUTINE WILL CHECK IF THE CONSOL PACKAGE IS ACTIVE,IF ACTIVE
/IT WILL RETURN TO CALL PLUS ONE AC= 0. AND DO THAT INSTRUCTION.
/IF THE CONSOL PACKAGE IS NOT ACTIVE THE CALL WILL BE REPLACED
/WITH A 7402 HALT AND THEN RETURN TO THE HALT.

/	C8PAUS=	JMS XC8PAU
/
/
/EX.		JMS	XC8PAUS		/CHECK IF ON ACTIVE CONSOL IF NOT HALT HERE
/		ANYTHING		/RETURN HERE IF ON ACTIVE CONSOL
/
/

/CALLS USED ARE -CHKCLA-



XC8PAU,	0
	CLA CLL
	JMS	CHKCLA		/CHECK LOC 22 BIT 3 CONSOLE BIT
	JMP	C8DO3		/GO DO CONSOL PART RETURN CALL +1
	CMA			/DEACTIVE CONSOLE PACKAGE PUT HLT IN CALL
	TAD	XC8PAU		/GET CORRECT RETURN ADDRS
	DCA	XC8PAU		/SET UP RETURN
	TAD	(7402		/GET CODE FOR HLT
	DCA I	XC8PAU		/PUT HALT IN CALL LOCATION
C8DO3,	JMP I	XC8PAU		/GO TO HALT OR RETURN TO NEXT LOCATION


PAGE
/*********************************************************************


/C8CNTR
/THIS ROUTINE WILL CHECK FOR THE PRESENCE OF CONTROL CHARACTERS
/IT WILL CHECK FOR THE FOLLOWING CHAR C-R-Q-L-S
/	C8CNTR=	JMS XC8CNT

/EX.	JMS	XC8CNTR			/CHECK FOR CONTROL CHARACTER
/	JMP	ANYTHING		/LOC FOLLOWING CALL IS FOR CONTINUING THE PROGRAM
/	JMP	ANYTHING		/LOC. IS FOR RETURN IF INMODE SET AND NOT CNTRL CHAR
/

/RETURN IS TO CALL PLUS ONE IF CONTINUE
/RETURN IS TO CALL PLUS TWO IF INMODE SET AND NOT CONTROL CHAR
/RETURN IS TO CALL PLUS TWO IF INMODE IS NOT SET AND NO
/CONTROL CHAR ..THIS WILL PRINT THE CHARACTER AND A ? 
/CLEAR THE AC AND RETURN CALL+2.

/CALLS USED ARE-CHKCLA-XC8TYPE-XC8CRLF-C8GET-UPAROW-XC8TYI-XC8PSW-
/
/
/
XC8CNT,	0
	DCA	ACSAVE		/SAVE THE AC
	JMS	CHKCLA		/CHECK LOC.22 BIT3 FOR CONSOLE BIT
	JMP	.+3		/ON ACTIVE CONSOLE
	TAD	ACSAVE		/DEACTIVE CONSOLEGET AC FOR RETURN
	JMP I	XC8CNT		/EXIT NOT ON ACTIVE CONSOLE
	GTF
	DCA	FLSAVE
	MQA
	DCA	MQSAVE		/SAVE THE MQ
	DCA	INDEXA		/SET DISPLACEMENT INTO TABLE B 
	TAD	XTABLA		/GET ADDRS OF TABLE A
	DCA	GETDAT		/CONTAINS POINTER TO CONTROL CHAR
REDOA,	TAD I	GETDAT		/GET CONTROL CHAR FROM TABLE
	SNA			/CHECK FOR A 0 END OF TABLE
	JMP	DONEA		/END OF TABLE NO CONTROL CHAR
	TAD	C8CHAR		/COMPARE CHAR TO CONTROL CHAR
	SNA CLA			/0 IF MATCH
	JMP	GOITA		/MATCH
	ISZ	INDEXA		/NO MATCH NOT END OF TABLE REDO
	ISZ	GETDAT		/BUMP INDEX FOR EXIT WHEN CONTROL FOUND
	JMP	REDOA		/BUMP GETDAT FOR COMPARE OF NEXT CNTRL CHAR.
DONEA,	TAD	INMODE		/CHECK IF PROGRAM EXPECTS CHAR
	SZA CLA			/1=CHAR EXPECTED  0= NO CHAR EXPECTED
	JMP	EXITA		/CHAR EXPECTED
	TAD	C8CHAR		/GET CHAR - NOT CONTROL + NOT EXPECTED
	JMS	XC8TYPE		/C8PRNT CHAR
	TAD	(277		/GET CODE FOR "?"
	JMS	XC8TYPE
	JMS	XC8CRLF
	ISZ	XC8CNT		/BUMP RETURN
	JMP I	XC8CNT		/EXIT CALL+2
EXITA,	ISZ	XC8CNT		/BUMP RETURN FOR MAIN PROGRAM CHECK OF CHAR
	TAD	C8CHAR		/PUT CHAR IN AC.
	JMP I	XC8CNT		/EXIT
GOITA,	TAD	C8CHAR		/GET THE CONTENTS OF CHAR
	TAD	(100		/ADD 100 TO FORM A GOOD ASCII CHARACTER
	DCA	C8CHAR		/RESTORE COFFECT CHAR
	TAD	XTABLB		/GET START OF TABLE B
	TAD	INDEXA		/GET NOW FAR INTO TABLE
	DCA	GOTOA		/STORE IT
	TAD I	GOTOA		/GET THE ROUTINE STARTTING ADDRESS
	DCA	GOTOA		/STORE IT IN HERE
	JMP I	GOTOA		/GOTO CONTROL CHAR ROUTINE
GOTOA,	0000			/ADD OF CNTRL ROUTINE TO EXECUTE
INDEXA,	0000			/DISPLACEMENT INTO CNTRL TABLE
GETDAT,	0000			/LOCATION OF ADDRS OF CONTROL CHAR.
XTABLA,	TABLA			/ADDRS OF TABLEA
XTABLB,	TABLB			/ADDRS OF TABLEB
TABLA,	7575			/CNTRL C BACK TO MONITOR 203
	7564			/CNTRL L SWITCH ERROR PRINTTING DEVICE 214
	7557			/CNTRL Q START DISPLAYING CHAR. AGAIN 221
	7556			/CNTRL R BACK TO BEGINNING OF PROGRAM 222
	7555			/CNTRL S STOP SENDING CHAR TO DISPLAY WAIT FOR CNTRL Q 223
	7573			/CNTRL E CONTINUE WITH PROGRAM 205
	7574			/CONTROL D CHANGE SWITCH REGISTER ON FLY
	0000

TABLB,	CNTRLC
	CNTRLL
	CNTRLQ
	CNTRLR
	CNTRLS
	CNTRLE
	CNTRLD
/
/CONTROL Q
/START SENDING CHAR. TO THE DISPLAY
/THIS WILL RETURN CONTROL TO CALL THAT WAS SET BY
/THE CALL FOR CONTROL S.
/
CNTRLQ,	DCA	INMODE		/SET SOFT FLAG FOR UNEXPECTED CHAR
	TAD	C8SETS		/CHECK IF CONTROL S TYPED IN
	SZA CLA
	JMP	BYRETR		/CONTROL S TYPED IN 
	JMS	C8GET		/NO CONTROL S TYPED PREVIOUSLY
	JMP I	XC8CNTR		/LEAVE VIA CNTR ENTRY ADDRESS
BYRETR,	DCA	C8SETS		/CLEAR THE SOFT FLAG
	JMS	C8GET		/RESTORE REGISTERS
	JMP I	C8RETR		/EXIT TO ADDRESS SET BY CONTROL S
/
/
/CONTROL R
/GO TO THE QUESTION C8SWIT
CNTRLR,	DCA	TTYLPT		/CLEAR THE TYPE FLAG SET TO TTY
	DCA	C8SETS		/CLEAR SOFT FLAG FOR CNTRL S
	DCA	INMODE
	JMS	UPAROW		/PRINT THE ^ AND C8CHAR
C8BY4,	DCA	C8SWST		/CLEAR FLAG FOR CNTRL D OR R
	JMP I	XDOSW		/GO TO ADDRS OF C8SWIT
XDOSW,	BGN			/DOSW IS LABEL FOR C8SWIT QUESTION
/
/
/CONTROL S
/STOP SENDING CHAR. TO DISPLAY UNTIL A ^Q IS RECEIVED
/
/
CNTRLS,	TAD	C8SETS		/IF1 DO NOT STORE IN C8RETR
	SZA CLA
	JMP	C8DO7		/DONT SET UP C8RETR
	IAC			/MAKE RETURN CALL PLUS 2
	TAD	XC8CNT		/GET RETURN FOR THIS CALL
	DCA	C8RETR		/STORE IT HERE FOR USE BE CNTROL Q
C8DO7,	ISZ	C8SETS		/SET FLAG TO SAVE CALL
	JMS	XC8TTYI			/LOOK FOR THE INPUT
	JMS	C8GET		/GET REGISTERS 
	JMS	XC8CNTR			/CHECK FOR THE CONTROL CHAR
	CLA
	JMP	CNTRLS		/IF NOT A CNTRL Q R C REASK
C8SETS,	0
C8RETR,	0
/
/SWITCH OUTPUT FROM ONE OUTPUT DEVICE TO ANOTHER - THE TWO OUTPUTS ARE THE
/CONSOLE AND THE PRINTER WITH DEVICE CDOE 66.
/
/
CNTRLL,	TAD	TTYLPT		/GET PRESENT C8SWIT INDICATOR
	CMA			/COMPLEMENT IT
	DCA	TTYLPT		/STOR NEW C8SWIT
	JMS	UPAROW		/C8PRNT ^ AND CHAR ON NEW DEVICE
	JMS	C8GET		/RESTORE THE REGISTERS
	JMP I	XC8CNT		/EXIT
/
/CONTROL E
/CONTINUE RUNNING FROM A INQUIRE OR ERROR
/
/
CNTRLE,	JMS	UPAROW		/PRINT THE CONTROL CHAR
	JMS	C8GET		/GET THE REGISTERS
	JMP I	XC8CNT		/RETURN TO CALL PLUS ONE
/

/CONTROL C
/RETURN TO MONITOR CONTROL C
CNTRLC,	DCA	TTYLPT		/CLEAR THE LPT FLAG TO PRINT ON DISPLAY
	JMS	UPAROW		/C8PRNT A^ AND LETTER IN CHAR
	CDF CIF			/GO TO 0 FLD
	CAF			/CLEAR THE WORLD
	JMP I	(7600		/GO TO DIAGNOSTIC MONITOR
/*********************************************************************
/
/
/
PAGE

/
	/CONTROL D
	/CHANGE THE SWITCH REGISTER ANYTIME CNTRL D AND RETURN TO
	/THE PROGRAM RUNNING.


CNTRLD,	JMS	UPAROW
	TAD	C8SETD		/CHECK IF THE RETURN ADDRS IS SAFE
	SZA CLA
	JMP	C8DO11		/DO NOT CHANGE THE RETURN ADDRS
	TAD	XC8CNT		/GET THE RETURN ADDRS AND SAVE IT
	DCA	C8RETD		/SAVE THE RETURN HERE
	ISZ	C8SETD		/INDICATE RETURN SAVED DONT DISTROY
C8DO11,	JMS	XC8PSW			/GO CHANGE THE SWITCH REGISTER
	DCA	C8SETD		/CLEAR THE FLAG
	JMS	C8GET		/RESTORE THE AC MQ LINK ETC
	JMP I	C8RETD		/RETURN TO THE PROGRAM
/
C8SETD,	0
C8RETD,	0



/THIS WILL TYPE A UP ARROW AND THE CHAR IN C8CHAR.

UPAROW,	0			/C8PRNT THE "^" AND THE CHAR C8TYPED IN
	TAD	(336		/CODE FOR ^
	JMS	XC8TYPE
	TAD	C8CHAR		/C8TYPE THE CHAR
	JMS	XC8TYPE
	JMS	XC8CRLF
	JMP I	UPAROW		/EXIT



/***********************************************************************

C8GET,	0
	CLA
	TAD	MQSAVE
	MQL			/RESTORE MQ
	TAD	FLSAVE
	RAL			/RESTORE THE LINK
	CLA
	TAD	ACSAVE		/RESTORE THE AC
	JMP I	C8GET		/GET THE REGISTERS



/********************************************************************

/C8INQU
/C8INQU ROUTINE WILL PRINT A WAITING
/AND THE PROGRAM IS EXPECTING A CONTROL CHAR INPUT
/IF CONTINUE FROM CONTROL CHAR RETURN IS CALL PLUS ONE
/IF NO CONTROL CHAR ENTERED THEN WAITING IS REPRINTED
/AND PROGRAM WAITS FOR A CONTROL CHAR AGAIN.

/	C8INQU =	JMS XC8INQ

/EX.	JMS	XC8INQ			/C8 WILL PRINT A WAITINGAND WAIT FOR INPUT
/	DO ANYTHING			/RETURN IS CALL PLUS ONE AC =0 CONTINUE

/CALLS USED ARE -CHKCLA-XC8PNT-XC8TYI-C8GET-XC8CNTR-


XC8INQ,	0
	CLA CLL
	JMS	CHKCLA		/CHECK LOC 22 BIT 3 CONSOLE BIT
	SKP			/ACTIVE CONSOLE PACKAGE
	JMP I	XC8INQ		/NOT CONSOLE LEAVE
	JMS	XC8PNT
	WATMES			/INQUIR WAITTING
	JMS	XC8TTYI		/GET CHARACTER
	JMS	C8GET
	JMS	XC8CNTR		/CHECK IF CONTROL CHARACTER
	JMP I	XC8INQ		/EXIT AND CONTINUE
	JMP	XC8INQ+1	/REASK
WATMES,	TEXT	"WAITING "


/*********************************************************************

/C8SWIT

/ROUTINE WILL CHECK IF CONSOL IS ACTIVE IF IT IS ACTIVE DISPLAY 
/SW QUESTION . IN NOT ACTIVE IT WILL NOT PRINT THE SW QUESTION BUT
/RETURN TO CALL PLUS ONE AC=0.
/C8SWIT WILL SET UP THE PSEUDO SWITCH
/REGISTER WITH THE NEW DATA ENTERED
/
/	C8SWIT =	JMS XC8PSW

/EX.		JMS	XC8PSW		/SET UP PSEUDO C8SWIT REGISTER IF
					/ON THE CONSOL PACKAGE. RETURN IS CALL PLUS ONE AC = 0

/CALLS USED ARE -CHKCLA-XC8PSW-XC8PNT-XC8OCTA-XC8TYPE-


XC8PSW,	0
	JMS	CHKCLA		/CHECK LOC 22 BIT 3 CONSOLE BIT
	SKP			/ACTIVE CONSOLE
	JMP I	XC8PSW		/DEACTIVE CONSOLE PACKAGE
				/RETURN WITHOUT ASKING PSEUDO SWITCH
	TAD	C8SWST		/IS THE SOFT FLAG SET FOR SWITCH?
	SZA CLA			/SKIP IF ONE ENTRY AT ATIME OK
	JMP	C8BY4		/SECOND ENTRY WITH OUT A EXIT GO TO SW QUESTION
	ISZ	C8SWST		/FIRST ENTRY SET FLAG
C8RDPS,	JMS	XC8PNT		/C8PRNT SR=
	MESA
	TAD	20		/GET CONTENTS OF SW
	JMS	XC8OCTA		/CONVERT IT TO ASCII
	TAD	(40		/GET SPACE
	JMS	XC8TYPE
	ISZ	INMODE		/SET FLAG FOR CHAR EXECTED
	JMS	XC8ECHO		/LOOK FOR INPUT
	JMS	TSTCHA		/NOT CONTROL TEST IT IS LEGAL
	TAD	C8CHAR		/STORE NEW CHAR IN SW REG
	DCA	20

	TAD	(-3		/GET A MINUS 3
	DCA	TMPCNT		/STORE IN TEMP COUNT
GETCH1,	JMS	XC8ECHO		/GET NEXT CHAR
	JMS	TSTCHA		/CHECK IF CR + GOOD CHAR
	TAD	20		/GET C8SWIT REGISTER
	RTL CLL			/ROTATE IT LEFT 3 PLACES
	RAL
	TAD	C8CHAR		/GET CHAR + ADD IT TO PREVIOUS CONTENTS
	DCA	20		/SAVE NEW CONTENTS
	ISZ	TMPCNT		/BUMP COUNT
	JMP	GETCH1		/JMP BACK + GET NEXT CHAR
	JMP	ENDIT		/END 4 CHAR C8TYPED IN
TSTCHA,	0
	CIA			/CMPL CHAR IN AC
	TAD	(215		/TEST IF IT IS A CARRIAGE RETURN
	SNA CLA			/SKIP IN NOT CR.
	JMP	ENDIT		/WAS CARRIAGE RETURN
	TAD	C8CHAR		/NOT CR. GET CHAR
	TAD	(-260		/CHECK IF IT IS IN RANGE
	SPA CLA			/IF NOT POSITIVE C8ERR CHAR SMALLER THEN 260
	JMP	ERR1		/C8ERR - CHAR TOO SMALL
	TAD	C8CHAR		/GET CHAR
	TAD	(-270		/GET A -270 + CHECK IF IT IS LARGER THEN 7
	SMA CLA			/SKIP IF LESS THEN 7
	JMP	ERR1		/C8ERR ON CHAR NOT IN RANGE
	TAD	C8CHAR		/GET CHAR
	AND	(7		/MASK FOR RIGHT BYTE
	DCA	C8CHAR		/STORE IN CHAR
				/GET CHAR IN AC
	JMP I	TSTCHA		/EXIT
ERR1,	TAD	(277		/C8PRNT
	JMS	XC8TYPE		/?
	JMS	XC8CRLF		/
	JMP	C8RDPS		/EXIT + ASK AGAIN
ENDIT,	JMS	XC8CRLF		/DO A CR LF
	DCA	C8SWST		/CLEAR THE PSW ENTRY FLAG
	JMP I	XC8PSW		/EXIT ROUTINE
C8SWST,	0

TMPCNT,	0
MESA,	TEXT	"SR= "


PAGE

/C8OCTA

/OCTAL TO ASCII CONVERSION
/THIS ROUTINE WILL TAKE THE OCTAL NUMBER IN THE AC AND CONVERT IT TO ASCII
/THE RESULT WILL BE PRINTED ON THE CONSOL TERMINAL
/	C8OCTA=	JMS XC8OCT
/
/EX.	JMS	XC8OCTA		/AC CONTAINS NUMBER TO BE CHANGE
/	RETURN IS TO CALL PLUS ONE AC=0
/
/CALLS USED ARE -XC8TYPE-


XC8OCT,	0
	CLL RTL
	RTL			/POSITION THE FIRST CHAR FOR PRINTING
	DCA	C8TMP1		/SAVE CORRECT POSITIONED WORD HERE
	TAD	(-4
	DCA	C8CKP		/STORE COUNTER IN HERE
C8DO4,	TAD	C8TMP1		/GET FIRST NUMBER
	AND	(0007		/MASK
	TAD	(260		/ADD THE PRINT CONSTANT
	JMS	XC8TYPE		/TYPE THE NUMBER
	TAD	C8TMP1		/
	RTL
	RAL			/PUT NEXT NUMBER IN POSITION
	DCA	C8TMP1		/STORE IT
	ISZ	C8CKP		/DONE YET WITH FOUR NUMBERS
	JMP	C8DO4		/NOT YET DO MORE
	JMP I	XC8OCT		/DONE WITH FOUR 
	C8TMP1,	0
	C8CKP,	0


/*********************************************************************

/C8CRLF
/C8TYPE CR AND LF WITH FILLERS FOLLOWING EACH LF AND CR
/
/	C8CRLF=	JMS XC8CRL
/
/EX.	JMS	XC8CRLF		/C8PRNT A CR AND LF WITH FILL
/				/RETURN TO CALL PLUS ONE AC =0
/CALLS USED ARE -XC8TYPE-


XC8CRLF,0
	CLA CLL
	TAD	(215		/GET CODE FOR CR
	JMS	XC8TYPE
	TAD	FILLER
	CMA
	DCA	FILCNT		/STORE FILLER IN HERE
	TAD	(212		/GET CODE FOR LF
C8DO2,	JMS	XC8TYPE
	ISZ	FILCNT		/CHECK ON FILLER CHAR
	JMP	C8DO2		/TYPE A NON PRINTING CHAR
	JMP I	XC8CRL		/EXIT
FILLER,	0004			/FILLER SET FOR 4 CHAR
FILCNT,	0			/COUNTER FOR FILL



//*************************************************************
/C8CKPA
/THIS ROUTINE WILL CHECK IF A CHARACTER WAS ENTERED FROM THE
/TERMINAL. IFTHE FLAG IS SET AND THE CONSOLE PACKAGE IS
/ACTIVE A CHECK IS MADE TO DETERMIND IF IT IS A CONTROL CHAR.
/IF IT WAS A CONTROL CHAR THEN ITS CONTROL FUNCTION IS PERFORMED.
/IF NOT A CONTROL CHARACTER OR A CONTROL E-D-L-O- IT WILL DO
/THE CONTROL FUNCTION AND RETURN TO CALL PLUS 2.
/A NON CONTROL CHARACTER WILL BE PRINTEDAND A "?" IT WILL RETURN TO
/CALL PLUS 2.
/IF NO FLAG IS SET OR THE CONSOL IS NOT ACTIVE THE RETURN IS TO
/CALL PLUS 1.


/	C8CKPA=	JMS	XC8CKP


/EX.	JMS	XC8CKPA			/CALL TO CHECK IF CONTROL CHAR SET
/	ANYTHING(SKIP)		/RETURN IF NOT FLAG OR NOT CONSOLE ACTIVE
/	ANYTHING(JMP EXIT SKIP CHAIN)	/RETURN IF NOT CONTROL OR CONTINUE CONTROL


/CALLS USED ARE -XC8TTYI-XC8CNTR-C8GET-


XC8CKP,	0
	DCA	ACSAVE		/SAVE THE AC
	GTF			/SAVE THE FLAGS
	DCA	FLSAVE		/SAVE THE FLAGS
	MQA			/PUT MQ IN AC
	DCA	MQSAVE		/SACE THE MQ
	KSF			/CHECK THE KEYBOARD FLAG
	JMP	C8BY3		/EXIT TO CALL PLUS 1
	JMS	CHKCLA		/CHECK LOC 22 BIT 3 CONSOLE BIT
	SKP			/ACTIVE CONSOLE PACKAGE
	JMP	C8BY3		/EXIT TO CALL PLUS 1
	JMS	XC8TTYI		/GET THE CHAR
	JMS	C8GET		/GET THE FLAGS
	JMS	XC8CNTR		/CHECK IF CONTROL  CHAR.
	NOP			/RETURN IF A CONTINUE CHAR.
	ISZ	XC8CKP		/BUMP RETURN FOR CALL PLUS 2
C8BY3,	JMS	C8GET		/GET REGISTERS
	JMP I	XC8CKP		/SAY GOOD BY

//*********************************************************************

/C8ECHO
/THIS ROUTINE WILL LOOK FOR A CHAR FROM THE KEYBOARD.  STORE IT IN LOCATION CHAR
/CHECK IF IT WAS A CONTROL CHARACTER - SET INMODE - PRINT CHARACTER

/	C8ECHO =	JMS XC8ECH
/EX.	JMS	XC8ECHO		/LOOK FOR CONSOL CHAR C8PRNT IT
				/RETURN CALL PLUS ONE AC = CHAR C8TYPED IN

/CALLS USED ARE -XC8TTYI-XC8CNTR-C8GET-XC8ECH-XC8TTYPE

/
XC8ECH,	0
	JMS	XC8TTYI		/WAIT FOR CHAR FROM KEYBOARD
	JMS	C8GET		/RESTORE THE REGISTERS
	ISZ	INMODE		/SET INMODE IDENTIFING THIS AS A EXPECTED CHAR
	JMS	XC8CNTR		/GO CHECK IF IT IS A CONTROL CHAR
	JMP I	XC8ECH		/WAS A CONTROL CHAR - CONTINUE RUNNING
	JMS	XC8TYPE		/NOT A CONTROL CHAR C8PRNT IT
	DCA	INMODE		/CLEAR FLAG THAT CHAR EXPECTED
	TAD	C8CHAR		/GET CHAR IN AC
	JMP I	XC8ECH		/EXIT
C8CHAR,	0
INMODE,	0

/*********************************************************************

/C8TYPE
/THIS ROUTINE WILL C8PRNT ON THE CONSOLE OR THE LPT WITH DEVICE CODE 66.
/
/	C8TYPE=	JMS XC8TYP

/EX.	JMS	XC8TYPE		/C8PRNT THE CHAR IN THE AC.
	/			/RETURN CALL PLUS ONE AC =0000
				/DO NOT CLEAR THE LINK IN THIS ROUTINE NEEDED BYC8OCT

/CALLS USED ARE -C8HANG-XC8CNTR-XC8PNT-XC8CRLF-XC8INQU-


XC8TYP,	0
	DCA	PNTBUF		/STORE CHAR
	TAD	TTYLPT		/CHECK O=TTY 7777=LPT
	SZA CLA
	JMP	XDOLPT		/DO OUT PUT ON LPT
	TAD	PNTBUF
	TLS
	TSF
	JMP	.-1
	TCF
	JMP	C8BY5
XDOLPT,	TAD	PNTBUF		/GET CHAR
	PSTB	PCLF		/C8PRNT IT
	JMS	C8HANG		/CHECK KEYBOARD IF HUNG
	PCLF			/CLEAR THE FLAG
C8BY5,	7600			/CLEAR THE AC
	JMP I	XC8TYP		/EXIT
PNTBUF,	0
TTYLPT,	0


C8HANG,	0
	CLA		/
	TAD	C8BY5		/GET CONSTANT 7600
	DCA	PNTBUF		/PNTBUF IS NOW A COUNTER 
	PSKF			/SKIP ON PRINTER DONE
	SKP			/NOT DONE YET
	JMP I	C8HANG		/SAW FLAG DONE 
	ISZ	C8CONT		/FIRST COUNTER FAST ONE
	JMP	.-4		/CHECK IF FLAG SET YET
	ISZ	PNTBUF		/MADE 4096 COUNTS ON FAST COUNTER
	JMP	.-3		/KEEP IT UP FOR 5 SEC 
	TAD	XC8CNTR		/GET THE RETURN ADDRESS IN CONTROL
	DCA	C8HANG		/SAVE IT IN HANG
	DCA	TTYLPT		/ALLOW PRINTING ON TTY
	JMS	XC8PNT
	MESHANG			/LPT ERROR
	JMS	XC8CRLF
	JMS	XC8INQU		/PRINT WAITING 
	JMP I	C8HANG		/CONTINUE TO SAVE ADDRESS
C8CONT,	0			/COUNTER FOR TIMER
MESHANG,TEXT	"LPT ERROR"

PAGE
/*********************************************************************
/*******************************************************************

/THIS ROUTINE WILL CHECK LOCATION 22 THE HARD WARE CONFIG WORD.
/TO SEE IF THE CONSOLE BIT 3 )400) IS SET IF SET THEN RETURN
/TO CALL PLUS TWO FO A ACTIVE CONSOLR PACKAGE AC=0
/IF NOT SET THEN TO CALL PLUS ONE FOR A DEACTIVE CONSOLE PACKAGE.


CHKCLA,	0
	CLA
	TAD	22		/GET THE COTENTA OF LOCATION 22
	AND	(400		/MASK FOR BIT 3 (400
	SNA CLA			/
	ISZ	CHKCLA		/ACTIVE CONSOLE PACKAGE RETURN
				/CALL PLUS ONE (1) FOR ACTIVE
	JMP I	CHKCLA		/DEACTIVE CONSOLE PACKAGE RETURN
				/CALL PLUS TWO (2)

/C8ERR
/THIS ROUTINE WILL DETERMINE WHAT TO DO WHEN A C8ERR IS ENCOUNTERED
/WILL CHECK IF CLASSIC SYSTEM, WILL CHECK C8SWIT REGISTERS.
/	C8ERR=	JMS XC8ERR
/EX.	JMS	XC8ERR		/GO TO C8ERR CALL IF NOT CONSOL 
/				/RETURN IS CALL PLUS ONE AC =0000

/CALLS USED ARE -CHKCLA-XC8CRLF-XC8SW-XC8INQU-XC8PNT-XC8OCTA-


XC8ERR,	0
	IOF
	DCA	ACSAVE		/SAVE AC
	GTF
	DCA	FLSAVE		/SAVE THE FLAGS
        MQA
        DCA     MQSAVE          /SAVE THE MQ
        CLA CLL CMA             /SUBTRACT A 1 FOR TRUE LOCATION
        TAD     XC8ERR          /GET RETTURN LOCATION
        DCA     PCSAVE          /SAVE ADD OF C8ERR CALL
        JMS     CHKCLA          /CHECK LOC.22 BIT 3 CONSOL BIT
        SKP                     /ACTIVE CONSOLE PACKAGE
        JMP     NTCLAS          /NOT CLASSIC SYSTEM
        JMS     C8GET           /GET THE REGISTERS.
        JMS     XC8SW           /CHECK SWITCH REG FOR BIT THAT INDICATES
                                /NO ERROR MESSAGE
SETUP1, AND     (0000           /MASK FOR BIT FOR NO ERROR PRINTING
                                /IF THIS ERROR MESSAGE IS TO ALWAYS
                                /BE PRINTED LEAVE AND VALUE AT 0000
        SZA CLA                 /SKIP IF BIT IS 0 PRINT ERROR MESSAGE
        JMP     C8DO10          /DO NOT PRINT
        JMS     XC8CRLF
        JMS     XC8PNT
        ERRMES                  /PRINT THE ERROR MESSAGE
        JMS     XC8PNT
        MESPC                   /PRINT THE PC STSTEMENT
        TAD     PCSAVE
        JMS     XC8OCTA         /CONVERT 4 DIGIT PC TO ASCII
        JMS     XC8PNT
        MESAC                   /PRINT THE AC MESS
        TAD     ACSAVE
        JMS     XC8OCTA
        JMS     XC8PNT
        MESMQ                   /PRINT MQ
        TAD     MQSAVE
        JMS     XC8OCTA
        JMS     XC8PNT
        MESFL                   /PRINT FL
        TAD     FLSAVE
        JMS     XC8OCTA
        JMS     XC8CRLF
C8DO10, JMS     C8GET           /GET THE REGISTERS.
        JMS     XC8SW           /CHECK SWITCH REGISTER
        SKP CLA                 /SKIP IF BIT 0 SET
        JMP     C8BY2           /LEAVE
        JMS     XC8INQ          /GO TO THE INQUIRE ROUTINE
        JMP     C8BY2           /LEAVE
NTCLAS, JMS     C8GET           /GET THE REGISTERS.
        JMS     XC8SW           /CHECK PSEUDO SWITCH REGISTER
                                /CHECK THE C8SWIT REGISTER
        SKP CLA                 /SKIP IF HALT
        JMP I   XC8ERR          /NO HALT CONTINUE
        TAD     (7402           /CODE FOR HLT
        DCA I   PCSAVE          /PUT IT IN CALL LOC.
        JMS     C8GET
        JMP I   PCSAVE          /EXIT  TO CALL AND HALT
C8BY2,  JMS     C8GET           /GET THE REGISTERS
        JMP I   XC8ERR
ERRMES, TEXT    "DHRKDD  FAILED "
MESPC,  TEXT    "  PC:"
MESAC,  TEXT    "  AC:"
MESMQ,  TEXT    "  MQ:"
MESFL,  TEXT    "  FL:"
PCSAVE, 7777
ACSAVE, 7777
MQSAVE, 7777
FLSAVE, 7777

        $$$
/#8
/#8