software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape5 / RKLFMT.PA
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape5/RKLFMT.PA b/sw/os8/v3d/sources/system/dectapes/dectape5/RKLFMT.PA
new file mode 100644 (file)
index 0000000..64bba85
--- /dev/null
@@ -0,0 +1,2012 @@
+/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.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/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
+\f      JMP     NEXFRM                  /DO NEXT DISK
+/
+/ROUTINE TO CHECK ADDRESSING INFORMATION ON THE DISK.
+\f/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
+\f      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
+\f      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
+\f      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
+\f      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
+/*********************************************************************
+\f
+
+/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
+\f      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
+\f/
+/      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
+\f        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