IDENT 1MT,PRS
PERIPH
BASE MIXED
SST
*COMMENT 1MT - PPU MAGNETIC TAPE EXECUTIVE.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE 1MT - PPU MAGNETIC TAPE EXECUTIVE.
SPACE 4,10
*** 1MT - PPU MAGNETIC TAPE EXECUTIVE.
* R. E. TATE. 73/01/09.
* D. D. SADLER. 74/05/01. (MTS)
* L. C. HAAS. 77/07/15. (BLOCK - ID)
* R. J. PRIEVE. 77/07/15. (ATS)
* C. D. ROWE. 92/02/03. (CTS)
SPACE 4,10
*** 1MT - PROCESSES VARIOUS TAPE FUNCTIONS FOR *MAGNET*,
* THE CPU MAGNETIC TAPE EXECUTIVE.
SPACE 4,10
*** CALL FORMAT.
*
* NORMAL CALL -
*
*T, IR 18/ *1MT*,6/0,12/ 0,12/ CH,12/ CSTA
*
* CH TAPE CHANNEL NUMBER.
* CSTA CST ADDRESS.
*
* MAGNET INITIALIZATION CALL -
*
*T IR 18/ *1MT*,6/0,12/1,24/ ADDR
*
* ADDR STATUS WORD ADDRESS.
*
* STATUS WORD FORMAT -
*
*T 1/A,47/0,12/ IFL
*
* A *1MT* ACTIVE (CLEARED UPON COMPLETION).
* IFL INITIALIZATION FLAGS.
* 1 = *MAGNET* INITIALIZATION.
* 3 = LEVEL 3 RECOVERY.
SPACE 4,10
*** ERROR MESSAGES.
*
* NOTE - MESSAGES ARE ISSUED TO THE ERROR LOG IN THE FORM OF A
* 3 CHARACTER MNEMONIC. THESE MNEMONICS ARE LISTED IN
* PARENTHESES.
*
* *ERASE LIMIT.* (ERA)
*
* THIS MESSAGE IS POSTED IF, (A) IN *PE* OR *GCR*
* MODE, IF THE CURRENT BLOCK COULD NOT BE RE-WRITTEN PROPERLY
* AFTER FORTY ERASURES, (APPROXIMATELY 15 FEET OF
* TAPE), OR (B) IN *NRZI* MODE, THAT THE CURRENT BLOCK
* COULD NOT BE RE-WRITTEN DUE TO RECEIVING PARITY ERROR(S)
* AFTER FORTY ATTEMPTS TO ERASE A SINGLE AREA ON TAPE.
*
*
* *MARGINALLY WRITTEN TAPE.* (MWT)
*
* THIS MESSAGE IS POSTED IF SOME OR ALL OF THE PREVIOUS GOOD
* BLOCKS USED TO CREATE THE RECOVERY BLOCK ID WINDOW CANNOT BE
* READ WITH ERROR CORRECTION ENABLED DURING REPOSITIONING OF
* THE TAPE FOR WRITE RECOVERY.
*
*
* *POSITION LOST.* (PLO)
*
* THIS MESSAGE IS POSTED IF, (A) A BLOCK ID MIS-MATCH
* OCCURS OR, (B) IF THE BLOCK ID WINDOW IS ALL ONES IT
* INDICATES THAT A NOS TERMINATOR LABEL MIS-MATCH HAS
* OCCURRED. IN EITHER CASE, THE POSITION ON THE TAPE CANNOT
* BE ESTABLISHED AND THE JOB MUST BE TERMINATED.
*
*
* *READ ID BURST FAILURE.* (BFR)
*
* THIS MESSAGE IS ISSUED TO THE *E,P* DISPLAY IN THE FORM *READ
* ID BURST* TO INDICATE THAT THE P.E. OR G.C.R. SPECIAL
* CHARACTERS TO BE READ BY THE SUBSYSTEM AT LOAD POINT IS NOT
* POSSIBLE.
*
* WHEN THIS MESSAGE APPEARS, THE FOLLOWING ACTIONS SHOULD BE
* TAKEN.
*
* THE OPERATOR SHOULD DISMOUNT THE MAGNETIC TAPE FROM THE
* UNIT IN QUESTION, CLEAN THE HEAD ASSEMBLY, AND REMOUNT THE
* MAGNETIC TAPE. THE OPERATOR SHOULD THEN ENTER *RETRY,EST.*.
* THE SYSTEM WILL THEN RETRY THE ORIGINAL OPERATION FROM LOAD
* POINT. IF NO ERRORS OCCUR, THE JOB WILL CONTINUE NORMAL
* PROCESSING. IF THE ORIGINAL PROBLEM PERSISTS, THE MESSAGE
* *READ ID BURST* WILL AGAIN BE ISSUED TO THE *E,P* DISPLAY.
* THIS TIME THE OPERATOR OR C.E. SHOULD BE INSTRUCTED TO
* ENTER *TERMINATE,EST.* TO ABORT THE OPERATION. THE
* MESSAGE, *READ ID BURST FAILURE*, WILL APPEAR IN THE
* DAYFILE.
*
*
* *REPOSITION CORRECTED ERROR.* (RCE)
*
* THIS ERROR LOG MESSAGE IS USED TO ALERT THE C.E. TO
* THE FACT THAT THE TRANSPORT IS WRITING IN A MARGINAL
* STATE. THIS MESSAGE IS INTENDED TO PREVENT THE GENERATION
* OF MARGINAL TAPE BY THE SUBSYSTEM AND IT-S DEVICES. THIS
* MESSAGE IS TO BE CONSIDERED A MARGINAL DRIVE INDICATOR
* (MDI) BY THE C.E. AND APPROPRIATE ACTION SHOULD BE TAKEN
* IMMEDIATELY.
*
*
* *TAPE CLEANER FAULT.* (TCF)
*
* DRIVER DETECTED FAILURE (TRANSPORT ASSIGNED TO JOB) -
*
* THIS MESSAGE IS ISSUED TO THE *E,P* DISPLAY IN THE
* FORM *CLEANER FAULT* TO INDICATE THAT THE TAPE CLEANER
* WAS NOT IN THE STOWED POSITION AFTER A *LOAD* OR A
* *REWIND*. THE DRIVER HAS ALREADY UNLOADED THE TRANSPORT
* AND THE ASSIGNED JOB IS LOOPING WAITING FOR TRANSPORT TO
* COME *READY* AGAIN AND FOR *RETRY,EST.* TO BE ENTERED AT
* THE CONSOLE. IF CORRECTIVE ACTION IS NOT POSSIBLE, THE
* OPERATOR OR C.E. SHOULD ENTER *TERMINATE,EST.* TO
* ABORT THE OPERATION. THE MESSAGE, *TAPE CLEANER
* FAULT*, WILL APPEAR IN THE DAYFILE.
*
* SCANNER DETECTED FAILURE (TRANSPORT UNASSIGNED) -
*
* SINCE NO JOB HAS BEEN ASSIGNED TO THE TRANSPORT AT THIS
* POINT, CORRECTIVE ACTION CAN BE INITIATED ON THE FAILING
* UNIT BY CONTACTING A C.E. AND MOVING THE TAPE REEL TO
* ANOTHER UNASSIGNED TRANSPORT. SINCE THE JOB WAS NEVER
* ASSIGNED TO THE FAILING TRANSPORT, THIS UNASSIGNED
* TRANSPORT CAN ASSUME THE DUTIES ORIGINALLY INTENDED FOR
* THE FAILING DEVICE. IF NO OTHER TRANSPORT IS AVAILABLE,
* AND CORRECTIVE ACTION IS POSSIBLE, AND COMPLETED, THE
* TRANSPORT CAN BE RELOADED AND THE JOB SHOULD PROCESS AS
* IF NO TAPE CLEANER FAULT EVER OCCURRED.
*
*
* *WRITE ID BURST FAILURE.* (BFW)
*
* THIS MESSAGE IS ISSUED TO THE *E,P* DISPLAY IN THE FORM
* *WRITE ID BURST* TO INDICATE THAT THE P.E. OR G.C.R. SPECIAL
* CHARACTERS TO BE READ BY THE SUBSYSTEM AT LOAD POINT IS NOT
* POSSIBLE.
*
* WHEN THIS MESSAGE APPEARS, THE FOLLOWING ACTIONS SHOULD
* BE TAKEN.
*
* THE OPERATOR SHOULD DISMOUNT THE MAGNETIC TAPE FROM THE
* UNIT IN QUESTION, CLEAN THE HEAD ASSEMBLY, AND REMOUNT THE
* MAGNETIC TAPE. THE OPERATOR SHOULD THEN ENTER *RETRY,EST.*.
* THE SYSTEM WILL THEN RETRY THE ORIGINAL OPERATION FROM LOAD
* POINT. IF NO ERRORS OCCUR, THE JOB WILL CONTINUE NORMAL
* PROCESSING. IF THE ORIGINAL PROBLEM PERSISTS, THE MESSAGE
* *WRITE ID BURST* WILL AGAIN BE ISSUED TO THE *E,P* DISPLAY.
* THIS TIME THE OPERATOR OR C.E. SHOULD BE INSTRUCTED TO
* DISMOUNT AND REPLACE THE MAGNETIC TAPE REEL.
*
* WHEN THE NEW REPLACEMENT REEL OF TAPE IS MOUNTED ON THE
* TRANSPORT AND THE UNIT GOES *READY* AND *RETRY,EST.* HAS
* BEEN ENTERED AT THE CONSOLE, THE LABELS FROM THE DISREGARDED
* REEL ARE WRITTEN ON THIS NEW REEL IF LABELED TAPE. IN
* ANY CASE, THE EXTERNAL REEL IDENTIFICATION LABEL MUST BE
* TRANSFERRED TO THE REPLACEMENT REEL. THE EXTERNAL REEL
* IDENTIFICATION LABEL ON THE ORIGINAL DEFECTIVE REEL MUST BE
* REMOVED TO PREVENT DUPLICATE REEL NUMBERS.
*
* IF THE ORIGINAL PROBLEM HAS BEEN OVERCOME, PROCESSING WILL
* CONTINUE AS NORMAL. IF THE PROBLEM PERSISTS, THE OPERATOR
* OR C.E. SHOULD BE INSTRUCTED TO ENTER *TERMINATE,EST.* TO
* ABORT THE OPERATION. THE MESSAGE, *WRITE ID BURST
* FAILURE*, WILL APPEAR IN THE DAYFILE.
*
*
* *WRITE VERIFY FAILURE.* (WVF)
*
* THIS MESSAGE IS POSTED IF THE TAPE WAS POSITIONED PROPERLY
* AND THE BLOCK ID OF THE WINDOW COULD BE READ CORRECTLY, BUT
* THE GAP AND CURRENT BLOCK CANNOT BE READ.
SPACE 4,10
*** DEFINITIONS AND ABBREVIATIONS.
*
* THE FOLLOWING ARE TERMS THAT WILL BE USED THROUGHOUT
* THIS ROUTINE.
*
* BID BLOCK ID.
*
* BOT BEGINNING OF TAPE.
*
* CHUNK THIS DEFINES THE PORTION OF A BLOCK HANDLED BY EACH
* PPU DURING LONG BLOCK OPERATIONS.
*
* CTS CARTRIDGE TAPE SUBSYSTEM.
*
* EOT END OF TAPE.
*
* LGB LAST GOOD BLOCK.
*
* PCL PROGRAMMABLE CLIPPING LEVEL.
*
* TM TAPE MARK.
*
* SNB SYSTEM NOISE BYTE.
*
* UBC UNUSED BIT COUNT. AS USED TO DEFINE THE EXACT NUMBER
* OF BYTES AND FRAMES TO BE WRITTEN ON OR READ FROM
* TAPE.
*
* UDT UNIT DESCRIPTOR TABLE. THE AREA OF *MAGNET,S*
* FIELD LENGTH WHICH CONTAINS THE INFORMATION DESCRIBING
* EACH TAPE UNIT AND THE CHARACTERISTICS OF THE TAPE
* BEING PROCESSED.
*
* EXPLICIT PROCESSOR. DEFINES A CASE WHERE CERTAIN
* UNITS CAN ONLY BE SERVICED BY CERTAIN COPIES
* 0F *1MT* DUE TO CONFIGURATION RESTRICTIONS.
SPACE 4,10
*** PROGRAMMING CONSIDERATIONS.
*
* IN ORDER TO CONSERVE SPACE, THIS PROGRAM OVERLAYS ITSELF
* EXTENSIVELY. IT IS DESIGNED TO MAKE MAXIMUM USE OF AREAS
* THAT ARE NORMALLY SACRED SUCH AS THE 5 BYTE HEADER
* ON PPU ROUTINES, FOR EXAMPLE. PLEASE TAKE DUE CARE
* WHEN ATTEMPTING MODIFICATIONS.
*
* READ/WRITE OVERLAY GROUPS MUST BE IN THE FOLLOWING ORDER -
* MAIN PROCCESOR.
* LONG BLOCK PROCESSOR.
* LABEL PROCESSOR.
* ERROR PROCESSOR MUST BE LAST.
*
* REMEMBER WHEN READING/WRITING DIRECTLY FROM/TO THE UDT TO BE
* SURE THAT *1MT* IS AT *MAGNET,S* CONTROL POINT.
*
* NOTE THE OVERLAY NAMES OF THE FOLLOWING OVERLAYS ARE HARD
* CODED INTO EXECUTE MACROS. *LOV* CANNOT BE USED TO LOAD
* THESE OVERLAYS BECAUSE THE CHANNEL MAY NOT BE RESERVED
* OR CHANNEL PROBLEMS OCCURRED WHICH MUST BE DIAGNOSED
* BEFORE ATTEMPTING MORE FUNCTIONS.
* 3MA - INITIALIZE TAPE EXECUTIVE.
* 3MB - FUNCTION REJECT PROCESSOR (ALL EXCEPT CTS).
* 3MD - ATS/MTS SPECIAL MESSAGE PROCESSOR.
*
* USE THE CROSS REFERENCE TABLES WHEN TAGS ARE SHUFFLED.
* IN PARTICULAR THE TAGS IN READ/WRITE ARE REFERENCED BY LONG
* BLOCK OVERLAYS AT SEVERAL PLACES.
SPACE 4,10
*** RESIDENCY RECOMMENDATIONS.
*
* THE FOLLOWING IS A SUGGESTED ORDER OF PRIORITY FOR MAKING
* ROUTINES CM OR ALTERNATE LIBRARY RESIDENCE.
*
* 1) CONTROL POINT/CODED PRESET.
* 2) READ FUNCTION PROCESSOR.
* 3) WRITE FUNCTION PROCESSOR.
* 4) DROP PPU PROCESSOR.
* 5) 1MT ITSELF.
* 6) *3MB* IF RECOVERY FROM FUNCTION REJECTS DESIRED.
SPACE 4,10
*** DOCUMENTATION CONVENTIONS.
*
* TAG CONVENTIONS.
* ASSUME A ROUTINE NAMED *ABC*.
* *ABCA* - *ABCZ* WOULD BE CONSTANTS AND INSTRUCTIONS MODIFIED
* *.EABC* WOULD BE FOR LOCATIONS REFERENCED BY THE ERROR
* PROCESSOR.
*
* THE TERM *ATS-TYPE CONTROLLER* MEANS AN ATS, FSC, CMTS OR
* ISMT CONTROLLER. IF IT IS NECESSARY TO DISTINGUISH BETWEEN
* THESE FOUR TYPES, IT WILL BE EXPLICITLY DOCUMENTED.
SPACE 4,10
** MISCELLANEOUS SYMBOL DEFINITIONS.
*CALL COMPMAC
*CALL COMSDFS
*CALL COMSMSC
SPACE 4,10
** MICRO DEFINITIONS.
VERNUM MICRO 6,3,+"VER170"+
SPACE 4,10
** CCC FUNCTION CODES FOR CTS.
F0001 EQU 0001 RELEASE UNIT
F0002 EQU 0002 CONTINUE
F0010 EQU 0010 REWIND
F0110 EQU 0110 REWIND/UNLOAD
F0012 EQU 0012 GENERAL STATUS
F0013 EQU 0013 FORESPACE BLOCK
F0016 EQU 0016 LOCATE BLOCK
F0113 EQU 0113 BACKSPACE BLOCK
F0112 EQU 0112 DETAILED STATUS
F0212 EQU 0212 READ BLOCK ID
F0312 EQU 0312 READ BUFFERED LOG
F0020 EQU 0020 CONNECT
F0220 EQU 0220 CONNECT AND SELECT DATA COMPRESSION
F0040 EQU 0040 READ FORWARD
F0140 EQU 0140 READ REVERSE
F0050 EQU 0050 WRITE
F0250 EQU 0250 SHORT WRITE
F0051 EQU 0051 WRITE TAPE MARK
F0414 EQU 0414 AUTOLOAD
SPACE 4,10
** TRACE CODE FOR CTS.
TE EQU 0 = 1 TO ENABLE TRACE BUFFER
SPACE 4,10
** CCC ERROR CODES FOR CTS.
CE001 EQU 1 TRANSPORT NOT ON-LINE
CE007 EQU 7 DENSITY MARK/BLOCK ID READ FAILURE
CE012 EQU 12 WRITE ERROR AT LOAD POINT
CE032 EQU 32 DRIVE BUSY
CE033 EQU 33 CONTROL UNIT BUSY
CE051 EQU 51 NO TAPE UNIT CONNECTED
SPACE 4,10
** ERPA CODES FOR CTS.
ER33 EQU 0#33 LOAD FAILURE
SPACE 4,10
** ASSEMBLY CONSTANTS.
QUAL$ EQU 1 DEFINE UNQUALIFIED COMMON DECKS
BUFC EQU 2765 BUFFER CONTROL WORD
BUF EQU BUFC+5 FWA DATA BUFFER
BUFL EQU BUF+5000 CONTROL WORD FOR LEVEL NUMBER
LBBY EQU 3600 LONG BLOCK BYTES PER INPUT
BUFB EQU 3750 SEE NOTE
LICH EQU 12 LI FULL CHUNK COUNT
LIRW EQU 400 LI REMAINDER IN WORDS
CH EQU TC TAPE CHANNEL
ERLA EQU 7775-2*500 ERROR PROCESSOR LOAD ADDRESS
ERLB EQU 7775-1*500 SPECIAL ERROR PROCESSOR LOAD ADDRESS
BLKS EQU 40 BLOCKS TO TRANSFER BEFORE REQUEST SWITCH
BLKX EQU 3776 BLOCKS TO TRANSFER BEFORE SWITCH (ISMT)
BLKC EQU 100 BLOCKS TO TRANSFER BEFORE SWITCH (CTS)
SBLK EQU 400 BLOCKS TO SKIP BEFORE CHECKING ERROR FLAG
LABL EQU 80D/2 LABEL LENGTH IN BYTES
CLBL EQU 81D*8D/12D MAXIMUM LENGTH OF ANY LABEL BLOCK (CTS)
LABW EQU 80D/2/5 CM WORDS IN LABEL
SLBY EQU 2400 SKIP LI FORMAT BYTES PER INPUT
ERAL EQU 45D ERASE LIMIT SET TO 15 FEET
BCKS EQU 3 NUMBER OF BYTES TO CHECKSUM (POWER OF 2)
LCKS EQU 5000 LENGTH TO USE IN CHECKSUM OF LONG BLOCKS
MXBS EQU 76 MAXIMUM NUMBER OF CONSECUTIVE BACKSPACES
ERRPL MXBS-100 MAXIMUM NUMBER OF BACKSPACES TOO LARGE
* NOTE BUFB IS BUFFER FOR LONG BLOCK READS AND WRITES
* AND ALSO THE ORIGIN ADDRESS FOR READ AND WRITE
* ERROR PROCESSING. INCREASING IT,S VALUE WILL
* INCREASE THE ALLOWABLE SIZE OF THE READ AND WRITE
* LONG BLOCK OVERLAYS AND DECREASE THE MAXIMUM
* LENGTH OF THE ERROR PROCESSORS.
SPACE 4,10
** COMMON DECKS.
*CALL COMPCHI
QUAL COMSCIO
*CALL COMSCIO
QUAL *
QUAL CPS
*CALL COMSCPS
QUAL *
QUAL EJT
*CALL COMSEJT
QUAL *
QUAL EVT
*CALL COMSEVT
QUAL *
*CALL COMSPIM
QUAL SRU
MT$ SET 1 ONLY ASSEMBLE MT INCREMENTS
*CALL COMSSRU
QUAL *
QUAL SSD
*CALL COMSSSD
QUAL *
*CALL COMSZOL
LIST X
QUAL MTX
*CALL COMSMTX
QUAL *
LIST *
SPACE 4,10
**** DIRECT LOCATION ASSIGNMENTS.
LOC 16
T8 BSS 1 TEMPORARY
T9 BSS 1 TEMPORARY
ED BSS 1 EQUIPMENT DESCRIPTION
HP BSS 1 HARDWARE PARAMETERS
EO BSS 1 EST ORDINAL
ES BSS 1 EXTENDED STATUS
DS BSS 1 DEVICE STATUS
EI BSS 1 ERROR ITERATIONS
WP BSS 1 BID WINDOW POINTER (MTS/ATS)
BL BSS 2 BLOCK COUNT
UP BSS 1 USER OPTIONS, FLAGS
LG BSS 2 LENGTH OF LAST GOOD RECORD
EP BSS 2 ERROR PARAMETERS
EC BSS 1 ERROR CODE
* THE FOLLOWING FIVE CELLS ARE NOT WRITTEN BACK TO THE UDT ON
* REQUEST COMPLETION BECAUSE SOME OVERLAYS USE *WC* AND *OV* AS
* LOCAL CELLS.
LT BSS 1 LABEL TYPE, DEVICE TYPE, REQUESTED DENSITY
SP BSS 1 SOFTWARE OPTIONS
FM BSS 1 TAPE FORMAT AND NOISE BYTE DEFINITION
WC BSS 1 CM WORDS PER PRU
OV BSS 1 CHUNK COUNT - LONG BLOCKS
BSS 1 RESERVED
TB BSS 1 BLOCK TYPE (READ)
CF BSS 1 CHANNEL FLAGS
* 13 - 10 = RESERVED
* 7, 6 = 00 - ISMT CONTROLLER
* = 01 - ATS/CMTS/FSC CONTROLLER
* = 10 - MTS CONTROLLER
* = 11 - CTS CONTROLLER
* 5 - 1 = RESERVED
* 0 = 64 CHARACTER SET FLAG
BSS 1 RESERVED
RS BSS 1 RETURN STATUS
FN BSS 1 FUNCTION NUMBER
MD BSS 1 DRIVER MODE FUNCTION
PA BSS 1 PARAMETER
PB BSS 1 PARAMETER
BSS 2 (RA AND FL)
SC BSS 1 SCRATCH
BT BSS 1 BLOCKS TRANSFERRED/OVERLAY ENTRY ADDRESS
BY BSS 1 BYTES TO BE PROCESSED
CN BSS 5 CM BUFFER
DF BSS 1 DROP OUT FLAG (SEE CDO)
LOC *O
****
TITLE GENERAL USAGE MACROS.
BUFFER SPACE 4,10
** BUFFER - CHECK FOR BUFFER OVERFLOW.
*
* BUFFER B
* B IF DEFINED MEANS CHECK FOR LONG BLOCK BUFFER (BUFB),
* INSTEAD OF *BUF*.
PURGMAC BUFFER
BUFFER MACRO B
MACREF BUFFER
USE BUFFER
IFC EQ,*B**,4
LIST M
ERRNG BUFC-* OVERFLOWED INTO BUFFER
LIST *
ELSE 3
LIST M
ERRNG BUFB-* OVERFLOWED INTO BUFFER
LIST *
ENDM
CALL SPACE 4,10
** CALL - LOAD AND ENTER OVERLAY AT DEFINED ENTRY POINT.
*
*
* CALL EPR
* ENTRY *EPR* = DESIRED ENTRY POINT AS DEFINED BY ENTRY MACRO.
PURGMAC CALL
CALL MACRO EPR
MACREF CALL
LDN EPR/10000
RJM LOV
ENDM
C6364 SPACE 4,10
** C6463 - GENERATE TABLE FOR MODIFICATION OF CONVERSION TABLES
* FROM 64 TO 63 CHARACTER SET.
*
* C6463 MAC,CH,P
* ENTRY *MAC* = MACRO TO BE CALLED TO GENERATE CHARACTERS.
* *CH* = CHARACTER.
* *P* = IF DEFINED, 1 ADDRESS BYTE AND 2 MODIFICATION
* BYTES WILL BE GENERATED AND PLACED IN A SEPARATE TABLE.
C6463 MACRO A,B,P
LOCAL C,D
C BSS 0
LOC *O
D BSS 0
LOC C
IFC EQ,*P**
C63 RMT
CON D-1
A B
C63 RMT
ELSE
C63P RMT
CON D-2
A B
C63P RMT
ENDIF
ENDM
ENTRY SPACE 4,10
** ENTRY - DEFINE OVERLAY ENTRY POINT.
*
*
* ENTRY NAME
* ENTRY *NAME* = NAME OF ENTRY ADDRESS.
PURGMAC ENTRY
ENTRY MACRO NAME
MACREF ENTRY
QUAL
NAME EQU *+1R".MA"*10000
QUAL ".QNAM"
ENDM
ERROVL SPACE 4,10
** ERROVL - TEST FOR OVERFLOW INTO ERROR PROCESSOR.
*
* ERROVL A
* A IF DEFINED USE INSTEAD OF ORIGIN ADDRESS FOR OVERFLOW.
PURGMAC ERROVL
ERROVL MACRO A
MACREF ERROVL
IFC NE,/A//
LIST M
ERRNG ERLA-A OVERFLOWED INTO BUFFER
LIST *
ELSE
LIST M
ERRNG ERLA-* OVERFLOWED INTO BUFFER
LIST *
ENDIF
ENDM
JMP SPACE 4,10
** JMP - THREADED JUMP.
*
*
* JMP ADDR
* ENTRY *ADDR* = JUMP ADDRESS.
JMP MACRO ADDR
IF -DEF,.ADDR,1
.ADDR MAX ADDR,*-40
IFGT .ADDR,*-40
UJN .ADDR
.ADDR SET *-1
ELSE 2
.ADDR SET *
LJM ADDR
ENDM
SADT SPACE 4,35
** SADT - SET ADDRESS TABLE MACRO.
* THIS MACRO WILL GENERATE THE TABLE ENTRIES NECESSARY TO
* PROVIDE SETTING ADDRESSES IN THE FOLLOWING 24 BIT
* INSTRUCTION. ONE, TWO, OR THREE SETS OF TABLE ENTRIES
* ARE GENERATED DEPENDING ON THE VALUE OF *.IM*. THE FIRST
* SET OF TABLE ENTRIES IS FOR THE CURRENT OVERLAY. THE ONE OR
* TWO ADDITIONAL ONES WILL BE GENERATED BASED ON THE FOLLOWING-
*
* IF .IM .NE. 0, A SET OF TABLE ENTRIES IS GENERATED FOR THE
* ERROR PROCESSORS THAT FOLLOW.
*
* IF .IM = 2, A SET OF ADDRESSES IS GENERATED FOR THE LONG
* BLOCK ROUTINE THAT FOLLOWS.
*
*SADT MACRO DC,C,BIAS,ABS,SE
*
* DC = DIRECT CELLS WHERE 17 BIT ADDRESS VALUE IS TO BE TAKEN
* FROM.
* CF = IF *C* COMPLEMENT RESULT OF ABOVE.
* BIAS = VALUE TO BE ADDED TO CONTENTS OF DIRECT CELLS.
* (MAXIMUM VALUE IS 7)
* ABS = IF *A* ADD RA TO ADDRESS.
* SE = IF PRESENT, GENERATE ONLY ONE SET OF TABLE ENTRIES.
*
* TABLE FORMAT.
* 2 WORDS PER ENTRY.
*
*T 11/ ADDRESS,1/C,6/ DC,3/ BI,1/A,2/
* C COMPLEMENT IF SET.
* DC POINTER TO DIRECT CELL CONTAINING VALUE.
* BI BIAS (AMOUNT TO ADD TO VALUE FROM DIRECT CELLS).
* A ABSOLUTE FLAG.
SADT MACRO DC,CF,BIAS,ABS,SE
LOCAL Z,X
QUAL
Z BSS 0
ERRNG 3777-Z ADDRESS TOO LARGE FOR MODIFICATION TABLE
QUAL ".QNAM"
X BSS 0
SADT RMT
VFD 11/X
IFC EQ,*CF*C*,2
VFD 1/1 COMPLEMENT FLAG
ELSE 3
VFD 1/0
IFC NE,*CF**,1
ERR INCORRECT COMPLEMENT FLAG
VFD 6/DC
VFD 3/BIAS
IFC EQ,*ABS*A*,2
VFD 1/1
ELSE 3
VFD 1/0
IFC NE,*ABS**,1
ERR INCORRECT ABSOLUTE FLAG
VFD 2/0
RMT
.L1 IFEQ .IM,2
SLBP RMT
VFD 11/Z
.L2 IFC EQ,*CF*C*
VFD 1/1 COMPLEMENT FLAG
.L2 ELSE
VFD 1/0
.L2 ENDIF
VFD 6/DC
VFD 3/BIAS
.L3 IFC EQ,*ABS*A*
VFD 1/1
.L3 ELSE
VFD 1/0
.L3 ENDIF
VFD 2/0
RMT
.L1 ENDIF
.S1 IFNE .IM,0
.S6 IFC EQ,$SE$$
* MAKE ERROR OVERLAY TABLE.
ERRNG BUFB-Z ADDRESS OVERFLOWS ERROR OVERLAY
SERR RMT
VFD 11/Z
.S2 IFC EQ,*CF*C*
VFD 1/1 COMPLEMENT FLAG
.S2 ELSE
VFD 1/0
.S2 ENDIF
VFD 6/DC
VFD 3/BIAS
.S3 IFC EQ,*ABS*A*
VFD 1/1
.S3 ELSE
VFD 1/0
.S3 ENDIF
VFD 2/0
RMT
* MAKE MTS ERROR OVERLAY TABLE.
SMER RMT
VFD 11/Z
.S4 IFC EQ,*CF*C*
VFD 1/1
.S4 ELSE
VFD 1/0
.S4 ENDIF
VFD 6/DC
VFD 3/BIAS
.S5 IFC EQ,*ABS*A*
VFD 1/1
.S5 ELSE
VFD 1/0
.S5 ENDIF
VFD 2/0
RMT
.S6 ENDIF
.S1 ENDIF
ENDM
SPACE 4,10
** THE FOLLOWING CONSTANTS ARE USED IN CALLING THE INSTRUCTION
* MODIFICATION MACRO TO DEFINE THE RELATIVE ADDRESS WHERE THE
* VALUES WILL BE SET.
LOC T2
.FT BSS 2 FIRST
.LM BSS 2 LIMIT
.FE BSS 2 FET ADDRESS
.LF BSS 2 LIMIT - FIRST
.BS BSS 2 BLOCK SIZE
LOC *O
TSAD SPACE 4,10
** TSAD - DEFINE SET ADDRESS TABLE.
* TABLE IS TERMINATED BY A 0 WORD.
*
*
*LOC TSAD B
* ENTRY *LOC* = FWA OF SET ADDRESS TABLE.
* *B* = IF PRESENT NAME OF REMOTE CODE.
MACRO TSAD,A,B
A BSS 0
SADT HERE
IFC NE,*B**,1
B HERE
CON 0 TERMINATE TABLE
ENDM
TITLE OVERLAY COMMUNICATION MACROS.
* OVERLAY CONTROL.
.NA SET 0
ADNAM SPACE 4,10
** ADNAM - ADVANCE OVERLAY NAME MACRO.
* ADVANCES OVERLAY NAME.
PURGMAC ADNAM
ADNAM MACRO
.NA SET .NA+1
.MA MICRO .NA,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.OA MICRO 1,3, 3M".MA"
ENDM
OVERLAY SPACE 4,15
** OVERLAY - GENERATE OVERLAY CONSTANTS.
*
* NOTE AT PRESET TIME IN AN OVERLAY THE UNIT MAY OR MAY
* NOT BE CONNECTED DEPENDING ON WHETHER THE CHANNEL
* IS DEDICATED. THUS, NO CHANNEL OPERATIONS CAN BE DONE
* IN PRESET. ALSO ABNORMAL ERROR EXITS MUST BE DONE
* BY FIRST COMPLETING THE OVERLAY LOAD. FOR EXAMPLE
* SEE THE BEGINNING OF PRESET IN THE WRITE OVERLAY.
*
* OVERLAY (TEXT),LDA,PRS,QN
* ENTRY *TEXT* = TEXT OF SUBTITLE.
* *LDA* = LOAD ADDRESS. (IF ABSENT ASSUMES *OVL*.
* *PRS* = IF PRESENT DO NOT GENERATE CALL TO *PRS*.
* *QN* = QUALIFIER NAME. (OVERLAY NAME IF ABSENT.)
PURGMAC OVERLAY
OVERLAY MACRO TEXT,LDA,P,QN
LOCAL A
USE OVERLAY
QUAL
ADNAM ADVANCE OVERLAY NAME
IFC NE,*QN**,3
.QNAM MICRO 1,, QN
QUAL QN
ELSE 2
.QNAM MICRO 1,, ".OA"
QUAL ".OA"
TTL 1MT/".OA" - TEXT
TITLE
LOAD MICRO 1,3,*OVL*
IFC NE,*LDA**,1
LOAD MICRO 1,,*LDA*
IDENT ".OA","LOAD" TEXT
*COMMENT 1MT - TEXT
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
ORG "LOAD"
IFC EQ,*P**
PRSX LJM *
LJM PRS
ENDIF
.IM SET 0 DESELECT ERROR PROCESSOR INSTRUCTION LIST
ENDM
SPACE 4,10
** MAKE SURE THAT 1MT SYMBOL *LBBY* IS 5 TIMES GREATER
* THAN COMSMTX SYMBOL *LBWD*.
ASCK EQU /MTX/LBWD*5
ERRNZ ASCK-LBBY IF LONG BLOCK DEFINITIONS OUT OF SYNC
TITLE MAIN PROGRAM.
1MT SPACE 4,10
** 1MT - MAIN PROGRAM.
ORG PPFW
PRS LJM /PRESET/PRS PRESET MAIN PROGRAM
RET EQU PRS
RET SPACE 4,10
** RET - STANDARD RETURN POINTS.
*
* CALLS CEC, UAD.
* RET - SET FET COMPLETE. (A) = FET COMPETION CODE.
*RET RJM CEC SET FET COMPLETE (SETUP IN PRESET)
* RET1 - NORMAL COMPLETION.
RET1 LDN /MTX/NCP
UJN RET5 RETURN NORMAL COMPLETION STATUS
* RET2 - REQUEUE.
RET2 LDN 0
UJN RET5 REQUEUE REQUEST
* RET3 - RETURN WITH ERROR. (A) = ERROR CODE.
RET3 STD EC
* RET4 - RETURN WITH ERROR. (EC) = ERROR CODE.
RET4 LDN /MTX/ERR
* UJN RET5 RETURN ERROR STATUS
* RET5 - RETURN. (A) = COMPLETION STATUS.
RET5 STD RS
LDN 0 DO NOT SET FET COMPLETE
RJM CEC CHANGE TO MAGNET CP
LDN /MTX/UERC-/MTX/UST5+1 SET WORD COUNT FOR WRITE
STD T2
RJM UAD SET UDT ADDRESS
ADN /MTX/UST5
CWM DNCV,T2
SBN -/MTX/UST1+/MTX/UERC+1
CWM ED,TR
SBN -/MTX/UXRQ+/MTX/UST1+3
CWD RS
* LJM PNR PROCESS NEXT REQUEST
TITLE PROCESS NEXT REQUEST.
PNR SPACE 4,10
** PNR - PROCESS NEXT REQUEST.
*
* ENTRY (BT) = 0.
*
* CALLS CDO, CON, *CPP*, *DPP*, EXR, LOV, PIC, REL, UAD.
*
* MACROS CALL, MONITOR.
PNR RJM CDO CHECK DROP OUT CONDITIONS
PNR1 LDN PPAL CHECK PPU AVAILABILITY
CRD CM
LDN /MTX/UNITL UPDATE UDT ADDRESS
PNR2 RAM UADA
LMC * (LWA+1 OF UDT)
PNRA EQU *-1
NJN PNR3 IF NOT END OF UDT
LDC -* - LENGTH OF UDT
PNRB EQU *-1
UJN PNR2 RECYCLE THROUGH UDT,S
* REENTRY FROM ERROR ON CTS UNIT RELEASE.
PNR3 RJM REL RELEASE LAST RESERVED UNIT
LDD CM+4
PNRC EQU *-1
* LDN 0 (FORCE DROP OUT)
ZJN PNR5 IF ALL PP-S IN USE
LDM UADA
LMC * (STARTING UDT ADDRESS)
PNRD EQU *-1
NJN PNR4 IF NOT END OF A PASS
PNRE LDN 0
ZJN PNR5 IF NO ACTIVITIES PERFORMED
SOM PNRE RESET ACTIVITY COUNT
PNR4 LDD DF
ZJN PNR6 IF NO DROP OUT
* ENTER HERE (VIA *RJM*) TO HANG PP.
HNG CON 0 ENTRY
* MONITOR HNGM HANG PP
* ENTER HERE TO DROP PPU.
PNR5 CALL DPP DROP PPU
* PROCESS UNIT. (A) = 0.
* ENTRY MADE HERE FROM PRS.
* IF DROP OUT FORCED THE FOLLOWING CODE UP TO THE START OF
* RESIDENT SUBROUTINES MAY BE OVERLAID.
*
* FIRST 30D BYTES ARE USED FOR FUNCTION REJECT PARAMETERS.
.OVLR BSS 0 OVERLAY RESIDENT ADDRESS
PNR6 STD RS INDICATE NO FUNCTION FOR ERROR PROCESSING
RJM UAD SET UNIT CONNECT INFORMATION
ADN /MTX/UST1
CRD ED
ADK /MTX/UVRI-/MTX/UST1 GET ASSIGNED EJT ORDINAL
CRD CN
SFA EST,EO
ADK EQDE
CRD CM
LDD CM
LPN 3
LMN /CPS/DWES
ZJN PNR9 IF UNIT DOWN
LDD CM+1 CHECK PRIMARY CHANNEL
CHTE *+1
LMC CH+4000
ZJN PNR8 IF UNIT ACCESSIBLE
PNRF UJN PNR7 CHECK SECONDARY CHANNEL
* SHN 21-12 (CTS UNIT)
PJN PNR11 IF PRIMARY CHANNEL NOT DOWN
PNR7 LDD CM+2 CHECK SECONDARY CHANNEL
CHTE *+1
LMC CH+4000
NJN PNR11 IF UNIT NOT ACCESSIBLE
PNR8 RJM CON CONNECT UNIT
PNRG EQU *-1
* RJM PIC (CTS)
PNR9 ZJN PNR12 IF NOT CONNECTED
SFA EJT,CN
ADK JSNE
CRD CM
LDD ED CLEAR JOB ROLLED OUT
SCN 1
STD ED
LDD CM+4
LPC 176
LMN /EJT/EXJS*2
ZJN PNR10 IF JOB EXECUTING OR UNIT NOT ASSIGNED
AOD ED SET JOB ROLLED OUT
PNR10 RJM UAD
ADK /MTX/UXRQ GET REQUEST
CRD RS
ADK /MTX/UST1-/MTX/UXRQ UPDATE UNIT STATUS AND JOB STATUS
CWD ED
LDD RS
PNR11 NJN PNR13 IF REQUEST ALREADY IN PROGRESS OR COMPLETE
LDD FN
PNR12 ZJN PNR13 IF NO REQUEST
LPN 77
SBN /MTX/MDFN
PJN PNR13 IF NOT *1MT* REQUEST
LDM UADA SET UDT ADDRESS
STD CM+1
LDD DS SET BUSY STATUS
STD CM+2
MONITOR TDRM SET REQUEST IN PROGRESS
LDD CM+4
NJN PNR14 IF REQUEST IN PROGRESS SET
PNR13 LJM PNR1 PROCESS NEXT REQUEST
* CAUTION - THE FOLLOWING CODE DESTROYS SC, BT, AND BY.
* SC AND BT SHOULD NOT BE REUSED UNTIL AFTER *CPP* PRESET.
PNR14 LDD MA GET FUNCTION TABLE ENTRY
CRD SC
ADN 1 GET *ASCM* PARAMETERS
CRD CN
RJM UAD GET UDT INFORMATION
ADK /MTX/UXRQ
CRD RS
ADK /MTX/UCIB-/MTX/UXRQ
CRM CIOE,ON
ADK /MTX/UST2-/MTX/UCIB-1
CRM EI,TR
ADK /MTX/UST5-/MTX/UST4-1
CRM DNCV,ON
ADK /MTX/UERC-/MTX/UST5-1
CRM ECNT,ON
PNRH SBN /MTX/UERC-/MTX/UDS4+1
* UJN PNR15 (CTS UNIT)
CRM MTSF,TR
PNR15 LDD OA SET *ASCM* PARAMETERS FOR *EXR* CALL
CWD CN
LDN ZERL CLEAR ADDRESS MODIFICATION LIST
CRD CN
LDD SC LOAD OVERLAY
SHN -6
RJM LOV
LDD SC
LPN 17
ZJN PNR16 IF NO SECOND OVERLAY
SHN 6
ADM NAME LOAD OVERLAY
SHN -6
RJM LOV
PNR16 CALL CPP LOAD SPECIAL PROCESSOR AND ENTER ROUTINE
PNRI BSS 0 USED TO DETECT IF *CPP* CALLED FROM HERE
TITLE RESIDENT SUBROUTINES.
CDO SPACE 4,10
** CDO - CHECK DROP OUT CONDITIONS.
* CHECKS MOVE FLAG, ROLLOUT FLAG, BLOCKS TRANSFERRED,
* AND CHANNEL REQUESTED.
*
* EXIT (A) = (DF) = 0, IF NO DROP OUT NEEDED.
*
* USES CM - CM+4.
CDO1 LDN 1 SET DROP OUT
CDO2 STD DF
CDO SUBR ENTRY/EXIT
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
ZJN CDO1 IF MOVE FLAG
LDD CP CHECK ROLLOUT FLAG
ADN STSW
CRD CM
LDD CM+2
LPN 1
NJN CDO1 IF ROLLOUT FLAG
LDD BT
LPC 3777
ADC -BLKS
CDOC EQU *-1
* ADC -BLKX (FOR ISMT)
* ADC -BLKC (FOR CTS)
PJN CDO1 IF MAXIMUM BLOCKS TRANSFERRED
CDOA LDC ** CHECK IF CHANNEL REQUESTED
CRD CM
CDOB LDD CM+**
SHN -13
UJN CDO2 STORE DROP OUT FLAG
CEC SPACE 4,10
** CEC - CHANGE TO MAGNET CONTROL POINT.
*
* ENTRY (A) = FET COMPLETION STATUS.
*
* EXIT (BT) = 0.
* (CP) = RESTORED TO MAGNET,S CP ADDRESS.
*
* USES BT, CM+1 - CM+4, CN - CN+4.
*
* MACROS MONITOR.
CEC SUBR ENTRY/EXIT
STD CM+4 SAVE FET COMPLETION STATUS
SHN -14
LMC ** INCLUDE SRU INCREMENT VALUE
CECA EQU *-1
STD CM+3
CECB LDN 0
ZJN CEC2 IF AT MAGNET CP
SOM CECB CLEAR CP CHANGED FLAG
CEC1 LDD OA CHECK FOR PENDING *DRCM* FUNCTION
CRD CN
LDD CN
NJN CEC1 IF FUNCTION PENDING
LDM UADA SET *UDT* ADDRESS
STD CM+1
LDD BT SET BLOCKS TRANSFERRED
STD CM+2
MONITOR TIOM CHANGE TO MAGNET CONTROL POINT
* LDN 0
CEC2 STD BT CLEAR BLOCKS TRANSFERRED FOR *CDO* CHECK
UJN CECX RETURN
LOV SPACE 4,10
** LOV - LOAD OVERLAY.
*
* ENTRY (A) = THIRD CHARACTER OF OVERLAY NAME.
* *ASCM* FUNCTION PARAMETERS IN OUTPUT REGISTER IF PLD
* ALREADY SEARCHED.
*
* USES T5, CM - CM+4.
*
* CALLS EXR.
LOV SUBR ENTRY/EXIT
STD T5 SAVE OVERLAY NAME
LOV1 LDD OA CHECK FOR PENDING FUNCTION
CRD CM
LDD CM
SBN ASCM+1
ERRNZ ASCM-1
PJN LOV1 IF FUNCTION PENDING
LDD T5 LOAD OVERLAY
LMC 2L3M
RJM EXR
UJN LOVX RETURN
MCH SPACE 4,10
** MCH - MODIFY CHANNELS.
*
* ENTRY (A) = ADDRESS OF CHANNEL TABLE.
*
* USES T1, T2.
MCH1 STD T2
MCHB LDN 0 (PRESET TO PROPER INCREMENT/DECREMENT)
RAI T2
AOD T1
MCH2 LDI T1
NJN MCH1 IF MORE CHANNELS TO MODIFY
MCH SUBR ENTRY/EXIT
MCHA STD T1
* UJN MCHX (PRS - NO CHANNEL MODIFICATION REQUIRED)
UJN MCH2 MODIFY CHANNEL INSTRUCTIONS
REL SPACE 4,10
** REL - RELEASE UNIT.
*
* ENTRY (RELA) .NE. 0, UNIT CONNECTED.
*
* CALLS FCN.
REL SUBR ENTRY/EXIT
LDC 0
RELA EQU *-1
ZJN RELX IF NO UNIT CONNECTED
LDN F0001 RELEASE UNIT
RJM FCN
STM RELA CLEAR CONNECTED FLAG
UJN RELX RETURN
ITM SPACE 4,10
** ITM - INITIATE TAPE MOTION.
*
* ENTRY (ITMA) = TAPE MOTION FUNCTION.
*
* EXIT WITH CHANNEL ACTIVE.
*
* CALLS FCN.
ITM SUBR ENTRY/EXIT
LDC F0040 READ FORWARD
* LDC F0140 READ BACKWARD
* LDC F0050 WRITE EVEN FRAME COUNT (MTS)/WRITE (ATS)
* LDC F0250 WRITE ODD FRAME COUNT/SHORT WRITE
ITMA EQU *-1
RJM FCN
ACN CH
UJN ITMX RETURN
UAD SPACE 4,10
** UAD - UNIT DESCRIPTOR TABLE ADDRESS.
*
* ENTRY (UADA) = CURRENT UDT ADDRESS.
*
* EXIT (A) = UDT ABSOLUTE ADDRESS.
UAD SUBR ENTRY/EXIT
LDD RA
SHN 6
ADC 0 UDT ADDRESS
UADA EQU *-1
UJN UADX RETURN
SPACE 4,10
** COMMON DECKS.
EJT$ EQU 1 ASSEMBLE EJT CODE
IFP$ EQU 1 SET REMOTE INITIALIZATION
*CALL COMPGFP
TITLE EQUIPMENT PROCESSING SUBROUTINES.
ERR SPACE 4,10
** ERR - ERROR PROCESSOR.
*
* FOR CTS THIS ROUTINE AND THE REMAINING ROUTINES IN *1MT*
* ARE OVERLAYED WITH CODE BEGINNING AT */PRESET/CEP*.
*
* (A) = ERROR CODE IF NOT CALLED FROM MAIN PROGRAM.
*
* CALLS *EMM*, MCC.
*
* MACROS CALL.
ERR CON 0
RJM MCC MASTER CLEAR CHANNEL
CALL EMM LOAD ERROR PROCESSING OVERLAY
.EERR BSS 0
FCN SPACE 4,15
** FCN - PROCESS FUNCTION.
*
* ENTRY (A) = FUNCTION.
*
* EXIT (A) = 0.
* (FCND) = FUNCTION ISSUED.
*
* USES T6.
*
* CALLS STC, *3MB*.
*
* MACROS EXECUTE.
FCN SUBR ENTRY/EXIT
ADC 0 ADD EQUIPMENT NUMBER
FCNA EQU *-1
FAN CH FUNCTION EQUIPMENT
STM FCND SAVE FUNCTION
RJM STC STATUS CHANNEL
ZJN FCNX IF NO REJECT
FCN1 STD T6 INITIALIZE *3MB* RESIDENCE FLAG
* CON 0 (ERROR ALREADY ENCOUNTERED)
FCNC EQU *-1
EXECUTE 3MB CALL FUNCTION REJECT PROCESSOR
FCND CON 0 FUNCTION ISSUED
MCC SPACE 4,10
** MCC - MASTER CLEAR MTS/ATS CHANNEL.
* DISCONNECT CHANNEL AND ISSUE STOP TAPE MOTION FUNCTION.
*
* ENTRY (A) = ERROR CODE.
*
* EXIT (A) = 0.
* (EC) = ERROR CODE.
*
* CALLS FCN.
MCC SUBR ENTRY/EXIT
STD EC SAVE ERROR CODE
DCN CH+40
MCCA LDN 11 STOP TAPE MOTION
* UJN MCCX (PROCESSING FATAL FUNCTION REJECT)
RJM FCN
UJN MCCX RETURN
TITLE MTS/ATS CONTROLLER DEPENDENT SUBROUTINES.
CON SPACE 4,15
** CON - PERFORM INITIAL CONNECT.
*
* ENTRY (CM+4) = BYTE 4 OF EST ENTRY *EQDE* WORD.
* (CN) = EJT ORDINAL OF ASSIGNED JOB.
*
* EXIT (A) = 0 IF UNIT RESERVED.
* (A) .NE. 0 IF UNIT CONNECTED.
* (CN) = EJT ORDINAL OF ASSIGNED JOB.
*
* ERROR EXIT TO *FCN1* IF CONNECT REJECT.
*
* USES EC.
*
* CALLS ERR, FCN, STW, UAD.
CON6 AOM RELA SET CONNECTED FLAG
CON SUBR ENTRY/EXIT
RJM UAD
ADK /MTX/UDS1 READ DETAILED STATUS
CRM MTDS,TR
LDD CM+4 SET UNIT AND EQUIPMENT
LPC 7017
LMN 20 MERGE IN FUNCTION
FAN CH ISSUE FUNCTION
CONA LDC 60 SET DELAY
* LDC 144 (2X PPU SPEED)
* LDC 300 (4X PPU SPEED)
* LDC 777777 (NOT MTS)
CON1 IJM CON2,CH IF FUNCTION ACCEPTED
SBN 1
NJN CON1 IF NOT TIMEOUT
DCN CH+40
CON2 LDN 0 STATUS DEVICE
RJM STW
.ECUI BSS 0
SHN 21-13
CON3 PJN CON6 IF CONNECTED
LDM MTDS CHECK RESERVE STATUS
LPN 77
CONB ZJN CON4 IF NOT POSSIBLE UNIT RESERVE ERROR
* ZJN CON5 (ATS CONTROLLER)
LMN 2
ZJN CONX IF UNIT RESERVED
CON4 LDN /MTX/CRJ CONNECT REJECT
STD EC
LJM //FCN1 PROCESS CONNECT REJECT
* IF A UNIT CHECK OCCURS WITH NO ERROR CODE IN *MTDS*
* BITS 0 - 6, THE UNIT IS CONNECTED. THE UNIT CHECK
* ERRORS (OTHER THAN LOAD CHECK) ARE IGNORED HERE BUT
* DETECTED BY *SED* FUNCTION.
CON5 RJM FCN CLEAR TRANSITORY ERRORS
LDM ATUS+1
LPN 1
ZJN CON3 IF NOT LOAD CHECK ERROR
LDN /MTX/LCH ISSUE *LOAD CHECK* MESSAGE
RJM ERR PROCESS ERROR
CUI SPACE 4,15
** CUI - FORMAT UNIT AND/OR PERFORM NON-INITIAL CONNECT.
*
* ERROR EXIT TO *CON4* IF CONNECT REJECT.
*
* USES T7.
*
* CALLS FCN, STW.
CUI3 AOM RELA SET CONNECTED FLAG
CUI SUBR ENTRY/EXIT
CUI1 LDN 30 ISSUE FORMAT UNIT FUNCTION
* LDN 4 (ATS UNIT)
CUIB EQU *-1
RJM FCN
ACN CH
CUIC LDN 2 OUTPUT PARAMETERS
* LDN 3 (ATS UNIT)
OAM MTSF,CH
FJM *,CH WAIT FOR PARAMETERS TO BE TAKEN
DCN CH+40
LDN 0 STATUS DEVICE
RJM STW
SHN 21-13
PJN CUI3 IF GOOD CONNECT
CUIE UJN CUI2 MTS UNIT
* LDM MTDS (ATS UNIT)
CON MTDS
LPN 77
ZJN CUI3 IF NOT CONNECT ERROR
CUI2 LJM CON4 PROCESS CONNECT REJECT
DTS SPACE 4,10
** DTS - GET MTS/ATS DETAILED STATUS AND ATS UNIT STATUS.
*
* CALLS FCN.
DTS1 LDN 6 INPUT UNIT STATUS
IAM ATUS,CH
DTS SUBR ENTRY/EXIT
LDC 112
RJM FCN ISSUE STATUS FUNCTION
ACN CH
LDN 10
IAM MTDS,CH
DTSA UJN DTSX RETURN
* UJN DTS1 (ATS CONTROLLER)
STC SPACE 4,10
** STC - STATUS CHANNEL.
*
* EXIT (A) = 0 IF NO FUNCTION REJECT.
* = 1 IF FUNCTION REJECT.
* (STCB) = (A).
*
* USES T0.
STC2 SHN -21
STM STCB
STC SUBR ENTRY/EXIT
STCA LDN 77 PRESET TIMEOUT
* LDN 6 (MTS CONTROLLER)
* LDN 20 (ISMT CONTROLLER)
STD T0
STC1 IJM STC2,CH IF FUNCTION ACCEPTED
ADN 1
PJN STC1 CONTINUE WAIT
SOD T0
PJN STC1 IF NOT TIMEOUT
DCN CH+40
UJN STC2 EXIT
STCB CON 0 CHANNEL STATUS
STW SPACE 4,15
** STW - STATUS AND WAIT COMPLETION.
*
* ENTRY (A) = 0 IF WAIT END OF OPERATION.
* = 2 IF WAIT NOT BUSY.
*
* EXIT (UBWB) = BYTE 2 OF GENERAL STATUS (BLOCK ID).
* (A) = (DS) = GENERAL STATUS.
*
* USES DS, T1.
*
* CALLS DTS, ERR, FCN.
STW4 IAN CH+40
STD DS SAVE STATUS
IAN CH+40
STM UBWB SAVE BID
UJN STW4.1 DISCONNECT CHANNEL
* LDN 2 (READ/WRITE IN PROGRESS)
STWE EQU *-1
IAM MTDS,CH READ SINGLE TRACK CORRECTION STATUS
STW4.1 DCN CH+40
LDD DS
SHN 21-13
PJN STW5 IF NO ALERT
RJM DTS READ DETAILED STATUS
STW5 LDD DS CHECK FOR READY
LPC 0 WAIT END OF OPERATION
* LPC 2 (WAIT FOR NOT BUSY)
STWD EQU *-1
NJN STW3 WAIT COMPLETION
LDD DS
STW SUBR ENTRY/EXIT
STM STWD SET STATUS MASK
LCN 0 SET EOP DELAY LIMIT
STD T1
STW1 LDN 12 ISSUE STATUS FUNCTION
RJM FCN
ACN CH
LDN 6 DELAY FOR EOP
* LDN 14 (2X PPU SPEED)
* LDN 30 (4X PPU SPEED)
STWA EQU *-1
STW2 FJM STW4,CH IF EOP
SBN 1
NJN STW2 IF NOT TIME OUT
DCN CH+40
STW3 SOD T1
NJN STW1 IF NOT END OF EOP DELAY
LDN /MTX/WEO
RJM ERR PROCESS ERROR
* RJM WFC2 (EXIT DURING BACKSPACE)
* RJM WNB2 (EXIT DURING CONTROLLED BACKSPACE)
* LJM /READ/MRD5 (NO EOP ON INITIAL LABEL CHECK)
STWC EQU *-1
UBW SPACE 4,10
** UBW - UPDATE BLOCK ID WINDOW.
*
* ENTRY CORRECT ROUTINE LOADED FOR FORWARD OR REVERSE.
* (UBWB) = BID BYTE TO ENTER IN WINDOW.
* (WP) = POINTS TO LAST GOOD BID BYTE.
*
* EXIT (WP) UPDATED.
* (UBWB) ENTERED IN WINDOW.
UBW SUBR ENTRY/EXIT
UBWA BSS 0 START OF OVERLAID AREA
AOD WP
LPN 7
STD WP
LDM UBWB
STM BIDW,WP
UBWAL EQU *-UBWA LENGTH OF OVERLAID AREA
UJN UBWX RETURN
UBWB CON 4 CURRENT BLOCK ID
WEO SPACE 4,10
** WEO - WAIT END OF OPERATION.
*
* ENTRY (WEOA) = STATUS MASK.
* (WEOB) = COMPLETION STATUS TO BE EXPECTED.
*
* EXIT (A, 11 - 0) = DEVICE STATUS MASKED AND ORED.
*
* CALLS STW.
WEO1 LPC 4435 READ TO END OF REEL
* LPC 4425 READ LABELS
* LPC 4635 WRITE TO END OF REEL
* LPC 4625 WRITE LABELS
WEOA EQU *-1
LMC 1 READ
* LMC 201 WRITE
WEOB EQU *-1
WEO SUBR ENTRY/EXIT
LDN 0
RJM STW STATUS DEVICE
UJN WEO1 EXIT
BSS 6 PAD FOR CTS CHANNEL ROUTINES
DNCV EQU * DENSITY AND CONVERSION MODE
ERSC EQU DNCV+1 ERROR SUB-CODE
MTDS EQU DNCV+5 DETAILED STATUS
CTSD EQU MTDS CTS DETAILED STATUS
ATUS EQU MTDS+10 ATS UNIT STATUS
MTSF EQU MTDS+3*5 UNIT FORMAT PARAMETERS
BIDW EQU MTDS+4*5 BLOCK ID WINDOW
CTGS EQU CTSD+34 CTS GENERAL STATUS WORD 2
ECNT EQU DNCV+7*5 CORRECTED ERROR COUNTERS
SPACE 4,10
USE OVERLAY
CIOE EQU ECNT+5 CIO EXTERNAL REQUESTS
FETO EQU CIOE+1 FET OPTIONS FROM FIRST BYTE 1
LNUM EQU FETO+1 LEVEL NUMBER FROM/FOR FET
OVL EQU LNUM+1+5 MAIN OVERLAY LOAD ADDRESS
STER EQU OVL-5 STATUS WHEN ERROR DETECTED
NAME EQU OVL-4 NAME OF OVERLAY LOADED
BNEU EQU NAME UPPER 2 BLOCK LENGTH DIGITS (LI FORMAT)
BNEI EQU OVL-3 BLOCK SEQUENCE INFORMATION (3 WORDS)
PRS TITLE PRESET STORAGE.
PRS SPACE 4,10
** PRS - PRESET PROGRAM.
*
* CALLS IFP, MCH, *3MA*.
*
* MACROS DCHAN, EXECUTE, RCHAN.
QUAL PRESET
PRS RJM IFP INITIALIZE *COMPGFP*
LDD IR+2
ZJN PRS1 IF NORMAL CALL
EXECUTE 3MA INITIALIZE MAGNET
* SET UDT ACCESS, CONTROLLER TYPE, AND CHARACTER SET.
PRS1 LDC RJMI SET PROGRAM RETURN
STM //RET
LDC //CEC
STM //RET+1
LDD RA GET UNIT DESCRIPTOR TABLE POINTERS
SHN 6
ADN /MTX/UBUF
CRD CM
ADK -/MTX/UBUF
ADD IR+4
ADK /MTX/CPST GET PROCESSOR STATUS
CRD CN
LDD CM+2 SET LWA+1 OF UDT
STM PNRA
SBD CM+4 SET LENGTH OF UDT
LMC -0
STM PNRB
LDD CM+4 SET FWA OF UDT
STM PNRD
LDD CN+4 SET STARTING UDT ADDRESS
STM UADA
LDD CN+3 SET CONTROLLER TYPE
LPC 300
STD CF
SHN -6
STD T8
LDN IPRL SET 63/64 CHARACTER SET FLAG
CRD CM
LDD CM+2
LPN 1
RAD CF
* PRESET CHANNEL ACCESS.
LDC CHTP GET FWA CHANNEL INTERLOCK TABLE
CRD CM
LDD CM+2
SHN 14
ADD CM+3
SBN 1
STM CDOA+1
SHN -14
RAM CDOA
LDD IR+3 SET CHANNEL
STD T4
SBN CH
NJN PRS2 IF CHANNEL MODIFICATION NEEDED
LDM PRSA DISABLE MODIFICATION
STM MCHA
UJN PRS4 SEARCH CHANNEL TABLE
PRS2 PJN PRS3 IF INCREMENT TO ASSEMBLED IN CHANNEL
LMC -0
ADC LCNI-LDNI
PRS3 RAM MCHB
LDC TCHS MODIFY CHANNELS
RJM MCH
PRS4 AOM CDOA+1 ADVANCE CHANNEL TABLE ADDRESS
SHN -14
RAM CDOA
LCN 5
RAD T4
PJN PRS4 IF NOT CORRECT WORD
ADN 5 SET CORRECT BYTE IN CHANNEL TABLE
RAM CDOB
* PRESET CTS CONTROLLER.
LDD T8
LMN 3
NJN PRS6 IF NOT CTS CONTROLLER
LDK CCRL-1
STD T1 LENGTH OF CODE TO MOVE
PRS5 LDM .CEP,T1
STM ERR,T1
SOD T1
PJN PRS5 IF MORE CODE TO MOVE
LDC CCRA
RJM MCH MODIFY CHANNEL INSTRUCTIONS
LDC SHNI+21-12
STM PNRF SET PRIMARY CHANNEL STATUS CHECK
LDC PIC
STM PNRG ENTRY TO INITIAL CONNECT
LDC UJNI+PNR15-PNRH SKIP READ OF MTS/ATS UNIT PARAMETERS
STM PNRH
LJM PRS8 REQUEST CHANNEL
* PRESET MTS OR ATS CONTROLLER.
PRS6 LDD CN+3 SET EQUIPMENT CONTROLLER NUMBER
LPC 7000
STM FCNA
LDM PRSG,T8
STM STCA SET FUNCTION TIMEOUT DELAY
LDM DLYA
LPN 14
ZJN PRS7 IF 1X PPU SPEED
SHN -2
STD T1 SET PP SPEED INDEX
LDM PRSD-1,T1 INCREASE WAIT EOP DELAY
STM STWA
LDM PRSF-1,T1 INCREASE DELAY AFTER CONNECT
STM CONA+1
PRS7 LDD T8
LMN 2
ZJN PRS8 IF MTS CONTROLLER
* PRESET ATS CONTROLLER.
ERRNG CONB-CON5+37
LDN CON5-CON4
RAM CONB
LDM PRSC
STM DTSA
LDC LDNI+4
STM CUIB
LDC LDMI
STM CUIE
AOM CUIC
LCN 0 INCREASE CONNECT DELAY
STM CONA+1
LPN 77
RAM CONA
* REQUEST CHANNEL AND ENTER MAIN PROGRAM.
CHTE *+1
PRS8 LDC CH+4000 REQUEST REPLY IF CHANNEL DOWN
RCHAN REQUEST CHANNEL
LDD CM+1
SHN 21-13
PJN PRS9 IF CHANNEL NOT DOWN
LDD CN
LPC 3777 CLEAR *1MT* ACTIVE
STD CN
LDN ZERL
CRD CM
LDD RA
SHN 6
ADD IR+4
ADK /MTX/CPST UPDATE *1MT* STATUS
CWD CN
ADK /MTX/CUAC-/MTX/CPST CLEAR ALL UNIT ACCESS FLAGS
CWD CM
MONITOR DPPM DROP PP
LJM PPR EXIT TO PP RESIDENT
PRS9 IJM PRS10,CH IF CHANNEL NOT ACTIVE
DCN CH+40
PRS10 LDN 0
STD DF PRESET DROP OUT FLAG
LJM PNR6 RETURN TO PROCESS UNIT
PRSA BSS 0
LOC MCHA
UJN MCHX RETURN
LOC *O
PRSC BSS 0
LOC DTSA
UJN DTS1 INPUT UNIT STATUS
LOC *O
PRSD BSS 0 WAIT EOP DELAY
LOC 1
CON LDNI+30 4X PPU SPEED
CON LDNI+14 2X PPU SPEED
LOC *O
PRSF BSS 0 DELAY AFTER CONNECT
LOC 1
CON 300 4X PPU SPEED
CON 144 2X PPU SPEED
LOC *O
PRSG BSS 0 FUNCTION TIMEOUT DELAY
LDN 20 ISMT
LDN 77 ATS
LDN 6 MTS
SPACE 4,10
** *COMPGFP* REMOTE CODE.
IFP HERE
SPACE 4,10
** CHANNEL TABLE.
TCHS CHTB
CEP SPACE 4,15
** CEP - CTS ERROR PROCESSOR.
*
* ENTRY (A) = ERROR CODE.
*
* EXIT TO *CCP*.
*
* MACROS CALL.
* THIS IS THE START OF CTS ROUTINES THAT ARE MOVED BY PRESET
* TO *ERR*.
.CEP BSS 0
LOC ERR
CEP CON 0 ENTRY
ERRNZ CEP-ERR IF ENTRY POINTS NOT THE SAME
STD EC SAVE ERROR CODE
CALL CCP CTS CHANNEL ERROR PROCESSOR (NO RETURN)
ICF SPACE 4,10
** ICF - ISSUE CCC/CTS FUNCTION.
*
* ENTRY (A) = FUNCTION.
*
* EXIT (A) = 0.
* (ICFA) = THE FUNCTION THAT WAS ISSUED.
* TO *ERR* IF FUNCTION REJECT.
ICF2 LDN 0
BSSZ FCNX-* TO KEEP ENTRY POINTS THE SAME
ICF SUBR ENTRY/EXIT
DCN CH+40 ENSURE CHANNEL IS INACTIVE
STM ICFA SAVE FUNCTION
FAN CH ISSUE THE FUNCTION
LDN 17 TIMEOUT 4 SECONDS ON ALL FUNCTIONS
STD T0
ICF0 LCN 0
ICF1 IJM ICF2,CH IF FUNCTION REPLY RECEIVED
SBN 1
NJN ICF1 IF TIMEOUT NOT EXPIRED
SOD T0
NJN ICF0 IF TIMEOUT NOT EXPIRED
LDN /MTX/FRJ FUNCTION REJECT
RJM ERR SAVE ERROR CODE (NO RETURN)
ICFA CON 0 FUNCTION ISSUED
PIC SPACE 4,15
** PIC - PERFORM INITIAL CTS CONNECT.
*
* ENTRY (CM+4) = BYTE 4 OF EST ENTRY *EQDE* WORD.
* (CN) = EJT ORDINAL OF ASSIGNED JOB.
*
* EXIT (A) .NE. 0 IF UNIT CONNECTED.
* (A) .EQ. 0 IF CONTROL UNIT BUSY.
* (CN) = EJT ORDINAL OF ASSIGNED JOB.
*
* USES T2.
*
* CALLS CCU, UAD.
PIC SUBR ENTRY/EXIT
LDN 6
STD T2
RJM UAD
ADK /MTX/UDS1 READ DETAILED STATUS
CRM CTSD,T2
LDN 0
STM PICA
LDC LDNI+F0002 SEND CONTINUE IF COMMAND RETRY
STM /PRESET/GPSC
LDD CM+4 SET UNIT NUMBER
LPN 17
LMN F0020
STM CCUA
RJM CCU CONNECT CTS UNIT
UJN PICX RETURN
PICA DATA 0 IF 0, LOCATE BLOCK NOT NECESSARY
CCU SPACE 4,10
** CCU - CONNECT CTS UNIT.
*
* ENTRY (CCUA) = CONNECT FUNCTION CODE AND UNIT NUMBER.
*
* EXIT (A) = 0 IF UNIT RESERVED TO ANOTHER CONTROLLER.
* TO *CEP* IF CONNECT REJECT.
*
* CALLS GPS, ICF.
CCU3 AOM RELA SET CONNECTED FLAG
CCU SUBR ENTRY/EXIT
LDC F0020
* LDC F0220 (COMPRESSION MODE SELECTED)
CCUA EQU *-1 (CONNECT UNIT FUNCTION CODE)
RJM ICF ISSUE CTS FUNCTION
CCU1 LDN 0 WAIT FOR END OF OPERATION
RJM GPS GET AND PROCESS GENERAL STATUS
MJN CCU1 IF COMMAND RETRY
SHN 21-13
PJN CCU3 IF ALERT NOT SET
LDM CTGS GENERAL STATUS WORD 2
SHN 21-13
PJN CCU3 IF NOT CCC ERROR CODE
SHN 13-21
LPC 177
SBN CE001
ZJN CCU2 IF CONNECT REJECT
SBN CE032-CE001
ZJN CCUX IF DRIVE BUSY OR RESERVED
SBN CE033-CE032
ZJN CCUX IF CONTROL UNIT BUSY
SBN CE051-CE033
NJN CCU3 IF NOT CONNECT REJECT
CCU2 LDN /MTX/CRJ CONNECT REJECT
RJM CEP REPORT ERROR (NO RETURN)
GPS SPACE 4,15
** GPS - GET AND PROCESS GENERAL STATUS.
* THIS ROUTINE WAITS UP TO 3.5 MINUTES FOR END OF OPERATION.
* IF RETRY IS SET, IT WAITS UP TO 18 MINUTES FOR THE CONTINUE
* BIT TO SET. IT IS ASSUMED THAT THE CONTROLLER HAS A
* MAXIMUM NUMBER OF COMMAND RETRIES ALLOWED.
*
* ENTRY (A) = 0 IF WAIT FOR END OF OPERATION.
* (A) = 2 IF WAIT NOT BUSY.
*
* EXIT (A) = (DS) = GENERAL STATUS.
* (A) .LE. 0 IF CONTINUE ISSUED.
* TO *ERR* IF TIMEOUT OR CHANNEL MALFUNCTION.
* (CTGS) = GENERAL STATUS WORD 2 IF ALERT SET.
* (CTSD-CTSD+25) = DETAILED STATUS IF ALERT SET.
*
* USES T1, T2.
*
* CALLS ICF.
GPS10 DCN CH+40
LDD DS
LPC 0 WAIT END OF OPERATION
GPSB EQU *-1
* LPC 2 WAIT NOT BUSY
NJN GPS5 IF NOT COMPLETE
LDD DS
GPS SUBR ENTRY/EXIT
STM GPSB
LDK 960D OUTER LOOP TIMER
STD T2
GPS1 LCN 0 INNER LOOP TIMER
STD T1
GPS2 LDN F0012 GENERAL STATUS
RJM ICF ISSUE CTS FUNCTION
ACN CH
LDN 12
GPS3 FJM GPS6,CH IF GENERAL STATUS RECEIVED
GPS4 SBN 1
NJN GPS3 IF NOT TIMEOUT
GPS5 SOD T1
NJN GPS2 IF NOT TIMEOUT FOR INNER LOOP
SOD T2
NJN GPS1 IF NOT TIMEOUT FOR OUTER LOOP
LDN /MTX/WEO END OF OPERATION TIMEOUT
RJM ERR PROCESS ERROR (NO RETURN)
GPS6 IAN CH
STD DS SAVE GENERAL STATUS WORD 1
SFM GPS9,CH IF CHANNEL PARITY ERROR
LDD DS
SHN 21-13
PJP GPS10 IF ALERT NOT SET
SHN 21-12-21+13
PJN GPS7 IF NOT COMMAND RETRY
LDN F0002 CONTINUE
GPSC EQU *-1
* UJN GPS6.1 (WRITE)
RJM ICF ISSUE CTS FUNCTION
GPS6.1 LCN 0
UJP GPSX RETURN
GPS7 SHN 21-6-21+12
PJN GPS8 IF NOT RETRY IN PROGRESS
LDK 460D
SBN 1
NJN *-1 IF 230 MICROSECOND DELAY NOT COMPLETE
UJP GPS5 CHECK FOR INNER LOOP TIMEOUT
GPS8 LDN 1
IAM CTGS,CH READ GENERAL STATUS WORD 2
NJN GPS9 IF STATUS WORD NOT RECEIVED
LDC F0112 DETAILED STATUS
RJM ICF ISSUE CTS FUNCTION
ACN CH
LDN 26D
IAM CTSD,CH
NJN GPS9 IF NOT ALL WORDS RECEIVED
CFM GPS10,CH IF NO CHANNEL ERROR
GPS9 LDN /MTX/CMF CHANNEL MALFUNCTION
GPS9.1 RJM ERR PROCESS ERROR (NO RETURN)
RBI SPACE 4,10
** RBI - READ BLOCK ID.
*
* EXIT (BIDW+1, BIDW+2) = CURRENT BLOCK ID.
* TO *ERR* IF ERROR.
*
* USES T3.
*
* CALLS GPS, ICF.
RBI SUBR ENTRY/EXIT
LDC F0212 READ BLOCK ID
RJM ICF ISSUE CTS FUNCTION
RBI1 ACN CH
LDN 10
IAM BIDW,CH INPUT BLOCK ID INFORMATION
STD T3 WORDS NOT TRANSFERRED
LDN 0 WAIT FOR END OF OPERATION
RJM GPS GET AND PROCESS GENERAL STATUS
MJN RBI1 IF COMMAND RETRY
SHN 21-13
MJN RBI2 IF ALERT SET
LDD T3
ZJN RBIX IF ALL WORDS TRANSFERRED
UJN GPS9 REPORT CHANNEL MALFUNCTION
RBI2 LDN /MTX/STE STATUS ERROR
UJN GPS9.1 REPORT ERROR
RCU SPACE 4,15
** RCU - RECONNECT UNIT.
*
* RELOADING THE CCC BREAKS THE HARDWARE RESERVE TO THE UNIT
* MAKING A RECONNECT NECESSARY. IN A DUAL ACCESS CONFIGURATION
* THE DRIVE COULD BE RESERVED, SO RETRIES ARE NECESSARY. IF
* THE DRIVE IS STILL RESERVED AFTER ALL RETRIES, THE CALLING
* ROUTINE WILL REPORT AN ERROR WHEN THE NEXT COMMAND TO THE
* CCC FAILS.
*
* USES T3.
*
* CALLS CCU.
RCU SUBR ENTRY/EXIT
LDN 77
STD T3
RCU1 RJM CCU CONNECT CTS UNIT
NJN RCUX IF CONNECTED
SOD T3
NJN RCU1 IF MORE RETRIES
UJN RCUX RETURN
WFE SPACE 4,10
** WFE - WAIT FOR END OF OPERATION FOR CTS.
*
* ENTRY (WFEA) = STATUS MASK.
* (WFEB) = EXPECTED GENERAL STATUS.
*
* EXIT (A) = 0 IF COMPLETION STATUS AS EXPECTED.
*
* CALLS GPS.
WFE SUBR ENTRY/EXIT
WFE1 LDN 0 WAIT FOR END OF OPERATION
RJM GPS GET AND PROCESS GENERAL STATUS
LPC 406125 READ
WFEA EQU *-1
* LPC 406331 WRITE
* LPC 406321 WRITE LABEL
LMC 1 READ
WFEB EQU *-1
* LMC 201 WRITE
UJN WFEX RETURN
ERRNG DNCV-* CTS CHANNEL ROUTINES TOO LONG
LOC *O
CCRL EQU *-.CEP LENGTH OF CHANNEL ROUTINES
CCRA CHTB CHANNEL TABLE FOR CTS ROUTINES
QUAL
OVERLAY (INITIALIZE TAPE EXECUTIVE.),PPFW
SPACE 4,10
** DIRECT CELL ASSIGNMENTS.
CA EQU 30 CHANNEL NUMBER
PL EQU 31 FIRMWARE BUFFER LENGTH
EQ EQU 33 EQUIPMENT (CONTROLLER) NUMBER
AB EQU 40 FIRMWARE NAME
SPACE 4,10
*** MAGNET INITIALIZATION DAYFILE MESSAGES.
*
* FATAL DAYFILE MESSAGES.
*
* C00, T0 MTS CONVERSION TABLE LOAD ERROR.
* C00, T0 ATS CONVERSION TABLE LOAD ERROR.
* C00, T0 FSC CONVERSION TABLE LOAD ERROR.
* C00, T0 698 CONVERSION TABLE LOAD ERROR.
* C00, 639 FIRMWARE LOAD ERRORS.
* C00, MTS FIRMWARE LOAD ERRORS.
* C00, FSC FIRMWARE LOAD ERRORS.
* C00, 698 FIRMWARE LOAD ERRORS.
* C00, CTS FIRMWARE LOAD ERRORS.
* MORE THAN 8 TAPE CHANNELS.
* MTS FIRMWARE NOT FOUND.
* FSC FIRMWARE NOT FOUND.
* 639 FIRMWARE NOT FOUND.
* 698 FIRMWARE NOT FOUND.
* CTS FIRMWARE NOT FOUND.
* NO TAPE EQUIPMENT.
* TWO CONTROLLER TYPES ON SAME CHANNEL.
*
* INFORMATIVE DAYFILE MESSAGES.
*
* MT000, C00, TURNED OFF.
* NT000, C00, 200 IPS GCR DRIVE ON 1X PPS.
* MTS FIRMWARE LOAD, PART NO.- 12345678.
* FSC FIRMWARE LOAD, PART NO.- 12345678.
* 639 FIRMWARE LOAD, PART NO.- 12345678.
* 698 FIRMWARE LOAD, PART NO.- 12345678.
* CTS FIRMWARE LOAD, MB468-DXX.
ITE SPACE 4,10
** ITE - INITIALIZE TAPE EXECUTIVE.
*
* SETS UP CP AND DESCRIBES CONFIGURATION TO *MAGNET*.
*
* CALLS BCT, BDW, EST, LBC.
*
* MACROS MONITOR.
ITE RJM EST PRE-PROCESS EST
RJM LBC LOAD FIRMWARE AND CONVERSION TABLES
RJM BDW BUILD EQUIPMENT DEFINITION WORDS
RJM BCT BUILD CHANNEL STATUS TABLE
ITE1 LDN ZERL SET INITIALIZATION COMPLETE
CRD CM
LDD IR+3
SHN 6
ADD RA
SHN 6
ADD IR+4
CWD CM
MONITOR DPPM DROP PPU
LJM PPR EXIT TO PP RESIDENT
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
*CALL COMPCLD
*CALL COMPRNS
CTEXT MTS CONVERSION MACROS AND TABLES.
MTTR SPACE 4,10
** MTTR - GENERATE MTS CONVERSION MEMORY CODE.
*
* THIS MACRO GENERATES THE CODE FOR THE MTS
* TAPE CONTROLLER FOR DATA CONVERSION.
* DATA GENERATED INCLUDES BIT 6 (INCORRECT CODE)
* AND BIT 9 (LOAD LAST FLAG).
*
*
* MTTR CH,I,L
* ENTRY *CH* = DISPLAY CODE CHARACTER OR 2 OCTAL DIGITS
* *I* = INCORRECT CODE FLAG.
* *L* = LOAD LAST FLAG.
PURGMAC MTTR
MTTR MACRO CH,I,L
.1 MICRO 2,1, _CH
.2 MICRO 1,2, _CH
.3 SET 0
IFC EQ,*".1"**,1
.2 OCTMIC 1R_CH
IFC NE,*I**,1
.3 SET 100B
IFC NE,*L**,1
.3 SET .3+1000B
CON ".2"+.3
ENDM
MTBCD SPACE 4
** MTBCD - TABLE OF INTERNAL BCD/DISPLAY CODE FOR MTS.
* FIRST 64 ENTRIES, CONVERT INTERNAL BCD TO DISPLAY CODE.
* INDEXED BY INTERNAL BCD.
MTBCD BSS 0
LOC 0
MTTR 0
MTTR 1
MTTR 2
MTTR 3
MTTR 4
MTTR 5
MTTR 6
MTTR 7
MTTR 8
MTTR 9
MTTR 00 64 CHARACTER SET
C6463 MTTR,63 (63 CHARACTER SET)
MTTR =
MTTR 64
MTTR @
MTTR 63 64 CHARACTER SET
C6463 MTTR,00 (63 CHARACTER SET)
MTTR [
MTTR +
MTTR A
MTTR B
MTTR C
MTTR D
MTTR E
MTTR F
MTTR G
MTTR H
MTTR I
MTTR <
MTTR .
MTTR )
MTTR \
MTTR ^
MTTR ;
MTTR -
MTTR J
MTTR K
MTTR L
MTTR M
MTTR N
MTTR O
MTTR P
MTTR Q
MTTR R
MTTR !
MTTR $
MTTR *
MTTR '
MTTR ?
MTTR >
MTTR ( )
MTTR /
MTTR S
MTTR T
MTTR U
MTTR V
MTTR W
MTTR X
MTTR Y
MTTR Z
MTTR ]
MTTR (,)
MTTR 51
MTTR 65
MTTR #
MTTR &
LOC *O
MTANS SPACE 4
** MTANS - TABLE FOR *ASCII* TO DISPLAY CODE CONVERSION.
* FIRST 256 ENTRIES, CONVERT *ASCII* TO DISPLAY CODE.
* INDEXED BY *ASCII* CHARACTER.
MTANS BSS 0
LOC 0
MTTR ( ) 00 NUL NULL
MTTR ] 01 SOH START OF HEADING
MTTR 64 02 STX START OF TEXT
MTTR # 03 ETX END OF TEXT
MTTR $ 04 EOT END OF TRANSMISSION
MTTR 63 05 ENQ ENQUIRY (64 CHARACTER SET)
C6463 MTTR,( ) 05 ENQ ENQUIRY (63 CHARACTER SET)
MTTR & 06 ACK ACKNOWLEDGE
MTTR ' 07 BEL BELL
MTTR 51 08 BS BACKSPACE
MTTR ) 09 HT HORIZONTAL TAB
MTTR * 0A LF LINE FEED
MTTR + 0B VT VERTICAL TAB
MTTR (,) 0C FF FORM FEED
MTTR - 0D CR CARRIAGE RETURN
MTTR . 0E SO SHIFT OUT
MTTR / 0F SI SHIFT IN
MTTR 0 10 DLE DATA LINK ESCAPE
MTTR 1 11 DC1 DEVICE CONTROL 1 (X-ON)
MTTR 2 12 DC2 DEVICE CONTROL 2
MTTR 3 13 DC3 DEVICE CONTROL 3 (X-OFF)
MTTR 4 14 DC4 DEVICE CONTROL 4 (STOP)
MTTR 5 15 NAK NEGATIVE ACKNOWLEDGE
MTTR 6 16 SYN SYNCHRONOUS IDLE
MTTR 7 17 ETB END OF TRANSMISSION BLOCK
MTTR 8 18 CAN CANCEL
MTTR 9 19 EM END OF MEDIUM
MTTR 00 1A SUB SUBSTITUTE (64 CHARACTERS)
C6463 MTTR,63 1A SUB SUBSTITUTE (63 CHARACTERS)
MTTR ; 1B ESC ESCAPE (DRIVER)
MTTR [ 1C FS FILE SEPARATOR
MTTR = 1D GS GROUP SEPARATOR
MTTR > 1E RS RECORD SEPARATOR
MTTR ? 1F US UNIT SEPARATOR
MTTR ( ),,L 20 SPACE
MTTR !,,L 21 EXCLAMATION POINT
MTTR 64,,L 22 QUOTATION MARKS
MTTR #,,L 23 NUMBER SIGN
MTTR $,,L 24 $ DOLLAR SIGN
MTTR 63,,L 25 PERCENT (64 CHARACTER SET)
C6463 MTTR,( ) 25 PERCENT (63 CHARACTER SET)
MTTR &,,L 26 AMPERSAND
MTTR ',,L 27 APOSTROPHE
MTTR 51,,L 28 ( OPENING PARENTHESIS
MTTR ),,L 29 ) CLOSING PARENTHESIS
MTTR *,,L 2A * ASTERISK
MTTR +,,L 2B + PLUS
MTTR (,),,L 2C , COMMA
MTTR -,,L 2D - HYPHEN (MINUS)
MTTR .,,L 2E . PERIOD
MTTR /,,L 2F / SLANT
MTTR 0,,L 30 0
MTTR 1,,L 31 1
MTTR 2,,L 32 2
MTTR 3,,L 33 3
MTTR 4,,L 34 4
MTTR 5,,L 35 5
MTTR 6,,L 36 6
MTTR 7,,L 37 7
MTTR 8,,L 38 8
MTTR 9,,L 39 9
MTTR 00,,L 3A COLON (64 CHARACTER SET)
C6463 MTTR,(63,,L) 3A COLON (63 CHARACTER SET)
MTTR ;,,L 3B SEMICOLON
MTTR <,,L 3C LESS THAN
MTTR =,,L 3D EQUALS
MTTR >,,L 3E GREATER THAN
MTTR ?,,L 3F QUESTION MARK
MTTR @,,L 40 COMMERCIAL AT
MTTR A,,L 41 A
MTTR B,,L 42 B
MTTR C,,L 43 C
MTTR D,,L 44 D
MTTR E,,L 45 E
MTTR F,,L 46 F
MTTR G,,L 47 G
MTTR H,,L 48 H
MTTR I,,L 49 I
MTTR J,,L 4A J
MTTR K,,L 4B K
MTTR L,,L 4C L
MTTR M,,L 4D M
MTTR N,,L 4E N
MTTR O,,L 4F 0
MTTR P,,L 50 P
MTTR Q,,L 51 Q
MTTR R,,L 52 R
MTTR S,,L 53 S
MTTR T,,L 54 T
MTTR U,,L 55 U
MTTR V,,L 56 V
MTTR W,,L 57 W
MTTR X,,L 58 X
MTTR Y,,L 59 Y
MTTR Z,,L 5A Z
MTTR [,,L 5B OPENING BRACKET
MTTR \,,L 5C REVERSE SLANT
MTTR ],,L 5D CLOSING BRACKET
MTTR ^,,L 5E CIRCUMFLEX
MTTR 65,,L 5F UNDERLINE
MTTR @ 60 GRAVE ACCENT
MTTR A 61 A LC
MTTR B 62 B LC
MTTR C 63 C LC
MTTR D 64 D LC
MTTR E 65 E LC
MTTR F 66 F LC
MTTR G 67 G LC
MTTR H 68 H LC
MTTR I 69 I LC
MTTR J 6A J LC
MTTR K 6B K LC
MTTR L 6C L LC
MTTR M 6D M LC
MTTR N 6E N LC
MTTR O 6F O LC
MTTR P 70 P LC
MTTR Q 71 Q LC
MTTR R 72 R LC
MTTR S 73 S LC
MTTR T 74 T LC
MTTR U 75 U LC
MTTR V 76 V LC
MTTR W 77 W LC
MTTR X 78 X LC
MTTR Y 79 Y LC
MTTR Z 7A Z LC
MTTR < 7B OPENING BRACE
MTTR \ 7C VERTICAL LINE
MTTR ! 7D CLOSING BRACE
MTTR ^ 7E OVERLINE (TILDE)
MTTR 65 7F DEL DELETE
DUP 128,1
MTTR 00,I INCORRECT CHARACTER
LOC *O
MTEBC SPACE 4
** MTEBC - TABLE OF EBCDIC/DISPLAY CODE.
* CONVERT EBCDIC TO DISPLAY CODE.
* INDEXED BY EBCDIC CODE VALUE.
MTEBC BSS 0
LOC 0
MTTR ( ) 00 NUL NULL
MTTR ] 01 SOH START OF HEADING
MTTR 64 02 STX START OF TEXT
MTTR # 03 ETX END OF TEXT
MTTR ( ) 04
MTTR ) 05 HT HORIZONTAL TAB
MTTR ( ) 06
MTTR 65 07 DEL DELETE
MTTR ( ) 08
MTTR ( ) 09
MTTR ( ) 0A
MTTR + 0B VT VERTICAL TAB
MTTR (,) 0C FF FORM FEED
MTTR - 0D CR CARRIAGE RETURN
MTTR . 0E SO SHIFT OUT
MTTR / 0F SI SHIFT IN
MTTR 0 10 DLE DATA LINK ESCAPE
MTTR 1 11 DC1 DEVICE CONTROL 1 (X-ON)
MTTR 2 12 DC2 DEVICE CONTROL 2
MTTR 3 13 DC3 DEVICE CONTROL 3 (X-OFF)
MTTR ( ) 14
MTTR ( ) 15
MTTR 51 16 BS BACKSPACE
MTTR ( ) 17
MTTR 8 18 CAN CANCEL
MTTR 9 19 EM END OF MEDIMUM
MTTR ( ) 1A
MTTR ( ) 1B
MTTR [ 1C FS FILE SEPERATOR
MTTR = 1D GS GROUP SEPERATOR
MTTR > 1E RS RECORD SEPERATOR
MTTR ? 1F US UNIT SEPERATOR
MTTR ( ) 20
MTTR ( ) 21
MTTR ( ) 22
MTTR ( ) 23
MTTR ( ) 24
MTTR * 25 LF LINE FEED
MTTR 7 26 ETB END OF TRANSMISSION BLOCK
MTTR ; 27 ESC ESCAPE
MTTR ( ) 28
MTTR ( ) 29
MTTR ( ) 2A
MTTR ( ) 2B
MTTR ( ) 2C
MTTR 63 2D ENQ ENQUIRY (64 CHARACTER SET)
C6463 MTTR,( ) 2D ENQ ENQUIRY (63 CHARACTER SET)
MTTR & 2E ACK ACKNOWLEDGE
MTTR ' 2F BEL BELL
MTTR ( ) 30
MTTR ( ) 31
MTTR 6 32 SYN SYNCHROUS IDLE
MTTR ( ) 33
MTTR ( ) 34
MTTR ( ) 35
MTTR ( ) 36
MTTR $ 37 EOT END OF TRANSMISSION
MTTR ( ) 38
MTTR ( ) 39
MTTR ( ) 3A
MTTR ( ) 3B
MTTR 4 3C DC4 DEVICE CONTROL 4
MTTR 5 3D NAK NEGATIVE ACKNOWLEDGE
MTTR ( ) 3E
MTTR 00 3F SUB SUBSTITUTE (64 CHARACTER SET
C6463 MTTR,63 3F SUB SUBSTITUTE (63 CHARACTER SET
MTTR ( ),,L 40 SPACE
MTTR ( ) 41
MTTR ( ) 42
MTTR ( ) 43
MTTR ( ) 44
MTTR ( ) 45
MTTR ( ) 46
MTTR ( ) 47
MTTR ( ) 48
MTTR ( ) 49
MTTR [,,L 4A OPENING BRACKET
MTTR .,,L 4B . PERIOD
MTTR <,,L 4C LESS THAN
MTTR 51,,L 4D OPENING PARENTHESIS
MTTR +,,L 4E + PLUS
MTTR !,,L 4F LOGICAL OR
MTTR &,,L 50 AMPERSAND
MTTR ( ) 51
MTTR ( ) 52
MTTR ( ) 53
MTTR ( ) 54
MTTR ( ) 55
MTTR ( ) 56
MTTR ( ) 57
MTTR ( ) 58
MTTR ( ) 59
MTTR ],,L 5A CLOSING BRACKET
MTTR $,,L 5B $ DOLLAR SIGN
MTTR *,,L 5C * ASTERISK
MTTR ),,L 5D ) CLOSING PARENTHESIS
MTTR ;,,L 5E SEMICOLON
MTTR ^,,L 5F NOT LOGICAL NOT
MTTR -,,L 60 - HYPHEN (MINUS)
MTTR /,,L 61 / SLANT
MTTR ( ) 62
MTTR ( ) 63
MTTR ( ) 64
MTTR ( ) 65
MTTR ( ) 66
MTTR ( ) 67
MTTR ( ) 68
MTTR ( ) 69
MTTR \ 6A VERTICAL LINE
MTTR (,),,L 6B , COMMA
MTTR 63,,L 6C PERCENT (64 CHARACTER SET)
C6463 MTTR,( ) 6C PERCENT (63 CHARACTER SET)
MTTR 65,,L 6D UNDERSCORE
MTTR >,,L 6E GREATER THAN
MTTR ?,,L 6F QUESTION MARK
MTTR ( ) 70
MTTR ( ) 71
MTTR ( ) 72
MTTR ( ) 73
MTTR ( ) 74
MTTR ( ) 75
MTTR ( ) 76
MTTR ( ) 77
MTTR ( ) 78
MTTR @ 79 GRAVE ACCENT
MTTR 00,,L 7A COLON (64 CHARACTER SET)
C6463 MTTR,(63,,L) 7A COLON (63 CHARACTER SET)
MTTR #,,L 7B NUMBER SIGN
MTTR @,,L 7C COMMERCIAL AT
MTTR ',,L 7D APOSTROPHE
MTTR =,,L 7E = EQUALS
MTTR 64,,L 7F QUOTATION MARKS
MTTR ( ) 80
MTTR A 81 A LC
MTTR B 82 B LC
MTTR C 83 C LC
MTTR D 84 D LC
MTTR E 85 E LC
MTTR F 86 F LC
MTTR G 87 G LC
MTTR H 88 H LC
MTTR I 89 I LC
MTTR ( ) 8A
MTTR ( ) 8B
MTTR ( ) 8C
MTTR ( ) 8D
MTTR ( ) 8E
MTTR ( ) 8F
MTTR ( ) 90
MTTR J 91 J LC
MTTR K 92 K LC
MTTR L 93 L LC
MTTR M 94 M LC
MTTR N 95 N LC
MTTR O 96 O LC
MTTR P 97 P LC
MTTR Q 98 Q LC
MTTR R 99 R LC
MTTR ( ) 9A
MTTR ( ) 9B
MTTR ( ) 9C
MTTR ( ) 9D
MTTR ( ) 9E
MTTR ( ) 9F
MTTR ( ) A0
MTTR ^ A1 OVERLINE (TILDE)
MTTR S A2 S LC
MTTR T A3 T LC
MTTR U A4 U LC
MTTR V A5 V LC
MTTR W A6 W LC
MTTR X A7 X LC
MTTR Y A8 Y LC
MTTR Z A9 Z LC
MTTR ( ) AA
MTTR ( ) AB
MTTR ( ) AC
MTTR ( ) AD
MTTR ( ) AE
MTTR ( ) AF
MTTR ( ) B0
MTTR ( ) B1
MTTR ( ) B2
MTTR ( ) B3
MTTR ( ) B4
MTTR ( ) B5
MTTR ( ) B6
MTTR ( ) B7
MTTR ( ) B8
MTTR ( ) B9
MTTR ( ) BA
MTTR ( ) BB
MTTR ( ) BC
MTTR ( ) BD
MTTR ( ) BE
MTTR ( ) BF
MTTR < C0 OPENING BRACE
MTTR A,,L C1 A
MTTR B,,L C2 B
MTTR C,,L C3 C
MTTR D,,L C4 D
MTTR E,,L C5 E
MTTR F,,L C6 F
MTTR G,,L C7 G
MTTR H,,L C8 H
MTTR I,,L C9 I
MTTR ( ) CA
MTTR ( ) CB
MTTR ( ) CC
MTTR ( ) CD
MTTR ( ) CE
MTTR ( ) CF
MTTR ! D0 CLOSING BRACE
MTTR J,,L D1 J
MTTR K,,L D2 K
MTTR L,,L D3 L
MTTR M,,L D4 M
MTTR N,,L D5 N
MTTR O,,L D6 O
MTTR P,,L D7 P
MTTR Q,,L D8 Q
MTTR R,,L D9 R
MTTR ( ) DA
MTTR ( ) DB
MTTR ( ) DC
MTTR ( ) DD
MTTR ( ) DE
MTTR ( ) DF
MTTR \,,L E0 REVERSE SLANT
MTTR ( ) E1
MTTR S,,L E2 S
MTTR T,,L E3 T
MTTR U,,L E4 U
MTTR V,,L E5 V
MTTR W,,L E6 W
MTTR X,,L E7 X
MTTR Y,,L E8 Y
MTTR Z,,L E9 Z
MTTR ( ) EA
MTTR ( ) EB
MTTR ( ) EC
MTTR ( ) ED
MTTR ( ) EE
MTTR ( ) EF
MTTR 0,,L F0 0
MTTR 1,,L F1 1
MTTR 2,,L F2 2
MTTR 3,,L F3 3
MTTR 4,,L F4 4
MTTR 5,,L F5 5
MTTR 6,,L F6 6
MTTR 7,,L F7 7
MTTR 8,,L F8 8
MTTR 9,,L F9 9
MTTR ( ) FA
MTTR ( ) FB
MTTR ( ) FC
MTTR ( ) FD
MTTR ( ) FE
MTTR ( ) FF
LOC *O
ENDX
CTEXT ATS CONVERSION MACROS AND TABLES. (WRITE)
ATSW SPACE 4,10,10
** ATSW - GENERATE ATS CONVERSION MEMORY FOR WRITE OF
* 6 BIT CHARACTERS.
*
* THIS MACRO GENERATES THE CODE FOR THE ATS TAPE
* CONTROLLER FOR OUTPUT OF 6 BIT BCD CHARACTERS.
*
* ATSW CH1,CH2
*
* WHERE CH1, CH2 = BCD CHARACTER VALUES IN OCTAL. THESE
* TWO CHARACTERS WILL BE PACKED INTO 1 PP WORD.
PURGMAC ATSW
ATSW MACRO CH1,CH2
CON CH1_CH2
ENDM
ATEW SPACE 4,10,10
** ATEW - GENERATE ATS CONVERSION TABLE FOR WRITE
* OF EIGHT BIT CHARACTERS.
*
* THIS MACRO GENERATES THE CODE FOR ATS TAPE CONTROLLER
* FOR THE OUTPUT OF 8 BIT CHARACTERS.
*
* ATEW CH1,CH2,CH3
*
* WHERE CH1, CH2, CH3 = CHARACTER VALUES IN HEXIDECIMAL.
* THE 3 CHARACTERS WILL BE PACKED INTO 2 PP WORDS.
PURGMAC ATEW
ATEW MACRO CH1,CH2,CH3
.1 MICRO 1,1, _CH2
.2 MICRO 2,1, _CH2
CON 0#_CH1_".1",0#_".2"_CH3
ENDM
ATBCD SPACE 4,10,10
** ATBCD - TABLE TO CONVERT DISPLAY TO INTERNAL BCD.
* EACH PP WORD CONTAINS 2 INTERNAL BCD VALUES.
* INDEXED BY DISPLAY CODE VALUE / 2.
ATBCD BSS 0
LOC 0
ATSW 00,21 COLON, A
C6463 ATSW,(16,21) (63 CHARACTER SET - COLON, A)
ATSW 22,23 B, C
ATSW 24,25 D, E
ATSW 26,27 F, G
ATSW 30,31 H, I
ATSW 41,42 J, K
ATSW 43,44 L, M
ATSW 45,46 N, O
ATSW 47,50 P, Q
ATSW 51,62 R, S
ATSW 63,64 T, U
ATSW 65,66 V, W
ATSW 67,70 X, Y
ATSW 71,00 Z, 0
ATSW 01,02 1, 2
ATSW 03,04 3, 4
ATSW 05,06 5, 6
ATSW 07,10 7, 8
ATSW 11,20 9, +
ATSW 40,54 -, *
ATSW 61,74 /, (
ATSW 34,53 ), $
ATSW 13,60 =, SPACE
ATSW 73,33 ., ,
ATSW 76,17 #, [
ATSW 72,16 ],
C6463 ATSW,(72,00) (63 CHARACTER SET - ], %)
ATSW 14,75 ", _
ATSW 52,77 !, &
ATSW 55,56 ', ?
ATSW 32,57 <, >
ATSW 15,35 @A \
ATSW 36,37 ^, ;
DUP 96,1
ATSW 60,60 BLANK FILL REMAINDER OF TABLE
LOC *O
ATANS SPACE 4,10
** ATANS - TABLE TO CONVERT DISPLAY TO ASCII.
* EACH 2 PP WORDS CONTAIN 3 ASCII VALUES.
ATANS BSS 0
LOC 0
ATEW 3A,41,42 COLON, A, B
C6463 ATEW,(20,41,42),P (63 CHARACTER SET - SPACE, A, B)
ATEW 43,44,45 C, D, E
ATEW 46,47,48 F, G, H
ATEW 49,4A,4B I, J, K
ATEW 4C,4D,4E L, M, N
ATEW 4F,50,51 O, P, Q
ATEW 52,53,54 R, S, T
ATEW 55,56,57 U, V, W
ATEW 58,59,5A X, Y, Z
ATEW 30,31,32 0, 1, 2
ATEW 33,34,35 3, 4, 5
ATEW 36,37,38 6, 7, 8
ATEW 39,2B,2D 9, PLUS, HYPHEN
ATEW 2A,2F,28 ASTERISK, SLANT, OPENING PAREN
ATEW 29,24,3D CLOSING PAREN, DOLLAR SIGN, EQUALS
ATEW 20,2C,2E SPACE, PERIOD, COMMA
ATEW 23,5B,5D NUMBER SIGN, OPEN BRACKET, CLOSING BRACKET
ATEW 25,22,5F PERCENT, QUOTATION MARKS, UNDERLINE
C6463 ATEW,(3A,22,5F),P (63 CHARACTER SET - PERCENT)
ATEW 21,26,27 EXCLAMATION POINT, AMPERSAND, APOSTROPHE
ATEW 3F,3C,3E QUESTION MARK, LESS THAN, GREATER THAN
ATEW 40,5C,5E COMMERICAL AT, REVERSE SLANT, CIRCUMFLEX
ATEW 3B,20,20 SEMICOLON, SPACE, SPACE
DUP 63,1
ATEW 20,20,20 BLANK FILL REMAINDER OF TABLE
CON 400 LAST CHARACTER
LOC *O
ATEBC SPACE 4,10
** ATEBC - TABLE TO CONVERT DISPLAY TO EBCDIC.
* EACH 2 PP WORDS CONTAIN 3 EBCDIC VALUES.
ATEBC BSS 0
LOC 0
ATEW 7A,C1,C2 COLON, A, B
C6463 ATEW,(00,C1,C2),P (63 CHARACTER SET - COLON, A, B)
ATEW C3,C4,C5 C, D, E
ATEW C6,C7,C8 F, G, H
ATEW C9,D1,D2 I, J, K
ATEW D3,D4,D5 L, M, N
ATEW D6,D7,D8 O, P, Q
ATEW D9,E2,E3 R, S, T
ATEW E4,E5,E6 U, V, W
ATEW E7,E8,E9 X, Y, Z
ATEW F0,F1,F2 0, 1, 2
ATEW F3,F4,F5 3, 4, 5
ATEW F6,F7,F8 6, 7, 8
ATEW F9,4E,60 9, PLUS, HYPHEN
ATEW 5C,61,4D ASTERISK, SLANT, OPENING PAREN
ATEW 5D,5B,7E CLOSING PAREN, DOLLAR SIGN, EQUALS
ATEW 40,6B,4B SPACE, PERIOD, COMMA
ATEW 7B,4A,5A NUMBER SIGN, OPEN BRACKET, CLOSING BRACKET
ATEW 6C,7F,6D PERCENT, QUOTATION MARKS, UNDERLINE
C6463 ATEW,(7A,7F,6D),P (63 CHARACTER SET - COLON)
ATEW 4F,50,7D EXCLAMATION POINT, AMPERSAND, APOSTROPHE
ATEW 6F,4C,6E QUESTION MARK, LESS THAN, GREATER THAN
ATEW 7C,E0,5F COMMERCIAL AT, REVERSE SLANT, CIRCUMFLEX
ATEW 5E,40,40 SEMICOLON, SPACE, SPACE
DUP 63,1
ATEW 40,40,40 BLANK FILL REMAINDER OF TABLE
CON 1000 LAST CHARACTER
LOC *O
ENDX
TITLE INITIALIZATION SUBROUTINES.
ABT SPACE 4,10
** ABT - ABORT.
*
* ENTRY (A) = MESSAGE ADDRESS.
*
* CALLS DFM.
*
* MACROS MONITOR.
ABT RJM DFM ISSUE MESSAGE
MONITOR ABTM ABORT
LJM PPR EXIT TO PP RESIDENT
ADC SPACE 4,10
** ADC - ABORT AND DROP CHANNEL.
*
* ENTRY (A) = MESSAGE ADDRESS.
* (CA) = CHANNEL NUMBER.
*
* CALLS C2D, DFM.
*
* MACROS DCHAN.
ADC STD AB SAVE MESSAGE ADDRESS
LDD CA RETURN CHANNEL
DCHAN
LDD CA SET CHANNEL NUMBER IN MESSAGE
RJM C2D
STM 1,AB
LDD AB
ADC ERLN
RJM DFM ISSUE MESSAGE TO ERROR LOG
LDD AB
UJN ABT ABORT
BCT SPACE 4,10
** BCT - BUILD CHANNEL STATUS TABLE.
*
* ENTRY CST ENTRIES PRESET TO ZERO BY MAGNET.
*
* EXIT CHANNEL AND CONTROLLER FLAGS SET IN *CPST*.
*
* USES T1, CM - CM+4.
BCT SUBR ENTRY/EXIT
LDN 0 INITIALIZE CHANNEL INDEX
STD T1
BCT1 LDM CHLI,T1
LMC 7777
ZJN BCTX IF END OF CHANNELS
LDN ZERL CLEAR ASSEMBLY
CRD CM
LDM CHLI,T1 SAVE CHANNEL NUMBER AND CONTROLLER FLAGS
LPC 340
NJN BCT2 IF NOT CMTS CONTROLLER
LDM CHLI,T1
LPC 7437
LMD HN
UJN BCT3 SET CMTS
BCT2 LDM CHLI,T1
LPC 7737
BCT3 STD CM+3
AOD CM+4 INSURE NON-ZERO ENTRY FOR MAGNET CHECK
LDD RA SET CST ADDRESS
SHN 6
ADK /MTX/CST
ADD T1
ADD T1
ERRNZ /MTX/CSTE-2
ADK /MTX/CPST INITIALIZE PROCESSOR STATUS
CWD CM
AOD T1 ADVANCE CHANNEL INDEX
LJM BCT1 PROCESS NEXT CHANNEL
BDW SPACE 4,25
** BDW - BUILD DEFINITON WORDS.
*
* RETURNS EQUIPMENT DEFINITION INFORMATION FOR EACH UNIT TO
* BUFFER AT /MTX/UINT. THE BUFFER IS TERMINATED WITH A ZERO
* WORD.
*
* USES T5, T7, SC, AB - AB+4, CM - CM+4, CN - CN+4.
*
* CALLS CTE.
*
* MACROS SFA.
*
* *UINT* ENTRY FORMAT -
*
*T 12/ ED,12/ HP,12/ EO,12/ ATCP,9/0,2/DT,1/R
*
* ED *ED* BYTE OF *UST1*.
* HP *HP* BYTE OF *UST1*.
* EO *EO* BYTE OF *UST1*.
* ATCP *AT* DEVICE CONTROL PATH INFORMATION.
* DT TAPE DEVICE TYPE.
* R RESERVED FOR TAPE DEVICE TYPE EXPANSION.
* TERMINATE *UINT*.
BDW3 LDD RA WRITE ZERO ENTRY
SHN 6
ADC /MTX/UINT
ADD T7
CWD CM
BDW SUBR ENTRY/EXIT
* INITIALIZE EST SEARCH.
LDN ESTP READ EST POINTER
CRD CM
LDD CM+2 SET LAST EST ORDINAL + 1
STD SC
LDN 0
STD T7
LDN NOPE-1 INITIALIZE EST ORDINAL FOR SEARCH
STD T5
* CHECK FOR TAPE EQUIPMENT.
BDW1 LDN ZERL CLEAR ASSEMBLY
CRD CM
AOD T5 INCREMENT EST ORDINAL
LMD SC
ZJN BDW3 IF END OF EST
SFA EST,T5 READ EST ENTRY
ADK EQDE
CRD AB
ADK EQAE-EQDE
CRD CN
LDD AB+3 GET EQUIPMENT MNEMONIC
RJM CTE CHECK FOR TAPE EQUIPMENT
MJN BDW1 IF NOT TAPE EQUIPMENT
* INITIALIZE *UINT* ENTRY.
SHN 1 SET DEVICE TYPE
STD CM+4
LDD T5 SET EST ORDINAL
STD CM+2
LDD AB SET MTS/ATS/GCR FLAGS
SHN -3
LPN 62
STD CM+1
LDD AB SET FSC FLAG
LPC 100
RAD CM+1
LDD AB SET CMTS FLAG
LPN 4
SHN 6-2
RAD CM+1
LDM BDWA,T1 SET CTS AND 9 TRACK STATUS
RAD CM+1
LDD AB SET ISMT FLAG
LPN 10
SHN 10-3
RAD CM+1
LDD CN+3 SET ACCESS LEVELS
LPN 77
SHN 6
STD CM
LDD T1
LMN /MTX/DVAT
NJN BDW2 IF NOT *AT* DEVICE
LDN 2 SET ACS FLAG
RAD CM
LDD CN+2 SET CONTROL PATH PARAMETERS
STD CM+3
BDW2 LDD RA
SHN 6
ADC /MTX/UINT WRITE DEFINITION TO *MAGNET* BUFFER
ADD T7
CWD CM
AOD T7
LJM BDW1 LOOP FOR OTHER UNITS
* TABLE TO SET 9 TRACK OR CTS FLAG IN *UST1*.
BDWA INDEX
INDEX /MTX/DVMT,0
INDEX /MTX/DVCT,200
INDEX /MTX/DVNT,1
INDEX /MTX/DVAT,200
INDEX /MTX/DVMX
CCT SPACE 4,10
** CCT - CONVERT CONVERSION TABLE. (MTS TABLE TO ATS READ TABLE)
*
* ENTRY (A) = ADDRESS OF MTS TABLE.
* (T1) = TABLE NUMBER.
*
* EXIT BFMS CONTAINS ATS READ CONVERSION TABLE.
*
* USES T2 - T6.
CCT2 LDI T2 CONVERT BCD TABLE
STD T4
AOD T2
LDD T4
SHN 6
ADI T2
STM BFMS,T3
AOD T2
AOD T3
LMN 64D/2
NJN CCT2 IF MORE CHARACTERS IN TABLE
CCT3 LDC 2R SPACE FILL REMAINDER OF TABLE
STM BFMS,T3
AOD T3
LMC 128D
NJN CCT3 IF MORE CHARACTERS
CCT SUBR ENTRY/EXIT
STD T2 SAVE TABLE ADDRESS
LDN 0 INITIALIZE COUNTER
STD T3
LDD T1
LMN 3
ZJN CCT2 IF BCD LOAD
* PROCESS 8 BIT CONVERSION.
CCT1 LDI T2 PACK 3 MTS BYTES INTO 2 ATS BYTES
LPC 177
STD T4
AOD T2
LDI T2
LPC 177
STD T5
AOD T2
LDI T2
LPC 177
STD T6
AOD T2
LDD T4 MERGE THE CHARACTERS
SHN 8D
ADD T5
SHN -4D
STM BFMS,T3
AOD T3
LDD T5
SHN 8D
ADD T6
STM BFMS,T3
AOD T3
ADC -170D
MJN CCT1 IF MORE CHARACTERS TO CONVERT
LDI T2 SET LAST PARTIAL BYTE
LPC 177
SHN 4D
STM BFMS,T3
LJM CCTX RETURN
SPACE 4,15
** CHANNEL AND EQUIPMENT DEFINITIONS.
*
* *CHLI* IS BUILT BY *CCH*, IN THE FOLLOWING FORMAT.
*
* 13-11 EQUIPMENT NUMBER (0 IF CTS CHANNEL).
* 10 RESERVED.
* 7,6,5 CONTROLLER TYPE.
* 000 = CMTS CHANNEL.
* 001 = ISMT CHANNEL.
* 010 = ATS CHANNEL.
* 011 = FSC CHANNEL.
* 100 = MTS CHANNEL.
* 111 = CTS CHANNEL.
* 4-0 CHANNEL NUMBER.
CHCN CON 0 COUNT OF TAPE CHANNELS
CHLI CON -0,-0,-0,-0,-0,-0,-0,-0,-0
CMD SPACE 4,10
** CMD - CHANNEL MODIFICATION.
*
* ENTRY (A) = CHANNEL.
*
* EXIT (CA) = CHANNEL.
* (A) = 0 IF CHANNEL RESERVED.
* (A) .NE. 0 IF CHANNEL DOWN.
*
* USES T0, T3.
*
* MACROS RCHAN.
CMD SUBR ENTRY/EXIT
LPN 37
STD CA SET CHANNEL NUMBER
ADC 4000 REQUEST REPLY IF CHANNEL DOWN
RCHAN
LDD CM+1
SHN 0-13
NJN CMDX IF CHANNEL DOWN
LDC CTAB MODIFY CHANNELS
STD T3
CMD1 LDI T3
ZJN CMDX IF END OF CHANNEL TABLE
STD T0
LDI T0
SCN 37
LMD CA
STI T0
AOD T3
UJN CMD1 CONTINUE MODIFYING CHANNEL INSTRUCTIONS
CTE SPACE 4,10
** CTE - CHECK FOR TAPE EQUIPMENT.
*
* ENTRY (A) = EQUIPMENT MNEMONIC.
*
* EXIT (A) = TAPE DEVICE TYPE IF TAPE EQUIPMENT.
* (A) .LT. 0 IF NOT TAPE EQUIPMENT.
* (T1) = TAPE DEVICE TYPE IF TAPE EQUIPMENT.
*
* USES T1.
CTE SUBR ENTRY/EXIT
STD T0
LDN /MTX/DVMX
STD T1
CTE1 SOD T1
MJN CTEX IF ALL ENTRIES CHECKED
LDD T0
LMM CTEA,T1
NJN CTE1 IF NO MATCH
LDD T1 SET DEVICE TYPE
UJN CTEX RETURN
CTEA INDEX DEVICE MNEMONIC TABLE
INDEX /MTX/DVMT,2RMT
INDEX /MTX/DVCT,2RCT
INDEX /MTX/DVNT,2RNT
INDEX /MTX/DVAT,2RAT
INDEX /MTX/DVMX
ICF SPACE 4,10
** ICF - ISSUE CHANNEL FUNCTION.
*
* ENTRY (A) = FUNCTION.
*
* EXIT (A) = 0 IF FUNCTION REJECT
* (A) .NE. 0 IF NOT FUNCTION REJECT.
ICF SUBR ENTRY/EXIT
DCN CH+40
FAN CH
LCN 0
ICF1 IJM ICFX,CH IF FUNCTION ACCEPTED
SBN 1
NJN ICF1 IF NOT TIMED OUT
DCN CH+40
UJN ICFX RETURN
IFL SPACE 4,10
** IFL - INITIALIZE FOR FIRMWARE LOAD.
*
* ENTRY (A) = 3 CHARACTER ADAPTOR NAME.
*
* EXIT (SC) = CHLI-1.
* THE ADAPTOR NAME IS SET INTO THE APPROPRIATE DAYFILE
* MESSAGES AND THE FIRMWARE PART NUMBER IS INITIALIZED.
*
* USES T1.
IFL SUBR ENTRY/EXIT
STM LBCG+3
STM LBCH+1
STM LCMC+5
SHN -14
LMC 2L
STM LBCG+2 CHANGE MESSAGES
STM LBCH
STM LCMC+4
LDC /MTX/UIBF SET CM BUFFER ADDRESS
STM LBCA
LDC ADCI
STM LBCA-1
LDN 3
STD T1
IFL1 LDC 2R00 REINITIALIZE FIRMWARE PART NUMBER
STM LBCH+17,T1
SOD T1
PJN IFL1 IF MORE BYTES TO INITIALIZE
LDC CHLI-1 INITIALIZE *CHLI* INDEX
STD SC
LJM IFLX RETURN
ILM SPACE 4,10
** ILM - ISSUE FIRMWARE LOADED MESSAGE.
*
* ENTRY (ILMA) = 1 IF FIRMWARE LOADED.
* (LBCH) = MESSAGE.
*
* EXIT (ILMA) = 0.
*
* CALLS DFM.
ILM SUBR ENTRY/EXIT
LDC 0
ILMA EQU *-1
* LDC 1 (FIRMWARE WAS LOADED)
ZJN ILMX IF FIRMWARE NOT LOADED
LDC LBCH+ERLN ISSUE MESSAGE TO ERRLOG
RJM DFM
STM ILMA RESET
UJN ILMX RETURN
LBC SPACE 4,15
** LBC - LOAD BUFFER CONTROLLER.
*
* LOAD CONTROLWARE TO FSC, ISMT, CMTS, MTS, AND CTS TAPE
* ADAPTORS. ALSO LOAD CONVERSION TABLES TO MTS, ATS, FSC, ISMT
* AND CMTS CONTROLLERS.
*
* ENTRY (CHLI) = TABLE OF CHANNELS.
*
* EXIT FIRMWARE LOADED.
*
* ERROR EXIT TO *ABT* IF FIRMWARE RECORD NOT FOUND.
*
* USES CN, EQ, PL, SC, T1, T3 - T7, AB - AB+4, CM - CM+4.
*
* CALLS CLD, CMD, ICF, IFL, ILM, LCA, LCM, RNS, *0CT*.
*
* MACROS DCHAN, DELAY, ENDMS, EXECUTE, SETMS.
LBC17 RJM ILM ISSUE FIRMWARE LOADED MESSAGE
* INITIALIZE FSC FIRMWARE LOAD.
LDC 3RFSC INITIALIZE FOR FSC FIRMWARE LOAD
RJM IFL
LDC ZJNI+LBC15-LBCC
ERRPL LBC15-LBCC-40 CHECK JUMP IN RANGE
STM LBCC CHANGE END OF FIRMWARE LOAD
* LOAD FIRMWARE TO ALL FSC ADAPTORS.
LBC18 AOD SC
LDI SC
LMC 7777
ZJN LBC21 IF END OF CHANNELS
SHN -5
LPN 7
LMN 3&7
NJN LBC18 IF NOT FSC
LDM ILMA
ZJN LBC19 IF FIRMWARE NOT IN CM BUFFER YET
LJM LBC10 OUTPUT FIRMWARE TO ADAPTOR
LBC19 AOM ILMA INDICATE FIRMWARE IN BUFFER
LDD MA
CWM LBCI,ON MOVE RECORD NAME TO DIRECT CELLS
SBN 1
CRD AB
RJM CLD SEARCH LIBRARY DIRECTORY
NJN LBC20 IF FIRMWARE RECORD FOUND
LDC =C* FSC FIRMWARE NOT FOUND.*
LJM ABT ABORT
LBC20 LJM LBC6 CONTINUE FIRMWARE RECORD READ
LBC21 RJM ILM ISSUE FIRMWARE LOADED MESSAGE
* INITIALIZE CMTS FIRMWARE LOAD.
LDC 3R698 INITIALIZE FOR 698 FIRMWARE LOAD
RJM IFL
LDC LBC22 SET RETURN ADDRESS
STM LBCD
* LOAD FIRMWARE TO ALL CMTS ADAPTORS.
LBC22 AOD SC
LDI SC
LMC 7777
ZJN LBC25 IF END OF CHANNELS
SHN -5
LPN 7
LMN 0&7
NJN LBC22 IF NOT CMTS
LDM ILMA
ZJN LBC23 IF FIRMWARE NOT IN CM BUFFER YET
LJM LBC10 OUTPUT FIRMWARE TO ADAPTOR
LBC23 AOM ILMA INDICATE FIRMWARE IN BUFFER
LDD MA
CWM LBCK,ON MOVE RECORD NAME TO DIRECT CELLS
SBN 1
CRD AB
RJM CLD SEARCH LIBRARY DIRECTORY
NJN LBC24 IF FIRMWARE RECORD FOUND
LDC =C* 698 FIRMWARE NOT FOUND.*
LJM ABT ABORT
LBC24 LJM LBC6 CONTINUE FIRMWARE RECORD READ
LBC25 RJM ILM ISSUE FIRMWARE LOADED MESSAGE
* INITIALIZE ISMT FIRMWARE LOAD.
LDC 3R639 INITIALIZE FOR 639 FIRMWARE LOAD
RJM IFL
LDC LBC26
STM LBCD
* LOAD FIRMWARE TO ALL ISMT ADAPTORS.
LBC26 AOD SC
LDI SC
LMC 7777
ZJN LBC29 IF END OF CHANNELS
SHN -5
LPN 7
LMN 1&7
NJN LBC26 IF NOT ISMT
LDM ILMA
ZJN LBC27 IF FIRMWARE NOT IN CM BUFFER YET
LJM LBC10 OUTPUT FIRMWARE TO ADAPTOR
LBC27 AOM ILMA INDICATE FIRMWARE IN BUFFER
LDD MA
CWM LBCJ,ON MOVE RECORD NAME TO DIRECT CELLS
SBN 1
CRD AB
RJM CLD SEARCH LIBRARY DIRECTORY
NJN LBC28 IF FIRMWARE RECORD FOUND
LDC =C* 639 FIRMWARE NOT FOUND.*
LJM ABT ABORT
LBC28 LJM LBC6 CONTINUE FIRMWARE RECORD READ
LBC29 RJM ILM ISSUE FIRMWARE LOADED MESSAGE
* LOAD FIRMWARE TO ALL CTS ADAPTERS.
LDC 3RCTS
RJM IFL INITIALIZE FOR FIRMWARE LOAD
LBC30 AOD SC
LDI SC
LMC 7777
ZJP LBC32 IF END OF CHANNELS
SHN -5
LPN 7
LMK 7&7
NJN LBC30 IF NOT CTS
AOM ILMA SO FIRMWARE LOADED MESSAGE DISPLAYED
LDI SC SET CHANNEL NUMBER
LPN 37
STD CN
RJM CMD REQUEST CHANNEL
NJN LBC30 IF CHANNEL DOWN
LDC ERLB SET BUFFER ADDRESS
STD CN+1
LBC30.1 DELAY
LDD OA WAIT OUTPUT REGISTER CLEAR
CRD CM
LDD CM
NJN LBC30.1 IF RECALL STILL PENDING
EXECUTE 0CT,ERLA+5 LOAD CTS/CCC MICROCODE
LDD CN
NJP LBC30.2 IF ERROR
STM LBCH+17 INDICATE END OF MESSAGE
LDC 2RMB
STM LBCH+12 PUT MB468-D0X IN MESSAGE
LDC 2R46
STM LBCH+13
LDC 2R8-
STM LBCH+14
LDC 2RD0
STM LBCH+15
LDD CN+2 GET MICROCODE REVISION
SHN 6
ADC 2R0.
STM LBCH+16
LDD CA
DCHAN DROP CHANNEL
UJP LBC30 CHECK NEXT CHANNEL
LBC30.2 SHN 0-13
NJN LBC31 IF FIRMWARE NOT FOUND
LDC LBCG
LJM ADC ABORT FIRMWARE LOAD
LBC31 LDC =C* CTS FIRMWARE NOT FOUND.*
LJM ABT ABORT
LBC32 RJM ILM ISSUE FIRMWARE LOADED MESSAGE
LBC SUBR ENTRY/EXIT
LDC CHLI-1
STD SC
LDM DLYA
LPN 14
ZJN LBC2 IF 1X PPU SPEED
LPN 4
ZJN LBC1 IF 2X PP SPEED
DL2X EQU LDCI+40
DL4X EQU LCNI+0
LDC DL4X&DL2X INCREASE DELAY FOR 4X PPU SPEED
LBC1 LMC DL2X INCREASE DELAY FOR 2X PPU SPEED
STM LCMB
* LOAD FIRMWARE TO MTS CHANNEL. ALSO LOAD ATS AND MTS
* CONVERSION MEMORIES.
LBC2 AOD SC
LDI SC
LMC 7777
NJN LBC3 IF NOT END OF CHANNELS
LJM LBC17 PROCESS FSC CHANNELS
LBC3 SHN -5
LPN 7
LMN 4&7
ZJN LBC4 IF MTS CHANNEL
LMN 2&4
NJN LBC2 IF NOT ATS CHANNEL
RJM LCA LOAD ATS CONVERSION MEMORIES
UJN LBC2 LOOP FOR ALL CHANNELS
LBC4 LDM ILMA
ZJN LBC5 IF FIRMWARE NOT IN CM BUFFER YET
LJM LBC10 OUTPUT FIRMWARE TO CONTROLLER
LBC5 AOM ILMA INDICATE FIRMWARE IN BUFFER
LDD MA
CWM LBCF,ON MOVE RECORD NAME TO DIRECT CELLS
SBN 1
CRD AB
RJM CLD SEARCH LIBRARY DIRECTORY
NJN LBC6 IF FIRMWARE RECORD FOUND
LDC =C* MTS FIRMWARE NOT FOUND.*
LJM ABT ABORT
LBC6 CRD AB READ TRACK AND SECTOR
LDN FNTP GET SYSTEM EQUIPMENT
CRD CM
LDD CM READ SYSTEM FST
SHN 14
ADD CM+1
ERRNZ SYFO CODE DEPENDS ON SYSTEM FILE FNT POSITION
ADN FSTG
CRD CM
LDD CM
LPN 77
STD T5
SETMS READSYS
LDD AB+3 SET FILE POINTERS
STD T6 TRACK
LDD AB+4 SECTOR
STD T7
LDN 0 INITIALIZE SECTOR COUNT
STD AB+1
LBC7 LDC BFMS READ SECTOR
RJM RNS
ZJN LBC8 IF END OF FIRMWARE
STD AB SAVE WORD COUNT
AOD AB+1 COUNT SECTOR
LDD RA WRITE SECTOR TO CM
SHN 6
ADC /MTX/UIBF
LBCA EQU *-1
CWM BFMS+2,AB
LDD AB ADVANCE BUFFER ADDRESS
RAM LBCA
SHN -14
RAM LBCA-1
LDD AB
SHN -6
NJN LBC7 IF NOT END OF FIRMWARE
LBC8 ENDMS RETURN CHANNEL
* LDN 0 BUILD MESSAGE WITH PART NUMBER
STD T1
LDD AB WORD COUNT OF LAST SECTOR
STD PL
SHN 2
RAD PL BYTE COUNT OF LAST SECTOR
LBC9 LDM BFMS-6,PL
SCN 17
SHN 11-7
RAM LBCH+17,T1
LDM BFMS-6,PL
LPN 17
RAM LBCH+17,T1
AOD PL
AOD T1
LMN 4
NJN LBC9 IF MORE MESSAGE TO BUILD
* ENTER HERE IF FIRMWARE RECORD ALREADY IN CM BUFFER.
*
* (AB) = WORD COUNT OF LAST SECTOR.
* (AB+1) = NUMBER OF SECTORS.
LBC10 LDI SC GET TAPE CHANNEL
RJM CMD
NJP LBC2 IF CHANNEL DOWN
SFM *+2,CH ENSURE CHANNEL ERROR FLAG IS CLEAR
LDI SC SET EQUIPMENT NUMBER
LPC 7000
STD EQ
ADC F0414 ISSUE DEADSTART
RJM ICF
NJN LBC12 IF DEAD START FUNCTION ACCEPTED
LBC11 LDC LBCG
LJM ADC ABORT FIRMWARE LOAD
LBC12 ACN CH
LDC /MTX/UIBF+20 SET CM BUFFER ADDRESS (SKIP 77 TABLE)
STM LBCB
LDC ADCI
STM LBCB-1
LDN 0 INITIALIZE SECTOR COUNT
STD T1
LDN 100-20 SET TO SKIP 77 TABLE
STD T3
LBC13 LDD RA READ SECTOR FROM CM
SHN 6
ADC *
LBCB EQU *-1
CRM BFMS,T3
LDD T3 CONVERT WORDS TO BYTES
SHN 2
ADD T3
OAM BFMS,CH OUTPUT FIRMWARE
FJM *,CH
NJN LBC11 IF CONTROLLER ILL
LDD T3 RESET CM BUFFER ADDRESS
RAM LBCB
SHN -14
RAM LBCB-1
LDD HN SET TO OUTPUT FULL SECTOR
STD T3
AOD T1 ADVANCE SECTOR COUNT
SBD AB+1
LBCC ZJN LBC14 IF END OF MTS FIRMWARE
* ZJN LBC15 (FCS, ISMT,CMTS, CTS)
ADN 1
NJN LBC13 IF NOT LAST SECTOR
LDD AB SET WORD COUNT OF LAST SECTOR
STD T3
UJN LBC13 OUTPUT LAST SECTOR
LBC14 DCN CH+40 START BUFFER CONTROLLER
RJM LCM LOAD CONVERSION MEMORIES
LDD CA DROP CHANNEL
DCHAN
LJM LBC2 LOOP FOR ALL CHANNELS
LBC15 DCN CH+40 START ADAPTOR
LDD EQ
ADN F0012 GET STATUS
RJM ICF ISSUE FUNCTION
ZJN LBC16 IF LOAD ERROR
ACN CH+40
LCN 0
LBC15.1 FJM LBC15.2,CH
SBN 1
NJN LBC15.1 IF TIMEOUT NOT EXPIRED
UJN LBC16 ABORT FIRMWARE LOAD
LBC15.2 IAN CH+40
SFM LBC16,CH IF ERROR
DCN CH+40
SHN 21-13
MJN LBC16 IF ALERT SET
LDD CA DROP CHANNEL
DCHAN
RJM LCA LOAD CONVERSION TABLES
LBCE EQU *-2
* UJN *+2 CTS
LJM LBC18 LOOP FOR ALL CHANNELS
LBCD EQU *-1
* LJM LBC22 LOOP FOR ALL CHANNELS (CMTS)
* LJM LBC26 LOOP FOR ALL CHANNELS (ISMT)
* LJM LBC30 LOOP FOR ALL CHANNELS (CTS)
LBC16 LJM LBC11 ABORT FIRMWARE LOAD
LBCF VFD 42/0LFIRM66X,18/0
LBCG DATA C* C00 MTS FIRMWARE LOAD ERROR.*
LBCH DATA C* MTS FIRMWARE LOAD, PART NO.- 00000000.*
*LBCH DATA C* CTS FIRMWARE LOAD, MB468-D0X.* (CTS)
LBCI VFD 42/0LTAPEFSC,18/0
LBCJ VFD 30/0LCW63X,30/0
LBCK VFD 30/0LMB467,30/0
LCA SPACE 4,15
** LCA - LOAD CONVERSION MEMORY TO ATS CONTROLLER.
*
* ENTRY ((SC)) = E0CC WHERE E = EQUIPMENT AND CC = CHANNEL.
*
* EXIT CONVERSION TABLES LOADED.
*
* ERROR EXIT TO *ADC* IF LOAD ERRORS.
*
* USES T1, EQ.
*
* CALLS CCT, CMD, ICF.
*
* MACROS DCHAN.
LCA10 LDD CA RETURN TAPE CHANNEL
DCHAN
LCA SUBR ENTRY/EXIT
LDI SC SET EQUIPMENT NUMBER
LPC 7000
STD EQ
LDI SC RESERVE CHANNEL
RJM CMD
NJN LCAX IF CHANNEL DOWN
LDN 0
STD T1
LCA1 AOD T1 INCREMENT TABLE NUMBER
LMN 4
ZJN LCA10 IF ALL TABLES LOADED
LDD T1 SET TABLE NUMBER IN FORMAT PARAMETER
SHN 10
LMM LCAD
STM LCAC
LDD T1
LMN 3
ZJN LCA2 IF BCD LOAD
LDN 40 SET A/D MODE 1 IN FORMAT PARAMETER
RAM LCAC
LCA2 LDD EQ ISSUE FORMAT UNIT FUNCTION
ADN 4
RJM ICF ISSUE FUNCTION
ZJN LCA4 IF ERRORS
ACN CH OUTPUT PARAMETERS
LDN 2
OAM LCAC,CH
FJM *,CH
DCN CH+40
NJN LCA6 IF NOT ALL PARAMETERS TAKEN
LDM TMTC,T1 CONVERT MTS TABLE TO ATS READ TABLE
RJM CCT CONVERT CONVERSION TABLE
LDC BFMS SET BUFFER ADDRESS
STM LCAA
LDN 57 LOAD READ CONVERSION TABLE
LCA3 ADD EQ
RJM ICF ISSUE FUNCTION
LCA4 ZJN LCA7 IF LOAD ERRORS
ACN CH
LDD T1
LMN 3
ZJN LCA5 IF BCD LOAD
LDC 171D-128D
LCA5 ADC 128D
OAM *,CH OUTPUT CONVERSION TABLE
LCAA EQU *-1
FJM *,CH
DCN CH+40
LCA6 NJN LCA9 IF NOT ALL DATA TAKEN
LDD EQ GET STATUS
ADN 12
RJM ICF ISSUE FUNCTION
LCA7 ZJN LCA9 IF LOAD ERRORS
ACN CH
IAN CH+40
DCN CH+40
SHN 21-13
MJN LCA9 IF ALERT SET
LDM LCAA
LMC BFMS
NJN LCA8 IF WRITE TABLE LOADED
LDM LCAE-1,T1 SET TO LOAD WRITE TABLE
STM LCAA
LDC 257 ISSUE LOAD WRITE RAM FUNCTION
LJM LCA3 ISSUE FUNCTION
LCA8 LJM LCA1 INCREMENT TO NEXT TABLE
LCA9 LDC 2R A CHANGE MTS TO ATS IN MESSAGE
STM LCMC+4
LDD T1 SET TABLE IN ERROR
RAM LCMC+3
LDC LCMC SET MESSAGE ADDRESS
LJM ADC ABORT ATS CONVERSION TABLE LOAD
LCAC CON 0,0 UNIT FORMAT PARAMETERS
LCAD VFD 1/1,3/0,1/1,2/0,5/0 WORD 1 SKELETON
* ATS WRITE TABLE ADDRESSES.
LCAE CON ATANS TABLE 1 - ANSII
CON ATEBC TABLE 2 - EBCDIC
CON ATBCD TABLE 3 - EXTERNAL BCD
LCM SPACE 4,15
** LCM - LOAD MTS CONVERSION MEMORIES.
*
* ENTRY CHANNEL RESERVED.
* (EQ) = EQUIPMENT NUMBER.
*
* EXIT CONVERSION TABLES LOADED.
*
* ERROR EXIT TO *ADC* IF LOAD ERRORS.
*
* USES T1.
*
* CALLS ICF.
LCM SUBR ENTRY/EXIT
LDN 0
STD T1
LCM1 AOD T1
LMN 4
ZJN LCMX IF END OF MTS CONVERSION TABLES
LDM TMTC,T1 GET TABLE ADDRESS
STM LCMA
LDD T1
SHN 6
ADN 31
ADD EQ ADD EQUIPMENT NUMBER
RJM ICF
ZJN LCM3 IF LOAD ERRORS
ACN CH
LDD T1
LMN 3
ZJN LCM2 IF BCD LOAD
LDC 256D-64D
LCM2 ADC 64D
OAM *,CH
LCMA EQU *-1
FJM *,CH
DCN CH+40
NJN LCM3 IF DATA NOT TAKEN
LDC 200000 DELAY FOR MTS TABLE SORT
* LDC 400000 (2X PPU SPEED)
* LCN 0 (4X PPU SPEED)
LCMB EQU *-2
SBN 1
NJN *-1
LDN 12
ADD EQ ADD EQUIPMENT NUMBER
RJM ICF
ZJN LCM3 IF LOAD ERRORS
ACN CH
IAN CH+40
DCN CH+40
SHN 21-13
MJN LCM3 IF LOAD ERRORS
LJM LCM1 LOOP FOR ALL MTS CONVERSION TABLES
LCM3 LDD T1 SET TABLE IN ERROR
RAM LCMC+3
LDC LCMC
LJM ADC ABORT MTS LOAD
LCMC DATA C* C00, T0 MTS CONVERSION TABLE LOAD ERRORS.*
* TMTC - ADDRESS TABLE FOR MTS CONVERSION TABLES.
TMTC BSS 1
LOC 1
CON MTANS TABLE 1 - ANSII
CON MTEBC TABLE 2 - EBCDIC
CON MTBCD TABLE 3 - EXTERNAL BCD
LOC *O
BUF SPACE 4,10
CTAB CHTB CHANNEL TABLE
SPACE 4,10
USE BUFFER
ERRNG BFMS-* OVERFLOW TEST
ERRNG ERLA-* CODE OVERFLOWS *0CT*
ERRPL ERLA+5+ZCTL-ERLB *0CT* OVERFLOWS INTO BUFFER
PRS TITLE PRESET OVERLAY.
PRS SPACE 4,10
** PRS - INITIALIZE TAPE EXECUTIVE PRESET.
*
* EXIT TO *ITE* IF *MAGNET* INITIALIZATION.
* TO *REC* IF LEVEL 3 RECOVERY.
*
* CALLS LFT, SCS.
PRS BSS 0
RJM LFT LOAD FUNCTION TABLE
LDD IR+3
SHN 6
ADD RA
SHN 6
ADD IR+4 CHECK FOR LEVEL 3 RECOVERY
CRD CM
LDD CM+4
LMN 1
ZJN PRS1 IF *MAGNET* INITIALIZATION
LJM REC RECOVER
PRS1 RJM SCS SET CHARACTER SET TABLES
LJM ITE INITIALIZE TAPE EQUIPMENT
TITLE PRESET SUBROUTINES.
CCH SPACE 4,10
** CCH - CHECK CHANNEL.
*
* ENTRY (A) = EST CHANNEL BYTE.
* (CM - CM+4) = EST ENTRY *EQDE* WORD.
*
* EXIT CHANNEL ENTERED INTO TABLE IF NOT ALREADY THERE.
*
* ERROR EXIT TO *ABT* IF ERROR.
*
* USES T2, T3, T4.
CCH6 LDD CM CHECK FOR MTS/ATS CHANNEL
LPN 14
NJN CCH7 IF ISMT/CMTS CHANNEL
LDD CM
SHN -3
LPN 70
CCH7 SHN -3
SHN 5
STD T2
LDM CHLI,T3
LPC 437
LMD T2
STM CHLI,T3
LDD CM+3
SHN 21-10
MJN CCH8 IF NOT CTS
LDC 340
RAM CHLI,T3 SET CTS CONTROLLER TYPE
CCH8 LDD CM+4 SET CONTROLLER NUMBER
LPC 7000
RAM CHLI,T3
CCH SUBR ENTRY/EXIT
LPN 37 SET CHANNEL NUMBER
STD T4
LCN 0 INITIALIZE CHANNEL COUNT
STD T3
CCH1 AOD T3 INCREMENT CHANNEL COUNT
LMN /MTX/MCHAN
NJN CCH2 IF NOT TOO MANY TAPE CHANNELS
LDC =C* MORE THAN 8 TAPE CHANNELS.*
LJM ABT ABORT
CCH2 LDD T3
LMM CHCN
ZJP CCH4 IF END OF CHANNEL LIST
LDM CHLI,T3
LMD T4
LPN 37
NJN CCH1 IF NO CHANNEL MATCH
* COMPARE CONTROLLER TYPES.
LDD CM+3
SHN 21-10
MJN CCH2.0 IF NOT CTS
LDM CHLI,T3
SHN -5
LPN 7
LMN 7
UJN CCH3.1 COMPARE CONTROLLER TYPES
* THE FOLLOWING SIX LINES CLEAR THE ATS BIT IN 1MT-S COPY OF
* THE EST ENTRY IF THE EST CONTROLLER TYPE IS CMTS. THIS
* ALLOWS THE COMPARISON OF THE *CHLI* CONTROLLER TYPE AND THE
* EST CONTROLLER TYPE TO WORK CORRECTLY FOR CMTS.
CCH2.0 LDD CM
SHN 21-2
PJN CCH2.1 IF NOT CMTS
SCN 20 CLEAR ATS BIT
SHN 3
STD CM
CCH2.1 LDM CHLI,T3
SHN 21-7
PJN CCH3 IF MTS STATUS NOT SET IN TABLE
LPC 577777 CLEAR BLOCK - ID DISABLE BIT
CCH3 SHN 11
LMD CM
LPC 700
CCH3.1 NJN CCH5 IF CONTROLLER TYPE MISMATCH
LDM CHLI,T3
LMD CM+4
SHN -11
NJN CCH5 IF EQUIPMENT MISMATCH
LDM CHLI,T3
LJM CCHX EXIT
CCH4 LDD T4 SAVE CHANNEL IN TABLE
STM CHLI,T3
AOM CHCN INCREMENT CHANNEL COUNT
LJM CCH6 SET CONTROLLER TYPE
CCH5 LDC =C* CONTROLLER TYPE/EQUIPMENT MISMATCH ON CHANNEL.*
LJM ABT ABORT
EST SPACE 4,10
** EST - EST PRE-PROCESSOR.
*
* EXIT *CHLI* TABLE BUILT.
* TO *ABT* IF NO TAPE EQUIPMENT FOUND.
*
* USES SC, T5, CM - CM+4.
*
* CALLS CCH, CTE.
*
* MACROS SFA.
EST SUBR ENTRY/EXIT
LDK ESTP READ EST POINTER
CRD CM
LDD CM+2 SET LAST EST ORDINAL + 1
STD SC
* FIND MAXIMUM NUMBER OF TAPE CHANNELS.
LDN NOPE-1 INITIALIZE EST ORDINAL FOR SEARCH
STD T5
EST1 AOD T5 ADVANCE EST ORDINAL
LMD SC
NJN EST2 IF NOT END OF EST
LDM CHCN
NJN ESTX IF TAPES FOUND
LDC =C* NO TAPE EQUIPMENT.*
LJM ABT ABORT
EST2 SFA EST,T5 READ EST ENTRY
ADK EQDE
CRD CM
LDD CM+3
RJM CTE CHECK FOR TAPE EQUIPMENT
MJN EST1 IF NOT TAPE EQUIPMENT
* COUNT NUMBER OF CHANNELS.
LDD CM+1 CHECK FIRST CHANNEL
RJM CCH CHECK CHANNEL
LDD CM+2
ZJN EST1 IF NO SECONDARY CHANNEL
RJM CCH CHECK CHANNEL
UJN EST1 CHECK NEXT EQUIPMENT
ERRNG BFMS-* OVERFLOW TEST
LFT SPACE 4,10
** LFT - LOAD 1MT FUNCTION TABLE INTO MAGNET FL.
*
* USES T1.
LFT SUBR ENTRY/EXIT
LDN TFUNC SET FUNCTION TABLE LENGTH
STD T1
LDD RA
SHN 6
ADN /MTX/TFUN WRITE FUNCTION TABLE
CWM TFUN,T1
UJN LFTX RETURN
REC SPACE 4,10
** REC - RECOVER MAGNET.
*
* EXIT TO *ITE1* TO SET COMPLETION RESPONSE.
*
* MACROS NFA.
REC LDD CP CHECK IDLEDOWN BIT IN CPA
ADN SNSW
CRD CM
LDD CM+3
LPN 4
ZJN REC1 IF IDLEDOWN NOT SET
LDD RA RESET IDLEDOWN IN RA+0
SHN 6
CRD CM
LDD CM+3
SCN 2
LMN 2
STD CM+3
LDD RA REWRITE RA+0
SHN 6
CWD CM
REC1 LDD CP RESET COMMANDS FOR RECOVERY
ADN CSPW
CRD CM
LDC CSBN RESET TO BEGINNING OF BUFFER
STD CM+3
SBN TCML+1 SET LIMIT POINTER
STD CM+4
LDN TCML
STD T1
NFA CM+3,R
CWM TCCB,T1 WRITE RECOVERY COMMANDS
LDD CP UPDATE COMMAND POINTER
ADN CSPW
CWD CM
LJM ITE1 SEND RESPONSE TO *MAGNET*
* TABLE OF COMMANDS.
TCCB BSS 0
VFD 60/8LMAGNET1.
VFD 60/6L$EXIT.
VFD 60/8LMAGNET1.
VFD 60/8L$REVERT.
VFD 60/6L$EXIT.
VFD 60/10H$REVERT,AB
VFD 60/4LORT.
TCCBL EQU *-TCCB
TCML EQU TCCBL/5 TABLE LENGTH IN CM WORDS
SCS SPACE 4,20
** SCS - SET 63 CHARACTER SET OPTION IF SELECTED.
*
* ENTRY (IPRL, 24) = 0 IF 63 CHARACTER SET.
* = 1 IF 64 CHARACTER SET.
*
* *CSET* TABLE FORMAT -
* CON LOC,CONT
* LOC = LOCATION OF CHANGE.
* CONT = CONTENTS OF CHANGE.
* 0 IN LOC FIELD = END OF TABLE.
*
* *CSETP* TABLE FORMAT - (USED FOR ATS 9 TRACK TABLES
* WHERE 3 FRAMES ARE PACKED INTO 2 PP BYTES)
* CON LOC,CONT1,CONT2
* LOC = LOCATION OF CHANGE.
* CONT1 = CONTENTS OF *LOC*
* CONT2 = CONTENTS OF *LOC*+1
* 0 IN LOC FIELD = END OF TABLE.
*
* EXIT CHARACTER TABLES MODIFIED IF 63 CHARACTER SET.
SCS SUBR ENTRY/EXIT
LDN IPRL CHECK CONVERSION MODE
CRD CM
LDD CM+2
LPN 1
NJN SCSX IF 64 CHARACTER SET
LDC CSET MODIFY TABLES
SCS1 STD T1
LDI T1
SCS2 STD T2
LDM 1,T1
STI T2
SCSA UJN SCS3 FOR C63 TABLE
* AOD T1 (C63P TABLE)
AOD T2
LDM 1,T1
STI T2
SCS3 LDN 2
RAD T1
LDI T1
NJN SCS2 IF MORE INSTRUCTIONS TO MODIFY
SCSB LDN 0
NJN SCSX IF BOTH TABLES PROCESSED
AOM SCSB SET EXIT
LDC AODI+T1 MODIFY INSTRUCTION
STM SCSA
LDC CSETP PROCESS C63P TABLE
UJN SCS1 MODIFY INSTRUCTIONS FOR THIS TABLE
* CONVERSION INFORMATION FOR 64 TO 63 CHARACTER SET.
CSET BSS 0
C63 HERE
CON 0 END OF TABLE
CSETP BSS 0
C63P HERE
CON 0 END OF TABLE
FUN SPACE 4,15
** FUN - DEFINE FUNCTION PROCESSOR.
*
*
*TNAM FUN TYPE,NAME,SNAME,RNB,UCP
* ENTRY *TNAM* = FWA OF TABLE IS SET TO TNAM.
* *TYPE* = FUNCTION NUMBER.
* *NAME* = NAME OF FUNCTION PROCESSOR.
* *SNAME* = NAME OF ADDITIONAL OVERLAY TO BE LOADED.
* *RNB* = FUNCTION REQUIRES READY AND NOT BUSY.
* *UCP* = FUNCTION TO BE DONE AT USERS CONTROL POINT.
MACRO FUN,A,B,C,D,E,F
.F1 IFC NE,*A**
A BSS 0
.2 SET A
.F1 ELSE
ORG .2+5*B-5
.F2 IFC NE,*C**
LOC B
.1 SET 0
IFC NE,*E**,1
.1 SET .1+40
IFC NE,*F**,1
.1 SET .1+20
.F3 IFC NE,*D**
CON D/10000*100+.1+C/10000-D/10000,C-C/10000*10000
.F3 ELSE
CON C/10000*100+.1,C-C/10000*10000
.F3 ENDIF
.F2 ENDIF
BSS 0
.F1 ENDIF
ENDM
TFUN SPACE 4,15
** TFUN - TABLE OF FUNCTION CODE PROCESSORS.
* ENTRY = 2 WORDS.
*
*T, 6/ OV,1/B,1/U,4/ AO,12/ ADDR
* OV OVERLAY NAME THIRD CHARACTER.
* B FUNCTION REQUIRES NOT BUSY. (SEE NOTE)
* U FUNCTION TO BE DONE AT USER,S CONTROL POINT.
* AO ADDITIONAL OVERLAY REQUIRED IF NONZERO. OV PLUS
* AO IS THE SECOND OVERLAY NAME THIRD CHARACTER.
* ADDR ADDRESS OF FUNCTION PROCESSOR. *CPP* JUMPS TO
* THIS ADDRESS.
*
* NOTE THIS FLAG ALSO INDICATES THAT THE FUNCTION REQUIRES
* A FORMAT UNIT FUNCTION TO BE ISSUED FOR MTS AND ATS
* UNITS. SEE ROUTINE *CCD* IN CONTROL POINT PRESET
* OVERLAY.
BSS 0
TFUN FUN
FUN /MTX/SED,SED SET EQUIPMENT DEFINITION
FUN /MTX/FNH,PFN PROCESS FUNCTION
FUN /MTX/SKP,SKP,RDF,RNB SKIP
FUN /MTX/OPF,OPF,,,UCP OPEN
FUN /MTX/RDF,RDF,,RNB,UCP READ
FUN /MTX/RLA,RLA,RDF,RNB READ LABEL(S)
FUN /MTX/WTF,WTF,,RNB,UCP WRITE
FUN /MTX/WLA,WLA,WTF,RNB WRITE LABEL(S)
FUN /MTX/MDFN
TFUNL EQU *-TFUN
TFUNC EQU TFUNL/5 CM WORD LENGTH
ERRNZ TFUNC-/MTX/MDFN+1 *1MT*/*COMSMTX* OUT OF SYNC
OVERFLOW PPFW,EPFW
OVERLAY (FUNCTION REJECT PROCESSOR.),(ERLA+5),P
FRP SPACE 4,10
** FRP - FUNCTION REJECT PROCESSOR.
*
* CALLS CUI, DME, ERR, MCH, PCR, STC, STW.
*
* MACROS CHTE.
*
* THE FOLLOWING ARE THE POSSIBLE ACTIONS TAKEN FOR
* A FUNCTION REJECT ON AN MTS TAPE CONTROLLER -
*
* 1) IF CHANNEL ACTIVE EXIT WITH CHANNEL MALFUNCTION.
*
* 2) ESTABLISH MTS BUFFER CONTROLLER IS RUNNING.
*
* 3) IF NOT RUNNING TRY TO RESTART OPERATION BY AUTO-LOAD.
* THIS IS ATTEMPED TWICE TO COVER THE CASE WHERE THE
* COUPLER LOCKS UP WITH DATA IN ITS INTERNAL BUFFER
* AND TWO AUTO-LOADS ARE REQUIRED TO FREE THE COUPLER.
*
* 4) IF NOT SUCCESSFUL EXIT WITH CHANNEL MALFUNCTION.
*
* 5) SEE PRECEDING STEP 2.
*
* 6) IF RELEASE FUNCTION EXIT.
*
* 7) IF STOP TAPE MOTION FUNCTION, RECONNECT UNIT AND EXIT.
*
* 8) GET GENERAL AND DETAILED STATUS.
*
* 9) IF ALERT NOT SET, EXIT WITH CHANNEL MALFUNCTION.
*
* 10) IF ERROR CODE NOT SET IN DETAILED STATUS, EXIT
* WITH CHANNEL MALFUNCTION.
*
* 11) IF ERROR CODE 4 SET, EXIT WITH READY DROP.
*
* 12) IF ERROR CODE 54B OR 55B SET, EXIT
* WITH CHANNEL MALFUNCTION.
*
* 13) IF ANY OTHER ERROR CODE, EXIT WITH FUNCTION REJECT.
*
* THE FOLLOWING ARE THE POSSIBLE ACTIONS TAKEN FOR
* A FUNCTION REJECT ON AN ATS CONTROLLER.
*
* 1) IF CHANNEL ACTIVE, EXIT WITH CHANNEL MALFUNCTION.
*
* 2) IF NOT FIRST ERROR, EXIT WITH CHANNEL MALFUNCTION.
*
* 3) GET GENERAL AND DETAILED STATUS.
*
* 4) IF ALERT NOT SET, EXIT WITH CHANNEL MALFUNCTION.
*
* 5) IF CHANNEL OR TCU PARITY ERROR, EXIT WITH
* CHANNEL MALFUNCTION.
*
* 6) IF ERROR CODE 4 SET IN DETAILED STATUS, EXIT
* WITH READY DROP.
*
* 7) EXIT WITH FUNCTION REJECT.
FRP SUBR ENTRY/EXIT
LDC FRPD MODIFY CHANNELS
RJM MCH
LDD EC
LMN /MTX/CRJ
ZJP PCR IF CONNECT REJECT
LDM //STCB SAVE CHANNEL STATUS
STM //.OVLR+2
LDC LDNI+0 SET TO FORCE DROP OUT
STM //PNRC
LDM //FCND SAVE FUNCTION REJECTED
STM //.OVLR
LDM //FCN SAVE ADDRESS OF CALLER
STM //.OVLR+1
LDC //ERR INSURE CORRECT EXIT SET IN *STW*
STM //STWC
LDC RJMI
STM //STWC-1
IJM FRP4,CH IF CHANNEL OK
FRP3 LJM FRP12 GIVE FATAL ERROR
FRP4 LDD HP
LPC 540
NJN FRP5 IF MTS/FSC/CMTS/ISMT ADAPTOR
LDM FRPB
STM FRPA
LJM FRP10 PROCESS ATS CONTROLLER
FRP5 LDN 0 SET ERROR ENCOUNTERED FLAG
STM //FCNC
FNC 0,CH VERIFY B.C. RUNNING
RJM STC
ZJN FRP8 IF B.C. RUNNING
LDN 2 NUMBER OF ATTEMPTS TO RESTART B.C.
STD T1
LDN 0 CLEAR CONNECTED FLAG
STM //RELA
FRP6 SOD T1
FRP7 MJN FRP3 IF CANNOT RESTART B.C.
FNC 414,CH RESTART B.C.
RJM STC STATUS CHANNEL
NJN FRP6 IF CHANNEL ILL
ACN CH
OAN CH+40
DCN CH+40
STM //.OVLR+3 INIDICATE B.C. RESTARTED
FRP8 LDD T6
SHN 21-13
MJN FRP7 IF OVERLAY NOT CM RESIDENT
LDM //FCND CHECK FUNCTION
LMN 1
ZJN FRP9 IF RELEASE FUNCTION
LMN 11&1
NJN FRP10 IF NOT STOP TAPE MOTION
LDM //RELA
NJN FRP9 IF UNIT CONNECTED
RJM CUI REFORMAT UNIT
FRP9 LDM //.OVLR+1 RESET RETURN ADDRESS
STM //FCN
LDN 0
LJM //FCNX RETURN
FRP10 LDM FCNC
ZJN FRP12 IF ERROR ALREADY ENCOUNTERED
LDN 0
STM //FCNC SET ERROR ENCOUNTERED FLAG
RJM STW GET STATUS
SHN 21-13
PJN FRP12 IF NO ALERT
LDM MTDS
FRPA LPN 77
* UJN FRP14 (ATS CONTROLLER)
ZJN FRP12 IF NO ERROR CODE
LMN 4
ZJN FRP11 IF READY DROP
LMN 54-4
ZJN FRP12 IF OUTPUT PARITY ON PARAMETER ISSUE (54B)
LMN 55-54
ZJN FRP12 IF OUTPUT PARITY ON FUNCTION ISSUE (55B)
LDN /MTX/FRJ&/MTX/RDR
FRP11 LMN /MTX/RDR
UJN FRP13 SET ERROR CODE
FRP12 LDN /MTX/CMF
FRP13 STD EC
LDM //.OVLR+2 RESTORE CHANNEL STATUS
STM STCB
LDD DS
STM //STER
LDM FRPC PREVENT FURTHER FUNCTION REJECT
STM //MCCA
LDD EC
RJM ERR GIVE FATAL ERROR
FRP14 LPC 600
NJN FRP12 IF CHANNEL OR TCU PARITY ERROR
LDM MTDS
LPC 177
LMN 4
ZJN FRP11 IF NOT READY
LDN /MTX/FRJ FUNCTION REJECT
UJN FRP13 EXIT
FRPB BSS 0
LOC FRPA
UJN FRP14 CHECK STATUS
LOC *O
FRPC BSS 0
LOC //MCCA
UJN //MCCX RETURN
LOC *O
PCR SPACE 4,15
** PCR - PROCESS CONNECT REJECT.
*
* ENTRY (EC) = ERROR CODE.
*
* EXIT TO ERROR MESSAGE OVERLAY IF NOT INITIAL CONNECT OR IF
* UNIT DOWNED.
*
* USES CM - CM+4, CN - CN+4.
*
* CALLS ERR, UAD.
*
* MACROS MONITOR.
PCR BSS 0 ENTRY
LDM //STW CHECK IF INITIAL CONNECT
LMC //.ECUI
NJN PCR1 IF NOT INITIAL CONNECT
RJM UAD
ADK /MTX/UXRQ
CRD CM
ADK /MTX/UVRI-/MTX/UXRQ
CRD CN
LDD CN
NJN PCR2 IF JOB ASSIGNED
* DOWN UNIT.
RJM UAD
ADK /MTX/UST2 SET UP DIRECT CELLS FOR MESSAGE
CRM EI,TR
LDD EO SET EST ORDINAL
STD CM+1
LDN /CPS/DWES SET *DOWN* STATUS
STD CM+2
MONITOR SEQM SET EQUIPMENT PARAMETER
PCR1 LDD DS SET STATUS FOR MESSAGE
STM //STER
LDN /MTX/CRJ SET CONNECT REJECT
RJM ERR EXIT TO ISSUE MESSAGE
PCR2 LDD CM
NJN PCR3 IF REQUEST IN PROGRESS
LDD CM+1
LPN 77
NJN PCR4 IF REQUEST PENDING
PCR3 LJM //PNR PROCESS NEXT UNIT
* INTERLOCK REQUEST.
PCR4 LDM UADA SET UDT ADDRESS
STD CM+1
LDN 0 IGNORE BUSY STATUS
STD CM+2
MONITOR TDRM SET REQUEST IN PROGRESS
LDD CM+4
ZJN PCR3 IF REQUEST NOT INTERLOCKED
RJM UAD GET UDT INFORMATION
ADK /MTX/UXRQ
CRD RS
ADK /MTX/UST2-/MTX/UXRQ
CRM EI,TR
ADK /MTX/UST5-/MTX/UST4-1
CRM DNCV,ON
ADK /MTX/UDS4-/MTX/UST5-1
CRM MTSF,TR
ADK /MTX/UERC-/MTX/UDS6-1
CRM ECNT,ON
LDN /MTX/CRJ SET CONNECT REJECT
LJM RET3 RETURN ERROR
FRPD CHTB CHANNEL TABLE
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
ERRNG 2*473+ERLA+5-* FUNCTION REJECT PROCESSOR OVERFLOW
OVERLAY (MTS/ATS ERRLOG MESSAGE PROCESSOR.),(ERLA+5),P,EMM
EMM SPACE 4,10
** EMM - MTS ERRLOG MESSAGE PROCESSOR.
* THIS OVERLAY MAY BE CALLED BY ANY PART OF THE PROGRAM
* TO ISSUE A SUITABLE MESSAGE TO THE ERRLOG. IN ADDITION IF
* IT IS CALLED FROM THE MAIN PROGRAM IT ALSO PROCESSES THE
* ERROR.
*
* CALLS BDM, IDM, *3MD*.
*
* MACROS EXECUTE.
ENTRY EMM
EMM SUBR ENTRY/EXIT
RJM BDM BUILD MESSAGE
LDM EMMA
ZJN EMM3 IF NO MESSAGE OR SPECIAL PROCESSOR
SBN MAXM
MJN EMM4 IF SPECIAL PROCESSOR NEEDED
EMM1 LCN 0 MOVE MESSAGE
STD T1
EMM2 AOD T1
LDM *,T1
EMMA EQU *-1
STM MESE+13,T1
NJN EMM2 IF NOT END OF MESSAGE
EMM3 LDD HP
* UJN EMM5 (*3MD* ALREADY EXECUTED)
EMMB EQU *-1
LPC 500
ZJN EMM5 IF NOT FSC/CMTS/ISMT ADAPTOR
EMM4 EXECUTE 3MD LOAD SPECIAL PROCESSOR
EMMC UJN EMM1 GO MOVE MESSAGE
* PSN (NO MESSAGE TO MOVE)
* ISSUE MESSAGES.
EMM5 LDN ERLN/10000 ISSUE MESSAGE TO ERROR LOG
RJM IDM
LDM CECB
EMMD LPN 77
* LPN 0 (MESSAGE ISSUE TO USER DISABLED)
ZJN EMM6 IF AT MAGNET CP
LDN CPON/10000 ISSUE MESSAGE TO USER
RJM IDM
EMM6 LJM EMMX RETURN
MES SPACE 4,10
*** MESSAGE DATA.
* MESSAGES ARE ISSUED IN THE FOLLOWING FORMAT-
* MT,C13-0-02,ABCDEF,RD, 753,S0,GS00000000
* MT,C13,D00000000000000000000000000000000
* MT,C13,U000000000000000000000000,T0000.
* MT,C13,A0000000000000000000000000000.
* MT,C13,F04,I13,B000123,L5004,P00000000.
* MT,C13,E00,H00000000, .(ADDITIONAL INFORMATION.)
*
* THE FIRST MESSAGE WOULD TELL THE FOLLOWING-
*
* 1) CHANNEL 13, EQUIPMENT 0, UNIT 2.
* 2) VOLUME SERIAL NUMBER IS *ABCDEF*.
* 3) OPERATION WAS A READ. (ANY OPERATION NOT INVOLVING
* AN ACTUAL READ OR WRITE WILL BE CALLED A READ.
* 4) EST ORDINAL *753* IS THE UNIT THAT THE TAPE WAS LAST
* LABELED ON. THIS WILL ONLY BE AVAILABLE FOR LABELED
* TAPE GENERATED UNDER KRONOS 2.1 OR NOS. IT WILL
* NORMALLY BE ZERO IN ALL OTHER CASES. THIS FIELD DOES
* NOT REPRESENT THE EST ORDINAL OF THE TAPE UNIT THAT
* THE TAPE IS CURRENTLY MOUNTED ON.
* 5) CHANNEL STATUS.
* 6) GENERAL STATUS OF TAPE UNIT.
* 7) BLOCK ID BYTE. ( LOWER 12 BITS OF GENERAL STATUS)
*
* THE SECOND MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13 - THIS IS REPEATED SO THAT IF ERRORS
* ARE OCCURING ON MORE THAN ONE TAPE CHANNEL AT THE
* SAME TIME THE TWO MESSAGES CAN BE ASSOCIATED.
* 2) DETAILED STATUS OF THE UNIT.
* FOR FSC/CMTS/ISMT THIS IS WORD 3 OF ATS MAPPED STATUS
* AND WORDS 1 - 7 OF SENSE BYTE STATUS.
*
* THE THIRD MESSAGE (NOT MTS) WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) UNIT STATUS.
* FOR FSC/CMTS/ISMT THIS IS WORDS 8 - 13 OF SENSE BYTE
* STATUS.
* 3) THIRD BYTE OF FORMAT PARAMETERS.
*
* THE FOURTH MESSAGE (FSC/CMTS/ISMT ONLY) WOULD TELL THE
* FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) THE ADDITIONAL SENSE BYTE STATUS (WORDS 14 - 20) NOT
* PLACED IN DETAILED STATUS OR UNIT STATUS FIELDS.
*
* THE FIFTH MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) THE ERROR OCCURED ON A SOFTWARE FUNCTION 4.
* 3) ERROR ITERATION.
* 4) BLOCK NUMBER ERROR OCCURRED ON WAS 123.
* 5) BLOCK LENGTH WAS 5004 BYTES.
* 6) *1MT* INTERNAL ERROR PARAMETERS.
*
* THE SIXTH MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13 - SAME AS ABOVE.
* 2) OCTAL ERROR CODE VALUE.
* 3) UNIT FORMAT PARAMETERS. SEE 66X/67X MANUAL FOR FIELD
* DEFINITIONS OF FORMAT SELECTION.
* 4) ADDITIONAL DESCRIPTION.
**** MESSAGE DATA.
MESA DATA H*MT,C00-0-00, ,RD, ,S0,GS00000000*
CON 0
MESB DATA H*MT,C00,D00000000000000000000000000000000*
CON 0
MESC DATA H*MT,C00,U000000000000000000000000,T0000. *
CON 0
MESD DATA H*MT,C00,F00,I00,B000000,L0000,P00000000. *
CON 0
MESE DATA C*MT,C00,E00,H00000000, .*
MESL EQU MESE+MESB-MESA+1
TERM SPACE 4,10
TERM INDEX
INDEX 0,(=C*REC.*)
INDEX /MTX/OPA,(=C*OPA.*)
INDEX /MTX/BTL,(=C*BTL.*)
INDEX /MTX/BNE,BNEM
INDEX /MTX/NBE,(=C*NBE.*)
INDEX /MTX/OTF,(=C*OTF.*)
INDEX /MTX/RDR,WEOM
INDEX /MTX/FRJ,FRJM
INDEX /MTX/WEO,WEOM
INDEX /MTX/CRJ,CRJM
INDEX /MTX/STE,(=C*STE.*)
INDEX /MTX/ERA,(=C*ERA.*)
INDEX /MTX/PLO,(=C*PLO.*)
INDEX /MTX/CMF,(=C*CMF.*)
INDEX /MTX/BCR,(=C*BCR.*)
INDEX /MTX/SMF,(=C*SMF.*)
INDEX /MTX/SMB,(=C*SMB.*)
INDEX /MTX/MDW,(=C*MDW.*)
INDEX /MTX/MOF,(=C*MOF.*)
INDEX /MTX/LCH,(=C*LCH.*)
INDEX /MTX/RCE,(=C*RCE.*)
INDEX /MTX/MWT,(=C*MWT.*)
INDEX /MTX/WVF,(=C*WVF.*)
INDEX /MTX/TME,(=C*TME.*)
INDEX /MTX/TCF,(=C*TCF.*)
INDEX /MTX/BFR,(=C*BFR.*)
INDEX /MTX/BFW,(=C*BFW.*)
INDEX /MTX/MERC
****
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
SPACE 4,10
** ERRORS REQUIRING ADDITIONAL OVERLAY TO BE LOADED.
BEGM BSS 0
LOC 1
FRJM BSS 1 FUNCTION REJECT
WEOM BSS 1 NO END OF OPERATION
CRJM BSS 1 CONNECT REJECT
BNEM BSS 1 BLOCK SEQUENCE ERROR
MAXM BSS 1 MAXIMUM SPECIAL ERRORS
ORG BEGM
TITLE SUBROUTINES.
CDA SPACE 4,10
** CDA - CONVERT DATA (4 DIGITS).
*
* ENTRY (A, 17 - 12) = ADDRESS WHERE DATA CONTAINED.
* (A, 11 - 0) = ADDRESS WHERE TO STORE RESULT.
*
* CALLS C2D.
*
* USES T2, T3.
CDA SUBR ENTRY/EXIT
STD T3 SAVE DESTINATION ADDRESS
SHN -14
STD T2 SAVE DATA ADDRESS
LDI T2 CONVERT FIRST 2 DIGITS
SHN -6
RJM C2D
STI T3
LDI T2 CONVERT SECOND 2 DIGITS
RJM C2D
STM 1,T3
UJN CDAX RETURN
CDN SPACE 4,10
** CDN - CONVERT DATA (N DIGITS)
*
* ENTRY (A, 17 - 12) = LENGTH OF DATA.
* (A, 11 - 0) = SOURCE OF DATA TO CONVERT.
* (CN+3) = DESTINATION OF CONVERTED DATA.
*
* CALLS CDA.
*
* USES CN - CN+2
CDN SUBR ENTRY/EXIT
STD CN+1 SAVE ADDRESS OF DATA TO CONVERT
SHN -14 SAVE LENGTH
STD CN+2
CDN1 LDI CN+1 CONVERT ONE BYTE OF DATA
STD CN
LDC CN*10000
ADD CN+3
RJM CDA
LDN 2
RAD CN+3
AOD CN+1
SOD CN+2
NJN CDN1 IF NOT COMPLETE
UJN CDNX RETURN
IDM SPACE 4,10
** IDM - ISSUE DAYFILE MESSAGES.
*
* ENTRY (A) = MESSAGE DESTINATION CODE
* (IDMA) = ADDRESS OF MESSAGE LINES TABLE.
*
* EXIT MESSAGE LINES DEFINED IN THE *IDMC* TABLE ARE ISSUED.
*
* USES T8.
*
* CALLS DFM.
IDM SUBR ENTRY/EXIT
LMC LMCI SET MESSAGE DESTINATION CODE
STM IDMB
LDN 0 INITIALIZE MESSAGE INDEX
STD T8
* LOOP UNTIL ALL MESSAGE LINES ARE ISSUED TO THE DAYFILE.
IDM1 LDM IDMC,T8 GET NEXT MESSAGE POINTER
* LDM IDMD,T8 (4 LINES OF MESSAGE)
* LDM /3M /FSCA,T8 (6 LINES OF MESSAGE)
IDMA EQU *-1
ZJN IDMX IF ALL MESSAGES ISSUED
LMC ** ADD MESSAGE DESTINATION
IDMB EQU *-2 (MESSAGE DESTINATION CODE)
RJM DFM ISSUE DAYFILE MESSAGE
AOD T8 ADVANCE MESSAGE INDEX
UJN IDM1 ISSUE NEXT MESSAGE LINE
* TABLE OF MESSAGE LINE POINTERS FOR 5 LINES.
IDMC BSS 0
LOC 0
CON MESA LINE 1
CON MESB LINE 2
CON MESC LINE 3
CON MESD LINE 4
CON MESE LINE 5
CON 0 TERMINATOR
LOC *O
* TABLE OF MESSAGE LINE POINTERS FOR 4 LINES.
IDMD BSS 0
LOC 0
CON MESA LINE 1
CON MESB LINE 2
CON MESD LINE 3
CON MESE LINE 4
CON 0 TERMINATOR
LOC *O
RUW SPACE 4,10
** RUW - READ UNIT DESCRIPTOR TABLE WORD.
* USED TO READ UDT WHEN POSSIBLY NOT AT MAGNET CP.
*
* ENTRY (A) = UDT WORD.
*
* EXIT (CN - CN+4) = WORD READ.
*
* USES T1, CM - CM+4, CN - CN+4.
*
* MACROS DELAY, MONITOR, PAUSE.
RUW2 LDD MA
CRD CN
RUW SUBR ENTRY/EXIT
STD T1
RUW1 LDM UADA
ADD T1
STD CM+4
LDD HN REQUEST 1 WORD
STD CM+3
LDN 0 REQUEST READ FROM *MAGNET*
STD CM+1
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
LMN 1
NJN RUW2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN RUW1 REISSUE REQUEST
TITLE OVERLAY AREA.
ERRNG ERLB-* IF OVERFLOW INTO OVERLAY AREA
* NOTE - THE FOLLOWING CODE MAY BE OVERLAID IF THE
* SPECIAL ERROR MESSAGES OVERLAY IS REQUIRED.
BDM SPACE 4,15
** BDM - BUILD MESSAGE.
*
* EXIT MESSAGE BUILT EXCEPT FOR DESCRIPTIVE MESSAGE IN LAST
* LINE OF MESSAGE.
* (EMMD) MODIFIED IF MESSAGE ISSUE TO USER DISABLED.
* *EMM* EXIT SET TO *RET4* IF CALLED FROM *ERR* AND
* REQUEST IN PROGRESS.
* *EMM* EXIT SET TO *PNR* IF CALLED FROM *ERR* AND
* REQUEST NOT IN PROGRESS.
*
* CALLS CDA, CDN, C2D, HNG, MCH, RUW, SCS, UAD.
*
* MACROS CHTE, SFA.
BDM SUBR ENTRY/EXIT
* CHECK CALL TYPE.
LDC CTAB MODIFY CHANNELS
RJM MCH
LDM //LOV CHECK CALL ORIGIN
LMC .EERR
NJN BDM2 IF NOT CALLED FROM *ERR*
LDD RS
LMN /MTX/RIP
ZJN BDM1 IF REQUEST IN PROGRESS
LDC //PNR&//RET4
BDM1 LMC //RET4
STM //LOV
LDM //ERR
ADC -OVL
MJN BDM4 IF *ERR* CALLED FROM RESIDENT
BDM2 LDM //STER USE STATUS WHEN ERROR OCCURRED
STD DS
* CHECK VALIDITY OF ERROR CODE.
BDM4 LDD EC
SBN /MTX/MERC
MJN BDM5 IF VALID ERROR CODE
RJM HNG HANG PP
BDM5 LDN 0 CLEAR ERROR TYPE INDICATOR
STM //ERR
LDM TERM,EC SAVE TABLE ENTRY
STM EMMA
LDD EC
LMN /MTX/LCH
NJN BDM6 IF NOT LOAD CHECK ERROR
AOM //RELA SET UNIT CONNECTED
RJM UAD SET UP DIRECT CELLS FOR MESSAGE
ADN /MTX/UST2
CRM EI,TR
* MESSAGE BUILD.
BDM6 LDD HP SET DEVICE TYPE IN MESSAGE LINES
LPN 1
SHN 6
ADC 2RMT
RJM SCS SET CHARACTERS
CHTE * SET CHANNEL NUMBER
LDN CH
RJM C2D
ADC 2*10000
RJM SCS
SFA EST,EO GET EQUIPMENT AND UNIT NUMBER
ADK EQDE
CRD CM
LDD CM+4 SET EQUIPMENT NUMBER
SHN -11
RAM MESA+3
LDD CM+4 SET UNIT NUMBER
SHN -3
LPN 1
RAM MESA+4
LDD CM+4
LPN 7
SHN 6
RAM MESA+5
LDN /MTX/UVSN READ UP VSN
RJM RUW
LDD CN
ZJN BDM7 IF VSN NOT SPECIFIED
STM MESA+6
LDD CN+1
STM MESA+7
LDD CN+2
STM MESA+10
BDM7 LDM ITMA
LPN 77
LMN F0050
NJN BDM8 IF NOT WRITE OPERATION
LDN 1RW-1RR CHANGE *RD* TO *WD*
RAM MESA+11
BDM8 LDN /MTX/UGNU GET EST ORDINAL WRITTEN ON
RJM RUW
LDD CN+1
ZJN BDM9 IF EST NOT AVAILABLE
SHN -6 CONVERT UPPER DIGIT OF EST ORDINAL
ADC 2R 0
STM MESA+13
LDD CN+1 CONVERT LOWER TWO DIGITS OF EST ORDINAL
RJM C2D
STM MESA+14
BDM9 LDM STCB SET CHANNEL STATUS
SHN 6
RAM MESA+16
LDC MESA+20
STD CN+3
LDC 1*10000+DS
RJM CDN
LDC 1*10000+UBWB SET BID BYTE
RJM CDN
LDD EC SET ERROR CODE
RJM C2D
STM MESE+4
LDD FN CONVERT SOFTWARE FUNCTION NUMBER
RJM C2D
STM MESD+4
LDD EI CONVERT ERROR ITERATION NUMBER
RJM C2D
STM MESD+6
LDD BL CONVERT BLOCK NUMBER
RJM C2D
STM MESD+10
LDC BL*10000+10000+MESD+11 CONVERT BLOCK NUMBER
RJM CDA
LDC BY*10000+MESD+14 CONVERT BLOCK LENGTH
RJM CDA
LDC MESB+4 CONVERT DETAILED STATUS
STD CN+3
LDC 10*10000+MTDS
RJM CDN
LDN MESD+17-MESB-24 CONVERT ERROR PARAMETERS
RAD CN+3
LDC 2*10000+EP
RJM CDN
LDN MESE+6-MESD-23 CONVERT FORMAT
RAD CN+3
LDC 2*10000+MTSF
RJM CDN
LDD CF
SHN 21-7
MJN BDM10 IF MTS CONTROLLER
LDC MESC+4 SET UNIT STATUS FOR ATS
STD CN+3
LDC 6*10000+ATUS
RJM CDN
LDN MESC+21-MESC-20 SET THIRD FORMAT PARAMETER
RAD CN+3
LDC 1*10000+MTSF+2
RJM CDN
UJN BDM11 CHECK ERROR MESSAGE PROCESSING OPTION
BDM10 LDC IDMD SET 4 LINE MESSAGE
STM IDMA
BDM11 LDD SP CHECK ERROR MESSAGE PROCESSING OPTION
SHN 21-7
PJN BDM11.1 IF USER DAYFILE MESSAGES ARE DISABLED
LDD EC
ZJN BDM12 IF RECOVERED MESSAGE
LMN /MTX/OTF
ZJN BDM12 IF ON THE FLY ERROR
LDD EI
ZJN BDM12 IF FIRST ITERATION
BDM11.1 LDC LPNI+0 DISABLE MESSAGE ISSUE
STM EMMD
BDM12 LJM BDMX RETURN
SCS SPACE 4,10
** SCS - STORE CHARACTERS IN MESSAGE LINES.
*
* ENTRY (A, 17 - 12) = MESSAGE FIELD INDEX.
* (A, 11 - 0) = CHARACTERS.
*
* USES T0, T1.
SCS SUBR ENTRY/EXIT
STD T0 SAVE CHARACTERS
SHN -14
ADC MESA
STD T1
SCS1 LDD T0
STI T1
LDN MESB-MESA
RAD T1
ADC -MESL
MJN SCS1 LOOP
UJN SCSX RETURN
BUF SPACE 4,10
USE BUFFER
CTAB SPACE 4,10
* CHANNEL TABLE.
CTAB CHTB CHANNEL TABLE
ERRNG 2*473+ERLA+5-* ERROR PROCESSOR OVERFLOW
OVERLAY (MTS/ATS SPECIAL MESSAGE PROCESSOR.),(ERLB+5),P
** THIS OVERLAY IS CALLED FROM *EMM* FOR ERRORS WHICH
* REQUIRE ADDITIONAL PROCESSING. SEE TABLE IN *EMM* FOR
* LIST OF ERRORS WHICH REQUIRE THIS OVERLAY.
EMN SPACE 4,10
** EMN - MTS ERRLOG MESSAGE SPECIAL PROCESSOR.
*
* ENTRY (/EMM/EMMA) = INDEX TO PROCESSOR.
*
* EXIT (/EMM/EMMA) = MESSAGE ADDRESS.
*
* CALLS BNP, CKR, ECN, FRE, FSC.
EMN SUBR ENTRY/EXIT
LDC UJNI+/EMM/EMM5-/EMM/EMMB
ERRPL /EMM/EMM5-/EMM/EMMB-40 CHECK JUMP IN RANGE
STM /EMM/EMMB SET *3MD* ALREADY EXECUTED
LDM /EMM/EMMA GET PROCESSOR INDEX
ZJN EMN2 IF ONLY CALLED FOR FSC STATUS
STD T1
SBN /EMM/MAXM
PJN EMN2 IF FSC STATUS CALL BUT MESSAGE DEFINED
LDM SPRI,T1
STM EMNA
RJM * PROCESS ERROR
EMNA EQU *-1
STM /EMM/EMMA SET MESSAGE ADDRESS
EMN1 LDD HP
LPC 500
ZJN EMNX IF NOT FSC/CMTS/ISMT ADAPTOR
RJM FSC OBTAIN AND FORMAT FSC/CMTS/ISMT STATUS
UJN EMNX RETURN
EMN2 LDN PSNI
STM /EMM/EMMC SKIP MESSAGE MOVE
UJN EMN1 RETURN FSC STATUS
TITLE SPECIAL PROCESSORS.
SPRI SPACE 4,10
SPRI INDEX 0,//HNG
INDEX /EMM/FRJM,FRE
INDEX /EMM/WEOM,CKR
INDEX /EMM/CRJM,ECN
INDEX /EMM/BNEM,BNP
INDEX /EMM/MAXM
BNP SPACE 4,10
** BNP - BLOCK NUMBER PROCESSOR.
*
* ENTRY (BNEI) = ACTUAL BYTE LENGTH.
* (BNEI+1 - BNEI+2) = ACTUAL BLOCK NUMBER.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* CALLS /EMM/CDA, /EMM/C2D.
*
* USES CM.
BNP SUBR ENTRY/EXIT
LDM BNEI
STD CM
LDC CM*10000+BNPA+1 CONVERT EXPECTED LENGTH
RJM /EMM/CDA
LDM BNEI+1
RJM /EMM/C2D
STM BNPA+4
LDM BNEI+2
STD CM
LDC CM*10000+BNPA+5
RJM /EMM/CDA
LDC BNPA SET MESSAGE ADDRESS
UJN BNPX RETURN
BNPA DATA C* L0000,B000000.*
CKR SPACE 4,10
** CKR - CHECK IF READY OR WRITE ENABLE ERROR.
* CLEARS LAST OPERATION WRITE FLAGS.
*
* EXIT (A) = MESSAGE ADDRESS.
CKR2 LDN /MTX/RDR SET READY DROP ERROR
STD EC
CKR3 LDC CKRC SET READY DROP MESSAGE
CKR SUBR ENTRY/EXIT
LDD UP CLEAR LAST OPERATION WRITE AND BLANK TAPE
SCN 24
STD UP
LDD EC CHECK FOR READY DROP ERROR
SBN /MTX/RDR
ZJN CKR3 IF READY DROP ERROR
LDD DS CHECK FOR NOT READY STATUS
SHN 21-0
PJN CKR2 IF NOT READY
LDM STWD
LPN 2
ZJN CKR1 IF NOT WAIT BUSY
LDD DS
LPN 2
ZJN CKR1 IF NOT BUSY
LDC CKRB SET UNIT BUSY MESSAGE
UJN CKRX RETURN
CKR1 LDC CKRA SET NO EOP MESSAGE
UJN CKRX RETURN
CKRA DATA C*NO EOP.*
CKRB DATA C*BUSY.*
CKRC DATA C*NOT READY.*
ECN SPACE 4,10
** ECN - ERROR ON CONNECT.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* USES CM - CM+4.
*
* MACROS SFA.
ECN1 LDM MTDS
LPN 77
NJN ECN2 IF CONNECT ERROR
* CHANGE MESSAGE TO *MDI* ERROR.
LDC 2RMD
STM ECNA+5
LDC 2RI.
STM ECNA+6
LDN 0
STM ECNA+7
ECN2 LDC ECNA EXIT WITH MESSAGE ADDRESS
ECN SUBR ENTRY/EXIT
SFA EST,EO
ADK EQDE
CRD CM
LDD CM
LPN 3
LMN /CPS/DWES
ZJN ECN1 IF UNIT DOWNED
LDN 0 ALTER MESSAGE
STM ECNA+5
UJN ECN2 RETURN
ECNA DATA C*CON. REJ. DOWN.*
FRE SPACE 4,10
** FRE - FUNCTION REJECT ERROR.
* DIAGNOSES ERROR BY GIVING FUNCTION AND THE ADDRESS OF
* THE ROUTINE THAT INITIATED THE CALL.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* CALLS /EMM/CDA.
*
* USES CM.
FRE SUBR ENTRY/EXIT
LDM //.OVLR+1 GET ADDRESS OF CALLER
STD CM
LDC CM*10000+FREA+4
RJM /EMM/CDA
LDM //.OVLR CONVERT FUNCTION
STD CM
LDC CM*10000+FREA+1
RJM /EMM/CDA
LDC FREA SET MESSAGE ADDRESS
UJN FREX RETURN
FREA DATA C*FN0000,P0000.*
FSC SPACE 4,15
** FSC - FSC/CMTS/ISMT ADAPTOR STATUS.
* OBTAINS AND INSERTS THE FSC/CMTS/ISMT SENSE BYTE STATUS INTO
* THE ERROR LOG MESSAGE.
*
* USES CM - CM+4, CN - CN+3.
*
* CALLS /EMM/CDN, DME, FCN, MCH.
*
* NOTE - FSC ADAPTOR ALWAYS HAS A DEDICATED AND RESERVED
* CHANNEL. THE FSC STATUS (312) FUNCTION DOES NOT
* REQUIRE A RESERVED UNIT.
FSC2 LDM /EMM/MESA SET MT OR NT AND CHANNEL IN MESSAGE
STM FSCB
LDM /EMM/MESA+2
STM FSCB+2
LDC FSCA INITIALIZE MESSAGE POINTER
STM /EMM/IDMA
FSC SUBR ENTRY/EXIT
LDM MTDS CHECK FOR ERROR CODE 70
LPN 77
LMN 70
ZJP FSC2 IF ERROR CODE 70 DO NOT GET ISMT STATUS
LDC FSCD MODIFY CHANNELS
RJM MCH
LDM //MCCA SKIP ACTUAL STATUS IF PREVIOUS REJECT
LMC LDNI+11
NJN FSC1 IF PREVIOUS FUNCTION REJECT
LDC 312
RJM //FCN ISSUE FSC/CMTS/ISMT STATUS FUNCTION
ACN CH+40
LDN 20D
IAM FSCC,CH INPUT STATUS
FSC1 LDC /EMM/MESB+6
STD CN+3
LDC 7*10000+FSCC USE SENSE BYTES FOR DETAILED STATUS
RJM /EMM/CDN
LDC /EMM/MESC+4
STD CN+3
LDC 6*10000+FSCC+7 SUBSTITUTE SENSE BYTES FOR UNIT STATUS
RJM /EMM/CDN
LDC FSCB+4
STD CN+3
LDC 7*10000+FSCC+15 SET SENSE BYTES IN ADDITIONAL STATUS
RJM /EMM/CDN
LJM FSC2 SET MT OR NT AND CHANNEL IN MESSAGE
* TABLE OF MESSAGE LINE POINTERS FOR FSC, CMTS OR ISMT.
FSCA BSS 0
LOC 0
CON /EMM/MESA LINE 1
CON /EMM/MESB LINE 2
CON /EMM/MESC LINE 3
CON FSCB LINE 4
CON /EMM/MESD LINE 5
CON /EMM/MESE LINE 6
CON 0 TERMINATOR
LOC *O
FSCB DATA H*MT,C00,A0000000000000000000000000000. *
CON 0
FSCC BSSZ 20D SENSE BYTE STATUS
FSCD CHTB CHANNEL TABLE
SPACE 4,10
USE BUFFER
ERRNG 1*473+ERLB+5-* ERROR PROCESSOR OVERFLOW
OVERLAY (CTS CHANNEL ERROR PROCESSOR.),(BUFB+5),P
CCP SPACE 4,25
** CCP - CTS CHANNEL ERROR PROCESSOR.
*
* THIS ROUTINE DOES ERROR RECOVERY AS FOLLOWS -
*
* IF A JOB IS ASSIGNED, BUT NO FUNCTION IS PRESET, ERROR
* LOGGING AND ERROR RECOVERY ARE NOT PERFORMED.
* IF (EI) = 0 OR 1 LOG ERROR, LOAD CCC, POSITION TAPE IF
* NECESSARY, AND REQUEUE.
* IF (EI) .GE. 2 LOG ERROR AND RETURN A FATAL ERROR.
*
* ENTRY (EC) = ERROR CODE.
* (EI) = RETRY COUNT.
* (PICA) = 0 IF POSITIONING OF TAPE NOT NECESSARY.
*
* EXIT TO *RET2* TO REQUEUE THE REQUEST.
* TO *RET4* TO RETURN A FATAL ERROR.
* TO *PNR* IF INITIAL CONNECT FAILED, BUT AUTOLOAD AND
* ENSUING CONNECT ARE SUCCESSFUL.
* TO *PNR3 IF FUNCTION TIMEOUT FOR RELEASE.
* (EI) = (EI) + 1.
*
* USES CN, CM - CM+4.
*
* CALLS CEC, *CEM*, MCH, PCM, PCR, POS, /PRESET/RCU, UAD,
* *0CT*.
*
* MACROS CALL, EXECUTE.
ENTRY CCP
CCP SUBR ENTRY/EXIT
LDC CTAB
RJM MCH MODIFY CHANNEL INSTRUCTIONS
LDC LDNI+F0002
STM /PRESET/GPSC SEND CONTINUE IF COMMAND RETRY
LDM /PRESET/ICFA
LMN F0001
NJN CCP1 IF NOT RELEASE UNIT
STM RELA INDICATE UNIT NOT CONNECTED
LDN PPAL CHECK PPU AVAILABILITY
CRD CM
LJM PNR3 PROCESS NEXT REQUEST
CCP1 LDN 0 DO NOT SET FET COMPLETE
RJM CEC CHANGE TO MAGNET CONTROL POINT
LDM RELA
NJN CCP2 IF UNIT CONNECTED
LDD EC SAVE ERROR CODE
STD T1
RJM UAD GET UDT ADDRESS
CRD RS SET UP DIRECT CELLS FOR MESSAGE
ADN /MTX/UST2
CRM EI,TR
LDD T1 RESTORE ERROR CODE
STD EC
CCP2 LDD EC
LMN /MTX/STE
NJN CCP3 IF NOT STATUS ERROR
LDD DS
LPN 1
NJN CCP3 IF READY
LDN /MTX/RDR NOT READY ERROR
STD EC
CCP3 RJM PCM PROCESS CHANNEL MALFUNCTION
RJM PCR PROCESS CONNECT REJECT
CALL CEM LOG CTS ERROR MESSAGE
LDC LDNI
STM //PNRC FORCE DROP OUT
AOD EI INCREMENT RETRY COUNT
STD EP SO RECOVERABLE ERROR WILL BE REPORTED
SBN 3
MJN CCP4 IF RETRIES NOT COMPLETED
LDN 0
STD EI CLEAR RETRY COUNT
LDD FN
ZJP PNR IF NO FUNCTION
LJM RET4 REPORT FATAL ERROR
CCP4 RJM UAD GET UDT ADDRESS
ADN /MTX/UST2
CWD EI SAVE RETRY COUNT AND BLOCK POSITION
ADN /MTX/UST3-/MTX/UST2
CWD LG SAVE BLOCK POSITION (EP+1)
CHTE *
LDN CH SET CHANNEL NUMBER
STD CN
LDC ERLB SET BUFFER ADDRESS
STD CN+1
EXECUTE 0CT,ERLA+5 LOAD CTS/CCC MICROCODE
LDD CN
ZJN CCP6 IF MICROCODE LOADED
STD EC
SHN 0-13
PJN CCP5 IF ERROR CODE ALREADY SAVED
LDN /MTX/CMF
STD EC
CCP5 LDM CN+1 SAVE FUNCTION
STM /PRESET/ICFA
UJP CCP3 PERFORM NEXT STEP OF RECOVERY ALGORITHM
CCP6 LDM RELA
ZJN CCP9 IF UNIT NOT CONNECTED
RJM /PRESET/RCU RECONNECT UNIT
LDM /PRESET/PICA
ZJN CCP7 IF POSITIONING OF TAPE NOT NECESSARY
RJM POS POSITION TAPE
NJP CCP3 IF ERROR
CCP7 LDN 0
STD EC CLEAR ERROR CODE
LJM RET2 REQUEUE THE REQUEST
CCP9 RJM /PRESET/CCU CONNECT UNIT
LDN 0
STD EC CLEAR ERROR CODE
CALL CEM REPORT RECOVERED ERROR
LDN 0
STD EI CLEAR RETRY COUNT
STD EP
LJM PNR PROCESS NEXT REQUEST
CAU SPACE 4,10
** CAU - CHECK ALL UNITS.
*
* EXIT (A) = 0 IF NO JOB ASSIGNED AND NO FUNCTION PRESET.
*
* USES CM - CM+4, CN - CN+4, T1 - T5.
CAU SUBR ENTRY/EXIT
LDM PNRD
STM CAUA SET STARTING UDT ADDRESS
CAU1 LDD RA
SHN 6
ADC 0
CAUA EQU *-1 (UDT ADDRESS)
CRD T1
ADN /MTX/UST1
CRD CM
ADN /MTX/UVRI-/MTX/UST1
CRD CN
SFA EST,CM+2 GET CHANNEL INFORMATION
ADK EQDE
CRD CM
LDD CM+1
CHTE *
LMN CH
LPN 37
ZJN CAU1.1 IF UNIT ON THIS CHANNEL
LDD CM+2
CHTE *
LMN CH
LPN 37
NJN CAU2 IF UNIT NOT ON THIS CHANNEL
CAU1.1 LDD CN JOB ASSIGNED
ADD T2 FUNCTION
NJN CAUX IF JOB ASSIGNED OR FUNCTION PRESENT
CAU2 LDN /MTX/UNITL
RAM CAUA UPDATE TO NEXT UDT
LMM PNRA
NJN CAU1 IF NOT END OF UDT
UJP CAUX RETURN
CFT SPACE 4,10
** CFT - CHECK FOR TWO CHANNELS.
*
* EXIT (A) = 0 IF TWO CHANNELS ARE ON.
*
* USES T1, CM - CM+4.
CFT SUBR ENTRY/EXIT
SFA EST,EO READ EST ENTRY
ADK EQDE
CRD CM
CHTE *
LDN CH
STD T1 SAVE CHANNEL NUMBER
LDD CM+1
SHN -11
LMN 4
NJN CFTX IF 1ST CHANNEL NOT ON
LDD CM+1
LMD T1
LPN 37
NJN CFT2 IF THIS IS A 2ND CHANNEL
LDD CM+2
SHN -11
CFT1 LMN 4
NJN CFTX IF NO 2ND CHANNEL
LDD CM+2
LMD T1
LPN 37
ZJN CFT1 IF NO 2ND CHANNEL
CFT2 LDN 0
UJP CFTX RETURN
DCI SPACE 4,10
** DCI - DOWN CHANNEL IN EST.
* THIS ROUTINE DOWNS THE CHANNEL IN THE EST FOR ALL UNITS
* ON THE CHANNEL.
*
* USES CM - CM+4, CN - CN+4.
*
* MACROS MONITOR.
DCI SUBR ENTRY/EXIT
LDM PNRD
STM DCIA SET STARTING UDT ADDRESS
DCI1 LDD RA
SHN 6
ADC 0
DCIA EQU *-1 (UDT ADDRESS)
ADK /MTX/UST1
CRD CM GET EQUIPMENT DEFINITION
SFA EST,CM+2
ADK EQDE GET CHANNEL INFORMATION
CRD CN
LDD CN+1
CHTE *
LMN CH
LPN 37
ZJN DCI1.1 IF UNIT ON THIS CHANNEL
LDD CN+2
CHTE *
LMN CH
LPN 37
NJN DCI2 IF UNIT NOT ON THIS CHANNEL
DCI1.1 LDD CM+2
STD CM+1 EST ORDINAL
CHTE *
LDN CH
STD CM+2 CHANNEL NUMBER
LDN /CPS/DWSS
STD CM+3 SUBFUNCTION
MONITOR SCSM DOWN CHANNEL IN EST
DCI2 LDN /MTX/UNITL
RAM DCIA UPDATE TO NEXT UDT
LMM PNRA
NJP DCI1 IF NOT END OF UDT
LJM DCIX RETURN
PCM SPACE 4,25
** PCM - PROCESS CHANNEL MALFUNCTION.
* THE CHANNEL IS DOWNED IF A CHANNEL MALFUNCTION ERROR
* OCCURS, RECOVERY IS UNSUCCESSFUL, AND
* 1) THERE IS A 2ND CHANNEL, OR
* 2) THERE ARE NO JOBS ASSIGNED AND NO FUNCTION IS PRESENT.
*
* ENTRY (EC) = ERROR CODE.
* (EI) = RETRY COUNT.
*
* EXIT TO *PNR* IF CHANNEL MALFUNCTION, JOB ASSIGNED, NO 2ND
* CHANNEL, AND NO FUNCTION IS PRESET. THIS BYPASSES
* ERROR LOGGING AND ERROR RECOVERY.
* TO *PNR5* IF CHANNEL DOWNED AND UNIT NOT CONNECTED.
* TO *RET4* IF CHANNEL MALFUNCTION, ERROR RECOVERY IS
* UNSUCCESSFUL, AND A 2ND CHANNEL IS PRESENT.
*
* USES EC, EI, CM - CM+4, CN - CN+4.
*
* CALLS CAU, *CEM*, CFT, DCI, IMR, SRQ, UAD.
*
* MACROS CALL, MONITOR.
PCM SUBR ENTRY/EXIT
LDD EC
SBN /MTX/CMF
ZJN PCM1 IF CHANNEL MALFUNCTION
SBN /MTX/FRJ-/MTX/CMF
NJN PCMX IF NOT FUNCTION REJECT
PCM1 RJM CFT CHECK FOR TWO CHANNELS
ZJN PCM2 IF 2 CHANNELS
RJM CAU CHECK ALL UNITS
NJP PCM4 IF JOB ASSIGNED OR FUNCTION PRESET
PCM2 LDD EI
SBN 2
MJN PCMX IF RECOVERY NOT COMPLETE
* DOWN CHANNEL.
PCM3 RJM DCI DOWN CHANNEL IN EST
LDN /CPS/EEVS
STD CM+1 ENTER EVENT
LDN 0
STD CM+3
LDN /EVT/CDSE
STD CM+4 *CHANNEL DOWNED BY SYSTEM* EVENT
MONITOR EATM
LDN /MTX/MDW CHANNEL DOWNED ERROR
STD EC
CALL CEM LOG THE ERROR
LDN 0
STD EI CLEAR RETRY COUNT
LDC LDNI
STM //PNRC FORCE DROP OUT
* ONLY GO TO *RET* IF CONNECTED, OTHERWISE 2 PPS COULD BE
* CHANGING THE *UDT* AT THE SAME TIME.
LDM RELA
ZJP PNR5 IF UNIT NOT CONNECTED
LJM RET4 RETURN AN ERROR CODE
PCM4 LDD FN
ZJP //PNR IF NO FUNCTION PENDING
PCM5 LJM PCMX RETURN
PCR SPACE 4,20
** PCR - PROCESS CONNECT REJECT.
* IF ERROR RECOVERY IS UNSUCCESSFUL, NO FUNCTION IS PRESET,
* AND NO JOB IS ASSIGNED, THE UNIT IS TURNED OFF.
*
* ENTRY (EC) = ERROR CODE.
* (EI) = RETRY COUNT.
*
* EXIT TO *PNR* IF CONNECT REJECT, NO FUNCTION IS PRESENT,
* AND A JOB IS ASSIGNED. THIS BYPASSES ERROR
* REPORTING AND ERROR RECOVERY.
*
* USES CM - CM+4, CN - CN+4.
*
* CALLS SRQ, UAD.
*
* MACROS MONITOR.
PCR SUBR ENTRY/EXIT
LDD EC
LMN /MTX/CRJ
NJN PCRX IF NOT CONNECT REJECT
RJM UAD CHECK IF JOB ASSIGNED
ADK /MTX/UXRQ
CRD RS
ADK /MTX/UVRI-/MTX/UXRQ
CRD CN
LDD CN
NJN PCR1 IF JOB ASSIGNED
LDD EI
SBN 2
MJN PCRX IF RECOVERY NOT COMPLETE
* DOWN UNIT.
LDD EO SET EST ORDINAL
STD CM+1
LDN /CPS/DWES SET DOWN STATUS
STD CM+2
MONITOR SEQM SET EQUIPMENT PARAMETER
UJP PCRX RETURN
PCR1 LDD FN
ZJP //PNR IF NO FUNCTION PENDING
LJM PCRX RETURN
POS SPACE 4,15
** POS - POSITION TAPE.
* THIS ROUTINE USES THE LOCATE BLOCK COMMAND TO POSITION
* THE TAPE TO THE EXPECTED BLOCK POSITION.
*
* ENTRY (BL, BL+1) = NOS BLOCK POSITION.
* (WP, EP+1) = PHYSICAL BLOCK ID WHEN (BL,BL+1) = 0.
*
* EXIT (A) = 0 IF NO ERROR.
* (EC) = ERROR CODE IF (A) .NE. 0.
*
* USES T3.
*
* CALLS /PRESET/GPS, /PRESET/ICF, /PRESET/RBI.
POS SUBR ENTRY/EXIT
RJM /PRESET/RBI READ BLOCK ID
LDM BIDW
STM POSA
SBN 20
ZJN POS1 IF FIRST SEGMENT
STM POSA SET PHYSICAL REFERENCE BLOCK ID
POS1 LDD BL+1
SHN 4
ADD EP+1
STM POSA+2 MOVE BLOCK NUMBER TO PARAMETERS
SHN -14
STM POSA+1
LDD BL
SHN 4
ADD WP
RAM POSA+1
LDN F0016 LOCATE BLOCK
RJM /PRESET/ICF ISSUE FUNCTION
ACN CH
LDN 3
OAM POSA,CH OUTPUT THE 3 PARAMETER WORDS
STD T3 WORDS NOT TRANSFERRED
FJM *,CH WAIT FOR DATA TO BE TAKEN
POS2 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS
MJN POS2 IF COMMAND RETRY
SHN 21-13
MJN POS3 IF ERROR
LDD T3
ZJN POS5 IF ALL WORDS TRANSFERRED
LDN /MTX/CMF CHANNEL MALFUNCTION
UJN POS4 SAVE ERROR CODE
POS3 LDN /MTX/STE STATUS ERROR
POS4 STD EC
POS5 LJM POSX RETURN
POSA DATA 0 LOCATE BLOCK PARAMETERS
DATA 0 UPPER 12 BITS OF BLOCK NUMBER
DATA 0 8/LOWER BITS OF BLOCK NUMBER / 4 UNUSED
SPACE 4,10
ERRNG ERLA-* CODE OVERFLOWS HELPER OVERLAY
ERRPL ERLA+5+ZCTL-ERLB *0CT* OVERFLOWS INTO BUFFER
CTAB SPACE 4,10
* CHANNEL TABLE.
CTAB CHTB CHANNEL TABLE
OVERLAY (CTS ERRLOG MESSAGE PROCESSOR.),(ERLA+5),P,CEM
CEM SPACE 4,10
** CEM - CTS ERRLOG MESSAGE PROCESSOR.
* THIS ROUTINE ISSUES A MESSAGE TO THE ERROR LOG.
*
* USES T1.
*
* CALLS BDM, *CSP*, IDM, MET.
*
* MACROS CALL.
ENTRY CEM
CEM SUBR ENTRY/EXIT
RJM BDM BUILD MESSAGE
LDM CEMA
ZJN CEM3 IF NO MESSAGE OR SPECIAL PROCESSOR
SBN MAXM
MJN CEM5 IF SPECIAL PROCESSOR NEEDED
CEM1 LCN 0 MOVE MESSAGE
STD T1
CEM2 AOD T1
LDM *,T1
CEMA EQU *-1
STM MESF+12,T1
NJN CEM2 IF NOT END OF MESSAGE
CEM3 RJM MET MOVE ERPA MESSAGE
LDN ERLN/10000 ISSUE MESSAGE TO ERROR LOG
RJM IDM
LDM CECB
CEMB LPN 77
* LPN 0 (MESSAGE ISSUE TO USER DISABLED)
ZJN CEM4 IF AT MAGNET CP
LDN CPON/10000 ISSUE MESSAGE TO USER
RJM IDM
CEM4 UJP CEMX RETURN
CEM5 CALL CSP CALL SPECIAL PROCESSOR
UJN CEM1 GO MOVE MESSAGE
MES SPACE 4,10
*** MESSAGE DATA.
* MESSAGES ARE ISSUED IN THE FOLLOWING FORMAT-
* CT,C13-0-02,ABCDEF,RD, 753, GS00000000.
* CT,C13,D0000000000000000000000000000000000000000.
* CT,C13, 000000000000000000000000,A000000000000.
* CT,C13,ERPA 00 - 000000000000000000000000000000.
* CT,C13,F07,I02,B00000123.
* CT,C13,E00, F=I ,U, TTTTTTTTTTTT.
*
* THE FIRST MESSAGE WOULD TELL THE FOLLOWING-
*
* 1) CHANNEL 13, EQUIPMENT 0, UNIT 2.
* 2) VOLUME SERIAL NUMBER IS *ABCDEF*.
* 3) OPERATION WAS A READ. (ANY OPERATION NOT INVOLVING
* AN ACTUAL READ OR WRITE WILL BE CALLED A READ.
* 4) EST ORDINAL *753* IS THE UNIT THAT THE TAPE WAS LAST
* LABELED ON. THIS WILL ONLY BE AVAILABLE FOR A LABELED
* TAPE GENERATED UNDER NOS. IT WILL NORMALLY BE ZERO IN
* ALL OTHER CASES. THIS FIELD DOES NOT REPRESENT THE
* EST ORDINAL OF THE TAPE UNIT THAT THE TAPE IS
* CURRENTLY MOUNTED ON.
* 5) GENERAL STATUS OF TAPE UNIT IN OCTAL.
*
* THE SECOND MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13 - THIS IS REPEATED SO THAT IF ERRORS
* ARE OCCURING ON MORE THAN ONE TAPE CHANNEL AT THE
* SAME TIME THE TWO MESSAGES CAN BE ASSOCIATED.
* 2) THIS IS THE FIRST 20 SENSE BYTES IN HEXADECIMAL.
*
* THE THIRD MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) THIS IS THE LAST 12 SENSE BYTES IN HEXADECIMAL
* FOLLOWED BY ADAPTER STATUS. ADAPTER STATUS IS
* DISPLAYED IN HEXADECIMAL AND IS THE LAST 48 BITS
* OF DETAILED STATUS.
*
* THE FOURTH MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) THE ERROR RECOVERY PROCEDURE ACTION CODE, FROM SENSE
* BYTE 3, FOLLOWED BY THE TEXT MESSAGE FOR THE ERPA
* CODE.
*
* THE FIFTH MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13, SAME AS ABOVE.
* 2) THE ERROR OCCURED ON A SOFTWARE FUNCTION OF 7.
* 3) ERROR ITERATION.
* 4) BLOCK NUMBER ERROR OCCURRED ON WAS 123. THIS IS THE
* NOS BLOCK NUMBER, NOT THE PHYSICAL BLOCK ID USED BY
* THE CARTRIDGE TAPE SUBSYSTEM. THE FIRST DATA BLOCK
* AFTER A LABEL IS NOS BLOCK 0.
*
* THE SIXTH MESSAGE WOULD TELL THE FOLLOWING -
*
* 1) CHANNEL 13 - SAME AS ABOVE.
* 2) NOS ERROR CODE.
* 3) THE TAPE FORMAT IS I.
* 4) THE ERROR IS UNRECOVERED.
* 5) TTT CONTAINS ADDTIONAL STATUS.
**** MESSAGE DATA. NOTE THAT MESSAGES LONGER THAN 40 CHARACTERS
* WRAP TO THE NEXT LINE IF DISPLAYED WITH DSDI. THE START
* OF MESSAGES SHOULD BE AT EQUAL INTERVALS SO *SCS* CAN SAVE
* REPETITIVE INFORMATION.
MESA DATA H*CT,C00-0-00, ,RD, , GS00000000.*
CON 0
BSS 26D+MESA-*
MESB DATA H*CT,C00,D .*
CON 0
MESC DATA H*CT,C00, ,A . *
CON 0
MESD DATA H*CT,C00,ERPA , *
CON 0
BSS 26D+MESD-*
MESE DATA H*CT,C00,F00,I00,B00000000.*
CON 0
BSS 26D+MESE-*
MESF DATA C*CT,C00,E00, F=I ,I, *
MESL EQU MESF+MESB-MESA+1
TERM SPACE 4,10
TERM INDEX
INDEX 0,(=C*REC.*)
INDEX /MTX/BTL,(=C*BTL.*)
INDEX /MTX/BNE,BNEM
INDEX /MTX/RDR,WEOM
INDEX /MTX/FRJ,FRJM
INDEX /MTX/WEO,WEOM
INDEX /MTX/CRJ,CRJM
INDEX /MTX/STE,(=C*STE.*)
INDEX /MTX/CMF,(=C*CMF.*)
INDEX /MTX/MDW,(=C*MDW.*)
INDEX /MTX/BFR,(=C*BFR.*)
INDEX /MTX/BFW,(=C*BFW.*)
INDEX /MTX/MERC
****
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
SPACE 4,10
** ERRORS REQUIRING ADDITIONAL OVERLAY TO BE LOADED.
BEGM BSS 0
LOC 1
FRJM BSS 1 FUNCTION REJECT
WEOM BSS 1 NO END OF OPERATION
CRJM BSS 1 CONNECT REJECT
BNEM BSS 1 BLOCK SEQUENCE ERROR
MAXM BSS 1 MAXIMUM SPECIAL ERRORS
ORG BEGM
IDM SPACE 4,10
** IDM - ISSUE DAYFILE MESSAGES.
* THIS ROUTINE ISSUES THE MESSAGE LINES DEFINED IN TABLE
* *IDMB* TO THE DAYFILE.
*
* ENTRY (A) = MESSAGE DESTINATION CODE
*
* USES T8.
*
* CALLS DFM.
IDM SUBR ENTRY/EXIT
LMC LMCI SET MESSAGE DESTINATION CODE
STM IDMA
LDN 0 INITIALIZE MESSAGE INDEX
STD T8
* LOOP UNTIL ALL MESSAGE LINES ARE ISSUED TO THE DAYFILE.
IDM1 LDM IDMB,T8 GET NEXT MESSAGE POINTER
ZJN IDMX IF ALL MESSAGES ISSUED
LMC ** ADD MESSAGE DESTINATION
IDMA EQU *-2 (MESSAGE DESTINATION CODE)
RJM DFM ISSUE DAYFILE MESSAGE
AOD T8 ADVANCE MESSAGE INDEX
UJN IDM1 ISSUE NEXT MESSAGE LINE
* TABLE OF MESSAGE LINE POINTERS FOR 6 LINES.
IDMB BSS 0
LOC 0
CON MESA LINE 1
CON MESB LINE 2
CON MESC LINE 3
CON MESD LINE 4
CON MESE LINE 5
CON MESF LINE 6
CON 0 TERMINATOR
LOC *O
MET SPACE 4,15
** MET - MOVE ERPA TEXT MESSAGE.
*
* USES T1, T2.
*
* CALLS ERP.
*
* MACROS CALL.
MET2 LDC 2R.
STM MESD+7 SET END OF LINE WHEN NO MESSAGE
MET SUBR ENTRY/EXIT
CALL ERP LOAD ERPA TEXT MESSAGES
LDM MESD+6
LMC 2R
ZJN MET2 IF NO ERPA CODE
LDM CTSD+2
SHN -4
SBN 0#21
MJN MET2 IF NO ENGLISH TEXT
STD T1 INDEX INTO TABLE OF ADDRESSES
LDM /ERP/ERPA,T1
ZJN MET2 IF NO TEXT
STD T1 START OF ERPA TEXT
LDC MESD+10
STD T2 DESTINATION FOR ERPA TEXT
MET1 LDI T1
STI T2
ZJN METX IF ALL TEXT MOVED
AOD T1
AOD T2
UJN MET1 CONTINUE MOVING TEXT
TITLE OVERLAY AREA.
CDA SPACE 4,10
** CDA - CONVERT DATA (4 DIGITS).
*
* ENTRY (A, 17 - 12) = ADDRESS WHERE DATA CONTAINED.
* (A, 11 - 0) = ADDRESS WHERE TO STORE RESULT.
*
* USES T2, T3.
*
* CALLS C2D.
CDA SUBR ENTRY/EXIT
STD T3 SAVE DESTINATION ADDRESS
SHN -14
STD T2 SAVE DATA ADDRESS
LDI T2 CONVERT FIRST 2 DIGITS
SHN -6
RJM C2D
STI T3
LDI T2 CONVERT SECOND 2 DIGITS
RJM C2D
STM 1,T3
UJN CDAX RETURN
ERRNG ERLB-* IF OVERFLOW INTO OVERLAY AREA
* NOTE - THE FOLLOWING CODE MAY BE OVERLAID IF THE SPECIAL
* ERROR MESSAGES OVERLAY IS REQUIRED OR IF AN ERPA CODE IS
* PRESENT.
CDN SPACE 4,15
** CDN - CONVERT DATA.
* THIS ROUTINE CONVERTS 12-BIT HEX DATA TO DISPLAY CODE.
*
* ENTRY (A, 21 - 14 = 8-BIT BYTES TO CONVERT.
* (A, 13 - 0) = SOURCE OF DATA TO CONVERT.
* (T1) = STARTING NIBBLE POSITION (0, 1, OR 2).
* (CN+3) = DESTINATION OF CONVERTED DATA.
*
* EXIT (CN+3) = UPDATED TO DESTINATION FOR NEXT CONVERTED
* BYTE.
*
* USES CN+1, CN+2.
*
* CALLS CNN.
CDN SUBR ENTRY/EXIT
STD CN+1 STARTING ADDRESS OF DATA TO CONVERT
SHN -14
STD CN+2 8-BIT BYTES TO CONVERT
CDN1 RJM CNN CONVERT NIBBLE
SHN 6
STI CN+3
RJM CNN CONVERT NIBBLE
RAI CN+3
AOD CN+3 UPDATE POINTER TO DESTINATION ADDRESS
SOD CN+2
NJN CDN1 IF MORE BYTES TO CONVERT
UJN CDNX RETURN
CNN SPACE 5,15
** CNN - CONVERT NIBBLE.
*
* ENTRY (T1) = NIBBLE TO CONVERT (0, 1, OR 2).
* (CN+1) = ADDRESS OF DATA TO CONVERT.
*
* EXIT (A) = DISPLAY CODE FOR NIBBLE.
* (CN+1) = UPDATED TO ADDRESS OF NEXT BYTE TO CONVERT.
* (T1) = UPDATED TO POSITION OF NEXT NIBBLE.
*
* USES T1, T2.
CNN SUBR ENTRY/EXIT
LDM CNNB,T1
STM CNNA SET SHIFT INSTRUCTION
LDI CN+1
SHN 0
CNNA EQU *-1 SHN -10, SHN -4, OR SHN 0
LPN 17
SBN 11
ZJN CNN1 IF 9
PJN CNN2 IF A - F
CNN1 ADN 1R0+11 0 - 9
CNN2 STD T2
AOD T1 UPDATE NIBBLE POINTER
SBN 3
NJN CNN3 IF NO WRAP
STD T1
AOD CN+1 ADDRESS OF DATA TO CONVERT
CNN3 LDD T2
UJN CNNX RETURN
CNNB CON 1067 SHN -10
CON 1073 SHN -4
CON 1000 SHN 0
RUW SPACE 4,10
** RUW - READ UNIT DESCRIPTOR TABLE WORD.
* USED TO READ UDT WHEN POSSIBLY NOT AT MAGNET CP.
*
* ENTRY (A) = UDT WORD.
*
* EXIT (CN - CN+4) = WORD READ.
*
* USES T1, CM - CM+4, CN - CN+4.
*
* MACROS DELAY, MONITOR, PAUSE.
RUW2 LDD MA
CRD CN
RUW SUBR ENTRY/EXIT
STD T1
RUW1 LDM UADA
ADD T1
STD CM+4
LDD HN REQUEST 1 WORD
STD CM+3
LDN 0 REQUEST READ FROM *MAGNET*
STD CM+1
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
LMN 1
NJN RUW2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN RUW1 REISSUE REQUEST
BDM SPACE 4,15
** BDM - BUILD MESSAGE.
* THIS ROUTINE BUILDS THE ERROR LOG MESSAGES. (EXCEPT THE
* DESCRIPTIVE MESSAGE IN THE 6TH LINE AND THE ERPA TEXT
* MESSAGE.
*
* ENTRY (EC) = ERROR CODE.
* (EI) = RETRY COUNT.
*
* USES T1, CM - CM+4.
*
* CALLS CDA, CDN, C2D, MCH, RUW, SCS.
*
* MACROS CHTE, SFA.
BDM SUBR ENTRY/EXIT
LDC CTAB MODIFY CHANNELS
RJM MCH
LDM //LOV
STM CEM SET RETURN ADDRESS
LDM TERM,EC
STM CEMA SAVE TABLE ENTRY
* MESSAGE BUILD.
SFA EST,EO SET DEVICE TYPE IN MESSAGE LINES
ADK EQDE
CRD CM
LDD CM+3
RJM SCS SET CHARACTERS
CHTE * SET CHANNEL NUMBER IN MESSAGE LINES
LDN CH
RJM C2D
ADC 2*10000
RJM SCS
LDD CM+4 SET UNIT NUMBER
SHN -3
LPN 1
RAM MESA+4
LDD CM+4
LPN 7
SHN 6
RAM MESA+5
LDN /MTX/UVSN READ UP VSN
RJM RUW
LDD CN
ZJN BDM1 IF VSN NOT SPECIFIED
STM MESA+6
LDD CN+1
STM MESA+7
LDD CN+2
STM MESA+10
BDM1 LDD FN
SBN /MTX/WTF
MJN BDM2 IF NOT WRITE OPERATION
LDN 1RW-1RR CHANGE *RD* TO *WD*
RAM MESA+11
BDM2 LDN /MTX/UGNU GET EST ORDINAL WRITTEN ON
RJM RUW
LDD CN+1
ZJN BDM3 IF EST NOT AVAILABLE
SHN -6 CONVERT UPPER DIGIT OF EST ORDINAL
ADC 2R 0
STM MESA+13
LDD CN+1 CONVERT LOWER TWO DIGITS OF EST ORDINAL
RJM C2D
STM MESA+14
* MOVE GENERAL STATUS.
BDM3 LDD DS
SHN -6
RJM C2D
STM MESA+17
LDD DS
RJM C2D
STM MESA+20
LDM CTGS
SHN -6
RJM C2D
STM MESA+21
LDM CTGS
RJM C2D
STM MESA+22
LDD DS
SHN 21-13
PJP BDM5 IF ALERT NOT SET
LDM CTGS
SHN 21-12
MJN BDM4 IF UNIT CHECK
LDC MESC+21
STD CN+3 DESTINATION ADDRESS
UJN BDM4.1 SAVE CCC STATUS
* MOVE DETAILED STATUS.
BDM4 LDN 0
STD T1 FIRST NIBBLE
LDC MESB+4
STD CN+3 DESTINATION ADDRESS
LDC 20D*10000+CTSD
RJM CDN CONVERT FIRST 20 SENSE BYTES
LDC MESC+4
STD CN+3 DESTINATION ADDRESS
LDC 12D*10000+CTSD+15
RJM CDN CONVERT LAST 12 SENSE BYTES
AOD CN+3 DESTINATION ADDRESS
BDM4.1 LDN 0
STD T1 FIRST NIBBLE
LDC 6*10000+CTSD+26
RJM CDN CONVERT ADAPTER STATUS
LDM MESB+7
STM MESD+6 SET ERPA CODE
UJN BDM6 DO CONVERSION FOR LINE 5
BDM5 LDC 2R. SHORTEN MESSAGE LINES WHEN NO STATUS
STM MESB+7
STM MESC+7
LDN 0
STM MESB+10
STM MESC+10
* CONVERSION FOR LINE 5.
BDM6 LDD FN CONVERT SOFTWARE FUNCTION NUMBER
RJM C2D
STM MESE+4
LDD EI CONVERT ERROR ITERATION NUMBER
RJM C2D
STM MESE+6
LDC BL*10000+MESE+10 CONVERT BLOCK NUMBER
RJM CDA
LDC BL*10000+10000+MESE+12 CONVERT BLOCK NUMBER
RJM CDA
* CONVERSION FOR LINE 6.
LDD EC SET ERROR CODE
RJM C2D
STM MESF+4
LDD FM SET FORMAT
SHN -6
STD T1
LDM BDMA,T1 SAVE FORMAT
STM MESF+7
LDD EC
NJN BDM7 IF NOT RECOVERABLE ERROR
LDN 1RR-1RI
UJN BDM8 INDICATE RECOVERABLE MESSAGE
BDM7 LDD EI
SBN 2
MJN BDM9 IF NOT UNRECOVERABLE
LDN 1RU-1RI INDICATE UNRECOVERABLE MESSAGE
BDM8 RAM MESF+10
BDM9 LDD SP CHECK ERROR MESSAGE PROCESSING OPTION
SHN 21-7
PJN BDM10 IF USER DAYFILE MESSAGES ARE DISABLED
LDD EC
ZJN BDM11 IF RECOVERED MESSAGE
LDD EI
ZJN BDM11 IF FIRST ITERATION
BDM10 LDC LPNI+0 DISABLE MESSAGE ISSUE
STM CEMB
BDM11 LJM BDMX RETURN
BDMA CON 2RI I FORMAT
CON 2RSI SI FORMAT
CON 2RF F FORMAT
CON 2RS S FORMAT
CON 2RL L FORMAT
CON 2RLI LI FORMAT
SCS SPACE 4,10
** SCS - STORE CHARACTERS IN MESSAGE LINES.
*
* ENTRY (A, 17 - 12) = MESSAGE FIELD INDEX.
* (A, 11 - 0) = CHARACTERS.
*
* USES T1.
SCS SUBR ENTRY/EXIT
STD T0 SAVE CHARACTERS
SHN -14
ADC MESA
STD T1
SCS1 LDD T0
STI T1
LDN MESB-MESA
RAD T1
ADC -MESL
MJN SCS1 LOOP
UJN SCSX RETURN
CTAB SPACE 4,10
* CHANNEL TABLE.
CTAB CHTB CHANNEL TABLE
ERRNG 2*473+ERLA+5-* ERROR PROCESSOR OVERFLOW
OVERLAY (CTS SPECIAL MESSAGE PROCESSOR.),(ERLB+5),P,CSP
CSP SPACE 4,10
** CSP - CTS ERRLOG MESSAGE SPECIAL PROCESSOR.
* THIS OVERLAY IS CALLED FROM *CEM* FOR ERRORS WHICH
* REQUIRE ADDITIONAL PROCESSING. SEE TABLE IN *CEM* FOR
* LIST OF ERRORS WHICH REQUIRE THIS OVERLAY.
*
* ENTRY (/CEM/CEMA) = INDEX TO PROCESSOR.
*
* EXIT (/CEM/CEMA) = MESSAGE ADDRESS.
*
* CALLS BNP, CKR, ECN, FRE, FSC.
ENTRY CSP
CSP SUBR ENTRY/EXIT
LDM /CEM/CEMA GET PROCESSOR INDEX
STD T1
LDM SPRI,T1
STM CSPA
RJM * PROCESS ERROR
CSPA EQU *-1
STM /CEM/CEMA SET MESSAGE ADDRESS
UJN CSPX RETURN
TITLE SPECIAL PROCESSORS.
SPRI SPACE 4,10
SPRI INDEX 0,//HNG
INDEX /CEM/FRJM,FRE
INDEX /CEM/WEOM,CKR
INDEX /CEM/CRJM,ECN
INDEX /CEM/BNEM,BNP
INDEX /CEM/MAXM
BNP SPACE 4,15
** BNP - BLOCK NUMBER PROCESSOR.
*
* ENTRY (BNEU) = ACTUAL BYTE LENGTH UPPER (LI FORMAT).
* (BNEI) = ACTUAL BYTE LENGTH LOWER.
* (BNEI+1 - BNEI+2) = ACTUAL BLOCK NUMBER.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* USES CM.
*
* CALLS /CEM/CDA, /CEM/C2D.
BNP SUBR ENTRY/EXIT
LDD FM
SHN -6
LMN /MTX/TFLI
NJN BNP1 IF NOT LI FORMAT
LDM BNEU
RJM /CEM/C2D CONVERT 2 DIGITS
STM BNPA+1 SAVE UPPER 2 OF 6 DIGITS OF BLOCK LENGTH
BNP1 LDM BNEI
STD CM
LDC CM*10000+BNPA+2 CONVERT EXPECTED LENGTH
RJM /CEM/CDA
LDM BNEI+1
STD CM
LDC CM*10000+BNPA+5
RJM /CEM/CDA CONVERT BLOCK NUMBER
LDM BNEI+2
STD CM
LDC CM*10000+BNPA+7
RJM /CEM/CDA
LDC BNPA SET MESSAGE ADDRESS
UJP BNPX RETURN
BNPA DATA C* L000000,B00000000.*
CKR SPACE 4,10
** CKR - CHECK IF READY.
* CLEARS LAST OPERATION WRITE FLAGS.
*
* EXIT (A) = MESSAGE ADDRESS.
CKR3 LDC CKRC SET READY DROP MESSAGE
CKR SUBR ENTRY/EXIT
LDD UP CLEAR LAST OPERATION WRITE AND BLANK TAPE
SCN 24
STD UP
LDD EC CHECK FOR READY DROP ERROR
SBN /MTX/RDR
ZJN CKR3 IF READY DROP ERROR
LDM /PRESET/GPSB
ZJN CKR1 IF WAIT EOP
LDD DS
LPN 2
ZJN CKR1 IF NOT BUSY
LDC CKRB SET UNIT BUSY MESSAGE
UJN CKRX RETURN
CKR1 LDC CKRA SET NO EOP MESSAGE
UJN CKRX RETURN
CKRA DATA C*NO EOP.*
CKRB DATA C*BUSY.*
CKRC DATA C*NOT READY.*
ECN SPACE 4,10
** ECN - ERROR ON CONNECT.
* MESSAGE IS ALTERED IF UNIT NOT TURNED OFF.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* USES CM - CM+4.
*
* MACROS SFA.
ECN2 LDC ECNA EXIT WITH MESSAGE ADDRESS
ECN SUBR ENTRY/EXIT
SFA EST,EO
ADK EQDE
CRD CM
LDD CM
LPN 3
LMN /CPS/DWES
ZJN ECN2 IF UNIT DOWNED
LDN 0 ALTER MESSAGE
STM ECNA+5
UJN ECN2 RETURN
ECNA DATA C*CON. REJ. DOWN.*
FRE SPACE 4,10
** FRE - FUNCTION REJECT ERROR.
* DIAGNOSES ERROR BY GIVING FUNCTION AND THE ADDRESS OF
* THE ROUTINE THAT INITIATED THE CALL.
*
* EXIT (A) = MESSAGE ADDRESS.
*
* USES CM.
*
* CALLS /CEM/CDA.
FRE SUBR ENTRY/EXIT
LDM /PRESET/ICF GET ADDRESS OF CALLER
STD CM
LDC CM*10000+FREA+4
RJM /CEM/CDA
LDM /PRESET/ICFA CONVERT FUNCTION
STD CM
LDC CM*10000+FREA+1
RJM /CEM/CDA
LDC FREA SET MESSAGE ADDRESS
UJN FREX RETURN
FREA DATA C*FN0000,P0000.*
ERRNG 1*473+ERLB+5-* ERROR PROCESSOR OVERFLOW
OVERLAY (DROP PPU PROCESSOR.),,NOPRS,DPP
DPP SPACE 4,10
** DPP - DROP CHANNEL AND PPU.
* ALSO HANDLES ISSUE OF MESSAGE FOR ANY FUNCTION REJECTS
* THAT COULD NOT BE DIAGNOSED WHEN THEY OCCURRED. IT IS NOT
* ALWAYS POSSIBLE TO LOAD AN OVERLAY AND DIAGNOSE A FUNCTION
* REJECT AND STILL MAINTAIN THE CONTROLLER OPTIONS AETC.
*
* CALLS DME, *EMM*, MCH.
*
* MACROS CALL, CHTE, DCHAN, MONITOR.
ENTRY DPP
DPP SUBR ENTRY/EXIT
LDM HNG CHECK FOR *HNG* CALL
ZJN DPP0 IF NORMAL DROP
STM CM+4 SET (OR+4) = *HNG* CALLER
MONITOR HNGM HANG PP
DPP0 LDC CTAB MODIFY CHANNELS
RJM MCH
LDC DPP1 SET ADDRESS TO EXIT TO
STM //LOV
UJN DPPX RETURN
DPP1 LDD HP
SHN 21-7
MJN DPP2 IF CTS
LDM //FCNC
NJN DPP2 IF NO DELAYED REQUEST
LDM //.OVLR+3
NJN DPP2 IF NO B.C. RESTART
LDD DS SET STATUS
STM //STER
LDN /MTX/BCR
STD EC
CALL EMM CALL ERROR MESSAGE PROCESSOR
DPP2 LDD IA RESET INPUT REGISTER
CRD IR
LDD RA
SHN 6
ADD IR+4
ADK /MTX/CPST GET PROCESSOR STATUS
CRD CM
LDM UADA SET NEXT UDT TO PROCESS
STD CM+4
LDD CM
LPC 3777 CLEAR *1MT* ACTIVE
STD CM
LDD RA
SHN 6
ADD IR+4
ADK /MTX/CPST UPDATE PROCESSOR STATUS
CWD CM
CHTE *
LDN CH DROP CHANNEL
DCHAN
MONITOR DPPM DROP PPU
LJM PPR EXIT TO PP RESIDENT
CTAB CHTB CHANNEL TABLE
OVERLAY (CONTROL POINT/CODED PRESET.),(ERLA+5),P,CPP
PRS SPACE 4,10
** PRS - CONTROL POINT/CODED PRESET.
*
* USES BT, FM, CM - CM+4, T1 - T5.
*
* CALLS CCD, UAD.
PRS SUBR ENTRY/EXIT
LDM //LOV SAVE ADDRESS TO EXIT AT
STM CPP
LDC PRS1 SET ADDRESS TO EXIT TO
STM //LOV
UJN PRSX RETURN
PRS1 RJM CCD CHECK IF CODED
LDC LDNI+1 SET ACTIVITY PROCESSED
STM PNRE
IFEQ TE,1 IF TRACE ENABLED
RJM TRB SAVE TRACE INFORMATION IN CM
ENDIF
LDM CPP
LMC PNRI
NJN CPPX IF NOT CALLED FROM MAIN PROGRAM
LDD BT SET ENTRY ADDRESS
STM CPP
LDD SC
LPN 20
NJN CPP1 IF CP CHANGE
STD BT PRESET BLOCKS TRANSFERRED
* LJM //LOVX RETURN (TO CALLER OF *LOV*)
CPP SPACE 4,20
** CPP - CONTROL POINT OPERATION PRESET.
*
* ENTRY (CN) = ADDRESS OF LIST OF INSTRUCTIONS TO MODIFY.
* (CN+4) = RELATIVE ADDRESS OF WORD IN FET (IN OR OUT).
* THIS WORD WILL BE READ UP AND VALIDATED.
*
* EXIT CHANGED TO CORRECT CP.
* (EI) = 0, ERROR ITERATION PRESET.
* (CN - CN+4) = SELECTED FET WORD VALIDATED. (IF ERROR
* EXITS TO *BAE*.)
* (LNUM) = LEVEL NUMBER FOR OPERATION.
* (FETO) = FET OPTIONS.
* (CIOE) = EXTERNAL CIO CODE.
*
* USES BT, T8, T1 - T7, CM - CM+4, CN - CN+4.
*
* CALLS CAL, HNG, INM, SFP, UAD.
*
* MACROS MONITOR.
ENTRY CPP
CPP SUBR ENTRY/EXIT
CPP1 LDD CN SAVE ADDRESS MODIFICATION POINTERS
STM CPPB
LDD CN+4
STM CPPC
RJM UAD READ UDT FET INFORMATION
ADN /MTX/UCIA FET ADDRESS
CRD T6-3
ADN /MTX/UCIC-/MTX/UCIA FIRST, LIMIT, AND FL
CRD T1
ADN /MTX/UVRI-/MTX/UCIC GET EJT ORDINAL
CRD CN
LDN 0 PRESET BLOCKS TRANSFERRED COUNT
STD BT
LDD CN SAVE EJT ORDINAL
STD T8
SFA EJT SET EJT ADDRESS
ADK JSNE
CRD CM GET JOB STATUS
ADK SCHE-JSNE
CRD CN GET CP NUMBER
LDD CM+4
LPC 176
LMN /EJT/EXJS*2
NJN CPP2 IF JOB ROLLED OR ROLLING OUT
LDD CN+3 SET CP NUMBER
ADK /CPS/RCMS+/CPS/ALCS SET MOVE REJECT AND ALTERNATE CP
STD CM+1
MONITOR CCAM SET ACCESS TO USER CP
LDD CM+1
NJN CPP2 IF CHANGE NOT MADE
AOM //CECB SET CP CHANGED FLAG
LDD CP
ADN TFSW VERIFY JOB EJT ORDINAL
CRD CM
LDD CM
LMD T8
ZJN CPP3 IF CORRECT JOB
CPP2 LDN /MTX/RJB REQUEUE ON JOB ROLLED OUT
LJM RET5 EXIT
CPP3 LDD FL
SBD T1
PJN CPP6 IF NO FL REDUCTION
* RECHECK BUFFER PARAMTERS.
LDD .FE
SHN 6
ADD RA
SHN 6
ADD .FE+1
ADN 1
CRD CM
LDD CM+3
SHN -6
ADD .FE+1
ADN 4
SHN 6
ADD .FE
SHN 14
SHN -6
SBD FL
PJN CPP5 IF FET LWA .GT FL
LDD .LM
SHN 14
LMD .LM+1
SBN 1
SHN -6
SBD FL
MJN CPP6 IF LIMIT .LT FL
CPP5 LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
CPP6 RJM CAL CALCULATE PARAMETERS
LDC * MODIFY INSTRUCTIONS
CPPB EQU *-1
RJM INM
LDC *
CPPC EQU *-1
ZJN CPP7 IF NO FET POINTER CHECK
RJM SFP SET FET POINTER
NJN CPP5 IF BAD FET POINTER
CPP7 LDD WC
ADC -1001
PJN CPP8 IF INCORRECT WORD COUNT
LJM CPPX RETURN
CPP8 RJM HNG HANG PP
TITLE SUBROUTINES.
CAL SPACE 4,15
** CAL - CALCULATE PARAMETERS.
*
* ENTRY (T1 - T5) = UCIC FROM UDT.
* (.FT - .FT+1) = FIRST.
* (.LM - .LM+1) = LIMIT.
* (.FE - .FE+1) = FET ADDRESS.
*
* EXIT (.FT - .FT+1) = FIRST.
* (.LM - .LM+1) = LIMIT.
* (.FE - .FE+1) = FET ADDRESS.
* (.LF - .LF+1) = LIMIT - FIRST.
* (.BS - .BS+1) = BLOCK SIZE.
* (BUFC - BUFC+4) = PRESET IF CONTROL WORD READ AND NOT
* *LI* FORMAT.
*
* USES T1, .BS - .BS+1, .LF - .LF+1.
CAL SUBR ENTRY/EXIT
LDD .LM LIMIT - FIRST
SBD .FT
SHN 14
ADD .LM+1
SBD .FT+1
STD .LF+1
SHN -14
STD .LF
LDD MD SET MAXIMUM BLOCK SIZE
SHN -4
LPN 3
ADD WC
STD .BS+1
LDN 0
STD .BS
LDD OV BLOCK SIZE = WC + OV*LBWD + CONTROL WORDS
ZJN CAL2 IF NOT LONG BLOCK OPERATION
STD T0
CAL1 LDC /MTX/LBWD
RAD .BS+1
SHN -14
RAD .BS
SOD T0
NJN CAL1 IF OVERFLOW COUNT NOT EXHAUSTED
CAL2 LDD MD
SHN -4
LPN 3
STD T1
ZJN CAL4 IF NOT CONTROL WORD OPERATION
LDD FN
LMN /MTX/RDF
NJN CAL4 IF NOT READ NORMAL BLOCK
LDD FM
SHN -6
LMN /MTX/TFLI
ZJN CAL4 IF LI FORMAT
LDN ZERL
CRM BUFC,ON PRESET CONTROL WORD
LDD T1
LPN 2
ZJN CAL3 IF NOT 200 READ CODE
LDD MD SET PARITY INDICATION
LPC 100
STM BUFC
LDD .BS SET BLOCK SIZE
SHN 14
LMD .BS+1
SBD T1
CAL3 STM BUFC+1
SHN -14
RAM BUFC
CAL4 LJM CALX RETURN
INM SPACE 4,10
** INM - INSTRUCTION MODIFICATION.
*
* ENTRY (A) = FWA OF INSTRUCTION MODIFICATION LIST.
*
* USES SC, CM+4, CM+5.
ENTRY INM
INM SUBR ENTRY/EXIT
ZJN INMX IF NO MODIFICATIONS
STD SC
INM1 LDI SC
ZJN INMX IF END OF LIST
SHN 21-0
STD T1 SAVE INSTRUCTION ADDRESS
SHN -21
SHN 1 COMPLEMENT FLAG * 2
LMC UJNI+3
STM INMA
LDI T1 PRESERVE INSTRUCTION OP CODE
SCN 77
STI T1
LDM 1,SC EXTRACT DIRECT CELL TO REFERENCE
SHN 14
STD CM+4
SCN 77 CLEAR DIRECT CELL ADDRESS
SHN 3 EXTRACT BIAS
STD CM+5
SCN 7 CLEAR BIAS
ADI CM+4 ADD UPPER PORITON OF VALUE
PJN INM2 IF RELATIVE VALUE DESIRED
SHN 6
SCN 40 CLEAR ABSOLUTE FLAG
ADD RA
SHN 14
INM2 SHN 14
ADM 1,CM+4 ADD LOWER PORTION OF VALUE
ADD CM+5 ADD BIAS
* NOTE CODE SHOULD NOT BE ADDED IN NEXT THREE LINES.
INMA UJN 3 COMPLEMENT NOT NEEDED
* UJN 1 COMPLEMENT NEEDED
LMC -0
STM 1,T1 MODIFY INSTRUCTION
SHN -14
RAI T1
LDN 2 INCREMENT TO NEXT ITEM IN LIST
RAD SC
LJM INM1 CONTINUE INSTRUCTION MODIFICATION
SFP SPACE 4,10
** SFP - SET FET POINTER.
*
* ENTRY (A) = POINTER TO DESIRED FET WORD (IN OR OUT).
*
* EXIT (CN - CN+4) = FET POINTER.
* (A) = 0, IF POINTER VALID.
SFP1 LDN 1
SFP SUBR ENTRY/EXIT
STD T0
LDD .FE READ DESIRED FET POINTER
SHN 6
ADD RA
SHN 6
ADD .FE+1
ADD T0
CRD CN
LDD CN
ADD CN+1
ADD CN+2
NJN SFP1 IF BAD POINTER
LDD CN+3
LPN 37
STD CN+3
SBD .FT CHECK AGAINST FIRST
SHN 14
ADD CN+4
SBD .FT+1
MJN SFP1 IF IN/OUT .GE. FIRST
LDD CN+3
SBD .LM
SHN 14
ADD CN+4
SBD .LM+1
PJN SFP1 IF IN/OUT NOT .LT. LIMIT
LDN 0
UJN SFPX RETURN
TRB SPACE 4,25
IFEQ TE,1 IF SAVING TRACE INFORMATION
** TRB - TRACE BUFFER.
*
* THE TRACE BUFFER STARTS AT BYTE ADDRESS 2000000(16). A
* MODIFICATION TO *STL* AND SEVERAL OTHER DECKS MUST BE
* EDITED ONTO THE DEADSTART TAPE TO DISABLE MEMORY BOUNDS
* CHECKING. THE TRACE IS UPDATED WITH EACH CALL TO
* *CPP* AND CONSISTS OF 2 CP WORDS PER TRACE AS FOLLOWS.
* LOCATION 10 IS THE POINTER TO THE TRACE BUFFER. A MAXMIMUM
* OF 16 MB WILL BE STORED IN THE TRACE BUFFER. THE BUFFER
* WILL NOT WRAP. TO RESTART THE TRACE, JUST CLEAR LOCATION
* 10.
*
* 0 - 12/EO, 12/FN, 12/BL+1, 12/DS, 12,EC
* 1 - 12/PA, 12/PB, 12/HP, 12/MD, 12/FM
*
* NOTE - THIS CODE IS ONLY FOR CHECKOUT.
*
* USES T1 - T7.
TRB SUBR ENTRY/EXIT
LDD HP
SHN 21-7
PJN TRBX IF NOT CTS
SRD T1 SAVE R REGISTER
LDN 10
CRD T3
LDD T3
ZJN TRB1 IF TRACE NOT STARTED
LPN 10
NJN TRBX IF TRACE BUFFER FULL
UJN TRB2 MOVE EST ORDINAL
TRB1 LDN 20 INITIALIZE TRACE START ADDRESS
STD T3
LDN 0
STD T4
STD T5
TRB2 LRD T3
LDD EO EST ORDINAL
STM TRBB
LDD FN FUNCTION NUMBER
STM TRBB+1
LDD BL+1 RIGHT-MOST 12 BITS OF BLOCK NUMBER
STM TRBB+2
LDD DS GENERAL STATUS
STM TRBB+3
LDD EC ERROR CODE
STM TRBB+4
LDD PA PARAMETER
STM TRBB+5
LDD PB PARAMETER
STM TRBB+6
LDD HP HARDWARE OPTIONS
STM TRBB+7
LDD MD MODES
STM TRBB+10
LDD FM FORMAT
STM TRBB+11
LDN 2
STD T6
LDD T5
LMC 400000
CWM TRBB,T6
LDN 2
RAD T5
SHN -6
RAD T4
SHN -14
RAD T3
LDD T5
LPN 77
STD T5
LDN 10
CWD T3 UPDATE POINTER TO TRACE BUFFER
LRD T1 RESTORE R REGISTER
LJM TRBX RETURN
TRBB BSS 12
ENDIF
CCD SPACE 4,15
** CCD - CHECK CODED REQUEST AND BUILD FORMAT PARAMETERS.
*
* ENTRY (SC) = FUNCTION TABLE ENTRY WHEN CALLED FROM RESIDENT.
*
* EXIT UNIT FORMAT PARAMETERS BUILT.
* CORRECT BID ACCUMULATION LOOP MOVED TO RESIDENT.
* UNIT CONNECTED OR FORMATED IF NECESSARY.
* BLOCKS TO TRANSFER BEFORE DROP OUT SET FOR CTS.
*
* USES T1, T2, T3.
*
* CALLS CUI, DDR, /PRESET/RCU.
CCD SUBR ENTRY/EXIT
LDD MD
SHN 21-6
PJN CCD1 IF NOT CODED OPERATION
LDD FM
SHN -6
LMN /MTX/TFSI
NJN CCD1 IF NOT SI FORMAT
LDD FN
LMN /MTX/RLA
ZJN CCD1 IF READ LABEL
LMN /MTX/WLA&/MTX/RLA
NJN CCD3 IF READ, WRITE OR SKIP
CCD1 LDD HP
SHN 21-7
PJP CCD6 IF NOT CTS
LDC -BLKC
STM CDOC BLOCKS TO TRANSFER BEFORE DROP OUT
* THE BLANK COMMAND WRITES LABELS WITH AN S FORMAT CODED
* OPERATION. THE CTS SUBSYSTEM DOES NOT SUPPORT CODE
* CONVERSION, SO THE DRIVER DOES SOFTWARE CONVERSION.
LDD MD
SHN 21-6
PJN CCD4 IF NOT CODED
LDD FN
SBN /MTX/RDF
ZJN CCD2 IF READ
SBN /MTX/WTF-/MTX/RDF
NJN CCD4 IF NOT WRITE
CCD2 LDD FM
SHN -6
LMN /MTX/TFS
ZJN CCD4 IF S FORMAT
CCD3 LDN /MTX/SCI CODED I/O NOT SUPPORTED
LJM RET3 RETURN ERROR CODE
CCD4 LDM CPP
LMC PNRI
NJN CCD4.1 IF NOT CALLED FROM MAIN PROGRAM
LDD FN
LMN /MTX/WTF
NJN CCD5 IF NOT DATA WRITE
LDD SP
LPC 100
ZJN CCD5 IF COMPRESSED MODE WRITE NOT SELECTED
SHN 7-6
RAM /PRESET/CCUA SET COMPRESSED MODE
ERRNZ F0220-F0020-200
UJN CCD4.2 RECONNECT UNIT AND SET COMPRESSED MODE
CCD4.1 LDM RELA
NJN CCD5 IF CONNECTED
CCD4.2 RJM /PRESET/RCU RECONNECT UNIT
CCD5 UJP CCDX RETURN
* REBUILD FORMAT PARAMETERS.
CCD6 LDM CPP
LMC //PNRI
ZJN CCD8 IF CALLED FROM RESIDENT
CCD7 LDM RELA CHECK IF CONNECTED
NJN CCD5 IF CONNECTED
LJM CCD14 RECONNECT UNIT
CCD8 LDD SC
SHN 21-5
PJN CCD7 IF FUNCTION DOES NOT REQUIRE UNIT FORMATED
LDD HP
SHN 21-10
PJN CCD9 IF NOT ISMT DEVICE
LDC -BLKX BLOCKS TO TRANSFER BEFORE DROPOUT (ISMT)
STM CDOC
CCD9 RJM DDR SET DIRECTION FOR BID ACCUMULATION
LDC LDNI+2 SET TO INPUT 2 WORDS OF DETAILED STATUS
STM //STWE
LDM MTSF BUILD FORMAT PARAMETERS
LPC 4237
STM MTSF
LDM MTSF+1
LPC 6740
STM MTSF+1
LDD HP PRESET A/D MODE FOR BINARY
LPN 1
SHN 5 SET PACKED MODE FOR 9 TRACK
STD T1
LDD MD CHECK FOR CODED OPERATION
SHN 21-6
MJN CCD10 IF CODED
LDD T1
NJN CCD12 IF NOT 7 TRACK
LDC 3400 SET CONVERSION TABLE 7
STD T1
UJN CCD12 SET NOISE SIZE
CCD10 LDD T1 SET EVEN PARITY IF 7 TRACK
LMN 40
SHN 4
RAM MTSF+1
LDM DNCV SET CONVERSION TABLE
LPN 7
ZJN CCD12 IF NO CONVERSION REQUEST
SBN 1
ZJN CCD11 IF BCD TYPE
SBN 4-1
CCD11 ADN 3
SHN 10
STD T1
CCD12 LDD T1
RAM MTSF
LDD FM SET NOISE SIZE
LPN 37
STD T2
SHN 1 NB*2
STD T3
LDD HP
LPN 1
ZJN CCD13 IF 7 TRACK
LDD T2
ADD T3 NB*3
SHN -1 (NB*3)/2
STD T3
CCD13 LDD FM ADJUST NOISE SIZE IF FILL STATUS
LPN 40
SHN -5
STD T1
LDD T3
SBD T1
RAM MTSF+1
LDD HP
LPN 40
NJN CCD14 IF MTS CONTROLLER
LDC 4000
STM MTSF+2
LDM DNCV
LPN 70
LMN /MTX/D62*10
NJN CCD14 IF NOT 6250 CPI
LDD FN CHECK FUNCTION IN PROGRESS
SBN /MTX/WTF
MJN CCD14 IF NOT WRITE OPERATION
LDD SP SET ERROR CORRECTION ENABLE/DISABLE (ATS)
LPC 100
SHN 4
RAM MTSF+2
CCD14 LDN 0 CLEAR CONNECTED FLAG
STM //RELA
RJM CUI FORMAT UNIT
LJM CCDX RETURN
DDR SPACE 4,10
** DDR - DETERMINE DIRECTION FOR BID ACCUMULATION.
*
* ENTRY (MD, 12 - 13) = 0 IF FORWARD DIRECTION.
*
* EXIT CORRECT BID ACCUMULATION ROUTINE MOVED TO RESIDENT.
*
* USES T1, T2.
DDR SUBR ENTRY/EXIT
LDD MD
SHN -12
ZJN DDR1 IF FORWARD DIRECTION
LDC DDRB-DDRA SET REVERSE DIRECTION TABLE
DDR1 ADC DDRA
STD T1
LDI T1
LMM //UBWA
ZJN DDRX IF CORRECT ROUTINE LOADED
LDN 0
STD T2
DDR2 LDI T1 MOVE CODE
STM UBWA,T2
AOD T1
AOD T2
LMN //UBWAL
NJN DDR2 IF MORE CODE TO MOVE
UJN DDRX RETURN
DDRA BSS 0 CODE FOR FORWARD ACCUMULATION
LOC //UBWA
AOD WP
LPN 7
STD WP
LDM UBWB
STM BIDW,WP
LOC *O
DDRAL EQU *-DDRA LENGTH OF OVERLAID CODE
ERRNZ //UBWAL-DDRAL OVERLAID CODE NOT CORRECT LENGTH
DDRB BSS 0 CODE FOR REVERSE ACCUMULATION
LOC //UBWA
LDN 4 SET UNAVAILABLE BID
STM BIDW,WP
SOD WP
PJN UBWX IF NO UNDERFLOW
LDN 7 RESET POINTER
STD WP
LOC *O
DDRBL EQU *-DDRB
ERRNZ //UBWAL-DDRBL OVERLAID CODE NOT CORRECT LENGTH
USE BUFFER
ERRNG 2*473+ERLA+5-* CPP OVERFLOW
OVERLAY (USER JOB OPERATIONS.)
PFN SPACE 4,20
** PFN - PROCESS FUNCTION REQUESTED.
*
*T, 12/ 1,12/ PFN,12/ 0,12/ PARAM,12/ FC
*
* FC FUNCTION CODE (SEE *COMSMTX*).
ENTRY PFN
PFN LDD PB
SBN TFCNL
MJN PFN1 IF VALID FUNCTION
RJM HNG HANG PP
PFN1 LDM TFCN,PB SET PROCESSOR ADDRESS
STM PFNA
LJM * PROCESS FUNCTION
PFNA EQU *-1
SPACE 4,10
** TFCN - TABLE OF FUNCTION PROCESSORS.
TFCN INDEX
INDEX /MTX/FNRW,RUL REWIND
INDEX /MTX/FNUL,RUL UNLOAD
INDEX /MTX/FNSD,SDF SET DENSITY IN UNIT FORMAT PARAMETERS
INDEX /MTX/FNMX TERMINATE TABLE
TFCNL EQU *-TFCN
RUL SPACE 4,10
** RUL - REWIND OR UNLOAD UNIT.
*
* CALLS REU, RBL, WNB.
RUL BSS 0 ENTRY
RJM WNB WAIT NOT BUSY
LDD HP
SHN 21-7
PJN RUL1 IF NOT CTS UNIT
RJM RBL READ BUFFERED LOG
RUL1 LDD PB
LMK /MTX/FNRW
ZJN RUL2 IF REWIND
LDN 1 SET UNLOAD
RUL2 RJM REU REWIND OR UNLOAD UNIT
LJM RET1 RETURN
SDF SPACE 4,10
** SDF - SET DENSITY IN UNIT FORMAT PARAMETERS.
SDF BSS 0 ENTRY
LDD HP
SHN 21-7
MJP RET1 IF CTS UNIT
LDM MTSF+1
LPC 7477
STM MTSF+1
LDD HP
SHN 21-5
MJN SDF1 IF MTS CONTROLLER
SHN 21-0-21+5
MJN SDF1 IF 9 TRACK
LDM DNCV SET ATS 7 TRACK DENSITY
SHN -3
LPN 7
LMN 3
UJN SDF3 STORE DENSITY IN FORMAT PARAMETER
SDF1 LDM DNCV
SHN -3
LPN 7
SBN /MTX/D02
ZJN SDF2 IF 200 BPI
SBN 5-1
SDF2 ADN 3
SDF3 SHN 6
RAM MTSF+1
LJM RET1 RETURN
SED SPACE 4,10
** SED - SET EQUIPMENT DEFINITIONS.
*
* CALLS DTS, LWR, REU, SDS, UAD.
*
* MACROS MONITOR, SFA.
ENTRY SED
SED SFA EST,EO SET EST ADDRESS
ADK EQDE GET EQUIPMENT PARAMETERS
CRD CN
LDD HP
SHN 21-7
MJN SED1 IF CTS UNIT
RJM DTS GET DETAILED STATUS
LDM MTSF
NJN SED1 IF NOT FIRST TIME PROCESSING
LDD CN+4
LPN 37 UNIT NUMBER
ADC 4220
STM MTSF SET FORMAT FLAGS AND UNIT NUMBER
SED1 LDD DS
SHN 21-0
PJN SED3 IF NOT READY
SHN 21-1-21+22
PJN SED2 IF NOT BUSY
LJM RET2 RETRY
* FORCE TAPE TO LOAD POINT.
SED2 LPN 1
NJN SED3 IF AT LOAD POINT
* LDN 0 SET REWIND
RJM REU REWIND UNIT
LDN /MTX/RBS REQUEUE ON UNIT BUSY
LJM RET5 EXIT
* PRESET MTS/ATS UNIT.
SED3 LDD HP
SHN 21-7
MJP SED7 IF CTS UNIT
LDD HP
LPC 760 MASK CONTROLLER TYPE BITS
STD HP
LPN 20
ZJN SED4 IF NOT ATS UNIT
LDC 7440 MODIFY INSTRUCTIONS
STM SEDA
LDM ATUS DETERMINE IF GCR UNIT
SHN 1
LPN 20
STD CM+4
SHN -3
RAD HP
LDD CN ENSURE CORRECT *GCR* SETTING IN EST ENTRY
LPN 20
LMD CM+4
ZJN SED4 IF NO CHANGE IN EST ENTRY
LCN 20 SET MASK FOR GCR FLAG
STD CM+3
LDD EO SET EQUIPMENT NUMBER
STD CM+1
LDN /CPS/SB0S CHANGE BYTE 0 OF EST ENTRY
STD CM+2
MONITOR SEQM
SED4 LDM MTSF
LPC 4237
STM MTSF
LDC 7540
* LDC 7440 (ATS CONTROLLER)
SEDA EQU *-1
STM MTSF+1
LDD DS
SHN -6
LPN 1 SET 7/9 TRACK OPTION
RAD HP
LPN 1
ZJN SED5 IF 7 TRACK
LDC 6640 SET 1600 BPI
STM MTSF+1
LDC 400-1400 SELECT ANSI CONVERSION
SED5 ADC 1400 SELECT BCD CONVERSION
RAM MTSF
LDD HP
SHN 21-4
PJN SED6 IF NOT ATS UNIT
RJM LWR CHECK LOOP WRITE TO READ
SED6 RJM SDS SET DRIVE SPEED
LDD DS SET EST DEVICE TYPE
LPC 100
ADC 2RMT
STD CM+3 SET CORRECT DEVICE MNEMONIC
LMD CN+3
ZJN SED7 IF NO MNEMONIC CHANGE
LDD EO SET EQUIPMENT NUMBER
STD CM+1
LDN /CPS/SMNS CHANGE EQUIPMENT MNEMONIC IN EST
STD CM+2
MONITOR SEQM
LDD LT TOGGLE BIT 1 OF DEVICE TYPE
LMC 400
ERRNZ /MTX/DVMT
ERRNZ /MTX/DVNT-2
STD LT
* PRESET UDT.
SED7 LDN 0
STD BL
STD BL+1
STD UP
STD LG
STD LG+1
STD EP
STD EP+1
STD SP
STD WC
STD OV
LDD HP
SHN 21-7
PJN SED8 IF NOT CTS UNIT
LDN 0
STD WP
SED8 LDC /MTX/TFF*100+4 SET FORMAT/NOISE FOR LABEL CHECK
STD FM
LDD LT
LPC 700
LMC 2000 SET LABELED FOR LABEL CHECK
STD LT
SHN -7
LPN 3 TAPE DEVICE TYPE
STD T1
LDM TDCV,T1 SET INITIAL DENSITY AND CONVERSION MODE
STM DNCV
RJM UAD UPDATE *UST4* PARAMETERS
ADN /MTX/UST4
CWD LT
LDD DS CHECK READY STATUS
LPN 1
NJN SED9 IF UNIT READY
LDN /MTX/FRJ SET TO NOT ATTEMPT LABEL SCAN
LJM RET3 RETURN ERROR CODE
SED9 LJM RET1 RETURN
TDCV SPACE 4,10
** TDCV - TABLE OF INITIAL DENSITY AND CONVERSION MODES.
*
* INDEXED BY TAPE DEVICE TYPE.
*
* ENTRY FORMAT -
*
* 6/0,3/ DN,3/ CV
*
* DN = INITIAL DENSITY.
* CV = INITIAL CONVERSION MODE.
TDCV INDEX
INDEX /MTX/DVMT,/MTX/D08*10+/MTX/BCD
INDEX /MTX/DVCT,/MTX/D380*10+/MTX/ANS
INDEX /MTX/DVNT,/MTX/D16*10+/MTX/ANS
INDEX /MTX/DVAT,/MTX/D380*10+/MTX/ANS
INDEX /MTX/DVMX
TITLE SUBROUTINES.
LWR SPACE 4,15
** LWR - TEST WRITE/READ PATH TO ATS UNIT.
*
* ENTRY (DS) = GENERAL STATUS.
* (ATUS - ATUS+5) = UNIT STATUS.
*
* EXIT TAPE UNLOADED AND UNIT DOWNED IF LOOP WRITE/READ TEST
* FAILURE.
*
* USES CM+1, CM+2.
*
* CALLS CUI, DTS, *EMM*, ERR, FCR, REU, STW, UAD.
*
* MACROS CALL, MONITOR.
LWR7 LCN /MTX/MOF-/MTX/CRJ ALTER ERROR FOR CONNECT REJECT
RAM LWRA
LJM LWR5 *OFF* UNIT
LWR SUBR ENTRY/EXIT
LDD DS SAVE STATUS FOR POSSIBLE MESSAGE
STM //STER
LPN 3
LMN 1
NJN LWRX IF UNIT NOT READY
* RECHECK UNIT STATUS FOR MDI ERRORS. THESE ERRORS
* MAY HAVE BEEN IGNORED AT INITIAL CONNECT TIME.
* IF ANY ERRORS ARE PRESENT, PROCESS AS IF CONNECT REJECT.
RJM DTS GET UNIT STATUS
LDM MTDS CHECK STATUS
SHN 21-12
PJN LWR2 IF NO UNIT CHECK
LDM ATUS+1
LPC 216 LAMP,DSE,ERASE CURRENT,AIR PRESS. FAILURE
NJN LWR7 IF ERRORS OTHER THAN RESET OR LOAD CHECK
LDM ATUS+2
LPN 30 AIR FLOW,THERMAL FAILURE
NJN LWR1 IF MDI ERRORS
LDM ATUS
SHN 21-6
PJN LWR2 IF NO WRITE CURRENT FAILURE
LWR1 LJM LWR7 PROCESS CONNECT REJECT
* ISSUE LOOP WRITE TO READ FUNCTION TO UNIT.
LWR2 LDM ATUS+2 GET DETAIL STATUS WORD 13
LPN 34 AIR FLOW,THERMAL,CLEANER NOT PARKED
ZJN LWR2.1 IF NO PROBLEM
LPN 30 AIR FLOW,THERMAL FAILURE
NJN LWR1 IF MDI PROBLEM
LDN /MTX/TCF-/MTX/MOF ALTER ERROR FOR TAPE CLEANER FAULT
RAM LWRA
LJM LWR4 PROCESS CLEANER NOT PARKED
LWR2.1 LDN 0
STM //RELA
RJM CUI INSURE UNIT FORMATED
LDM MTDS+5
SHN 21-7
MJN LWR4 IF WRITE CURRENT ON
LDC 175 SET LOOP WRITE TO READ (LWR) MODE
RJM FCR
NJN LWR4 IF FUNCTION REJECT
LDN 50 ISSUE WRITE FUNCTION
RJM FCR
NJN LWR4 IF FUNCTION REJECT
ACN CH OUTPUT DATA
LDD HN
OAM BFMS,CH
FJM *,CH
NJN LWR3 IF ABNORMAL TERMINATION
DCN CH+40
LWR3 LDN 0 GET STATUS
RJM STW
STM //STER SAVE STATUS FOR POSSIBLE MESSAGE
SHN 21-13
MJN LWR4 IF ALERT SET
LJM LWRX RETURN
LWR4 LDN 1 UNLOAD TAPE
RJM REU
LWR5 LDD EO
STD CM+1
LDN /CPS/DWES SET DOWN STATUS
STD CM+2
MONITOR SEQM SET EQUIPMENT PARAMETER
LWRA LDN /MTX/MOF ISSUE MESSAGE AND ABORT
* LDN /MTX/CRJ (CONNECT REJECT)
* LDN /MTX/TCF (TAPE CLEANER FAULT)
RJM ERR
RLB SPACE 4,15
** RBL - READ BUFFERED LOG.
*
* EXIT RECOVERED ERROR COUNTS UPDATED.
*
* USES T1, T3.
*
* CALLS ERR, /PRESET/GPS, /PRESET/ICF.
RBL SUBR ENTRY/EXIT
LDK F0312
RJM /PRESET/ICF ISSUE READ BUFFERED LOG FUNCTION
RBL1 ACN CH
LDN 32D
IAM RBLA,CH
STD T3 WORDS NOT TRANSFERRED
SFM RBL3,CH IF CHANNEL PARITY ERROR
RBL2 LDN 0
RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS
MJN RBL1 IF COMMAND RETRY
LDD T3
ZJN RBL4 IF ALL BUFFERED LOG DATA RECEIVED
RBL3 LDN /MTX/CMF
RJM ERR PROCESS ERROR (NO RETURN)
* INCREMENT WRITE ERROR COUNTER.
RBL4 LDM RBLA+2
LPN 17
SHN 14
ADM RBLA+3 TEMPORARY WRITE DATA CHECKS
RAM ECNT+2
SHN -14
RAM ECNT+1
LDM RBLA+6
SHN -4
STD T1
LDM RBLA+5
LPC 377
SHN 10
ADD T1 WRITE BLOCKS CORRECTED WITHOUT ERPA
RAM ECNT+2
SHN -14
RAM ECNT+1
* INCREMENT READ ERROR COUNTER.
LDM RBLA+1
SHN -10
SHN 16
ADM RBLA
SHN 4 TEMPORARY READ DATA CHECKS
RAM ECNT+4
SHN -14
RAM ECNT+3
LDM RBLA+5
SHN -10
SHN 16
ADM RBLA+4
SHN 4 READ BLOCKS CORRECTED WITHOUT ERPA
RAM ECNT+4
SHN -14
RAM ECNT+3
LJM RBLX RETURN
RBLA BSS 32D BUFFERED LOG DATA
WNB SPACE 4,10
** WNB - WAIT NOT BUSY AND CHECK READY.
* IF UNIT IS BUSY, THE REQUEST IS REQUEUED.
* IF UNIT NOT READY AFTER TIMEOUT, EXIT WITH READY DROP.
*
* ENTRY (DS) = GENERAL STATUS.
*
* CALLS /PRESET/GPS, STW.
WNB1 LDD HN SET DELAY
STM WNBA
WNB2 LDD DS
LPN 1
NJN WNBX IF UNIT READY
LDD HP
SHN 21-7
PJN WNB4 IF NOT CTS
WNB3 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS GET AND PROCESS CTS GENERAL STATUS
MJN WNB3 IF RETRY OCCURRED
UJN WNB5 CHECK TIMEOUT
WNB4 LDN 0
RJM STW GET DEVICE STATUS
WNB5 SOM WNBA
NJN WNB2 IF NOT TIMEOUT
LDN /MTX/RDR READY DROP
LJM RET3 RETURN ERROR CODE
WNB SUBR ENTRY/EXIT
LDD DS
LPN 2
ZJN WNB1 IF NOT BUSY
LDN /MTX/RBS REQUEUE ON UNIT BUSY
LJM RET5 EXIT
WNBA BSS 1
TITLE HARDWARE SUBROUTINES.
FCR SPACE 4,10
** FCR - PROCESS FUNCTION.
*
* ENTRY (A) = FUNCTION.
*
* EXIT (A) = 0, IF NO EXTERNAL REJECT.
*
* CALLS STC.
FCR SUBR ENTRY/EXIT
ADM FCNA ADD EQUIPMENT NUMBER FOR ATS/MTS
FAN CH FUNCTION EQUIPMENT
STM FCRA SAVE FUNCTION
RJM STC STATUS CHANNEL
UJN FCRX RETURN
FCRA CON 0
REU SPACE 4,10
** REU - REWIND/UNLOAD.
*
* ENTRY (A) = 0, REWIND.
* (A) = 1, UNLOAD.
*
* EXIT BID WINDOW SET TO UNAVAILABLE.
*
* CALLS FCN, /PRESET/GPS, STW.
REU SUBR ENTRY/EXIT
SHN 6
ADN F0010 ISSUE REWIND/UNLOAD
ERRNZ F0110-F0010-100
RJM FCN
LDD HP
SHN 21-7
MJN REU2 IF CTS
LDN 0 GET DEVICE STATUS
RJM STW
LDN 10 RESET BID WINDOW
STD WP
REU1 LDN 4
STM BIDW-1,WP
SOD WP
NJN REU1 IF MORE BYTES TO SET
UJN REU3 CLEAR BLOCK AND PRU COUNTER
REU2 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS GET AND PROCESS CTS GENERAL STATUS
MJN REU2 IF RETRY
REU3 LDN 0 CLEAR BLOCK AND PRU COUNTER
STD BL
STD BL+1
STD EP CLEAR ERROR PARAMETERS
STD EP+1
STD EI
LDD HP
SHN 21-7
PJN REU4 IF NOT CTS UNIT
LDN 0
STD WP
REU4 LDD UP SET LAST BLOCK EOR/EOF
SCN 10
LMN 10
STD UP
UJP REUX RETURN
SDS SPACE 4,25
** SDS - SET DRIVE SPEED FOR MTS/ATS UNITS.
*
* EXIT (HP, 2-3) = DRIVE SPEED.
* FOR ATS AND MTS.
* 0 = 100 IPS DRIVE.
* 1 = 150 IPS DRIVE.
* 2 = 200 IPS DRIVE.
*
* FOR FSC.
* 0 = 75 IPS DRIVE.
* 1 = 125 IPS DRIVE.
* 2 = 200 IPS DRIVE.
*
* FOR CMTS.
* 2 = 200 IPS DRIVE.
*
* FOR ISMT.
* 3 = 25 IPS DRIVE.
*
* FOR CTS.
* 0 = 79 IPS DRIVE.
*
* USES T1.
SDS1 LPN 12
ZJN SDS2 IF NOT FSC/CMTS/ISMT
LPN 10
ZJN SDS1.1 IF NOT ISMT
LDN 3
UJN SDS3 SAVE INDEX FOR ISMT
SDS1.1 LDM ATUS SET FSC/CMTS DRIVE SPEED
LPN 7
SBN 3
PJN SDS3 IF *STC* HAS VALID UNIT SPEED STATUS
UJN SDSX SET DEFAULT DRIVE SPEED TO 75 IPS
SDS2 LDM ATUS SET ATS DRIVE SPEED
SHN -1
LPN 3
SBN 1
ZJN SDS3 IF 100 IPS UNIT
LMN 3
SDS3 STD T1 SAVE INDEX
LDM SDSA,T1 SET SPEED
RAD HP
SDS SUBR ENTRY/EXIT
LDD HP
SHN 21-4
MJN SDS1 IF ATS-TYPE UNIT
LDM MTDS+4 SET MTS DRIVE SPEED
SHN -11
LPN 3
UJN SDS3 SET SPEED
SDSA BSS 0
CON 0 100 IPS DRIVE
CON 4 150 IPS DRIVE
CON 10 200 IPS DRIVE
CON 14 25 IPS DRIVE (ISMT)
USE BUFFER
TADD TSAD ADDRESS TABLE
ERROVL
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS MCH.
PRS LDC CTAB MODIFY CHANNELS
RJM MCH
LDD HP
SHN 21-7
MJN PRS1 IF CTS UNIT
LDN F0040 SET READ FUNCTION FOR MESSAGE
STM ITMA
PRS1 LDC TADD
STD CN
LJM PRSX EXIT
CTAB CHTB CHANNEL TABLE
OVERLAY (READ FUNCTION PROCESSOR.),,,READ
.IM SET 2 GENERATE ADDRESSES FOR OVERLAYS
STAP EQU PRSX STATUS PRIOR TO READ
SKEI EQU PRSX+1 IF .NE. 0, SKIPEI OR POSMF IN PROGRESS
WOCN EQU PRSX+2 WORD COUNT AT START OF OPERATION
ISKR EQU PRSX+3 IF .NE. 0, SKIP REVERSE INSTEAD OF READ
REVERSE
RDF SPACE 4,10
** RDF - PROCESS READ OPERATION.
*
* CALLS FCN, ITM, MRD, TDA.
ENTRY RDF
RDF LDC 6 SELECT CLIP LEVEL
RDFA EQU *-1
RDFB RJM FCN
* UJN *+2 (NORMAL CLIP LEVEL)
* UJN *+2 (CTS)
RJM ITM INITIATE TAPE MOTION
RDF1 LDD DS SAVE DEVICE STATUS
STM STAP
RJM MRD READ TAPE
RDFC RJM TDA TRANSFER DATA
* LJM SKP2 (SKIP FORWARD)
* LJM SKR4 (SKIP REVERSE)
* LJM RLA6 (READ CTS LABELS)
* LJM RLA6.1 (READ NON CTS LABELS)
* LJM CLA4 (LABEL ERROR PROCESSING)
RDFD UJN RDF1 LOOP
* UJN RDF (200 IPS/9 TRACK OR 6250 BPI AT 1X PPU
* SPEED OR 6250 BPI 200 IPS 2X PPU SPEED)
TITLE READ - SUBROUTINES.
MRD SPACE 4,10
** MRD - READ TAPE.
* NO MODIFICATIONS SHOULD BE MADE WITHOUT CHECKING IMPACT ON
* LONG BLOCK PROCESSING. IF CTS, THE FOLLOWING CODE IS
* OVERLAYED WITH *RCT*.
*
* EXIT (TB) = TERMINATION STATUS.
*
* CALLS BCW, CDO, DTS, FCN, MCC, PDA, STW, UBW, VDA, WEO.
*
* MACROS SADT.
MRD SUBR ENTRY/EXIT
LDN 0 CLEAR ERROR CODE
STD EC
STD TB CLEAR TYPE OF BLOCK
* INPUT DATA BLOCK.
STM MRDP CLEAR NOISE FLAG
MRD1 LDC 5005 SET BYTE COUNT FOR I FORMAT READ OR SKIP
MRDA EQU *-1
* LDC LBBY (READ LONG BLOCK FULL CHUNK)
* LDC WC*5+1 (ALL OTHER READ DATA OPERATIONS)
* LDC LABL+1 (READ LABELS)
* LDC 5001 (SKIP - NOT LONG BLOCKS)
* LDC LBBY (SKIP L FORMAT OR LONG BLOCK F FORMAT)
* LDC SLBY (SKIP LI FORMAT)
MRD3 IAM BUF,CH INPUT DATA
MRDB EQU *-1
* IAM BUFB,CH (READ LONG BLOCK)
* IAM /RLA/BUF (READ LABEL)
MRD4 STD T1
NJN MRD6 IF NOT EXCESS BLOCK LENGTH
LJM *+2
* LJM /RLB/RLB5 (READ LONG BLOCKS)
* LJM /RLB/RLB4 (READ LONG BLOCKS - CYBER 180)
* LJM /SKP/SLB (SKIP LONG BLOCKS)
MRDC EQU *-1
MRD4.1 LDN /MTX/BTL SET BLOCK TOO LONG
MRD5 RJM MCC MASTER CLEAR CHANNEL
* LDN 0
RJM STW GET GENERAL STATUS
LDN 1 SET TO COMPUTE MAXIMUM BYTE COUNT
STD T1
MRD6 LDM MRDA CALCULATE REMAINDER OF CM WORD COUNT
SBD T1
STD BY BYTE COUNT READ
STD SC SAVE ORIGINAL BYTE COUNT
ZJN MRD7 IF NO DATA READ
MRDD SBN 2 I FORMAT
* PSN (SI FORMAT)
* ADN 4 (ALL OTHER FORMATS)
STD T2
* CALCULATE WORD COUNT.
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
MRD7 STD WC
MRDE LPN 3
* LPN 1 (ATS UNIT)
MRDF UJN MRD9 7 TRACK AND 9 TRACK CODED
* ZJN MRD9 (9 TRACK I FORMAT)
LMN 1
NJN MRD8 IF NOT MODULO 4, 1
MRDG SOD BY
* PSN (ATS UNIT)
MRD8 SOD BY
* CHECK AND CONVERT DATA.
MRD9 LDD EC
LMN /MTX/BTL
ZJN MRD10 IF BLOCK TOO LARGE ERROR
RJM VDA VALIDATE DATA (I FORMAT)
MRDH EQU *-2
* UJN *+2 (ALL OTHERS)
RJM CDO CHECK DROP OUT FLAG
* PROCESS STATUS.
MRD9.1 RJM WEO WAIT END OF OPERATION
SHN 21-10
MRDI PJN MRD10 IF NOT NOISE BLOCK
* UJN MRD10 (ATS UNIT)
AOM MRDP SET NOISE BYPASSED FLAG
LDN 42 ISSUE REPEAT READ
RJM FCN
ACN CH
LJM MRD1 REINITIATE READ
MRD10 ZJN MRD11.2 IF NO ERRORS
SHN 21-4-21+10
PJN MRD11 IF NOT TAPE MARK
LDN 3 SET STOP TO EOI
STD TB
LDN 17 SET LEVEL NUMBER
STM LNUM
LDN 0 CLEAR WORD AND BYTE COUNTS
STD ES
STD WC
STD BY
LDN /MTX/BEI SET EOI
STD EC
LJM MRD16 PROCESS DATA
MRD11 LDD EC
ZJN MRD11.1 IF ERROR NOT ALREADY ENCOUNTERED
LDM MTDS
LPC 7077
MRDQ EQU *-1
* LPC 7777 (ATS UNIT)
ZJN MRD12 IF NOT FATAL ERROR
MRD11.1 LDN /MTX/STE STATUS ERROR
STD EC
UJN MRD12 NO TAPE ERROR REPORTED FROM HARDWARE
MRD11.2 LDM MTDS+1
* UJN MRD12 (NON-GCR UNIT)
MRDR EQU *-2
SHN 21-11
PJN MRD12 IF NO GCR SINGLE TRACK CORRECTION
AOM ECNT+4 INCREMENT COUNTER
SHN -14
RAM ECNT+3 INCREMENT COUNTER FOR OVERFLOW
* TRANSLATE ODD COUNT TO FILL STATUS.
MRD12 LDD DS PROCESS ODD COUNT STATUS
LPN 40
MRDJ UJN MRD13 7 TRACK, 9 TRACK CODED OR ATS UNIT
* SHN 0-5 (9 TRACK BINARY)
ADD SC
LPN 3
ZJN MRD13 IF NO FILL STATUS
LMN 3
ZJN MRD13 IF (N*3)+1 FRAMES - NO FILL STATUS
LDN 40 SET FILL STATUS
MRD13 STD ES CLEAR FILL STATUS
MRDK UJN MRD14 7 TRACK, 9 TRACK CODED, 9 TRACK I AND ATS
* CORRECT BYTE COUNT AND CM WORD COUNT.
* LDD DS (ALL OTHERS)
LPN 40
ZJN MRD14 IF NO ODD COUNT
LDD BY
LPN 2
ZJN MRD14 IF NOT MODULO 4, 2 OR 3
SOD BY CORRECT BYTE COUNT
SOD WC CORRECT CM WORD COUNT
MRDL UJN MRD14 SI FORMAT
* SHN 2 (ALL OTHER FORMATS)
ADD WC
SBD BY
ZJN MRD14 IF NEW CM WORD COUNT CORRECT
AOD WC
MRD14 UJN MRD15 NOT I OR 7 TRACK SI FORMAT
* LDD ES (I OR 7 TRACK SI FORMAT)
MRDM EQU *-1
LPN 40
ZJN MRD15 IF NO FILL STATUS
LDD EC
NJN MRD16 IF ERROR ALREADY ENCOUNTERED
LDN /MTX/STE
STD EC
MRD15 LDD EC
NJN MRD16 IF ERROR
RJM UBW UPDATE BID WINDOW
MRD16 LDD EC
ZJN MRD17 IF NO ERRORS
RJM DTS DETAIL STATUS
* THIS MUST BE THE FIRST ADDRESS IN THE TSAD TABLE. PRESET
* FOR CTS IS HARDCODED TO CHANGE THE FIRST ADDRESS IN THE
* TABLE.
SADT .FE,,6,A
MRD17 LDC * SET FET+6 ADDRESS (FOR BCW)
RJM PDA PROCESS DATA (I AND SI FORMAT)
MRDO EQU *-2
* RJM BCW BUILD CONTROL WORD ( S AND SOME F)
* RJM /3M /BCW (L FORMAT AND LONG BLOCKS IN F FORMAT)
* UJN MRD18 (NOT READ DATA)
MRD18 LDD DS SAVE STATUS FOR ERROR PROCESSOR
STM //STER
LJM MRDX RETURN
MRDP BSS 1 NOISE BYPASSED FLAG
USE BUFFER
OVLS BSS 0 OVERLAY ORIGIN FOR SKIP
CIB SPACE 4,10
** CIB - CHECK INPUT BUFFER.
*
* ENTRY (CN - CN+4) = IN POINTER.
*
* EXIT (A) = WORD COUNT OF FREE BUFFER SPACE.
*
* MACROS SADT.
CIB1 LDD CM+3 LENGTH = OUT - IN - 1
SBD CN+3
SHN 14
ADD CM+4
SBD CN+4
SBN 1
PJN CIBX IF (IN + 1) .LT OUT
SADT .LF
ADC * (LIMIT - FIRST)
CIB SUBR ENTRY/EXIT
SADT .FE,,3,A
LDC * READ OUT
CRD CM
LDD CM+3
LPN 37
STD CM+3
SHN 14
LMD CM+4
SADT .LM,C
ADC -* (-LIMIT)
MJN CIB1 IF OUT .LT. LIMIT
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
TDA SPACE 4,15
** TDA - TRANSFER DATA.
* CALCULATES PARAMETERS FOR TRANSFER TO CENTRAL. IT ALSO
* CHECKS IF TERMINATION CONDITION HAS NOT BEEN MET, THERE
* IS NO ERROR, AND THE BUFFER WILL STILL HAVE ROOM FOR A
* BLOCK AFTER THE CURRENT ONE IS TRANSFERRED, THEN MOTION IS
* STARTED FOR THE NEXT BLOCK.
*
* ENTRY (TB) = STATUS OF BLOCK READ.
* (CN - CN+4) = IN POINTER.
* (WC) = WORD COUNT TO BE TRANSFERRED TO BUFFER.
*
* CALLS CIB, ITM, WCB.
*
* MACROS SADT.
TDA SUBR ENTRY/EXIT
LDD WC
TDAA ADN 0 ALLOW FOR CONTROL WORDS
* ADN 1 (260 READ NOT LONG BLOCKS)
* ADN 2 (200 READ NOT LONG BLOCKS)
* PSN (LONG BLOCKS - FLAG FOR OTHER OVERLAYS)
STD T6
* LABEL BUFFER - WILL OVERLAY REMAINDER OF *TDA*.
LBUF EQU * BEGINNING OF LABEL BUFFER
TDAB UJN TDA1 UPDATE FET POINTERS
* PSN (READ SKIP)
RJM CIB CHECK INPUT BUFFER
SBD T6
PJN TDA1 IF ROOM IN BUFFER FOR BLOCK
RAD T6 ADJUST WORDS TO BE TRANSFERRED
TDA1 LDD CN+3 SAVE IN
STD T4
LDD CN+4
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE IN
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* (-LIMIT)
MJN TDA2 IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD CN+4 RESET IN
SHN -14
STD CN+3
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
TDA2 LDD TB
TDAC SBN 0 READ STOP CONDITION
PJN TDA5 IF TERMINATION MET
RJM CIB CHECK INPUT BUFFER
SADT .BS,C
TDAD ADC -* (- MAXIMUM BLOCK SIZE)
TDAE MJN TDA4 IF NOT ROOM FOR NEXT BLOCK
* PSN (READ-SKIP)
SADT .BS,C
ADC -* (-MAXIMUM BLOCK SIZE)
SHN -21
RAM WCBC
LDD EP CHECK IF ERROR OR RECOVERY IN PROGRESS
LPN 77
ADD EC
ADD DF CHECK DROP OUT FLAG
NJN TDA3 IF DROP OUT OR ERROR CONDITION
TDAF RJM ITM INITIATE TAPE MOTION
* UJN *+2 (LONG BLOCKS / 200 IPS / GCR NOT 2X PPU)
RJM WCB WRITE CENTRAL BUFFER
LJM TDAX RETURN
TDA3 RJM WCB WRITE CENTRAL BUFFER
LJM RET2 REQUEUE
TDA4 LDN 0 INDICATE NO COMPLETION
STD TB
UJN TDA6 TRANSFER DATA TO CM BUFFER
TDA5 LDD WC
NJN TDA6 IF DATA
STD T6 DO NOT TRANSFER CONTROL WORDS
LDD T4 BACK UP FET POINTER
STD CN+3
LDD T5
STD CN+4
TDA6 RJM WCB WRITE CENTRAL BUFFER
TDAG UJN TDA7 COMPLETE FET
* LDM LNUM (READSKP)
CON LNUM
TDAH SBN 0 LEVEL NUMBER DESIRED
PJN TDA7 IF TERMINATION MET
TDAI LDN 4 SET TO SKIP RECORD
* LDN 10 (IF FILE SKIP REQUIRED)
STD PB INDICATE TO MAGNET TO SKIP
LDN /MTX/BEI
LJM RET3 RETURN ERROR CODE
TDA7 LDD TB
ZJN TDA8 IF PRU READ COMPLETE OR BUFFER FULL
LDD UP SET EOR/EOF FLAG
SCN 10
LMN 10
STD UP
LDD TB
ADN 1 RETURN EOR/EOF
SHN 3+4
LMM LNUM MERGE LEVEL NUMBER
SHN 16
TDA8 ADN 1
LJM RET SET FET COMPLETE
ORLA EQU LBUF+CLBL+12 ORIGIN ADDRESS FOR READ LABEL OVERLAY
WCB SPACE 4,15
** WCB - WRITE CENTRAL BUFFER.
* WRITES DATA TO CENTRAL, THEN CHECKS IF ERROR MUST BE
* PROCESSED. ERRORS INCLUDE TAPE MARKS AND EOT.
* IF ERROR, THEN READ ERROR RECOVERY IS CALLED.
*
* ENTRY (T4 - T5) = IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* CALLS *CRE*, *REM*.
*
* MACROS CALL, SADT.
WCB SUBR ENTRY/EXIT
LDD T6
ZJN WCB1 IF NO FIRST PART
LDD T4 WRITE FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CWM BUF,T6
WCBA EQU *-1
* CWM BUFC,T6 (CONTROL WORD MODE)
LDD T7
ZJN WCB1 IF NO SECOND PART
LDD T6 SET BUFFER ADDRESS
SHN 2
ADD T6
ADM WCBA
STM WCBB
SADT .FT,,,A
LDC * (FIRST+RA)
CWM *,T7
WCBB EQU *-1
WCB1 LDD EP
LPN 77
ADD EC
ZJN WCB2 IF NO ERROR ENCOUNTERED
WCBF CALL REM LOAD READ ERROR PROCESSOR
* CALL CRE LOAD ERROR PROCESSOR (CTS)
SADT .FE,,2,A
WCB2 LDC * UPDATE IN POINTER IN FET
CWD CN
WCBC LDN 0 RECALL CPU FLAG
ZJN WCB3 IF NO RECALL CPU
LDD OA RECALL CPU
CWM WCBE,ON
SOM WCBC
WCB3 AOD BL+1 INCREMENT BLOCK COUNT
SHN -14
RAD BL
AOD BT INCREMENT BLOCKS TRANSFERRED
LJM WCBX
WCBD EQU *-1
* LJM RET4 (FATAL READ ERROR)
WCBE CON DRCM DRIVER RECALL CPU MONITOR FUNCTION
SPACE 4,10
OVLB BSS 0 FWA OF OVERLAID CODE
* WARNING ..........
*
* THE FOLLOWING ROUTINES CANNOT USE ADDRESS MODIFICATION.
VDA SPACE 4,10
** VDA - VALIDATE DATA.
* CHECKS I FORMAT TRAILER INFORMATION.
VDA SUBR ENTRY/EXIT
LDD BY
ZJN VDAX IF NO DATA READ
LDD EP
SHN 21-12
MJN VDAX IF OPPOSITE PARITY BEING TRIED
LDM BUF-4,BY SAVE BLOCK LENGTH
STM //BNEI
LDM BUF-3,BY
STM //BNEI+1
LMD BL
SHN 14
LMM BUF-2,BY
STM //BNEI+2
LMD BL+1
NJN VDA1 IF BLOCK NUMBER ERROR
LDM //BNEI
LMD BY
ZJN VDAX IF CORRECT BLOCK LENGTH
VDA1 LDN /MTX/BNE
STD EC
UJN VDAX RETURN
PDA SPACE 4,10
** PDA - PROCESS DATA.
* PROCESSES INTERNAL FORMAT LEVEL NUMBERS.
*
* (TB) = TERMINATION STATUS.
PDA SUBR
PDAA UJN PDA1 I FORMAT
* LDD ES (SI FORMAT)
LPN 40
ZJN PDA1 IF NO FILL STATUS
LDD WC
ZJN PDA1 IF NOISE RECORD
SOD WC DECREMENT WORD COUNT
SOD BY DECREMENT BYTE COUNT
PDA1 LDD BY
ZJN PDA4 IF NO BYTES READ
LMM MRDA
PDAC EQU *-1
* LMM RCTA (CTS)
LMN 1
STM BUFL SET 0 LEVEL NUMBER
ZJN PDA3 IF FULL PRU
LDM BUF-1,BY SET LEVEL NUMBER FOR CONTROL WORD
LPN 17
STM BUF-4,BY
STM LNUM
LMN 17
ZJN PDA2 IF EOF
LCN 1
PDA2 ADN 2
PDA3 STD TB SET BLOCK STATUS
PDA4 LDD WC
SHN 2
PDAB ADD WC (200 READ)
* LDD WC (260 READ)
STM BUFC+4
LJM PDAX
.BCWA BSS 0
BUF SPACE 4,10
BUFFER
BCW SPACE 4,10
** BCW - BUILD CONTROL WORD.
* OVERLAYS *VDA* AND *PDA* FOR ALL FORMATS EXCEPT I AND SI.
*
* ENTRY (A) = ABSOLUTE ADDRESS OF FET+6.
*
* EXIT (FET+6) UPDATED IF NON-CONTROL WORD READ.
*
* USES CM - CM+4.
.BCWB BSS 0
LOC OVLB
BCW6 LDD T1 SET UBC IN FET
STD CM+2
LDC *
BCWG EQU *-2
CWD CM
BCW SUBR ENTRY/EXIT
CRD CM READ FET+6
STM BCWG+1 SAVE ADDRESS
SHN -14
LMC LDCI
STM BCWG
LDD WC CALCULATE UNUSED BIT COUNT
SHN 2
ADD WC
STD T1
ZJN BCW1 IF NO WORDS
BCWA LDN 0 SET BLOCK STATUS
* LDN 1 (S/L FORMAT NOT 200/260 CODE)
STD TB
LDN 0 SET LEVEL NUMBER
STM BUF,T1
STM LNUM
BCW1 STD T1
LDD WC
BCWB EQU *-1
* LDD BY (200 READ CODE)
STM BUFC+4
BCWC UJN BCW2 CALCULATE UNUSED BIT COUNT
* SHN 2
ADD WC
SBD BY
SHN 2 4 * UNUSED BYTE COUNT
STD T1
SHN 1 8 * UNUSED BYTE COUNT
RAD T1 12 * UNUSED BYTE COUNT
BCW2 LDD ES
LPN 40
BCWD ZJN BCW3 IF NO FILL STATUS
* ZJN BCW5 (9 TRACK BINARY OR CTS)
LDD WC
ZJN BCW4 IF ZERO WORDS
BCWE LDN 6 (7 TRACK OR 9 TRACK CODED)
* LDN 8D (9 TRACK BINARY OR CTS)
BCW3 RAD T1
BCW4 STM BUFC+2
LJM BCWX RETURN
* LJM BCW6 (S/L FORMAT NON-CONTROL WORD READ)
BCWF EQU *-1
BCW5 LDD BY
LPN 1
SHN 2
UJN BCW3 SET UNUSED BIT COUNT
.BCWC BSS 0
LOC *O
.BCWL EQU *-.BCWB
ERRNG .BCWA-.BCWC OVERLAID CODE OVERFLOW
TITLE READ - PRESET.
PRS SPACE 4,20
** PRS - PRESET.
*
* ENTRY FOR A READ FUNCTION THAT IS NOT LONG BLOCKS THIS
* PRESET CODE RETURNS TO THE CALLER, LOADS AND
* EXECUTES OVERLAY *CPP*, THEN ENTERS AT *PRS39.
*
* EXIT (WP, EP+1) PLUS THE BLOCK NUMBER IN (BL,BL+1) IS THE
* PHYSICAL BLOCK NUMBER FOR CTS.
* (SC) = 1 IF *RLB* MUST BE LOADED.
* (SC) = 2 IF *RLI* MUST BE LOADED.
* TO *RDF* IF READ FUNCTION AND NOT LONG BLOCKS.
*
* USES BT, CN, CN+4, SC, T1, T2, T8.
*
* CALLS CIB, MCH, /PRESET/RBI.
*
* MACROS ISTORE.
*
* NOTE OVERLAY *RLB* MUST IMMEDIATELY FOLLOW *READ* AND
* OVERLAY *RLI* MUST IMMEDIATELY FOLLOW *RLB*.
PRS LDD HP
SHN 21-7
PJN PRS0 IF NOT CTS
LDD BL
ADD BL+1
NJN PRS0 IF STARTING BLOCK ID ALREADY SAVED
RJM /PRESET/RBI READ BLOCK ID
AOM /PRESET/PICA LOCATE BLOCK NECESSARY IN ERROR RECOVERY
LDM BIDW+1
STD WP SAVE CURRENT BLOCK ID
LDM BIDW+2
STD EP+1
PRS0 LDD FM
SHN -6
STD T8 SET FORMAT
LMN /MTX/TFLI
NJN PRS0.1 IF NOT LI FORMAT
LDD FN
LMN /MTX/RDF
NJN PRS0.1 IF NOT READ FUNCTION
LDN 2
RAD SC SET TO LOAD READ LI FORMAT OVERLAY
LJM PRSX RETURN
PRS0.1 LDD HP
SHN 21-7
PJN PRS0.2 IF NOT CTS
LDC UJNI+2
STM RDFB SKIP CLIP LEVEL FUNCTION
LDC RCTA
STM PDAC
LDC LDNI+CRE/10000 CALL CTS ERROR PROCESSOR
STM WCBF
LJM PRS6 CONTINUE PRESET
PRS0.2 LDC PRSD MODIFY CHANNELS
RJM //MCH
LDD HP
LPN 20
ZJN PRS1 IF MTS UNIT
LDN 0 MODIFY INSTRUCTIONS FOR ATS CONTROLLER
STM MRDG
LCN 0
STM MRDQ
LCN 2
RAM MRDE
LDM PRSG
STM PRSA
LDC UJNI-PJNI
RAM MRDI
LDD HP
SHN 21-1
PJN PRS0.3 IF NOT GCR UNIT
ISTORE MRDR,(UJN MRD12) DISABLE CORRECTED ERROR CHECK
PRS0.3 LDM ATUS SET FOR DENSITY CHECK
PRS1 STD T1
LDD HP
LPN 1
NJN PRS2 IF 9 TRACK DRIVE
LJM PRS9 CONTINUE PRESET
* PRESET FOR MTS/ATS 9 TRACK OPERATION.
PRS2 LDD T1 DETERMINE IF 6250 BPI
LPN 30
LMN 30
NJN PRS3 IF NOT 6250 BPI
LDM DLYA
LPN 14
ZJN PRS5 IF 1X PPU SPEED
LPN 4
ZJN PRS4 IF 2X PPU
UJN PRS6 4X PPU, FULL MOTION AHEAD
PRS3 LDM DLYA
LPN 14
NJN PRS6 IF 2X OR 4X PPU SPEED
PRS4 LDD HP
LPN 10
LMN 10
NJN PRS6 IF NOT 200 IPS UNIT
PRS5 LDC UJNI+2 DISABLE MOTION AHEAD
STM TDAF
LDM PRSF
STM RDFD
PRS6 LDD MD
SHN 21-6
MJN PRS9 IF CODED
* 9 TRACK BINARY.
LDD HP
LPN 20
NJN PRS7 IF ATS CONTROLLER
LDC SHNI+72
STM MRDJ
PRS7 LDD T8
LMN /MTX/TFI
ZJN PRS8 IF I FORMAT
PRSA LDC LDDI+DS
* UJN PRS9 (ATS CONTROLLER)
STM MRDK
LDD T8
LMN /MTX/TFSI
ZJN PRS9 IF SI FORMAT
LDC SHNI+2
STM MRDL
UJN PRS9 SAVE WORD COUNT
PRS8 LDC ZJNI-UJNI
RAM MRDF
LDC ZJNI-UJNI
RAM RCTF+.RCT-RCTX (CTS)
PRS9 LDD WC SAVE BEGINNING WORD COUNT
STM WOCN
LDD UP
SCN 10 CLEAR EOR/EOF FLAG
STD UP
LDD FN
LMN /MTX/RDF
ZJN PRS11 IF READ
LMN /MTX/SKP&/MTX/RDF
ZJN PRS10 IF SKIP
LDN /MTX/TFF PROCESS AS IF F FORMAT
STD T8
PRS10 LDC UJNI+MRD18-MRDO
ERRNG MRDO-MRD18+37
STM MRDO
STM RCTL+.RCT-RCTX (CTS)
PRS11 LDD MD
LPN 60
NJN PRS12 IF CONTROL WORD REQUEST
LDD T8
LMN /MTX/TFS
ZJN PRS15 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
ZJN PRS15 IF L FORMAT
UJN PRS13 CONTINUE PRESET
PRS12 SHN -4 ALLOW SPACE FOR CONTROL WORDS
RAM TDAA
LCN BUF-BUFC RESET BUFFER WRITE ADDRESS
RAM WCBA
PRS13 LDD T8
SBN /MTX/TFSI+1
PJN PRS16 IF NOT I OR SI
LDD MD
LPN 40
NJN PRS14 IF 200 READ
LDC LDDI+WC
STM PDAB
PRS14 LJM PRS20 CONTINUE PRESET
PRS15 AOM BCWA+.BCWB-OVLB SET TO RETURN EOR ALWAYS
LDC BCW6 ENABLE RETURN OF MLRS
STM BCWF+.BCWB-OVLB
PRS16 LDN .BCWL-1 MOVE *BCW*
STD T1
PRS17 LDM .BCWB,T1
STM OVLB,T1
SOD T1
PJN PRS17 IF STILL MORE CODE TO MOVE
LDC BCW ENABLE CODE
STM MRDO+1
STM RCTL+1+.RCT-RCTX (CTS)
LDD MD
SHN 21-6
MJN PRS18 IF CODED
LDD HP
SHN 21-7
MJN PRS17.1 IF CTS
SHN 21-0-21+7
PJN PRS18 IF 7 TRACK
PRS17.1 LDN BCW5-BCW3 MODIFY UBC CODE FOR 9 TRACK AND CTS
RAM BCWD
LDN 2
RAM BCWE
PRS18 LDD MD
LPN 40
NJN PRS19 IF 200
LDC SHNI+2
STM BCWC
UJN PRS20 CONTINUE PRESET
PRS19 LDC LDDI+BY
STM BCWB
PRS20 LDC TRSO
STD T1
LDN 0
UJN PRS22 SET READ STOP CONDITION
PRS21 LDN 2 ADVANCE TABLE
RAD T1
LDI T1
ZJN PRS25 IF END OF TABLE
PRS22 LMM CIOE
LPC 774
NJN PRS21 IF NOT MATCH
AOD T1
LDD T8
LMN /MTX/TFS
ZJN PRS23 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
NJN PRS24 IF NOT L FORMAT
PRS23 LDI T1 SELECT S/L PORTION OF TABLE
SHN -6
STI T1
PRS24 LDM LNUM
SHN -10
STD T2
LMN 17
NJN PRS25 IF NOT LEVEL 17
LDI T1
SHN -3
STI T1
LDN 10-4 SET FILE SKIP FOR *READSKP*
RAM TDAI
PRS25 LDI T1 SET STOP CONDITION
LPN 3
RAM TDAC
LDM CIOE
LPC 774
LMN 20
NJN PRS27 IF NOT READ SKIP
STM TDAB
STM TDAE
LDC UJNI-PJNI
RAM PRSC
LDC LDMI
STM TDAG
LDD T2
ZJN PRS27 IF LEVEL 0
LMN 17
ZJN PRS26 IF LEVEL 17
LDD T8
SBN /MTX/TFSI+1
PJN PRS27 IF NOT I/SI FORMAT
PRS26 LDD T2 SET LEVEL NUMBER
RAM TDAH
PRS27 LDD T8
LMN /MTX/TFI
ZJN PRS28 IF I FORMAT
LDD WC SET BYTES TO READ
SHN 2
ADD WC
ADN 1
STM MRDA
STM RCTA+.RCT-RCTX (CTS)
LDC UJNI+2 DISABLE VALIDATE DATA
STM MRDH
STM RCTG+.RCT-RCTX (CTS)
PRS28 LDD T8
SBN /MTX/TFSI+1
PJN PRS31 IF NOT I OR SI
LDD HP
SHN 21-7
MJN PRS28.1 IF CTS
SHN 21-0-21+7
PJN PRS29 IF 7 TRACK
PRS28.1 LDD T8
LMN /MTX/TFSI
ZJN PRS30 IF SI FORMAT
PRS29 LDC LDDI+ES FORCE FILL STATUS TO ALWAYS BE ERROR
STM MRDM
LDC ZJNI-UJNI
RAM RCTJ+.RCT-RCTX (CTS)
UJN PRS31 CONTINUE PRESET
PRS30 LDC LDDI+ES
STM PDAA
PRS31 LDD T8
LMN /MTX/TFI
ZJN PRS33 IF I FORMAT
LMN /MTX/TFSI&/MTX/TFI
ZJN PRS32 IF SI FORMAT
LDC ADNI+4
PRS32 STM MRDD
STM RCTE+.RCT-RCTX (CTS)
PRS33 LDN 40 SELECT READ FUNCTION
STM //ITMA
LDD HP
SHN 21-7
MJN PRS34 IF CTS
LDC 4435
STM //WEOA
LDN 1
STM //WEOB
LDD EP SET CLIPPING LEVEL
LPC 700
ZJP PRS34.2 IF NORMAL CLIP LEVEL
RAM RDFA
UJP PRS35 CONTINUE PRESET
* REPLACE *MRD* WITH READ ROUTINE *RTC* FOR CTS.
PRS34 LDC .RCTL-1
STD T1 LENGTH OF CODE TO MOVE
PRS34.1 LDM .RCT,T1
STM MRDX,T1
SOD T1
PJN PRS34.1 IF MORE CODE TO MOVE
LDC .RCTA
RJM MCH MODIFY CHANNEL INSTRUCTIONS
* THE SADT MACRO FOR *MRD17* MUST BE THE FIRST ONE IN
* THE OVERLAY.
LDC RCTK*2
STM PRSE
LDC 6125 BITS TO TEST IN GENERAL STATUS
STM /PRESET/WFEA
LDN 1 BITS IN GENERAL STATUS THAT SHOULD BE SET
STM /PRESET/WFEB
LDD FN
LMN /MTX/RDF
NJN PRS35 IF NOT READ DATA
LDD T8
LMN /MTX/TFS
NJN PRS35 IF NOT S FORMAT
LDD MD
SHN 21-6
PJN PRS35 IF NOT CODED
LDN CLBL+1
STM RCTA LABEL LENGTH + 1
UJN PRS35 SET TO MODIFY INSTRUCTIONS
PRS34.2 LDC UJNI+2 DISABLE CLIP LEVEL SELECTION
STM RDFB
PRS35 LDC PRSE SET TO MODIFY INSTRUCTIONS
STD CN
LDN 2 SET TO FETCH IN POINTER
STD CN+4
LDC /SRU/ITRW*100 SET SRU INCREMENT
STM //CECA
LDD FN
LMN /MTX/RDF
NJN PRS38 IF NOT READ
LDD OV
ZJN PRS37 IF NOT POSSIBLE LONG BLOCKS
LDD T8
LMN /MTX/TFL
ZJN PRS36 IF L FORMAT
LMN /MTX/TFF&/MTX/TFL
NJN PRS37 IF NOT F FORMAT
PRS36 AOD SC SET TO LOAD LONG BLOCK OVERLAY
PRS37 LDC PRS39 SET TO RETURN HERE IF READ DATA
STD BT
PRS38 LJM PRSX RETURN
* RETURN HERE IF READ DATA, NOT LONG BLOCKS.
PRS39 LDM TDAD SET BLOCK SIZE
STM PRSB
LDM TDAD+1
STM PRSB+1
RJM CIB CHECK INPUT BUFFER
PRSB ADC -* (- MAXIMUM BLOCK SIZE)
PRSC PJN PRS40 IF ENOUGH ROOM IN BUFFER
* UJN PRS40 (READSKP)
LDN 1
LJM RET SET FET COMPLETE
PRS40 LDN 0 PRESET EXIT CONDITION
STD PB
LJM RDF ENTER READ CODE
PRSD CHTB
* THE FIRST ENTRY IN THIS TABLE MUST BE FROM *MRD17*. CTS
* PRESET CHANGES THE FIRST ENTRY.
PRSE TSAD
PRSF BSS 0
LOC RDFD
UJN RDF LOOP FOR NEXT BLOCK
LOC *O
PRSG BSS 0
LOC PRSA
UJN PRS9 CONTINUE PRESET
LOC *O
TRSO SPACE 4,10
** TRSO - TABLE OF READ STOP CODES.
TRSO BSS 0
CON 0,0000
CON 10,0011
CON 20,0011
CON 200,2323
CON 250,2222
CON 260,2222
CON 600,0033
CON 0
RCT SPACE 4,20
** RCT - READ CARTRIDGE TAPE.
*
* ENTRY AT *RCT2* FROM /RLB/CLB TO INPUT LAST CHUNK.
* AT *RCT3* FROM /RLB/CLB IF *1LT* INPUT LAST CHUNK.
* AT *RCT4* FROM */SKP/SLB* IF BLOCK TOO LONG.
* AT *RCT5* FROM */SKP/SLB* IF BLOCK NOT TOO LONG.
* AT *RCT5* FROM /RLB/CLB IF *1LT* COMPLETED TRANSFER.
* AT *RCT6* FROM /RLB/CLB IF *1MT* COMPLETED TRANSFER.
* AT *RCT13* FROM /RLA/RLA IF BACKSPACE.
*
* EXIT (EC) = ERROR CODE, 0 IF NO ERROR.
* (TB) = TYPE OF BLOCK.
* (WC) = WORD COUNT FOR TRANSFER TO CENTRAL.
* (BY) = BYTES READ.
* (ES) = 0 IF NO FILL STATUS.
* TO */SKP/SLB* IF SKIP LONG BLOCK, NOT LAST CHUNK.
* TO */RLB/CLB1* IF COMMAND RETRY FOR READ LONG BLOCK.
*
* USES T1, T2.
*
* CALLS BCW, *CCL*, CDO, /RLB/CRA, PDA, VDA, /PRESET/WFE.
*
* MACROS CALL, SADT.
*
* NOTE OVERLAY *RLI* READS CARTRIDGE TAPE FOR LI FORMAT.
.RCT BSS 0
LOC MRDX
RCT SUBR ENTRY/EXIT
RCT1 LDN 0 CLEAR ERROR CODE
STD EC
STD TB CLEAR TYPE OF BLOCK
LDC 5005 SET BYTE COUNT FOR I FORMAT READ OR SKIP
RCTA EQU *-1
* LDC LBBY (READ LONG BLOCK FULL CHUNK)
* LDC WC*5+1 (ALL OTHER READ DATA OPERATIONS)
* LDC CLBL+1 (READ LABELS)
* LDC 5001 (SKIP - NOT LONG BLOCKS)
* LDC LBBY (SKIP L FORMAT OR LONG BLOCK F FORMAT)
* LDC SLBY (SKIP LI FORMAT)
RCT2 IAM BUF,CH INPUT DATA
RCTB EQU *-1
* IAM BUFB,CH (READ LONG BLOCK)
* IAM /RLA/BUF,CH (READ LABEL)
RCT3 STD T1
NJN RCT6 IF NOT EXCESS BLOCK LENGTH
LJM *+2
RCTC EQU *-1
* LJM /SKP/SLB (SKIP LONG BLOCKS AND SKIP LI FORMAT)
* THROW AWAY DATA WHEN THE BLOCK IS TOO LONG. IF THE DATA
* IS NOT TAKEN, OVERRUN ERRORS COULD OCCUR. ALSO, WITH A
* CROSS-COUPLED CONTROLLER, THE CONTROLLER HUNG WITH CHLA
* 030F FLASHING ON ITS ERROR DISPLAY.
RCT4 LDC 500
IAM ERLB,CH
ZJN RCT4 IF THERE MAY BE MORE DATA
LDN /MTX/BTL SET BLOCK TOO LONG
STD EC
LDN 1 SET TO COMPUTE MAXIMUM BYTE COUNT
RCT5 STD T1
RCT6 LDM RCTA CALCULATE REMAINDER OF CM WORD COUNT
SBD T1
STD BY BYTE COUNT READ
* PROCESS STATUS.
RJM /PRESET/WFE WAIT FOR END OF OPERATION
PJN RCT8 IF NOT COMMAND RETRY
LDN 0
RCTD EQU *-1
* UJN RCT7 (LONG BLOCK)
UJN RCT6.1 SKIP CLEAR OF CHUNK COUNT
RCTM EQU *-1
* STM /SKP/IDFE (SKIP LI FORMAT)
CON /SKP/IDFE
RCT6.1 ACN CH
LJM RCT1 READ THE DATA AGAIN
RCT7 RJM /RLB/CRA READ *1LT* INTERFACE WORD
NJN RCT7 IF *1LT* TRANSFER TO CM NOT COMPLETE
ACN CH
LDM /RLB/BCWC BACK UP POINTERS
STD CN+3
LDM /RLB/BCWD
STD CN+4
LJM /RLB/CLB1 RESEND THE DATA
RCT8 STM RCTH
LDD FN
LMN /MTX/RDF
NJN RCT10 IF NOT READ
LDD MD
SHN 21-6
PJN RCT10 IF NOT CODED
LDD BY
ZJN RCT10 IF NO DATA READ
LMN CLBL
NJN RCT9 IF BLOCK TOO SHORT
LDC LPNI
STM RCTI TO INDICATE NO FILL STATUS
CALL CCL CODE CONVERT LABEL
LDN LABL LABEL LENGTH AFTER CONVERSION
STD BY
LDD DS
LPN 40
NJN RCT10 IF FILL STATUS
RCT9 LDN /MTX/BTL BLOCK LENGTH ERROR
STD EC
RCT10 LDD BY
ZJN RCT11 IF NO DATA READ
SBN 2 I FORMAT
RCTE EQU *-1
* PSN (SI FORMAT)
* ADN 4 (ALL OTHER FORMATS)
STD T2
* CALCULATE WORD COUNT.
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
RCT11 STD WC
LPN 1
UJN RCT12 CHECK AND CONVERT DATA (CODED)
RCTF EQU *-1
* ZJN RCT12 (I FORMAT)
SOD BY
* CHECK AND CONVERT DATA.
RCT12 RJM VDA VALIDATE DATA (I FORMAT)
RCTG EQU *-2
* UJN *+2 ALL OTHER FORMATS
RJM CDO CHECK DROP OUT FLAG
LDC * ERROR STATUS FROM *WFE*
RCTH EQU *-1
RCT13 ZJN RCT15 IF NO ERROR
SHN 21-4
PJN RCT14 IF NOT TAPE MARK
LDN 3 SET STOP TO EOI
STD TB
LDN 17 SET LEVEL NUMBER
STM LNUM
LDN 0 CLEAR WORD AND BYTE COUNTS
STD ES
STD WC
STD BY
LDN /MTX/BEI SET EOI
STD EC
UJN RCT16 PROCESS DATA
RCT14 LDN /MTX/STE
STD EC STATUS ERROR
RCT15 LDD DS
LPN 40
RCTI EQU *-1
* LPN 0 S FORMAT READ
STD ES
UJN RCT16 SET FET+6 ADDRESS
RCTJ EQU *-1
* ZJN RCT16 IF NO FILL STATUS (I FORMAT)
LDN /MTX/STE
STD EC STATUS ERROR
* SADT .FE,,6,A
RCT16 LDC * SET FET+6 ADDRESS (FOR BCW)
RCTK EQU *-2
RJM PDA PROCESS DATA (I AND SI FORMAT)
RCTL EQU *-2
* RJM BCW BUILD CONTROL WORD (S AND SOME F)
* RJM /3M /BCW (L FORMAT AND LONG BLOCKS IN F FORMAT)
* UJN RCT17 (NOT READ DATA)
ERRNZ MRD18-MRDO-RCT17+RCTL IF MODIFYING WRONG ADDRESS
RCT17 LJM RCTX RETURN
ERRMI OVLS-*
LOC *O
.RCTL EQU *-.RCT LENGTH OF *RCT*
.RCTA CHTB CHANNEL TABLE
OVERLAY (READ LONG BLOCK PROCESSOR.),(BUFC+5),,RLB
.IM SET 1 SET FOR ADDRESS MODIFICATION ON ERRORS
RLB SPACE 4,10
** RLB - READ LONG BLOCK.
*
* CALLS ADP, /READ/CIB, CRA, FCN, ITM, /READ/MRD, SRQ,
* /READ/TDA, WDA.
*
* MACROS SADT.
ENTRY RLB
RLB RJM /READ/CIB CHECK INPUT BUFFER
SADT .BS,C
ADC -* (-MAXIMUM BLOCK SIZE)
RLBA PJN RLB1 IF ENOUGH ROOM IN BUFFER
* UJN RLB1 READ SKIP
LDN 1
LJM RET SET FET COMPLETE
RLB1 LDD CN+3 SAVE STARTING IN POINTER
STM BCWC
LDD CN+4
STM BCWD
* THE FOLLOWING CODE IS OVERLAYED WITH *CLB* FOR CTS.
RLBB LDN 0 ALLOW FOR CONTROL WORDS
* LDN 1 (200/260 READ CODE)
RJM ADP
LDN 0
STM RLBH CLEAR SHUTDOWN ENABLED FLAG
STM BCWA
STM .BYC
STD EC CLEAR ERROR CODE AND TERMINATION STATUS
STD TB
UJN RLB2 SET PCL
* PSN (ATS NON-CYBER 180)
RLBJ EQU *-1
LDC NJNI+.RLB12-.RLBB RESET END-OF-BLOCK CHECK
STM .RLBB
RLB2 LDM /READ/RDFA SET PCL
RLBC RJM FCN
* UJN *+2 (NORMAL CLIP LEVEL)
RJM ITM INITIATE TAPE MOTION
LDN 0 SET UP POINTERS FOR *1LT*
RJM ADP
LDN 1 SEND REQUEST TO *1LT*
RJM SRQ
LDD DS SAVE DEVICE STATUS
STM /READ/STAP
LDC RLB5 SET EXIT ON END OF INPUT
* LDC RLB4 (CYBER 180 IOU)
RLBD EQU *-1
STM /READ/MRDC
LDC LBBY SET BYTE COUNT
STM /READ/MRDA
LJM RLB2.1 READ TAPE
* LJM /READ/MRD3 (CYBER 180 - INITIATE INPUT)
* LJM .RLB11 (ATS NON-CYBER 180 - INITIATE INPUT)
RLBI EQU *-1
RLB2.1 RJM /READ/MRD READ TAPE
* RETURN FROM */READ/MRD*.
RLB3 LDN 77 DELAY
SBN 1
NJN *-1
RJM CRA SEE IF *1LT* PASSED CHUNK LENGTH
NJN RLB3 IF *1LT* NOT DONE
LJM RLB15 ACKNOWLEDGE *1LT*
* CYBER 180 - ENTER HERE AT END OF INPUT OF A CHUNK OF DATA.
RLB4 IJM RLB18,CH IF *1MT* FINISHED INPUT
EJM RLB4,CH IF *1LT* NOT TAKING DATA YET
CCF *,CH CLEAR CHANNEL FLAG
UJN RLB6 COUNT DATA TRANSFERRED
* ATS NON-CYBER 180 - ENTER HERE AT END OF INPUT OF A CHUNK.
RLB5 IJM RLB18,CH IF *1MT* FINISHED INPUT
EJM RLB5,CH IF *1LT* NOT TAKING DATA YET
RLB6 AOM .BYC COUNT CHUNK
LMN 1
ZJN RLB7 IF FIRST CHUNK
LDC /MTX/LBWD ADVANCE FOR *1LT* DATA
RJM ADP
AOM .BYC COUNT CHUNK
RLB7 LDC /MTX/LBWD ADVANCE FET POINTER
RJM ADP
RJM WDA WRITE DATA
LDM .BYC
ADN 1
SBD OV
MJN RLB9 IF MORE FULL CHUNKS TO INPUT
STM RLBH SET SHUTDOWN ENABLED IF ODD CHUNK COUNT
NJN RLB8 IF ODD CHUNK COUNT
LDD WC
SHN 2
ADD WC
RLB8 ADN 1 SET AMOUNT TO INPUT
STM /READ/MRDA
RLBE LDC /READ/MRDC+1 REENABLE SHUT DOWN
* LDC UJNI+.RLB14-.RLBB (ATS NON-CYBER 180)
RLBF STM /READ/MRDC
* STM .RLBB (ATS NON-CYBER 180)
RLBG LDM RLBH
* UJN .RLB9 (ATS NON-CYBER 180)
NJN RLB12 IF *1LT* WILL FINISH INPUT
LDM /READ/MRDA
UJN RLB10 INPUT DATA
* THE FOLLOWING CODE IS OVERLAID BY THE ATS INPUT LOOP IF ATS
* ON A NON-CYBER 180, OR BY THE IOU INPUT LOOP ON A CYBER 180.
.RLBA EQU * BEGINNING OF OVERLAID CODE
RLB9 LDC LBBY SET TO INPUT FULL CHUNK
RLB10 IJM RLB12,CH IF *1LT* FINISHED INPUT
RLB11 EJM RLB10,CH IF *1LT* TAKING DATA
EJM RLB10,CH IF *1LT* TAKING DATA
EJM RLB10,CH IF *1LT* TAKING DATA
EJM RLB10,CH IF *1LT* TAKING DATA
FJM /READ/MRD3,CH IF TIME FOR *1MT* TO TAKE DATA
UJN RLB11 WAIT FOR *1LT* TO COMPLETE
BSS 7 PAD TO MAKE SAME LENGTH AS ATS INPUT LOOP
.RLBAL EQU *-.RLBA LENGTH OF OVERLAID AREA
RLB12 LDN 77 DELAY
SBN 1
NJN *-1
RJM CRA SEE IF *1LT* PASSED CHUNK LENGTH
NJN RLB12 IF *1LT* NOT DONE
AOM BCWA SKIP UPDATE IN BCW
LDC LBBY CALCULATE BYTES IN LAST CHUNK
STM /READ/MRDA
SBD CM+1
STD T1
LMC LBBY
ZJN RLB13 IF *1LT* ENDED ON CHUNK BOUNDARY
LDC 0
RLBH EQU *-1
ZJN RLB14 IF SHUTDOWN NOT ENABLED
LDD WC SET BYTE COUNT ATTEMPTED TO READ
SHN 2
ADD WC
ADN 1
STM /READ/MRDA
SBD CM+1
LJM /READ/MRD4 DETERMINE IF BLOCK TOO LARGE
RLB13 STD T1
RLB14 LJM /READ/MRD6 EXIT
* PROCESSING CONTINUES HERE AFTER EXIT FROM MRD.
RLB15 LDD MD
LPN 40
ZJN RLB16 IF NOT 200 READ CODE
LDN 0 SET TRAILER CONTROL WORD
STM BUFB
LDN 1
RJM ADP
RJM WDA WRITE TRAILER CONTROL WORD
RLB16 LDN 0 SET WORD COUNT
STD WC
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
LDD TB
LMN 3
NJN RLB17 IF NOT TAPE MARK
LDM BCWC BACK UP POINTERS
STD CN+3
LDM BCWD
STD CN+4
RLB17 RJM /READ/TDA
LDM SRQB RESTORE STARTING WORD COUNT
STD WC
LJM RLB LOOP
RLB18 LDN 20 DELAY
SBN 1
NJN *-1 IF MORE DELAY
RJM CRA CHECK *1LT* COMPLETE
NJN RLB18 IF *1LT* NOT COMPLETE
LJM /READ/MRD6 PROCESS READ COMPLETION
.BYC CON 0 CHUNKS INPUT OF *LBBY* BYTES
TITLE SUBROUTINES.
ADP SPACE 4,15
** ADP - ADVANCE POINTER.
*
* ENTRY (CN+3 - CN+4) = IN POINTER.
* (A) = WORDS TO INCREMENT IN BY.
*
* EXIT (T4 - T5) = STARTING IN POINTER.
* (CN+3 - CN+4) = UPDATED IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* CALLS /READ/CIB.
*
* MACROS SADT.
ADP SUBR ENTRY/EXIT
STD T6
RJM /READ/CIB CHECK INPUT BUFFER
SBD T6
PJN ADP1 IF ROOM IN BUFFER FOR BLOCK
RAD T6 ADJUST WORD COUNT
ADP1 LDD CN+3 SAVE IN
STD T4
LDD CN+4
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE IN
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* (-LIMIT)
MJN ADPX IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD CN+4
SHN -14
STD CN+3
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
LJM ADPX RETURN
BCW SPACE 4,10
** BCW - BUILD CONTROL WORD.
*
* ENTRY (BCWA) = 0 IF *1MT* FINISHED INPUT.
*
* USES TB, T1, CM - CM+4.
*
* CALLS ADP, WDA.
*
* MACROS SADT.
BCW SUBR ENTRY/EXIT
LDC *
BCWA EQU *-1
NJN BCW2 IF *1LT* FINISHED INPUT
LDM .BYC
ZJN BCW1 IF FIRST PASS
AOM .BYC COUNT *1LT* BLOCK
LDC /MTX/LBWD
RJM ADP
BCW1 LDD WC TRANSFER LAST PART OF DATA
RJM ADP
RJM WDA WRITE DATA
UJN BCW3 CHECK FOR TAPE MARK
BCW2 LDD WC ADVANCE POINTER FOR *1LT*
RJM ADP
BCW3 LDD EC
LMN /MTX/BEI
ZJN BCW4 IF TAPE MARK
LDM /READ/BCWA
LPN 77
STD TB
LDN 0
STM LNUM
BCW4 STD T1
LDD MD
LPN 40
NJN BCW5 IF 200 READ
LDD WC 12 * UNUSED BYTES
SHN 2
ADD WC
SBD BY
SHN 2
STD T1
SHN 1
RAD T1
BCW5 LDD ES
LPN 40
BCWB ZJN BCW7 IF NO FILL STATUS
* ZJN BCW6 (9 TRACK BINARY - IF NO FILL STATUS)
LDD WC
ADM .BYC
ZJN BCW7 IF NO DATA READ
LDM /READ/BCWE
LPN 77
UJN BCW7 ADJUST UNUSED BIT COUNT
BCW6 LDD BY ADJUST UBC FOR ODD BYTE COUNT
LPN 1
SHN 2
BCW7 RAD T1
STM BUFC+2
LDC LBBY
STD T1
LDD BY
STM BUFC+4
LDD MD
LPN 60
NJN BCW9 IF CONTROL WORD READ
LDM BUFC+2
STD T1
LDD FM
SHN -6
LMN /MTX/TFL
NJN BCW8 IF NOT L FORMAT
SADT .FE,,6,A
LDC * RETURN UBC TO FET
CRD CM
LDD T1 SET UBC
STD CM+2
SADT .FE,,6,A
LDC *
CWD CM
BCW8 LJM BCWX RETURN
BCW9 LPN 40
NJN BCW10 IF 200 READ
LDC /MTX/LBWD
STD T1
LDD WC
STM BUFC+4
BCW10 LDN 0
STM BUFC+3
LDM .BYC
STD T0
ZJN BCW12 IF NO PARTIAL BLOCKS
BCW11 LDD T1 COUNT BYTES OR WORDS FOR EACH BUFFER FULL
RAM BUFC+4
SHN -14
RAM BUFC+3
SOD T0
NJN BCW11 IF MORE BLOCKS TO COUNT
BCW12 LDC * PUT CONTROL WORD IN BUFFER
BCWC EQU *-1
SHN 6
ADD RA
SHN 6
ADC *
BCWD EQU *-1
CWM BUFC,ON
LJM BCWX RETURN
CPD SPACE 4,10
** CPD - CHECK PP (1LT) DROP OUT.
*
* ENTRY (CPDA) = PP INPUT REGISTER ADDRESS.
*
* EXIT (A) = 0, IF *1LT* STILL AROUND.
*
* MACROS CHTE.
CPD SUBR ENTRY/EXIT
LDC *
CPDA EQU *-1
CRD CM
LDD CM+1
SCN 77
SHN 6
LMD CM
LMC 3RT1L
ZJN CPD1 IF *1LT*
SHN 14
LMN 1R1
NJN CPDX IF NOT *1LT* LOADING
CPD1 LDD CM+3
CHTE *
LMN CH
LPN 77
UJN CPDX RETURN
CRA SPACE 4,10
** CRA - CHECK REQUEST ACCEPTANCE FROM *1LT*.
*
* EXIT (A) = 0 IF *1LT* COMPLETE.
* (CM - CM+4) = REQUEST/RETURN WORD.
CRA SUBR ENTRY/EXIT
LDM CPDA
ADN 2
CRD CM
LDD CM
LMN 2
UJN CRAX RETURN
ITS SPACE 4,10
** ITS - INDICATE *1MT* TRANSFER STARTED.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
ITS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
LDD T0 RESTORE (A)
UJN ITSX RETURN
SRQ SPACE 4,10
** SRQ - SEND REQUEST TO *1LT* TO START BLOCK.
*
* ENTRY (A) = REQUEST CODE.
* (T4 - T5) = POINTER.
* (SRQB) = STARTING WORD COUNT.
* (SRQC) = STARTING OV CONTENTS.
*
* USES T1, T2, T3, CM - CM+4.
*
* CALLS CPD, HNG.
SRQ SUBR ENTRY/EXIT
STD T1
SRQA UJN SRQ1 NO CHANNEL FLAG PRESENT
* PSN (CYBER 180)
SCF *+2,CH SET CHANNEL FLAG
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
SRQ1 LDM CPDA CHECK *1LT* FUNCTION
ADN 1
CRD CM
LDD CM
LMN PRLM
ZJN SRQ3 IF *1LT* PAUSING
LDC * WORD COUNT
SRQB EQU *-1
STD T2
LDC * CHUNK COUNT
SRQC EQU *-1
STD T3
LDM CPDA ENTER REQUEST
ADN 2
CWD T1
RJM CPD CHECK IF PP *L1T* DROPPED OUT
ZJP SRQX IF *1LT* STILL AROUND
RJM HNG HANG PP
SRQ3 LJM RET2 REQUEUE REQUEST
WDA SPACE 4,10
** WDA - WRITE DATA TO CENTRAL.
*
* ENTRY (T4 - T5) = IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
WDA SUBR ENTRY/EXIT
LDD T6
ZJN WDAX IF NO FIRST PART
SHN 2
ADD T6
ADC BUFB
STM WDAA
LDD T4 TRANSFER FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CWM BUFB,T6
LDD T7
ZJN WDAX IF NO SECOND PART
SADT .FT,,,A
LDC * TRANSFER SECOND PART
CWM *,T7
WDAA EQU *-1
UJN WDAX RETURN
WTS SPACE 4,10
** WTS - WAIT FOR *1LT* TRANSFER TO START.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
*
* USES CM - CM+4.
WTS3 LDD T0 RESTORE (A)
WTS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
WTS1 LDM CPDA CHECK *1MT*/*1LT* INTERLOCK
ADN 3
CRD CM
LDD CM
ZJN WTS3 IF *1LT* TRANSFER STARTED
LDN 24 DELAY 10 MICROSECONDS
WTS2 SBN 1
NJN WTS2 IF NOT DONE
UJN WTS1 CHECK INTERLOCK
BUFFER SPACE 4,10
BUFFER BUFB
CALL SPACE 4,10
.IM SET 0 DISABLE ADDRESS MODIFICATION ON ERRORS
** *1LT* CALL BLOCK.
*
*T 18/ 1LT,6/ CP,12/ 0,12/ CHANNEL,12/ PPIA
*T, 12/ -0,24/ FIRST,24/ LIMIT
CALL VFD 18/3R1LT,6/0
CON 0 READ
CHTE *
CON CH CHANNEL
CON 0 *1MT* INPUT REGISTER ADDRESS
CON -0
SADT .FT,,,,SE
CON 0,0
SADT .LM,,,,SE
CON 0,0
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET.
*
* ENTRY AT *PRS10* AFTER OVERLAY *CPP* HAS BEEN LOADED AND
* EXECUTED.
*
* EXIT TO *RLB* WHEN PRESET COMPLETE.
*
* USES T1, T4, T5.
*
* CALLS CEC, CPD, CRA, MCH, SRQ.
*
* MACROS MONITOR, PAUSE.
PRS LDC UJNI+2 DISABLE READ AHEAD
STM /READ/TDAF
LDN 0 DISABLE ALLOWANCE FOR CONTROL WORDS
STM /READ/TDAA
LDC PRSC MODIFY CHANNELS
RJM MCH
LDD MD
LPN 60
ZJN PRS1 IF NO CONTROL WORDS
AOM RLBB ALLOW FOR CONTROL WORD
AOM .CLB+CLBA-CLB ALLOW FOR CONTROL WORD
PRS1 LDD HP
SHN 21-7
PJN PRS3 IF NOT CTS
ISTORE /READ/RCTD,(UJN /READ/RCT7) SET FOR COMMAND RETRY
LDC BUFB
STM /READ/RCTB
LDC CLB14
STM /READ/RCT RETURN ADDRESS FROM *RCT*
LDC BCW
STM /READ/RCTL+1
LDC .CLBL-1 LENGTH OF CODE TO MOVE
STD T1
PRS2 LDM .CLB,T1
STM CLB,T1
SOD T1
PJN PRS2 IF MORE CODE TO MOVE
LDC .CLBA MODIFY CHANNELS
UJP PRS5 CONTINUE PRESET
PRS3 LDC BUFB
STM /READ/MRDB
LDC BCW
STM /READ/MRDO+1
LDM /READ/RDFB DISABLE PCL IF NORMAL CLIP LEVEL
STM RLBC
LDD HP
LPN 60
SHN 6
RAM CALL+3 SET MTS/ATS FLAGS FOR *1LT*
LDK MABL CHECK MAINFRAME TYPE
CRD CM
LDD CM+1
SHN -6
LPN 41
LMN 1
NJN PRS7 IF NOT CYBER 180 IOU
* PRESET FOR CYBER 180 IOU.
LDC RLB3 SET EXIT FROM /READ/MRD
STM /READ/MRD
LDC RLB4 SET EXIT FROM READ
STM RLBD
LDC /READ/MRD3 SET ENTRY ON INITIAL READ
STM RLBI
LDN RLBRL.-1 MOVE IOU LOOP
STD T1
PRS4 LDM RLBR.,T1
STM .RLBA,T1
SOD T1
PJN PRS4 IF MORE CODE TO MOVE
LDC RLBC. MODIFY CHANNELS
PRS5 RJM MCH
LDN PSNI
STM SRQA
PRS6 LJM PRS9 CONTINUE PRESET
PRS7 LDD HP
SHN 21-4
PJN PRS6 IF MTS CONTROLLER
* INITIALIZE DRIVER FOR ATS (NON-CYBER 180).
LDC RLB3 SET EXIT FROM /READ/MRD
STM /READ/MRD
LDC .RLB11 MODIFY INSTRUCTIONS
STM RLBI
LDM PRSA
STM RLBG
LDC UJNI+.RLB14-.RLBB
STM RLBE+1
LDC .RLBB
STM RLBF+1
LDN PSNI
STM RLBJ
LDN .RLBRL-1 MOVE ATS INPUT LOOP
STD T1
PRS8 LDM .RLBR,T1
STM .RLBA,T1
SOD T1
PJN PRS8 IF NOT END OF MOVE
LDC .RLBC MODIFY CHANNELS
RJM MCH
PRS9 LDC PRSB SET FOR INSTRUCTION MODIFICATION
STD CN
LDC PRS10 SET TO RETURN CONTROL HERE AFTER LOAD
STD BT
LJM PRSX RETURN
* RETURN HERE AFTER ALL ROUTINES LOADED.
* BUILD CALL TO *1LT*.
PRS10 LDD CP MERGE CP NUMBER
SHN -7
RAM CALL+1
LDD IA SET INPUT REGISTER ADDRESS IN CALL
STM CALL+4
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
ZJN PRS11 IF MOVE FLAG
LDD MA WRITE REQUEST BLOCK
CWM CALL,TR
LDN 1 SET TO NOT QUEUE REQUEST
STD CM+1
MONITOR RPPM REQUEST PP
LDD CM+1
NJN PRS12 IF PP ASSIGNED
PRS11 LJM RET2 REQUEUE
PRS12 STM CPDA SAVE PP INPUT REGISTER ADDRESS
PRS13 LDN 77 DELAY
SBN 1
NJN *-1
LDD MA CHECK FOR *1LT* ACKNOWLEDGE
ADN 1
CRD CM
LDD CM
ZJN PRS15 IF *1LT* READY
RJM CPD CHECK FOR *1LT* DROP
NJN PRS11 IF *1LT* GONE
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
NJN PRS13 IF NO MOVE FLAG FOR THIS CP
RJM CEC CHANGE BACK TO MAGNET CP
PRS14 RJM CPD CHECK PP DROP
NJN PRS11 IF *1LT* GONE
PAUSE NE
UJN PRS14 LOOP
PRS15 LDD HP
LPC 201
ZJN PRS16 IF 7 TRACK
LDD MD
SHN 21-6
MJN PRS16 IF CODED
LCN BCW7-BCW6 SET TO ADJUST UBC IF ODD BYTE COUNT
RAM BCWB
PRS16 LDD WC SET WORD AND CHUNK COUNT FOR *1LT*
STM SRQB
LDD OV
STM SRQC
LDM CIOE
LPC 774
LMN 20
NJN PRS17 IF NOT READ SKIP
LDC UJNI-PJNI
RAM RLBA
RJM /READ/CIB
MJN PRS18 IF BUFFER ARGUMENT ERROR
STD T5
SHN -14
STD T4
LDN 3 SET REQUEST TO *1LT*
RJM SRQ
PRS17 LDN 77 DELAY
SBN 1
NJN *-1
RJM CRA SEE IF *1LT* ACCEPTED READ SKIP
LMN 2
NJN PRS17 IF *1LT* NOT DONE
PRS18 LDC /SRU/ITRL*100 SET SRU INCREMENT
STM //CECA
LJM RLB ENTER READ TAPE
* SEE *1LT* FOR FORMAT OF CALL BLOCK.
PRSA BSS 0
LOC RLBG
UJN .RLB9 WAIT FOR *1LT* TO COMPLETE
LOC *O
PRSB TSAD SLBP
PRSC CHTB
TITLE PRESET SUBROUTINES.
RLB SPACE 4,10
** ATS INPUT LOOP (NON-CYBER 180).
.RLBR BSS 0
LOC .RLBA
.RLB9 AJM *,CH IF WAITING FOR *1LT* TO DCN CHANNEL
LDM /READ/MRDA SET NUMBER OF BYTES TO INPUT
.RLB10 IJM RLB12,CH IF *1LT* FINISHED INPUT
EJM .RLB10,CH IF DATA NOT AVAILABLE
.RLB11 IAM BUFB,CH INPUT DATA
DCN CH+40 INDICATE TO *1LT* TO CONTINUE READ
.RLBB NJN .RLB12 IF END OF BLOCK
* UJN .RLB14 (SHUTDOWN ENABLED)
ACN CH
.RLB12 STD T1 SAVE BYTES REMAINING
.RLB13 IJM RLB18,CH IF *1MT* FINISHED INPUT
EJM .RLB13,CH IF *1LT* NOT TAKING DATA YET
LJM RLB6 SETUP FOR NEXT CHUNK
.RLB14 LJM /READ/MRD4 CHECK FOR BLOCK TOO LARGE
LOC *O
.RLBRL EQU *-.RLBR LENGTH OF ATS INPUT LOOP
ERRNG .RLBAL-.RLBRL OVERLAID CODE OVERFLOWED
.RLBC CHTB CHANNEL TABLE FOR ATS INPUT LOOP
* READ LOOP FOR CYBER 180 IOU.
RLBR. BSS 0
LOC .RLBA
RLB9. LDC LBBY BYTES TO INPUT
ERRNZ RLB9.-RLB9 CODE DEPENDS ON VALUE
RLB10. RJM WTS WAIT FOR *1LT* TRANSFER TO START
ERRNZ RLB10.-RLB10 CODE DEPENDS ON VALUE
RLB11. IJM RLB12,CH IF 1LT COMPLETED READ
SCF RLB11.,CH WAIT UNTIL FLAG IS CLEARED BY 1LT
RJM ITS INDICATE *1MT* TRANSFER STARTED
LJM /READ/MRD3 PROCESS DATA
LOC *O
RLBRL. EQU *-RLBR. LENGTH OF IOU INPUT CODE
ERRNG .RLBAL-RLBRL. IOU INPUT CODE TOO LONG
RLBC. CHTB TABLE OF CHANNELS FOR IOU CODE
CLB SPACE 4,15
** CLB - CTS LONG BLOCK READ.
*
* THIS ROUTINE OVERLAYS *RLB* STARTING AT *RLBB*.
.CLB BSS 0
LOC RLBB
CLB LDD DS
STM /READ/STAP SAVE GENERAL STATUS
RJM ITM INITIATE TAPE MOTION
CLB1 LDN 0 ALLOW FOR CONTROL WORD
CLBA EQU *-1
* LDN 1 200/260 READ CODE
RJM ADP ADVANCE IN POINTER
LDN 0
STM BCWA
STM .BYC CLEAR CHUNK COUNT
STD EC CLEAR ERROR CODE
STD TB CLEAR TERMINATION STATUS
* LDN 0
RJM ADP SET UP POINTERS FOR *1LT*
LDN 1
RJM SRQ SEND START BLOCK REQUEST TO *1LT*
LDC LBBY
STM /READ/RCTA
IAM BUFB,CH
UJN CLB4 CHECK IF ALL WORDS TRANSFERRED
CLB2 LDC LBBY
STM /READ/RCTA
RJM WTS WAIT FOR *1LT* TRANSFER TO START
CLB3 IJM CLB8,CH IF TRANSFER COMPLETE
SCF CLB3,CH IF *1LT* NOT FINISHED
RJM ITS INDICATE *1MT* TRANSFER STARTED
IAM BUFB,CH
CLB4 NJN CLB6 IF TRANSFER COMPLETE
CLB5 FJM CLB9,CH IF A WORD IS PRESENT FOR *1LT* TO TRANSFER
AJM CLB5,CH IF TRANSFER NOT COMPLETE
* *1MT* FINISHED THE CHANNEL TRANSFER.
CLB6 STD T1 SAVE WORDS NOT TRANSFERRED
CLB7 RJM CRA READ *1LT* INTERFACE WORD
NJN CLB7 IF *1LT* NOT COMPLETE
LJM /READ/RCT6 CALCULATE REMAINDER OF CM WORD COUNT
* *1LT* FINISHED THE CHANNEL TRANSFER.
CLB8 RJM CRA READ *1LT* INTERFACE WORD
NJN CLB8 IF *1LT* TRANSFER TO CM NOT COMPLETE
AOM BCWA SKIP UPDATE IN *BCW*
LDC LBBY
SBD CM+1
LJM /READ/RCT5 CALCULATE REMAINDER OF CM WORD COUNT
CLB9 CCF *,CH CLEAR CHANNEL FLAG (TELL *1LT* TO START)
AOM .BYC COUNT CHUNK
LMN 1
ZJN CLB10 IF FIRST CHUNK
LDC /MTX/LBWD
RJM ADP ADVANCE POINTER FOR *1LT* DATA
AOM .BYC COUNT CHUNK
CLB10 LDC /MTX/LBWD
RJM ADP ADVANCE POINTER
RJM WDA WRITE DATA TO CM
LDM .BYC
ADN 1
SBD OV
MJP CLB2 IF MORE CHUNKS TO INPUT
NJN CLB12 IF *1LT* IS READING LAST CHUNK
LDD WC
SHN 2
ADD WC
ADN 1
STM /READ/RCTA LENGTH TO READ + 1
CLB11 IJM CLB8,CH IF *1LT* FINISHED TRANSFER
SCF CLB11,CH IF *1LT* STILL READING
LJM /READ/RCT2 INPUT LAST CHUNK
CLB12 RJM CRA READ *1LT* INTERFACE WORD
NJN CLB12 IF *1LT* NOT DONE
AOM BCWA SKIP UPDATE IN *BCW*
LDD WC
SHN 2
ADD WC
ADN 1
STM /READ/RCTA
SBD CM+1
LJM /READ/RCT3 SAVE BYTES NOT TRANSFERRED
* *RCT* RETURNS HERE AFTER LAST CHUNK IS TRANSFERRED.
CLB14 LDD MD
LPN 40
ZJN CLB15 IF NOT 200 READ CODE
LDN 0 SET TRAILER CONTROL WORD
STM BUFB
LDN 1
RJM ADP
RJM WDA WRITE TRAILER CONTROL WORD
CLB15 LDN 0 SET WORD COUNT
STD WC
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
LDD TB
LMN 3
NJN CLB16 IF NOT TAPE MARK
LDM BCWC BACK UP POINTERS
STD CN+3
LDM BCWD
STD CN+4
CLB16 RJM /READ/TDA
LDM SRQB RESTORE STARTING WORD COUNT
STD WC
LJM RLB LOOP
ERRMI .BYC-* IF CODE OVERFLOWS
LOC *O
.CLBL EQU *-.CLB LENGTH OF *CLB*
.CLBA CHTB CHANNEL TABLE
OVERLAY (READ LI FORMAT.),,,RLI
.IM SET 0 GENERATE ADDRESSES FOR OVERLAY
RLI SPACE 4,20
** RLI - READ LI FORMAT.
* THIS ROUTINE READS CONSECUTIVE BLOCKS AS LONG AS THERE IS
* ROOM IN THE BUFFER. ROUTINE *EBP* WILL STOP THE READ OF
* CONSECUTIVE BLOCKS IF THE TERMINATION CONDITION HAS BEEN
* MET, AN UNRECOVERABLE ERROR HAS OCCURRED, OR THE DROP OUT
* BLOCK COUNT HAS BEEN MET. *WDA* TRANSFERS ALL DATA READ
* IN THE 1ST, 3RD, ... CHUNKS. *UIP* UPDATES THE IN POINTER
* IN THE FET. FOR A 200 READ *VDA* WRITES THE INITIAL CONTROL
* WORD AND THE TRAILER CONTROL WORD IS WRITTEN IN *RLI*. IF
* THE TAPE IS ATS, MOST OF THIS ROUTINE IS OVERLAYED BY *ALI*.
*
* ENTRY (CN+3,CN+4) = STARTING IN POINTER.
*
* EXIT TO *RET* IF NOT ENOUGH ROOM IN BUFFER.
*
* USES CM, CN+3, CN+4, EC, T1.
*
* CALLS ADP, CDO, CIB, CRA, EBP, ITM, ITS, SRQ, UCP, VDA,
* WDA, WTS, /PRESET/WFE.
*
* MACROS SADT.
RLI RJM CIB CHECK INPUT BUFFER
SADT .BS,C
ADC -* (-MAXIMUM BLOCK SIZE)
RLIB PJN RLI1 IF ENOUGH ROOM IN BUFFER
* UJN RLI1 (READSKP)
LDN 1
LJM RET SET FET COMPLETE
RLI1 LDD CN+3 SAVE STARTING IN POINTER
STM VDAB
LDD CN+4
STM VDAC
* THE FOLLOWING CODE IS OVERLAYED WITH *ALI* FOR ATS.
.RLIA BSS 0 START OF OVERLAYED CODE
RJM ITM INITIATE TAPE MOTION
RLI2 LDN 1
RJM SRQ SEND READ BLOCK REQUEST TO *1LT*
LDC LBBY+5 BYTE COUNT FOR FIRST CHUNK
STM RLIA
IAM BUFB-5,CH
UJN RLI5 CHECK IF ALL WORDS TRANSFERRED
RLI3 RJM WTS WAIT FOR *1LT* TRANSFER TO START
LDC LBBY
STM RLIA
RLI4 IJM RLI17,CH IF *1LT* FINISHED THE TRANSFER
SCF RLI4,CH IF *1LT* NOT FINISHED
RJM ITS INDICATE *1MT* TRANSFER STARTED
IAM BUFB,CH
RLI5 IJM RLI9,CH IF *1MT* FINISHED THE CHANNEL TRANSFER
EJM RLI5,CH IF *1LT* NOT TAKING DATA YET
CCF *,CH TELL *1LT* TO START
RJM UCP UPDATE COUNTERS AND POINTER
LMN 1
ZJN RLI6 IF FIRST CHUNK
RJM UCP UPDATE COUNTERS AND POINTER
RLI6 RJM WDA WRITE DATA TO CENTRAL MEMORY
LDM .BYC
SBN LICH-1 FULL CHUNKS PER BLOCK - 1
MJP RLI3 IF MORE FULL CHUNKS TO INPUT
RJM WTS WAIT FOR *1LT* TRANSFER TO START
RLI7 IJM RLI17,CH IF *1LT* FINISHED THE CHANNEL TRANSFER
SCF RLI7,CH IF *1LT* STILL READING
RJM ITS INDICATE *1MT* TRANSFER STARTED
LDC LIRW*5+1+1 BYTES IN REMAINDER + PAD + 1
STM RLIA LENGTH TO READ + 1
IAM BUFB,CH
NJN RLI9 IF NOT EXCESS BLOCK LENGTH
* THROW AWAY DATA WHEN THE BLOCK IS TOO LONG. IF THE DATA
* IS NOT TAKEN, OVERRUN ERRORS COULD OCCUR. ALSO, WITH A
* CROSS-COUPLED CONTROLLER, THE CONTROLLER HUNG WITH CHLA
* 030F FLASHING ON ITS ERROR DISPLAY.
RLI8 LDC 500
IAM ERLB,CH
ZJN RLI8 IF THERE MAY BE MORE DATA
LDN /MTX/BTL SET BLOCK TOO LONG
STD EC
LDN 1 SET TO COMPUTE WORD COUNT
RLI9 STD T1
LDC LBBY+5 BYTE COUNT FOR FIRST CHUNK
RLIA EQU *-1
* LDC LBBY (MIDDLE CHUNK)
* LDC LIRW*5+1+1 (LAST CHUNK)
RJM VDA PROCESS DATA
RJM CDO CHECK DROP OUT FLAG
RLI10 RJM CRA READ *1LT* INTERFACE WORD
NJN RLI10 IF *1LT* TRANSFER TO CM NOT COMPLETE
* PROCESS STATUS.
RJM /PRESET/WFE WAIT FOR END OF OPERATION
PJN RLI11 IF NOT COMMAND RETRY
ACN CH
LDM VDAB BACK UP POINTERS
STD CN+3
LDM VDAC
STD CN+4
LJM RLI2 RESEND THE DATA
RLI11 ZJN RLI12 IF NO ERROR
SHN 21-4
PJN RLI13 IF NOT TAPE MARK
LDN 3 SET STOP TO EOI
STD TB
LDN 17 SET LEVEL NUMBER
STM LNUM
LDM VDAB BACK UP POINTERS
STD CN+3
LDM VDAC
STD CN+4
LDN /MTX/BEI SET EOI
UJN RLI14 SAVE ERROR CODE
RLI12 LDD DS
LPN 40
ZJN RLI15 IF NO FILL STATUS
RLI13 LDN /MTX/STE STATUS ERROR
RLI14 STD EC
RLI15 LDD MD
LPN 40
ZJN RLI16 IF NOT 200 READ CODE
LDN 1
RJM ADP
RJM WDA WRITE TRAILER CONTROL WORD
RLI16 LDN 0
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
RJM EBP END OF BLOCK PROCESSING
LJM RLI READ NEXT BLOCK
* *1LT* FINISHED THE CHANNEL TRANSFER.
RLI17 RJM CRA READ *1LT* INTERFACE WORD
NJN RLI17 IF *1LT* TRANSFER TO CM NOT COMPLETE
AOM VDAA INDICATE *1LT* FINISHED THE TRANSFER
LDC LBBY
SBD CM+1
LJM RLI9 SAVE BYTES TRANSFERRED
BSS 70 MAKE ROOM FOR *ALI*
.RLIAL EQU *-.RLIA LENGTH OF *RLI*
.BYC CON 0 CHUNKS INPUT OF *LBBY* BYTES
ADP SPACE 4,15
** ADP - ADVANCE POINTER.
* THIS ROUTINE ADVANCES THE IN POINTER FOR WRITES INTO THE
* BUFFER. ROUTINE *UIP* UPDATES THE IN POINTER FOR THE FET.
*
* ENTRY (CN+3 - CN+4) = IN POINTER.
* (A) = WORDS TO INCREMENT IN BY.
*
* EXIT (T4 - T5) = STARTING IN POINTER.
* (CN+3 - CN+4) = UPDATED IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* CALLS CIB.
*
* MACROS SADT.
ADP SUBR ENTRY/EXIT
STD T6
RJM CIB CHECK INPUT BUFFER
SBD T6
PJN ADP1 IF ROOM IN BUFFER FOR BLOCK
RAD T6 ADJUST WORD COUNT
ADP1 LDD CN+3 SAVE IN
STD T4
LDD CN+4
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE IN
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* (-LIMIT)
MJN ADPX IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD CN+4
SHN -14
STD CN+3
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
LJM ADPX RETURN
CIB SPACE 4,10
** CIB - CHECK INPUT BUFFER.
*
* ENTRY (CN+3 - CN+4) = IN POINTER.
*
* EXIT (A) = WORD COUNT OF AVAILABLE BUFFER SPACE.
* TO *RET3* IF ERROR.
*
* USES CM - CM+4.
*
* MACROS SADT.
CIB1 LDD CM+3 LENGTH = OUT - IN - 1
SBD CN+3
SHN 14
ADD CM+4
SBD CN+4
SBN 1
PJN CIBX IF (IN + 1) .LT OUT
SADT .LF
ADC * (LIMIT - FIRST)
CIB SUBR ENTRY/EXIT
SADT .FE,,3,A
LDC * READ OUT
CRD CM
LDD CM+3
LPN 37
STD CM+3
SHN 14
LMD CM+4
SADT .LM,C
ADC -* (-LIMIT)
MJN CIB1 IF OUT .LT. LIMIT
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
CPD SPACE 4,10
** CPD - CHECK PP (1LT) DROP OUT.
*
* ENTRY (CPDA) = PP INPUT REGISTER ADDRESS.
*
* EXIT (A) = 0, IF *1LT* STILL AROUND.
*
* USES CM - CM+4.
*
* MACROS CHTE.
CPD SUBR ENTRY/EXIT
LDC *
CPDA EQU *-1
CRD CM
LDD CM+1
SCN 77
SHN 6
LMD CM
LMC 3RT1L
ZJN CPD1 IF *1LT*
SHN 14
LMN 1R1
NJN CPDX IF NOT *1LT* LOADING
CPD1 LDD CM+3
CHTE *
LMN CH
LPN 77
UJN CPDX RETURN
CRA SPACE 4,10
** CRA - CHECK REQUEST ACCEPTANCE FROM *1LT*.
*
* EXIT (A) = 0 IF *1LT* COMPLETE.
* (CM - CM+4) = REQUEST/RETURN WORD.
CRA SUBR ENTRY/EXIT
LDM CPDA
ADN 2
CRD CM
LDD CM
LMN 2
UJN CRAX RETURN
EBP SPACE 4,15
** EBP - END OF BLOCK PROCESSING.
*
* ENTRY (TB) = STATUS OF BLOCK READ.
* (CN+3 - CN+4) = IN POINTER.
*
* EXIT TO *RET* IF TERMINATION CONDITION MET.
* TO *RET2* IF DROP OUT CONDITION OR RECOVERED ERROR.
*
* USES CN+3, CN+4, HP.
*
* CALLS CIB, UIP.
*
* MACROS SADT.
EBP SUBR ENTRY/EXIT
LDD TB
EBPA SBN 0 READ STOP CONDITION
EBPB PJN EBP3.1 IF TERMINATION MET (NOT LEVEL 17 READCW)
* PJN EBP3 IF TERMINATION MET (LEVEL 17 READCW)
RJM CIB CHECK INPUT BUFFER
SADT .BS,C
ADC -* (- MAXIMUM BLOCK SIZE)
EBPC MJN EBP1 IF NOT ROOM FOR NEXT BLOCK
* PSN (READSKP)
SADT .BS,C
ADC -* (-MAXIMUM BLOCK SIZE)
SHN -21
RAM UIPB SET DRIVER RECALL FLAG
LDD EP CHECK IF ERROR OR RECOVERY IN PROGRESS
LPN 77
ADD EC
ADD DF CHECK DROP OUT FLAG
NJN EBP2 IF DROP OUT OR ERROR CONDITION
EBP1 RJM UIP UPDATE IN POINTER
UJN EBPX RETURN
EBP2 RJM UIP UPDATE IN POINTER
LJM RET2 REQUEUE
EBP3 LDM VDAB BACK UP IN POINTER
STD CN+3
LDM VDAC
STD CN+4
EBP3.1 RJM UIP UPDATE IN POINTER IN FET
EBPD UJN EBP3.2 COMPLETE FET
* LDM LNUM (READSKP)
CON LNUM
EBPE SBN 0 LEVEL NUMBER DESIRED
PJN EBP3.2 IF TERMINATION MET
EBPF LDN 4 SET TO SKIP RECORD
* LDN 10 (IF FILE SKIP REQUIRED)
STD PB INDICATE TO MAGNET TO SKIP
LDN /MTX/BEI
LJM RET3 RETURN ERROR CODE
EBP3.2 LDD TB
ZJN EBP4 IF PRU READ COMPLETE
LDD UP SET EOR/EOF FLAG
SCN 10
LMN 10
STD UP
LDD TB
ADN 1 RETURN EOR/EOF
SHN 3+4
LMM LNUM MERGE LEVEL NUMBER
SHN 16
EBP4 ADN 1
LJM RET SET FET COMPLETE
ITS SPACE 4,10
** ITS - INDICATE *1MT* TRANSFER STARTED.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
ITS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
LDD T0 RESTORE (A)
UJN ITSX RETURN
SRQ SPACE 4,10
** SRQ - SEND REQUEST TO *1LT* TO START BLOCK.
*
* ENTRY (A) = REQUEST CODE.
* (CN+3 - CN+4) = IN POINTER.
*
* EXIT TO *RET2* IF *1LT* PAUSING.
*
* USES EC, TB, CM - CM+4.
*
* CALLS ADP, CPD, HNG.
SRQ SUBR ENTRY/EXIT
STM SRQC SAVE REQUEST CODE
LDN 0 ALLOW FOR CONTROL WORD
SRQA EQU *-1
* LDN 1 (200 READ CODE)
RJM ADP
LDN 0
STM VDAD+3 CLEAR BLOCK LENGTH FOR CONTROL WORD
STM VDAD+4
STM VDAA INDICATE *1MT* FINISHED INPUT
STM .BYC FULL CHUNK COUNT READ
STD EC ERROR CODE
STD TB TERMINATION STATUS
LDD CN+3
STM SRQC+3
LDD CN+4
STM SRQC+4 SET UP IN POINTER FOR *1LT*
PSN
* UJN SRQ1 (NOT CYBER 180)
SRQB EQU *-1
SCF *+2,CH SET CHANNEL FLAG
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
SRQ1 LDM CPDA CHECK *1LT* FUNCTION
ADN 1
CRD CM
LDD CM
LMN PRLM
ZJN SRQ2 IF *1LT* PAUSING
LDM CPDA ENTER REQUEST
ADN 2
CWM SRQC,ON
RJM CPD CHECK PP DROP OUT
ZJP SRQX IF *1LT* STILL AROUND
RJM HNG HANG PP
SRQ2 LJM RET2 REQUEUE REQUEST
SRQC BSS 0 *1LT* REQUEST
CON 1 READ BLOCK REQUEST
CON LIRW REMAINDER
CON LICH CHUNK COUNT
CON 0,0 IN POINTER
UCP SPACE 4,10
** UCP - UPDATE COUNTERS AND POINTERS.
*
* ENTRY (CN+3 - CN+4) = IN POINTER.
*
* EXIT (A) = (.BYC) = FULL CHUNKS READ.
*
* CALLS ADP.
UCP SUBR ENTRY/EXIT
LDC LBBY
RAM VDAD+4 COUNT BYTES READ
SHN -14
RAM VDAD+3
LDC /MTX/LBWD ADVANCE POINTER TO WRITE CM
RJM ADP
AOM .BYC INCREMENT FULL CHUNK COUNT
UJN UCPX RETURN
UIP SPACE 4,15
** UIP - UPDATE IN POINTER IN FET.
* IF AN ERROR OCCURRED, THE ERROR PROCESSING OVERLAY IS
* CALLED. ERRORS INCLUDE TAPE MARKS AND EOT. IF NO ERROR
* OCCURRED OR THE ERROR IS RECOVEABLE, THE IN POINTER IN THE
* FET IS UPDATED.
*
* CALLS *CRE*, *REM*.
*
* MACROS CALL, SADT.
UIP SUBR ENTRY/EXIT
LDD EP
LPN 77
ADD EC
ZJN UIP1 IF NO ERROR ENCOUNTERED
UIPA CALL REM LOAD READ ERROR PROCESSOR
* CALL CRE LOAD ERROR PROCESSOR (CTS)
SADT .FE,,2,A
UIP1 LDC * UPDATE IN POINTER IN FET
CWD CN
LDN 0 RECALL CPU FLAG
UIPB EQU *-1
* LDN 1 (ROOM FOR 1 BLOCK, NO ROOM FOR 2 BLOCKS)
ZJN UIP2 IF NO RECALL CPU
LDD OA RECALL CPU
CWM UIPD,ON
SOM UIPB
UIP2 AOD BL+1 INCREMENT BLOCK COUNT
SHN -14
RAD BL
AOD BT INCREMENT BLOCKS TRANSFERRED
LJM UIPX
UIPC EQU *-1
* LJM RET4 (FATAL READ ERROR)
UIPD CON DRCM DRIVER RECALL CPU MONITOR FUNCTION
VDA SPACE 4,20
** VDA - VALIDATE DATA.
* THIS ROUTINE UPDATES THE BYTE COUNTER AND IN POINTER FOR THE
* LAST CHUNK READ. IF *1MT* READ THE LAST CHUNK, *WDA* PUTS
* THE DATA IN CENTRAL. THIS ROUTINE ALSO VALIDATES THE DATA
* IN THE BLOCK PREFIX, AND WRITES THE BEGINNING CONTROL WORD
* FOR A 200 READ.
*
* ENTRY (A) = BYTE COUNT USED FOR LAST INPUT.
* (T1) = BYTES NOT TRANSFERRED.
* (VDAA) = 0 IF *1MT* FINISHED THE TRANSFER.
* (BUFB-5 - BUFB-1) = BLOCK PREFIX.
* (.BYC) = FULL CHUNKS TRANSFERRED.
*
* EXIT (TB) = TERMINATION STATUS.
* (LNUM) = LEVEL NUMBER.
* (EC) = /MTX/BNE IF VALIDATION ERROR.
* (BUFB) = LEVEL NUMBER FOR 200 READ.
* (VDAE) .NE. 0 IF BLOCK LENGTH ERROR.
*
* USES BY, T1, T2, WC.
*
* CALLS ADP, UCP, WDA.
VDA SUBR
SBD T1
STD BY BYTE COUNT READ
* ADJUST THE BYTE COUNT TO ALLOW FOR THE PREFIX, THEN
* CALCULATE THE WORD COUNT TO TRANSFER TO CENTRAL.
LDM .BYC
NJN VDA1 IF NOT FIRST CHUNK
LDD BY
SBN 2
PJN VDA2 IF AT LEAST 2 BYTES RECEIVED
VDA1 LDD BY
ADN 3
VDA2 STD T2
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
STD WC
LPN 1
NJN VDA3 IF NO PAD BYTE ADDED ON WRITE
LDD BY
ZJN VDA3 IF NO DATA READ THIS CHUNK
SOD BY
VDA3 LDC *
VDAA EQU *-1
NJN VDA5 IF *1LT* FINISHED INPUT
LDM .BYC
ZJN VDA4 IF FIRST CHUNK
RJM UCP UPDATE COUNTERS AND POINTER FOR *1LT*
VDA4 LDD WC
RJM ADP ADVANCE IN POINTER
RJM WDA WRITE DATA TO CENTRAL MEMORY
UJN VDA6 CHECK BYTES READ
VDA5 LDD WC ADVANCE IN POINTER FOR *1LT*
RJM ADP
VDA6 LDM VDAD+3
STD T1 BYTES READ (UPPER)
LDM VDAD+4
STD T2 BYTES READ (LOWER)
LDD WC
SHN 2
ADD WC
RAM VDAD+4 UPDATE BYTE COUNT FOR CONTROL WORD
SHN -14
RAM VDAD+3
LDM BUFB-4 SAVE BLOCK LENGTH LOWER BITS
STM //BNEI
LDM BUFB-5 SAVE BLOCK LENGTH UPPER BITS
STM //BNEU
LDM BUFB-2 SAVE BLOCK NUMBER
STM //BNEI+2
LDM BUFB-3
STM //BNEI+1
LDN 1
STM VDAE
LDD BY
ADM .BYC
ZJN VDA9 IF NO BYTES READ
LDM .BYC
ZJN VDA8 IF FIRST CHUNK
LDD T2 BYTES (LOWER) READ BEFORE LAST CHUNK
ADN 5 ALLOW FOR PREFIX
VDA8 ADD BY BYTES READ THIS CHUNK
STD T0
SHN -14
ADD T1 BYTES (UPPER) READ BEFORE LAST CHUNK
LMM BUFB-5
NJN VDA9 IF BLOCK LENGTH UPPER ERROR
LDD T0
LMM BUFB-4
NJN VDA9 IF BLOCK LENGTH LOWER ERROR
STM VDAE
LDM BUFB-3
LMD BL
NJN VDA9 IF BLOCK NUMBER UPPER ERROR
LDM BUFB-2
LMD BL+1
ZJN VDA10 IF BLOCK NUMBER CORRECT
VDA9 LDN /MTX/BNE
STD EC
VDA10 LDM .BYC
LMN LICH
NJN VDA11 IF NOT FULL PRU
LDD BY
LMC LIRW*5
STM BUFB SET 0 LEVEL NUMBER
ZJN VDA13 IF FULL PRU
VDA11 LDM BUFB-1 SET LEVEL NUMBER FOR CONTROL WORD
STM BUFB
STM LNUM
LMN 17
ZJN VDA12 IF EOF
LCN 1
VDA12 ADN 2
VDA13 STD TB SET BLOCK STATUS
LDD MD
LPN 40
ZJN VDA14 IF NOT CONTROL WORD READ
LDC * PUT CONTROL WORD IN BUFFER
VDAB EQU *-1
SHN 6
ADD RA
SHN 6
ADC *
VDAC EQU *-1
CWM VDAD,ON
VDA14 LJM VDAX
* BEGINNING CONTROL WORD FOR 200 READ.
VDAD DATA 1,0 PRU SIZE
DATA 0
DATA 0,0 BLOCK LENGTH IN BYTES
VDAE DATA 0 0 IF CORRECT BLOCK LENGTH (FOR ERR. REC.)
WDA SPACE 4,10
** WDA - WRITE DATA TO CENTRAL MEMORY.
*
* ENTRY (T4 - T5) = IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
WDA SUBR ENTRY/EXIT
LDD T6
ZJN WDAX IF NO FIRST PART
SHN 2
ADD T6
ADC BUFB
STM WDAA
LDD T4 TRANSFER FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CWM BUFB,T6
LDD T7
ZJN WDAX IF NO SECOND PART
SADT .FT,,,A
LDC * TRANSFER SECOND PART
CWM *,T7
WDAA EQU *-1
UJN WDAX RETURN
WTS SPACE 4,10
** WTS - WAIT FOR *1LT* TRANSFER TO START.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
*
* USES CM - CM+4.
WTS3 LDD T0 RESTORE (A)
WTS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
WTS1 LDM CPDA CHECK *1MT*/*1LT* INTERLOCK
ADN 3
CRD CM
LDD CM
ZJN WTS3 IF *1LT* TRANSFER STARTED
LDN 24 DELAY 10 MICROSECONDS
WTS2 SBN 1
NJN WTS2 IF NOT DONE
UJN WTS1 CHECK INTERLOCK
SPACE 4,10
ERRNG BUFB-5-* CODE OVERFLOWS INTO DATA BUFFER
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET.
* THIS OVERLAY IS ONLY LOADED IF THE FUNCTION IS A READ AND
* THE FORMAT IS LI. THIS ROUTINE LOADS *1LT* WHICH TRANSFERS
* THE 2ND, 4TH, ... CHUNKS OF THE BLOCK.
*
* EXIT TO *RET2* IF MOVE FLAG OR NO PP ASSIGNED FOR *1LT*.
* TO *RLI* TO READ THE FIRST BLOCK.
*
* USES T1, CM - CM+4.
*
* CALLS CEC, CPD, *CPP*, MCH.
*
* MACROS MONITOR, PAUSE.
PRS LDC PRSA MODIFY CHANNELS
RJM MCH
LDD WC
STM /READ/WOCN SO /CPP/CAL SETS CORRECT BLOCK SIZE
LDD HP
LPN 20
SHN 6
RAM CALL+3 SET ATS FLAG FOR *1LT*
LDC TRSO
STD T1
PRS1 LDI T1
ZJN PRS5 IF END OF TABLE
LMM CIOE
LPC 774
ZJN PRS2 IF FUNCTION FOUND IN TABLE
LDN 2
RAD T1
UJN PRS1 CHECK NEXT ENTRY IN TABLE
PRS2 AOD T1
LDM LNUM
SHN -10
RAM EBPE SET *READSKP* LEVEL NUMBER
LPN 17
LMN 17
NJN PRS3 IF NOT LEVEL 17
LDN 10-4 SET *READSKP* FOR FILE SKIP
RAM EBPF
LDD MD
LPN 40
ZJN PRS3 IF NOT 200 READCW
LCN EBP3.1-EBP3 SUPPRESS LEVEL 17 EOF CONTROL WORDS
RAM EBPB
SOI T1 ADJUST TERMINATION CONDITION
PRS3 LDI T1
PRS4 RAM EBPA
PRS5 LDN F0040 SELECT READ FUNCTION
STM //ITMA
LDD MD
LPN 40
ZJN PRS6 IF NO CONTROL WORDS
AOM SRQA ALLOW FOR CONTROL WORD
PRS6 LDD HP
SHN 21-7
PJN PRS7 IF NOT CTS
LDC LDNI+CRE/10000 CALL CTS ERROR PROCESSOR
STM UIPA
LDC 6125 BITS TO TEST IN GENERAL STATUS
STM /PRESET/WFEA
LDN 1 BITS IN GENERAL STATUS THAT SHOULD BE SET
STM /PRESET/WFEB
LJM PRS13 SET TO MODIFY SADT INSTRUCTIONS
* REPLACE *RLI* WITH READ ROUTINE *ALI* FOR ATS.
PRS7 LDC .ALIL-1 LENGTH OF CODE TO MOVE
STD T1
PRS8 LDM .ALI,T1
STM ALI,T1
SOD T1
PJN PRS8 IF MORE CODE TO MOVE
LDC .ALIB MODIFY CHANNELS
RJM MCH
LDC 4435 BITS TO TEST IN GENERAL STATUS
STM //WEOA
LDN 1 BITS IN GENERAL STATUS THAT SHOULD BE SET
STM //WEOB
LDK MABL CHECK MAINFRAME TYPE
CRD CM
LDD CM+1
SHN -6
LPN 41
LMN 1
NJP PRS10 IF NOT CYBER 180
* PRESET FOR CYBER 180 IOU. THE CHANNEL FLAG IS USED FOR
* COMMUNICATION BETWEEN *1MT* AND *1LT* IF CYBER 180.
LDC UJNI+2 JUMP TO INPUT FIRST CHUNK
STM ALIE
LDC ALI1
STM ALIA JUMP ADDRESS IF NOT LAST CHUNK
LDC AILA
STM ALIG
STM ALIB
LDC ALI8
STM ALIF JUMP ADDRESS IF LAST CHUNK
LDN .AILL-1 MOVE IOU LOOP
STD T1
PRS9 LDM .AIL,T1
STM AIL,T1
SOD T1
PJN PRS9 IF MORE CODE TO MOVE
LDC .AILB MODIFY CHANNELS
RJM MCH
UJN PRS11 CONTINUE PRESET
PRS10 ISTORE SRQB,(UJN SRQ1) SKIP SETTING CHANNEL FLAG
PRS11 LDD EP SET CLIPPING LEVEL
LPC 700
ZJP PRS12 IF NORMAL CLIP LEVEL
RAM ALIC
UJN PRS13 CONTINUE PRESET
PRS12 LDC UJNI+2 DISABLE CLIP LEVEL SELECTION
STM ALID
PRS13 LDC PRSB SET TO MODIFY SADT INSTRUCTIONS
STD CN
LDN 2 SET TO FETCH IN POINTER
STD CN+4
LDC /SRU/ITRL*100 SET SRU INCREMENT
STM //CECA
LDC PRS14 SET TO RETURN HERE AFTER *CPP* LOADED
STD BT
LJM PRSX RETURN
* RETURN HERE AFTER *CPP* LOADED.
* BUILD CALL TO *1LT*.
PRS14 LDD CP MERGE CP NUMBER
SHN -7
RAM CALL+1
LDD IA SET INPUT REGISTER ADDRESS IN CALL
STM CALL+4
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
ZJN PRS15 IF MOVE FLAG
LDD MA WRITE REQUEST BLOCK
CWM CALL,TR
LDN 1 SET TO NOT QUEUE REQUEST
STD CM+1
MONITOR RPPM REQUEST PP
LDD CM+1
NJN PRS16 IF PP ASSIGNED
PRS15 LJM RET2 REQUEUE
PRS16 STM CPDA SAVE PP INPUT REGISTER ADDRESS
PRS17 LDN 77 DELAY
SBN 1
NJN *-1
LDD MA CHECK FOR *1LT* ACKNOWLEDGE
ADN 1
CRD CM
LDD CM
ZJN PRS19 IF *1LT* READY
RJM CPD CHECK PP DROP OUT
NJN PRS15 IF *1LT* GONE
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
NJN PRS17 IF NO MOVE FLAG FOR THIS CP
RJM CEC CHANGE BACK TO MAGNET CP
PRS18 RJM CPD CHECK PP DROP OUT
NJN PRS15 IF *1LT* GONE
PAUSE NE
UJN PRS18 LOOP
PRS19 LDM CIOE
LPC 774
LMN 20
NJN PRS20 IF NOT READ SKIP
STM EBPC
LDC UJNI-PJNI
RAM RLIB
LDC LDMI
STM EBPD
RJM CIB
MJN PRS21 IF BUFFER ARGUMENT ERROR
STD T5
SHN -14
STD T4
LDN 3 SET REQUEST TO *1LT*
RJM SRQ
PRS20 LDN 77 DELAY
SBN 1
NJN *-1 IF DELAY NOT COMPLETE
RJM CRA SEE IF *1LT* ACCEPTED READ SKIP
LMN 2
NJN PRS20 IF *1LT* NOT DONE
PRS21 LJM RLI ENTER READ ROUTINE
CALL SPACE 4,10
** *1LT* CALL BLOCK.
*
*T 18/ 1LT,6/ CP,12/ 0,12/ CHANNEL,12/ PPIA
*T, 12/ -0,24/ FIRST,24/ LIMIT
CALL VFD 18/3R1LT,6/0
CON 0 READ
CHTE *
CON CH CHANNEL
CON 0 *1MT* INPUT REGISTER ADDRESS
CON -0
SADT .FT,,,,SE
CON 0,0
SADT .LM,,,,SE
CON 0,0
ERRMI ERLA-* IF CODE OVERFLOWS
TRSO SPACE 4,10
** TRSO - TABLE OF READ STOP CODES.
TRSO BSS 0
CON 10,1 READ
CON 20,1 READSKP
CON 200,3 READCW
CON 250,2 READNS
CON 600,3 READEI
CON 0 RPHR
PRSA CHTB CHANNEL TABLE
PRSB TSAD
TITLE PRESET SUBROUTINES.
ALI SPACE 4,15
** ALI - ATS LI FORMAT READ.
* THIS ROUTINE OVERLAYS *RLI*.
*
* USES T1.
*
* CALLS ADP, CDO, CRA, DTS, EBP, FCN, ITM, MCC, SRQ, STW,
* UBW, UCP, VDA, WDA, WEO.
.ALI BSS 0
LOC .RLIA
ALI LDC NJNI+ALI6-ALIH
* LDC ALI1 (CYBER 180)
ALIA EQU *-1
STM ALIH NOT LAST CHUNK
* STM AILA (CYBER 180)
ALIB EQU *-1
LDC 6
* LDC X06 (SELECT CLIP LEVEL)
ALIC EQU *-1
RJM FCN
* UJN *+2 (NORMAL CLIP LEVEL)
ALID EQU *-2
RJM ITM INITIATE TAPE MOTION
LDN 1
RJM SRQ SEND START BLOCK REQUEST TO *1LT*
LDD DS SAVE DEVICE STATUS
STM /READ/STAP
LDC LBBY+5 BYTE COUNT FOR FIRST CHUNK
STM ALII
LJM ALI7 INPUT THE FIRST CHUNK
* UJN *+2 (CYBER 180 - INPUT THE FIRST CHUNK)
ALIE EQU *-2
IAM BUFB-5,CH INPUT FIRST CHUNK
ALI1 IJM ALI9,CH IF *1MT* FINISHED THE CHANNEL TRANSFER
EJM ALI1,CH IF *1LT* NOT TAKING DATA YET
CCF *,CH TELL *1LT* TO START
ALI2 RJM UCP UPDATE COUNTERS AND POINTER
LMN 1
ZJN ALI3 IF FIRST CHUNK
RJM UCP UPDATE COUNTERS AND POINTER
ALI3 RJM WDA WRITE DATA TO CENTRAL MEMORY
LDC LBBY
STM ALII BYTE COUNT FOR MIDDLE CHUNK
LDM .BYC
SBN LICH-1 FULL CHUNKS PER BLOCK - 1
MJN ALI4 IF MORE FULL CHUNKS TO INPUT
LDC LIRW*5+1+1 BYTES IN REMAINDER + PAD + 1
STM ALII
LDC UJNI+ALI8-ALIH
* LDC ALI8 (CYBER 180)
ALIF EQU *-1
STM ALIH LAST CHUNK HANDLING
* STM AILA (CYBER 180)
ALIG EQU *-1
* THE FOLLOWING CODE IS OVERLAID BY CODE AT *AIL* IF USING
* THE CHANNEL FLAG INSTRUCTION.
.ALIA BSS 0 BEGINNING OF OVERLAID CODE
ALI4 AJM *,CH IF WAITING FOR *1LT* TO DCN CHANNEL
LDM ALII SET NUMBER OF BYTES TO INPUT
ALI5 IJM ALI19,CH IF *1LT* FINISHED THE CHANNEL TRANSFER
EJM ALI5,CH IF *1LT* STILL READING
IAM BUFB,CH INPUT DATA
DCN CH+40 INDICATE TO *1LT* TO CONTINUE READ
NJN ALI9 IF *1MT* FINISHED THE CHANNEL TRANSFER
ALIH EQU *-1
* UJN ALI8 (LAST CHUNK)
ACN CH
ALI6 IJM ALI9,CH IF *1MT* FINISHED THE CHANNEL TRANSFER
EJM ALI6,CH IF *1LT* NOT TAKING DATA YET
LJM ALI2 SETUP FOR NEXT CHUNK
ALI7 IAM BUFB-5,CH
DCN CH+40 INDICATE TO *1LT* TO CONTINUE READ
NJN ALI9 IF *1MT* FINISHED THE CHANNEL TRANSFER
ACN CH
UJN ALI6 SAVE BYTES NOT TRANSFERRED
.ALIAL EQU *-.ALIA LENGTH OF OVERLAID AREA
ALI8 NJN ALI9 IF NOT EXCESS BLOCK LENGTH
LDN /MTX/BTL SET BLOCK TOO LONG
RJM MCC MASTER CLEAR CHANNEL
* LDN 0
RJM STW GET GENERAL STATUS
LDN 1 SET TO COMPUTE WORD COUNT
ALI9 STD T1
LDC LBBY+5 BYTE COUNT FOR FIRST CHUNK
* LDC LBBY (MIDDLE CHUNK)
* LDC LIRW*5+1+1 (LAST CHUNK)
ALII EQU *-1
RJM VDA PROCESS DATA
RJM CDO CHECK DROP OUT FLAG
* PROCESS STATUS.
RJM WEO WAIT FOR END OF OPERATION
ZJN ALI12 IF NO ERRORS
SHN 21-4
PJN ALI10 IF NOT TAPE MARK
LDN 3 SET STOP TO EOI
STD TB
LDN 17 SET LEVEL NUMBER
STM LNUM
LDM VDAB BACK UP POINTERS
STD CN+3
LDM VDAC
STD CN+4
LDN /MTX/BEI SET EOI
STD EC
UJN ALI15 GET DETAILED STATUS
ALI10 LDD EC
ZJN ALI11 IF ERROR NOT ALREADY ENCOUNTERED
LDM MTDS
ZJN ALI13 IF NOT FATAL ERROR
ALI11 LDN /MTX/STE STATUS ERROR
STD EC
UJN ALI13 NO TAPE ERROR REPORTED FROM HARDWARE
ALI12 LDM MTDS+1
SHN 21-11
PJN ALI13 IF NO GCR SINGLE TRACK CORRECTION
AOM ECNT+4 INCREMENT COUNTER
SHN -14
RAM ECNT+3 INCREMENT COUNTER FOR OVERFLOW
ALI13 LDD DS
LPN 40
ZJN ALI14 IF NO FILL STATUS
LDD EC
NJN ALI15 IF ERROR ALREADY ENCOUNTERED
LDN /MTX/STE
STD EC
ALI14 LDD EC
NJN ALI15 IF ERROR
RJM UBW UPDATE BID WINDOW
UJN ALI16 SAVE STATUS FOR ERROR PROCESSOR
ALI15 RJM DTS DETAILED STATUS
ALI16 LDD DS SAVE STATUS FOR ERROR PROCESSOR
STM //STER
ALI17 RJM CRA READ *1LT* INTERFACE WORD
NJN ALI17 IF *1LT* TRANSFER TO CM NOT COMPLETE
LDD MD
LPN 40
ZJN ALI18 IF NOT 200 READ CODE
LDN 1
RJM ADP
RJM WDA WRITE TRAILER CONTROL WORD
ALI18 LDN 0
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
RJM EBP END OF BLOCK PROCESSING
LJM RLI READ NEXT BLOCK
* *1LT* FINISHED THE CHANNEL TRANSFER.
ALI19 RJM CRA READ *1LT* INTERFACE WORD
NJN ALI19 IF *1LT* TRANSFER TO CM NOT COMPLETE
AOM VDAA INDICATE *1LT* FINISHED THE TRANSFER
LDC LBBY
STM ALII BYTE COUNT FOR INPUT
SBD CM+1
LJM ALI9 SAVE BYTES NOT TRANSFERRED
LOC *O
.ALIL EQU *-.ALI LENGTH OF *ALI*
ERRMI .RLIAL-.ALIL IF CODE OVERFLOWS
.ALIB CHTB CHANNEL TABLE
AIL SPACE 4,10
** ATS INPUT LOOP IF USING THE CHANNEL FLAG INSTRUCTION.
.AIL BSS 0
LOC .ALIA
AIL LDM ALII BYTES TO INPUT
RJM WTS WAIT FOR *1LT* TRANSFER TO START
AIL1 IJM ALI19,CH IF *1LT* FINISHED THE CHANNEL TRANSFER
SCF AIL1,CH IF *1LT* STILL READING
RJM ITS INDICATE *1MT* TRANSFER STARTED
IAM BUFB,CH
LJM ALI1 SAVE WORDS NOT TRANSFERRED
AILA EQU *-1
* LJM ALI8 LAST CHUNK
LOC *O
.AILL EQU *-.AIL LENGTH OF ATS INPUT LOOP
ERRMI .ALIAL-.AILL IF IOU INPUT CODE TOO LONG
.AILB CHTB TABLE OF CHANNELS FOR IOU CODE
OVERLAY (READ LABEL PROCESSOR.),(/READ/ORLA),,RLA
RLA SPACE 4,15
** RLA - READ LABELS PROCESSOR.
*
*T 12/ 0,12/ RLA,12/ 0100,12/ PAR,6/ OP,6/ SEC
*
* OP OPERATION TYPE (SEE LISTS BY LABEL TYPE)
* SEC SECTION IN PROCESS.
* PAR PARAMETER.
*
* RETURN TO *RLAX* WILL ADVANCE TO NEXT SECTION WITHOUT A
* NEW READ BEING PERFORMED.
*
* CALLS CHC, CCL, FCN, HNG, *MFP*, /READ/MRD9.1, /READ/RCT13,
* /READ/RDF, RUD, UBW, WEL, /PRESET/WFE.
*
* MACROS CALL.
ENTRY RLA
RLA LDD PB
SHN -6
SBN /MTX/RLCM/100
MJN RLA1 IF NOT MULTI-FILE OPERATION
CALL MFP
RLA1 UJN RLA1.1 DISABLE IF NOT INITIAL LABEL CHECK
* LDN 0 (CLEAR LABEL RETRY COUNTER)
RLAF EQU *-1
STM LERA
RLA1.1 LDD PB CHECK SEQUENCE
SHN -6
LMC 0 (CURRENT SEQUENCE)
RLAA EQU *-1
NJN RLA2 IF INCORRECT SEQUENCE
LDD PB SET SECTION
LPN 77
STD T1
ADC -* (MAXIMUM NUMBER OF SECTIONS)
RLAB EQU *-1
MJN RLA3 IF LEGAL SECTION
RLA2 RJM HNG HANG PP
RLA3 LDM TABC,T1
STM RLAE
RJM RUD READ UDT LABEL DATA
LDC BUF SET DEFAULT BUFFER ADDRESS
STM IBUF
LDC UDTB
STM DBUF
LDC 0
RLAC EQU *-1
SHN 21-13
MJP RLA7 IF RECOVERED LABEL BLOCK
NJN RLA4 IF SKIP READ
LDC * (READ BEFORE FIRST OPERATION FLAG)
RLAD EQU *-1
ZJN RLA5 IF READ BEFORE FIRST OPERATION
LDN 0
STM RLAD
RLA4 UJP RLA9 PROCESS ROUTINE
RLA5 LDD MD CHECK DIRECTION
SHN 21-12
PJN RLA5.1 IF FORWARD READ
LDC F0113 ISSUE BACKSPACE FUNCTION
RJM FCN
STD EC CLEAR ERROR CODE
LDN LABL SET LABEL LENGTH
RLAI EQU *-1
* LDN CLBL CTS LABEL LENGTH
STD BY
LDD HP
SHN 21-7
PJP /READ/MRD9.1 IF NOT CTS (RETURN AT *RLA6.1)
RLA5.0 RJM /PRESET/WFE WAIT FOR END OF OPERATION
MJN RLA5.0 IF COMMAND RETRY
NJP /READ/RCT13 IF ERROR
LDN 40
STD ES CHARACTER FILL STATUS
UJN RLA6.1 SAVE STATUS FOR ERROR PROCESSING
RLA5.1 LJM /READ/RDF READ TAPE
* ENTER HERE AFTER LABEL READ OR BACKSPACE FUNCTION.
RLA6 CALL CCL CODE CONVERT LABEL
RLA6.1 AOD BT INCREMENT BLOCKS READ
LDD EC
NJN RLA8 IF READ ERROR
RLA7 RJM WEL WRITE EXTENDED LABELS
UJN RLA9 PROCESS LABEL
RLA8 LMN /MTX/BEI
NJN RLA9 IF NOT TAPE MARK
LDN 1 SET TAPE MARK INDICATION
RLAH EQU *-1
* UJN RLA9 CTS
STM UBWB
RJM UBW UPDATE BLOCK ID WINDOW
RLA9 LDN 0 CLEAR SKIP READ FLAG
STM RLAC
RJM * PROCESS LABEL
RLAE EQU *-1
NJN RLA10 IF MORE LABELS TO PROCESS
LJM RET1 EXIT
RLAX AOD PB ADVANCE SECTION
STM RLAC SET SKIP READ FLAG
RLA10 LJM RLA1 LOOP
RLA11 RJM CHC CHANGE CONTROL POINT AND RELOCATE ADDR.
UJN RLA10 LOOP
SPACE 4,10
** CURRENT OPERATION TABLE.
*
* CORRECT TABLE WILL BE MOVED INTO THIS
* AREA BY PRESET ROUTINE.
TABC BSS 14
TABCL EQU *-TABC
FAD SPACE 4,10
** FAD - SET FET ADDRESS.
* THIS ROUTINE IS HERE AS ADDRESS MODIFICATION DOES NOT WORK
* ABOVE 3777B.
*
* EXIT (A) = FET ADDRESS.
*
* MACROS SADT.
FAD SUBR ENTRY/EXIT
SADT .FE,,,A
LDC *
UJN FADX RETURN
CHC SPACE 4,10
** CHC - CHANGE CONTROL POINTS AND RELOCATE ADDRESSES.
*
* CALLS /CPP/CPP.
*
* MACROS CALL.
CHC SUBR ENTRY/EXIT
CALL CPP
LDN ZERL SET ADDRESS RELOCATION
CRD CN
LDC TADD
STD CN
RJM /CPP/CPP
AOD PB INCREMENT SECTION
UJN CHCX RETURN
CLA SPACE 4,15
** CLA - CHECK LABEL FOR VALIDITY.
* CHECKS FOR SIZE AND ERRORS.
*
* EXIT (A) = 0, IF GOOD LABEL.
* (A) = 1, IF TAPE MARK.
* (A) = -1, IF ((PB, 11 - 6) = 0) AND BAD LABEL.
*
* GIVES LABEL MISSING ON ALL OTHER BAD LABELS.
*
* USES BT.
*
* CALLS CCM, CLL, *CRE*, LER, *REM*.
*
* MACROS CALL.
CLA8 RJM CLL CHECK LABEL LENGTH
NJN CLA2 IF INCORRECT LENGTH
CLA SUBR ENTRY/EXIT
LDD EC
ZJN CLA8 IF NO ERROR
LMN /MTX/BEI
NJN CLA1 IF NOT TAPE MARK
LDN 1 INDICATE TAPE MARK
UJN CLAX RETURN
CLA1 LMN /MTX/OTF&/MTX/BEI
ZJN CLA8 IF ON THE FLY ERROR CORRECTION
LMN /MTX/STE&/MTX/OTF
CLA2 NJN CLA5 IF NOT STATUS ERROR
LDD PB
SHN -6
LMN /MTX/RLCR/100
ZJN CLA6 IF REEL RECHECK
CLA3 LDD SP
SHN 21-2
MJN CLA7 IF ERROR PROCESSING INHIBITED
SOD BT DECREMENT BLOCKS READ
* ENTER HERE ON LABEL READ RECOVERY TO RELOAD ERROR PROCESSOR.
CLA4 RJM LER CHECK FOR LABEL ERROR AT LOAD POINT/INIT
* UJN *+2 (NOT INITIAL LABEL CHECK)
CLAA EQU *-2
CLAD CALL REM LOAD READ ERROR PROCESSOR
* CALL CRE LOAD ERROR PROCESSOR (CTS)
CLA5 LDD EC
LMN /MTX/NBE
ZJN CLA3 IF NOISE BLOCK
LDD PB
SHN -6
ZJN CLA7 IF INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
LMN /MTX/RLCR/100
ZJN CLA7 IF REEL RECHECK
LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
CLA6 LDM MTDS CHECK FOR ON-THE-FLY CORRECTED ERROR
LPC 7077
* LPC 7777 (ATS UNIT)
CLAB EQU *-1
NJN CLA7 IF FATAL ERROR
CLAC EQU *-1
* UJN CLA7 CTS
LJM CLA8 CHECK LENGTH
CLA7 LCN 1 INDICATE BAD LABEL
LJM CLAX RETURN
ERRNG BUFB-* *CLA* DESTROYED BY READ ERROR PROCESSOR
CLL SPACE 4,15
** CLL - CHECK LABEL LENGTH.
*
* THIS ROUTINE VERIFIES THAT THE DATA READ FOR THE LABEL WAS
* THE CORRECT LENGTH.
*
* ENTRY (BY) = BYTES READ.
* (ES) = FILL STATUS.
* (HP) = HARDWARE OPTIONS.
*
* EXIT (A) = 0 IF CORRECT LENGTH.
CLL SUBR ENTRY/EXIT
LDD HP
SHN 21-7
MJN CLL1 IF CTS
LDD BY BYTES READ
LMN LABL
NJN CLLX IF WRONG LENGTH
LDD ES EXPECT NO FILL STATUS
UJN CLL2 CHECK FILL STATUS
CLL1 LDD BY BYTES READ
LMN CLBL
NJN CLLX IF WRONG LENGTH
LDD ES
LMN 40 EXPECT FILL STATUS
CLL2 LPN 40
UJN CLLX RETURN
DBT SPACE 4,10
** DBT - DETERMINE BLOCK TYPE.
*
* EXIT (A) = 0 IF TAPE MARK OR BLOCK WRONG LENGTH.
DBT2 LDN 0 SET INCORRECT NUMBER OF BYTES
DBT SUBR ENTRY/EXIT
LDD EC
LMN /MTX/BEI
ZJN DBTX IF TAPE MARK
LDD EC
LMN /MTX/BTL
ZJN DBTX IF BLOCK TOO LARGE
LDD BY
ZJN DBT1 IF POSSIBLE RECOVERABLE ERROR
RJM CLL CHECK LABEL LENGTH
NJN DBT2 IF INCORRECT LENGTH
DBT1 LDN 1 SET TO VALIDATE LABEL
UJN DBTX RETURN
ELA SPACE 4,10
** ELA - EXTENDED LABELS ADDRESS PROCESSING.
*
* ENTRY (T6 - T7) = POSITION TO START AT IN BUFFER.
*
* EXIT (A) = ABSOLUTE ADDRESS.
* (A) = 0, END OF LABEL BUFFER.
*
* CALLS FAD.
ELA2 LDN 0 INDICATE END OF BUFFER
ELA SUBR ENTRY/EXIT
RJM FAD GET FET ADDRESS
ADN 11
CRD CM
LDD CM+3
SHN 14
STD CM+1
SHN -14
STD CM+3
SHN 14
LMD CM+4
SBN 2
MJN ELA2 IF NO LABEL BUFFER
LDD CM+2
SHN 6
LMD CM+1
STD CM+2
SHN -14
STD CM+1
LDD T6
SBD CM+1
SHN 14
ADD T7
SBD CM+2
ADN 11 ALLOW FOR LABEL
PJN ELA2 IF END OF LABEL BUFFER
LDD CM+1 CHECK IF BUFFER WITHIN FL
ADD CM+3
SHN 14
ADD CM+2
ADD CM+4
SHN -6
SBD FL
MJN ELA1 IF BUFFER WITHIN FL
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
ELA1 LDD CM+3
ADD T6
SHN 6
ADD RA
SHN 6
ADD CM+4
ADD T7
LJM ELAX RETURN
EOF SPACE 4,10
** LOAD POINT RECOVERY CODE OVERLAYS INTO HERE ON INITIAL LABEL
* CHECK. THE CHECKING OF END OF FILE LABELS AND VOLUME ONE
* LABELS WILL NEVER OCCUR AT THE SAME TIME.
.LERA BSS 0 FWA OF OVERLAY CODE FROM *PRSD*
EOF SPACE 4,15
** EOF - PROCESS *EOF1*.
* RETURNS 1271/1273 IF EOI ON S/L FORMAT TAPE AND 260/262
* READ CODE WAS USED. THIS IS FOR SCOPE PRODUCT SET
* COMPATIBILITY.
*
* ALSO COUNTS TAPE MARK AS A BLOCK IF TAPE IS LABELED, BUT
* LABEL DATA DOES NOT FOLLOW TAPE MARK. AGAIN THIS FOR SAME
* REASON AS ABOVE.
*
* CALLS CBC, CIF, CLA, DBT, SKR, /MFP/SSN, UAD.
EOF SUBR ENTRY/EXIT
RJM CIF CHECK INTERNAL TAPE FORMAT
ZJN EOF2 IF INTERNAL TAPE FORMAT
RJM DBT DETERMINE BLOCK TYPE
NJN EOF2 IF NOT TAPE MARK OR BLOCK TOO LARGE
* ENTRY FROM *EOV*.
EOF0 LDD PB
SHN -6
LMN /MTX/RLCF/100
NJN EOF1 IF NOT CLOSE
RJM SKR SKIP BLOCK REVERSE
LJM RBE RETURN *BEI* ERROR TO NOT SKIP REVERSE
EOF1 RJM SKR SKIP BLOCK REVERSE
LJM EOF11 PROCESS TAPE MARK
EOF2 RJM CLA
NJN EOF3 IF BAD LABEL
LDM BUF
LMC 2REO
NJN EOF3 IF NOT *EO*
LDM BUF+1
LMC 2RF1
ZJN EOF7 IF *EOF1*
EOF3 LDD PB CHECK IF MULTI FILE
SHN -6
SBN /MTX/RLCM/100
ZJN EOF4 IF END OF REEL CHECK
MJN EOF5 IF NOT MULTI FILE
LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
EOF4 LDN 10
RAD PB
UJN EOF6 ADVANCE TO NEXT LABEL TYPE
EOF5 ADN 7-6
NJN EOF6 IF NOT CLOSE
LDN 2
RAD PB
EOF6 LJM RLAX ADVANCE TO NEXT LABEL TYPE
EOF7 LDD PB CHECK IF MULTI FILE
SHN -6
SBN /MTX/RLCM/100
MJN EOF9 IF NOT MULTI FILE
NJN EOF8 IF NOT MF LABEL CHECK
RJM /MFP/SSN SET SEQUENCE NUMBER
EOF8 AOD PB ADVANCE SECTION
LJM EOFX RETURN
EOF9 ADN 7-6
ZJN EOF8 IF CLOSE
RJM CBC CHECK BLOCK COUNT
* ENTER HERE ON NON - STANDARD LABEL.
EOF10 LDC 1031 RETURN EOI STATUS
STD PB
STM EOFA SET EOI FOR SKIP OPERATION
UJN EOF12 RETURN EOI
* HANDLE TAPE MARKS NOT FOLLOWED BY LABELS.
EOF11 AOD BL+1 COUNT BLOCK
SHN -14
RAD BL
LDN 31 RETURN EOF STATUS
STD PB
EOF12 RJM UAD READ CIO CODE
ADN /MTX/UCIA
CRD CM
LDD CM
SHN -6
LPN 57
ZJN EOF14 IF READ OPERATION
SHN -4
ZJN EOF13 IF NOT SKIP REVERSE
LDN 1 DO NOT SET EOF BIT
STM EOFA
EOF13 LDM CIOE RETURN CIO CODE
LPC 774
ADC 31 SET EOR AND EOF BITS
* ADC 1031 (EOI ENCOUNTERED)
* ADC 1 (POSITION BACKWARD)
EOFA EQU *-1
STD PB
EOF14 LDN 74 SET LEVEL 17
STD PA
LDD FM
SHN -6
LMN /MTX/TFS
ZJN EOF15 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
NJN EOF16 IF NOT L FORMAT
EOF15 LDM CIOE
LPC 774
LMC 260
NJN EOF16 IF NOT 260 READ CODE
LDD PB
LPC 1000
LMC 271
STD PB
EOF16 LJM RBE RETURN *BEI* ERROR
EFO SPACE 4,10
** EFO - PROCESS EOF2 - EOF9.
*
* CALLS CLA.
EFO SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN EFO1 IF BAD LABEL
LDM BUF
LMC 2REO
NJN EFO1 IF NOT *EO*
LDC 2RF2
ADD PA
LMM BUF+1
NJN EFO1 IF NOT *FN*
AOD PA INCREMENT TO NEXT LABEL
LMN 9D
NJN EFOX IF NOT ALL POSSIBLE LABELS SKIPPED
EFO1 LDN 0
STD PA
LJM RLAX ADVANCE TO NEXT LABEL TYPE
EOV SPACE 4,10
** EOV - PROCESS *EOV1*.
*
* CALLS CBC, CIF, CLA, UAD.
EOV SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN EOV1 IF BAD LABEL
LDM BUF
LMC 2REO
NJN EOV1 IF NOT *EO*
LDM BUF+1
LMC 2RV1
ZJN EOV2 IF *EOV1*
EOV1 RJM CIF CHECK INTERNAL TAPE FORMAT
NJP EOF0 IF NOT INTERNAL FORMAT
LDN /MTX/LCE LABEL CONTENT ERROR
LJM RET3 RETURN ERROR CODE
EOV2 LDD PB
SHN -6
SBN /MTX/RLCF/100
NJN EOV3 IF NOT CLOSE
LJM EOV7 INCREMENT TO NEXT SECTION
EOV3 PJN EOV4 IF MULTI-FILE OPERATION
RJM CBC CHECK BLOCK COUNT
* ENTER HERE FOR UNLABELED END OF REEL.
EOV4 LDM FETO
SHN 21-11
PJN EOV5 IF USER NOT PROCESSING END OF REEL
LDM CIOE SET TO RETURN END OF REEL STATUS
LPC 774
LMC 2001
STD PB
LDN 0
STD PA
LJM RBE RETURN *BEI* ERROR
EOV5 LDD PB
SHN -6
SBN /MTX/RLCM/100
MJN EOV6 IF NOT *POSMF*
LDC 4000 SET *EOV1* ENCOUNTERED DURING *POSMF*
RAD PA
EOV6 RJM UAD CHECK IF VSNS DECLARED
ADN /MTX/UUFN
CRD CM
LDD FM
SHN -6
SBN /MTX/TFI
ZJN EOV7 IF I FORMAT
SBN /MTX/TFLI-/MTX/TFI
ZJN EOV7 IF LI FORMAT
LDD CM+4
ZJN EOV8 IF NOT INTERNALLY WRITTEN TAPE
LDD LT
SHN -11
LPN 3
LMN 2
NJN EOV8 IF NOT ANSI LABEL
EOV7 AOD PB INCREMENT TO NEXT SECTION
LJM EOVX RETURN
EOV8 LJM EVO2 CLEAR VSN FIELD
ETC SPACE 4,10
** ETC - END OF TAPE CHECK.
*
* CALLS CIF.
ETC3 AOD PB INCREMENT TO NEXT SECTION
ETC SUBR ENTRY/EXIT
LDD LT
SHN 21-11
MJN ETC2 IF NON-STANDARD LABEL
LDD SP
SHN -12
NJN ETC1 IF NOT READ TO TRAILER LABEL
ETCA EQU *-1
* PSN 0 ALWAYS PO = S FOR CTS
LDD LT
SHN 21-12
MJN ETC3 IF LABELED
RJM CIF CHECK INTERNAL TAPE FORMAT
ZJN ETC3 IF INTERNAL FORMAT
ETC1 LDM ETC SET EXIT ADDRESS
STM EOV
LJM EOV4 RETURN END OF REEL STATUS
ETC2 LDD DS CHECK FOR END OF TAPE
LPN 10
NJN ETC1 IF END OF TAPE
LJM EOF10 RETURN EOI
EVO SPACE 4,10
** EVO - PROCESS *EOV2*.
*
* IF AN *EOV2* LABEL IS PRESENT, THE NEXT VSN WILL BE RETURNED
* TO THE UDT.
*
* CALLS CLA, UAD, WUD.
EVO5 AOD PB INCREMENT SECTION
EVO SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
LDM BUF
LMC 2REO
NJN EVO2 IF NOT *EO*
LDM BUF+1
LMC 2RV2
NJN EVO2 IF NOT *EOV2*
LDD PB
SHN -6
LMN /MTX/RLCF/100
ZJN EVO5 IF CLOSE
UJN EVO3 UPDATE UDT INFORMATION
* ENTER HERE IF NOT TO RETURN NEXT VSN.
EVO2 LDD PB
SHN -6
LMN /MTX/RLCF/100
NJN EVO4 IF NOT CLOSE
LJM RLAX ADVANCE TO NEXT LABEL TYPE
EVO3 RJM WUD UPDATE UDT INFORMATION
ZJN EVO4 IF NOT AT MAGNET CP
SBK /MTX/UUDTL+/MTX/UUFN-/MTX/UVRI
CRD CM
ADK /MTX/UISN-/MTX/UVRI
CRD CN
LDM BUF+2 SET NEXT INTERNAL VSN
STD CN
LDM BUF+3
STD CN+1
LDM BUF+4
STD CN+2
LDD CM+4 SET VSN FROM *EOV2* LABEL FLAG
SCN 10
LMN 10
STD CM+4
RJM UAD UPDATE UDT
ADK /MTX/UVRI
CWD CM
ADK /MTX/UISN-/MTX/UVRI
CWD CN
EVO4 LJM RET1 EXIT
HDR SPACE 4,10
** HDR - PROCESS *HDR1*.
*
* CALLS CLA, CSC, GCD, GCH, /MFP/PHD, THL, VOL, WUD.
HDR10 LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
HDR SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
ZJN HDR2 IF GOOD LABEL
HDR1 LDD PB
SHN -6
NJN HDR10 IF NOT INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
STD PB SET TO RESTART SEQUENCE
STM BUF
RJM VOL
UJN HDRX RETURN
HDR2 LDM BUF CHECK FOR *HDR1*
LMC 2RHD
NJN HDR1 IF NOT *HD*
LDM BUF+1
LMC 2RR1
NJN HDR1 IF NOT *HDR1*
LDM UDTB+10 CLEAR LABEL EXPIRED
SCN 2
STM UDTB+10
RJM WUD
LDD PB CHECK IF MULTI FILE
SHN -6
SBN /MTX/RLCM/100
MJN HDR3 IF NOT MULTI FILE
RJM /MFP/PHD
UJN HDR4 CHECK SYSTEM CODE
HDR3 ADN 7 DETERMINE WHETHER TO TRANSFER HEADER
NJN HDR4 IF NOT INITIAL LABEL CHECK
RJM THL TRANSFER HEADER LABEL
HDR4 RJM CSC CHECK SYSTEM CODE
ZJN HDR5 IF INTERNALLY WRITTEN TAPE
LDN 0 CLEAR EST FIELD
STD T3
UJN HDR6 CLEAR EST WRITTEN ON FIELD IN UDT
HDR5 LDC 71D CONVERT EST WRITTEN ON
STD T6
RJM GCH
SBN 1R0
SHN 3
STD T3
RJM GCH
SBN 1R0
RAD T3
RJM GCH GET POSSIBLE THIRD CHARACTER
SBN 1R0
STD T6
LMN 1R -1R0
ZJN HDR6 IF TWO DIGIT EST ORDINAL
LDD T3
SHN 3
LMD T6
STD T3
HDR6 LDD T3 SAVE EST WRITTEN ON
STM UDTB+5*5+1
LDN JDAL READ TODAYS DATE
CRD CN
LDN 49D SET POSITION IN SOURCE BUFFER
STD T6
LDN CN SET DESTINATION BUFFER ADDRESS
STM DBUF
LDN 6
STD T7
LDN 5
STD T2
LDN 1R7 SET CENTURY CROSSOVER
STD T0
HDR7 RJM GCH GET EXPIRATION DATE CHARACTER
SBD T0 CHECK CENTURY
PJN HDR7.1 IF NOT 21ST CENTURY
ADN 10D ADJUST DECADE FOR 21ST CENTURY
HDR7.1 STD T4
RJM GCD GET TODAYS DATE CHARACTER
SBD T0 CHECK CENTURY
PJN HDR7.2 IF NOT 21ST CENTURY
ADN 10D ADJUST DECADE FOR 21ST CENTURY
HDR7.2 SBD T4
NJN HDR8 IF NO MORE COMPARES REQUIRED
STD T0 CLEAR CENTURY CROSSOVER
SOD T2
NJN HDR7 IF MORE CHARACTERS TO COMPARE
HDR8 MJN HDR9 IF NOT EXPIRED
LDN 2 SET LABEL EXPIRED
RAM UDTB+10
HDR9 RJM WUD WRITE UDT INFORMATION
LDN 0 INCREMENT TO NEXT SECTION
STD PA
AOD PB
LJM HDRX RETURN
OHD SPACE 4,10
** OHD - PROCESS *HDR2 - HDR9* OPTIONAL VOLUME LABELS.
*
* CALLS CLA.
OHD SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN OHD1 IF BAD LABEL
LDM BUF
LMC 2RHD
NJN OHD1 IF NOT *HD*
LDC 2RR2
SBM BUF+1
ADD PA
NJN OHD1 IF NOT *RN*
AOD PA INCREMENT TO NEXT USER VOLUME NUMBER
LMN 9D
NJN OHDX IF NOT ALL POSSIBLE USER LABELS SKIPPED
OHD1 LDN 0
STD PA
LJM RLAX ADVANCE TO NEXT LABEL TYPE
PTM SPACE 4,10
** PTM - PROCESS TAPE MARK.
*
* CALLS CLA.
PTM3 LDD PA INCREMENT BACKSPACE COUNT
ADC 100
STD PA
ADC -MXBS*100
PJN PTM2 IF MAXIMUM NUMBER OF BACKSPACES ATTEMPTED
PTM SUBR ENTRY/EXIT
LDD PA
ZJN PTMX IF ONLY BACK UP 1 BLOCK
LDD DS CHECK LOAD POINT STATUS
SHN 21-2
MJN PTM2 IF POSITIONED AT LOAD POINT
RJM CLA CHECK LABEL
SBN 1
NJN PTM1 IF NOT A TAPE MARK
LDD PA
LPN 77
SBN 1 DECREMENT TAPE MARK COUNT
ZJN PTMX IF ALL TAPE MARKS READ
STM PTMA
LDD PA UPDATE TAPE MARK COUNT
LPC 7700
ADM PTMA
STD PA
PTM1 LDD MD
SHN 21-12
MJP PTM3 IF BACKSPACING
LDD PA
UJN PTMX RETURN
PTM2 LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
PTMA CON 0 TEMPORARY STORAGE
RBE SPACE 4,10
** RBE - RETURN *BEI* ERROR TO MAGNET.
*
* EXIT TO *RET3* WITH *BEI* ERROR.
RBE BSS 0 ENTRY
LDN /MTX/BEI SET *BEI* ERROR
LJM RET3 RETURN ERROR TO MAGNET
SBL SPACE 4,10
** SBL - SKIP BLOCK.
SBL SUBR ENTRY/EXIT
LDD EC
LMN /MTX/BEI
ZJN SBL1 IF TAPE MARK
AOD PA INCREMENT BLOCK COUNT
LMN 77 SKIP UP TO 64 BLOCKS
NJN SBLX IF NOT MAXIMUM BLOCKS SKIPPED
SBL1 STD PA
LJM RLAX ADVANCE TO NEXT LABEL TYPE
SDE SPACE 4,10
** SDE - SET ACTUAL DENSITY FOR 9 TRACK.
*
* EXIT DENSITY SET FROM UNIT STATUS.
*
* CALLS DTS.
SDE SUBR ENTRY/EXIT
LDD HP
SHN 21-7
MJN SDEX IF CTS
SHN 21-0-21+7
PJN SDEX IF 7 TRACK
LDM DNCV CLEAR DENSITY
SCN 70
STM DNCV
RJM DTS GET DETAILED STATUS
LDM MTDS+4
SDEA EQU *-1
* LDM ATUS (ATS UNIT)
SDEB SHN -6
* SHN -3 (ATS UNIT)
LPN 3
STD T1
LDM SDED,T1 GET EQUIVALENT DENSITY
SDEC SHN 0
* SHN 3 (ATS UNIT)
LPN 70
RAM DNCV SET DENSITY
UJN SDEX RETURN
** DENSITY TABLE.
* TABLE IS INDEXED BY VALUES IN DETAILED STATUS.
*
* 6/0,3/ MTS DENSITY, 3/ ATS DENSITY
SDED VFD 6/0,3//MTX/D05,3//MTX/D16
VFD 6/0,3//MTX/D08,3//MTX/D16
VFD 6/0,3//MTX/D16,3//MTX/D08
VFD 6/0,3//MTX/D16,3//MTX/D62
SKR SPACE 4,10
** SKR - SKIP BLOCK REVERSE.
*
* EXIT (WP) DECREMENTED IF TAPE MARK OR BLOCK WITHOUT
* ERROR WAS READ.
SKR SUBR ENTRY/EXIT
LDD EC
ZJN SKR1 IF NO ERROR
SKRA EQU *-1
* UJN SKR2 CTS
LMN /MTX/BEI
NJN SKR2 IF NOT TAPE MARK
SKR1 LDN 4 SET UNUSABLE BID
STM BIDW,WP
SOD WP BACK UP BID WINDOW
PJN SKR2 IF NO UNDERFLOW
LDN 7 RESET POINTER
STD WP
SKR2 RJM BKS BACKSPACE TAPE
UJN SKRX RETURN
BKS SPACE 4,10
** BKS - BACKSPACE TAPE.
* WAIT BACKSPACE FUNCTION COMPLETE.
* TIMES OUT AFTER APPROXIMATECY 25 FEET OF TAPE.
*
* EXIT (DS) = GENERAL STATUS.
*
* CALLS FCN, STW, WNB.
BKS2 CON 0 ENTERED VIA *RJM FROM //STW
SOD T2
NJN BKS1 IF NOT TIMEOUT
LDC ERR RESET ERROR EXIT
STM STWC
UJN BKS1 ATTEMPT 1 MORE TIME
BKS SUBR ENTRY/EXIT
LDD HP
SHN 21-7
MJN BKS1.2 IF CTS
LDN 2 WAIT NOT BUSY
RJM STW
LDC F0113 BACKSPACE
RJM FCN
LDN 27
STD T2
LDC BKS2 SET RETURNED TIMEOUT FROM //STW
STM STWC
BKS1 LDN 2 WAIT NOT BUSY
RJM STW
LDC ERR RESET ERROR EXIT
STM STWC
BKS1.1 UJN BKSX RETURN
BKS1.2 RJM WNB WAIT NOT BUSY
LDC F0113 BACKSPACE BLOCK
RJM FCN ISSUE FUNCTION
RJM WNB WAIT NOT BUSY
UJN BKS1.1 RETURN
STM SPACE 4,10
** STM - SKIP TAPE MARK.
*
* CALLS CLA, SKR.
STM3 AOD PB ADVANCE SECTION
STM SUBR ENTRY/EXIT
LDD PB
SHN -6
LMN /MTX/RLCF/100
ZJN STM2 IF CLOSE
RJM CLA CHECK LABELS
SBN 1
ZJN STM3 IF TAPE MARK
LDN /MTX/LAM LABEL MISSING
STM1 LJM RET3 RETURN ERROR CODE
STM2 LDD EC
LMN /MTX/BEI
ZJN STM3 IF TAPE MARK
RJM SKR SKIP BLOCK REVERSE
LDN /MTX/BEI SET NOT TO SKIP TAPE MARKS REVERSE
UJN STM1 RETURN ERROR CODE
THL SPACE 4,10
** THL - TRANSFER HEADER LABEL.
*
* CALLS CCH, DCV, GCH.
THL SUBR ENTRY/EXIT
LDN 5 FILE IDENTIIFER
STD T6
LDN 21D
STD T7
LDN 17D
RJM CCH
LDN 41D SET IDENTIFIER
STD T7
LDN 6
RJM CCH
LDN 38D FILE SECTION NUMBER
STD T7
LDC 30004
RJM DCV
LDN 48D FILE SEQUENCE NUMBER
STD T7
LDC 30004
RJM DCV
LDN 58D GENERATION NUMBER
STD T7
LDC 30004
RJM DCV
LDN 56D GENERATION VERSION NUMBER
STD T7
LDC 20002
RJM DCV
RJM GCH SKIP CHARACTER
LDN 61D CREATION DATE
STD T7
LDN 5
RJM CCH
RJM GCH SKIP CHARACTER
LDN 5 EXPIRATION DATE
RJM CCH
LDN 47D ACCESSIBILITY
STD T7
LDN 1
RJM CCH
LJM THLX RETURN
TMS SPACE 4,10
** TMS - TAPE MARK SENSE.
*
* USES PB, T7.
*
* CALLS CLA, SCH, VOL, WUD.
TMS SUBR ENTRY/EXIT
RJM CLA
SBN 1
MJN TMS2 IF NOT TAPE MARK
LDD PB
SHN -6
NJN TMS1 IF NOT INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
LDN 17D CLEAR LABEL CHECK IN PROGRESS
STD T7
LDN 0
RJM SCH
RJM WUD REWRITE UDT
TMS1 LJM RET1 EXIT
TMS2 LDD PB
SHN -6
ZJN TMS4 IF INITIAL LABEL CHECK SEQUENCE
ERRNZ /MTX/RLCL
TMS3 LDN /MTX/LCE LABEL CONTENT ERROR
LJM RET3 RETURN ERROR CODE
TMS4 LDN 0 SET TO RESTART SEQUENCE
STD PB
STM BUF
RJM VOL
UJN TMS3 RETURN LABEL CONTENT ERROR
UHL SPACE 4,10
** UHL - PROCESS *UHLA* USER FILE HEADER LABELS.
*
* CALLS CLA.
UHL SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN UHL1 IF BAD LABEL
LDM BUF
LMC 2RUH
NJN UHL1 IF NOT *UH*
LDM BUF+1
SHN -6
LMN 1RL
NJN UHL1 IF NOT *UHLN*
AOD PA INCREMENT TO NEXT USER VOLUME NUMBER
LMC 64D+1
NJN UHLX IF NOT ALL POSSIBLE USER LABELS SKIPPED
LDN /MTX/LCE LABEL CONTENT ERROR
LJM RET3 RETURN ERROR CODE
UHL1 LDC 0
* LDC 4000 (*VOL1* READ AND VALIDATE HEADER LABEL)
UHLA EQU *-1
STD PA
LJM RLAX ADVANCE TO NEXT LABEL TYPE
UTL SPACE 4,10
** UTL - PROCESS USER TRAILER LABELS.
*
* CALLS CLA.
UTL SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN UTL1 IF BAD LABEL
LDM BUF
LMC 2RUT
NJN UTL1 IF NOT *UT*
LDM BUF+1
SHN -6
LMN 1RL
NJN UTL1 IF NOT *UTLN*
AOD PA
LMC 64D+1
NJN UTLX IF NOT ALL TRAILER LABELS SKIPPED
LDN /MTX/LCE LABEL CONTENT ERROR
LJM RET3 RETURN ERROR CODE
UTL1 LDD PB
SHN -6
LMN /MTX/RLCF/100
NJN UTL2 IF NOT CLOSE
LJM RET1 EXIT
UTL2 LDN 0
STD PA
LJM RLAX ADVANCE TO NEXT LABEL TYPE
UVL SPACE 4,10
** UVL - PROCESS *UVLN* USER VOLUME LABELS.
*
* CALLS CLA, VOL.
UVL SUBR ENTRY/EXIT
RJM CLA CHECK LABEL
NJN UVL1 IF BAD LABEL
LDM BUF
LMC 2RUV
NJN UVL3 IF NOT *UV*
LDM BUF+1
ADC -2RL1
SBD PA
NJN UVL3 IF NOT *LN*
AOD PA INCREMENT TO NEXT USER VOLUME NUMBER
LMN 9D+1
NJN UVLX IF NOT ALL POSSIBLE USER LABELS SKIPPED
UVL1 LDD PB
SHN -6
NJN UVL2 IF NOT INITIAL LABEL CHECK SEQUENCE
ERRNZ /MTX/RLCL
STD PB RESTART LABEL CHECK SEQUENCE
STM BUF
RJM VOL
UVL2 LMN 5
ZJN UVL4 IF REEL CHECK
LDN /MTX/LCE LABEL CONTENT ERROR
LJM RET3 RETURN ERROR CODE
UVL3 LDD PB CHECK IF HEADER VALIDATION
SHN -6
LMN /MTX/RLVH/100
NJN UVL4 IF NOT HEADER VALIDATION
LDC 4000 SET *VOL1* LABEL READ
STM UHLA
LDN 4 ADVANCE TO HDR1 CHECK
RAD PB
UVL4 LJM RLAX ADVANCE TO NEXT LABEL TYPE
VOL SPACE 4,10
** VOL - PROCESS *VOL1* LABEL.
*
* CALLS CCH, CLA, C2D, DBT, FCH, SCH, SDE, UAD, UDA, WUD.
VOL SUBR ENTRY/EXIT
LDC BUF SET UP BUFFER ADDRESSES
STM IBUF
LDC UDTB
STM DBUF
LDD PB
SHN -6
ZJN VOL1 IF INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
LMN /MTX/RLVH/100
NJN VOL3 IF NOT HEADER VALIDATION
RJM DBT DETERMINE BLOCK TYPE
NJN VOL3 IF GOOD BLOCK
LJM VOL6 PROCESS TAPE MARK OR BAD BLOCK
VOL1 RJM CLA CHECK LABEL
ZJN VOL4 IF GOOD LABEL
LDD EC
LMN /MTX/BTA
ZJN VOL2 IF BLANK TAPE
LMN /MTX/BTL&/MTX/BTA
NJN VOL6 IF NOT *BLOCK TOO LARGE* ERROR
LDD HP
SHN 21-7
MJN VOL2 IF CTS
SHN 21-0-21+7
PJN VOL6 IF 7 TRACK
VOL2 LJM VOL12 PRESET *UDT* FOR UNLABELED TAPE
VOL3 RJM CLA CHECK LABEL
NJN VOL6 IF BAD LABEL
VOL4 LDM BUF CHECK FOR *VOL1*
LMC 2RVO
NJN VOL6 IF NOT *VO*
LDM BUF+1
LMC 2RL1
NJN VOL6 IF NOT *L1*
LDD PB
SHN -6
ZJN VOL5 IF INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
LJM VOL22 INCREMENT TO NEXT SECTION
VOL5 LJM VOL15 SET GOOD *VOL1* LABEL
VOL6 LDD PB
SHN -6
ZJN VOL9 IF INITIAL LABEL SEQUENCE
ERRNZ /MTX/RLCL
LMN /MTX/RLVH/100
NJN VOL7 IF NOT HEADER VALIDATION
AOD PB ADVANCE SECTION
LJM RLAX ADVANCE TO NEXT LABEL TYPE
VOL7 LMN 4&10
NJN VOL8 IF NOT OPEN
LDM CIOE
LPC 1774
LMC 110
NJN VOL8 IF NOT *POSMF*
LDN 1 ADVANCE TO *HDR1* CHECK
RAD PB
LJM RLAX ADVANCE TO NEXT LABEL TYPE
VOL8 LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
VOL9 LDD HP
SHN 21-7
MJN VOL10 IF CTS
SHN 21-0-21+7
MJN VOL10 IF 9 TRACK
LCN 10 TRY NEXT LOWER DENSITY
RAM DNCV
LPN 70
NJN VOL11 IF MORE DENSITIES TO TRY
UJN VOL12 PRESET UDT FOR UNLABELED TAPE
VOL10 LDM DNCV
LPN 7
SBN /MTX/MCCO-1
PJN VOL12 IF ALL CONVERSION MODES TRIED
LDN 0 TRY ANOTHER CONVERSION MODE
STD PA
AOM DNCV INCREMENT TO NEXT CONVERSION MODE
VOL11 LJM RET1 EXIT
VOL12 LDD PB
SHN -6
LMK /MTX/RLCL
ZJN VOL13 IF INITIAL LABEL SEQUENCE
LJM VOL6 ADVANCE SECTION COUNT
* SET UDT LABEL PARAMETERS FOR UNLABELED TAPE.
VOL13 LDD LT
LPC 777 CLEAR LABELED FLAGS
STD LT
RJM UAD
ADK /MTX/UST4
CWD LT
LDM DNCV CLEAR CONVERSION MODE
SCN 7
STM DNCV UPDATE CONVERSION MODE
RJM SDE SET DENSITY FOR 9 TRACK
LDD EO SET EST ORDINAL IN DEFAULT VSN
SHN -6
RAM TDLP+6
LDD EO
RJM C2D
STM TDLP+7
LDD HP
LPN 20
ZJN VOL14 IF NOT ATS UNIT
LDM MTDS
LPC 177
LMN 7
NJN VOL14 IF UNIT CAPABLE OF TAPE DENSITY
LDC 400 SET DENSITY MISMATCH
RAM TDLP+1*5+3
LDN 2
STD T6
LDD MA
CWM VOLB,T6 *WRONG DENSITY*
SBN 2
CRM TDLP+2*5,T6
VOL14 LDN JDAL READ JULIAN DATE
CRM BUF,ON
LDC OVLM RESET DESTINATION BUFFER
STM DBUF
LDN 6 SET UP CREATION DATE
STD T6
LDN 1 SET EXPIRATION DATE
STD T7
LDN 5
RJM CCH
LDN 6
STD T6
LDN 5
RJM CCH
RJM UDA
CWM TDLP,T1
LJM VOL11 UPDATE CONVERSION MODE AND LABELED FLAGS
* PROCESS GOOD *VOL1* LABEL.
VOL15 RJM SDE SET DENSITY FOR 9 TRACK
LDN 5 MOVE VSN TO UDT
STD T6
LDN 11D
STD T7
LDN 6
RJM CCH
LDN 40 SET LABEL CHECK IN PROGRESS FLAG
RJM SCH STORE CHARACTER
LDN 3 FILL THREE CHARACTERS WITH ZERO
RJM FCH
LDN 11D COPY VOLUME ACCESSIBILITY TO *UGNU*
STD T6
LDN 55D
STD T7
LDN 1
RJM CCH
RJM WUD WRITE UDT LABEL AREA
* SET TO PROCESS NEXT LABEL OPERATION.
VOL22 LDN 0
STD PA
AOD PB INCREMENT TO NEXT LABEL OPERATION
LJM VOLX RETURN
VOLB VFD 60/10LWRONG DENS
VFD 42/7LITY ,18/1
WEL SPACE 4,10
** WEL - WRITE EXTENDED LABELS TO USER BUFFER.
*
* CALLS ELA.
WEL2 LDN ZERL SET UP CONTROL WORD
CRM BUFC,ON
LDC 80D
STM BUFC+4
LDN ZERL SET TERMINATOR WORD
CRM BUF+40D,ON
LDN 12 RETURN LABEL TO USER BUFFER
STD T5
RJM ELA
CWM BUFC,T5
WEL SUBR ENTRY/EXIT
WELA UJN WELX RETURN
* PSN (EXTENDED LABELS)
LDD BY
ZJN WELX IF EOF READING LABEL
LDN 0
STD T6
STD T7
WEL1 RJM ELA GET LABEL BUFFER ADDRESS
ZJN WELX IF END OF BUFFER
CRD CM
LDD CM+4
ZJN WEL2 IF END OF LABELS IN BUFFER
LDN 11 UPDATE POSITION IN BUFFER
RAD T7
SHN -14
RAD T6
UJN WEL1 LOOP
WNB SPACE 4,10
** WNB - WAIT NOT BUSY.
*
* CALLS /PRESET/GPS.
WNB SUBR ENTRY/EXIT
WNB1 LDN 2 WAIT NOT BUSY
RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS
MJN WNB1 IF COMMAND RETRY
UJN WNBX RETURN
ZRO SPACE 4,10
** ZRO - ZERO FIRST WORD OF XL BUFFER.
*
* CALLS ELA.
ZRO SUBR ENTRY
LDN 0
STD T6
STD T7
LDN ZERL
CRD CN
RJM ELA GET XL BUFFER ADDRESS
ZJN ZRO1 IF END OF BUFFER
CWD CN PRESET BUFFER
ZRO1 LJM RLAX ADVANCE TO NEXT LABEL TYPE
TITLE CHARACTER PROCESSING SUBROUTINES.
SPACE 4,10
** DIRECT CELL USAGE IN FOLLOWING ROUTINES.
*
* ENTRY (T5) = NUMBER OF CHARACTERS.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* ALL CHARACTER POSITIONS ARE REFERENCED STARTING WITH *1*.
* THUS, THE CHARACTER POSITION VALUES BEING USED TO ACCESS
* *BUF* MAY BE REFERENCED DIRECTLY TO THE LABEL STANDARD.
IBUF CON 0 FWA OF FETCH BUFFER
DBUF CON 0 FWA OF DESTINATION BUFFER
CAN SPACE 4,15
** CAN - COMPARE ALPHANUMERIC FIELDS.
* COMPARE WILL BE GOOD IF ALL OF INPUT CHARACTER STRING IS
* BINARY ZERO.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO COMPARE.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (A) = 0, GOOD COMPARE.
* (A) .NE. 0, (A) = CHARACTER POSITION AT START.
* (T6), (T7) = UPDATED.
*
* USES T3, T4.
*
* CALLS GCD, GCH.
CAN4 SOD T5 UPDATE TO SKIP REMAINDER OF FIELD
RAD T6
LDD T5
RAD T7
LDD T3
CAN SUBR ENTRY/EXIT
STD T5
STD T4
LDD T6 SAVE STARTING POSITION
STD T3
CAN1 RJM GCH GET CHARACTER
NJN CAN2 IF SPECIFIED
SOD T4
NJN CAN1 IF MORE CHARACTERS TO CHECK
LDD T5
RAD T7
LDN 0 GOOD COMPARE
UJN CANX RETURN
CAN2 LDD T3 RESET CHARACTER POSITION
STD T6
CAN3 RJM GCH GET CHARACTER
STD T4
RJM GCD GET CHARACTER FROM DESTINATION BUFFER
LMD T4
NJN CAN4 IF NO COMPARE
SOD T5
NJN CAN3 IF MORE CHARACTERS TO COMPARE
UJN CANX RETURN
CBC SPACE 4,10
** CBC - CHECK BLOCK COUNT.
*
* CALLS DCV.
CBC SUBR ENTRY/EXIT
LDD SP
SHN 21-1
MJN CBCX IF IGNORE ERRORS
LDN CN SET DESTINATION BUFFER
STM DBUF
LDN 0
STD CN
LDN 55D
STD T6
LDN 2
STD T7
LDC 30006
RJM DCV
LDC UDTB RESET DESTINATION BUFFER
STM DBUF
LDD CN
LMD BL
NJN CBC1 IF ERROR IN BLOCK NUMBER
LDD CN+1
LMD BL+1
ZJN CBCX IF GOOD BLOCK COUNT
CBC1 LDN /MTX/LBE LABEL BLOCK COUNT ERROR
LJM RET3 RETURN ERROR CODE
CCH SPACE 4,15
** CCH - COPY INPUT BUFFER TO DESTINATION BUFFER.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO MOVE.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T6), (T7) = INCREMENTED.
*
* USES T5.
*
* CALLS GCH, SCH.
CCH SUBR ENTRY/EXIT
STD T5
CCH1 RJM GCH GET LABEL CHARACTER
RJM SCH STORE CHARACTER IN USER BUFFER
SOD T5
NJN CCH1 IF MORE CHARACTERS TO MOVE
UJN CCHX RETURN
CIF SPACE 4,10
** CIF - CHECK INTERNAL TAPE FORMAT.
*
* EXIT (A) = 0 IF I, SI, OR LI TAPE FORMAT.
CIF SUBR ENTRY/EXIT
LDD FM
SHN -6
LMN /MTX/TFI
ZJN CIFX IF I FORMAT
LMN /MTX/TFSI&/MTX/TFI
ZJN CIFX IF SI FORMAT
LMN /MTX/TFLI&/MTX/TFSI
UJN CIFX RETURN WITH STATUS
CSC SPACE 4,10
** CSC - CHECK SYSTEM CODE.
*
* EXIT (A) = 0, IF INTERNALLY WRITTEN TAPE (SYSTEM CODE
* IN HDR1 LABEL = KRONOS 2.1 OR NOS).
*
* CALLS CAN, GCH.
CSC1 LDN 1
CSC SUBR ENTRY/EXIT
LDN 61D
STD T6
LDC CSCA CHECK IF KRONOS 2.1
STM DBUF
LDN 1
STD T7
RJM GCH
ZJN CSC1 IF FIELD NOT SPECIFIED
SOD T6
LDN 10D COMPARE FIELDS
RJM CAN
ZJN CSCX IF COMPARE
LDN 61D CHECK FOR NOS SYSTEM CODE
STD T6
LDN 6
RJM CAN COMPARE FIELDS
UJN CSCX RETURN
CSCA DATA H*KRONOS2.1-*
DATA H*NOS *
DCV SPACE 4,15
** DCV - CONVERT DECIMAL FIELD TO BINARY.
*
* ENTRY (A, 13 - 12) = NUMBER OF CHARACTER POSITIONS IN RESULT.
* (A, 11 - 0) = NUMBER OF CHARACTERS IN LABEL FIELD.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T6), (T7) = INCREMENTED.
*
* USES T2, T3, T4, T5.
*
* CALLS GCH, SCH.
DCV SUBR ENTRY/EXIT
STD T5 NUMBER OF CHARACTERS IN LABEL
SHN -14
STD T4 NUMBER OF CHARACTER POSITIONS IN UDT
LDN 0 PRESET RESULT
STD T2
STD T3
DCV1 RJM GCH GET CHARACTER
SBN 1R0
RAD T3
SHN -14
RAD T2
SOD T5
ZJN DCV2 IF ALL DIGITS PROCESSED
LDD T2 10D * ACCUMULATED RESULT
SHN 14
ADD T3
SHN 2+6 * 4
ADD T2 * 5
SHN 14
ADD T3
SHN 1 * 10D
STD T3
SHN -14
STD T2
UJN DCV1 LOOP
DCV2 LDD T4
LMN 3
NJN DCV3 IF NOT 3 CHARACTER POSITIONS
LDD T2 STORE VALUE
RJM SCH STORE CHARACTER
UJN DCV4
DCV3 LMN 2&3
NJN DCV5 IF NOT 2 CHARACTER POSIITONS
DCV4 LDD T3 STORE VALUE
SHN -6
RJM SCH STORE CHARACTER
DCV5 LDD T3
LPN 77
RJM SCH STORE CHARACTER
LJM DCVX RETURN
FCH SPACE 4,15
** FCH - FILL DESTINATION BUFFER WITH CHARACTER(S).
*
* ENTRY (A, 17- 12) = CHARACTER TO FILL WITH.
* (A, 11 - 0) = NUMBER OF CHARACTERS TO FILL.
* (T7) = CHARACTER POINTER IN DESTINATION BUFFER.
*
* EXIT (T7) = INCREMENTED.
*
* USES T4.
*
* CALLS SCH.
FCH SUBR ENTRY/EXIT
STD T5 SAVE COUNT
SHN -14
STD T4 SAVE FILL VALUE
FCH1 LDD T4 STORE CHARACTER
RJM SCH
SOD T5
NJN FCH1 IF MORE TO FILL
UJN FCHX RETURN
GCD SPACE 4,10
** GCD - GET CHARACTER FROM DESTINATION BUFFER.
*
* ENTRY (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (A) = CHARACTER.
* (T7) = INCREMENTED.
*
* USES T1.
GCD1 LDM -1,T1
LPN 77
GCD SUBR ENTRY/EXIT
AOD T7
SBN 1
SHN 21
ADM DBUF
STD T1
SBM DBUF
SHN -21
ZJN GCD1 IF LOWER 6 BITS
LDI T1
SHN -6
UJN GCDX RETURN
GCH SPACE 4,10
** GCH - GET CHARACTER FROM INPUT BUFFER.
*
* ENTRY (T6) = CHARACTER POSITION IN INPUT BUFFER.
*
* EXIT (A) = CHARACTER.
* (T6) = INCREMENTED.
*
* USES T1.
GCH1 LDM -1,T1
LPN 77
GCH SUBR ENTRY/EXIT
AOD T6
SBN 1
SHN 21
ADM IBUF
STD T1
SBM IBUF
SHN -21
ZJN GCH1 IF LOWER 6 BITS
LDI T1
SHN -6
UJN GCHX RETURN
RUD SPACE 4,10
** RUD - READ UNIT DESCRIPTOR TABLE LABEL INFORMATION.
* OPERATION ONLY PERFORMED AT *MAGNET* CP.
*
* CALLS UDA.
RUD SUBR ENTRY/EXIT
RJM UDA GET UDT LABEL ADDRESS ADDRESS
ZJN RUDX IF NOT AT MAGNET CP
CRM UDTB,T1
UJN RUDX RETURN
SCH SPACE 4,10
** SCH - STORE CHARACTER IN DESTINATION BUFFER.
*
* ENTRY (A) = CHARACTER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T7) = INCREMENTED.
*
* USES T1.
SCH1 LDM -1,T1
SCN 77
LMD T0
SCH2 STM -1,T1
SCH SUBR ENTRY/EXIT
LPN 77
STD T0 SAVE CHARACTER
AOD T7 INCREMENT POSITION
SHN 21 SET BYTE ADDRESS
ADM DBUF
STD T1
SBM DBUF
SHN -21
NJN SCH1 IF EVEN CHARACTER
LDM -1,T1
LPN 77
SHN 14
LMD T0
SHN 6
UJN SCH2 STORE CHARACTER
UDA SPACE 4,10
** UDA - SET ADDRESS OF UDT LABEL PARAMETERS.
*
* EXIT (A) = ADDRESS OF UDT LABEL PARAMETERS (*UUFN*) IF AT
* MAGNET CP.
* (A) = 0 IF NOT AT MAGNET CP.
* (T1) = LENGTH OF UDT LABEL PARAMETERS (*UUDTL*) IF AT
* MAGNET CP.
*
* USES T1.
*
* CALLS UAD.
UDA1 LDN 0 SET NOT AT MAGNET CP
UDA SUBR ENTRY/EXIT
LDM //CECB
LPN 77
NJN UDA1 IF NOT AT MAGNET CP
LDN /MTX/UUDTL
STD T1
RJM UAD
ADK /MTX/UUFN SET LABEL PARAMETERS ADDRESS
UJN UDAX RETURN
WUD SPACE 4,10
** WUD - WRITE UNIT DESCRIPTOR TABLE.
*
* EXIT (A) = LWA+1 OF LABEL PARAMETERS IF AT MAGNET CP.
* (A) = 0 IF NOT AT MAGNET CP.
* LABEL PARAMETERS WRITTEN TO UDT IF AT MAGNET CP.
*
* CALLS UDA.
WUD SUBR ENTRY/EXIT
RJM UDA GET UDT LABEL ADDRESS ADDRESS
ZJN WUDX IF NOT AT MAGNET CP
CWM UDTB,T1
UJN WUDX RETURN
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
BUFFER SPACE 4,10
USE BUFFER
TADD TSAD ADDRESS TABLE
SPACE 4,10
** DEFAULT LABEL PARAMETERS FOR UNLABELED TAPES.
TDLP BSS 0
VFD 42/7L ,6/0,12/0 *UUFN*
VFD 36/6L***000,12/6,12/0 *UVSN*
VFD 60/10LUNLABELED. *UFID*
VFD 42/7L ,18/1 *UFSN*
VFD 36/6L ,6/1L ,18/1 *USID*
VFD 24/,6/1L ,12/0,18/1 *UGNU*
SPACE 4,10
** UDT LABEL INFORMATION BUFFER (*UUFN* - *UDAT*).
UDTB BSS /MTX/UUDTL*5 LABEL INFORMATION BUFFER
SPACE 4,10
** THE FOLLOWING ROUTINES WILL BE OVERLAID IF THE OPERATION
* IS CHECK MULTI-FILE LABELS (*RLCM*) OR VALIDATE HEADER LABEL
* (*RLVH*).
OVLM BSS 0 MULTI-FILE OVERLAY ORIGIN
BTA SPACE 4,10
** BTA - BLANK TAPE CHECK.
*
* EXIT (EC) = /MTX/BTA IF BLANK TAPE.
*
* CALLS DTS.
BTA SUBR ENTRY/EXIT
LDD HP
SHN 21-7
MJN BTA3 IF CTS
LDC RJMI RESET *STW* EXIT
STM STWC-1
LDC //ERR
STM STWC
LDD DS
SHN 21-13
MJN BTA1 IF ALERT
RJM DTS GET DETAILED STATUS
BTA1 LDM MTDS CHECK FOR BLANK TAPE
LPC 77
* LPC 177 (ATS UNIT)
BTAA EQU *-1
LMN 16
BTAB PSN
* ZJN BTA2 (ATS UNIT - IF AGC FAILURE)
LMN 16&10
NJN BTA3 IF NOT BLANK TAPE
LDN /MTX/BTA
BTA2 STD EC
BTA3 LJM RLAX ADVANCE SECTION
CFU SPACE 4,15
** CFU - COMPARE FAMILY AND USER NAMES.
*
* ENTRY (IBUF) = *BUF*.
*
* EXIT (A) = 0 IF FAMILY/USER NAME IN *VOL1* LABEL MATCHES
* FAMILY/USER FROM UDT.
* (IBUF) = *BUF*.
* (DBUF) = *UDTB*.
*
* USES T1, T2, T6, T7, CM - CM+4, CN - CN+4.
*
* CALLS CAN, CCH.
CFU SUBR ENTRY/EXIT
* SET *VOL1* LABEL OR *ZFAM* FAMILY NAME.
LDN 38D SET LOCATION OF FAMILY NAME IN LABEL
STD T6
LDN CM SET DESTINATION BUFFER
STM DBUF
LDN 1
STD T7
LDN 7 SET CHARACTER COUNT
RJM CCH MOVE LABEL FAMILY NAME
LDD CM+3
SCN 77
LMN 1R
STD CM+3
LDN CM+4
STD T2
CFU1 SOD T2
LMN CM-1
ZJN CFU3 IF ALL BYTES PROCESSED
LDI T2
LMC 2R
NJN CFU2 IF NOT BLANK BYTE
STI T2 SET ZERO FILL
UJN CFU1 CHECK NEXT BYTE
CFU2 LPN 77
NJN CFU3 IF NO MORE TRAILING BLANKS
LDI T2
SCN 77 SET ZERO FILL
STI T2
CFU3 LDD CM CHECK FOR NULL FAMILY NAME
ADD CM+1
ADD CM+2
ADD CM+3
NJN CFU4 IF NOT NULL FAMILY NAME
LDD MA
CWM CFUA,ON
SBN 1
CRD CM SET *ZFAM* FAMILY NAME FOR COMPARE
* SET CURRENT FAMILY NAME.
CFU4 LDK FOTP GET FOT POINTER
CRD CN
LDM UDTB+3 SET FOT ORDINAL
LPN 77
STD T1
LDD CN SET FOT ADDRESS
SHN 14
ADD CN+1
ADD T1
CRD CN READ FAMILY NAME
* COMPARE FAMILY NAMES.
LDD CM
LMD CN
NJN CFU5 IF NO MATCH
LDD CM+1
LMD CN+1
NJN CFU5 IF NO MATCH
LDD CM+2
LMD CN+2
NJN CFU5 IF NO MATCH
LDD CM+3
LMD CN+3
SCN 77
NJN CFU5 IF NO MATCH
* COMPARE USER NAMES.
LDN 45D SET LABEL USER NAME POINTER
STD T6
LDC UDTB RESTORE DESTINATION BUFFER
STM DBUF
LDN 1 SET UDT USER NAME POINTER
STD T7
LDN 7
RJM CAN COMPARE USER NAMES
CFU5 LJM CFUX RETURN WITH STATUS
CFUA VFD 48/0L"ZFAM"
CLR SPACE 4,10
** CLR - CHECK LABELED REEL REQUIRED.
*
* EXIT TO CALLER IF TO ACCEPT UNLABELED REEL.
* TO *SEC* IF LABELED REEL REQUIRED.
CLR SUBR ENTRY/EXIT
LDD LT
SHN -11
LPN 3
LMN 2
NJN CLRX IF NOT ANSI LABELED TAPE REQUESTED
LDD UP
SHN 21-12
MJN CLR1 IF NOT INITIAL REEL CHECK
LDD LT
SHN 21-13
MJN CLRX IF *OPEN WRITE* TO BE PERFORMED BY *RESEX*
CLR1 LDN /MTX/NLB *NEEDS LABEL.*
LJM SEC SET ERROR CODE
HLC SPACE 4,10
** HLC - HEADER LABEL CHECK.
*
* ENTRY (MD, 0) = 1, IF REQUESTER IS NOT OWNER.
*
* CALLS CLA, CLR, CSC, GCH, HDR.
HLC SUBR ENTRY/EXIT
* CHECK FOR *HDR1* LABEL.
RJM CLA CHECK LABEL
NJN HLC1 IF NOT GOOD LABEL
LDM BUF
LMC 2RHD
NJN HLC1 IF NOT *HDR1* LABEL
LDM BUF+1
LMC 2RR1
ZJN HLC3 IF *HDR1* LABEL
HLC1 RJM CLR CHECK LABELED REEL REQUIRED
LJM HLC8 RETURN
* CHECK FILE ACCESS PERMISSIONS.
HLC3 RJM CSC CHECK SYSTEM CODE
STD T4
LDC UDTB RESET BUFFER
STM DBUF
LDD SP
SHN 21-10
PJN HLC7 IF NOT ENFORCING ACCESS RESTRICTIONS
LDD T4
NJN HLC7 IF NOT INTERNALLY WRITTEN TAPE
LDN 54D SET ACCESSIBILITY
STD T6
RJM GCH GET CHARACTER
STD T4
LMN 1R
ZJN HLC7 IF UNLIMITED ACCESS
LMN 1RA&1R
NJN HLC4 IF NOT RESTRICTED TO THIS USER
LDD MD
LPN 1
ZJN HLC7 IF REQUESTER IS OWNER OF THIS REEL
UJN HLC5 DISPLAY ERROR MESSAGE
HLC4 LDM UDTB+4 GET SPECIFIED FILE ACCESS
SHN -6
LMD T4
ZJN HLC7 IF MATCHING FILE ACCESS
HLC5 LDN /MTX/CAD *CAN-T ACCESS DATA.*
HLC6 LJM SEC SET ERROR CODE
* RETURN *HDR1* LABEL INFORMATION TO UDT.
HLC7 RJM HDR PROCESS HEADER LABEL
HLC8 LJM RET1 EXIT
SEC SPACE 4,10
** SEC - SET *RRJ* ERROR AND SUB-CODE.
*
* ENTRY (A) = *RRJ* ERROR SUB-CODE.
SEC BSS 0 ENTRY
STM ERSC SET ERROR SUB-CODE
LDK /MTX/RRJ
LJM RET3 RETURN *RRJ* ERROR
VLC SPACE 4,10
** VLC - VOLUME LABEL CHECK.
*
* EXIT (MD, 0) = 1, IF NOT MATCHING USER NAME AND EXIT
* TO NEXT SECTION.
*
* CALLS CAN, CCH, CFU, CLL, GCH, UAD, WUD.
VLC SUBR ENTRY/EXIT
* CHECK WRITE ENABLE ENFORCEMENT.
LDD SP
SHN 21-4
PJN VLC2 IF WRITE ACCESS NOT REQUIRED
LDD DS
SHN 21-7
MJN VLC2 IF TAPE WRITE ENABLED
LDN /MTX/WRD *WRITE DISABLED*
VLC1 LJM SEC SET ERROR CODE
* CHECK FOR *VOL1* LABEL.
VLC2 RJM CLL CHECK LABEL LENGTH
NJN VLC3 IF NOT CORRECT SIZE FOR ANSI LABEL
LDM BUF
LMC 2RVO
NJN VLC3 IF NOT *VOL1* LABEL
LDM BUF+1
LMC 2RL1
ZJN VLC8 IF *VOL1* LABEL
* PROCESS *VOL1* LABEL NOT FOUND.
VLC3 RJM CLR CHECK LABELED REEL REQUIRED
LDD EC
LMN /MTX/BTA
NJN VLC5 IF NOT BLANK TAPE
LDD UP SET BLANK TAPE FLAG
SCN 4
LMN 4
STD UP
VLC5 RJM WUD REWRITE UDT
LJM RET1 ACCEPT THIS REEL
* CHECK VSN.
VLC8 LDN 5 COMPARE VSNS
STD T6
LDN 11D
STD T7
LDN 6
RJM CAN COMPARE FIELDS
ZJN VLC10 IF VSN,S MATCH
RJM UAD
ADK /MTX/UESN
CRD CM
LDD CM+4
SHN 21-5
MJN VLC9 IF SCRATCH TAPE REQUESTED
LDN /MTX/WVS *WRONG VSN.*
LJM SEC SET ERROR CODE
VLC9 LDN 5 COPY VSN TO UDT
STD T6
LDN 11D
STD T7
LDN 6
RJM CCH COPY CHARACTERS
RJM WUD REWRITE UDT
* CHECK UNLABELED ACCESS TO LABELED TAPE.
VLC10 LDD LT
SHN -11
LPN 3
LMN 2
ZJN VLC11 IF ANSI LABELED REQUEST
LDN 11D CHECK VOLUME ACCESSIBILITY
STD T6
RJM GCH GET CHARACTER
LMN 1R
ZJN VLC11 IF UNLIMITED ACCESS
LDD SP
LPN 10
NJN VLC11 IF WRITE ACCESS DISABLED
LDD SP
SHN 21-10
PJN VLC13 IF NOT ENFORCING ACCESS RESTRICTIONS
LDN /MTX/CAD *CAN-T ACCESS DATA.*
LJM SEC SET ERROR CODE
* CHECK FAMILY AND USER NAME FOR FILE OWNERSHIP CHECK.
VLC11 RJM CFU CHECK FAMILY AND USER NANE
ZJN VLC12 IF MATCHING FAMILY/USER NAME
AOD MD SET NO USER NAME MATCH
VLC12 AOD PB INCREMENT TO NEXT SECTION
VLC13 LJM VLCX RETURN
OVLML EQU * END OF OVERLAY AREA
BUFC EQU /READ/LBUF
BUF EQU BUFC+5
ERROVL OVLML
PRS SPACE 4,10
PRSD BSS 0 FWA OF RELOCATED INITIAL LABEL ERROR CODE
LOC .LERA INITIAL LABEL HANDLER
LER SPACE 4,10
** LER - HANDLE LABEL ERRORS AT LOAD POINT AND ON INITIAL
* LABEL CHECKING DONE BY SCANNER.
*
* ENTRY (/READ/STAP) = PREVIOUS GENERAL STATUS.
* DS = CURRENT GENERAL STATUS.
*
* EXIT TO *CLA7* = FATAL LABEL ERROR.
* TO *RLA5* = REREAD LABEL PRU.
*
* CALLS BKS, FCN, WFC.
LER SUBR ENTRY/EXIT
LDM /READ/STAP LOAD PREVIOUS GENERAL STATUS
LPN 4
ZJN LER1 IF NOT AT LOAD POINT BEFORE READ
RJM CLL CHECK LABEL LENGTH
NJN LER2 IF NOT LABEL PRU
AOM LERA INCREMENT LABEL RETRY COUNTER
SBN 4
PJN LER2 IF THREE TRIES ON THIS PRU HAVE BEEN TRIED
LDN F0010 REWIND TO LOAD POINT
RJM FCN
LDD HP
SHN 21-7
PJN LER0 IF NOT CTS
RJM WNB WAIT NOT BUSY
UJN LER0.1 REREAD LABEL PRU
LER0 RJM WFC
LER0.1 LJM RLA5 REREAD LABEL PRU FROM LOAD POINT
LER1 AOM LERA INCREMENT LABEL PRU REREAD COUNT
SBN 4
PJN LER2 IF THREE TRIES ON THIS PRU HAVE BEEN DONE
RJM BKS BACKSPACE ONE PRU
LJM RLA5 REREAD LABEL PRU
LER2 LJM CLA7 FATAL INITIAL LABEL READ ERROR
LERA CON 0 LABEL RETRY COUNTER
WFC SPACE 4,10
** WFC - WAIT BACKSPACE FUNCTION COMPLETE.
* TIMES OUT APPROXIMATELY 25 FEET OF TAPE.
*
* EXIT (DS) = UNIT STATUS.
*
* USES T2.
*
* CALLS //STW.
WFC2 CON 0 ENTERED VIA *RJM* FROM //STW
SOD T2
NJN WFC1 IF NOT TIMEOUT
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFC1 ATTEMPT 1 MORE WAIT
WFC SUBR ENTRY/EXIT
LDC 2000 SET TIME OUT
STD T2
LDC WFC2 SET RETURN ON TIMEOUT IN //STW
STM //STWC
WFC1 LDN 2 WAIT NOT BUSY
RJM //STW
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFCX RETURN
SPACE 4,10
.LERB BSS 0 END OF INITIAL LABEL ERROR CODE
LOC *O
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS CTM, HNG, MCH.
PRS LDC PRSC MODIFY CHANNELS
RJM MCH
LDC /SRU/ITCL*100 SET SRU INCREMENT
STM //CECA
LDD HP
SHN 21-7
PJP PRS0 IF NOT CTS
LDC RLA6
STM /READ/RDFC+1
LDC LDNI+CRE/10000
STM CLAD LOAD CTS ERROR PROCESSOR
LDC UJNI-NJNI MODIFY INSTRUCTIONS FOR CTS
RAM CLAC
LDN 0
STM ETCA ALLOW PO=S ONLY
LDC BUF
STM /READ/RCTB
ISTORE RLAH,(UJN RLA9)
LDC LDNI+CLBL
STM RLAI 12-BIT WORD LENGTH OF LABEL
LDN CLBL+1
STM /READ/RCTA SET LENGTH TO READ + 1
ISTORE SKRA,(UJN SKR2) SKIP SAVING BLOCK ID
LDC /READ/RCT
STM PRSE
LJM PRS3.0 CONTINUE CODE MODIFICATION
PRS0 SHN 21-4-21+7
PJN PRS1 IF NOT ATS
LDC ZJNI+BTA2-BTAB MODIFY INSTRUCTIONS FOR ATS
STM BTAB
LCN 0
STM CLAB
LDC 177
STM BTAA
LDC ATUS
STM SDEA
LDC SHNI+74
STM SDEB
LDC SHNI+3
STM SDEC
PRS1 LDC 4425
STM //WEOA
LDC RLA6.1
STM /READ/RDFC+1
LDN LABL+1
STM /READ/MRDA LABEL LENGTH TO READ + 1
LDD PB
SHN -6
ZJN PRS2 IF INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
LMN /MTX/RLCR/100
NJN PRS3 IF NOT CHECK NEXT REEL
PRS2 LDC LJMI SET RETURN ON *NO EOP*
STM STWC-1
LDC /READ/MRD5
STM STWC
PRS3 LDC BUF
STM /READ/MRDB
PRS3.0 LDC LJMI
STM /READ/RDFC
LDC /READ/RDFC
STM /READ/MRD
PRSE EQU *-1
* STM /READ/RCT (CTS)
LDD PB
SHN -6
NJN PRS3.2 IF NOT INITIAL LABEL CHECK
ERRNZ /MTX/RLCL
STD T2
LDC .LERB-.LERA
STD T1
PRS3.1 LDM PRSD,T2 MOVE CODE FOR INITIAL LABEL CHECK ERROR
STM EOFX,T2
AOD T2
SBD T1
MJN PRS3.1 IF NOT ALL CODE MOVED
LDC LDNI ENABLE INITIAL LABEL
STM RLAF
UJN PRS4 CONTINUE NORMAL PROCESSING
PRS3.2 LDC UJNI+2 DISABLE INITIAL LABEL ERROR RECOVERY
STM CLAA
LDD EP
LPN 77
ZJN PRS4 IF NOT RELOAD ERROR PROCESSOR
LDC CLA4 SET TO RELOAD ERROR PROCESSOR
STM /READ/RDFC+1
PRS4 LDM FETO
SHN 21-5
PJN PRS7 IF NO EXTENDED LABELS
LDD PB
SHN -6
LMN /MTX/RLOF/100
ZJN PRS6 IF OPEN
LMN /MTX/RLOF/100&/MTX/RLCF/100
NJN PRS7 IF NOT CLOSE
LDD DS
LPN 4
ZJN PRS6 IF NOT POSITIONED AT LOAD POINT
LDC PRS5 SET TO RETURN HERE
STM //LOV
LJM PRSX COMPLETE OVERLAY LOAD
PRS5 LDN /MTX/BEI SET TO NOT SKIP TAPE MARKS
LJM RET3 RETURN ERROR CODE
PRS6 STM WELA ENABLE EXTENDED LABELS
PRS7 LDD LT SET LABEL TYPE INDEX
LPC 1000
ZJN PRS7.1 IF NOT NON-STANDARD LABELS
LDN 3
PRS7.1 STD T1 SET TABLE INDEX
SBN LTYPL
MJN PRS11 IF LEGAL LABEL TYPE
PRS8 LDC PRS10 SET TO RETURN AFTER COMPLETION OF LOAD
PRS9 STM LOV
LJM PRSX RETURN
PRS10 LDN /MTX/LIT INCORRECT LABEL TYPE
LJM RET3 RETURN ERROR CODE
PRS11 LDM LTYP,T1 SET ADDRESS OF LABEL OPERATION TABLE
ZJN PRS8 IF INCORRECT LABEL TYPE
STD T3
LDD PB CHECK IF LEGAL OPERATION
SHN -6
STM RLAA
SHN 1
SBM LTYP+2,T1
MJN PRS13 IF DEFINED OPERATION
LDC PRS12 SET TO RETURN AFTER COMPLETION OF LOAD
UJN PRS9 RETURN
PRS12 RJM HNG HANG PP
PRS13 LDD PB
SHN 1-6
RAD T3
LDI T3 SET CURRENT OPERATION TABLE
STM PRSA
AOD T3
LDI T3 SET LENGTH OF TABLE
LPN 77
STD T2
LMC -0
STM RLAB
LDI T3
LPC 4000 DO NOT READ BEFORE FIRST OPERATION FLAG
STM RLAD
LDN 0 MOVE TABLE
STD T3
PRS14 LDM *,T3
PRSA EQU *-1
STM TABC,T3
AOD T3
SBD T2
MJN PRS14 IF NOT COMPLETE
LDD PB
LPN 77
ZJN PRS15 IF FIRST TIME
LDN 0 CLEAR *FIRST OPERATION DO NOT READ* FLAG
STM RLAD
PRS15 LDM LOV CHECK WHERE CALLED FROM
ADC -//OVL
MJN PRS16 IF NOT CALLED FROM READ ERROR RETURN
LDC 4000 SET *SKIP READ* FLAG AND FORCE EXECUTION
STM RLAC OF *WEL*
LDC RLA SET TO ENTER READ LABELS
STM //LOV
LDC //LOV
STM PRSB
PRS16 LDD PB
SHN -6
LMN /MTX/RLOF/100
ZJN PRS16.3 IF OPEN
LMN 6&4
NJN PRS17 IF NOT CLOSE
PRS16.3 LDD PB
LPN 77
ZJN PRS17 IF PROCESSING FIRST SECTION
SOD PB DECREMENT SECTION NUMBER - WILL BE
* INCREMENTED BY ROUTINE *CHC*
LDC RLA11 INSURE CONTROL POINT CHANGE TAKES PLACE
STM BT
* STM //LOV (READ ERROR RETURN)
PRSB EQU *-1
PRS17 LJM PRSX RETURN
PRSC CHTB CHANNEL TABLE
TITLE PROCESSING TABLES.
SPACE 4,10
** TABLE OF LABEL TYPES AND SIZES.
*T, 12/ TYPE,12/ SIZE,12/ LENGTH
* TYPE ADDRESS OF LABEL OPERATION TABLE.
* SIZE SIZE OF LABEL BLOCK IN BYTES.
* LENGTH LENGTH OF LABEL OPERATION TABLE.
LTYP BSS 0
LOC 0
CON ANS,LABL,ANSL ANSI LABELS
CON NST,LABL,NSTL (NON - STANDARD LABELS)
LOC *O
LTYPL EQU *-LTYP
TITLE ANSI LABEL PROCESSORS.
SPACE 4,10
** TABLES OF LABEL OPERATIONS.
*T, 12/ ADDRESS,1/R,5/,6/SEC
* R DON,T READ PRIOR TO FIRST OPERATION.
* SEC NUMBER OF SECTIONS.
ANS INDEX ANSI LABELS OPERATION TABLE
INDEX /MTX/RLCL/40,(CIL,CILL) CHECK IF LABELED
INDEX /MTX/RLCE/40,(CET,CETL+4000) CHECK END OF TAPE
INDEX /MTX/RLSL/40,(SKL,SKLL) SKIP OVER LABELS
INDEX /MTX/RLSM/40,(SKT,SKTL) SKIP TAPE MARKS
INDEX /MTX/RLOF/40,(OPL,OPLL+4000) OPEN FILE
INDEX /MTX/RLCR/40,(RCE,RCEL) CHECK NEXT REEL
INDEX /MTX/RLCF/40,(CLF,CLFL+4000) CLOSE FILE
INDEX /MTX/RLCM/40,(CFL,CFLL+4000) CHECK MULTI FILE LABELS
INDEX /MTX/RLVH/40,(CVH,CVHL) VALIDATE HEADER LABEL
INDEX /MTX/RLMX/40 TERMINATE TABLE
ANSL EQU *-ANS LENGTH OF TABLE
NST INDEX NON-STANDARD LABELS OPERATION TABLE
INDEX /MTX/RLCE/40,(CET,CETL+4000) CHECK END OF TAPE
INDEX /MTX/RLSL/40,(PNL,PNLL) SKIP OVER LABELS
INDEX /MTX/RLSM/40,(SKT,SKTL) SKIP TAPE MARKS
INDEX /MTX/RLOF/40,(OPL,OPLL+4000) OPEN FILE
INDEX /MTX/RLCR/40,(RCE,RCEL) CHECK NEXT REEL
INDEX /MTX/RLCF/40,(CLF,CLFL+4000) CLOSE FILE
INDEX /MTX/RLCF/40+2 TERMINATE TABLE
NSTL EQU *-NST LENGTH OF TABLE
SPACE 4,10
** TABLE OF ANSI LABEL SEQUENCES.
CIL BSS 0
LOC 0
CON BTA BLANK TAPE CHECK
CON VOL VOL1
CON UVL UVLA
CON HDR HDR1
CON OHD HDR2 - HDR9
CON UHL UHLA
CON TMS TAPE MARK SENSE
LOC *O
CILL EQU *-CIL
CET BSS 0
LOC 0
CON ETC
CON EOF EOF1
CON EOV EOV1
CON EVO EOV2
LOC *O
CETL EQU *-CET
CFL BSS 0
LOC 0
CON ETC END OF TAPE CHECK
CON EOF CHECK *EOF1*
CON EFO CHECK EOF2 -EOF9
CON UTL UTLA
CON /MFP/TMC CHECK TAPE MARK
CON /MFP/TMC CHECK TAPE MARK
CON HDR CHECK *HDR1*
CON OHD HDR2 - HDR9
CON UHL UHLA
CON TMS TAPE MARK SENSE
CON EOV CHECK *EOV1*
CON EVO CHECK *EOV2*
LOC *O
CFLL EQU *-CFL
CVH BSS 0
LOC 0
CON VOL CHECK *VOL1*
CON UVL USER VOLUME LABELS
CON EOF CHECK *EOF1*
CON EFO CHECK EOF2 - EOF9
CON UTL UTLA
CON STM SKIP TAPE MARK
CON HDR CHECK *HDR1*
CON OHD HDR2 - HDR9
CON UHL UHLA
CON TMS TAPE MARK SENSE
LOC *O
CVHL EQU *-CVH
CLF BSS 0
LOC 0
CON CHC CHANGE CONTROL POINTS
CON ZRO ZERO FIRST WORD OF XL BUFFER
CON STM SKIP TAPE MARK
CON EOF EOF1
CON EFO EOF2 - EOF9
CON UTL UTLA
CON EOV EOV1
CON EVO EOV2
CON UTL UTLA
LOC *O
CLFL EQU *-CLF
OPL BSS 0
LOC 0
CON CHC CHANGE CONTROL POINTS
CON VOL VOL1
CON UVL UVLA
CON HDR HDR1
CON OHD HDR2 - HDR9
CON UHL UHLA
CON TMS TAPE MARK SENSE
LOC *O
OPLL EQU *-OPL
RCE BSS 0
LOC 0
CON BTA BLANK TAPE CHECK
CON VLC VOL1 CHECK
CON UVL SKIP OPTIONAL LABELS
CON HLC HDR1 CHECK
LOC *O
RCEL EQU *-RCE
SKL BSS 0
LOC 0
CON VOL VOL1
CON UVL UVLA
CON HDR HDR1
CON OHD HDR2 - HDR9
CON UHL UHLA
CON TMS TAPE MARK SENSE
LOC *O
SKLL EQU *-SKL
SKT BSS 0
LOC 0
CON PTM READ TO TAPE MARK
LOC *O
SKTL EQU *-SKT
SPACE 4,10
** TABLE OF NON-STANDARD LABEL SEQUENCES.
PNL BSS 0
LOC 0
CON SBL
CON TMS
LOC *O
PNLL EQU *-PNL
MTL MAX CILL,CETL,CFLL,CVHL,CLFL,OPLL,RCEL,SKLL,SKTL,PNLL
ERRNZ MTL-TABCL BUFFER NOT LONG ENOUGH FOR LARGEST TABLE
OVERLAY (CODE CONVERT LABEL READ.),(ERLB+5),P
CCL SPACE 4,15
** CCL - CODE CONVERT LABEL READ FOR CTS.
*
* THIS ROUTINE CONVERTS 8-BIT CHARACTERS READ FROM A
* CTS LABEL TO 6-BIT DISPLAY CODE CHARACTERS.
*
* ENTRY /READ/RCTB = STARTING ADDRESS OF DATA TO CONVERT.
* (CF) = 63/64 CHARACTER SET FLAG.
* (MD) = DRIVER MODE.
* (DNCV) = CONVERSION MODE.
*
* USES T1, T2, T3, T6.
*
* CALLS EXC.
ENTRY CCL
CCL SUBR ENTRY/EXIT
LDD CF
LPN 1
NJN CCL1 IF 64 CHARACTER SET
LCN 63-1R MODIFY TABLES FOR 63 CHARACTER SET
RAM ANSI+ANSIA
STM ANSI+ANSIC
LDC 63*100
RAM ANSI+ANSIB
STM ANSI+ANSID
LCN 63-1R
RAM EBCI+EBCIA
LDN 63-55
RAM EBCI+EBCIB
LDC 1R *100-63*100
RAM EBCI+EBCIC
LDC 63*100-0
RAM EBCI+EBCID
CCL1 LDD MD
SHN 21-6
PJN CCL2 IF NOT CODED
LDM DNCV
LPN 7
LMN /MTX/ANS
ZJN CCL2 IF ASCII CONVERSION MODE
LDC UJNI-PJNI
RAM EXCA CODE MODIFICATION FOR EBCDIC
LDC EBCI
STM EXCB
STM EXCC
CCL2 LDM /READ/RCTB
STD T1 POINTER TO CHARACTER TO CONVERT
LDN 0
STD T2 POINTER TO STORE CONVERTED CHARACTER
STD T3 1 OF 3 POSITIONS OF 8-BIT BYTE
CCL3 RJM EXC EXTRACT CHARACTER
* STORE CONVERTED CHARACTER.
LDD T2
SHN 21-0
ADM /READ/RCTB
STD T6 ADDRESS TO STORE CONVERTED CHARACTER
PJN CCL4 IF UPPER CHARACTER
LDD T7
RAI T6
UJN CCL5 CHECK IF MORE CHARACTERS TO CONVERT
CCL4 LDD T7
SHN 6
STI T6
CCL5 AOD T2
LMC 80D
NJN CCL3 IF MORE CHARACTERS TO CONVERT
UJP CCLX RETURN
EXC SPACE 4,15
** EXC - EXTRACT CHARACTER.
*
* THIS ROUTINE TAKES ONE OF THE 80 CHARACTERS OF THE LABEL
* THAT WAS READ AND CONVERTS IT TO DISPLAY CODE.
*
* ENTRY (T1) = POINTER TO CHARACTER TO CONVERT.
* (T3) = 0 UPPER 8 OF 24.
* 1 MIDDLE 8 OF 24.
* 2 LOWER 8 OF 24.
*
* EXIT (T5) = (BUF,T1) IF (T3) = 0.
* (T7) = CONVERTED CHARACTER.
*
* USES T4, T5
EXC SUBR ENTRY/EXIT
LDD T3
NJN EXC1 IF NOT UPPER 8 OF 24
LDI T1
STD T5
SHN -4
UJN EXC3 MASK 8-BIT CHARACTER
EXC1 SBN 1
NJN EXC2 IF NOT BYTE 2 OF 3
LDD T5
LPN 17
SHN 4
STD T5
LDM 1,T1
SHN -10
ADD T5
UJN EXC3 MASK 8-BIT CHARACTER
EXC2 LDM 1,T1
EXC3 SHN 21-7
PJN EXC4 IF LEGAL CHARACTER (ANSI)
EXCA EQU *-1
* UJN EXC4 (EBCDIC)
LDN 0
EXC4 SHN 7-21 MASK 8 BITS
SHN 21-0
STD T4
PJN EXC5 IF LEFT HALF OF CONVERSION TABLE WORD
LDM ANSI,T4
EXCB EQU *-1
* LDM EBCI,T4 (EBCDIC)
LPN 77
UJN EXC6 SAVE DISPLAY CODE VALUE
EXC5 LDM ANSI,T4
EXCC EQU *-1
* LDM EBCI,T4 (EBCDIC)
SHN -6
EXC6 STD T7 SAVE DISPLAY CODE VALUE
AOD T3
SBN 3
NJN EXC7 IF NOT BYTE 3 OF 3
STD T3
LDN 2
RAD T1
EXC7 LJM EXCX RETURN
ANSI SPACE 4,10
** ANSI - TABLE FOR *ASCII* TO DISPLAY CODE CONVERSION.
* THE ASCII CHARACTER DIVIDED BY 2 IS THE INDEX INTO THIS
* TABLE. ONLY THE FIRST 128 CHARACTERS ARE IN THE TABLE.
* THE PROGRAM USING THE TABLE WILL SUBSTITUTE 00 FOR THE
* HEX VALUES OF 80-FF.
ANSI BSS 0
LOC 0
VFD 6/1R 00 NUL NULL
VFD 6/1R] 01 SOH START OF HEADING
VFD 6/64 02 STX START OF TEXT
VFD 6/1R# 03 ETX END OF TEXT
VFD 6/1R$ 04 EOT END OF TRANSMISSION
VFD 6/63 05 ENQ ENQUIRY (64 CHARACTER SET)
ANSIA EQU *-1 (63 CHARACTER SET)
* VFD 6/1R 05 ENQ ENQUIRY (63 CHARACTER SET)
VFD 6/1R& 06 ACK ACKNOWLEDGE
VFD 6/1R' 07 BEL BELL
VFD 6/51 08 BS BACKSPACE
VFD 6/1R) 09 HT HORIZONTAL TAB
VFD 6/1R* 0A LF LINE FEED
VFD 6/1R+ 0B VT VERTICAL TAB
VFD 6/1R, 0C FF FORM FEED
VFD 6/1R- 0D CR CARRIAGE RETURN
VFD 6/1R. 0E SO SHIFT OUT
VFD 6/1R/ 0F SI SHIFT IN
VFD 6/1R0 10 DLE DATA LINK ESCAPE
VFD 6/1R1 11 DC1 DEVICE CONTROL 1 (X-ON)
VFD 6/1R2 12 DC2 DEVICE CONTROL 2
VFD 6/1R3 13 DC3 DEVICE CONTROL 3 (X-OFF)
VFD 6/1R4 14 DC4 DEVICE CONTROL 4 (STOP)
VFD 6/1R5 15 NAK NEGATIVE ACKNOWLEDGE
VFD 6/1R6 16 SYN SYNCHRONOUS IDLE
VFD 6/1R7 17 ETB END OF TRANSMISSION BLOCK
VFD 6/1R8 18 CAN CANCEL
VFD 6/1R9 19 EM END OF MEDIUM
VFD 6/00 1A SUB SUBSTITUTE (64 CHARACTERS)
ANSIB EQU * (63 CHARACTER SET)
* VFD 6/63 1A SUB SUBSTITUTE (63 CHARACTERS)
VFD 6/1R; 1B ESC ESCAPE (DRIVER)
VFD 6/1R[ 1C FS FILE SEPARATOR
VFD 6/1R= 1D GS GROUP SEPARATOR
VFD 6/1R> 1E RS RECORD SEPARATOR
VFD 6/1R? 1F US UNIT SEPARATOR
VFD 6/1R 20 SPACE
VFD 6/1R! 21 EXCLAMATION POINT
VFD 6/64 22 QUOTATION MARKS
VFD 6/1R# 23 NUMBER SIGN
VFD 6/1R$ 24 $ DOLLAR SIGN
VFD 6/63 25 PERCENT (64 CHARACTER SET)
ANSIC EQU *-1 (63 CHARACTER SET)
* VFD 6/1R 25 PERCENT (63 CHARACTER SET)
VFD 6/1R& 26 AMPERSAND
VFD 6/1R' 27 APOSTROPHE
VFD 6/51 28 ( OPENING PARENTHESIS
VFD 6/1R) 29 ) CLOSING PARENTHESIS
VFD 6/1R* 2A * ASTERISK
VFD 6/1R+ 2B + PLUS
VFD 6/1R, 2C , COMMA
VFD 6/1R- 2D - HYPHEN (MINUS)
VFD 6/1R. 2E . PERIOD
VFD 6/1R/ 2F / SLANT
VFD 6/1R0 30 0
VFD 6/1R1 31 1
VFD 6/1R2 32 2
VFD 6/1R3 33 3
VFD 6/1R4 34 4
VFD 6/1R5 35 5
VFD 6/1R6 36 6
VFD 6/1R7 37 7
VFD 6/1R8 38 8
VFD 6/1R9 39 9
VFD 6/00 3A COLON (64 CHARACTER SET)
ANSID EQU * (63 CHARACTER SET)
* VFD 6/63 3A COLON (63 CHARACTER SET)
VFD 6/1R; 3B SEMICOLON
VFD 6/1R< 3C LESS THAN
VFD 6/1R= 3D EQUALS
VFD 6/1R> 3E GREATER THAN
VFD 6/1R? 3F QUESTION MARK
VFD 6/1R@ 40 COMMERCIAL AT
VFD 6/1RA 41 A
VFD 6/1RB 42 B
VFD 6/1RC 43 C
VFD 6/1RD 44 D
VFD 6/1RE 45 E
VFD 6/1RF 46 F
VFD 6/1RG 47 G
VFD 6/1RH 48 H
VFD 6/1RI 49 I
VFD 6/1RJ 4A J
VFD 6/1RK 4B K
VFD 6/1RL 4C L
VFD 6/1RM 4D M
VFD 6/1RN 4E N
VFD 6/1RO 4F 0
VFD 6/1RP 50 P
VFD 6/1RQ 51 Q
VFD 6/1RR 52 R
VFD 6/1RS 53 S
VFD 6/1RT 54 T
VFD 6/1RU 55 U
VFD 6/1RV 56 V
VFD 6/1RW 57 W
VFD 6/1RX 58 X
VFD 6/1RY 59 Y
VFD 6/1RZ 5A Z
VFD 6/1R[ 5B OPENING BRACKET
VFD 6/1R\ 5C REVERSE SLANT
VFD 6/1R] 5D CLOSING BRACKET
VFD 6/1R^ 5E CIRCUMFLEX
VFD 6/65 5F UNDERLINE
VFD 6/1R@ 60 GRAVE ACCENT
VFD 6/1RA 61 A LC
VFD 6/1RB 62 B LC
VFD 6/1RC 63 C LC
VFD 6/1RD 64 D LC
VFD 6/1RE 65 E LC
VFD 6/1RF 66 F LC
VFD 6/1RG 67 G LC
VFD 6/1RH 68 H LC
VFD 6/1RI 69 I LC
VFD 6/1RJ 6A J LC
VFD 6/1RK 6B K LC
VFD 6/1RL 6C L LC
VFD 6/1RM 6D M LC
VFD 6/1RN 6E N LC
VFD 6/1RO 6F O LC
VFD 6/1RP 70 P LC
VFD 6/1RQ 71 Q LC
VFD 6/1RR 72 R LC
VFD 6/1RS 73 S LC
VFD 6/1RT 74 T LC
VFD 6/1RU 75 U LC
VFD 6/1RV 76 V LC
VFD 6/1RW 77 W LC
VFD 6/1RX 78 X LC
VFD 6/1RY 79 Y LC
VFD 6/1RZ 7A Z LC
VFD 6/1R< 7B OPENING BRACE
VFD 6/1R\ 7C VERTICAL LINE
VFD 6/1R! 7D CLOSING BRACE
VFD 6/1R^ 7E OVERLINE (TILDE)
VFD 6/65 7F DEL DELETE
LOC *O
EBCI SPACE 4
** EBCI - TABLE FOR EBCDIC TO DISPLAY CODE CONVERSION.
* THE ASCII CHARACTER DIVIDED BY 2 IS THE INDEX INTO THIS
* TABLE.
EBCI BSS 0
LOC 0
VFD 6/1R 00 NUL NULL
VFD 6/1R] 01 SOH START OF HEADING
VFD 6/64 02 STX START OF TEXT
VFD 6/1R# 03 ETX END OF TEXT
VFD 6/1R 04
VFD 6/1R) 05 HT HORIZONTAL TAB
VFD 6/1R 06
VFD 6/65 07 DEL DELETE
VFD 6/1R 08
VFD 6/1R 09
VFD 6/1R 0A
VFD 6/1R+ 0B VT VERTICAL TAB
VFD 6/1R, 0C FF FORM FEED
VFD 6/1R- 0D CR CARRIAGE RETURN
VFD 6/1R. 0E SO SHIFT OUT
VFD 6/1R/ 0F SI SHIFT IN
VFD 6/1R0 10 DLE DATA LINK ESCAPE
VFD 6/1R1 11 DC1 DEVICE CONTROL 1 (X-ON)
VFD 6/1R2 12 DC2 DEVICE CONTROL 2
VFD 6/1R3 13 DC3 DEVICE CONTROL 3 (X-OFF)
VFD 6/1R 14
VFD 6/1R 15
VFD 6/51 16 BS BACKSPACE
VFD 6/1R 17
VFD 6/1R8 18 CAN CANCEL
VFD 6/1R9 19 EM END OF MEDIMUM
VFD 6/1R 1A
VFD 6/1R 1B
VFD 6/1R[ 1C FS FILE SEPERATOR
VFD 6/1R= 1D GS GROUP SEPERATOR
VFD 6/1R> 1E RS RECORD SEPERATOR
VFD 6/1R? 1F US UNIT SEPERATOR
VFD 6/1R 20
VFD 6/1R 21
VFD 6/1R 22
VFD 6/1R 23
VFD 6/1R 24
VFD 6/1R* 25 LF LINE FEED
VFD 6/1R7 26 ETB END OF TRANSMISSION BLOCK
VFD 6/1R; 27 ESC ESCAPE
VFD 6/1R 28
VFD 6/1R 29
VFD 6/1R 2A
VFD 6/1R 2B
VFD 6/1R 2C
VFD 6/63 2D ENQ ENQUIRY (64 CHARACTER SET)
EBCIA EQU *-1 (63 CHARACTER SET)
* VFD 6/1R 2D ENQ ENQUIRY (63 CHARACTER SET)
VFD 6/1R& 2E ACK ACKNOWLEDGE
VFD 6/1R' 2F BEL BELL
VFD 6/1R 30
VFD 6/1R 31
VFD 6/1R6 32 SYN SYNCHROUS IDLE
VFD 6/1R 33
VFD 6/1R 34
VFD 6/1R 35
VFD 6/1R 36
VFD 6/1R$ 37 EOT END OF TRANSMISSION
VFD 6/1R 38
VFD 6/1R 39
VFD 6/1R 3A
VFD 6/1R 3B
VFD 6/1R4 3C DC4 DEVICE CONTROL 4
VFD 6/1R5 3D NAK NEGATIVE ACKNOWLEDGE
VFD 6/1R 3E
VFD 6/00 3F SUB SUBSTITUTE (64 CHARACTER SET
EBCIB EQU *-1 (63 CHARACTER SET)
* VFD 6/63 3F SUB SUBSTITUTE (63 CHARACTER SET
VFD 6/1R 40 SPACE
VFD 6/1R 41
VFD 6/1R 42
VFD 6/1R 43
VFD 6/1R 44
VFD 6/1R 45
VFD 6/1R 46
VFD 6/1R 47
VFD 6/1R 48
VFD 6/1R 49
VFD 6/1R[ 4A OPENING BRACKET
VFD 6/1R. 4B . PERIOD
VFD 6/1R< 4C LESS THAN
VFD 6/51 4D OPENING PARENTHESIS
VFD 6/1R+ 4E + PLUS
VFD 6/1R! 4F LOGICAL OR
VFD 6/1R& 50 AMPERSAND
VFD 6/1R 51
VFD 6/1R 52
VFD 6/1R 53
VFD 6/1R 54
VFD 6/1R 55
VFD 6/1R 56
VFD 6/1R 57
VFD 6/1R 58
VFD 6/1R 59
VFD 6/1R] 5A CLOSING BRACKET
VFD 6/1R$ 5B $ DOLLAR SIGN
VFD 6/1R* 5C * ASTERISK
VFD 6/1R) 5D ) CLOSING PARENTHESIS
VFD 6/1R; 5E SEMICOLON
VFD 6/1R^ 5F NOT LOGICAL NOT
VFD 6/1R- 60 - HYPHEN (MINUS)
VFD 6/1R/ 61 / SLANT
VFD 6/1R 62
VFD 6/1R 63
VFD 6/1R 64
VFD 6/1R 65
VFD 6/1R 66
VFD 6/1R 67
VFD 6/1R 68
VFD 6/1R 69
VFD 6/1R\ 6A VERTICAL LINE
VFD 6/1R, 6B , COMMA
VFD 6/63 6C PERCENT (64 CHARACTER SET)
EBCIC EQU * (63 CHARACTER SET)
* VFD 6/1R 6C PERCENT (63 CHARACTER SET)
VFD 6/65 6D UNDERSCORE
VFD 6/1R> 6E GREATER THAN
VFD 6/1R? 6F QUESTION MARK
VFD 6/1R 70
VFD 6/1R 71
VFD 6/1R 72
VFD 6/1R 73
VFD 6/1R 74
VFD 6/1R 75
VFD 6/1R 76
VFD 6/1R 77
VFD 6/1R 78
VFD 6/1R@ 79 GRAVE ACCENT
VFD 6/00 7A COLON (64 CHARACTER SET)
EBCID EQU * (63 CHARACTER SET)
* VFD 6/63 7A COLON (63 CHARACTER SET)
VFD 6/1R# 7B NUMBER SIGN
VFD 6/1R@ 7C COMMERCIAL AT
VFD 6/1R' 7D APOSTROPHE
VFD 6/1R= 7E = EQUALS
VFD 6/64 7F QUOTATION MARKS
VFD 6/1R 80
VFD 6/1RA 81 A LC
VFD 6/1RB 82 B LC
VFD 6/1RC 83 C LC
VFD 6/1RD 84 D LC
VFD 6/1RE 85 E LC
VFD 6/1RF 86 F LC
VFD 6/1RG 87 G LC
VFD 6/1RH 88 H LC
VFD 6/1RI 89 I LC
VFD 6/1R 8A
VFD 6/1R 8B
VFD 6/1R 8C
VFD 6/1R 8D
VFD 6/1R 8E
VFD 6/1R 8F
VFD 6/1R 90
VFD 6/1RJ 91 J LC
VFD 6/1RK 92 K LC
VFD 6/1RL 93 L LC
VFD 6/1RM 94 M LC
VFD 6/1RN 95 N LC
VFD 6/1RO 96 O LC
VFD 6/1RP 97 P LC
VFD 6/1RQ 98 Q LC
VFD 6/1RR 99 R LC
VFD 6/1R 9A
VFD 6/1R 9B
VFD 6/1R 9C
VFD 6/1R 9D
VFD 6/1R 9E
VFD 6/1R 9F
VFD 6/1R A0
VFD 6/1R^ A1 OVERLINE (TILDE)
VFD 6/1RS A2 S LC
VFD 6/1RT A3 T LC
VFD 6/1RU A4 U LC
VFD 6/1RV A5 V LC
VFD 6/1RW A6 W LC
VFD 6/1RX A7 X LC
VFD 6/1RY A8 Y LC
VFD 6/1RZ A9 Z LC
VFD 6/1R AA
VFD 6/1R AB
VFD 6/1R AC
VFD 6/1R AD
VFD 6/1R AE
VFD 6/1R AF
VFD 6/1R B0
VFD 6/1R B1
VFD 6/1R B2
VFD 6/1R B3
VFD 6/1R B4
VFD 6/1R B5
VFD 6/1R B6
VFD 6/1R B7
VFD 6/1R B8
VFD 6/1R B9
VFD 6/1R BA
VFD 6/1R BB
VFD 6/1R BC
VFD 6/1R BD
VFD 6/1R BE
VFD 6/1R BF
VFD 6/1R< C0 OPENING BRACE
VFD 6/1RA C1 A
VFD 6/1RB C2 B
VFD 6/1RC C3 C
VFD 6/1RD C4 D
VFD 6/1RE C5 E
VFD 6/1RF C6 F
VFD 6/1RG C7 G
VFD 6/1RH C8 H
VFD 6/1RI C9 I
VFD 6/1R CA
VFD 6/1R CB
VFD 6/1R CC
VFD 6/1R CD
VFD 6/1R CE
VFD 6/1R CF
VFD 6/1R! D0 CLOSING BRACE
VFD 6/1RJ D1 J
VFD 6/1RK D2 K
VFD 6/1RL D3 L
VFD 6/1RM D4 M
VFD 6/1RN D5 N
VFD 6/1RO D6 O
VFD 6/1RP D7 P
VFD 6/1RQ D8 Q
VFD 6/1RR D9 R
VFD 6/1R DA
VFD 6/1R DB
VFD 6/1R DC
VFD 6/1R DD
VFD 6/1R DE
VFD 6/1R DF
VFD 6/1R\ E0 REVERSE SLANT
VFD 6/1R E1
VFD 6/1RS E2 S
VFD 6/1RT E3 T
VFD 6/1RU E4 U
VFD 6/1RV E5 V
VFD 6/1RW E6 W
VFD 6/1RX E7 X
VFD 6/1RY E8 Y
VFD 6/1RZ E9 Z
VFD 6/1R EA
VFD 6/1R EB
VFD 6/1R EC
VFD 6/1R ED
VFD 6/1R EE
VFD 6/1R EF
VFD 6/1R0 F0 0
VFD 6/1R1 F1 1
VFD 6/1R2 F2 2
VFD 6/1R3 F3 3
VFD 6/1R4 F4 4
VFD 6/1R5 F5 5
VFD 6/1R6 F6 6
VFD 6/1R7 F7 7
VFD 6/1R8 F8 8
VFD 6/1R9 F9 9
VFD 6/1R FA
VFD 6/1R FB
VFD 6/1R FC
VFD 6/1R FD
VFD 6/1R FE
VFD 6/1R FF
LOC *O
ERRNG 473+ERLB+5-* IF CODE LONGER THAN ONE PRU
OVERLAY (MULTI-FILE AUXILIARY PROCESSOR.),(/RLA/OVLM),,MFP
SPACE 4,10
** THIS OVERLAY CONTAINS ROUTINES WHICH ARE USED FOR
* MULTI-FILE OPERATIONS. IT OVERLAYS PART OF THE
* READ LABELS OVERLAY AND IS USED IN CONJUCTION WITH
* READ LABELS WHEN MULTI-FILE TAPES ARE BEING PROCESSED.
SPACE 4,10
* ASSEMBLY CONSTANTS
BUF EQU /RLA/BUF
DBUF EQU /RLA/DBUF
IBUF EQU /RLA/IBUF
UDTB EQU /RLA/UDTB
CAN EQU /RLA/CAN
CHC EQU /RLA/CHC
CLA EQU /RLA/CLA
C2D EQU /RLA/C2D
DCV EQU /RLA/DCV
ELA EQU /RLA/ELA
FAD EQU /RLA/FAD
FCH EQU /RLA/FCH
RBE EQU /RLA/RBE
RLAX EQU /RLA/RLAX
THL EQU /RLA/THL
WUD EQU /RLA/WUD
ENTRY MFP
PHD SPACE 4,10
** PHD - PROCESS HEADER.
*
* ENTRY (A) = 0 IF CHECK MULTI-FILE LABELS (*RLCM*) OPERATION.
* (A) = 1 IF VALIDATE HEADER LABEL (*RLVH*) OPERATION.
*
* CALLS CAN, FCH, THL, WUD.
PHD SUBR ENTRY/EXIT
STD T6 SAVE ENTRY
LDC BUF SET UP BUFFER ADDRESSES
STM IBUF
LDD T6
ZJN PHD1 IF CHECK MULTI-FILE LABELS
ERRNZ /MTX/RLCM-700
LDM CIOE CHECK IF POSMF
LPC 1774
LMC 110
NJN PHD3 IF NOT POSMF
PHD1 LDC UDTB
STM DBUF
RJM THL TRANSFER HEADER LABEL
RJM WUD WRITE UDT
PHD2 UJN PHDX RETURN
PHD3 LDC PHDA COMPARE LABEL TO UDT
STM DBUF
LDN 21D ZERO OUT BUFFER
STD T7
LDN 50D
RJM FCH COPY CHARACTERS
RJM THL TRANSFER HEADER LABEL
LDN 21D
STD T6
STD T7
LDC UDTB SET INPUT BUFFER
STM IBUF
LDN 30D
RJM CAN COMPARE FIELDS
NJN PHD4 IF NO COMPARE
LDN 56D
STD T6
STD T7
LDN 15D
RJM CAN COMPARE LABEL FIELDS
NJN PHD4 IF NO COMPARE
LDC BUF RESET INPUT BUFFER ADDRESS
STM IBUF
LJM PHDX RETURN
PHD4 LJM RBE RETURN *BEI* ERROR
REL SPACE 4,10
** REL - READ EXTENDED LABELS.
*
* CALLS ELA.
REL5 LDD CM SET SEQUENCE NUMBER
SHN 14
ADD CM+1
ADN 4
CRM TMCB,ON
LDM TMCB+2
SCN 77
SHN 6
LMM TMCB+1
SHN 6
STM TMCB+4
SHN 6
STM TMCB+3
REL SUBR ENTRY/EXIT
LDN 0
STD T6
STD T7
REL1 RJM ELA GET EXTENDED LABEL ADDRESS
ZJN RELX IF NO EXTENDED LABEL BUFFER
CRD CM
STD CM+1
SHN -14
STD CM
LDD CM+4
ZJN REL3 IF END OF BUFFER
LMC 80D
NJN REL4 IF NOT CORRECT LENGTH
LDD CM
SHN 14
ADD CM+1
ADN 1
CRM TMCB,ON
LDM TMCB
LMC 2RHD
NJN REL2 IF NOT *HD*
LDM TMCB+1
LMC 2RR1
NJN REL2 IF NOT *HDR1*
LJM REL5 SET SEQUENCE NUMBER
REL2 LDN 11
RAD T7
SHN -14
RAD T6
LJM REL1 LOOP FOR NEXT LABEL
REL3 LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
REL4 LDN /MTX/IXL INCORRECT CHARACTER COUNT IN HEADER
LJM RET3 RETURN ERROR CODE
SSN SPACE 4,10
** SSN - SET SEQUENCE NUMBER.
*
* CALLS C2D, DCV.
SSN SUBR ENTRY/EXIT
LDC SSNA SET DESTINATION BUFFER
STM DBUF
LDN 32D GET SEQUENCE NUMBER
STD T6
LDN 2
STD T7
LDC 30004
RJM DCV CONVERT DECIMAL FIELD
LDM SSNA+1 SET LAST SEQUENCE NUMBER+1
ADN 1
STD T6
RJM C2D
STM SSNA+3
LDD T6
SHN -6
RJM C2D
LPN 77
STM SSNA+2
LDN 0 CLEAR TAPE MARK COUNT
STD PA
UJN SSNX RETURN
TMC SPACE 4,10
** TMC - TAPE MARK CHECK.
*
* CALLS CHC, CLA, DCV, FAD, REL, WUD.
TMC9 AOD PB ADVANCE SECTION
TMC SUBR ENTRY/EXIT
RJM CLA CHECK LABELS
SBN 1
ZJN TMC2 IF TAPE MARK
LDD PA
ZJN TMC1 IF HDR1 NOT PRECEEDED BY TAPE MARK
LJM RLAX READ NEXT BLOCK
TMC1 LDN /MTX/LAM LABEL MISSING
LJM RET3 RETURN ERROR CODE
TMC2 AOD PA INCREMENT TAPE MARK COUNT
SBN 1
ZJN TMC9 IF NOT SECOND TAPE MARK
LDD UP
SHN 21-1
PJN TMC3 IF NOT *POSMF 9999*
LDN 0 CLEAR PARAMETER
STD PA
LDM UDTB+22 SET SECTION NUMBER TO ONE
SCN 77
STM UDTB+22
LDN 1
STM UDTB+23
AOM UDTB+30 INCREMENT SEQUENCE NUMBER
SHN -14
RAM UDTB+27
LDM UDTB+10 SET LABEL NOT EXPIRED
SCN 2
LMN 2
STM UDTB+10
RJM WUD REWRITE UDT
LDN /MTX/BEI SET EOI INDICATOR
LJM RET3 RETURN ERROR CODE
TMC3 RJM CHC CHANGE CONTROL POINTS
LDM FETO CHECK EXTENDED LABELS
SHN 21-5
PJN TMC4 IF NOT EXTENDED LABELS
RJM REL READ EXTENDED LABELS
UJN TMC5 PROCESS FILE NOT FOUND
TMC4 RJM FAD SET FET ADDRESS
ADN 12
CRM TMCB,ON
TMC5 LDM TMCB+4
NJN TMC6 IF FILE SEQUENCE NUMBER NOT FOUND
STD LG
UJN TMC7 INDICATE FILE IDENTIFIER NOT FOUND
TMC6 LDC TMCB SET BUFFER PARAMETERS
STM IBUF
STM DBUF
LDN 8D
STD T6
LDN 12D
STD T7
LDC 30003
RJM DCV CONVERT DECIMAL FIELD
LDM TMCB+6 SET SEQUENCE NUMBER DESIRED
STD LG
LDM SSNA+1 SET HIGHEST EXISTING SEQUENCE NUMBER
TMC7 STD LG+1
LDM FETO CHECK IF EXTENDED LABELS
SHN 21-5
MJN TMC8 IF EXTENDED LABELS
LDM TMCB+3 RETURN LAST SEQUENCE NUMBER FOUND
SCN 77
LMM SSNA+2
STM TMCB+3
LDM SSNA+3
STM TMCB+4
RJM FAD SET FET ADDRESS
ADN 12 RETURN LABEL INFORMATION
CWM TMCB,ON
TMC8 LDD UP SET END OF SET FLAG
LPC 7677
LMD HN
STD UP
LDN /MTX/BEI RETURN END OF SET STATUS
LJM RET3 RETURN FATAL ERROR
SPACE 4,10
** BUFFERS.
PHDA EQU * LABEL COMPARE BUFFER
TMCB EQU * SEQUENCE NUMBER HOLD
SSNA EQU TMCB+7*5 SEQUENCE NUMBER
BUFL EQU SSNA+4 END OF BUFERS
ERROVL
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS MCH.
PRS LDC PRSA MODIFY CHANNELS
RJM MCH
LJM PRSX RETURN
PRSA CHTB CHANNEL TABLE
OVERLAY (OPEN OPERATIONS.)
OPF SPACE 4,10
** OPF - OPEN OPERATION.
*
* ENTRY (PB) .NE. 0 IF CHECK TYPE OF *POSMF*.
*
* CALLS CCH, CCS, CDN, DCV, ELA, FCH, FHR, GCH, OPH,
* SCH, WUD.
*
* MACROS SADT.
ENTRY OPF
SADT .FE,,4,A
OPF LDC * READ FET+4
CRD CN
LDD CN+3 RETURN BLOCK (PRU) SIZE
LPN 77
STD CN+3
SADT .BS
LDC *
SHN 14
STD CN+2
SHN -14
SHN 6
RAD CN+3
SADT .FE,,4,A
LDC * RETURN BLOCK SIZE
CWD CN
LDM UDTB+10 SAVE OPEN STATUS
STD CM
STM FHRB
LPC 6777 SET FILE OPENED STATUS
LMD TH
STM UDTB+10
OPFA LDN 0 FET LENGTH - 5
STD T3
SBN 10
PJN OPF4 IF FET LONG ENOUGH FOR LABEL PARAMETERS
LDM FETO
SHN 21-5
PJN OPF1 IF NOT EXTENDED LABELS
LDD T3 FET LENGTH - 5
SBN 10D-5
PJN OPF4 IF FET AT LEAST 10D WORDS LONG
OPF1 LDD LT
SHN 21-12
PJN OPF5 IF UNLABELED
SHN 21-11-21+12
MJN OPF5 IF NON-STANDARD LABEL
LDD DS
SHN 21-1
PJN OPF2 IF NOT BUSY
LDN /MTX/RBS REQUEUE ON UNIT BUSY
LJM RET5 RETURN STATUS TO MAGNET
OPF2 LPN 1
ZJN OPF5 IF NOT LOAD POINT
OPF3 RJM WUD REWRITE UDT
LJM RET1 RETURN
OPF4 LDD LT
SHN 21-12
MJN OPF6 IF LABELED
OPF5 RJM WUD
LDN /MTX/BEI
LJM RET3 RETURN ERROR CODE
OPF6 SHN 21-11-21+12
MJN OPF5 IF NON-STANDARD LABEL
LDM CIOE
LPN 4
ZJN OPF8 IF NOT OPEN WRITE
LDD CM
SHN 21-11
PJN OPF7 IF FIRST OPEN SINCE ASSIGNMENT
LJM OPF18 TRANSFER HEADER INFORMATION TO FET
OPF7 LJM OPF11 PROCESS OPEN WRITE
OPF8 LDM CIOE CHECK IF *POSMF*
SHN -2
LPC 377
LMN 22
STM OPFB
ZJN OPF9 IF *POSMF*
LDD DS
LPN 4
NJN OPF9 IF LOAD POINT
LJM OPF1 CHECK FOR BUSY
OPF9 RJM FHR FIND *HDR1* LABEL
LDM FETO
SHN 21-5
PJN OPF10 IF NOT EXTENDED LABELS
LDN 0
STD T6
STD T7
LDN ZERL
CRD CN
LDC 1
OPFB EQU *-1 *POSMF* FLAG
ZJN OPF10 IF *POSMF*
RJM ELA
ZJN OPF10 IF END OF BUFFER
CWD CN PRESET BUFFER
OPF10 RJM OPH OPEN HEADER
RJM WUD REWRITE UDT
LJM RET1 RETURN
OPF11 RJM FHR FIND HEADER LABEL
OPF12 LDN 0 SET TO VALIDATE NUMERIC CHARACTERS
STM DCVA
LDC BFMS SET BUFFERS
STM IBUF
LDC UDTB
STM DBUF
LDN 5 PROCESS FILE IDENTIFIER
STD T6
LDN 21D
STD T7
LDN 17D COPY CHARACTERS IF SPECIFIED
RJM CCS
OPFC LDN 41D PROCESS SET IDENTIFIER
* UJN OPF13 (*POSMF 9999* AND NOT FIRST FILE)
STD T7
LDN 6
RJM CCS
OPFD LDN 38D PROCESS FILE SECTION NUMBER
* UJN OPF13 (*POSMF 9999*)
STD T7
RJM CDN CONVERT DECIMAL NUMBER
LDN 32D PROCESS FILE SEQUENCE NUMBER
STD T6
LDN 48D
STD T7
RJM CDN CONVERT DECIMAL NUMBER
OPF13 LDN 36D PROCESS GENERATION NUMBER
STD T6
LDN 58D
STD T7
RJM CDN CONVERT DECIMAL NUMBER
LDN 40D PROCESS GENERATION VERSION NUMBER
STD T6
LDN 56D
STD T7
RJM GCH
ZJN OPF14 IF NOT SPECIFIED
SOD T6
LDC 20002
RJM DCV
UJN OPF15 SET CREATION DATE
OPF14 LDN 2 SET GENERATION VERSION NUMBER TO ZERO
RJM FCH
OPF15 LDN JDAL SET CREATION DATE
CRM BFMS,ON
LDN 6
STD T6
LDN 61D
STD T7
LDN 5
RJM CCH
LDN 48D PROCESS EXPIRATION DATE
STD T6
RJM GCH
NJN OPF16 IF SPECIFIED
LDN 6 DEFAULT TO TODAYS DATE
STD T6
OPF16 LDN 5
RJM CCH
LDN 54D PROCESS ACCESSIBILTIY
STD T6
LDN 47D
STD T7
RJM GCH
NJN OPF17 IF SPECIFIED
LDN 1R
OPF17 RJM SCH
OPF18 LDM OPFB
ZJN OPF19 IF *POSMF 9999*
LDC LJMI SET TO RETURN LABEL BLOCK TO FET
STM OPHA
LDC OPH6
STM OPHA+1
RJM OPH
LJM OPF5 REWRITE UDT AND EXIT WITH *BEI* ERROR
OPF19 LJM OPF3 REWRITE UDT AND EXIT
OPH SPACE 4,10
** OPH - OPEN READ/ALTER.
*
* CALLS CAN, CCH, DCV, ELA, GHD, SCH.
*
* MACROS MONITOR, SADT.
OPH SUBR ENTRY/EXIT
RJM GHD PROCESS HEADER LABEL
LDN LABW
STD T1
SADT .LF
LDC *
SBD T1
MJN OPH2 IF NOT ROOM FOR LABEL IN BUFFER
LDM FETO
SHN 21-5
MJN OPH2 IF EXTENDED LABELS
SADT .FT
LDC * VALIDATE FIRST
SBN 2
PJN OPH1 IF FIRST .GT. 1
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
SADT .FT,,,A
OPH1 LDC * TRANSFER HDR1
CWM BUF,T1
OPH2 LDC BFMS SET BUFFERS FOR COMPARISON
* LJM OPH6 (OPEN/WRITE)
OPHA EQU *-2
STM IBUF
LDC BUF
STM DBUF
LDN 5
STD T6
STD T7
LDN 17D COMPARE FILE IDENTIFIER
RJM CAN
NJN OPH3 IF NO COMPARE
LDN 6 COMPARE SET IDENTIFICATION
RJM CAN
NJN OPH3 IF NO COMPARE
LDN 4 COMPARE FILE SECTION NUMBER
RJM CAN
NJN OPH3 IF NO COMPARE
LDN 4 COMPARE FILE SEQUENCE NUMBER
RJM CAN
NJN OPH3 IF NO COMPARE
LDN 4 COMPARE GENERATION NUMBER
RJM CAN
OPH3 NJN OPH4 IF NO COMPARE
LDN 2 COMPARE GENERATION VERSION NUMBER
RJM CAN
NJN OPH4 IF NO COMPARE
LDN 6 COMPARE CREATION DATE
RJM CAN
NJN OPH4 IF NO COMPARE
LDN 6 COMPARE EXPIRATION DATE
RJM CAN
NJN OPH4 IF NO COMPARE
LDN 1 COMPARE ACCESSIBILITY
RJM CAN
ZJN OPH6 IF GOOD COMPARE
OPH4 STD EP SET CHARACTER POSITION REJECT OCCURRED
LDM CIOE CHECK IF *POSMF*
SHN -2
LPC 377
LMN 22
NJN OPH5 IF NOT *POSMF*
STD EP CLEAR EP
LJM OPF5 REWRITE UDT
OPH5 LDN /MTX/LPE SET LABEL PARAMETER ERROR
LJM RET3 RETURN ERROR CODE
OPH6 LDM FETO
SHN 21-5
PJN OPH8 IF NOT EXTENDED LABELS
LDM OPFB
NJN OPH7 IF NOT *POSMF*
STD T6
STD T7
LDN ZERL PRESET BUFFER
CRD CN
RJM ELA
ZJN OPH7 IF END OF BUFFER
CWD CN
OPH7 LJM OPHX RETURN
* BUILD FET BLOCK TO RETURN TO USER
OPH8 LDC BUF SET INPUT BUFFER
STM IBUF
LDC BFMS SET DESTINATION BUFFER
STM DBUF
LDN 5 COPY FILE IDENTIFIER
STD T6
LDN 1
STD T7
LDN 17D
RJM CCH
LDN 32D+1 COPY FILE SEQUENCE NUMBER
STD T6
LDN 3
RJM CCH
LDN 40D COPY GENERATION VERSION NUMBER
STD T6
LDN 2
RJM CCH
* RECALCULATE EXPIRATION DATE.
LDN CN SET DESTINATION BUFFER
STM DBUF
LDN 49D CONVERT YEAR OF EXPIRATION
STD T6
LDN 1
STD T7
LDC 20002
RJM DCV
LDN 43D CONVERT YEAR OF CREATION
STD T6
LDC 20002
RJM DCV
LDN 51D CONVERT DAY OF EXPIRATION
STD T6
LDC 20003
RJM DCV
LDN 45D CONVERT DAY OF CREATION
STD T6
LDC 20003
RJM DCV
LDN CN
RJM SCB SET CENTURY BIAS FOR YEAR OF EXPIRATION
LDN CN+1
RJM SCB SET CENTURY BIAS FOR YEAR OF CREATION
LDC 99D
LMD CN EXPIRATION YEAR
NJN OPH8.1 IF YEAR NOT 99
LDC 999D
LMD CN+2 EXPIRATION DAY
ZJN OPH11 IF INFINITE EXPIRATION DATE
OPH8.1 LDN ZERL PRESET RESULT
CRD CM
LDD CN
SBD CN+1
ZJN OPH10 IF SAME YEAR
MJN OPH13 IF LABEL EXPIRED
OPH9 LDD CN+1
LPN 3
ZJN OPH9.1 IF LEAP YEAR
LCN 1
OPH9.1 ADC 366D INCREMENT DAYS
RAD CN+2
SHN -14
NJN OPH11 IF OVERFLOW
AOD CN+1
SBD CN
NJN OPH9 IF MORE YEARS
OPH10 LDD CN+2 RETENTION DAYS
SBD CN+3
MJN OPH13 IF LABEL EXPIRED
STD CM+4
ADC -1000D
MJN OPH12 IF LESS THAN 1000 DAYS
OPH11 LDC 999D
STD CM+4
OPH12 LDD CM+4
NJN OPH14 IF NOT EXPIRED
OPH13 LDC 2R00 SET RETENTION CYCLE TO ZERO
STD CM+3
STD CM+4
UJN OPH15 STORE CHARACTERS IN BUFFER
OPH14 LDD MA
CWD CM
MONITOR RDCM CONVERT DATA
LDD MA
CRD CM
OPH15 LDC BFMS SET DESTINATION BUFFER
STM DBUF
LDN 23D
STD T7
LDD CM+3 STORE CHARACTERS IN BUFFER
RJM SCH
LDD CM+4
SHN -6
RJM SCH
LDD CM+4
RJM SCH
LDN 43D COPY CREATION DATE
STD T6
LDN 5
RJM CCH
LDN 22D COPY SET IDENTIFIER
STD T6
LDN 6
RJM CCH
LDN 28D FILE SECTION NUMBER
STD T6
LDN 4
RJM CCH
LDN 4
STD T1
SADT .FE,,,A
LDC *
ADN 11
CWM BFMS,T1
LJM OPHX RETURN
TITLE SUBROUTINES.
ELA SPACE 4,10
** ELA - EXTENDED LABELS ADDRESS PROCESSING.
*
* ENTRY (T6 - T7) = POSITION TO START AT IN BUFFER.
*
* EXIT (A) = ABSOLUTE ADDRESS.
* (A) = 0, END OF LABEL BUFFER.
*
* MACROS SADT.
ELA2 LDN 0 INDICATE END OF BUFFER
ELA SUBR ENTRY/EXIT
SADT .FE,,,A
LDC * GET FET ADDRESS
ADN 11
CRD CM
LDD CM+3
SHN 14
STD CM+1
SHN -14
STD CM+3
SHN 14
LMD CM+4
SBN 2
MJN ELA2 IF NO LABEL BUFFER
LDD CM+2
SHN 6
LMD CM+1
STD CM+2
SHN -14
STD CM+1
LDD T6
SBD CM+1
SHN 14
ADD T7
SBD CM+2
ADN 11 ALLOW FOR LABEL
PJN ELA2 IF END OF LABEL BUFFER
LDD CM+1 CHECK IF BUFFER WITHIN FL
ADD CM+3
SHN 14
ADD CM+2
ADD CM+4
SHN -6
SBD FL
MJN ELA1 IF BUFFER WITHIN FL
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
ELA1 LDD CM+3 CALCULATE LABEL ADDRESS
ADD T6
SHN 6
ADD RA
SHN 6
ADD CM+4
ADD T7
LJM ELAX RETURN
FHR SPACE 4,10
** FHR - FIND *HDR1* LABEL.
*
* EXIT (BFMS - BFMS+47) = *HDR1* LABEL IF FOUND, OTHERWISE 0.
*
* CALLS CCH, CPO, DCV, ELA, FCH, GCD, GCH.
*
* MACROS MONITOR, SADT.
FHR SUBR ENTRY/EXIT
LDN CLBL CLEAR BUFFER
STD T1
FHR1 LDN 0
STM BFMS,T1
SOD T1
PJN FHR1 IF MORE BUFFER TO CLEAR
LDM FETO
SHN 21-5
PJN FHR2 IF NOT EXTENDED LABELS
LJM FHR14 SEARCH FOR *HDR1* IN USER BUFFER
FHR2 LDN 4 READ FET LABEL PARAMETERS
STD T1
SADT .FE,,,A
LDC * FET ADDRESS
ADN 11
CRM BFMS-4*5,T1
LDC BFMS-4*5 SET INPUT BUFFER ADDRESS
STM IBUF
LDC BFMS SET DESTINATION BUFFER ADDRESS
STM DBUF
LDN 1 MOVE FILE IDENTIFIER
STD T6
LDN 5
STD T7
LDN 17D
RJM CCH
LDN 32D
STD T7
LDM BFMS-4*5+10
LPN 77
SHN 14
ADM BFMS-4*5+11
ZJN FHR4 IF NO FILE SEQUENCE NUMBER
LMC 3R999
ZJN FHR3 IF *999* MUST EXPAND TO *9999*
LDC 1L0&1L9
FHR3 LMC 1L9+1
RJM FCH
LDN 3 COPY FILE SEQUENCE NUMBER
RJM CCH
FHR4 LDN 21D COPY GENERATION VERSION NUMBER
STD T6
LDN 40D
STD T7
LDN 2
RJM CCH
LDN 26D MOVE CREATION DATE
STD T6
RJM GCH
STM FHRA
ZJN FHR5 IF CREATION DATE NOT SPECIFIED
SOD T6
RJM SCF SET CENTURY FILL CHARACTER
LDN 5
RJM CCH
FHR5 LDN 23D
STD T6
RJM GCH
NJN FHR6 IF RETENTION CYCLE
LJM FHR12 COPY SET ID
FHR6 LDN 26D
STD T6
LDM CIOE
LPN 4
NJN FHR7 IF OPEN WRITE
RJM CPO CHECK IF *POSMF 9999*
ZJN FHR7 IF *POSMF 9999*
LDC 0 FIRST CHARACTER OF CREATION DATE
FHRA EQU *-1
NJN FHR8 IF CREATION DATE SPECIFIED
LDC UDTB DEFAULT TO CREATION DATE ON TAPE
STM IBUF
LDN 61D
STD T6
UJN FHR8 COPY EXPIRATION DATE
FHR7 LDN 0 SET TO VALIDATE NUMERIC CHARACTERS
STM DCVA
LDN JDAL DEFAULT TO TODAYS DATE
CRD CM
LDN CM SET INPUT BUFFER
STM IBUF
LDN 6
STD T6
FHR8 LDN 48D SET DESTINATION BUFFER ADDRESS
STD T7
RJM SCF SET CENTURY FOR EXPIRATION DATE
LDN 5 COPY EXPIRATION DATE
RJM CCH
LDC BFMS-4*5 RESET INPUT BUFFER
STM IBUF
LDN CN CHANGE DESTINATION BUFFER
STM DBUF
LDN 1 CONVERT RETENTION CYCLE
STD T7
LDN 23D
STD T6
LDC 20003
RJM DCV
LDC BFMS CONVERT DAYS FROM JULIAN DATE
STM IBUF
LDN 51D
STD T6
LDC 20003
RJM DCV
LDD CN
LMC 999D
NJN FHR9 IF NOT INDEFINITE
LDC 2R99 SET TO YEAR 99
STM BFMS+30
LJM FHR11 COPY 999 TO DAYS OF EXPIRATION DATE
FHR9 LDD CN+1 GET TOTAL NUMBER OF DAYS
RAD CN
LDN 49D CONVERT CREATION YEAR
STD T6
LDC 20002
RJM DCV
LDD CN+2
LPN 3
ZJN FHR10 IF LEAP YEAR
LDN 1
FHR10 ADC -366D
ADD CN
MJN FHR11 IF WITHIN THE CURRENT YEAR
ZJN FHR11 IF LAST DAY OF CURRENT YEAR
STD CN
AOD CN+2
AOM BFMS+30
LPN 77
LMN 1R9+1
NJN FHR10 IF NO ROLLOVER
LCN 1R9+1-1R0
RAM BFMS+30
UJN FHR10 CONTINUE RETENTION CYCLE CONVERSION
FHR11 LDN ZERL CONVERT REMAINING DAYS
CRD CM
LDD CN
STD CM+4
LDD MA
CWD CM
MONITOR RDCM
LDD MA
CRD CM
LDD CM+4
SCN 77
SHN 6
LMD CM+3
SHN 6
STM BFMS+31
LDD CM+4
LPN 77
SHN 6
STD CM+4
LDM BFMS+32
LPN 77
LMD CM+4
STM BFMS+32
LDC BFMS-4*5 RESET INPUT BUFFER ADDRESS
STM IBUF
FHR12 LDC BFMS RESTORE DESTINATION BUFFER ADDRESS
STM DBUF
LDN 31D MOVE SET IDENTIFICATION
STD T6
LDN 22D
STD T7
LDN 6
RJM CCH
LDN 4 MOVE FILE SECTION NUMBER
RJM CCH
LJM FHR20 CHECK FOR *POSMF*
FHR13 LDN /MTX/IXL INCORRECT CHARACTER COUNT IN HEADER
LJM RET3 RETURN ERROR CODE
* GET LABEL FROM USER BUFFER.
FHR14 LDN 0 SEARCH FOR *HDR1*
STD T6
STD T7
FHR15 RJM ELA
ZJN FHR17 IF END OF LABEL BUFFER
CRD CN
ADN 1
CRD CM
LDD CN+4
ZJN FHR17 IF END OF LABELS IN BUFFER
LMC 80D
NJN FHR13 IF NOT CORRECT LENGTH
LDD CM
LMC 2RHD
NJN FHR16 IF NOT *HD*
LDD CM+1
LMC 2RR1
ZJN FHR19 IF *R1*
FHR16 LDN 11 ADVANCE LABEL BUFFER POINTER
RAD T7
SHN -14
RAD T6
UJN FHR15 CONTINUE SEARCH
FHR17 LDM OPFB
NJN FHR18 IF NOT *POSMF*
LDN /MTX/BAE *BUFFER ARGUMENT ERROR.*
LJM RET3 RETURN ERROR CODE
FHR18 LJM FHRX RETURN
FHR19 LDN 10 READ UP LABEL
STD T5
RJM ELA SKIP HEADER WORD
ADN 1
CRM BFMS,T5
FHR20 LDM OPFB
NJN FHR18 IF NOT *POSMF*
LDD PB
NJN FHR22 IF CHECK TYPE OF *POSMF*
LDD UP
SHN 21-1
PJN FHR18 IF NOT *POSMF 9999*
LDD UP CLEAR *POSMF 9999* IN PROGRESS
SCN 2
STD UP
LDM FHRC
STM OPFD
LDM UDTB+10 SET LABEL EXPIRED
SCN 2
LMN 2
STM UDTB+10
LDM UDTB+27 CHECK FILE NUMBER
LPN 77
SHN 14
ADM UDTB+30
LMN 1
ZJN FHR21 IF POSITIONED AT FIRST FILE
LDM FHRD SKIP TRANSFER OF SETID
STM OPFC
FHR21 LJM OPF12 RETURN TO TRANSFER FET TO UDT
* CHECK IF *POSMF 9999* AND IF REWIND IS REQUIRED. IF
* IT IS A *POSMF 9999*, THE *BEI* ERROR CODE IS RETURNED
* TO *MAGNET*. IF NOT *POSMF 9999*, NO ERROR CODE
* IS RETURNED AND REWIND STATUS IS INDICATED BY
* RETURNING (PA) = 0 IF REWIND IS NEEDED AND (PA) .NE. 0
* IF REWIND IS NOT NEEDED.
FHR22 LDN 0 SET EXIT CONDITION
STD PA
LDD UP PRESET TYPE OF *POSMF*
SCN 2
STD UP
RJM CPO CHECK IF *9999*
NJN FHR23 IF NOT *9999*
LDN 2 SET *POSMF 9999* IN PROGRESS
RAD UP
LDN /MTX/BEI RETURN *POSMF 9999* INDICATION
LJM RET3 RETURN ERROR CODE
FHR23 LDD UP CHECK WRITE STATUS
SHN 21-4
MJN FHR25 IF LAST OPERATION WRITE - REWIND
LDC BFMS SET BUFFER ADDRESSES
STM DBUF
STM IBUF
LDN 32D GET FIRST CHARACTER OF SEQUENCE NUMBER
STD T7
RJM GCD GET CHARACTER
NJN FHR26 IF SEQUENCE NUMBER SPECIFIED
LDN 5
STD T7
RJM GCD GET CHARACTER
NJN FHR25 IF FI SPECIFIED - REWIND REQUIRED
LDC * SET TO LABEL FLAGS IN UDT WORD *UVSN*
FHRB EQU *-1
SHN 21-11
PJN FHR25 IF FIRST OPEN SINCE ASSIGNMENT
FHR24 LDN 1 SET NO REWIND REQUIRED
STD PA
FHR25 LJM RET1 RETURN
FHR26 LDN 32D CONVERT FET SEQUENCE NUMBER TO BINARY
STD T6
LDN 2
STD T7
LDC 30004 CONVERT DECIMAL FIELD
RJM DCV
LDM UDTB+27 CLEAR ACCESSIBILITY CHARACTER
LPN 77
STM UDTB+27
LDM BFMS COMPARE UDT TO FET SEQUENCE NUMBER
LPN 77
SBM UDTB+27
MJN FHR25 IF REWIND REQUIRED
NJN FHR24 IF NO REWIND REQUIRED
LDM BFMS+1
SBM UDTB+30
MJN FHR25 IF REWIND REQUIRED
ZJN FHR25 IF REWIND REQUIRED
UJN FHR24 SET NO REWIND REQUIRED
FHRC BSS 0
LOC OPFD
UJN OPF13 SKIP FILE SEQUENCE NUMBER CONVERSION
LOC *O
FHRD BSS 0
LOC OPFC
UJN OPF13 SKIP TRANSFER OF SETID
LOC *O
GHD SPACE 4,10
** GHD - GENERATE *HDR1* LABEL FROM UDT.
*
* EXIT (BUF - BUF+50) = *HDR1* LABEL FROM CHARACTER POSITION
* 5 TO 55.
*
* CALLS CBD, CCH, SCH.
GHD SUBR ENTRY/EXIT
LDN CLBL CLEAR BUFFER
STD T1
GHD1 LDN 0
STM BUF,T1
SOD T1
PJN GHD1 IF MORE BUFFER TO CLEAR
LDC UDTB SET INPUT BUFFER
STM IBUF
LDC BUF SET DESTINATION BUFFER
STM DBUF
LDC 2RHD SET *HDR1* IN BUFFER
STM BUF
LDC 2RR1
STM BUF+1
LDN 21D MOVE FILE IDENTIFIER
STD T6
LDN 5
STD T7
LDN 17D
RJM CCH
LDN 41D MOVE SET IDENTIFIER
STD T6
LDN 6
RJM CCH
LDN 38D CONVERT FILE SECTION NUMBER
STD T6
LDC 30004
RJM CBD
LDN 48D CONVERT FILE SEQUENCE NUMBER
STD T6
LDC 30004
RJM CBD
LDN 58D CONVERT GENERATION NUMBER
STD T6
LDC 30004
RJM CBD
LDN 56D CONVERT GENERATION VERSION NUMBER
STD T6
LDC 20002
RJM CBD
LDN 61D PROCESS CREATION DATE
STD T6
RJM SCF SET CREATION DATE CENTURY CHARACTER
LDN 5 COPY CREATION DATE
RJM CCH
RJM SCF SET EXPIRATION DATE CENTURY CHARACTER
LDN 5 COPY CREATION DATE
RJM CCH
LDN 47D COPY ACCESSIBILITY
STD T6
LDN 1
RJM CCH
LJM GHDX RETURN
TITLE CHARACTER PROCESSING SUBROUTINES.
SPACE 4,10
** DIRECT CELL USAGE IN FOLLOWING ROUTINES.
*
* ENTRY (T5) = NUMBER OF CHARACTERS.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* ALL CHARACTER POSITIONS ARE REFERENCED STARTING WITH *1*.
* THUS, THE CHARACTER POSITION VALUES BEING USED TO ACCESS
* *BUF* MAY BE REFERENCED DIRECTLY TO THE LABEL STANDARD.
IBUF CON UDTB FWA OF FETCH BUFFER
DBUF CON BUF FWA OF DESTINATION BUFFER
CAN SPACE 4,15
** CAN - COMPARE ALPHANUMERIC FIELDS.
* COMPARE WILL BE GOOD IF ALL OF INPUT CHARACTER STRING IS
* BINARY ZERO.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO COMPARE.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (A) = 0, GOOD COMPARE.
* (A) .NE. 0, (A) = CHARACTER POSITION AT START.
* (T6), (T7) = UPDATED.
*
* USES T3, T4.
*
* CALLS GCD, GCH.
CAN5 SOD T5 UPDATE TO SKIP REMAINDER OF FIELD
RAD T6
LDD T5
RAD T7
LDD T3
CAN SUBR ENTRY/EXIT
STD T5
STD T4
LDD T6 SAVE STARTING POSITION
STD T3
CAN1 RJM GCH GET CHARACTER
NJN CAN2 IF SPECIFIED
SOD T4
NJN CAN1 IF MORE CHARACTERS TO CHECK
LDD T5
RAD T7
LDN 0 GOOD COMPARE
UJN CANX RETURN
CAN2 LDD T3 RESET CHARACTER POSITION
STD T6
CAN3 RJM GCH GET CHARACTER
STD T4
NJN CAN4 IF NOT 00 CHARACTER
LDN 1R
STD T4
CAN4 RJM GCD GET CHARACTER FROM DESTINATION BUFFER
LMD T4
NJN CAN5 IF NO COMPARE
SOD T5
NJN CAN3 IF MORE CHARACTERS TO COMPARE
UJN CANX RETURN
CBD SPACE 4,15
** CBD - CONVERT BINARY FIELD TO DECIMAL.
*
* ENTRY (A, 21 - 14) = NUMBER OF CHARACTERS IN BINARY FIELD
* MAXIMUM OF 4.
* (A, 13 - 0) = NUMBER OF DISPLAY CODE CHARACTERS TO
* STORE WITH A MAXIMUM OF 6.
*
* EXIT RESULT STORED IN DESTINATION BUFFER.
*
* CALLS GCH, SCH.
*
* MACROS MONITOR.
CBD SUBR ENTRY/EXIT
STD T5
SHN -14
STD T4
LDN ZERL PRESET FIELD TO CONVERT
CRD CM
CBD1 LDD CM+3 MOVE UP FIELD
SHN 6
STD CM+3
LDD CM+4
SHN 6
STD CM+4
SHN -14
RAD CM+3
RJM GCH GET CHARACTER
RAD CM+4
SOD T4
NJN CBD1 IF MORE FIELD POSITIONS
LDD MA CONVERT DATA
CWD CM
MONITOR RDCM
LDD MA
CRD CM
LDD CM+3 REMOVE *.* FROM DATA
LPN 77
SHN 14
LMD CM+2
SHN 6
STD CM+3
LMD CM+3
LMD CM+1
SHN 6
STD CM+2
LDN CM+1 REMOVE SPACES
STD T1
CBD2 AOD T1 ADVANCE TO NEXT BYTE
LMN CM+5
ZJN CBD5 IF ALL SPACES
LDI T1
ZJN CBD3 IF ZERO
LMC 2R
NJN CBD4 IF NOT * *
CBD3 LDC 2R00
STI T1
UJN CBD2 LOOP
CBD4 SHN -6
NJN CBD5 IF NOT * *
LCN -1R0+1R
SHN 6
RAI T1
CBD5 LDM CBDA,T5 SET TO ENTER STORE LOOP
STD T1
LJM 0,T1 STORE CHARACTERS
CBD6 LDD CM+2 STORE SIXTH CHARACTER
SHN -6
RJM SCH
CBD7 LDD CM+2 STORE FIFTH CHARACTER
RJM SCH
CBD8 LDD CM+3 STORE FOURTH CHARACTER
SHN -6
RJM SCH
CBD9 LDD CM+3 STORE THIRD CHARACTER
RJM SCH
CBD10 LDD CM+4 STORE SECOND CHARACTER
SHN -6
RJM SCH
CBD11 LDD CM+4 STORE FIRST CHARACTER
RJM SCH
LJM CBDX RETURN
CBDA BSS 0 INDEXED BY NUMBER OF CHARACTERS TO STORE
LOC 0
CON CBDX
CON CBD11
CON CBD10
CON CBD9
CON CBD8
CON CBD7
CON CBD6
LOC *O
CCH SPACE 4,15
** CCH - COPY INPUT BUFFER TO DESTINATION BUFFER.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO MOVE.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T6), (T7) = INCREMENTED.
*
* USES T5.
*
* CALLS GCH, SCH.
CCH SUBR ENTRY/EXIT
STD T5
CCH1 RJM GCH GET LABEL CHARACTER
RJM SCH STORE CHARACTER IN USER BUFFER
SOD T5
NJN CCH1 IF MORE CHARACTERS TO MOVE
UJN CCHX RETURN
CCS SPACE 4,15
** CCS - COPY CHARACTERS IF SPECIFIED.
* CHECKS FIELD FOR ALL ZEROES. IF ALL ZEROES, FIELD IS SPACE
* FILLED. OTHERWISE FIELD IS COPIED FROM INPUT BUFFER TO
* DESTINATION BUFFER.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO PROCESS.
* (T6) = INPUT BUFFER POSITION.
* (T7) = DESTINATION BUFFER POSITION.
*
* EXIT (T6), (T7) = INCREMENTED.
*
* USES T5.
*
* CALLS FCH, GCH, SCH.
CCS2 LDD MA COPY FIELD
CRD T3
LDD T5
CCS3 RJM GCH GET LABEL CHARACTER
NJN CCS4 IF NOT 00 CHARACTER
LDN 1R
CCS4 RJM SCH STORE CHARACTER IN DESTINATION BUFFER
SOD T5
NJN CCS3 IF MORE CHARACTERS TO MOVE
CCS SUBR ENTRY/EXIT
STD T5
LDD MA SAVE DIRECT CELLS
CWD T3
CCS1 RJM GCH GET CHARACTER
NJN CCS2 IF FIELD SPECIFIED
SOD T5
NJN CCS1 IF MORE CHARACTERS TO CHECK
LDD MA SET DEFAULTS
CRD T3
LDD T5
RAD T6
LDD T5
ADC 1L
RJM FCH
UJN CCSX RETURN
CDN SPACE 4,10
** CDN - CONVERT DECIMAL FIELD (4 CHARACTERS).
* IF FIELD IS NOT DEFINED, A DEFAULT OF 1 IS SET.
*
* ENTRY (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* CALLS DCV, GCH, SCH.
CDN1 LDN 0 SET DEFAULT
RJM SCH
LDN 0
RJM SCH
LDN 1
RJM SCH
CDN SUBR ENTRY/EXIT
RJM GCH GET CHARACTER
ZJN CDN1 IF FIELD NOT DEFINED
SOD T6
LDC 30004
RJM DCV
UJN CDNX RETURN
CPO SPACE 4,10
** CPO - CHECK IF *POSMF 9999*.
* MUST BE CALLED AFTER LABEL IS TRANSFERRED TO BFMS.
*
* EXIT (A) = 0 IF *POSMF 9999*
* (DBUF) = BFMS.
* (IBUF) = CPOA.
*
* CALLS CAN.
*
* USES T6, T7.
CPO SUBR ENTRY/EXIT
LDM OPFB
NJN CPOX IF NOT *POSMF*
LDC CPOA CHECK SEQUENCE NUMBER
STM IBUF
LDC BFMS
STM DBUF
LDN 1
STD T6
LDN 32D
STD T7
LDN 4
RJM CAN COMPARE FIELDS
UJN CPOX RETURN
CPOA DATA H*9999*
DCV SPACE 4,15
** DCV - CONVERT DECIMAL FIELD TO BINARY.
*
* ENTRY (A, 13 - 12) = NUMBER OF CHARACTER POSITIONS IN RESULT.
* (A, 11 - 0) = NUMBER OF CHARACTERS IN LABEL FIELD.
* (T6) = CHARACTER POSITION IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T6), (T7) = INCREMENTED.
*
* USES T1 - T5.
*
* CALLS GCH, SCH.
DCV7 LDN /MTX/IXL INCORRECT LABEL FIELD
LJM RET3 RETURN ERROR CODE
DCV SUBR ENTRY/EXIT
STD T5 NUMBER OF CHARACTERS IN LABEL
SHN -14
STD T4 NUMBER OF CHARACTER POSITIONS IN UDT
LDN 0 PRESET RESULT
STD T2
STD T3
DCV1 RJM GCH GET CHARACTER
STD T1
SBN 1R0
RAD T3
SHN -14
RAD T2
DCVA UJN DCV2 DO NOT VALIDATE CHARACTER
* PSN (OPEN WRITE OR POSMF 9999)
LDD T1
SBN 1R0
MJN DCV7 IF NOT NUMERIC CHARACTER
SBN 1R9-1R0+1
PJN DCV7 IF NOT NUMERIC CHARACTER
DCV2 SOD T5 DECREMENT NUMBER OF CHARACTERS TO PROCESS
ZJN DCV3 IF ALL DIGITS PROCESSED
LDD T2 10D * ACCUMALATED RESULT
SHN 14
ADD T3
SHN 2+6 * 4
ADD T2 * 5
SHN 14
ADD T3
SHN 1 * 10D
STD T3
SHN -14
STD T2
UJN DCV1 LOOP
DCV3 LDD T4
LMN 3
NJN DCV4 IF NOT 3 CHARACTER POSITIONS
LDD T2 STORE VALUE
RJM SCH STORE CHARACTER
UJN DCV5 STORE REMAINING CHARACTERS
DCV4 LMN 2&3
NJN DCV6 IF NOT 2 CHARACTER POSIITONS
DCV5 LDD T3 STORE VALUE
SHN -6
RJM SCH STORE CHARACTER
DCV6 LDD T3
LPN 77
RJM SCH STORE CHARACTER
LJM DCVX RETURN
FCH SPACE 4,15
** FCH - FILL DESTINATION BUFFER WITH CHARACTER(S).
*
* ENTRY (A, 17- 12) = CHARACTER TO FILL WITH.
* (A, 11 - 0) = NUMBER OF CHARACTERS TO FILL.
* (T7) = CHARACTER POINTER IN DESTINATION BUFFER.
*
* EXIT (T7) = INCREMENTED.
*
* USES T4.
*
* CALLS SCH.
FCH SUBR ENTRY/EXIT
STD T5 SAVE COUNT
SHN -14
STD T4 SAVE FILL VALUE
FCH1 LDD T4 STORE CHARACTER
RJM SCH
SOD T5
NJN FCH1 IF MORE TO FILL
UJN FCHX RETURN
GCD SPACE 4,10
** GCD - GET CHARACTER FROM DESTINATION BUFFER.
*
* ENTRY (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (A) = CHARACTER.
* (T7) = INCREMENTED.
*
* USES T1.
GCD1 LDM -1,T1
LPN 77
GCD SUBR ENTRY/EXIT
AOD T7
SBN 1
SHN 21
ADM DBUF
STD T1
SBM DBUF
SHN -21
ZJN GCD1 IF LOWER 6 BITS
LDI T1
SHN -6
UJN GCDX RETURN
GCH SPACE 4,10
** GCH - GET CHARACTER FROM INPUT BUFFER.
*
* ENTRY (T6) = CHARACTER POSITION IN INPUT BUFFER.
*
* EXIT (A) = CHARACTER.
* (T6) = INCREMENTED.
*
* USES T1.
GCH1 LDM -1,T1
LPN 77
GCH SUBR ENTRY/EXIT
AOD T6
SBN 1
SHN 21
ADM IBUF
STD T1
SBM IBUF
SHN -21
ZJN GCH1 IF LOWER 6 BITS
LDI T1
SHN -6
UJN GCHX RETURN
SCB SPACE 4,10
** SCB - SET CENTURY BIAS.
* ADJUSTS BINARY YEAR TO NEXT CENTURY IF REQUIRED.
*
* ENTRY (A) = ADDRESS OF CELL CONTAINING YEAR.
*
* EXIT ((A)) ADJUSTED UPWARD BY 100D IF ORIGINALLY .LT. 70D.
*
* USES T0.
SCB SUBR ENTRY/EXIT
STD T0 SAVE ADDRESS OF YEAR
LDI T0
SBK 70D
PJN SCBX IF YEAR .LE. 1999
LDC 100D ADJUST YEAR TO NEXT CENTURY
RAI T0
UJN SCBX RETURN
SCF SPACE 4,10
** SCF - SET CENTURY FILL CHARACTER.
* GENERATES THE *ISO* STANDARD CENTURY CHARACTER, BASED ON THE
* YEAR IN THE INPUT BUFFER, AND PLACES IT IN THE OUTPUT BUFFER.
*
* ENTRY (T6) = CHARACTER POSITION OF YEAR IN INPUT BUFFER.
* (T7) = CHARACTER POSITION IN OUTPUT BUFFER.
*
* EXIT FILL CHARACTER PLACED IN OUTPUT BUFFER,
* (* * FOR 19XX YEARS, *0* FOR 20XX YEARS).
* (T6) = (A) = ORIGINAL (T6).
* (T7) INCREMENTED.
*
* CALLS GCH, SCH.
*
* USES T6.
SCF1 LDN 1R SPACE FILL
SCF2 RJM SCH
SOD T6
SCF SUBR ENTRY/EXIT
RJM GCH GET TENS DIGIT OF YEAR
SBN 1R7
PJN SCF1 IF YEAR .LE. 1999
LDN 1R0 ZERO FILL FOR NEXT CENTURY
UJN SCF2 STORE CHARACTER AND RETURN
SCH SPACE 4,10
** SCH - STORE CHARACTER IN DESTINATION BUFFER.
*
* ENTRY (A) = CHARACTER.
* (T7) = CHARACTER POSITION IN DESTINATION BUFFER.
*
* EXIT (T7) = INCREMENTED.
*
* USES T1.
SCH1 LDM -1,T1
SCN 77
LMD T0
SCH2 STM -1,T1
SCH SUBR ENTRY/EXIT
LPN 77
STD T0 SAVE CHARACTER
AOD T7 INCREMENT POSITION
SHN 21 SET BYTE ADDRESS
ADM DBUF
STD T1
SBM DBUF
SHN -21
NJN SCH1 IF EVEN CHARACTER
LDM -1,T1
LPN 77
SHN 14
LMD T0
SHN 6
UJN SCH2 STORE CHARACTER
UDA SPACE 4,10
** UDA - UDT ADDRESS OF LABEL PARAMETERS (UUFN)
*
* EXIT (T1) = WORD COUNT TO WRITE.
*
* CALLS UAD.
UDA SUBR ENTRY/EXIT
LDN /MTX/UUDTL
STD T1
RJM UAD
ADN /MTX/UUFN
UJN UDAX RETURN
WUD SPACE 4,10
** WUD - WRITE UNIT DESCRIPTOR TABLE.
* OPERATION ONLY PERFORMED IF AT MAGNET CP.
*
* CALLS CEC, UDA.
WUD SUBR ENTRY/EXIT
LDM CECB
LPN 77
ZJN WUD1 IF AT MAGNET CP
LDN 0 CHNAGE TO MAGNET CP
RJM CEC
WUD1 RJM UDA GET UDT LABEL ADDRESS ADDRESS
CWM UDTB,T1
UJN WUDX RETURN
SPACE 4,10
** ADDRESS RELOCATION.
TADD TSAD ADDRESS RELOCATION TABLE
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS MCH, UDA.
PRS LDC PRSA MODIFY CHANNELS
RJM MCH
LDC /SRU/ITCL*100 SET SRU INCREMENT
STM //CECA
LDN F0040
STM //ITMA
LDC TADD SET UP FOR ADDRESS RELOCATION
STD CN
RJM UDA
CRM UDTB,T1
SBN /MTX/UUFN+/MTX/UUDTL-/MTX/UCIA
CRD T1 GET FET LENGTH - 5
LDD T1+1
SHN -6
RAM OPFA
LJM PRSX RETURN
PRSA CHTB CHANNEL TABLE
SPACE 4,10
ERROVL
SPACE 4,10
** BUFFERS.
UDTB EQU PRSA
UDTBL EQU UDTB+/MTX/UUDTL*5
BUF EQU UDTBL
OVERLAY (TAPE POSITIONING OPERATIONS.),(/READ/OVLS+5),,SKP
SKP SPACE 4,10
** SKP - SKIP.
* THIS ROUTINE SKIPS BLOCKS IN A FORWARD DIRECTION. *SKP* IS
* OVERLAYED BY *SKR* FOR SKIP REVERSE.
*
* EXIT TO *RET1* OF NORMAL COMPLETION.
* TO *RET2* IF DROP OUT BLOCK COUNT REACHED.
* TO *RET3* IF TAPE MARK.
*
* CALLS DBF, SLL, /READ/RDF, UAD.
ENTRY SKP FROM *PRS*
SKP BSS 0
.OSKR EQU *
SKP1 LDN 0
STM IDFE CLEAR CHUNK COUNT FOR LI FORMAT
LJM /READ/RDF READ TAPE (RETURN AT *SKP2*)
SKP2 UJN SKP3 NOT SI FORMAT, 9/18 TRACK
SKPA EQU *-1
* LDD ES (9/18 TRACK SI FORMAT)
LPN 40
ZJN SKP3 IF NO FILL STATUS
SOD BY ADJUST BYTE COUNT
SKP3 RJM DBF DETERMINE BLOCK TYPE FORWARD
AOD BL+1 INCREMENT BLOCK COUNTER
SHN -14
RAD BL
LDD T2
LMN 14
SKPB UJN SKP6 IF NOT TAPE MARK
* NJN SKP6 (LABELED OR I/SI/LI FORMAT)
SOD BL+1 ADJUST BLOCK COUNT
PJN SKP4 IF NO UNDERFLOW
SOD BL
AOD BL+1
SKP4 PSN
PSN
* RJM SLL (S,L FORMAT LABELED TAPE)
SKP5 LDN /MTX/BEI SET TAPE MARK ENCOUNTERED
LJM RET3 RETURN ERROR CODE
SKP6 AOD BT INCREMENT BLOCKS TRANSFERRED
AOD CN+4 INCREMENT BLOCKS SKIPPED
RJM UAD
ADN /MTX/UBLC
CWD CN
LDD T7
NJN SKP7 IF NOT TERMINATION CONDITION
LDD PA
SHN 14
ADD PB
ZJN SKP10 IF END OF SKIP
SBN 1
ZJN SKP10 IF END OF SKIP
STD PB
SHN -14
STD PA
SKP7 LDD CN+4
ADC -SBLK
MJN SKP8 IF NOT TIME TO CHECK ERROR FLAG
LDD TH
RAD PA
UJN SKP11 RETURN STATUS TO *MAGNET*
SKP8 LDD DF CHECK DROP OUT FLAG
NJN SKP9 IF DROP OUT SET
LJM SKP1 READ TAPE
SKP9 LJM RET2 REQUEUE
SKP10 LDM LNUM SET OPERATION COMPLETE
SHN 2
STD PA
SKPD LDD T2 SET EOR/EOF STATUS
* LDN 0 (PRU SKIP)
LPN 10
SKPE ADN 20
* PSN (READSKP OR PRU SKIP)
ADM CIOE MERGE IN CIO CODE
LPC 774
STD PB
LDN 10 SET EOR/EOF FLAG
RAD UP
SKP11 LJM RET1 RETURN
BSS 6
.OSKRL EQU *
DBF SPACE 4,10
** DBF - DETERMINE BLOCK TYPE FORWARD.
*
* EXIT (A) = (T7) = 0, IF TERMINATION MET.
* (T2) = TERMINATION STATUS.
*
* USES BL, BL+1, T1, T2, T7.
*
* CALLS *CRE*, IDF, *REM*, UBW, VDA.
*
* MACROS CALL.
DBF SUBR ENTRY/EXIT
LDM BUF-1,BY SAVE LEVEL NUMBER
DBFA EQU *-2
* LDM BUFB+4 (LI FORMAT)
STM IDFC
DBFB RJM VDA VALIDATE DATA I FORMAT
* PSN ALL OTHER FORMATS
* PSN
LDD EP
LPN 77
SHN 14
LMD EC
ZJN DBF5 IF NO ERROR
LMN /MTX/BEI
NJN DBF2 IF NOT TAPE MARK
LDN 1 SET TAPE MARK INDICATION
DBF1 STM UBWB
DBFC EQU *-2
* UJN DBF5 (CTS)
RJM UBW UPDATE BID WINDOW
UJN DBF5 SKIP ERROR PROCESSOR CALL
DBF2 LMN /MTX/STE&/MTX/BEI
NJN DBF3 IF NOT STATUS ERROR
DBFD UJN DBF3 PROCESS ERRORS
* LDN 4 (PO=N OR MTX/ATS SKIPEI OR POSMF)
UJN DBF1 SET UNUSABLE BID
DBF3 UJN DBF4 LOAD READ ERROR PROCESSOR
DBFE EQU *-1
* AOD BL+1 INCREMENT BLOCK COUNT (SKIP BACK)
SHN -14
RAD BL
DBFF BSS 0
* CALL CRE LOAD ERROR PROCESSOR (CTS)
DBF4 CALL REM LOAD READ ERROR PROCESSOR
UJN DBF5 FORWARD SKIP
* SOD BL+1 (REVERSE SKIP - DECREMENT BLOCK COUNT)
DBFG EQU *-1
PJN DBF5 IF NO UNDERFLOW
AOD BL+1
SOD BL
DBF5 RJM IDF PROCESS INTERNAL DATA FORMAT
STD T2 SAVE STATUS
LDD MD
DBFH LPN 10 (S, L, F FORMAT)
* LPN 14 (I, SI, LI FORMAT)
ZJN DBF6 IF PRU OPERATION
STD T1
LDD T2 DETERMINE IF TERMINATION MET
SBD T1
MJN DBF6 IF TERMINATION NOT MET
LDD T1
LMN 4
NJN DBF6 IF NOT EOR
LDM LNUM
DBFI SBN 0 LEVEL NUMBER
DBF6 SHN -21 SET TERMINATION FLAG
STD T7
LJM DBFX RETURN
DBR SPACE 4,10
* THE FOLLOWING CODE GETS OVERLAID IF NOT USING READ REVERSE.
* ISMT GCR, CTS, AND LI FORMAT DO NOT USE READ REVERSE.
.DBRR EQU *
** DBR - DETERMINE BLOCK TYPE REVERSE.
*
* USES CM - CM+4.
*
* CALLS DBF.
DBR2 RJM DBF DETERMINE BLOCK TYPE FORWARD
DBR SUBR ENTRY/EXIT
DBRA UJN DBR2 DETERMINE BLOCK TYPE
* LDD BY (USING READ REVERSE)
ZJN DBR2 IF NO DATA READ
* THE FOLLOWING CODE GETS OVERLAID IF 9 TRACK SI
* FORMAT SKIP REVERSE OPERATION OR IF MTS 9 TRACK, I
* FORMAT SKIP REVERSE.
.DBRO EQU * BEGINNING OF OVERLAID AREA
LDC BUF
STM DBRC
LDD WC
LPN 1
DBRB UJN DBR1 DO NOT SKIP FIRST BYTE
* ZJN DBR1 (9 TRACK I FORMAT - IF EVEN WORD COUNT)
AOM DBRC SKIP FIRST BYTE (I FORMAT)
DBR1 LDD MA SAVE FIRST FOUR BYTES
CWM BUF,ON
DBRC EQU *-1
SBN 1
CRD CM
LDD CM STORE LAST FOUR BYTES
STM BUF-1,BY
LDD CM+1
STM BUF-2,BY
LDD CM+2
STM BUF-3,BY
LDD CM+3
STM BUF-4,BY
LJM DBR2 DETERMINE BLOCK TYPE FORWARD
.DBROL EQU *-.DBRO LENGTH OF OVERLAID AREA
.DBRRL EQU *-.DBRR LENGTH OF OVERLAID AREA
IDF SPACE 4,10
** IDF - PROCESS INTERNAL DATA FORMAT.
*
* EXIT (A) = TERMINATION STATUS.
*
* CALLS CFP.
IDF2 LDN 17 SET LEVEL 17
STM LNUM
LDN 14 RETURN EOI
IDF SUBR ENTRY/EXIT
LDD EC
LMN /MTX/BEI
ZJN IDF2 IF TAPE MARK
LDD BY
ADC 0
IDFE EQU *-1 (LI FORMAT CHUNK COUNT)
ZJN IDF2 IF NO BYTES READ
LMM /READ/MRDA
IDFA EQU *-1
* RJM CFP (LI FORMAT)
* LMM /READ/RCTA (CTS)
LMN 1
STM LNUM SET 0 LEVEL NUMBER
IDFB ZJN IDFX IF FULL PRU
* PSN (NOT I/SI/LI FORMAT)
LDC * EXTRACT LEVEL NUMBER
IDFC EQU *-1
LPN 77
IDFD LDN 0 (NOT I/SI/LI FORMAT)
* PSN (I/SI/LI FORMAT)
STM LNUM
LMN 17
ZJN IDF1 IF EOF
LCN 4
IDF1 ADN 10
UJN IDFX RETURN
VDA SPACE 4,10
** VDA - VALIDATE DATA.
* CHECKS I FORMAT TRAILER BYTES OR LI FORMAT PREFIX BYTES.
* IF LI FORMAT, *VDA* IS OVERLAYED WITH *VLI*.
VDA SUBR ENTRY/EXIT
LDD BY
ZJN VDAX IF NO DATA READ
LDD EC
ZJN VDA1 IF NO PREVIOUS ERRORS ENCOUNTERED
LMN /MTX/STE
NJN VDAX IF NOT STATUS ERROR CODE
VDAA EQU *-1
* UJN VDAX (CTS)
LDM MTDS
LPC 7777
VDAB EQU *-1
* LPC 7077 (MTS UNIT)
NJN VDAX IF ERRORS REPORTED FROM HARDWARE
VDA1 LDD EP
SHN 21-12
MJN VDAX IF OPPOSITE PARITY BEING TRIED
LDM BUF-4,BY SAVE BLOCK LENGTH
STM //BNEI
LDM BUF-3,BY
STM //BNEI+1
LMD BL
SHN 14
LMM BUF-2,BY
STM //BNEI+2
LMD BL+1
ZJN VDA2 IF BLOCK NUMBER CORRECT
LDN /MTX/BNE
STD EC
VDA2 LJM VDAX RETURN
SPACE 4,10
BUFFER
BSS 7 SO *VLI* DOES NOT OVERFLOW
VDAL EQU *-VDAX LENGTH OF *VDA*
CFP SPACE 4,10
** CFP - CHECK FULL PRU FOR LI FORMAT.
*
* ENTRY (BUFB - BUFB+4) = LI FORMAT BLOCK PREFIX.
*
* EXIT (A) = 1 IF FULL PRU.
CFP SUBR ENTRY/EXIT
LDM BUFB GET BYTE COUNT
SHN 14
ADM BUFB+1
ADC -50005+1 CHECK FULL PRU
UJN CFPX RETURN
SLB SPACE 4,10
** SLB - SKIP LONG BLOCK.
* THIS CODE IS OVERLAYED WITH *SLI* FOR LI FORMAT.
*
* ENTRY AT *SLB* FROM *MRD* OR *RCT* WHEN *LBBY* BYTES HAVE
* BEEN READ.
*
* USES T2.
SLB PSN MAKE ROUTINE AS LONG AS *SLI*
LDN 2 INPUT 2 BYTES
IAM BUFB,CH
LCN 0
STD T2
SLB1 LDC 400 INPUT DATA
IAM BUFB,CH
NJN SLB3 IF END OF BLOCK
SOD T2
NJN SLB1 IF NOT BLOCK TOO LONG
SLBL EQU *-SLB LENGTH OF CODE THAT CAN BE OVERLAYED
SLB2 LJM /READ/MRD4.1 SET BLOCK TOO LARGE
SLBA EQU *-1
* LJM /READ/RCT4 (CTS)
SLB3 LJM /READ/MRD4 CALCULATE REMAINDER OF CM WORD COUNT
SLBB EQU *-1
* LJM /READ/RCT5 (CTS)
SPACE 4,10
BUFFER BUFB
SKR SPACE 4,10
** SKR - SKIP REVERSE.
* THE FOLLOWING CODE OVERLAYS *SKP* IF THE OPERATION IS
* SKIP REVERSE.
*
* EXIT TO *RET1* IF NORMAL COMPLETION.
* TO *RET2* TO REQUEUE.
*
* CALLS BKS, DBF, DBR, /READ/RDF, UAD.
.BSKR BSS 0
LOC .OSKR
SKR4 UJN SKR5 NOT SI FORMAT, 9/18 TRACK
SKRA EQU *-1
* LDD ES (9/18 TRACK SI FORMAT)
LPN 40
ZJN SKR5 IF NO FILL STATUS
SOD BY ADJUST BYTE COUNT
SOD WC ADJUST WORD COUNT
SKR5 SOD BL+1 DECREMENT BLOCK COUNT
PJN SKR6 IF NO UNDERFLOW
AOD BL+1
SOD BL
SKR6 RJM DBR DETERMINE BLOCK TYPE REVERSE
SKRB EQU *-1
* RJM DBF (GCR ISMT OR CTS)
SKRC PSN
PSN
* RJM BKS (GCR ISMT OR CTS)
LDD MD
SHN 21-11
MJN SKR7 IF NOT FIRST PASS
LDD TH SET NOT FIRST PASS FLAG
RAD MD
UJN SKR8 CHECK FOR DROP OUT
SKR7 AOD BT INCREMENT BLOCKS TRANSFERRED
AOD CN+4 INCREMENT BLOCKS SKIPPED
RJM UAD
ADN /MTX/UBLC
CWD CN
LDD T7
NJN SKR8 IF TERMINATION NOT MET
LDD PA CHECK SKIP TERMINATION
SHN 14
ADD PB
SBN 1
ZJN SKR9 IF END OF SKIP
STD PB UPDATE SKIP COUNT
SHN -14
STD PA
SKR8 LDD CN+4
ADC -SBLK
MJN SKR11 IF NOT TIME TO CHECK ERROR FLAG
LDD TH SET CHECK ERROR FLAG INDICATOR
RAD PA
LDD T7
ZJN SKR2.1 IF TERMINATION MET
AOD MD SET NOT END OF RECORD FLAG
UJN SKR2.1 RETURN STATUS TO *MAGNET*
SKR9 LDD MD CLEAR REVERSE AND RECORD FLAGS
LPC 3763
STD MD
* LDN 1 SET TO SKIP FORWARD ONE BLOCK
* STD PB
* LDN 0
* STD PA CLEAR PARAMETER
SKR10 LJM RET2 REQUEUE
SKR11 LDD DF CHECK DROP OUT FLAG
NJN SKR10 IF DROP OUT SET
SKR BSS 0 ENTRY
LDD BL
ADD BL+1
NJN SKR3 IF NOT BOI
LDD MD
SHN 21-11
PJN SKR1 IF FIRST PASS
LDD PA
SHN 14
ADD PB
LMN 1
ZJN SKR2 IF END OF SKIP
SKR1 LDN 50
SKR2 ADN 1
STD PB
LDN 0
STD PA
SKR2.1 LJM RET1 RETURN
SKR3 PSN
PSN
* RJM BKS (GCR ISMT OR CTS)
LDN 0
STM IDFE CHUNKS TRANSFERRED FOR LI FORMAT
LJM /READ/RDF READ TAPE (RETURN AT *SKR4)
ERRNG .OSKRL-* OVERLAID CODE OVERFLOWED
LOC *O
.BSKRL EQU *
PRS SPACE 4,10
** PRS - PRESET.
* ISMT GCR AND CTS HARDWARE CAN NOT DO READ BACKWARDS. READ
* BACKWARDS MUST BE REPLACED BY BACKSPACE BLOCK, READ FORWARD,
* BACKSPACE BLOCK.
*
* EXIT (/READ/ISKR) = 0 IF USING READ REVERSE FOR SKIP
* REVERSE.
* TO *SKP* IF SKIP FORWARD.
* TO *SKR* IF SKIP REVERSE.
*
* USES T1, T2, CN - CN+4.
*
* CALLS DTS, MCH, UAD.
PRS LDN 0 CLEAR READ BACKWARDS FLAG
STM /READ/ISKR
LDD HP
SHN 21-7
PJP PRS1 IF NOT CTS
LDC LDNI+CRE/10000
STM DBFF LOAD CTS ERROR PROCESSOR
LDC /READ/RCTA
STM PRSD ADDRESS OF BYTE COUNT TO INPUT
STM PRSE
STM IDFA
LDC /READ/RCTB
STM PRSF ADDRESS OF INPUT ADDRESS
LDC /READ/RCTC
STM PRSG
ISTORE DBFC,(UJN DBF5) SKIP UPDATING BLOCK ID WINDOW
LDC UJNI-NJNI
RAM VDAA SKIP CHECKING ATS STATUS
LDC /READ/RCT4
STM SLBA SET BLOCK TOO LARGE
LDC /READ/RCT5
STM SLBB CALCULATE REMAINDER OF CM WORD COUNT
LDC /READ/RCTG
STM PRSA
LDD FM
SHN -6
LMN /MTX/TFLI
NJN PRS1 IF NOT LI FORMAT
LDC STMI
STM /READ/RCTM CLEAR CHUNK COUNTER
PRS1 LDD FM
SHN -6
LMN /MTX/TFI
NJN PRS2 IF NOT I FORMAT
LDC UJNI+2 DO NOT PROCESS DATA
STM /READ/MRDH
PRSA EQU *-1
* STM /READ/RCTG (CTS)
LDD HP
LPN 40
ZJN PRS2 IF NOT MTS UNIT
LDC 7077
STM VDAB
PRS2 LDC LJMI
STM /READ/RDFC
LDC SKP2
STM /READ/RDFC+1
LDD PA INSURE CHECK ERROR FLAG BIT IS CLEAR
LPN 77
STD PA
LDD MD
SHN 21-13
MJN PRS5 IF REVERSE MOTION
LDD MD CHECK IF SKIP TO EOI
LPN 14
NJN PRS3 IF NOT PRU SKIP
STM SKPE DO NOT SET EOR/EOF STATUS
LDC LDNI
STM SKPD
UJN PRS4 CONTINUE PRESET
PRS3 LMN 14
NJN PRS4 IF NOT SKIPEI
AOM PRSH SET SKIPEI OR POSMF IN PROGRESS
ISTORE DBFD,(LDN 4) SET UNUSABLE BID IF ERROR
PRS4 LJM PRS18 CONTINUE PRESET
PRS5 LDC .BSKRL-.BSKR-1
STD T1
PRS6 LDM .BSKR,T1 REVERSE MOTION CODE
STM .OSKR,T1
SOD T1
PJN PRS6 IF MORE CODE TO MOVE
LDC .BKSML-1
STD T1
LDD HP
SHN 21-7
PJN PRS7 IF NOT CTS
LDC /PRESET/GPS
STM BKSA-.DBRR+.BKSM
STM BKSD-.DBRR+.BKSM
LDC MJNI+77+BKS0-BKSB (MJN BKS0)
STM BKSB-.DBRR+.BKSM
LDC UJNI+2
STM BKSC-.DBRR+.BKSM
STM BKSF-.DBRR+.BKSM
LDC MJNI+77+BKS1-BKSE (MJN BKS1)
STM BKSE-.DBRR+.BKSM
UJN PRS9 INDICATE NOT USING SKIP REVERSE
PRS7 SHN 21-10-21+7+22
MJN PRS8 IF 639 TAPE CONTROLLER
LDD FM
SHN -6
SBN /MTX/TFLI
NJP PRS11 IF NOT LI FORMAT
UJN PRS9 INDICATE NOT USING READ REVERSE
PRS8 LDM //RELA
ZJN PRS9 IF UNIT NOT CONNECTED, ASSUME GCR
RJM DTS GET UNIT STATUS
LDM ATUS CHECK DENSITY
LPN 30
LMN 30
NJN PRS11 IF NOT GCR
PRS9 AOM /READ/ISKR INDICATE NOT USING READ REVERSE
LDC RJMI SET UP *RJM BKS*
STM SKR3
STM SKRC
LDC BKS
STM SKR3+1
STM SKRC+1
LDC DBF
STM SKRB
PRS10 LDM .BKSM,T1
STM .DBRR,T1
SOD T1
PJN PRS10 IF MORE CODE TO MOVE
UJN PRS12 CHECK CONTROLLER TYPE
PRS11 LDC F0140 READ REVERSE
STM ITMA
PRS12 LDD HP
LPC 221
LMN 1
NJN PRS14 IF CTS/ATS-TYPE CONTROLLER OR 7 TRACK
LDD FM
SHN -6
LMN /MTX/TFI
NJN PRS14 IF NOT I FORMAT
LDN .DBRSL-1 SET LENGTH OF LEVEL NUMBER ROUTINE
STD T1
PRS13 LDM .DBRS,T1 MOVE CODE
STM .DBRO,T1
SOD T1
PJN PRS13 IF MORE CODE TO MOVE
LDC UJNI+PRS22-PRSB DISABLE INSTRUCTION MODIFICATION
ERRNG PRSB-PRS22+37B
STM PRSB
LDN 0 DESELECT VALIDATE DATA FOR I FORMAT
STM DBFB
STM DBFB+1
STM .DBRSB
PRS14 LDD HP
SHN 21-7
PJN PRS15 IF NOT CTS
LDC 6125
STM /PRESET/WFEA WAIT NOT BUSY MASK
UJN PRS16 CONTINUE PRESET
PRS15 LDC 4425
STM //WEOA
PRS16 LDC SKR4
STM /READ/RDFC+1
LDC SKRA SET TO MODIFY CORRECT INSTRUCTION
STM PRSC
LDC AODI+BL+1
STM DBFE
LDC SODI+BL+1
STM DBFG
LDD FM
SHN -6
SBN /MTX/TFSI+1
PJN PRS18 IF NOT I OR SI FORMAT
LDM /READ/ISKR
NJN PRS18 IF NOT USING READ REVERSE
LDC LDDI+BY SET TO SET LEVEL NUMBER
STM DBRA
PRS18 LDM LNUM SET LEVEL NUMBER
SHN -10
RAM DBFI
LDM CIOE
LPC 774
LMN 20
NJN PRS19 IF NOT READSKP
STM SKPE RETURN 31 STATUS IF EOF READ
PRS19 LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN PRS20 IF I OR SI FORMAT
SBN /MTX/TFLI-/MTX/TFSI-1
NJP PRS23 IF NOT LI FORMAT
LDC RJMI
STM IDFA-1
LDC CFP CHECK FOR FULL PRU
STM IDFA
LDC LDMI
STM DBFA GET LEVEL NUMBER
LDC BUFB+4
STM DBFA+1
PRS20 LDN 0 SET I/SI/LI FORMAT LEVEL NUMBER CHECK
STM IDFD
LDN 4
RAM DBFH
LDD FM
SHN -6
LMN /MTX/TFSI
ZJN PRS23 IF SI FORMAT
PRSB LDD HP
* UJN PRS22 (MTS CONTROLLER REVERSE SKIP)
SHN 21-7
MJN PRS21 IF CTS
SHN 21-0-21+7
PJN PRS22 IF 7 TRACK
PRS21 LDM /READ/ISKR
NJN PRS22 IF NOT USING READ REVERSE
LDC ZJNI-UJNI
RAM DBRB
PRS22 UJN PRS24 COMPLETE PRESET
PRS23 LDN 0
STM DBFB
STM DBFB+1
LDD FM
SHN -6
LMN /MTX/TFSI
ZJN PRS25 IF SI FORMAT
PRS24 LJM PRS28 COMPLETE PRESET
PRS25 LDD HP
LPN 1
ZJN PRS28 IF 7 TRACK
LDC LDDI+ES SET TO CHECK FOR FILL STATUS
STM SKPA
* STM SKRA (SKIP REVERSE)
PRSC EQU *-1
LDD MD
SHN 21-13
PJN PRS28 IF SKIP FORWARD
LDM /READ/ISKR
NJN PRS28 IF NOT USING READ REVERSE
LDN .DBRML LENGTH OF ATS LEVEL NUMBER ROUTINE
STD T1
LDD HP
LPN 40
ZJN PRS26 IF NOT MTS CONTROLLER
LDN .DBRSL-1 SET LENGTH OF MTS LEVEL NUMBER ROUTINE
STD T1
LDN .DBRS-.DBRM
PRS26 ADC .DBRM
ADD T1 ADD LENGTH
STD T2
PRS27 LDI T2 MOVE CODE
STM .DBRO,T1
SOD T2
SOD T1
PJN PRS27 IF MORE CODE TO MOVE
PRS28 LDD PA
ADD PB
NJN PRS29 IF SKIP COUNT SPECIFIED
AOD PB
PRS29 LDD MD
SHN 21-13
MJN PRS32 IF SKIP REVERSE
LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN PRS31 IF I/SI FORMAT
SBN /MTX/TFLI-/MTX/TFSI-1
ZJN PRS31 IF LI FORMAT
LDD LT
SHN 21-12
PJN PRS32 IF NOT LABELED
LDC RJMI SET *RJM SLL* TO DECREMENT SKIP COUNT
STM SKP4
LDC SLL
STM SKP4+1
LDN .DBSLL-1 SET LENGTH OF *SLL* SUBROUTINE
STD T1
PRS30 LDM .DBSL,T1 MOVE CODE
STM .DBRO,T1
SOD T1
PJN PRS30 IF MORE CODE TO MOVE
PRS31 LDC NJNI-UJNI
RAM SKPB
PRS32 LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN PRS33 IF I OR SI FORMAT
SBN /MTX/TFLI-/MTX/TFSI-1
ZJN PRS33 IF LI FORMAT
LDN 0 SET TO ALWAYS RETURN EOR
STM IDFB
LDC 5001 SET MAXIMUM BLOCK LENGTH
STM /READ/MRDA
PRSD EQU *-1
* STM /READ/RCTA (CTS)
PRS33 LDD FM
SHN -6
SBN /MTX/TFL
ZJN PRS35 IF L FORMAT
SBN /MTX/TFLI-/MTX/TFL
NJN PRS34 IF NOT LI FORMAT
LDC SLBY CHUNK LENGTH FOR SKIPPING IN LI FORMAT
UJN PRS36 SET LENGTH OF LAST INPUT
PRS34 LDD OV
ZJN PRS37 IF NOT POSSIBLE LONG BLOCKS
LDD FM
SHN -6
LMN /MTX/TFF
NJN PRS37 IF NOT F FORMAT
PRS35 LDC LBBY SET UP FOR LONG BLOCKS
PRS36 STM /READ/MRDA
PRSE EQU *-1
* STM /READ/RCTA (CTS)
LDC BUFB
STM /READ/MRDB
PRSF EQU *-1
* STM /READ/RCTB (CTS)
LDC SLB
STM /READ/MRDC
PRSG EQU *-1
* STM /READ/RCTC (CTS)
PRS37 LDC PRSI MODIFY CHANNELS
RJM MCH
PRSH LDN 0 SET SKIP STATUS
* LDN 1 (SKIPEI OR POSMF OPERATION)
STM /READ/SKEI
LDD SP SET PO=N FLAG
LPN 2
ZJN PRS38 IF NOT PO=N OPTION
ISTORE DBFD,(LDN 4) SET UNUSABLE BID IF ERROR
PRS38 LDD FM
SHN -6
SBN /MTX/TFLI
NJN PRS41 IF NOT LI FORMAT
LDK .SLIL-1 LENGTH OF CODE TO MOVE - 1
STD T1
PRS39 LDM .SLI,T1 REPLACE *SLB* WITH *SLI*
STM SLI,T1
SOD T1
PJN PRS39 IF MORE CODE TO MOVE
LDC SLIA
RJM MCH MODIFY CHANNELS FOR *SLI*
LDK .VLIL-1
STD T1 LENGTH OF CODE TO MOVE - 1
PRS40 LDM .VLI,T1 REPLACE *VDA* WITH *VLI*
STM VLIX,T1
SOD T1
PJN PRS40 IF MORE CODE TO MOVE
PRS41 LDC PRS42 SET TO RETURN
STD BT
LJM PRSX RETURN
PRS42 RJM UAD READ BLOCK ACCUMULATOR
ADN /MTX/UBLC
CRD CN
LDD MD
SHN 21-13
MJP SKR IF SKIP REVERSE
LJM SKP SKIP FORWARD
PRSI CHTB
SPACE 4,10
* THE FOLLOWING CODE GETS MOVED TO .DBRO IF 9 TRACK
* SI FORMAT SKIP REVERSE ON ATS CONTROLLER.
.DBRM BSS 0 ATS CONTROLLER ROUTINE
LOC .DBRO
LDD MA READ FIRST WORD FROM BUFFER
CWM BUF,ON
SBN 1
CRD CM
LDD WC
LPN 1
ZJN .DBRM1 IF EVEN WORD COUNT
LDN 73 SET FOR SHN -4 INSTRUCTION
.DBRM1 ADC SHNI
STM .DBRMA
LDD CM SAVE LEVEL NUMBER
.DBRMA SHN **
* SHN 0 (EVEN WORD COUNT)
* SHN -4 (ODD WORD COUNT)
LPN 17
STM BUF-1,BY
LJM DBR2 DETERMINE IF TERMINATION MET
LOC *O
.DBRML EQU *-.DBRM LENGTH OF ATS ROUTINE
ERRMI .DBROL-.DBRML OVERLAID CODE OVERFLOWED
* THE FOLLOWING CODE GETS MOVED TO .DBRO IF 9 TRACK
* I/SI FORMAT SKIP REVERSE ON MTS CONTROLLER.
.DBRS BSS 0 MTS ROUTINE
LOC .DBRO
LDD WC SET BYTE TO START READ
LPN 1
LMN 1
STD T1
ADC BUF
STM .DBRSA
LDD MA SAVE FIRST WORD
CWM *,ON
* CWM BUF,ON (ODD WORD COUNT)
* CWM BUF+1,ON (EVEN WORD COUNT)
.DBRSA EQU *-1
SBN 1
CRD CM
LDD T1
.DBRSB ZJN .DBRS1 IF ODD WORD COUNT
* PSN (I FORMAT - ALWAYS SHIFT -10)
LDN 67 SET FOR SHN -10
.DBRS1 ADC SHNI
STM .DBRSC
LDD CM SAVE LEVEL NUMBER
.DBRSC SHN **
* SHN 0 (ODD WORD COUNT)
* SHN -10 (EVEN WORD COUNT)
LPN 17
STM BUF-1,BY
LJM DBR2 DETERMINE IF TERMINATION MET
LOC *O
.DBRSL EQU *-.DBRS LENGTH OF OVERLAID CODE
ERRMI .DBROL-.DBRSL OVERLAID CODE OVERFLOWED
SLL SPACE 4,10
** SLL - SKIP COUNT MODIFIER FOR S, L FORMATS.
*
* THE FOLLOWING CODE GETS MOVED TO .DBRO IF S, L FORMAT ON A
* LABELED TAPE.
.DBSL BSS 0
LOC .DBRO
SLL SUBR ENTRY/EXIT
LDD PA
SHN 14
ADD PB
ZJN SLLX IF END OF SKIP
SBN 1 DECREMENT SKIP COUNT
STD PB
SHN -14
STD PA
UJN SLLX RETURN
LOC *O
.DBSLL EQU *-.DBSL LENGTH OF S, L FORMAT LABELED ROUTINE
ERRMI .DBROL-.DBSLL OVERLAID CODE OVERFLOWED
BKS SPACE 4,10
** BKS - BACKSPACE TAPE.
* WAIT BACKSPACE FUNCTION COMPLETE. FOR ISMT THE TIMEOUT IS
* APPROXIMATELY 25 FEET OF TAPE.
*
* THE FOLLOWING CODE GETS MOVED TO *.DBRR* IF NOT USING READ
* REVERSE. ISMT GCR, CTS, AND LI FORMAT DO NOT USE READ
* REVERSE.
*
* EXIT (DS) = GENERAL STATUS.
*
* CALLS FCN, /PRESET/GPS, STW.
.BKSM BSS 0
LOC .DBRR
BKS2 CON 0 ENTERED VIA *RJM* FROM //STW
SOD T2
NJN BKS1 IF NOT TIMEOUT
LDC ERR RESET ERROR EXIT
STM STWC
UJN BKS1 ATTEMPT 1 MORE TIME
BKS SUBR ENTRY/EXIT
BKS0 LDN 2 WAIT NOT BUSY
RJM STW
BKSA EQU *-1
* RJM /PRESET/GPS GET AND PROCESS GENERAL STAUS (CTS)
PSN 0
BKSB EQU *-1
* MJN BKS0 IF COMMAND RETRY (CTS)
LDC F0113 BACKSPACE
RJM FCN
LDN 27
STD T2
LDC BKS2 SET RETURN ON TIMEOUT FROM //STW
STM STWC
BKSC EQU *-2
* UJN *+2 DO NOT CHANGE STWC (CTS)
BKS1 LDN 2 WAIT NOT BUSY
RJM STW
BKSD EQU *-1
* RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS (CTS)
PSN
BKSE EQU *-1
* MJN BKS1 COMMAND RETRY (CTS)
LDC ERR RESET ERROR EXIT
STM STWC
BKSF EQU *-2
* UJN *+2 DO NOT STORE INTO STWC (CTS)
UJN BKSX RETURN
LOC *O
.BKSML EQU *-.BKSM
ERRMI .DBRRL-.BKSML OVERLAID CODE OVERFLOW
SLI SPACE 4,15
** SLI - SKIP LI FORMAT BLOCK.
* NOTE THAT THE MAXIMUM BLOCK SIZE IS DATA (2400*20) PLUS
* PREFIX (5) PLUS PAD (1). THIS ROUTINE OVERLAYS *SLB*
* FOR LI FORMAT.
*
* ENTRY AT *SLI* FROM *MRD* OR *RCT* (FOR CTS) WHEN *SLBY*
* BYTES HAVE BEEN READ.
* (IDFE) = 0.
*
* EXIT (IDFE) = CHUNK COUNT READ.
* TO *SLB2* IF BLOCK TOO LONG.
* TO *SLB3* IF END OF BLOCK.
.SLI BSS 0
LOC SLB
SLI LDN 7
IAM BUFB+5,CH
SLI1 AOM IDFE
LMN 20
ZJN SLB2 IF BLOCK TOO LONG
LDC SLBY
IAM BUFB+5,CH
ZJN SLI1 IF NOT END OF BLOCK
UJN SLB3 END OF BLOCK
LOC *O
.SLIL EQU *-.SLI LENGTH OF CODE TO MOVE
ERRMI SLBL-.SLIL IF CODE OVERFLOWS
SLIA CHTB CHANNEL TABLE
VLI SPACE 4,10
** VLI - VALIDATE LI FORMAT PREFIX.
* THIS ROUTINE OVERLAYS *VDA* FOR LI FORMAT.
*
* ENTRY (BY) = BYTES READ IN LAST CHUNK.
* (IDFE) = FULL CHUNKS READ.
.VLI BSS 0
LOC VDAX
VLI SUBR ENTRY/EXIT
LDD BY BYTES IN LAST CHUNK
ADM IDFE
ZJN VLIX IF NO DATA READ
LDD EC
ZJN VLI1 IF NO PREVIOUS ERRORS ENCOUNTERED
LMN /MTX/STE
NJN VDAX IF NOT STATUS ERROR CODE
VLIA EQU *-1
* UJN VLIX (CTS)
LDM MTDS
NJN VLIX IF ERRORS REPORTED FROM HARDWARE
VLI1 LDM IDFE
NJN VLI2 IF PREFIX WAS READ
LDD BY
SBN 5
MJN VLI3 IF NO PREFIX
VLI2 LDM BUFB+1 SAVE BLOCK LENGTH
STM //BNEI
LDM BUFB
STM //BNEU
LDM BUFB+2 SAVE BLOCK NUMBER
STM //BNEI+1
LMD BL
SHN 14
LMM BUFB+3
STM //BNEI+2
LMD BL+1
ZJN VLI4 IF BLOCK NUMBER CORRECT
VLI3 LDN /MTX/BNE
STD EC
VLI4 LJM VLIX RETURN
LOC *O
.VLIL EQU *-.VLI LENGTH OF CODE TO MOVE
ERRMI VDAL-.VLIL IF CODE OVERFLOWS
OVERLAY (MTS/ATS READ ERROR PROCESSOR.),(BUFB+5),P
REM SPACE 4,20
** REM - READ ERROR PROCESSOR.
* FIRST PART OF CODE USED AS A BUFFER.
*
* ENTRY (EP, 12) = OPPOSITE PARITY MODE.
* (EP, 11) = LOAD POINT ERROR FLAG.
* (EP, 10 - 6) = CLIPPING LEVEL.
* (EP, 5 - 0) = REENTRY CODE.
* (EP+1, 13 - 11) = CLIPPING LEVEL BEING TRIED.
* (EP+1, 10 - 6) = RETRY COUNT.
* (EP+1, 5 - 3) = NORMAL PARITY REREAD COUNT.
* (EP+1, 2 - 0) = OPPOSITE PARITY REREAD COUNT.
*
* EXIT (A) = 0.
*
* CALLS BKS, CFC, EBW, *EMM*, EOT, LPR, MCH, PNE, POT,
* PRS, PTM, RDA.
*
* MACROS CALL.
* THE FOLLOWING CODE IS OVERLAID BY IN POINTERS AND
* TEMPORARY STORAGE AFTER PRESET.
ENTRY REM
REM SUBR ENTRY
LDM //LOV SAVE CALLERS EXIT ADDRESS
STM REMH
LDC REM1 SET ADDRESS TO ENTER AT
STM //LOV
UJN REMX RETURN
REM1 LDD MA SAVE IN POINTER
CWD CN
CRM INPA,ON
LDC CTAB MODIFY CHANNELS
RJM MCH
LDM ITMA SET BACKSPACE/FORESPACE FUNCTION
LPC 100
LMC F0113
STM BKSA
RJM PRS PRESET INSTRUCTIONS
RJM EBW EVALUATE BID WINDOW
RJM CFC RECONNECT UNIT
LDM //STER RESTORE STATUS
STD DS
LPN 1
NJN REM2 IF READY
LDN /MTX/RDR SET NOT READY
STD EC
UJN REM2.1 NO LOAD POINT RECOVERY IF NOT READY
REM2 RJM LPR CHECK FOR LOAD POINT RECOVERY
* UJN REM2.1 (NOT ATS CONTROLLER)
REMK EQU *-2
MJN REM2.1 IF NO LOAD POINT ERROR OR ERROR RECOVERED
CALL EMM ISSUE MESSAGE
LDN 0
STD EC
AOD EI
LJM RET2 RETRY ON *BFR* ERROR
REM2.1 RJM PNE PROCESS NOISE ERRORS
LDD EC
LMN /MTX/BEI
NJN REM3 IF NOT TAPE MARK
LDD EP
SHN 21-12
MJN REM6 IF OPPOSITE PARITY
RJM PTM PROCESS TAPE MARK
UJN REM5 SET TO ACCEPT DATA AS WRITTEN
REM3 LMN /MTX/STE&/MTX/BEI
ZJN REM4 IF STATUS ERROR
LJM REM9 CHECK FOR ERROR PROCESSING INHIBITED
REM4 LDD DS
SHN 21-3
PJN REM6 IF NOT EOT
SHN 22+3-13
MJN REM6 IF OTHER ERRORS
RJM EOT PROCESS END OF TAPE
REM5 AOM REMI SET TO ACCEPT DATA AS WRITTEN
LJM REM16 POSITION TAPE
REM6 LDD DS
SHN 21-13
PJN REM9 IF NO ALERT
LDM MTDS
LPC 7077
REMA EQU *-1
* LPC 7777 (ATS UNIT)
NJN REM8 IF NO CORRECTED ERROR
LDM MTDS+3
REMB EQU *-1
* LDM MTDS+1 (ATS UNIT)
REMC SHN -13
* SHN -11 (ATS UNIT)
LPN 3
ZJN REM8 IF NOT CORRECTED ERROR
LDN /MTX/OTF SET ON-THE-FLY ERROR
REM7 STD EC
AOM REMI SET ACCEPT DATA
UJN REM9 CHECK FOR ERROR PROCESSING INHIBITED
REM8 LDM MTDS
LMN 16
REME ZJN REM7 IF AGC FAILURE
* PSN (MTS UNIT)
LMN 10&16
NJN REM9 IF NOT BLANK TAPE
LDN /MTX/BTA
STD EC
REM9 LDD SP
LPN 4
ZJN REM12 IF ERROR PROCESSING NOT INHIBITED
REM10 STM REMI SET ACCEPT DATA FLAG
LDN 4 SET UNUSEABLE BID
STM REMF
LDD EC
LMN /MTX/BTL
NJN REM11 IF NOT *BLOCK TOO LARGE*
RJM BKS INSURE POSITIONED AFTER BAD BLOCK
RJM RDA SKIP BLOCK
REM11 UJN REM15 SKIP MESSAGE ISSUE
REM12 LDD FN
LMN /MTX/SKP
NJN REM13 IF NOT SKIP OPERATION
LDM /READ/SKEI
NJN REM10 IF SKIPEI OF POSMF
REML EQU *-1
* PSN (LI FORMAT)
REM13 LDD EC
ZJN REM16 IF NO ERROR
LDD FM
SHN -6
LMN /MTX/TFF
ADD EP
NJN REM14 IF NOT F FORMAT AND/OR NOT FIRST ATTEMPT
LDD HP
LPN 1
NJN REM14 IF 9 TRACK
SOM POTH SET TO ATTEMPT OPPOSITE PARITY
UJN REM15 CHECK FOR FATAL ERROR
REM14 RJM CIS CHECK ISMT GCR SKIP REVERSE
LDC -0 RESTORE BID
REMF EQU *-1
STM UBWB
CALL EMM DIAGNOSE ERROR
RJM CFC CONNECT IF NEEDED
REM15 LDD EC
SBN /MTX/BFAT
MJN REM16 IF NOT FATAL ERROR
SBN /MTX/MFAT-/MTX/BFAT
PJN REM16 IF NOT FATAL ERROR
LJM RET4 RETURN FATAL ERROR
REM16 RJM POT POSITION TAPE
REMG LDN 0
NJN REM17 IF ERROR RETURN
LJM *
REMH EQU *-1
REM17 LJM RET3 RETURN ERROR CODE
REMI CON 0 ACCEPT DATA FLAG
INPA EQU REMX IN POINTER FOR SUCCESSFUL READ
POTO EQU INPA+5 COUNT OF BLOCKS SKIPPED
POTP EQU POTO+1 (EP), (EP+1) ON ENTRY
POTQ EQU POTP+2 SAVE AREA FOR DETAILED STATUS
TBDW EQU POTQ+10 TEMPORARY BID WINDOW
EOT SPACE 4,10
** EOT - END OF TAPE PROCESSOR.
EOT1 LMN 2&1
NJN EOTX IF NOT DISCARD BLOCK AT EOT
EOT2 LDN /MTX/BEI RETURN END OF TAPE
RAM REMG
EOT SUBR ENTRY/EXIT
LDD SP
SHN -12
ZJN EOTX IF READ TO TAPE MARK
LMN 1
NJN EOT1 IF NOT ACCEPT BLOCK AT EOT
LDM /READ/STAP
SHN 21-3
PJN EOTX IF END OF TAPE ENCOUNTERED THIS BLOCK
UJN EOT2 RETURN END OF TAPE STATUS
PNE SPACE 4,20
** PNE - PROCESS NOISE ERRORS.
* ISSUE MESSAGE IF NOISE SKIPPED, ERROR PROCESSING NOT
* INHIBITED AND NOT A TAPE MARK.
*
* ENTRY (/READ/MRDP) .NE. 0 IF NOISE SKIPPED. (MTS)
* (MTDS+5, 8-5) = LENGTH OF LARGEST NOISE BLOCK. (MTS)
* (MTDS+6, 10) .NE. 0 IF NOISE SKIPPED. (ATS)
* (//STER) = (DS) = GENERAL STATUS FROM READ.
*
* EXIT (EC) = 0 IF NO ERRORS ON BLOCK FOLLOWING NOISE.
* MAXIMUM NOISE SIZE ALWAYS RETURNED FOR ATS.
*
* USES T0, T1.
*
* CALLS CFC, DTS, *EMM*.
*
* MACROS CALL.
PNE7 LDM MTDS+6
SHN 21-12
PJN PNEX IF NOISE NOT SKIPPED
LDD FM SET NOISE SIZE
LPN 37
LJM PNE2 ISSUE MESSAGE
PNE8 RJM DTS GET DETAILED STATUS
PNE SUBR ENTRY/EXIT
LDD SP
LPN 4
NJN PNEX IF ERROR PROCESSING INHIBITED
LDD DS CHECK FOR TAPE MARK
LPN 20B
NJN PNEX IF TAPE MARK, EXIT
LDD EC
ZJN PNE8 IF NOT POSSIBLE NOISE
LDD BY SAVE BYTE COUNT OF NEXT BLOCK
STM PNEB
LDD HP
LPN 20
NJN PNE7 IF ATS-TYPE CONTROLLER
LDM /READ/MRDP
ZJN PNEX IF NOISE NOT SKIPPED
LDM MTDS+5
SHN -4
LPN 37
ADN 1
STD T0 NUMBER OF FRAMES + 1
LDD HP
LPN 1
NJN PNE1 IF 9 TRACK
LDD T0 CONVERT FRAMES TO BYTES
SHN -1 (FRAMES+1)/2
UJN PNE2 SAVE BYTE COUNT OF LARGEST NOISE BLOCK
PNE1 LDD T0
SHN 1 2(FRAMES+1) = FR
* APPROXIMATE 1/3 OF FR.
SHN 2 4*FR
ADD T0 5*FR
SHN 2 20*FR
ADD T0 21*FR
SHN 14 (-6) (21*FR)/64
STD T1
SHN 6+2 4*21*FR (84*FR)
ADD T0 85*FR
ADD T1 (85*FR)+((21*FR)/64)
SHN -8D ((85*FR)+((21*FR)/64))/256
PNE2 STD BY BYTE COUNT OF LARGEST NOISE BLOCK
LDD EC SAVE ERROR CODE
STM PNED
LDD DS SAVE STATUS
STM PNEC
LDN /MTX/NBE SET NOISE ERROR CODE
STD EC
PNEA LDC 400
* UJN PNE3 (ATS UNIT)
STM //STER
PNE3 CALL EMM ISSUE MESSAGE
RJM CFC CONNECT IF NEEDED
LDC * RESET BYTE COUNT
PNEB EQU *-1
STD BY
LDC * RESET STATUS
PNEC EQU *-1
STM //STER
STD DS
LDC * CHECK IF OTHER ERRORS
PNED EQU *-1
STD EC
LMN /MTX/STE
NJN PNE6 IF ERRORS ON FOLLOWING BLOCK
LDM MTDS
LPC 7077
PNEE EQU *-1
* LPC 7777 (ATS UNIT)
NJN PNE5 IF OTHER ERRORS
STD EC CLEAR ERROR CODE
LDD DS CLEAR ALERT BIT
LPC 3777
STD DS
STM //STER
AOM REMI SET TO ACCEPT DATA
PNE4 LDC POT11 SET TO ISSUE RECOVERED MESSAGE
STM POTA
AOD EI INCREMENT ITERATION COUNT
PNE5 LJM PNEX RETURN
PNE6 LMN /MTX/BEI&/MTX/STE
NJN PNE5 IF NOT TAPE MARK
LDC LDNI+/MTX/BEI SET TO RETURN TAPE MARK IF READ LABELS
STM POTG
UJN PNE4 SET TO ISSUE MESSAGE
POT SPACE 4,15
** POT - POSITION TAPE.
*
* ENTRY TAPE IS POSITIONED AFTER THE BAD PRU.
* (EP) AND (EP+1) CONTAIN CURRENT RECOVERY CONDITIONS.
*
* EXIT (CN - CN+4) = CORRECT *IN* POINTER.
* TAPE IS POSITIONED BETWEEN LAST GOOD RECORD AND
* BAD PRU. (EP) AND (EP+1) CONTAIN NEXT RECOVERY
* CONDITIONS.
*
* CALLS BKS, CEC, CFC, CIF, CKR, *EMM*, FCN, HNG, ITM, POS,
* RDA, *RLA*, RSP, SCL, UBW, WIP.
*
* MACROS CALL.
POT SUBR ENTRY/EXIT
LDD EP+1 SAVE PARAMETERS FOR POSSIBLE RECOVERY
STM POTO+1
LDD EP
STM POTO
LPN 77
NJN POT1 IF NOT FIRST ENTRY
LDC 200 SET INITIAL RETRY COUNT TO 2
STD EP+1
* CHECK FOR LEGAL REENTRY CODE. SET RECOVERY PROCESS ADDRESS.
LDN 2
POT1 SBN 2
STD T1
SBN POTCL
PJN POT2 IF INCORRECT
LDD T1
LPN 1
ZJN POT3 IF VALID
POT2 RJM HNG HANG PP (NO RETURN)
* SET UP ERROR RECOVERY PROCESS.
POT3 LDM POTC,T1 SET PROCESSING ADDRESS
STM POTB STORE IN JUMP
LDM POTC+1,T1
STD SC
SHN 21-12
PJN POT4 IF NOT OPPOSITE PARITY MODE
LDC -2000 CLEAR OPPOSITE PARITY FLAG
RAD EP
POT4 LDM REMI
ZJN POT5 IF NOT ACCEPT DATA
LDM REMF UPDATE BID WINDOW
STM UBWB
RJM UBW
LDN 0 CLEAR ERROR CODE
STD EC
LJM POT13 CLEAR ERROR PARAMETER
* LJM POT11 (RECOVERED TAPE MARK OR NOISE)
POTA EQU *-1
* SET UP PRESET CONDITIONS AND JUMP TO ERROR PROCESSOR.
POT5 LDN ZERL PRESET CONDITIONS
CRD T4
LDD EC
STD T4
LMN /MTX/BEI
LJM * JUMP TO PROCESSOR
POTB EQU *-1 ADDRESS SET UP FROM TABLE *POTC*
** LIST OF RETURN PROCESSORS INDEXED BY REENTRY CODE (EP 5-0).
*
*T, 12/ ADDRESS,1/R,1/P
* R REVERSE DIRECTION MODE.
* P OPPOSITE PARITY MODE.
POTC BSS 0 LIST OF PROCESSORS INDEXED BY REENTRY CODE
LOC 0
CON POT17,0 EP 5-0 = 0 OR 2 CODE (0 = FIRST ENTRY)
CON POT23,0 EP 5-0 = 4 CODE
CON POT23,2000 EP 5-0 = 6 CODE
CON POT29,0 EP 5-0 = 10 CODE
CON POT34,0 EP 5-0 = 12 CODE
LOC *O
POTCL EQU *-POTC
* COMMON CODE FOR ALL ERROR PROCESSORS TO DO THE REREAD OF
* THE BAD PRU.
POT6 CON 0 RETURN ADDRESS OF ERROR PROCESSOR
STD T1 SAVE REENTRY CODE
POTD AOD EI INCREMENT ERROR ITERATION
* PSN (7 TRACK F FORMAT, FIRST RETRY)
LDD CP CHECK CONTROL POINT ERROR FLAGS
ADN STSW
CRD CM
LDD CM+1
LPN 37
SBN SPET
MJN POT7 IF NO ERROR *SPET* OR ABOVE
LDN /MTX/EFT SET ERROR FLAG TERMINATION
LJM RET3 RETURN FATAL ERROR
* FIND CURRENT REENTRY POINT. SET UP REENTRY CODE IN (EP 5-0).
POT7 LDD EP SET REENTRY CODE FOR RETURN
LPC 700
LMD T1
STD EP BITS 5 - 0 = REENTRY CODE, CLIPPING FLAGS
LDM POTC-1,T1 LOAD DIRECTION/PARITY FLAGS FROM TABLE
LPC 7000
RAD EP
LPC 7000
RAM POTE
LDD EP CHECK NEED TO TOGGLE PARITY FOR NEXT READ
SHN 21-12
PJN POT7.1 IF NOT OPPOSITE PARITY MODE
LDN 5 TOGGLE PARITY MODE FOR NEXT READ
RJM FCN FUNCTION TO TOGGLE ODD/EVEN PARITY MODE
POT7.1 LDC 0
POTE EQU *-1 DIRECTION/PARITY FLAGS (EP 11-10)
NJN POT8 IF CANNOT REQUEUE
LJM RET2 REQUEUE
* CHECK OPERATION AND REREAD PRU.
POT8 RJM RSP RESET PARAMETERS
LDD FN
LMN /MTX/RLA
NJN POT9 IF NOT READ LABELS
LDC /RLA/CLA4 SET TO RELOAD ERROR PROCESSOR
STM /READ/MRD
POT9 RJM CKR CHECK READY
LJM POT10
POTI EQU *-1
* LJM RLB (LONG BLOCK)
* LJM RLI (LI FORMAT)
POT10 LDC * RESET CORRECT READ FUNCTION
POTF EQU *-1
STM //ITMA
RJM ITM INITIATE TAPE MOTION
LJM /READ/MRD+1 RETURN TO READ DRIVER
* COMMON CODE IF NO ERROR OR ERROR HAS BEEN RECOVERED.
POT11 LDM POTO+1 RESTORE EP AND EP+1
STD EP+1
LDM POTO
STD EP
SHN -3 CHECK IF DIFFERENT CLIP LEVEL
LPN 70
ZJN POT12 IF NORMAL CLIP
* SET BLOCK ID TO INVALID WITH CLIP LEVEL IN BITS 5-3.
LMN 4 SET BLOCK RECOVERED AT ALTERNATE CLIP
STM BIDW,WP
LDN 0
POT12 STD EC
LDM REMF RESTORE BID
STM UBWB
LDM POTF RESET CORRECT READ FUNCTION
STM //ITMA
CALL EMM ISSUE RECOVERED MESSAGE
RJM CFC CONNECT IF NEEDED
POT13 LDN 0 CLEAR ERROR PARAMETER
STD EI
STD EP
STD EP+1
LDD FN
LMN /MTX/RLA
ZJN POT14 IF READ LABELS
RJM RSP RESET PARAMETERS FOR NEXT OPERATION
LDD MA RESTORE IN POINTER
CWM INPA,ON
LDD MA
CRD CN
LJM POTX RETURN
* RELOAD READ LABELS OVERLAY.
POT14 LDN 0 SET ERROR CODE
* LDN /MTX/BEI (RECOVERED TAPE MARK)
POTG EQU *-1
STD EC
POT15 LDM CECB
LPN 77
ZJN POT16 IF AT MAGNET CONTROL POINT
LDN 0 CHANGE TO MAGNET,S CP
RJM CEC
POT16 CALL RLA RELOAD READ LABELS OVERLAY (NO RETURN)
* ENTRY POINT FOR PROCESSOR ONE (EP 5-0) = 2.
POT17 LDD EC LOAD ERROR CODE
NJN POT18 IF ERROR
LJM POT11 IF NO ERROR ON LAST REREAD
* NON - NOISE ERROR RECOVERY.
POT18 LDD EP+1 SET RETRY COUNT TO 5
LPC 3077
LMC 500
STD EP+1
POT19 LDD EP+1 SET PARITY REREAD COUNTS
SCN 77
LMN 52 NORMAL REREAD=5, OPPOSITE REREAD=2
STD EP+1
SHN -11
ZJN POT20 IF NOT ALTERNATE CLIPPING LEVEL
LCN 30 REDUCE RETRY ATTEMPTS
RAD EP+1
POT20 LDD EP+1
LPC 3000
SHN -3
LMD EP
LPC 300
ZJN POT21 IF CORRECT CLIPPING LEVEL
LDD EP+1
SHN -11
RJM SCL
POT21 LDN 1
* LDN 0 (ATTEMPT OPPOSITE PARITY)
POTH EQU *-1
NJN POT22 IF NOT 7-TRACK F FORMAT, FIRST RETRY
STM POTD SET TO NOT COUNT ITERATION
LDC UJNI-NJNI PREVENT BID WINDOW UPDATE
RAM /READ/MRDP
LJM POT27 BACKSPACE
* REREAD MANY TIMES.
POT22 RJM CIF CHECK INTERNAL FORMAT
RJM BKS BACKSPACE
RJM POS POSITION TO LAST GOOD RECORD
LDN 4 SET REENTRY CODE TO 4 (POT27)
RJM POT6 JUMP TO COMMON CODE TO REREAD (NO RETURN)
* ENTRY POINT FOR PROCESSOR TWO (EP 5-0) = 4.
POT23 NJN POT24 IF NOT TAPE MARK
LJM POT38 PROCESS RECOVERED ERROR
POT24 LDD EC LOAD ERROR CODE
NJN POT25 IF ERROR
LJM POT38 PROCESS RECOVERED ERROR
POT25 LDD EP+1
LPN 70
ZJN POT26 IF RETRIES EXHAUSTED
LCN 10
RAD EP+1
UJN POT22 REREAD
* CHECK FOR SEVEN OR NINE TRACK UNIT.
POT26 LDD HP
LPN 1
NJN POT28 IF 9 TRACK TAPE
LDD EP+1
SHN -11
NJN POT28 IF OPTIONAL CLIPPING BEING TRIED
LDD EP+1
LPN 7
ZJN POT28 IF OPPOSITE PARITY ATTEMPTS MADE
POT27 SOD EP+1
RJM BKS BACKSPACE
RJM POS POSITION TO LAST GOOD RECORD
LDN 6 SET REENTRY CODE TO 6 (POT27)
RJM POT6 JUMP TO COMMON CODE TO REREAD (NO RETURN)
* CLEAN THE TAPE.
* THIS IS NOT PERFORMED ON RETRIES AT OPTIONAL CLIP LEVELS.
POT28 LDD EP+1
SHN -11
NJN POT31 IF OPTIONAL CLIPPING LEVEL
RJM BKS BACK OVER BAD RECORD
RJM POS POSITION TO LAST GOOD RECORD
* REREAD THE ERROR BLOCK NON - STOP.
AOM POTE SET NO REQUEUE
LDN 10 SET REENTRY CODE TO 10 (POT41)
RJM POT6 JUMP TO COMMON CODE TO REREAD (NO RETURN)
* ENTRY POINT FOR PROCESSOR FOUR (EP 5-0) = 10.
POT29 LDD EC
NJN POT30 IF ERROR
LJM POT11 ISSUE RECOVERED MESSAGE
* RETRY THE ALGORITHM.
POT30 LDC -100
RAD EP+1
LPC 700
ZJN POT31 IF RETRIES EXHAUSTED
LJM POT19 SET PARITY REREAD COUNTS
* TRY THE OTHER CLIPPING LEVELS.
POT31 RJM BKS BACKSPACE OVER BAD PRU
LDD EP+1
SBD TH
PJN POT32 IF NOT FIRST TIME
ADC 3000 SET FIRST CLIP LEVEL TO TRY
POT32 STD EP+1
SHN -11
POTM ZJN POT33 IF ALL CLIPPING LEVELS EXHAUSTED
* UJN POT33 (FSC ADAPTOR AND NINE TRACK UNIT)
RJM SCL SELECT NEW CLIP LEVEL
* RESET RETRY COUNT FOR FORWARD REREADS.
LDD EP+1 RESET RETRY COUNT
LPC 3077
LMC 200
STD EP+1
LDN 2 SET UP REENTRY CODE TO 2 (POT22)
RJM POT6 JUMP TO COMMON CODE (NO RETURN)
POT33 LDD FN LEAVE POSITIONED BEFORE BLOCK IF LABEL
LMN /MTX/RLA
ZJN POT35 IF READ LABELS
LDN 12 SET UP REENTRY CODE TO 12 (POT46)
RJM POT6 JUMP TO COMMON CODE (NO RETURN)
* ENTRY POINT FOR PROCESSOR FIVE (EP 5-0) = 12.
POT34 LDN 4 SET UNUSABLE BID
STM UBWB
RJM UBW UPDATE BID WINDOW
LDD EC
LMN /MTX/BTL
NJN POT35 IF NOT *BLOCK TOO LARGE*
RJM BKS INSURE POSITIONED PAST BAD BLOCK
RJM RDA SKIP BLOCK
POT35 LDD FN
LMN /MTX/RDF
ZJN POT36 IF READ
LJM RET4 RETURN FATAL ERROR
* UNRECOVERABLE READ ERROR.
POT36 LDM FETO
SHN 21-10
PJN POT37 IF ERROR PROCESSING NOT SET
RJM RSP RESET PARAMETERS
RJM WIP WRITE IN POINTER TO BUFFER
LDD MD
SHN 21-5
PJN POT37 IF NOT 200 READ
LDD CN+3 READ CONTROL WORD
SHN 6
ADD RA
SHN 6
ADD CN+4
CRD CM
LDC 4000 SET UNRECOVERED ERROR INDICATION
RAD CM
LDD CN+3 REWRITE CONTROL WORD
SHN 6
ADD RA
SHN 6
ADD CN+4
CWD CM
POT37 LDC RET4 SET TO GIVE FATAL USER ERROR
STM /READ/WCBD
POTR EQU *-1
* STM /RLI/UIPC (LI FORMAT)
LJM POT13 CLEAR ERROR PARAMETER
* ERROR RECOVERED.
POT38 LDM POTO
SHN 21-12
MJN POT39 IF OPPOSITE PARITY MODE
LJM POT11 ISSUE RECOVERED MESSAGE
POT39 LDD FM
SHN -6
LMN /MTX/TFF
NJN POT40 IF NOT F FORMAT
RJM BKS
RJM POS POSITION TO LAST GOOD RECORD
LDN 0 CLEAR ERROR PARAMETERS
STD EI
STD EP
STD EP+1
LDD MD TOGGLE MODE
LMC 100
STD MD
LDD UP
LMN 1
STD UP
LJM RET2 REQUEUE
* TAPE RECOVERED IN OPPOSITE PARITY MODE.
POT40 LDN /MTX/OPA TAPE WRITTEN IN OPPOSITE PARITY
STD EC
LDD FN
LMN /MTX/RLA
ZJN POT41 IF READ LABELS
LDM REMF RESTORE BID
STM UBWB
CALL EMM
AOD BL+1 INCREMENT BLOCK COUNT
SHN -14
RAD BL
RJM CFC CONNECT IF NEEDED
LJM RET4 RETURN FATAL ERROR
POT41 LJM POT15 RELOAD READ LABELS
PTM SPACE 4,10
** PTM - PROCESS TAPE MARK.
*
* EXIT IF NOT LABELED, EOF STATUS SET IN (RS) AND (MD).
* (REMF) SET TO 1 IF TAPE MARK.
PTM4 LDN /MTX/BEI RETURN POSSIBLE EOI
RAM REMG
PTM SUBR ENTRY/EXIT
LDN 1 SET TAPE MARK INDICATION
STM REMF
LDD EP
LPN 77
ZJN PTM1 IF FIRST ENTRY
LDC POT11 SET RECOVERED TAPE MARK
STM POTA
LDC LDNI+/MTX/BEI SET TO RETURN TAPE MARK IF READ LABELS
STM POTG
PTM1 LDD FN
LMN /MTX/RLA
ZJN PTMX IF READ LABELS
LDD LT
SHN 21-12
MJN PTM4 IF LABELED
LDD DS
LPN 10
NJN PTM4 IF EOT
LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN PTM4 IF INTERNAL MODES
SBN /MTX/TFLI-/MTX/TFSI-1
ZJP PTM4 IF LI FORMAT
LDD MD SET EOF STATUS
SCN 14
LMN 10
STD MD
LDN 2
STD TB
LDD FM
SHN -6
LMN /MTX/TFS
ZJN PTM2 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
NJN PTM3 IF NOT L FORMAT
PTM2 LDM //CIOE
LPC 770
LMC 260
NJN PTM3 IF NOT 260 READ CODE
LDN 26 SET TO RETURN 271 STATUS
STD TB
PTM3 LJM PTMX RETURN
TITLE SUBROUTINES.
ABC SPACE 4,10
** ABC - ADJUST BYTE COUNT FOR 9 TRACK TAPES.
*
* ENTRY (BY) = BYTE COUNT.
* (DS) = DEVICE STATUS.
*
* (ABCA) = 0 IF NO BYTE ADJUSTMENT.
ABC SUBR ENTRY/EXIT
LDD HP
LPN 1
ZJN ABCX IF 7 TRACK
* CORRECT 9 TRACK BYTE COUNT.
ABCA LDD DS
* UJN ABC1 (ATS UNIT)
LPN 40
ZJN ABC1 IF NO ODD COUNT
LDD BY
LPN 2
ZJN ABC1 IF NOT MODULO 4, 2 OR 3
SOD BY
* ADJUST BUFFER LENGTH FOR I FORMAT.
ABC1 LDD FM
SHN -6
* LMN /MTX/TFI
ERRNZ /MTX/TFI
NJN ABCX IF NOT I FORMAT
LDD BY
ZJN ABCX IF NO DATA READ
SBN 1
ZJN ABCX IF POSSIBLE TAPE MARK READ
STD T2 CALCULATE WORD COUNT
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
LPN 1
STM ABCB SET EXIT CONDITION
LJM ABCX RETURN
ABCB CON 0
BKS SPACE 4,10
** BKS - BACKSPACE TAPE.
*
* EXIT (A) = NEGATIVE IF BOT.
*
* CALLS CKR, FCN, RTR, STW, WFC.
BKS SUBR ENTRY/EXIT
LDN 2 WAIT NOT BUSY
RJM STW
RJM CKR CHECK READY
LDC F0113 BACKSPACE
BKSA EQU *-1
RJM FCN
RJM WFC WAIT FUNCTION COMPLETE
LDD DS RETURN LOAD POINT STATUS
SHN 21-2
UJN BKSX RETURN
BTW SPACE 4,10
** BTW - BUILD TEMPORARY WINDOW.
*
* ENTRY (A) = NUMBER OF BLOCKS TO MOVE BACK.
*
* EXIT (TBDW) = TEMPORARY BID WINDOW IF FIRST BKSP NOT AT
* LOAD POINT.
*
* USES T8, T9.
*
* CALLS BKS, SOB.
BTW SUBR ENTRY/EXIT
STD T8 SAVE ENTRY CONDITION
LDC F0113 INSURE BACKSPACE FUNCTION SET
STM BKSA
LDN 4 SETUP FIRST BID BYTE
STM TBDW
BTW1 RJM BKS BACKSPACE
MJN BTW2 IF BOT
SOD T8
NJN BTW1 LOOP FOR NEXT BLOCK
BTW2 LDM POSB SET BID POINTER
STD T9
LDM POSA CHECK FOR LOAD POINT ON FIRST BKSP
SBD T8
ZJN BTWX IF FIRST BKSP AT LOAD POINT
LDN 0 CLEAR PRU COUNTER
STD T8
BTW3 RJM SOB SET UP AND READ ONE BLOCK
LDM UBWB
STM TBDW+1,T8
AOD T9 INCREMENT POINTER
LPN 7 RESET POINTER FOR POSSIBLE WRAP AROUND
STD T9
AOD T8
LMM POSA
NJN BTW3 LOOP FOR NEXT BLOCK
LJM BTWX RETURN
CBW SPACE 4,15
** CBW - COMPARE BID WINDOWS.
*
* COMPARE THE PERMANENT WINDOW (BIDW) TO THE TEMPORARY
* WINDOW (TBDW).
*
* ENTRY (T1) = FIRST BYTE IN BIDW TO COMPARE.
* (T2) = FIRST BYTE IN TBDW TO COMPARE.
*
* EXIT (A) = 0 IF MATCH OR NOT BLOCK ID EQUIPMENT.
* (A, 13-6) = NUMBER OF INVALID BLOCK ID-S.
* (A, 5-0) = NUMBER OF VALID BLOCK ID MISMATCHES.
*
* USES T1 - T4.
CBW SUBR ENTRY/EXIT
LDD CF CHECK IF BLOCK ID EQUIPMENT
LPC 300
LMC 300
ZJN CBWX IF NO BLOCK ID
LDN 0
STD T4
STD T3
LDD T1 SAVE (T1)
STM CBWA
CBW1 LDM BIDW,T1 LOAD HISTORY BLOCK ID
LMN 4
ZJN CBW3 IF INVALID BID IN HISTORY
LDM TBDW,T2 LOAD BID FROM TEMP WINDOW
LMN 4 INVALID CHECK
NJN CBW2 IF NOT INVALID BID IN TEMP WINDOW
AOD T3 CHECK NEXT BID
UJN CBW3 CONTINUE
CBW2 LDM BIDW,T1 LOAD BID FROM HISTORY
LMM TBDW,T2
ZJN CBW3 IF NO ERROR
AOD T4
CBW3 LDD WP
SBM CBWA
ZJN CBW4 IF ONLY ONE BLOCK ID TO COMPARE
AOD T2
AOD T1 INCREMENT POINTER
LPN 7 RESET POINTER FOR POSSIBLE WRAP AROUND
STD T1
LMD WP
NJN CBW1 IF NOT END OF COMPARE
CBW4 LDD T3 FORM BID COMPARE RESULTS EXIT
SHN 6
ADD T4
LJM CBWX RETURN
CBWA CON 0 STORAGE FOR (T1)
CFC SPACE 4,10
** CFC - CHECK IF CONNECT NEEDED.
*
* ENTRY (RELA) = 0 IF CONNECT NEDDED.
*
* CALLS CUI.
CFC SUBR ENTRY/EXIT
LDD DS
SHN 21-11
PJN CFC1 IF UNIT CONNECTED
LDN 0
STM //RELA
CFC1 LDM //RELA
NJN CFCX IF CONNECTED
STD T1 SAVE DETAILED STATUS
CFC2 LDM MTDS,T1
STM POTQ,T1
AOD T1
LMN 10
NJN CFC2 IF NOT END OF DETAILED STATUS
RJM CUI CONNECT UNIT
LDN 0 RESTORE DETAILED STATUS
STD T1
CFC3 LDM POTQ,T1
STM MTDS,T1
AOD T1
LMN 10
NJN CFC3 IF NOT END OF DETAILED STATUS
UJN CFCX RETURN
CIF SPACE 4,10
** CIF - CHECK INTERNAL FORMAT (I AND LI).
*
* CALLS BKS, RDA.
CIF2 RJM BKS BACKSPACE
CIF SUBR ENTRY/EXIT
LDD EC
LMN /MTX/BNE
NJN CIFX IF NOT BLOCK NUMBER ERROR
LDM //BNEI
CIFA EQU *-1
* LDM /RLI/VDAE (LI FORMAT)
LMD BY
CIFB EQU *-1
* PSN (LI FORMAT)
NJN CIFX IF BLOCK LENGTH ERROR
LDD EI
SCN 7
NJN CIF1 IF 10 ATTEMPTS
LDM //BNEI+2
SBD BL+1
ZJN CIFX IF CORRECT BLOCK
PJN CIF2 IF MISSED A BLOCK
RJM RDA SKIP OVER BLOCK
UJN CIFX RETURN
CIF1 LDM //BNEI+1 SET BLOCK NUMBER TO CURRENT BLOCK NUMBER
STD BL
LDM //BNEI+2
STD BL+1
LJM RET4 RETURN FATAL ERROR
CIS SPACE 4,10
** CIS - CHECK IF ISMT GCR SKIP REVERSE.
*
* CALLS BKS.
CIS SUBR ENTRY/EXIT
LDD FN
LMN /MTX/SKP
NJN CISX IF NOT SKIP FUNCTION
LDM /READ/ISKR
ZJN CISX IF NOT ISMT GCR SKIP REVERSE
RJM BKS POSITION TAPE CORRECTLY FOR RECOVERY
LDN F0013 SET FORESPACE FUNCTION
STM BKSA
LDN 0 FORCE REQUEUE
STM POTE+1
UJN CISX RETURN
CKR SPACE 4,10
** CKR - CHECK READY.
* IF UNIT NOT READY, A TIME OUT WILL BE PERFORMED WAITING FOR
* UNIT TO BECOME READY BEFORE GIVING A FATAL ERROR. THIS
* SHOULD ALLOW RECOVERY FROM MOMENTARY NOT READY CONDITONS.
*
* CALLS CFC, FCN.
CKR SUBR ENTRY/EXIT
LCN 0 PRESET TIME OUT
STM CKRA
CKR1 LDN F0012 GET STATUS
RJM FCN
ACN CH
IAN CH+40B
DCN CH+40
SHN 21-0
MJN CKRX RETURN IF READY
SHN 22-11
PJN CKR2 IF UNIT CONNECTED
RJM CFC CONNECT UNIT
CKR2 SOM CKRA
NJN CKR1 IF NO TIME OUT
LDN /MTX/RDR READY DROP
LJM RET3 RETURN ERROR CODE
CKRA CON 7777 TIME OUT COUNTER
IMU SPACE 4,10
** IMU - ISSUE MESSAGE TO ERROR LOG AND UNLOAD TAPE.
*
* ENTRY (A) = *TCF* OR *BFR*.
*
* EXIT TO *RET4*.
*
* CALLS *EMM*, FCN, WFC.
IMU BSS 0 ENTRY
STD EC
CALL EMM ISSUE MESSAGE TO ERROR LOG
AOD EI
LDC F0110
RJM FCN UNLOAD THE TAPE
RJM WFC WAIT END OF OPERATION
LJM RET4 RETURN ERROR CODE
POS SPACE 4,15
** POS - POSITION TAPE.
*
* ENTRY (POSA) = NUMBER OF BLOCKS TO BACKUP.
* TAPE POSITIONED BEFORE BAD BLOCK.
*
* EXIT TAPE POSITION VERIFIED.
* SINGLE BLOCK MISPOSITION MESSAGES ISSUED AS NEEDED.
*
* USES T1, T2, T9.
*
* CALLS BKS, BTW, CBW, CFC, *EMM*, SOB.
*
* MACROS CALL.
POS5 STD EC
LDM REMF RESTORE BID
STM UBWB
CALL EMM ISSUE ERROR MESSAGE
RJM CFC CONNECT IF NEEDED
POS SUBR ENTRY/EXIT
LDD WP
SBM POSA
ADN 1
PJN POS1 IF NO WRAP AROUND
ADN 10
POS1 STM POSB STORE STARTING POINTER
LDC 0
POSA EQU *-1
RJM BTW BUILD TEMPORARY WINDOW
LDN 1
STD T2
LDC *
POSB EQU *-1
STD T1
RJM CBW COMPARE WINDOWS
ZJN POSX IF GOOD COMPARE
SHN -6 CHECK FOR INVALIDS IN RECOVERY WINDOW
NJN POSX IF INVALIDS
LDN 2 CHECK FOR TOO FAR BACKWARD
STD T2
LDM POSB
STD T1
RJM CBW
LPN 77 CHECK FOR ONLY MISCOMPARES
NJN POS3 IF NOT TOO FAR BACKWARD
LDD WP
STD T9
RJM SOB SET UP AND READ ONE BLOCK
LDM UBWB
LMM BIDW,WP
NJN POS2 IF POSITION LOST
LDN /MTX/SMB ISSUE SINGLE BLOCK MISPOSITION MESSAGE
LJM POS5 ISSUE ERROR MESSAGE
POS2 LDN /MTX/PLO ISSUE POSITION LOST MESSAGE
STD EC
LDM REMF RESTORE ORIGINAL BID FOR MESSAGE
STM UBWB
CALL EMM ISSUE MESSAGE
RJM CFC CONNECT IF NEEDED
LJM RET4 RETURN FATAL ERROR
POS3 LDN 0 CHECK FOR TOO FAR FORWARD
STD T2
LDM POSB
STD T1
RJM CBW
LPN 77 CHECK FOR ONLY MISCOMPARES
POS4 NJN POS2 IF POSITION LOST
RJM BKS CORRECT FOR TOO FAR FORWARD AND RETRY
LDM POSA
RJM BTW
LDN 1
STD T2
LDM POSB
STD T1
RJM CBW
LPN 77 CHECK FOR ONLY MISCOMPARES
NJN POS4 IF POSITION LOST
LDN /MTX/SMF ISSUE SINGLE BLOCK MISPOSITION MESSAGE
LJM POS5 ISSUE ERROR MESSAGE
RCI SPACE 4,10
** RCI - READ *CIO* INFORMATION FROM *MAGNET,S FL.
*
* EXIT (T6 - T7) = FET ADDRESS.
* (T1 - T5) = UCIC WORD.
*
* USES CM - CM+4.
*
* CALLS HNG.
*
* MACROS DELAY, MONITOR, PAUSE.
RCI3 LDD MA READ UDT WORDS
CRD T6-3
ADN 2
CRD T1
RCI SUBR ENTRY/EXIT
RCI1 LDM UADA SET FWA OF DESIRED UDT WORDS
ADN /MTX/UCIA
STD CM+4
LDC 300 REQUEST THREE WORDS
STD CM+3
LDN 0 REQUEST READ FROM *MAGNET*
STD CM+1
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
ZJN RCI3 IF DONE
SBN 2
PJN RCI2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN RCI1 REISSUE REQUEST
RCI2 RJM HNG HANG PP
RDA SPACE 4,10
** RDA - READ DATA.
*
* EXIT (A) = (T4) = 0, NO ERROR.
* (BY) = BYTE COUNT OF BLOCK.
* (UBWB) SET TO 1 IF TAPE MARK.
*
* CALLS ABC, CKR, FCN, ITM, MCC, WEO.
RDA SUBR ENTRY/EXIT
RJM CKR CHECK FOR READY
LDN F0040 READ FORWARD
RJM FCN PROCESS FUNCTION
ACN CH
RDA1 LCN 0 SET DATA PARAMETERS
STD T3
LDN 20
STD T2
LDC 1010 SET BUFFER SIZE
* INPUT DATA.
STD BY INPUT FIRST 1010 BYTES (104D CM WORDS)
IAM EBUF,CH
ZJN RDA2 IF NOT END OF DATA
LMC -0
RAD BY
LJM RDA6 ADJUST BYTE COUNT
RDA2 LDN 50
IAM XBUF,CH
NJN RDA3 IF END OF DATA
SOD T3
NJN RDA2 IF NOT END OF INPUT
LDN 50
IAM XBUF,CH
NJN RDA3 IF END OF DATA
SOD T2
NJN RDA2 IF NOT TIME OUT
LDD EC PRESERVE ERROR CODE
RJM MCC
LCN 0
STD BY
LJM RDA7 WAIT FOR END OF OPERATION
RDA3 LMC -0
ADN 50
RAD BY
RDA4 AOD T3
SHN -14
NJN RDA5 IF ROLLOVER
LDN 50
RAD BY
UJN RDA4 LOOP
RDA5 AOD T2
LMN 21
ZJN RDA6 IF ALL BYTES COUNTED
LCN 0 SET BYTE COUNT TO 7777
STD BY
RDA6 RJM ABC ADJUST BYTE COUNT
RDA7 RJM WEO WAIT END OF OPERATION
SCN 74
ZJN RDA9 IF NO ERRORS
SHN 21-10
RDAA PJN RDA8 IF NOT NOISE
* UJN RDA8 (ATS UNIT)
LDN 42 ISSUE REPEAT READ
RJM FCN
ACN CH
LJM RDA1 REINITIATE READ
RDA8 LDM MTDS
LPC 7077
RDAB EQU *-1
* LPC 7777
ZJN RDA9 IF ONLY WARNING STATUS
LCN 0
RDA9 STM RDAC
LDC * SET EXIT CONDITION
RDAC EQU *-1
STD T4
LDM ABCB
ZJN RDA10 IF NO BYTE ADJUSTMENT
SOD BY
RDA10 LDD DS
LPN 20
LMN 20
NJN RDA11 IF NOT TAPE MARK
STD BY
LDN 1 SET TAPE MARK INDICATION
STM UBWB
LDD HP
LPN 1
NJN RDA11 IF 9 TRACK
LDD MD
SHN 21-6
MJN RDA11 IF 7 TRACK CODED
LDN 0 CLEAR ERROR INDICATION
STD T4
RDA11 LDD T4
LJM RDAX RETURN
RSP SPACE 4,10
** RSP - RESET PROCESSOR FOR NEXT OPERATION.
*
* EXIT (CN - CN+4) = IN POINTER PRIOR TO READ.
*
* CALLS /CPP/CAL, *CPP*, /CPP/INM, RCI, /CPP/SFP.
*
* MACROS CALL.
RSP SUBR ENTRY/EXIT
LDM /READ/WOCN RESTORE WORD COUNT
STD WC
CALL CPP RELOAD ADDRESS RELOCATOR
LDD FN
LMN /MTX/RDF
NJN RSPX IF NOT READ DATA
RJM RCI READ UDT
RJM /CPP/CAL CALCULATE PARAMETERS
LDN 2 READ IN
RJM /CPP/SFP
UJN RSPX RETURN
SCL SPACE 4,10
** SCL - SET CLIPPING LEVEL.
*
* ENTRY (A) = CLIPPING LEVEL DESIRED.
*
* CALLS FCN.
SCL SUBR ENTRY/EXIT
SHN 6
STD T1
LDD EP
LPC 7077
LMD T1
STD EP
LPC 300
ZJN SCLX RETURN IF NORMAL CLIPPING LEVEL
ADN 6
RJM FCN
UJN SCLX RETURN
SOB SPACE 4,10
** SOB - SET UP AND READ ONE BLOCK.
*
* ENTRY (T9) = POINTER TO BID WINDOW.
*
* EXIT (UBWB) = BID OF READ CORRECTED FOR CLIPPING LEVEL AND
* READ ERRORS.
*
* USES T0.
*
* CALLS RDA, FCN.
SOB2 RJM RDA READ A BLOCK
ZJN SOBX IF GOOD READ
SOB3 LDN 4 SET UNUSABLE BID
STM UBWB
SOB SUBR ENTRY/EXIT
LDD MD CHECK IF PARITY CHANGE NEEDED
SHN -5
LMM BIDW,T9
LPN 2
ZJN SOB1 IF NO CHANGE NEEDED
LDD HP
LPN 1
NJN SOB1 IF 9 TRACK
LDN 5 TOGGLE TO OPPOSITE PARITY
RJM FCN
SOB1 LDM BIDW,T9 CHECK IF CHANGE IN CLIPPING LEVEL NEEDED
SHN 21-2
PJN SOB2 IF NO CHANGE NEEDED
LPN 7 SET CLIPPING LEVEL
SHN 6
ADN 6
RJM FCN
RJM RDA READ A BLOCK
NJN SOB3 IF ERROR
LDM BIDW,T9 ADD CLIPPING LEVEL TO LAST BID
LPN 74
STD T0
LDM UBWB
SCN 74
LMD T0
STM UBWB
LJM SOBX RETURN
WFC SPACE 4,10
** WFC - WAIT BACKSPACE FUNCTION COMPLETE.
* TIMES OUT APPROXIMATELY 25 FEET OF TAPE.
*
* EXIT (DS) = UNIT STATUS.
*
* USES T2.
*
* CALLS //STW.
WFC2 CON 0 ENTERED VIA *RJM* FROM //STW
SOD T2
NJN WFC1 IF NOT TIMEOUT
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFC1 ATTEMPT 1 MORE WAIT
WFC SUBR ENTRY/EXIT
LDN 77 SET DELAY TO MAXIMUM
STD T2
LDC WFC2 SET RETURN ON TIMEOUT FROM //STW
STM //STWC
WFC1 LDN 2 WAIT NOT BUSY
RJM //STW
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFCX RETURN
WIP SPACE 4,15
** WIP - WRITE IN POINTER PRIOR TO READ TO USER BUFFER.
*
* ENTRY (INPA - INPA+4) = POINTER TO NEXT BUFFER LOCATION.
* (CN - CN+4) = IN POINTER PRIOR TO READ.
*
* EXIT IN POINTER WRITTEN TO USER CIO BUFFER.
* PARITY ERROR BIT SET IN FET+0.
*
* USES CM - CM+4.
*
* CALLS RCI.
WIP SUBR ENTRY/EXIT
LDM INPA+3 CALCULATE ABSOLUTE BUFFER ADDRESS
SHN 6
ADD RA
SHN 6
ADM INPA+4
CWD CN WRITE OLD IN POINTER TO BUFFER
RJM RCI READ UDT INFORMATION
LDD T6 READ FET+0
SHN 6
ADD RA
SHN 6
ADD T7
CRD CM
LDD CM+4 SET PARITY ERROR BIT
LPC 777
LMC 4000
STD CM+4
LDD CM+3
SCN 3
STD CM+3
LDD T6 REWRITE FET+0
SHN 6
ADD RA
SHN 6
ADD T7
CWD CM
LJM WIPX RETURN
SPACE 4,10
ADDR TSAD SMER
SPACE 4,10
** BUFFERS FOR READING DURING READ RECOVERY.
EBUF BSS 0
XBUF EQU EBUF+1012
ERRNG 7777-XBUF-50 WRAPPED AROUND
ERROVL SPACE 4,10
ERROVL
CTAB SPACE 4,10
SPACE 4,10
** NOTE - CODE AFTER THIS POINT WILL BE DESTROYED WHEN CALLING
* THE ERROR PROCESSOR *EMM* OR WHEN THE TAPE IS POSITIONED.
* ALL CALLS TO THIS CODE MUST BE DONE PRIOR TO THAT POINT.
SPACE 4,10
** CTAB - CHANNEL TABLE.
CTAB CHTB
EBW SPACE 4,20
** EBW - EVALUATE BID WINDOW.
*
* ENTRY (BIDW) = BID WINDOW.
*
* EXIT (POSA) = NUMBER OF BLOCKS TO BACKSPACE.
* NUMBER OF BLOCKS TO BACKSPACE = 2 IF
* 1) NO BID PRESENT.
* 2) INVALID HISTORY BLOCK ID ENCOUNTERED.
* 3) 9 TRACK *NRZI* *CRC* CORRECTABLE ERROR. THIS IS
* BECAUSE OF HARDWARE RESTRICTIONS ON THE NEXT
* READ.
* 4) .GT. 5 BLOCK ID-S ENCOUNTERED.
* 5) END OF BLOCK ID WINDOW ENCOUNTERED.
* (REMF) = BID FROM LAST READ.
* (T2) = NUMBER OF DIFFERENT BLOCK ID-S.
* (T4) = NUMBER OF SAME BLOCK ID-S.
*
* USES T1 - T4.
EBW SUBR ENTRY/EXIT
LDD CF CHECK IF BID PRESENT
LPC 300
LMC 300
NJN EBW2 IF BID PRESENT
EBW1 LJM EBW11 FORCE BACKSPACE OF TWO BLOCKS
EBW2 LDM UBWB SAVE CURRENT BID
STM REMF
EBW3 LDD HP CHECK IF 9 TRACK NRZI CRC CORRECTABLE ERROR
LPN 1
ZJN EBW4 IF NOT 9 TRACK
LDM DNCV
LPN 70
LMN /MTX/D08*10
NJN EBW4 IF NOT 800 (NRZI)
LDM MTDS+3
EBWA EQU *-1
* LDM MTDS+6 (ATS CONTROLLER)
EBWB SHN 21-12
* SHN 21-11 (ATS CONTROLLER)
MJN EBW1 IF CRC CORRECTABLE ERROR
EBW4 LDD WP SET UP DIRECTS
STD T1
LDN 0
STD T2
STD T4
LCN 0
STD T3
EBW5 LDD T2 CHECK FOR MAX COUNT OF 5
ADD T4
SBN 5
PJN EBW1 IF MAX COUNT REACHED, FORCE SET 2
LDM BIDW,T1
LMN 4
ZJN EBW12 IF INVALID, STOP SCAN
LPN 1
ZJN EBW7 IF NOT TAPE MARK
AOD T2 FORCE BACKSPACE OVER TAPE MARK
EBW6 STM POSA SET BACKSPACE COUNT
LJM EBWX RETURN
EBW7 LDM BIDW,T1
SBD T3
NJN EBW8 IF NOT SAME
AOD T4 INCREMENT SAME BID COUNT
UJN EBW9 CONTINUE BID SCAN
EBW8 AOD T2 INCREMENT DIFFERENT COUNT
SBN 2
MJN EBW9 IF NOT TWO DIFFERENT BID-S
LDD T2
ADD T4
UJN EBW6 NUMBER OF BACKSPACES TO DO
EBW9 LDM BIDW,T1
STD T3 SAVE LAST BID
SOD T1 REDUCE POINTER
PJN EBW10 IF NO OVERFLOW
LPN 7
STD T1
EBW10 LMD WP CHECK FOR END OF WINDOW
NJN EBW13 IF NOT END OF BID WINDOW
EBW11 LDN 2 FORCE BACKSPACE OF TWO BLOCKS
UJN EBW6 EXIT
EBW12 LDD T2
ADD T4
ZJN EBW11 IF END OF WINDOW
UJN EBW6 SET BACKSPACE COUNT AND EXIT
EBW13 LJM EBW5 CHECK NEXT BID
LPR SPACE 4,20
** LPR - LOAD POINT RECOVERY.
*
* ENTRY DETAIL STATUS BUFFERS SET UP.
*
* EXIT (A) .LT. 0 IF NOT *TCF* OR *BFR* ERROR OR
* IF *TCF* OR *BFR* ERROR WAS RECOVERED.
* (A) = 0 IF RETRY ON *BFR* ERROR.
*
* ERROR TO *IMU* IF LOAD POINT PROBLEM.
* (A) = *TCF* OR *BFR*.
*
* USES T1.
*
* CALLS *EMM*, FCN, WFC.
*
* MACROS CALL.
LPR SUBR ENTRY/EXIT
LDD EC
NJN LPR0 IF ERROR
RJM DTS GET DETAILED STATUS
* SAVE CURRENT EQUIPMENT STATUS.
LPR0 LDD DS SAVE GENERAL STATUS
STM LPRA
LDM UBWB SAVE BLOCK ID
STM LPRB
LDN 0 SAVE DETAIL STATUS
STD T1
LPR1 LDM MTDS,T1 MOVE ALL DETAIL STATUS WORDS
STM LPRC,T1
AOD T1 INCREMENT STATUS WORD COUNTER
SBN 16
NJN LPR1 IF NOT ALL STATUS WORDS MOVED
LDM ATUS+2 GET DETAIL STATUS WORD 13
SHN 21-2 POSITION CLEANER ACTIVE BIT
PJN LPR2 IF CLEANER PARKED
LDD EP SET LOAD POINT ERROR FLAG
LPC 6700
ADC 1002
STD EP
LDD EP+1
LPC 7077
ADC 200
STD EP+1
LDN /MTX/TCF CLEANER ACTIVE
LJM IMU ISSUE MESSAGE TO ERROR LOG AND UNLOAD TAPE
LPR2 LDM MTDS LOAD DETAIL STATUS WORD 3
LPC 177 MASK ERROR CODES
SBN 7
ZJN LPR4 IF ERROR CODE 7
SBN 3
ZJN LPR4 IF ERROR CODE 12
SBN 1
ZJN LPR4 IF ERROR CODE 13
LDD EC
NJN LPR3 IF NON-LOAD POINT ERROR
LDD EP
SHN 21-11
PJN LPR3 IF NO PREVIOUS LOAD POINT ERROR
LDN 0 CLEAR ERROR CODE
STD EC
LDD EP CLEAR LOAD POINT ERROR FLAG
LPC 6777
STD EP
LPR3 LCN 1
LJM LPRX RETURN NO LOAD POINT ERROR OR RECOVERED
LPR4 LDD EP SET LOAD POINT ERROR FLAG
LPC 6700
ADC 1002
STD EP
LDD EP+1
LPC 7077
ADC 200
STD EP+1
LDD EI
LPN 77 ERROR ITERATION
ZJN LPR6 IF FIRST TRY ON BAD HEADER
LPN 7
ZJN LPR5 IF ITERATION IS A MULTIPLE OF 4
SBN 4
NJN LPR6 IF NOT A MULTIPLE OF 4
LPR5 LDN /MTX/BFR BAD PHASE/GCR HEADERS
LJM IMU ISSUE MESSAGE TO ERROR LOG AND UNLOAD TAPE
* REWIND TO LOAD POINT AND ATTEMPT REREAD.
LPR6 LDN F0010
RJM FCN REWIND TAPE TO LOAD POINT
RJM WFC WAIT FOR BACKSPACE TO COMPLETE
* RESTORE EQUIPMENT ERROR STATUS BEFORE EXIT.
LDN 0
STD T1
LDM LPRA RESTORE GENERAL STATUS
STD DS
LDM LPRB RESTORE BLOCK ID
STM UBWB
LPR7 LDM LPRC,T1 RESTORE ERROR STATUS
STM MTDS,T1
AOD T1 INCREMENT COUNTER
SBN 16
NJN LPR7 IF NOT ALL STATUS WORDS MOVED
* LDN 0
LJM LPRX TRY TO REWRITE FROM LOAD POINT
LPRA CON 0 GENERAL STATUS
LPRB CON 0 BLOCK ID
LPRC BSSZ 16 DETAILED STATUS
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS DME.
PRS4 STM REME MTS - DO NOT CHECK FOR AGC FAILURE
LDM PRSD DISABLE LOAD POINT RECOVERY
STM REMK
LJM PRS1 CHECK FOR LONG BLOCK PROCESSING
PRS SUBR ENTRY/EXIT
LDM //ITMA SAVE READ FUNCTION
STM POTF
LDN F0040 SET FORWARD READ
STM //ITMA
LDD HP
LPN 20
ZJN PRS4 IF NOT ATS-TYPE CONTROLLER
* MODIFY INSTRUCTIONS FOR ATS-TYPE CONTROLLER.
LDM PRSA
STM ABCA
LDC SHNI+66
STM REMC
LCN 0
STM PNEE
STM REMA
STM RDAB
LDC UJNI-PJNI
RAM RDAA
LDM PRSB
STM PNEA
LDC MTDS+1
STM REMB
LDN MTDS+6-MTDS-3
RAM EBWA
LDC SHNI+21-11
STM EBWB
LDD HP
LPN 1
ZJN PRS1 IF NOT NINE TRACK UNIT
LDC UJNI-ZJNI
RAM POTM NO CLIP LEVEL CHANGES FOR NINE TRACK FSC
LDD FN
SBN /MTX/RDF
NJN PRS1 IF NOT READ FUNCTION
LDD FM
SHN -6
SBN /MTX/TFLI
NJN PRS1 IF NOT LI FORMAT
STM ADDR NO INSTRUCTION MODIFICATION
STM CIFB
STM REML NOT SKIPEI OR POSMF
LDC /RLI/VDAE
STM CIFA *VDAE* = 0 IF CORRECT BLOCK LENGTH
LDC /RLI/UIPC
STM POTR SET TO GIVE FATAL USER ERROR
LDC /RLI/RLI
UJN PRS2 SET ENTRY TO REREAD
PRS1 LDM /READ/TDAA
NJN PRS3 IF NOT LONG BLOCK
LDC RLB
PRS2 STM POTI ENTRY TO REREAD
PRS3 LJM PRSX RETURN
PRSA BSS 0
LOC ABCA
UJN ABC1 ADJUST BUFFER LENGTH
LOC *O
PRSB BSS 0
LOC PNEA
UJN PNE3 ISSUE ERROR MESSAGE
LOC *O
PRSD BSS 0
LOC REMK
UJN REM2.1 DISABLE LOAD POINT RECOVERY
LOC *O
OVERLAY (CTS READ ERROR PROCESSOR.),(BUFB+5),P
CRE SPACE 4,10
** CRE - CTS READ ERROR PROCESSOR.
*
* ENTRY (EC) = ERROR CODE.
*
* CALLS CEP, MCH, POS, PRS, PTM, RRA.
ENTRY CRE
CRE SUBR ENTRY/EXIT
* THE FOLLOWING CODE IS OVERLAID BY THE IN POINTER.
CREA EQU *
LDM //LOV SET RETURN ADDRESS
STM CRE
LDC CTAB MODIFY CHANNELS
RJM MCH
RJM PRS PRESET
LDD MA SAVE IN POINTER
CWD CN
CRM CREA,ON
LDD DS
LPN 1
NJN CRE1 IF READY
LDN /MTX/RDR SET NOT READY
STD EC
CRE1 LDD EC
LMN /MTX/BEI
NJN CRE3 IF NOT TAPE MARK
RJM PTM PROCESS TAPE MARK
CRE2 UJN CREX RETURN
CRE3 LDD SP
LPN 4
ZJN CRE6 IF ERROR PROCESSING ALLOWED
CRE4 LDN 20
STM POSB SKIP ONE BLOCK
RJM POS POSITION TAPE PAST BAD BLOCK
NJN CRE5 IF ERROR
RJM CEP CLEAR ERROR PARAMETERS
UJN CRE2 RETURN
CRE5 LDN 0
STM POSB INDICATE NO EXTRA BLOCK TO SKIP
CRE6 LDD FN
LMN /MTX/SKP
NJN CRE7 IF NOT SKIP OPERATION
LDM /READ/SKEI
NJN CRE4 IF SKIPEI OF POSMF
CRE7 RJM RRA READ RECOVERY ALGORITHM
UJN CRE2 RETURN
CEP SPACE 4,10
** CEP - CLEAR ERROR PARAMETERS.
*
* EXIT (CN+3, CN+4) = CORRECT IN POINTER.
* TO *RLA* IF READ LABELS.
*
* USES CN - CN+3.
*
* CALLS CEC, RSP.
*
* MACROS CALL.
CEP SUBR ENTRY/EXIT
LDN 0 CLEAR ERROR PARAMETER
STD EI
STD EP
LDD FN
LMN /MTX/RLA
ZJN CEP1 IF READ LABELS
RJM RSP RESET PARAMETERS FOR NEXT OPERATION
LDD MA RESTORE IN POINTER
CWM CREA,ON
LDD MA
CRD CN
UJN CEPX RETURN
CEP1 LDN 0 SET ERROR CODE
CEPA EQU *-1
* LDN /MTX/BEI (RECOVERED TAPE MARK)
STD EC
LDM CECB
LPN 77
ZJN CEP2 IF AT MAGNET CONTROL POINT
LDN 0 CHANGE TO MAGNET,S CP
RJM CEC
CEP2 CALL RLA RELOAD READ LABELS OVERLAY (NO RETURN)
POS SPACE 4,15
** POS - POSITION TAPE.
* THIS ROUTINE USES THE LOCATE BLOCK COMMAND TO POSITION
* THE TAPE TO THE EXPECTED BLOCK POSITION.
*
* ENTRY (BL, BL+1) = NOS BLOCK POSITION.
* (WP, EP+1) = PHYSICAL BLOCK ID WHEN (BL,BL+1) = 0.
*
* EXIT (A) = 0 IF NO ERROR.
* TO *ERR* IF CHANNEL MALFUNCTION.
*
* USES T3.
*
* CALLS /PRESET/GPS, /PRESET/ICF, /PRESET/RBI.
POS SUBR ENTRY/EXIT
RJM /PRESET/RBI READ BLOCK ID
LDM BIDW
STM POSA
SBN 20
ZJN POS1 IF FIRST SEGMENT
STM POSA SET PHYSICAL REFERENCE BLOCK ID
POS1 LDD BL+1
SHN 4
ADD EP+1
ADM POSB EXTRA BLOCKS TO POSITION
STM POSA+2 MOVE BLOCK NUMBER TO PARAMETERS
SHN -14
STM POSA+1
LDD BL
SHN 4
ADD WP
RAM POSA+1
LDN F0016 LOCATE BLOCK
RJM /PRESET/ICF ISSUE FUNCTION
ACN CH
LDN 3
OAM POSA,CH OUTPUT THE 3 PARAMETER WORDS
STD T3 WORDS NOT TRANSFERRED
FJM *,CH WAIT FOR DATA TO BE TAKEN
POS2 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS
MJN POS2 IF COMMAND RETRY
SHN 21-13
MJN POS3 IF ERROR
LDD T3
ZJN POS4 IF ALL WORDS TRANSFERRED
LDN /MTX/CMF CHANNEL MALFUNCTION
RJM ERR REPORT ERROR (NO RETURN)
POS3 LDN /MTX/STE STATUS ERROR
STD EC
POS4 LJM POSX RETURN
POSA DATA 0 LOCATE BLOCK PARAMETERS
DATA 0 UPPER 12 BITS OF BLOCK NUMBER
DATA 0 8/LOWER BITS OF BLOCK NUMBER / 4 UNUSED
POSB DATA 0 8/ADDER TO BLOCK POSITION, 4/0
PTM SPACE 4,10
** PTM - PROCESS TAPE MARK.
*
* EXIT (EC) = 0.
* TO *CEP* IF READ LABEL.
* TO *RET3* IF LABELED TAPE OR FORMAT IS I, SI, LI.
*
* CALLS *CEM*, CEP.
*
* MACROS CALL.
PTM4 LDN /MTX/BEI RETURN POSSIBLE EOI
LJM RET3 RETURN ERROR CODE
PTM SUBR ENTRY/EXIT
LDN 0
STD EC CLEAR ERROR CODE
LDD EI
ZJN PTM1 IF FIRST ENTRY
CALL CEM LOG RECOVERED ERROR
LDC LDNI+/MTX/BEI SET TO RETURN TAPE MARK IF READ LABELS
STM CEPA
PTM1 RJM CEP CLEAR PARAMETERS (NO RETURN IF READ LABEL)
LDD LT
SHN 21-12
MJN PTM4 IF LABELED
LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN PTM4 IF INTERNAL MODES
SBN /MTX/TFLI-/MTX/TFSI-1
ZJN PTM4 IF LI FORMAT
LDD MD SET EOF STATUS
SCN 14
LMN 10
STD MD
LDN 2
STD TB
LDD FM
SHN -6
LMN /MTX/TFS
ZJN PTM2 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
NJN PTM3 IF NOT L FORMAT
PTM2 LDM //CIOE
LPC 770
LMC 260
NJN PTM3 IF NOT 260 READ CODE
LDN 26 SET TO RETURN 271 STATUS
STD TB
PTM3 LJM PTMX RETURN
RCI SPACE 4,10
** RCI - READ *CIO* INFORMATION FROM *MAGNET,S FL.
*
* EXIT (T6 - T7) = FET ADDRESS.
* (T1 - T5) = UCIC WORD.
*
* USES CM - CM+4.
*
* CALLS HNG.
*
* MACROS DELAY, MONITOR, PAUSE.
RCI3 LDD MA READ UDT WORDS
CRD T6-3
ADN 2
CRD T1
RCI SUBR ENTRY/EXIT
RCI1 LDM UADA SET FWA OF DESIRED UDT WORDS
ADN /MTX/UCIA
STD CM+4
LDC 300 REQUEST THREE WORDS
STD CM+3
LDN 0 REQUEST READ FROM *MAGNET*
STD CM+1
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
ZJN RCI3 IF DONE
SBN 2
PJN RCI2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN RCI1 REISSUE REQUEST
RCI2 RJM HNG HANG PP
RRA SPACE 4,25
** RRA - READ RECOVERY ALGORITHM.
* THIS ROUTINE DOES ERROR RECOVERY AS FOLLOWS.
* IF (EI) = 0 LOG ERROR, POSITION TAPE, AND REQUEUE.
* IF (EI) = 1 LOG ERROR, LOAD CCC MICROCODE, POSITION TAPE,
* AND REQUEUE.
* IF (EI) = 2 LOG UNRECOVERED ERROR, RETURN FATAL CODE. IF
* THE ERROR IS A LOAD POINT ERROR, THE TAPE IS
* UNLOADED.
*
* ENTRY (EC) = ERROR CODE.
* (EI) = RETRY COUNT.
*
* EXIT (EP) .NE. 0 IF RECOVERY ALGORITHM NOT COMPLETE.
* (EI) = (EI)+1 IF RECOVERY ALGORITHM NOT COMPLETE.
* TO *ERR* IF MICROCODE LOAD FAILED.
* TO *RET2* TO REQUEUE THE REQUEST.
* TO *RET4* TO RETURN A FATAL ERROR.
*
* USES CN, CN+1, EC, CM - CM+4.
*
* CALLS *CEM*, CEP, /PRESET/ICF, POS, /PRESET/RCU, RSP, WFC,
* WIP, *0CT*.
*
* MACROS CALL, EXECUTE.
RRA SUBR ENTRY/EXIT
RRA1 CALL CEM LOG CTS ERROR MESSAGE
LDD EC LOAD ERROR CODE
NJN RRA2 IF ERROR
LJM RRA10 IF RECOVERED ERROR
RRA2 LDC LDNI FORCE DROP OUT
STM //PNRC
AOD EP FORCE REPORTING OF RECOVERED ERROR
AOD EI INCREMENT RETRY COUNT
SBN 1
ZJP RRA3 IF FIRST ERROR
SBN 1
NJP RRA4 IF RETRIES FAILED
CHTE *
LDN CH SET CHANNEL NUMBER
STD CN
LDC ERLB SET BUFFER ADDRESS
STD CN+1
EXECUTE 0CT,ERLA+5 LOAD CTS/CCC MICROCODE
LDD CN
ZJN RRA2.2 IF MICROCODE LOADED
STD EC
SHN 0-13
PJN RRA2.1 IF ERROR CODE ALREADY SAVED
LDN /MTX/CMF
STD EC
RRA2.1 LDM CN+1 SAVE FUNCTION
STM /PRESET/ICFA
RJM ERR REPORT ERROR (NO RETURN)
RRA2.2 RJM /PRESET/RCU RECONNECT UNIT
RRA3 RJM POS POSITION TAPE
NJP RRA1 IF LOCATE BLOCK FAILED
STD EC CLEAR ERROR CODE
LJM RET2 REQUEUE THE REQUEST
* UNRECOVERABLE ERROR.
RRA4 LDD EC
LMN /MTX/STE
NJN RRA6 IF NOT STATUS ERROR
LDM CTGS
LPC 177
LMN CE007
NJN RRA6 IF NOT BURST ID OR BLOCK ID ERROR
LDD DS
SHN 21-2
PJN RRA6 IF NOT AT LOAD POINT
LDN /MTX/BFR LOAD POINT ERROR
STD EC
CALL CEM LOG THE ERROR
LDC F0110 UNLOAD TAPE
RJM /PRESET/ICF ISSUE CTS FUNCTION
RJM WFC WAIT FOR COMPLETION
UJN RRA7 RETURN FATAL ERROR
RRA6 LDD FN
LMN /MTX/RDF
ZJN RRA8 IF READ
RRA7 LJM RET4 RETURN FATAL ERROR
RRA8 LDM FETO
SHN 21-10
PJN RRA9 IF ERROR PROCESSING NOT SET
RJM RSP RESET PARAMETERS
RJM WIP WRITE IN POINTER TO BUFFER
LDD MD
SHN 21-5
PJN RRA9 IF NOT 200 READ
LDD CN+3 READ CONTROL WORD
SHN 6
ADD RA
SHN 6
ADD CN+4
CRD CM
LDC 4000 SET UNRECOVERED ERROR INDICATION
RAD CM
LDD CN+3 REWRITE CONTROL WORD
SHN 6
ADD RA
SHN 6
ADD CN+4
CWD CM
RRA9 LDC RET4 SET TO GIVE FATAL USER ERROR
STM /READ/WCBD
RRAA EQU *-1
* STM /RLI/UIPC (LI FORMAT)
RRA10 RJM CEP CLEAR ERROR PARAMETERS
LJM RRAX RETURN
RSP SPACE 4,10
** RSP - RESET PROCESSOR FOR NEXT OPERATION.
*
* EXIT (CN+3 - CN+4) = IN POINTER PRIOR TO READ.
*
* CALLS /CPP/CAL, *CPP*, RCI, /CPP/SFP.
*
* MACROS CALL.
RSP SUBR ENTRY/EXIT
LDM /READ/WOCN RESTORE WORD COUNT
STD WC
CALL CPP RELOAD ADDRESS RELOCATOR
LDD FN
LMN /MTX/RDF
NJN RSPX IF NOT READ DATA
RJM RCI READ UDT
RJM /CPP/CAL CALCULATE PARAMETERS
LDN 2 READ IN
RJM /CPP/SFP
UJN RSPX RETURN
WFC SPACE 4,10
** WFC - WAIT FOR COMPLETION.
*
* CALLS /PRESET/GPS.
WFC SUBR ENTRY/EXIT
WFC1 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS
MJN WFC1 IF COMMAND RETRY
UJN WFCX RETURN
WIP SPACE 4,15
** WIP - WRITE IN POINTER PRIOR TO READ TO USER BUFFER.
*
* ENTRY (CREA - CREA+4) = POINTER TO NEXT BUFFER LOCATION.
* (CN+3 - CN+4) = IN POINTER PRIOR TO READ.
*
* EXIT IN POINTER WRITTEN TO USER CIO BUFFER.
* PARITY ERROR BIT SET IN FET+0.
*
* USES CM - CM+4.
*
* CALLS RCI.
WIP SUBR ENTRY/EXIT
LDM CREA+3 CALCULATE ABSOLUTE BUFFER ADDRESS
SHN 6
ADD RA
SHN 6
ADM CREA+4
CWD CN WRITE OLD IN POINTER TO BUFFER
RJM RCI READ UDT INFORMATION
LDD T6 READ FET+0
SHN 6
ADD RA
SHN 6
ADD T7
CRD CM
LDD CM+4 SET PARITY ERROR BIT
LPC 777
LMC 4000
STD CM+4
LDD CM+3
SCN 3
STD CM+3
LDD T6 REWRITE FET+0
SHN 6
ADD RA
SHN 6
ADD T7
CWD CM
LJM WIPX RETURN
SPACE 4,10
ERRNG ERLA-* CODE OVERFLOWS HELPER OVERLAY
ERRPL ERLA+5+ZCTL-ERLB *0CT* OVERFLOWS INTO BUFFER
CTAB SPACE 4,10
** CTAB - CHANNEL TABLE.
CTAB CHTB
PRS SPACE 4,10
** PRS - PRESET.
PRS SUBR ENTRY/EXIT
LDD FN
LMN /MTX/RDF
NJN PRSX IF NOT READ FUNCTION
LDD FM
SHN -6
LMN /MTX/TFLI
NJN PRSX IF NOT LI FORMAT
LDC /RLI/UIPC
STM RRAA SET TO RETURN FATAL ERROR
LJM PRSX EXIT PRESET
OVERLAY (WRITE FUNCTION PROCESSOR.),,,WRITE
.IM SET 2 GENERATE ADDRESSES FOR ERROR PROCESSOR
STAT EQU PRSX STATUS AT START OF WRITE
BYWR EQU STAT+1 BYTES ATTEMPTED TO WRITE
BYRM EQU BYWR+1 BYTES NOT WRITTEN
OPTU EQU PRSX OUT POINTER UPPER FOR CTS RETRY
OPTL EQU BYRM+1 OUT POINTER LOWER FOR CTS RETRY
WTF SPACE 4,10
** WTF - WRITE TAPE.
*
* CALLS IBF, ITM, /WLB/ODA, RCB, WRT.
*
* MACROS SADT.
ENTRY WTF
WTF RJM RCB READ CENTRAL BUFFER
* RJM RCB (CTS, NOT LONG BLOCKS)
* RJM ITM (4X PPU SPEED - MOTION AHEAD ENABLED)
* UJN WTF1 (LONG BLOCKS)
WTFA EQU *-2
RJM ITM INITIATE TAPE MOTION
* UJN WTF2 (CTS)
* RJM RCB (4X PPU SPEED - MOTION AHEAD ENABLED)
WTFB EQU *-1
UJN WTF2 WRITE TO TAPE
WTF1 RJM ITM INITIATE TAPE MOTION
* RJM /WLB/ODA (LONG BLOCKS)
WTFC EQU *-1
WTF2 RJM IBF PROCESS I/SI FORMAT
WTFD EQU *-2
* UJN *+2 (LONG BLOCKS)
RJM WRT PROCESS WRITE
LDC *
WTFE EQU *-1
NJN WTF4 IF EXIT CONDITIONS
LDD DF
WTFF ZJN WTF1 IF NO DROP OUT
* PSN (PRU WRITE)
* ZJN WTF2 IF NO DROP OUT (CTS AND NOT LONG BLOCK)
WTF3 LJM RET2 REQUEUE
* LJM WTF8 (PRU WRITE)
WTFG EQU *-1
WTF4 SBN 10
PJN WTF6 IF ERROR
ADN 10-1
NJN WTF5 IF NO EOF TO WRITE
SADT .FE,,3,A
LDC * UPDATE OUT (NEEDED FOR 204 WRITE)
CWD CN
LJM RET1 RETURN TO WRITE EOF
WTF5 SBN 4-1
NJN WTF8 IF NOT MODE CHANGE
LDD MD TOGGLE MODE
LMD HN
STD MD
LDD UP
LMN 1
STD UP
UJN WTF3 REQUEUE
WTF6 ZJN WTF7 IF CONTROL WORD ERROR
LDN /MTX/BAE&/MTX/BCW BUFFER ARGUMENT ERROR
WTF7 LMN /MTX/BCW BUFFER CONTROL WORD ERROR
LJM RET3 RETURN ERROR CODE
WTF8 LDN 1
LJM RET SET FET COMPLETE
* LJM EOF (I/SI FORMAT EOF REQUIRED)
WTFH EQU *-1
CKS SPACE 4,10
CNW SPACE 4,20
** CNW - CHECK NEXT WRITE.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
*
* EXIT (WTFE) = 0, NEXT WRITE OKAY.
* 1, EOF WRITE REQUIRED.
* 2, NOT ENOUGH DATA.
* 4, TOGGLE MODE (F FORMAT).
* 10, BUFFER CONTROL WORD ERROR.
* 11, BUFFER ARGUMENT ERROR.
* (BY) = BYTES TO WRITE.
* (T6) = WORD COUNT (INCLUDING CONTROL WORDS).
* (MA+0 - MA+4) = ENTRY VALUE IF CALLED FROM *WRT*.
*
* USES CM - CM+4.
*
* CALLS COB, CDO, SIF, XBF, CNL (LONG BLOCKS).
*
* MACROS SADT.
CNW9 LDN 2 SET NOT ENOUGH DATA
* ENTER HERE FROM LONG BLOCKS.
CNW10 STM WTFE
CNW SUBR ENTRY/EXIT
RJM CDO CHECK DROP OUT FLAG
LDN F0050
STM ITMA WRITE FUNCTION
CNWA LDD WC
* LDN 2 (204 WRITE)
* LDN 1 (264 WRITE)
* LJM /3M /CNL (LONG BLOCKS - FLAG FOR OTHER OVERLAYS)
STD CM+4
CNWB LDN 0 SET UNUSED BIT COUNT
* LDN * (S/L 14, 24, 34 SET FROM FET)
STD CM+2
RJM COB CHECK OUTPUT BUFFER
CNWC SBD CM+4
* STD CM+4 (S/L 14, 24, 34 CODES)
CNWD PJN CNW1 IF ENOUGH DATA
* NJN CNW1 (S/L 14, 24, 34 CODES)
CNWE UJN CNW9 (204/264 WRITE AND ALL S/L FORMAT)
* RAD CM+4 ADJUST WORD COUNT
LDD MD
SHN 21-3
PJN CNW9 IF NOT EOR/EOF WRITE
SHN 21-10-21+3+22
MJN CNW9 IF EOR/EOF WRITTEN THIS OPERATION
CNW1 UJN CNW2
CNWF EQU *-1
* LDD CN+3 (204/264 WRITE)
SHN 6 READ CONTROL WORD
ADD RA
SHN 6
ADD CN+4
CRD CM
CNW2 LDD CM+4 PRESERVE BYTE COUNT 204 WRITE
CNWG UJN CNW3
* STD BY (204 WRITE)
ADN 4 ROUND UP BYTE COUNT
STD CM+4 DIVIDE BY 5
SHN 1 13* BYTES
ADD CM+4
SHN 2
ADD CM+4
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD CM+4 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D
STD CM+4
CNWH UJN CNW3 (NOT F FORMAT)
* LDD MD
LMD CM
SHN -4
LPN 4
NJN CNW5 IF MODE CHANGE
LDD CM+4
CNW3 ADN 0 ALLOW FOR CONTROL WORDS
CNWI EQU *-1
* ADN 1 (264 WRITE)
* ADN 2 (204 WRITE)
STD T6 PRESET FIRST PART WORD COUNT
SADT .BS,C,1
ADC -*
PJN CNW4 IF BLOCK LENGTH ERROR
RJM COB CHECK OUTPUT BUFFER
SBD T6
MJN CNW8 IF NOT ENOUGH DATA
SBD T6
SHN -21
ADC LDNI
STM WRTI
LDD CM+2 CHECK UBC FIELD
CNWJ SBN 1 (I, SI FORMAT INCLUDING 204/260 WRITE)
* SBN 12D (204 WRITE ALL OTHER FORMATS)
* SBN 57D (264 WRITE ALL OTHER FORMATS)
* SBN 57D (ALL S/L FORMAT EXCEPT 204)
MJN CNW6 IF VALID UBC
CNW4 LDN 10 SET BUFFER CONTROL WORD ERROR
CNW5 UJN CNW7 SET EXIT CONDITION
CNW6 LDD CM+4 SET BYTE COUNT
SHN 2
ADD CM+4
CNWK STD BY
* PSN (204 WRITE AND NOT I/SI FORMAT)
RJM XBF PROCESS ALL EXCEPT I, SI FORMAT
CNWL EQU *-2
* RJM SIF (SI FORMAT 9/18 TRACK)
* LDN 0 I FORMAT(9 TRACK ATS OR CTS), I/SI 7 TRACK
* LDN 0
CNW7 LJM CNW10 RETURN
CNW8 LJM CNW9 SET NOT ENOUGH DATA
COB SPACE 4,10
** COB - CHECK OUTPUT BUFFER.
*
* EXIT (A) = WORD COUNT.
* TO LOCATION *CNW10*, IF BUFFER ARGUMENT ERROR.
*
* USES T1 - T5.
*
* MACROS SADT.
COB2 LDD T1+3 LENGTH = IN - OUT
SBD CN+3
SHN 14
ADD T1+4
SBD CN+4
PJN COBX IF IN .GE. OUT
SADT .LF
ADC * (LIMIT - FIRST)
MJN COB1 IF BUFFER ARGUMENT ERROR
COB SUBR ENTRY/EXIT
SADT .FE,,2,A
LDC * READ IN
CRD T1
LDD T1+3
LPN 37
STD T1+3
SHN 14
LMD T1+4
SADT .LM,C
ADC -*
MJN COB2 IF IN .LT. LIMIT
COB1 LDN 11 SET BUFFER ARGUMENT ERROR
UJN CNW7 SET EXIT CONDITION
PWR SPACE 4,10
** RCB - READ CENTRAL BUFFER.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
* (T6) = WORD COUNT.
*
* EXIT (CN+3 - CN+4) UPDATED.
* (T7) = SECOND PART WORD COUNT IF BUFFER WRAP.
*
* MACROS SADT.
RCB2 LDD T7
ZJN RCB3 IF NO SECOND PART
SADT .FT,,,A
LDC * (FIRST+RA)
CRM *,T7
RCBB EQU *-1
UJN RCB4 RESET OUT
RCB3 LDD T6 UPDATE OUT
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* - LIMIT
MJN RCBX IF LIMIT NOT REACHED
SADT .FT
RCB4 LDC * RESET TO FIRST
ADD T7
STD CN+4
SHN -14
STD CN+3
RCB SUBR ENTRY/EXIT
LDD T6
ZJN RCBX IF NO DATA
LDN 0 INITIALIZE SECOND HALF WORD COUNT
STD T7
LDD CN+3 DETERMINE IF BUFFER WRAP
SHN 14
LMD CN+4
ADD T6
SADT .LM,C
ADC -* (-LIMIT)
MJN RCB1 IF LIMIT NOT REACHED
STD T7 SECOND HALF WORD COUNT
LMC -0
RAD T6
RCB1 LDD T6 READ DATA
SHN 2
ADD T6
ADM RCBA
STM RCBB
LDD CN+3 READ FIRST PART
SHN 6
ADD RA
SHN 6
ADD CN+4
CRM BUF,T6
RCBA EQU *-1
* CRM BUFC,T6 (204, 264 WRITE)
LJM RCB2 READ SECOND PART
WRT SPACE 4,15
** WRT - WRITE TAPE.
*
* FOR CTS THE FIRST PART OF *WRT* IS OVERLAYED WITH *WCT*.
*
* ENTRY (BY) = BYTES TO WRITE.
*
* EXIT (CN+3, CN+4) = OUT POINTER.
*
* USES CM - CM+4, CN - CN+3.
*
* CALLS CNW, RCB, UBW, *WEM*, WEO.
*
* MACROS CALL, SADT.
WRT SUBR ENTRY/EXIT
WRTA LDD BY
* UJN WRT2 (LONG BLOCKS)
STM BYWR SAVE BYTES BEING OUTPUT
OAM BUF,CH OUTPUT BLOCK
FJM *,CH
NJN WRT1 IF ABNORMAL TERMINATION
DCN CH+40
WRT1 STM BYRM SAVE BYTES REMAINING
LDM UBWB USE HARDWARE CHECKSUM
STD LG+1
NJN WRT2 IF NONZERO
AOM LG+1 FORCE NONZERO CHECKSUM
WRT2 LDD DS SAVE STATUS AT START OF WRITE
STM STAT
LDD UP CLEAR EOR/EOF LAST BLOCK FLAG
SCN 10
STD UP
LDD MD CLEAR EOR/EOF THIS OPERATION FLAG
LPC 7377
STD MD
WRTB LDC * BLOCK LENGTH - I, SI FORMAT
* PSN (NOT I, SI FORMAT)
* LDD BY (NOT I, SI FORMAT)
WRTC LMC 5000 CHECK FOR FULL BLOCK
* LMC 5004 (I FORMAT)
* LDN 0 (WRITE LABELS)
* LDN 0 (WRITE LABELS)
ZJN WRT3 IF NOT EOR/EOF WRITTEN
LDN 10 SET EOR/EOF FLAGS
RAD UP
LDC 400
RAD MD
WRT3 LDD MA
CWD CN SAVE OLD OUT POINTER
WRTD RJM CNW CHECK NEXT WRITE
* UJN WRT3.1 (WRITE LABELS)
LDM WTFE
ADD DF
WRTE NJN WRT3.1 IF NO MORE DATA OR DROP OUT SET
* UJN WRT3.1 (LONG BLOCKS)
RJM RCB READ NEXT BLOCK FROM CENTRAL BUFFER
WRT3.1 RJM WEO WAIT END OF OPERATION
ZJN WRT4 IF NO ERROR
LDN /MTX/STE STATUS ERROR
WRT4 STD EC
WRTF NJN WRT4.1 IF ERROR
* UJN WRT4.1 (MTS UNIT)
LDM MTDS+1
SHN 21-11
PJN WRT4.1 IF NO GCR CORRECTION
AOM ECNT+2 INCREMENT COUNTER
SHN -14
RAM ECNT+1 INCREMENT ON OVERFLOW
WRT4.1 LDM UBWB USE HARDWARE CHECKSUM
STD LG+1
NJN WRT4.2 IF NONZERO
AOD LG+1
WRT4.2 LDD EC
ADD EI
ZJN WRT5 IF NO ERROR NOR VERIFICATION REQUIRED
LDD MA
CRD CN RESET TO OLD OUT POINTER
LDD DS SAVE STATUS FOR ERROR PROCESSOR
STM //STER
CALL WEM
* RETURN HERE IF END OF TAPE OR IF ERROR WAS RECOVERED.
LDD MA
CWD CN RESTORE MA BACK TO OLD OUT POINTER
LDM WTFE
ADD DF
WRTG NJN WRT5 IF NO MORE DATA OR DROP OUT SET
* UJN WRT5 (WRITE LABELS OR LONG BLOCKS)
LDM WRTK
LMC WRTX
NJN WRT5 IF END OF TAPE
RJM RCB READ CENTRAL BUFFER
WRT5 LDD LG+1 SAVE LAST GOOD RECORD INFORMATION
STD LG
RJM UBW UPDATE BID WINDOW
WRTH PSN ALL NORMAL WRITES
* UJN WRT7 WRITE LABELS
LDD MA
CRD CM SET TO OLD OUT POINTER
UJN WRT5.1 WRITE OUT TO FET
BSS 7 ALLOW SPACE FOR THE END OF *WCT*
* START OF COMMON CODE WITH *WCT*. *WCT* OVERLAYS THE FIRST
* PART OF *WRT* FOR CTS.
WRT5.1 BSS 0
SADT .FE,,3,A
LDC * WRITE OUT TO FET
CWD CM
WRTI LDN 0
ZJN WRT6 IF AT LEAST ONE MORE BLOCK
LDD OA RECALL CPU
CWM WRTL,ON
WRTJ EQU *-2
* UJN *+2 (NOT BUFFERED WRITE)
WRT6 AOD BL+1 INCREMENT BLOCK COUNT
SHN -14
RAD BL
WRT7 AOD BT INCREMENT BLOCKS WRITTEN
LJM WRTX RETURN
WRTK EQU *-1
* LJM /3M /EOTEXIT (RETURN ERROR ON END OF TAPE)
WRTL CON DRCM DRIVER RECALL CPU MONITOR FUNCTION
SPACE 4,10
USE OVLB
OVLB BSS 0 ORIGIN FOR LONG BLOCK PROCESSOR
* THE FOLLOWING ROUTINES CANNOT USE ADDRESS MODIFICATION.
IBF SPACE 4,10
** IBF - INTERNAL BLOCK FORMAT.
* THIS ROUTINE SETS UP THE I FORMAT TRAILER BYTES AND ADJUSTS
* THE BYTE COUNT SO AN EVEN BYTE COUNT IS WRITTEN.
*
* ENTRY (BY) = BYTE COUNT OF BLOCK.
*
* EXIT (BY) = ADJUSTED BYTE COUNT OF BLOCK,
* INCLUDING TERMINATOR.
IBF SUBR ENTRY/EXIT
IBFA LDM LNUM SET LEVEL NUMBER IN TERMINATOR
* LDM BUF,BY (204 WRITE)
LPN 17
STM BUF+3,BY
LMN 17
NJN IBF1 IF NOT EOF BLOCK
LDD BY
ZJN IBF1 IF NO DATA IN BLOCK
LDN 0 CLEAR LEVEL NUMBER
STM BUF+3,BY
IBF1 LDD BY CHECK FOR FULL BLOCK
LMC 5000
IBFB NJN IBF2 IF NOT FULL BLOCK I FORMAT
* ZJN IBF3 (IF FULL BLOCK SI FORMAT)
IBFC STM BUF+3,BY CLEAR LEVEL NUMBER
* PSN (SI FORMAT)
* PSN (SI FORMAT)
IBF2 LDN 4 ADJUST BLOCK SIZE FOR TERMINATOR
RAD BY
STM BUF-4,BY SET BLOCK LENGTH
LDD BL SET BLOCK NUMBER
STM BUF-3,BY
LDD BL+1
STM BUF-2,BY
LDN 0 CLEAR EXTRA BYTE
STM BUF,BY
* ADJUST BYTE COUNT FOR 9/18 TRACK.
IBF3 LDD BY
STM WRTB+1 SAVE BYTE COUNT
IBFE EQU *-1
* STM WCTC+1 (CTS)
IBFD LPN 0
* LPN 1 (9/18 TRACK)
RAD BY
LJM IBFX RETURN
SIF SPACE 4,10
** SIF - PROCESS SI FORMAT 9 TRACK (ATS).
* PROCESS I/SI FORMAT 9 TRACK (MTS).
* PROCESS SI FORMAT (CTS).
*
* EXIT (A) = 0.
* (ITMA) = 250 IF 3N+2 OR ODD WRITE REQUIRED.
* = 50 OTHERWISE.
SIF1 ZJN SIF2 IF 50 WRITE FUNCTION
LDC F0250-F0050
SIF2 ADN F0050 ADD FUNCTION
STM //ITMA
LDN 0 SET EXIT CONDITION
SIF SUBR ENTRY/EXIT
LDD BY
LPN 1
SIFA UJN SIF1 ATS CONTROLLER
* ADD BY (MTS CONTROLLER I FORMAT)
* LDD BY (MTS CONTROLLER SI FORMAT)
LPN 2
SHN -1
UJN SIF1 SET EXIT
EOF SPACE 4,10
** EOF - WRITE I/SI FORMAT EOF.
*
* EXIT (A) = 1.
* TO *RET* TO SET FET COMPLETE.
* (BY) = 0.
* (T6) = 0.
*
* CALLS IBF, ITM, WRT.
EOF BSS 0 ENTRY
LDN 0 SET TO WRITE EOF
STD BY
STD T6
LDN 17 SET LEVEL NUMBER
STM LNUM
LDN F0050
STM //ITMA
RJM //ITM INITIATE TAPE MOTION
EOFB EQU *-2
* UJN *+2 (CTS)
RJM IBF PROCESS I/SI FORMAT BLOCK WRITE
RJM WRT PROCESS WRITE
EOFC EQU * (USED TO TELL WHERE *WRT* CALLED FROM)
LCN 14 CLEAR EOF INDICATOR
RAD MD
LDN 1
LJM RET SET FET COMPLETE
BUFFER SPACE 4,10
BUFFER
.XBFA BSS 0
LOC OVLB
XBF SPACE 4,15
** XBF - EXTERNAL BLOCK FORMAT.
*
* ENTRY (CM+2) = UBC.
* (T6) = WORD COUNT.
* (CN+3 - CN+4) = OUT POINTER.
*
* EXIT (A) = 0, IF NO EOF WRITE NEEDED.
* (A) = 1, IF EOF NEEDED.
* (A) = 2, IF NOT ENOUGH DATA.
* (A) = 10, IF BAD CONTROL WORD.
* (ITMA) = 250 IF 3N+2 WRITE REQUIRED.
* = 50 OTHERWISE.
*
* CALLS RCB.
XBF7 LDN 14 SET EOF STATUS
RAD MD
LDN 1
UJN XBFX RETURN
XBF8 LDD MA SAVE OUT POINTER
CWD CN
RJM RCB READ CENTRAL BUFFER
LDM BUF
LMN 17
ZJN XBF7 IF EOF WRITE
LDD MA BACK UP FET POINTER
CRD CN
UJN XBF2 CONTROL WORD ERROR
XBF9 LDD FM CHECK FOR NOISE
LPN 37
SBD BY
SBN 1
PJN XBF2 IF NOISE
XBFD EQU *-1
* LDN 0 (CTS)
LDN 0
XBF SUBR ENTRY/EXIT
LDC F0050 SET FUNCTION
XBFE EQU *-1
* LDC F0250 CTS S FORMAT CODED WRITE
STM //ITMA
LDD BY
XBFA ZJN XBF8 IF POSSIBLE 204 CODE EOF WRITE
* PSN ALL OTHERS
XBF1 LDD CM+2 ADJUST BYTE OCUNT
SBN 12D
MJN XBF3 IF LESS THAN ONE BYTE
STD CM+2
SOD BY
PJN XBF1 IF VALID CONTROL WORD
XBF2 LDN 10 INCORRECT WORD
UJN XBFX RETURN
* THE FOLLOWING CODE IS EXECUTED FOR ATS CONTROLLER S, L AND
* F FORMAT 9 TRACK BINARY TAPES. IT IS ALSO EXECUTED FOR
* CTS. FOR MTS CONTROLLER S, L, AND F FORMAT 9 TRACK BINARY
* TAPES, THE AREA IS OVERLAID BY CODE AT .MXBO. FOR 7 TRACK
* CODED/BINARY AND 9 TRACK CODED TAPES THE AREA IS OVERLAID
* BY CODE AT .MXCO.
.MXBA BSS 0
XBF3 LDD BY
LPN 1
NJN XBF5 IF ODD BYTE COUNT
LDD CM+2
SBN 8D
PJN XBF6 IF .GT. 8 UNUSED BITS
XBF4 UJN XBF9 CHECK FOR NOISE
XBF5 LDD CM+2
SBN 4
PJN XBF4 IF 4 OR MORE UNUSED BITS
AOD BY INCREMENT BYTE COUNT
XBF6 LDC 250 SET 3N+2 WRITE FUNCTION
STM //ITMA
UJN XBF4 CHECK FOR NOISE
.XBFB BSS 0
ERRNG BUFC-* OVERFLOWED INTO BUFFER
LOC *O
.XBFL EQU *-.XBFA
MXB SPACE 4,10
** MXB - SET BYTE COUNT AND WRITE FUNCTION FOR
* EXTERNAL 9 TRACK MTS TAPES.
.MXBO BSS 0
LOC .MXBA
LDD BY SET BYTE COUNT MODULO 4
LPN 3
STD T0
SHN 1
ADD T0 BYTE COUNT * 3
SHN 2 BYTE COUNT * 12
SBD CM+2 MINUS UBC
PJN MXB1 IF NOT UNDERFLOW
ADN 48D
MXB1 ADN 7 ROUND UP
SHN -3+21 DIVIDE BY 8
PJN MXB3 IF EVEN FRAME COUNT WRITE
LDC 250 SET ODD FRAME COUNT WRITE
STM //ITMA
MXB2 LJM XBF9 CHECK FOR NOISE
MXB3 LDD T0 CHECK FOR SPECIAL CASE
LMN 1
NJN MXB2 IF NOT ODD CASE
AOD BY
UJN MXB2 CHECK FOR NOISE
ERRNG BUFC-*
LOC *O
.MXBL EQU *-.MXBO LENGTH OF MTS 9 TRACK CODE
SPACE 4,10
** SET WRITE FUNCTION FOR 7 TRACK CODED/BINARY OR
* 9/18 TRACK CODED TAPES.
.MXCO BSS 0
LOC .MXBA
ADN 6
MJN MXC1 IF EVEN CHARACTER COUNT
LDC F0250 SET SHORT WRITE
STM //ITMA
MXC1 LJM XBF9 CHECK FOR NOISE
ERRNG BUFC-* CODE OVERFLOW BUFFER
LOC *O
.MXCL EQU *-.MXCO 9 TRACK CODED OR 7 TRACK CODE LENGTH
PRS SPACE 4,25
** PRS - PRESET.
* THIS ROUTINE DOES CODE MODIFICATION FOR WRITE AND WRITE
* LABEL FUNCTIONS.
*
* EXIT TO *PRSX* TO LOAD *CPP* OVERLAY, THEN RETURN AT
* *PRS54* IF WRITE DATA AND NOT LONG BLOCK. WHEN
* PRESET IS COMPLETE EXIT TO *WTF*.
* TO *PRSX* TO LOAD WRITE LABEL OVERLAY IF WRITE
* LABEL FUNCTION.
* TO *PRSX* WITH (SC) = (SC)+1 TO LOAD LONG BLOCK
* OVERLAY FOR F AND L FORMAT.
* TO *PRSX* WITH (SC) = (SC)+2 TO LOAD LONG BLOCK
* OVERLAY FOR LI FORMAT.
* TO *RET3* IF NOT READY, NO WRITE ENABLE, OR ILLEGAL
* CODED FORMAT ERROR.
* TO *WTF4* IF OTHER ERROR.
* (WP, EP+1) PLUS THE BLOCK NUMBER IN (BL,BL+1) IS THE
* PHYSICAL BLOCK NUMBER IF CTS.
*
* USES CN, CN+4, T1, T8, CM - CM+4, T3 - T7.
*
* CALLS CNW, MCH, /PRESET/RBI, UAD.
PRS BSS 0 ENTRY
* VALIDATE WRITE ACCESS.
LDN /MTX/WTB 200 BPI WRITE SUB-CODE
STD T0
LDM DNCV CHECK FOR 200 BPI WRITE
LPN 70
LMN /MTX/D02*10
ZJN PRS7 IF 200 BPI WRITE
AOD T0 WRITE ACCESS DISABLED SUB-CODE
ERRNZ /MTX/NWR-/MTX/WTB-1
LDD SP
SHN 21-3
MJN PRS7 IF READ ONLY ACCESS
AOD T0 LABEL NOT EXPIRED SUB-CODE
ERRNZ /MTX/LNE-/MTX/NWR-1
RJM UAD
ADN /MTX/UVSN
CRD CM
LDD CM+3
SHN 21-1
MJN PRS6 IF LABEL EXPIRED
LDD SP
SHN 21-10
MJN PRS7 IF ENFORCING LABEL EXPIRATION
PRS6 SOD T0 WRITE ACCESS DISABLED SUB-CODE
ERRNZ /MTX/LNE-/MTX/NWR-1
LDD DS
SHN 21-7
MJN PRS10 IF UNIT WRITE ENABLED
SHN 0-0-21+7+22
LPN 1
ZJN PRS8 IF UNIT NOT READY
PRS7 LDD T0 SET ERROR SUB-CODE
STM ERSC
LDN /MTX/NWE&/MTX/RDR NO WRITE ENABLE
PRS8 LMN /MTX/RDR READY DROP
LJM RET3 RETURN ERROR CODE
* COMPLETE PRESET.
PRS10 LDD HP
SHN 21-7
PJN PRS11 IF NOT CTS
LDD BL
ADD BL+1
NJN PRS11 IF STARTING BLOCK ID ALREADY SAVED
RJM /PRESET/RBI READ BLOCK ID
AOM /PRESET/PICA LOCATE BLOCK NECESSARY IN ERROR RECOVERY
LDM BIDW+1
STD WP SAVE CURRENT BLOCK ID
LDM BIDW+2
STD EP+1
PRS10.2 LDD FN
LMN /MTX/WLA
NJN PRS11 IF NOT WRITE LABEL
LDD PB
SHN -6
LMN 1
ZJN PRS12 IF WRITE TRAILER LABEL
PRS11 RJM UAD SET FILE WRITTEN FLAG
ADK /MTX/UVRI
CRD T3
ADN /MTX/UTMS-/MTX/UVRI
CRD CM
AOD T3+3 GET REEL NUMBER
STD CM+2
RJM UAD
ADN /MTX/UTMS
CWD CM
PRS12 LDD FM SET TAPE FORMAT
SHN -6
STD T8
LDD FN
LMN /MTX/WTF
NJN PRS13 IF NOT WRITE DATA
LDD T8
LMN /MTX/TFLI
NJN PRS13 IF NOT LI FORMAT
LDN 2
RAD SC SET TO LOAD *WLI* OVERLAY
LJM PRSX RETURN
PRS13 LDC PRSB
RJM MCH MODIFY CHANNELS
LDN F0050 WRITE FUNCTION
STM //ITMA
LDD HP
SHN 21-7
PJP PRS15 IF NOT CTS
ISTORE /PRESET/GPSC,(UJN /PRESET/GPS6.1) DO NOT SEND CONTINUE
LDC WCTL-1
STD T1
PRS14 LDM .WCT,T1 REPLACE *WRT* WITH *WCT*
STM WRTX,T1
SOD T1
PJN PRS14 IF MORE CODE TO MOVE
LDC WCTK
RJM MCH MODIFY CHANNEL INSTRUCTIONS
ISTORE WTFB-1,(UJN WTF2) SKIP INITIATE TAPE MOTION
LDC WCTC+1
STM IBFE LOCATION TO STORE BLOCK LENGTH
ISTORE WTFF,(ZJN WTF2) JUMP ADDRESS IF NO DROP OUT
LDC WCTD+1
STM PRSA ADDRESS TO SET MAXIMUM BLOCK SIZE
LDC UJNI+2
STM EOFB SKIP INITIATE TAPE MOTION
LDC 6331 GENERAL STATUS BITS TO TEST
STM /PRESET/WFEA
LDC 201 GENERAL STATUS BITS THAT SHOULD BE SET
STM /PRESET/WFEB
UJN PRS16 CONTINUE PRESET
PRS15 LDC 4635 GENERAL STATUS BITS TO TEST
STM //WEOA
LDC 201
STM //WEOB GENERAL STATUS BITS THAT SHOULD BE SET
PRS16 LDD FN CHECK SOFTWARE FUNCTION
LMN /MTX/WTF
ZJN PRS17 IF WRITE FUNCTION
LDN /MTX/TFF PROCESS AS IF F FORMAT
STD T8
PRS17 LDD T8
SBN /MTX/TFSI+1
PJN PRS18 IF S/L/F FORMAT
LJM PRS28 PRESET I/SI FORMAT
* PRESET FOR S/L/F FORMAT.
PRS18 LDN .XBFL-1 MOVE CODE FOR S/L/F FORMATS
STD T1
PRS19 LDM .XBFA,T1
STM OVLB,T1
SOD T1
PJN PRS19 IF MORE CODE TO MOVE
LDD MD CHECK MODE
SHN 21-6
PJN PRS22 IF NOT CODED
PRS20 LDN .MXCL-1 TRANSFER 9/18 TRACK CODED OR 7 TRACK CODE
STD T1
PRS21 LDM .MXCO,T1
STM .MXBA,T1
SOD T1
PJN PRS21 IF MORE CODE TO MOVE
UJN PRS24 CONTINUE WITH CODED PROCESSING
PRS22 LDD HP CHECK TRACK TYPE
SHN 21-7
MJN PRS24 IF CTS
SHN 21-0-21+7
PJN PRS20 IF 7 TRACK BINARY
LDD HP CHECK CONTROLLER TYPE
LPN 40
ZJN PRS24 IF NOT MTS CONTROLLER
LDN .MXBL-1 MOVE CODE FOR MTS 9 TRACK BINARY S/L/F
STD T1
PRS23 LDM .MXBO,T1
STM .MXBA,T1
SOD T1
PJN PRS23 IF MORE CODE TO MOVE
PRS24 LDC UJNI+2 PROCESS WRITE
STM WTFD
LDD HP
SHN 21-7
PJN PRS25 IF NOT CTS
LDN 0
STM WCTC
STM XBFD NO NOISE FOR CTS
LDC LDDI+BY
STM WCTC+1
LDC UJNI+2 SKIP *IBF* DURING COMMAND RETRY
STM WCTH
UJN PRS26 CONTINUE PRESET
PRS25 LDN 0 SET NON I/SI FORMAT BYTE COUNT
STM WRTB
LDC LDDI+BY
STM WRTB+1
PRS26 LDD MD
LPN 40
NJN PRS27 IF 204 WRITE
STM XBFA
PRS27 LJM PRS36 CONTINUE PRESET
* PRESET FOR I/SI FORMAT.
PRS28 LDD HP
SHN 21-7
MJN PRS29 IF CTS
SHN 21-0-21+7
PJN PRS33 IF 7 TRACK
PRS29 AOM IBFD
LDD HP
LPN 40
ZJN PRS32 IF NOT MTS CONTROLLER
LDD T8
LMN /MTX/TFI
ZJN PRS30 IF I FORMAT
LDC LDDI&ADDI SET FOR SI FORMAT
PRS30 LMC ADDI+BY
STM SIFA
PRS31 LDC SIF
UJN PRS34 SET CALL TO SIF
PRS32 LDD T8
LMN /MTX/TFSI
ZJN PRS31 IF SI FORMAT
PRS33 LDC LDNI
STM CNWL
PRS34 STM CNWL+1
LDD T8
LMN /MTX/TFI
ZJN PRS35 IF NOT SI FORMAT
LDC 0 SET TO INITIALIZE SI BLOCK
ORG *-1
LOC IBFB
ZJN IBF3 IF FULL BLOCK SI FORMAT
LOC *O
STM IBFB
LDN 0
STM IBFC
STM IBFC+1
LCN 4
PRS35 ADN 4
RAM WRTC+1 SET MAXIMUM BLOCK SIZE
PRSA EQU *-1
* RAM WCTD+1 (CTS)
LDD MD
LPN 40
ZJN PRS36 IF NOT 204 WRITE
LDN BY SET TO GET LEVEL NUMBER FROM TRAILER
RAM IBFA
LDC BUF
STM IBFA+1
PRS36 LDD MD
LPN 60
SHN -4
STD T7
ZJN PRS38 IF NOT CONTROL WORD
LMC LDNI
STM CNWA
LPN 3
RAM CNWI
LDC LDDI+CN+3
STM CNWF
LDC BUFC
STM RCBA
LDD T8
SBN /MTX/TFSI+1
MJN PRS38 IF I OR SI FORMAT
LDD T7
LPN 2
ZJN PRS37 IF NOT 204 WRITE
LCN -12D+57D
PRS37 ADC SBNI+57D
STM CNWJ
PRS38 LDD T7
LPN 2
ZJN PRS40 IF NOT 204 WRITE
LDC STDI+BY
STM CNWG
LDD T8
LMN /MTX/TFF
NJN PRS39 IF NOT F FORMAT
LDC LDDI+MD ENABLE MODE CHANGE
STM CNWH
PRS39 UJN PRS42 CONTINUE PRESET
PRS40 LDD T7
NJN PRS42 IF CONTROL WORD WRITE
LDM CIOE SET TYPE OF WRITE OPERATION
SHN -3
SHN 2
LMD MD
LPN 14
LMD MD
STD MD
LPN 14
NJN PRS41 IF NOT PRU WRITE (004)
* LDN 0
STM WTFF
LDC WTF8
STM WTFG
PRS41 LDD MD
LPN 14
LMN 4
ZJN PRS42 IF WRITE (014)
LDC UJNI+2 BYPASS *DRCM*
STM WRTJ
PRS42 LDD T8
SBN /MTX/TFSI+1
MJN PRS43 IF I OR SI FORMAT
LDD T7
LPN 2
LMN 2
NJN PRS43 IF NOT 204 WRITE
STM CNWK
PRS43 LDD T8
LMN /MTX/TFS
ZJN PRS44 IF S FORMAT
LMN /MTX/TFL&/MTX/TFS
NJN PRS46 IF NOT L FORMAT
PRS44 LDD T7
NJN PRS45 IF CONTROL WORD OPERATION
* LDN 0
STM WTFF SET FOR PRU OPERATION
LDC WTF8
STM WTFG
LDC STDI+CM+4
STM CNWC
LDM LNUM SET UBC
LPN 77
RAM CNWB
LDC SBNI+57D
STM CNWJ
LDC NJNI-PJNI
RAM CNWD
PRS45 UJN PRS47 CONTINUE PRESET
PRS46 LDD T7
NJN PRS47 IF CONTROL WORD WRITE
LDC RADI+CM+4
STM CNWE
PRS47 LDM LNUM SET LEVEL NUMBER
SHN -10
STM LNUM
LDD FN
LMN /MTX/WTF
NJN PRS48 IF NOT WRITE DATA
LDD MD
LPN 14
LMN 14
PRS48 NJN PRS50 IF NOT EOF WRITE
LDD T8
SBN /MTX/TFSI+1
PJN PRS49 IF NOT I/SI FORMAT
LDC EOF SET TO WRITE EOF
STM WTFH
LDM LNUM
LMN 17
NJN PRS49 IF NOT LEVEL 17
STM LNUM DO NOT WRITE DOUBLE EOF
PRS49 LDD MD CLEAR EOR/EOF FLAG THIS OPERATION
LPC 7377
STD MD
LDD UP CHECK LAST OPERATION EOR/EOF
LPN 30
LMN 20
ZJN PRS50 IF LAST OPERATION INCOMPLETE WRITE
LDM CIOE
SHN 21-12
MJN PRS50 IF DATA IN BUFFER
LDC 400 SET EOR/EOF FLAG THIS OPERATION
RAD MD
PRS50 LDD UP
SCN 24 CLEAR BLANK TAPE FLAG
LMN 20 SET LAST OPERATION WRITE FLAG
STD UP
LDC PRSC SET UP FOR INSTRUCTION MODIFICATION
STD CN
LDN 3 SET TO RETURN OUT POINTER
STD CN+4
LDC /SRU/ITRW*100 SET SRU INCREMENT
STM //CECA
LDD OV
ZJN PRS52 IF NOT POSSIBLE LONG BLOCKS
LDD T8
LMN /MTX/TFL
ZJN PRS51 IF L FORMAT
LMN /MTX/TFF&/MTX/TFL
NJN PRS52 IF NOT F FORMAT
PRS51 LDD FN
LMN /MTX/WTF
NJN PRS53 IF NOT WRITE
AOD SC SET TO LOAD LONG BLOCK OVERLAY
PRS52 LDD FN
LMN /MTX/WTF
NJN PRS53 IF NOT WRITE DATA
LDC PRS54 SET TO RETURN HERE IF NOT LONG BLOCKS
STD BT
PRS53 LJM PRSX RETURN
* RETURN HERE AFTER ALL ROUTINES LOADED IF WRITE DATA.
PRS54 LDD HP
SHN 21-7
PJN PRS55 IF NOT CTS
LDD CN+3
STM OPTU SAVE OUT POINTER FOR COMMAND RETRY
LDD CN+4
STM OPTL
PRS55 RJM CNW CHECK FIRST WRITE
ZJN PRS56 IF WRITE OK
LJM WTF4 PROCESS ERROR CONDITION
PRS56 LDD HP
SHN 21-7
PJN PRS59 IF NOT CTS
LDD MD
SHN 21-6
PJN PRS58 IF NOT CODED
LDD BY
LMN LABL
ZJN PRS57 IF CORRECT LENGTH FOR LABEL
LDN /MTX/SCI CODED I/O NOT SUPPORTED
LJM RET3 RETURN ERROR CODE
PRS57 LDC F0250
STM ITMA SHORT WRITE
STM XBFE
LDC LDNI+CCW/10000
STM WCTA DO CODE CONVERSION
LDC LDNI+CLBL
STM WCTB LENGTH TO WRITE
PRS58 UJN PRS61 SET BLOCKS WRITTEN FLAG
PRS59 SHN 21-5-21+7
PJN PRS60 IF NOT MTS UNIT
LDC UJNI-NJNI
RAM WRTF
PRS60 LDM DLYA
LPN 14
ZJN PRS61 IF 1X PPU SPEED
LPN 4
ZJN PRS61 IF 2X PPU SPEED
LDC ITM ENABLE MOTION AHEAD
STM WTFA+1
LDC RCB
STM WTFB
PRS61 LDC 4000 SET BLOCKS WRITTEN FLAG
STD BT
LJM WTF INITIATE WRITE
PRSB CHTB
PRSC TSAD
WCT SPACE 4,15
** WCT - WRITE CARTRIDGE TAPE.
*
* THIS ROUTINE OVERLAYS THE FIRST PART OF *WRT* FOR CTS.
* THE LENGTH OF THIS ROUTINE MUST BE THE SAME AS THE LENGTH
* OF THE FIRST PART OF *WRT*.
*
* ENTRY (BY) = BYTES TO TRANSFER.
*
* EXIT (CN+3, CN+4) = OUT POINTER.
* TO */WLB/ODAB* IF COMMAND RETRY FOR LONG BLOCKS.
*
* USES CM - CM+4, CN - CN+2.
*
* CALLS CNW, *CWP*, IBF, ITM, LOV, RCB, /PRESET/WFE.
*
* MACROS CALL.
.WCT BSS 0
LOC WRTX
WCT SUBR ENTRY/EXIT
WCT1 UJN WCT2 WRITE DATA, NOT LONG BLOCKS
WCTA EQU *-1
* LDN CCW/10000 (CODE CONVERSION OVERLAY NUMBER)
* UJN WCT3 (LONG BLOCKS)
RJM LOV LOAD OVERLAY AND DO CODE CONVERSION
WCT2 RJM ITM
LDD BY
WCTB EQU *-1
* LDN CLBL (CTS LABEL LENGTH)
OAM BUF,CH OUTPUT BLOCK
FJM *,CH
* DELAY 10 MICROSECONDS TO PREVENT A HARDWARE ERROR IN THE
* CCC. THE DISCONNECT WOULD SOMETIMES CAUSE THE LAST BYTE TO
* BE LOST.
LDN 20
SBN 1
NJN *-1
DCN CH+40
WCT3 LDD UP
SCN 10 CLEAR EOR/EOF LAST BLOCK FLAG
STD UP
LDD MD
LPC 7377 CLEAR EOR/EOF THIS OPERATION FLAG
STD MD
LDC * BLOCK LENGTH (I, SI FORMAT)
WCTC EQU *-2
* PSN (NOT I, SI FORMAT)
* LDD BY (NOT I, SI FORMAT)
LMC 5000
WCTD EQU *-2
* LMC 5004 (I FORMAT)
* LDN 0 (WRITE LABEL)
* LDN 0 (WRITE LABEL)
ZJN WCT4 IF NOT EOR/EOF WRITTEN
LDN 10
RAD UP SET EOR/EOF FLAGS
LDC 400
RAD MD
WCT4 LDD MA
CWD CN SAVE OLD OUT POINTER
RJM CNW CHECK NEXT WRITE
WCTE EQU *-2
* UJN WCT5 (WRITE LABEL)
LDM WTFE
ADD DF
NJN WCT5 IF NO MORE DATA OR DROP OUT SET
WCTF EQU *-1
* UJN WCT5 (LONG BLOCKS)
RJM RCB READ NEXT BLOCK FROM CENTRAL BUFFER
WCT5 RJM /PRESET/WFE WAIT FOR END OF OPERATION
PJP WCT8 IF NOT COMMAND RETRY
LDM OPTU RESET OUT POINTER
WCTG EQU *-2
* UJN WCT7 (WRITE LABELS)
STD CN+3
LDM OPTL
STD CN+4
LDD MD
LPC 7377 CLEAR EOR/EOF THIS OPERATION FLAG
STD MD
RJM CNW CHECK NEXT WRITE
LDM WCT
LMC EOFC
NJN WCT6 IF NOT CALLED FROM *EOF*
STD T6
STD BY SET TO WRITE EOF
RJM IBF
UJN WCT7 ISSUE THE CONTINUE FUNCTION
* FOR LONG BLOCKS, THE FOLLOWING CODE IS OVERLAYED WITH
* */WLB/.WCT*.
* LDN F0002 (LONG BLOCKS)
* STM ITMA (LONG BLOCKS)
* LJM /WLB/ODAB (LONG BLOCKS)
WCT6 RJM RCB READ CENTRAL BUFFER
RJM IBF PROCESS I/SI FORMAT
WCTH EQU *-2
* UJN *+2 (NOT I/SI FORMAT)
WCT7 LDN F0002
STM ITMA CONTINUE IS THE NEXT FUNCTION
LJM WCT1 RETRY THE WRITE
WCTI EQU *-1
* LJM WCT2 (WRITE LABEL)
WCT8 ZJN WCT9 IF NO ERROR
LDN /MTX/STE STATUS ERROR
WCT9 STD EC
ADD EI
ZJN WCT10 IF NO ERROR OR NO RECOVERED ERROR
LDD MA
CRD CN RESET TO OLD OUT POINTER
CALL CWP
* RETURN HERE IF END OF TAPE OR RECOVERED ERROR.
LDM WTFE
ADD DF
NJN WCT10 IF NO MORE DATA OR DROP OUT
WCTJ EQU *-1
* UJN WCT10 (LONG BLOCKS)
* UJN WRT7 (WRITE LABEL)
LDM WRTK
LMC WRTX
NJN WCT10 IF END OF TAPE
RJM RCB READ CENTRAL BUFFER
WCT10 LDD MA
WCTM EQU *-1
* UJN WRT7 (WRITE LABEL)
CRD CM
LDD CM+3
STM OPTU SAVE OUT POINTER FOR COMMAND RETRY
LDD CM+4
STM OPTL
WCTL EQU *-WCTX LENGTH OF *WCT*
ERRNZ WRT5.1-* ADJUST *BSS* BEFORE *WRT5.1*
LOC *O
WCTK CHTB CHANNEL TABLE
SMA SPACE 4,10
OVERLAY (WRITE LONG BLOCK PROCESSOR.),(BUFC+12),,WLB
.IM SET 1 SET FOR ADDRESS MODIFICATION ON ERRORS
* LOCAL TO OVERLAY DEFINITIONS.
NC EQU PA NUMBER OF CHUNKS
BC EQU PB BYTE COUNT LAST CHUNK
ODA SPACE 4,10
** ODA - OUTPUT DATA.
*
* CALLS ADP, CRA, ITM, OPA, OPD, OPI, OPL, RDA, SRQ.
*
* MACROS CHTE.
ODA SUBR ENTRY/EXIT
RJM //ITM INITIATE TAPE MOTION
* UJN *+2 (ANY GCR UNIT AT 1X PPU SPEED
* OR 200 IPS GCR UNIT AT 2X SPEED)
* UJN *+2 (CTS)
ODAA EQU *-1
ODAB LDN 0 ALLOW FOR CONTROL WORD
* LDN 1 (204/264 WRITE)
RJM ADP
LDN 0 PRESET CHUNKS OUTPUT COUNT
STD CM+7
LDC LBBY
STD BY
LDM OPAB SET FIRST CHUNK FLAGS
* LDM OPIB (CYBER 180)
ODAC EQU *-1
STM OPAA
* STM OPIA (CYBER 180)
* STM OPDA (MTS)
ODAD EQU *-1
LDN PSNI ENABLE WAIT FOR *1LT*
STM OPLA
* STM OPEA (CYBER 180)
* STM ODAF (MTS)
ODAF EQU *-1
LDD NC
ZJN ODA5 IF *1LT* NOT NEEDED
SBN 2
PJN ODA1 IF *1LT* NEEDED
LDD BC
ZJN ODA4 IF *1LT* NOT NEEDED
ADC LBBY-LCKS SET BYTE COUNT FOR CHECKSUM
MJN ODA2 IF .LT. L TAPE SIZE
ODA1 LDN 0
ODA2 ADC LCKS
STM RDAB
LDC LDNI+1
STM ODAL SET *1LT* CALLED FLAG
LDN 0 SET UP POINTERS FOR *1LT*
RJM ADP
ODAG LDN 1 SEND REQUEST TO *1LT*
* UJN ODA3 (ANY GCR UNIT AT 1X PPU SPEED
* OR 200 IPS GCR UNIT AT 2X SPEED)
* UJN ODA3 (CTS)
RJM SRQ
ODA3 UJN ODA8 OUTPUT DATA
ODA4 LDC LBBY
STD BC
LDC /MTX/LBWD
STM .WC
ODA5 LDM OPLB SET *1LT* NOT NEEDED FLAGS
* LDM OPEB (CYBER 180)
ODAH EQU *-1
STM OPLA
* STM OPEA (CYBER 180)
ODAI EQU *-1
LDD BC
STM RDAB SET BYTE COUNT FOR CHECKSUM
STD BY
LJM ODA11 SET UP TO READ NEXT BLOCK
ODA6 LDN 2 INCREMENT CHUNK COUNT
RAD CM+7
SBD NC
PJN ODA9 IF NO MORE FULL CHUNKS
ADN 1
NJN ODA7 IF NOT 1 CHUNK LEFT
LDD BC
ZJN ODA9 IF ZERO REMAINDER
ODA7 LDC /MTX/LBWD SKIP OVER DATA *1LT* OUTPUT
RJM ADP
ODA8 LDC /MTX/LBWD SET UP TO READ NEXT DATA CHUNK
RJM RDA READ DATA
RJM OPD OUTPUT DATA
* RJM OPA (ATS NON-CYBER 180)
* RJM OPI (CYBER 180)
ODAJ EQU *-1
ZJN ODA6 IF FULL BLOCK OUTPUT
UJP ODA14 STORE BYTES NOT WRITTEN
ODA9 ZJN ODA10 IF TRANSFER NOT COMPLETE FOR *1MT*
LDM .WC ADVANCE POINTER OVER *1LT,S* CHUNK
RJM ADP
UJN ODA15 CHECK IF *1LT* WAS CALLED
ODA10 AOD CM+7 COUNT CHUNK
LDC /MTX/LBWD SKIP OVER DATA *1LT* OUTPUT
RJM ADP
LDD BC
ZJN ODA12 IF POSSIBLE OUTPUT COMPLETE
STD BY
ODA11 LDM .WC SET UP TO READ UP NEXT BLOCK
UJN ODA13 READ DATA
ODA12 LDD NC
LPN 1
ZJN ODA15 IF OUTPUT COMPLETE
LDC /MTX/LBWD
ODA13 RJM RDA READ DATA
RJM OPD OUTPUT DATA
* RJM OPL (ATS NON-CYBER 180 - OUTPUT LAST CHUNK)
* RJM OPE (CYBER 180 - OUTPUT LAST CHUNK)
ODAK EQU *-1
FJM *,CH
NJN ODA14 IF INCOMPLETE TRANSFER
* A 10 MICROSECOND DELAY MUST BE DONE TO PREVENT POSSIBLE LOSS
* OF THE LAST BYTE OF THE TRANSFER BY THE CCC FOR CTS.
LDN 20
SBN 1
NJN *-1
DCN CH+40
ODA14 STM /WRITE/BYRM
ODA15 LDN 0
ODAL EQU *-1
ZJN ODA17 IF *1LT* NOT CALLED
SOM ODAL CLEAR *1LT* CALLED FLAG
ODA16 RJM CRA CHECK REQUEST ACCEPTANCE FROM *1LT*
LMN 2
NJN ODA16 IF NOT ACCEPT
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
ODA17 LDD CM+7
ZJN ODA18 IF NO FULL CHUNKS OUTPUT
LCN 0 SET TO NOT CONTROL BACKSPACE
STM /WRITE/BYWR
ODA18 LDN 0 SKIP TRAILER CONTROL WORD IF PRESENT
ODAM EQU *-1
* LDN 1 (204 WRITE)
RJM ADP
LJM ODAX RETURN
TITLE SUBROUTINES.
ADP SPACE 4,15
** ADP - ADVANCE POINTER.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
* (A) = WORDS TO INCREMENT OUT BY.
*
* EXIT (T4 - T5) = STARTING OUT POINTER.
* (CN+3 - CN+4) = UPDATED OUT POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
ADP SUBR ENTRY/EXIT
STD T6
LDD CN+3 SAVE OUT
STD T4
LDD CN+4
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE OUT
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* (-LIMIT)
MJN ADPX IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD CN+4
SHN -14
STD CN+3
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
UJN ADPX RETURN
CNL SPACE 4,10
** CNL - CHECK NEXT WRITE LONG BLOCKS.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
*
* EXIT SEE /WRITE/CNW.
*
* CALLS /WRITE/COB, /WRITE/XBF.
*
* MACROS SADT.
CNL17 LDN 2 SET NOT ENOUGH DATA
CNL18 LJM /WRITE/CNW10 EXIT WITH NEXT WRITE STATUS
CNL BSS 0 ENTRY
LDN ZERL PRESET CONTROL WORD
CRD CM
RJM /WRITE/COB CHECK OUTPUT BUFFER
ZJN CNL17 IF NO DATA
CNLA UJN CNL1 PROCESS CONTROL WORD WRITE
* STD CM+4 (NOT 204/264 WRITE)
SHN -14
STD CM+3
CNLB LDN 0 SET UBC
STD CM+2
UJN CNL2 CALCULATE NUMBER OF CHUNKS
CNL1 LDD CN+3 READ CONTROL WORD
SHN 6
ADD RA
SHN 6
ADD CN+4
CRD CM
CNL2 LDC /MTX/LBWD WORDS PER CHUNK
CNLC EQU *-1
* LDC LBBY BYTES PER CHUNK (204 WRITE)
STD T1
LDN 0
STD NC
* DETERMINE NUMBER OF CHUNKS AND REMAINDER.
CNL3 LDD CM+4
SBD T1
STD CM+4
PJN CNL4 IF NO UNDERFLOW
AOD CM+4
SOD CM+3
MJN CNL5 IF UNDERFLOW
CNL4 AOD NC COUNT CHUNK
UJN CNL3 LOOP
CNL5 LDD T1
RAD CM+4
STD BY PRESET BYTES AND WORDS IN LAST BLOCK
STD BC
STM .WC
CNLD UJN CNL6 (204 WRITE)
* LDD CM+4 BYTES = 5 * CM WORDS (NOT 204 WRITE)
SHN 2
RAD BY
UJN CNL7 CHECK FOR LEGAL BLOCK SIZE
CNL6 LDD CM+4 ROUND UP BYTES
ADN 4
STD T2
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
STM .WC
* CHECK IF LEGAL BLOCK SIZE.
CNL7 LDD NC
STD T1
LDM .WC
STD T7
LDN 0
STD T6
CNL8 SOD T1
MJN CNL9 IF END OF CHUNKS
LDC /MTX/LBWD
RAD T7
SHN -14
RAD T6
UJN CNL8 LOOP
CNL9 LDD T6
SHN 14
LMD T7
SADT .BS,C,1
ADC -*
PJN CNL11 IF BLOCK TOO LARGE
LDD FM
SHN -6
LMN /MTX/TFF
NJN CNL12 IF NOT F FORMAT
LDD MD
LMD CM
SHN -4
LPN 4
ZJN CNL12 IF NO MODE CHANGE
CNL10 LJM CNL18 EXIT WITH NEXT WRITE STATUS
CNL11 LDN 10 SET BUFFER CONTROL WORD ERROR
UJN CNL10 EXIT WITH NEXT WRITE STATUS
CNL12 LDD MD CHECK IF ENOUGH DATA
LPN 60
SHN -4
RAD T7
SHN -14
RAD T6
RJM /WRITE/COB CHECK OUTPUT BUFFER
SHN 6
SBD T6
SHN 14
SBD T7
PJN CNL13 IF ENOUGH DATA IN OUTPUT BUFFER
LJM CNL17 SET NOT ENOUGH DATA
CNL13 LDM /WRITE/CNWJ
LPN 77
LMC -0
ADD CM+2
PJP CNL11 IF INCORRECT UBC
LDN 2 PRESET FOR POSSIBLE 204 EOF WRITE
STD T6
LDD NC
ZJN CNL14 IF ONLY PARTIAL CHUNK
LDD HN SET TO PREVENT NOISE BLOCK ERROR
RAD BY
CNL14 RJM /WRITE/XBF
STD CM+4
LDD NC
ZJN CNL15 IF ONLY PARTIAL CHUNK
LDC -100
CNL15 ADD BY
STD BC
PJN CNL16 IF NO UNDERFLOW IN BYTE COUNT
ADC LBBY RESET BYTE COUNT
STD BC
LDC /MTX/LBWD SET WORD COUNT IN LAST CHUNK
STM .WC
SOD NC DECREMENT CHUNK COUNT
CNL16 LDD CM+4
LJM CNL18 EXIT WITH NEXT WRITE STATUS
CPD SPACE 4,10
** CPD - CHECK PP (1LT) DROP OUT.
*
* ENTRY (CPDA) = PP INPUT REGISTER ADDRESS.
*
* EXIT (A) = 0, IF *1LT* STILL AROUND.
*
* USES CM - CM+4.
*
* MACROS CHTE.
CPD SUBR ENTRY/EXIT
LDC * (ADDRESS OF *1LT* INPUT REGISTER)
CPDA EQU *-1
CRD CM
LDD CM+1
SCN 77
SHN 6
LMD CM
LMC 3RT1L
ZJN CPD1 IF *1LT*
SHN 14
LMN 1R1
NJN CPDX IF NOT *1LT* LOADING
CPD1 LDD CM+3 CHECK FOR CORRECT CHANNEL
CHTE *
LMN CH
LPN 77
UJN CPDX RETURN
CRA SPACE 4,10
** CRA - CHECK REQUEST ACCEPTANCE FROM *1LT*.
*
* EXIT (A) = REQUEST BYTE.
* (CM - CM+4) = REQUEST/RETURN WORD.
CRA SUBR ENTRY/EXIT
LDM CPDA
ADN 2
CRD CM
LDD CM
UJN CRAX RETURN
ITS SPACE 4,10
** ITS - INDICATE *1MT* TRANSFER STARTED.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
ITS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
LDD T0 RESTORE (A)
UJN ITSX RETURN
SPACE 4,10
.OPAA BSS 0 START OF WRITE ROUTINE OVERLAYS
OPE SPACE 4,10
** OPE - OUTPUT ENDING DATA FROM CYBER 180 IOU.
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES LEFT.
*
* CALLS WTS.
OPE SUBR ENTRY/EXIT
OPEA UJN OPE2 OUTPUT DATA
* PSN (*1LT* USED)
RJM WTS WAIT FOR *1LT* TRANSFER TO START
OPE1 IJM OPEX,CH IF *1LT* WROTE PARTIAL BLOCK
SCF OPE1,CH WAIT FOR *1LT* TO CLEAR CHANNEL FLAG
OPE2 OAM BUFB,CH OUTPUT CHUNK
UJN OPEX RETURN
OPEB BSS 0
LOC OPEA
UJN OPE2 OUTPUT DATA
LOC *O
OPI SPACE 4,10
** OPI - OUTPUT DATA FROM CYBER 180 IOU.
*
* IF THERE ARE MULTIPLE CHUNKS IN THE BLOCK, THIS ROUTINE
* IS USED FOR ALL BUT THE LAST CHUNK. *OPE* IS USED FOR THE
* LAST CHUNK.
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
*
* CALLS ITS, WTS.
OPI SUBR ENTRY/EXIT
OPIA UJN OPI2 FIRST CHUNK
* PSN (NOT FIRST CHUNK)
RJM WTS WAIT FOR *1LT* TRANSFER TO START
OPI1 IJM OPIX,CH IF *1LT* WROTE ONLY PARTIAL CHUNK
SCF OPI1,CH WAIT FOR *1LT* TO CLEAR CHANNEL FLAG
RJM ITS INDICATE *1MT* TRANSFER STARTED
OPI2 OAM BUFB,CH OUTPUT DATA
NJN OPIX IF INCOMPLETE TRANSFER
CCF *,CH SIGNAL *1LT* TO START OUTPUT
STM OPIA SET UP FOR SUBSEQUENT CHUNKS
UJN OPIX RETURN
OPIB BSS 0
LOC OPIA
UJN OPI2 OUTPUT NEXT BLOCK
LOC *O
.OPALC EQU *-.OPAA END OF OVERLAID AREA
RDA SPACE 4,15
** RDA - READ DATA FROM CENTRAL.
*
* ENTRY (A) = WORDS TO READ.
* (T4 - T5) = OUT POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* EXIT (/WRITE/BYWR) = BY.
*
* CALLS ADP, /WRITE/CKS, ITM, SRQ.
*
* MACROS SADT.
RDA SUBR ENTRY/EXIT
RJM ADP ADVANCE POINTERS
LDD T6
ZJN RDAX IF NO FIRST PART
SHN 2
ADD T6
ADC BUFB
STM RDAA
LDD T4 READ FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CRM BUFB,T6
LDD T7
ZJN RDA1 IF NO SECOND PART
SADT .FT,,,A
LDC * READ SECOND PART
CRM *,T7
RDAA EQU *-1
RDA1 LDC 0 SET BYTE COUNT FOR CHECKSUM
RDAB EQU *-1
ZJN RDA3 IF NOT FIRST CHUNK
RDAC UJN RDA2 CHECKSUM DATA
* RJM ITM (ATS GCR UNIT, 1X PPU SPEED OR 200 IPS)
* RJM ITM (CTS)
CON ITM
LDM ODAL
LPN 77
ZJN RDA2 IF *1LT* NOT NEEDED
LDN 1 SEND REQUEST TO *1LT*
RJM SRQ
RDA2 LDM UBWB USE HARDWARE CHECKSUM
STD LG+1
NJN RDA2.1 IF NON ZERO CHECKSUM
AOD LG+1
RDA2.1 LDN 0 CLEAR FIRST CHUNK FLAG
STM RDAB
RDA3 LDD BY
STM /WRITE/BYWR SET BYTES TO WRITE
LJM RDAX RETURN
SRQ SPACE 4,10
** SRQ - SEND REQUEST TO *1LT* TO START BLOCK.
*
* ENTRY (A) = REQUEST CODE.
* (T4 - T5) = POINTER.
* (BC) = BYTE COUNT OF LAST CHUNK.
* (NC) = NUMBER OF CHUNKS.
*
* USES T1, T2, T3, CM - CM+4.
*
* CALLS CPD, CRA, HNG.
SRQ SUBR ENTRY/EXIT
STD T1
SRQA UJN SRQ1 NO CHANNEL FLAG
* PSN (CYBER 180 IOU)
SCF *+2,CH SET CHANNEL FLAG
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
SRQ1 RJM CRA CHECK *1LT* ACCEPT
NJN SRQ2 IF *1LT* OUT OF SYNC
LDM CPDA CHECK *1LT* FUNCTION
ADN 1
CRD CM
LDD CM
LMN PRLM
ZJN SRQ3 IF *1LT* PAUSING
LDD BC SET BYTE COUNT
STD T2
LDD NC SET NUMBER OF CHUNKS
STD T3
LDM CPDA ENTER REQUEST
ADN 2
CWD T1
RJM CPD CHECK IF PP DROPPED OUT
NJN SRQ2 IF *1LT* MISSING
LJM SRQX RETURN
SRQ2 RJM HNG HANG PP
SRQ3 LJM RET2 REQUEUE REQUEST
WTS SPACE 4,10
** WTS - WAIT FOR *1LT* TRANSFER TO START.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
*
* USES CM - CM+4.
WTS3 LDD T0 RESTORE (A)
WTS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
WTS1 LDM CPDA CHECK *1MT*/*1LT* INTERLOCK
ADN 3
CRD CM
LDD CM
ZJN WTS3 IF *1LT* TRANSFER STARTED
LDN 24 DELAY 10 MICROSECONDS
WTS2 SBN 1
NJN WTS2 IF NOT DONE
UJN WTS1 CHECK INTERLOCK
SPACE 4,10
.WC CON 0 WORD COUNT OF LAST CHUNK
SPACE 4,10
BUFFER BUFB
CALL SPACE 4,10
.IM SET 0 DISABLE ADDRESS MODIFICATION ON ERRORS
** *1LT* CALL BLOCK.
*
*T 18/ 1LT,6/ CP,6/ HP,6/ 1,1/ CF,11/ CHANNEL,12/ PPIA
*T, 12/ -0,24/ FIRST,24/ LIMIT
CALL VFD 18/3R1LT,6/0
CON 1 WRITE
CHTE *
CON CH CHANNEL
CON 0 *1MT* INPUT REGISTER ADDRESS
CON -0
SADT .FT,,,,SE
CON 0,0
SADT .LM,,,,SE
CON 0,0
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET.
*
* EXIT TO */WRITE/WTF1* TO WRITE BLOCK.
* TO */WRITE/WTF4* IF ERROR FROM *CNW*.
* TO *RET2* TO REQUEUE IF *1LT* NOT ASSIGNED.
*
* CALLS CEC, *CPP*, /WRITE/CNW, CPD, MCH, SRC.
*
* MACROS MONITOR, PAUSE.
PRS LDC PRSB MODIFY CHANNELS IN RESIDENT
RJM MCH
LDN 0
STD T3 CLEAR TAPE OUTPUT TYPE
LDK MABL CHECK MAINFRAME TYPE
CRD CM
LDD CM+1
SHN -6
LPN 41
LMN 1
ZJN PRS1 IF CYBER 180
AOD T3
LDD HP
LPN 60
SHN 6
RAM CALL+3
SHN 21-12
PJN PRS1 IF MTS CONTROLLER
AOD T3
PRS1 RJM SRC SET RESIDENT CONTROLLER ROUTINE
LDC LJMI SET CALL FOR CHECK NEXT WRITE
STM /WRITE/CNWA
LDC CNL
STM /WRITE/CNWA+1
LDD HP
SHN 21-7
PJN PRS1.2 IF NOT CTS
LDN .WCTL-1
STD T1 LENGTH OF CODE TO MOVE
PRS1.1 LDM .WCT,T1
STM /WRITE/WCT6,T1 MOVE COMMAND RETRY CODE
SOD T1
PJN PRS1.1 IF MORE CODE TO MOVE
ISTORE /WRITE/WCTA,(UJN /WRITE/WCT3)
ISTORE /WRITE/WCTF,(UJN /WRITE/WCT5)
ISTORE /WRITE/WCTJ,(UJN /WRITE/WCT10) SKIP READ CM BUFFER
UJN PRS1.3 CONTINUE PRESET
PRS1.2 LDM PRSC
STM /WRITE/WRTA
LDM PRSD
STM /WRITE/WRTE
LDM PRSE
STM /WRITE/WRTG
PRS1.3 LDM PRSF
STM /WRITE/WTFA
LDC UJNI+2
STM /WRITE/WTFD
LDC ODA
STM /WRITE/WTFC
LDM /WRITE/CNWB SET UBC
LPN 77
RAM CNLB
LDD MD
LPN 60
ZJN PRS2 IF NOT CONTROL WORD OPERATION
AOM ODAB
LDD MD
LPN 40
ZJN PRS3 IF NOT 204 WRITE
LDC LBBY SET BLOCK LENGTH
STM CNLC
AOM ODAM
UJN PRS4 CONTINUE PRESET
PRS2 LDC STDI+CM+4 MODIFY INSTRUCTIONS FOR NON-CONTROL WORD
STM CNLA
PRS3 LDC LDDI+CM+4
STM CNLD
PRS4 LDC PRSA SET FOR INSTRUCTION MODIFICATION
STD CN
LDC PRS5 SET TO RETURN CONTROL HERE AFTER LOAD
STD BT
LJM PRSX RETURN
* RETURN HERE AFTER ALL ROUTINES LOADED.
* BUILD CALL TO *1LT*.
PRS5 LDD HP
SHN 21-7
PJN PRS5.1 IF NOT CTS
ISTORE /WRITE/WTFF,(ZJN /WRITE/WTF1)
LDD CN+3
STM /WRITE/OPTU SAVE OUT POINTER FOR COMMAND RETRY
LDD CN+4
STM /WRITE/OPTL
PRS5.1 RJM /WRITE/CNW CHECK FIRST WRITE
ZJN PRS6 IF WRITE OK
LJM /WRITE/WTF4 PROCESS ERROR CONDITION
PRS6 LDD CP MERGE CP NUMBER
SHN -7
RAM CALL+1
LDD HP
LPC 7700 ALLOW *1LT* TO TEST FOR CTS
RAM CALL+2
LDD IA SET INPUT REGISTER ADDRESS IN CALL
STM CALL+4
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
ZJN PRS7 IF MOVE FLAG
LDD MA WRITE REQUEST BLOCK
CWM CALL,TR
LDN 1 SET TO NOT QUEUE REQUEST
STD CM+1
MONITOR RPPM REQUEST PP
LDD CM+1
NJN PRS8 IF PP ASSIGNED
PRS7 LJM RET2 REQUEUE
PRS8 STM CPDA SAVE PP INPUT REGISTER ADDRESS
PRS9 LDN 77 DELAY
SBN 1
NJN *-1
LDD MA CHECK FOR *1LT* ACKNOWLEDGE
ADN 1
CRD CM
LDD CM
ZJN PRS11 IF *1LT* READY
RJM CPD CHECK FOR *1LT* DROP
NJN PRS7 IF *1LT* GONE
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
NJN PRS9 IF NO MOVE FLAG FOR THIS CP
RJM CEC CHANGE BACK TO MAGNET CP
PRS10 RJM CPD CHECK PP DROP
NJN PRS7 IF *1LT* GONE
PAUSE NE
UJN PRS10 LOOP
PRS11 LDC /SRU/ITWL*100 SET SRU INCREMENT
STM //CECA
LDC 4000 SET BLOCKS WRITTEN FLAG
STD BT
LDD HP
SHN 21-7
MJN PRS12 IF CTS
SHN 21-4-21+7
PJN PRS13 IF NOT ATS UNIT
* CHECK IF MOTION AHEAD ALLOWED. MOTION AHEAD IS NOT ALLOWED
* ON ANY GCR UNIT AT 1X PPU SPEED OR ON A 200 IPS GCR UNIT.
SHN 21-1-21+4
PJN PRS13 IF UNIT NOT CAPABLE OF 6250 BPI
LDM DLYA
LPN 14
ZJN PRS12 IF 1X PPU SPEED
LDD HP
LPN 10
LMN 10
NJN PRS13 IF NOT 200 IPS UNIT
PRS12 LDC UJNI+2 DISABLE MOTION AHEAD
STM ODAA-1
LDC RJMI
STM RDAC
LDC UJNI+ODA3-ODAG
STM ODAG
PRS13 LJM /WRITE/WTF1 ENTER WRITE CODE
PRSA TSAD SLBP
PRSB CHTB
PRSC BSS 0
LOC /WRITE/WRTA
UJN /WRITE/WRT2 SET UP FOR LONG BLOCK WRITE
LOC *O
PRSD BSS 0
LOC /WRITE/WRTE
UJN /WRITE/WRT3.1 LONG BLOCKS
LOC *O
PRSE BSS 0
LOC /WRITE/WRTG
UJN /WRITE/WRT5 LONG BLOCKS
LOC *O
PRSF BSS 0
LOC /WRITE/WTFA
UJN /WRITE/WTF1 LONG BLOCKS
LOC *O
TITLE PRESET SUBROUTINES.
SRC SPACE 4,15
** SRC - SET RESIDENT CONTROLLER ROUTINE.
*
* ENTRY (T3) = CONTROLLER/PP TYPE.
* 0 = CYBER 180 IOU.
* 1 = MTS CONTROLLER (NON-CYBER 180).
* 2 = ATS CONTROLLER (NON-CYBER 180).
*
* EXIT TAPE OUTPUT ROUTINE PRESET.
*
* USES T1, T2.
*
* CALLS MCH.
SRC SUBR ENTRY/EXIT
LDM SRCB,T3 ADDRESS OF OUTPUT ROUTINE
ZJN SRC2 IF RESIDENT ROUTINE USED
STM SRCA
LDN .OPALC-1 BYTES TO COPY
STD T1
SRC1 LDM **,T1
SRCA EQU *-1
STM .OPAA,T1 COPY OVER RESIDENT TAPE IO ROUTINE
SOD T1
PJN SRC1 IF COPY NOT COMPLETE
LDM SRCC,T3 ADDRESS OF CHANNEL TABLE
RJM MCH UPDATE CHANNELS
SRC2 LDM SRCD,T3 ADDRESS OF ADDRESSES TO MODIFY
STD T2
SRC3 LDI T2 ADDRESS TO CHANGE
STD T1
ZJN SRCX IF END OF TABLE ENCOUNTERED
AOD T2
LDI T2
STI T1 CHANGE CONTENTS OF ADDRESS
AOD T2
UJN SRC3 CONTINUE MODIFYING ADDRESSES
* ADDRESS OF OUTPUT ROUTINES.
SRCB CON 0 CYBER 180 IOU
CON .OPD MTS (NON-CYBER 180)
CON .OPA ATS (NON-CYBER 180)
* ADDRESSES OF CHANNEL TABLES.
SRCC CON 0 CYBER 180 IOU
CON .OPDA MTS (NON-CYBER 180)
CON .OPAC ATS (NON-CYBER 180)
* ADDRESSES OF ADDRESS MODIFICATION TABLES.
SRCD CON SRCE CYBER 180 IOU
CON SRCG MTS (NON-CYBER 180)
CON SRCF ATS (NON-CYBER 180)
** ADDRESS MODIFICATION TABLES.
SRCE CON ODAJ,OPI CYBER 180 IOU
CON ODAK,OPE
CON SRQA,PSNI
CON ODAD,OPIA
CON ODAC,OPIB
CON ODAH,OPEB
CON ODAI,OPEA
CON ODAF,OPEA
CON 0
SRCF CON ODAJ,OPA ATS (NON-CYBER 180)
CON ODAK,OPL
CON 0
SRCG CON ODAF,ODAF MTS (NON-CYBER 180)
CON ODAD,OPDA
CON 0
OPA SPACE 4,10
.OPA BSS 0 ATS OUTPUT ROUTINES (NON-CYBER 180)
LOC .OPAA
OPA SPACE 4,10
** OPA - OUTPUT DATA TO ATS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
* (OPAA) = 0 IF NOT FIRST CHUNK.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
OPA SUBR ENTRY/EXIT
OPAA UJN OPA1 FIRST CHUNK
* PSN (NOT FIRST CHUNK)
AJM *,CH WAIT FOR *1LT* TO OUTPUT CHUNK
PSN DELAY TO ALLOW *1LT* TO REACTIVATE CHANNEL
PSN
OPA1 OAM BUFB,CH OUTPUT DATA
FJM *,CH
DCN CH+40 INDICATE TO *1LT* TO RESUME OUTPUT
NJN OPAX IF INCOMPLETE TRANSFER
ACN CH
STM OPAA CLEAR FIRST CHUNK FLAG
UJN OPAX RETURN
OPAB BSS 0
LOC OPAA
UJN OPA1 OUTPUT DATA
LOC OPAB+1
OPL SPACE 4,10
** OPL - OUTPUT LAST PARTIAL CHUNK TO ATS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO TRANSFER.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
* CHANNEL FULL STATUS NOT CHECKED.
OPL SUBR ENTRY/EXIT
OPLA PSN WAIT FOR *1LT*
* UJN OPL1 (*1LT* NOT NEEDED)
AJM *,CH WAIT FOR *1LT* TO OUTPUT CHUNK
PSN DELAY TO ALLOW *1LT* TO REACTIVATE CHANNEL
PSN
OPL1 OAM BUFB,CH OUTPUT PARTIAL CHUNK
UJN OPLX RETURN
OPLB BSS 0
LOC OPLA
UJN OPL1 OUTPUT DATA
LOC *O
.OPAL EQU *-.OPA
ERRNG .OPALC-.OPAL ATS WRITE ROUTINE OVERFLOW
.OPAC CHTB TABLE OF CHANNELS FOR ATS CODE
SPACE 4,10
.OPD BSS 0 MTS OUTPUT ROUTINE (NON-CYBER 180)
LOC .OPAA
OPD SPACE 4,10
** OPD - OUTPUT DATA TO MTS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
OPD2 FJM OPD1,CH IF *1LT* OUTPUTTING DATA
FJM OPD1,CH IF *1LT* OUTPUTTING DATA
FJM OPD1,CH IF *1LT* OUTPUTTING DATA
OAM BUFB,CH OUTPUT DATA
OPD SUBR ENTRY/EXIT
OPD1 FJM OPD1,CH IF *1LT* OUTPUTTING DATA
FJM OPD1,CH IF *1LT* OUTPUTTING DATA
UJN OPD2 CONTINUE CHECK FOR *1LT* OUTPUT
OPDA BSS 1 SCRATCH STORAGE
LOC *O
.OPDL EQU *-.OPD
ERRNG .OPALC-.OPDL MTS WRITE ROUTINE OVERFLOW
.OPDA CHTB TABLE OF CHANNELS FOR MTS CODE
SPACE 4,10
.WCT BSS 0
LOC /WRITE/WCT6
LDN F0002 CONTINUE FUNCTION
STM ITMA
LJM /WLB/ODAB GO RETRY THE COMMAND
ERRMI /WRITE/WCT8-* IF CODE OVERFLOWS
LOC *O
.WCTL EQU *-.WCT LENGTH OF CODE TO MOVE
OVERLAY (WRITE LI FORMAT.),,,WLI
.IM SET 0 GENERATE ADDRESSES FOR OVERLAY
NC EQU PA NUMBER OF CHUNKS
BC EQU PB BYTE COUNT LAST CHUNK
WLI SPACE 4,15
** WLI - WRITE LI FORMAT.
* THIS OVERLAY DOES ALL LI FORMAT WRITES.
*
* ENTRY AT *WLI* FROM *PRS* TO WRITE FIRST BLOCK.
* AT *WLI1* FROM *PRS* IF NO BLOCK TO WRITE.
*
* EXIT TO *RET* IF COMPLETE.
* TO *RET2* TO REQUEUE REQUEST.
* TO *RET3* TO REPORT AN ERROR.
* TO *EOF* TO WRITE EOF.
*
* CALLS ODA, WRT.
WLI RJM ODA OUTPUT DATA
RJM WRT CHECK FOR END OF OPERATION
LDC *
WLIA EQU *-1
NJN WLI1 IF EXIT CONDITIONS
LDD DF
ZJN WLI IF NO DROP OUT
WLIB EQU *-1
* PSN (PRU WRITE 004)
LJM RET2 REQUEUE
WLIC EQU *-1
* LJM WLI3 (PRU WRITE 004)
WLI1 SBN 10
MJN WLI3 IF NO ERROR
ZJN WLI2 IF BUFFER TOO LONG ERROR
LDN /MTX/BAE&/MTX/BCW BUFFER ARGUMENT ERROR
WLI2 LMN /MTX/BCW BLOCK TOO LONG ERROR
LJM RET3 RETURN ERROR CODE
WLI3 LDN 1
LJM RET SET FET COMPLETE
WLID EQU *-1
* LJM EOF (LI FORMAT EOF REQUIRED)
ADP SPACE 4,15
** ADP - ADVANCE POINTER.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
* (A) = WORDS TO INCREMENT OUT BY.
*
* EXIT (T4 - T5) = STARTING OUT POINTER.
* (CN+3 - CN+4) = UPDATED OUT POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
ADP SUBR ENTRY/EXIT
STD T6
LDD CN+3 SAVE OUT
STD T4
LDD CN+4
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE OUT
RAD CN+4
SHN -14
RAD CN+3
SHN 14
LMD CN+4
SADT .LM,C
ADC -* (-LIMIT)
MJN ADPX IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD CN+4
SHN -14
STD CN+3
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
UJN ADPX RETURN
CNW SPACE 4,25
** CNW - CHECK NEXT WRITE.
* THIS ROUTINE DETERMINES IF THERE IS DATA TO WRITE. IF SO,
* THE NUMBER OF CHUNKS AND BLOCKS IS DETERMINED AND THE BLOCK
* PREFIX IS BUILT. IF (014, 204, 264) WRITE, ONE BLOCK IS
* PRESENT, BUT NOT 2 BLOCKS, THEN A *DRCM* MONITOR FUNCTION
* IS ISSUED TO GET THE CPU TO PUT MORE DATA IN THE BUFFER.
*
* ENTRY (CN+3 - CN+4) = OUT POINTER.
*
* EXIT (A) = (WLIA) = 0, NEXT WRITE OKAY.
* 2, NOT ENOUGH DATA.
* 10, BLOCK TOO LONG ERROR.
* 11, BUFFER ARGUMENT ERROR.
* (NC) = FULL CHUNKS TO WRITE.
* (BC) = BYTES IN REMAINDER TO WRITE.
* (.WC) = WORDS IN REMAINDER TO WRITE.
*
* USES T1, T2, T6, T7, CM - CM+4.
*
* CALLS CDO, COB, SLN.
*
* MACROS SADT.
CNW14 LDN 2 SET NOT ENOUGH DATA
CNW15 STM WLIA
CNW SUBR ENTRY/EXIT
RJM CDO CHECK DROP OUT FLAG
LDN F0050
STM ITMA WRITE FUNCTION
LDN 1 WORD COUNT = 10000
CNWA EQU *-1
* LDN 0 (204 WRITE)
STD CM+3
LDN 0
CNWB EQU *-1
* LDN 2 (204 WRITE)
STD CM+4
RJM COB CHECK OUTPUT BUFFER
STD T1
SHN 6
SBD CM+3
SHN 14
SBD CM+4
PJN CNW1 IF ENOUGH DATA
LDD T1
CNWC EQU *-1
* UJN CNW14 (204 WRITE)
STD CM+4
SOD CM+3 USE WORD COUNT IN BUFFER
LDD MD
SHN 21-3
PJN CNW14 IF NOT EOR/EOF WRITE
SHN 21-10-21+3+22
MJN CNW14 IF EOR/EOF WRITTEN THIS OPERATION
CNW1 UJN CNW2
CNWD EQU *-1
* LDD CN+3 (204 WRITE)
SHN 6
ADD RA
SHN 6
ADD CN+4
CRD CM READ CONTROL WORD
CNW2 LDC /MTX/LBWD WORDS PER CHUNK
CNWE EQU *-1
* LDC LBBY BYTES PER CHUNK (204 WRITE)
STD T1
LDN 0
STD NC
* DETERMINE NUMBER OF CHUNKS AND REMAINDER.
CNW3 LDD CM+4
SBD T1
STD CM+4
PJN CNW4 IF NO UNDERFLOW
AOD CM+4
SOD CM+3
MJN CNW5 IF UNDERFLOW
CNW4 AOD NC COUNT CHUNK
UJN CNW3 LOOP
CNW5 LDD T1
RAD CM+4
STD BC
STM .WC
LDD CM+4
CNWF EQU *-1
* UJN CNW6 (204 WRITE)
SHN 2
RAD BC BYTES = 5 * CM WORDS
UJN CNW7 CHECK IF LEGAL BLOCK SIZE
CNW6 LDD CM+4 ROUND UP BYTES
ADN 4
STD T2
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
STM .WC SAVE REMAINDER (IN CM WORDS)
* CHECK IF LEGAL BLOCK SIZE.
CNW7 LDD NC
STD T1
LDM .WC
STD T7
LDN 0
STD T6
CNW8 SOD T1
MJN CNW9 IF END OF CHUNKS
LDC /MTX/LBWD
RAD T7
SHN -14 T6,T7 IS BLOCK LENGTH IN CM WORDS
RAD T6
UJN CNW8 LOOP
CNW9 LDD T6
SHN 14
LMD T7
SADT .BS,C,1
ADC -*
MJN CNW10 IF BLOCK NOT TOO LARGE
LDN 10 SET BLOCK TOO LONG ERROR
UJP CNW15 EXIT WITH NEXT WRITE STATUS
* PUT BYTE COUNT AND BLOCK NUMBER IN BLOCK PREFIX.
CNW10 LDD T6 T6,T7 IS CM WORD COUNT
SHN 2
ADD T6
STD T2
LDD T7
SHN 2
ADD T7
ADN 5 INCLUDE LENGTH OF PREFIX
STM BUFB-4 LOWER 12 BITS OF BYTE COUNT
SHN -14
ADD T2
STM BUFB-5 UPPER BITS OF BYTE COUNT
LDD BL
STM BUFB-3
LDD BL+1
STM BUFB-2 SET BLOCK NUMBER
* CHECK IF ENOUGH DATA IN OUTPUT BUFFER.
LDD MD
LPN 40
SHN -4
RAD T7 ALLOW FOR CONTROL WORD
SHN -14
RAD T6
RJM COB CHECK OUTPUT BUFFER
SHN 6
SBD T6
SHN 14
SBD T7
MJN CNW13 IF NOT ENOUGH DATA IN OUTPUT BUFFER
* IF ONE BLOCK IS PRESENT, BUT NO SECOND BLOCK, ISSUE *DRCM*.
SHN 6
SBD T6
SHN 14
SBD T7
PJN CNW11 IF SECOND BLOCK IN CM
CNWG EQU *-1
* UJN CNW11 (NOT 014, 204, OR 264 WRITE)
LDM CNW
ADC -PRS
PJN CNW11 IF CALLED FROM PRESET
LDD OA
CWM CNWH,ON
CNW11 RJM SLN SAVE LEVEL NUMBER
LDN 0
CNW12 LJM CNW15 RETURN
CNW13 LJM CNW14 SET NOT ENOUGH DATA
CNWH CON DRCM DRIVER RECALL CPU MONITOR FUNCTION
COB SPACE 4,10
** COB - CHECK OUTPUT BUFFER.
*
* ENTRY (CN+3,CN+4) = OUT POINTER.
*
* EXIT (A) = WORD COUNT.
* TO LOCATION *CNW12*, IF BUFFER ARGUMENT ERROR.
*
* USES T1 - T5.
*
* MACROS SADT.
COB2 LDD T1+3 LENGTH = IN - OUT
SBD CN+3
SHN 14
ADD T1+4
SBD CN+4
PJN COBX IF IN .GE. OUT
SADT .LF
ADC * (LIMIT - FIRST)
MJN COB1 IF BUFFER ARGUMENT ERROR
COB SUBR ENTRY/EXIT
SADT .FE,,2,A
LDC * READ IN
CRD T1
LDD T1+3
LPN 37
STD T1+3
SHN 14
LMD T1+4
SADT .LM,C
ADC -*
MJN COB2 IF IN .LT. LIMIT
COB1 LDN 11 SET BUFFER ARGUMENT ERROR
UJN CNW12 SET EXIT CONDITION
CPD SPACE 4,10
** CPD - CHECK PP (1LT) DROP OUT.
*
* ENTRY (CPDA) = PP INPUT REGISTER ADDRESS.
*
* EXIT (A) = 0, IF *1LT* STILL AROUND.
*
* USES CM - CM+4.
*
* MACROS CHTE.
CPD SUBR ENTRY/EXIT
LDC *
CPDA EQU *-1
CRD CM
LDD CM+1
SCN 77
SHN 6
LMD CM
LMC 3RT1L
ZJN CPD1 IF *1LT*
SHN 14
LMN 1R1
NJN CPDX IF NOT *1LT* LOADING
CPD1 LDD CM+3
CHTE *
LMN CH
LPN 77
UJN CPDX RETURN
CRA SPACE 4,10
** CRA - CHECK REQUEST ACCEPTANCE FROM *1LT*.
*
* EXIT (A) = REQUEST BYTE.
* (CM - CM+4) = REQUEST/RETURN WORD.
CRA SUBR ENTRY/EXIT
LDM CPDA
ADN 2
CRD CM
LDD CM
UJN CRAX RETURN
EOF SPACE 4,10
** EOF - WRITE LI FORMAT EOF.
*
* EXIT TO *RET* WITH (A) = 1 TO SET FET COMPLETE.
*
* CALLS ITM, WRT.
EOF BSS 0 ENTRY
RJM ITM INITIATE TAPE MOTION
LDN 17
STM BUFB-1 LEVEL NUMBER
LDD BL
STM BUFB-3 BLOCK NUMBER
LDD BL+1
STM BUFB-2
LDN 0
STM BUFB-5 BYTE COUNT UPPER
LDN 5
STM BUFB-4 BYTE COUNT LOWER
LDN 6
OAM BUFB-5,CH
FJM *,CH
STM /WRITE/BYRM BYTES NOT WRITTEN
* DELAY 10 MICROSECONDS TO PREVENT A HARDWARE ERROR IN THE
* CCC. THE DISCONNECT WOULD SOMETIMES CAUSE THE LAST BYTE TO
* BE LOST.
LDN 20
SBN 1
NJN *-1
DCN CH+40
RJM WRT PROCESS WRITE
EOFA EQU * (USED TO TELL WHERE *WRT* CALLED FROM)
LCN 14 CLEAR EOF INDICATOR
RAD MD
LDN 1
LJM RET SET FET COMPLETE
ITS SPACE 4,10
** ITS - INDICATE *1MT* TRANSFER STARTED.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
ITS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
LDD T0 RESTORE (A)
UJN ITSX RETURN
ODA SPACE 4,10
** ODA - OUTPUT DATA.
* THIS ROUTINE WRITES THE 1ST, 3RD, ... CHUNKS OF THE BLOCK
* TO TAPE.
*
* ENTRY (NC) = FULL CHUNKS.
* (BC) = BYTE COUNT IN REMAINDER.
* (.WC) = WORD COUNT IN REMAINDER.
*
* USES CM, CM+7, BY.
*
* CALLS ADP, CRA, OPA, OPE, OPI, OPL, RDA.
ODA SUBR ENTRY/EXIT
LDN 0 ALLOW FOR CONTROL WORD
ODAA EQU *-1
* LDN 1 (204 WRITE)
RJM ADP
LDN 0 PRESET CHUNKS OUTPUT COUNT
STD CM+7
LDC LBBY
STD BY
STM RDAB SET FIRST CHUNK FLAG
LDD NC
ZJN ODA3 IF *1LT* NOT NEEDED
SBN 2
PJN ODA1 IF *1LT* NEEDED
LDD BC
ZJN ODA2 IF *1LT* NOT NEEDED
ODA1 AOM ODAD SET *1LT* CALLED FLAG
UJN ODA6 OUTPUT DATA
ODA2 LDC LBBY
STD BC
LDC /MTX/LBWD
STM .WC
ODA3 LDD BC
STD BY
LJM ODA9 SET UP TO READ NEXT CHUNK
ODA4 STM RDAB INDICATE NOT FIRST CHUNK
STM /WRITE/BYRM BYTES NOT TRANSFERRED
LDN 2 INCREMENT CHUNK COUNT
RAD CM+7
SBD NC
PJN ODA7 IF NO MORE FULL CHUNKS
ADN 1
NJN ODA5 IF NOT 1 CHUNK LEFT
LDD BC
ZJN ODA7 IF ZERO REMAINDER
ODA5 LDC /MTX/LBWD SKIP OVER DATA *1LT* OUTPUT
RJM ADP
ODA6 LDC /MTX/LBWD SET UP TO READ NEXT DATA CHUNK
RJM RDA READ DATA
RJM OPI OUTPUT DATA
ODAB EQU *-1
* RJM OPA (NOT USING CHANNEL FLAG)
ZJN ODA4 IF FULL BLOCK OUTPUT
UJN ODA12 STORE BYTES NOT WRITTEN
ODA7 ZJN ODA8 IF TRANSFER NOT COMPLETE FOR *1MT*
LDM .WC ADVANCE POINTER OVER *1LT,S* CHUNK
RJM ADP
UJN ODA13 CHECK IF *1LT* WAS CALLED
ODA8 LDC /MTX/LBWD SKIP OVER DATA *1LT* OUTPUT
RJM ADP
LDD BC
ZJN ODA10 IF POSSIBLE OUTPUT COMPLETE
STD BY
ODA9 LDM .WC SET UP TO READ NEXT CHUNK
UJN ODA11 READ DATA
ODA10 LDD NC
LPN 1
ZJN ODA13 IF OUTPUT COMPLETE
LDC /MTX/LBWD
ODA11 RJM RDA READ DATA FROM CENTRAL
RJM OPE OUTPUT DATA
ODAC EQU *-1
* RJM OPL (NOT USING CHANNEL FLAG)
FJM *,CH
ODA12 STM /WRITE/BYRM SAVE BYTES NOT TRANSFERRED
* DELAY 10 MICROSECONDS TO PREVENT A HARDWARE ERROR IN THE
* CCC. THE DISCONNECT WOULD SOMETIMES CAUSE THE LAST BYTE TO
* BE LOST.
LDN 20
SBN 1
NJN *-1
DCN CH+40
ODA13 LDN 0
ODAD EQU *-1
ZJN ODA15 IF *1LT* NOT CALLED
SOM ODAD CLEAR *1LT* CALLED FLAG
ODA14 RJM CRA CHECK REQUEST ACCEPTANCE FROM *1LT*
LMN 2
NJN ODA14 IF NOT ACCEPT
STD CM ACKNOWLEDGE *1LT*
LDM CPDA
ADN 2
CWD CM
ODA15 LDN 0 SKIP TRAILER CONTROL WORD IF PRESENT
ODAE EQU *-1
* LDN 1 (204 WRITE)
RJM ADP
LJM ODAX RETURN
OPE SPACE 4,10
.OPE BSS 0 START OF OVERLAYED ATS WRITE ROUTINES
OPE SPACE 4,10
** OPE - OUTPUT ENDING DATA FROM CYBER 180 IOU.
*
* ENTRY (BY) = NUMBER OF BYTES TO OUTPUT.
* (RDAB) = 0 IF NOT FIRST CHUNK OF BLOCK.
*
* EXIT (A) = BYTES NOT TRANSFERRED.
*
* CALLS ITS, WTS.
OPE1 LDD BY
LPC 7776 WRITE EVEN BYTE COUNT
ADN 1
RJM WTS WAIT FOR *1LT* TRANSFER TO START
OPE2 IJM OPEX,CH IF *1LT* WROTE ONLY PARTIAL CHUNK
SCF OPE2,CH WAIT FOR *1LT* TO CLEAR CHANNEL FLAG
OAM BUFB,CH
OPE SUBR ENTRY/EXIT
LDM RDAB
ZJN OPE1 IF NOT FIRST CHUNK (IF *1LT* NEEDED)
LDD BY
ADN 5+1 BLOCK PREFIX PLUS PAD
LPC 7776 WRITE EVEN BYTE COUNT
OAM BUFB-5,CH
UJN OPEX RETURN
OPI SPACE 4,10
** OPI - OUTPUT DATA FROM CYBER 180 IOU.
*
* IF THERE ARE MULTIPLE CHUNKS IN THE BLOCK, THIS ROUTINE
* IS USED FOR ALL BUT THE LAST CHUNK. *OPE* IS USED FOR THE
* LAST CHUNK.
*
* ENTRY (BY) = NUMBER OF BYTES TO OUTPUT.
* (RDAB) = 0 IF NOT FIRST CHUNK.
*
* EXIT (A) = BYTES NOT TRANSFERRED.
*
* CALLS ITS, WTS.
OPI1 LDD BY
RJM WTS WAIT FOR *1LT* TRANSFER TO START
OPI2 IJM OPIX,CH IF *1LT* WROTE ONLY PARTIAL CHUNK
SCF OPI2,CH WAIT FOR *1LT* TO CLEAR CHANNEL FLAG
RJM ITS INDICATE *1MT* TRASFER STARTED
OAM BUFB,CH OUTPUT DATA
OPI4 NJN OPIX IF INCOMPLETE TRANSFER
CCF *,CH SIGNAL *1LT* TO START OUTPUT
OPI SUBR ENTRY/EXIT
LDM RDAB
ZJN OPI1 IF NOT FIRST CHUNK
LDD BY
ADN 5 ALLOW FOR BLOCK PREFIX
OAM BUFB-5,CH OUTPUT DATA
UJN OPI4 CHECK IF ALL BYTES TRANSFERRED
.OPEL EQU *-.OPE LENGTH OF CODE TO BE OVERLAYED
RDA SPACE 4,15
** RDA - READ DATA FROM CENTRAL.
*
* ENTRY (A) = WORDS TO READ.
* (T4 - T5) = OUT POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* EXIT (BY) = BYTES TO WRITE.
*
* CALLS ADP, ITM, SRQ.
*
* MACROS SADT.
RDA SUBR ENTRY/EXIT
RJM ADP ADVANCE POINTERS
LDD T6
ZJN RDA1 IF NO DATA
SHN 2
ADD T6
ADC BUFB
STM RDAA
LDD T4 READ FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CRM BUFB,T6
LDD T7
ZJN RDA1 IF NO SECOND PART
SADT .FT,,,A
LDC * READ SECOND PART
CRM *,T7
RDAA EQU *-1
RDA1 LDC 0
RDAB EQU *-1
ZJN RDA2 IF NOT FIRST CHUNK
RJM ITM INITIATE TAPE MOTION
LDM ODAD
LPN 77
ZJN RDA2 IF *1LT* NOT NEEDED
LDN 1 SEND REQUEST TO *1LT*
RJM SRQ
RDA2 LJM RDAX RETURN
SLN SPACE 4,10
** SLN - SAVE LEVEL NUMBER.
* THIS ROUTINE PUTS THE LEVEL NUMBER IN THE BLOCK PREFIX.
*
* ENTRY (CN+3,CN+4) = OUT POINTER.
* (T6,T7) = LENGTH OF BLOCK INCLUDING CONTROL WORDS.
* (LNUM) = LEVEL NUMBER IF NOT CONTROL WORD WRITE.
*
* USES T4, T5, CM - CM+4.
*
* MACROS SADT.
SLN2 LPN 17
STM BUFB-1 SAVE LEVEL NUMBER
NJN SLN3 IF NOT EOF BLOCK
LDM BUFB-5
SHN 14
ADM BUFB-4
LMN 5
ZJN SLNX IF NO DATA IN BLOCK
LDN 0
STM BUFB-1 CLEAR LEVEL NUMBER
SLN3 LDM BUFB-5
SHN 14
ADM BUFB-4
LMC 50005
NJN SLNX IF NOT FULL BLOCK
STM BUFB-1 CLEAR LEVEL NUMBER
SLN SUBR ENTRY/EXIT
LDM LNUM
UJN SLN2 SAVE LEVEL NUMBER
SLNA EQU *-1
* LDD CN+3 (204 WRITE)
STD T4 SAVE OUT
LDD CN+4
STD T5
LDD T6
SHN 14
ADD T7
SBN 1 BACK UP TO TRAILER CONTROL WORD
STD T7
SHN -14
STD T6
LDD T7 UPDATE OUT
RAD T5
SHN -14
ADD T6
RAD T4
SHN 14
LMD T5
SADT .LM,C
ADC -* (-LIMIT)
MJN SLN1 IF NO WRAP AROUND
SADT .FT
ADC * (FIRST)
STD T5
SHN -14
STD T4
SLN1 LDD T4
SHN 6
ADD RA
SHN 6
ADD T5
CRD CM READ CONTROL WORD
LDD CM GET LEVEL NUMBER
LJM SLN2 SAVE LEVEL NUMBER
SRQ SPACE 4,10
** SRQ - SEND REQUEST TO *1LT* TO START BLOCK.
*
* ENTRY (A) = REQUEST CODE.
* (T4 - T5) = POINTER.
* (BC) = BYTE COUNT OF LAST CHUNK.
* (NC) = NUMBER OF CHUNKS.
*
* USES T1, T2, T3, CM - CM+4.
*
* CALLS CPD, CRA, HNG.
SRQ SUBR ENTRY/EXIT
STD T1
PSN
SRQA EQU *-1
* UJN SRQ1 (NOT USING CHANNEL FLAG)
SCF *+2,CH SET CHANNEL FLAG
LDM CPDA INDICATE *1MT* TRANSFER STARTED
ADN 3
CWD ON
SRQ1 RJM CRA CHECK *1LT* ACCEPT
NJN SRQ2 IF *1LT* OUT OF SYNC
LDM CPDA CHECK *1LT* FUNCTION
ADN 1
CRD CM
LDD CM
LMN PRLM
ZJN SRQ3 IF *1LT* PAUSING
LDD BC SET BYTE COUNT
STD T2
LDD NC
STD T3
LDM CPDA ENTER REQUEST
ADN 2
CWD T1
RJM CPD CHECK IF PP DROPPED OUT
NJN SRQ2 IF *1LT* MISSING
LJM SRQX RETURN
SRQ2 RJM HNG HANG PP
SRQ3 LJM RET2 REQUEUE REQUEST
WRT SPACE 4,12
** WRT - WRITE TAPE.
*
* THIS ROUTINE CHECKS END OF OPERATION STATUS AND CHECKS TO
* DETERMINE IF ANOTHER BLOCK CAN BE TRANSFERRED. FOR CTS
* THE FIRST PART OF *WRT* IS OVERLAYED WITH *WCT*.
*
* EXIT (LG,LG+1) = BLOCK ID UPDATED.
* (BL,BL+1) = BLOCK NUMBER UPDATED.
* (BT) = BLOCKS TRANSFERRED UPDATED.
*
* USES CM - CM+4.
*
* CALLS CNW, UBW, *WEM*, WEO.
*
* MACROS CALL, SADT.
WRT SUBR ENTRY/EXIT
LDM UBWB
STD LG+1
NJN WRT1 IF BLOCK ID NONZERO
AOD LG+1
WRT1 LDD DS SAVE STATUS AT START OF WRITE
STM /WRITE/STAT
LDD UP CLEAR EOR/EOF LAST BLOCK FLAG
SCN 10
STD UP
LDD MD CLEAR EOR/EOF THIS OPERATION FLAG
LPC 7377
STD MD
LDM BUFB-4
LMN 5
NJN WRT2 IF NOT FULL BLOCK
LDM BUFB-5
LMN 5
ZJN WRT3 IF NOT EOR/EOF WRITTEN
WRT2 LDN 10 SET EOR/EOF FLAGS
RAD UP
LDC 400
RAD MD
WRT3 RJM CNW CHECK NEXT WRITE
RJM WEO WAIT END OF OPERATION
ZJN WRT4 IF NO ERROR
LDN /MTX/STE STATUS ERROR
WRT4 STD EC
NJN WRT5 IF ERROR
LDM MTDS+1
SHN 21-11
PJN WRT5 IF NO GCR CORRECTION
AOM ECNT+2 INCREMENT COUNTER
SHN -14
RAM ECNT+1 INCREMENT ON OVERFLOW
WRT5 LDM UBWB CURRENT BLOCK ID
STD LG+1
NJN WRT6 IF NONZERO
AOD LG+1
WRT6 LDM /WRITE/BYRM
ZJN WRT6.1 IF ALL BYTES TRANSFERRED
LDD EC
NJN WRT6.1 IF ERROR CODE ALREADY PRESENT
LDN /MTX/CMF CHANNEL MALFUNCTION
STD EC
WRT6.1 LDD EC
ADD EI
ZJN WRT7 IF NO ERROR OR NO VERIFICATION REQUIRED
LDD DS SAVE STATUS FOR ERROR PROCESSOR
STM //STER
CALL WEM
* RETURN HERE IF END OF TAPE OR IF ERROR WAS RECOVERED.
WRT7 LDD LG+1 SAVE LAST GOOD RECORD INFORMATION
STD LG
RJM UBW UPDATE BID WINDOW
UJN WRT8 WRITE OUT TO FET
BSS 0 ALLOW SPACE FOR THE END OF *WCT*
* START OF COMMON CODE WITH *WCT*. *WCT* OVERLAYS THE FIRST
* PART OF *WRT* FOR CTS.
WRT8 BSS 0
SADT .FE,,3,A
LDC * WRITE OUT TO FET
CWD CN
AOD BL+1 INCREMENT BLOCK COUNT
STM BUFB-2 PUT BLOCK NUMBER IN PREFIX
SHN -14
RAD BL
STM BUFB-3
AOD BT INCREMENT BLOCKS WRITTEN
LJM WRTX RETURN
WRTK EQU *-1
* LJM /3M /EOTEXIT (RETURN ERROR ON END OF TAPE)
WTS SPACE 4,10
** WTS - WAIT FOR *1LT* TRANSFER TO START.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
*
* USES CM - CM+4.
WTS3 LDD T0 RESTORE (A)
WTS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
WTS1 LDM CPDA CHECK *1MT*/*1LT* INTERLOCK
ADN 3
CRD CM
LDD CM
ZJN WTS3 IF *1LT* TRANSFER STARTED
LDN 24 DELAY 10 MICROSECONDS
WTS2 SBN 1
NJN WTS2 IF NOT DONE
UJN WTS1 CHECK INTERLOCK
SPACE 4,10
.WC CON 0 WORD COUNT OF LAST CHUNK
SPACE 4,10
ERRMI BUFB-5-* IF CODE OVERLAYS BLOCK PREFIX
CALL SPACE 4,10
.IM SET 0 DISABLE ADDRESS MODIFICATION ON ERRORS
** *1LT* CALL BLOCK.
*
*T 18/ 1LT,6/ CP,6/ HP,6/ 2,1/ CF,11/ CHANNEL,12/ PPIA
*T, 12/ -0,24/ FIRST,24/ LIMIT
CALL VFD 18/3R1LT,6/0
CON 2 WRITE LI FORMAT
CHTE *
CON CH CHANNEL
CON 0 *1MT* INPUT REGISTER ADDRESS
CON -0
SADT .FT,,,,SE
CON 0,0
SADT .LM,,,,SE
CON 0,0
TITLE PRESET.
PRS SPACE 4,15
** PRS - PRESET.
*
* EXIT (CN+3, CN+4) = OUT POINTER.
* TO *WLI* TO WRITE.
* TO *WLI1* IF ERROR.
* TO *RET2* IF PP NOT ASSIGNED FOR *1LT*.
*
* USES CN, T1, CM - CM+4.
*
* CALLS CNW, *CPP*, MCH.
*
* MACROS MONITOR, PAUSE.
PRS LDC PRSA
RJM MCH MODIFY CHANNELS
LDK MABL CHECK MAINFRAME TYPE
CRD CM
LDD CM+1
SHN -6
LPN 41
LMN 1
ZJN PRS2 IF USING CHANNEL FLAG
LDN .OPAL-1 BYTES TO COPY
STD T1
PRS1 LDM .OPA,T1
STM .OPE,T1 COPY OVER RESIDENT TAPE IO ROUTINE
SOD T1
PJN PRS1 IF COPY NOT COMPLETE
LDC .OPAC ADDRESS OF CHANNEL TABLE
RJM MCH MODIFY CHANNELS
LDC OPA
STM ODAB SET JUMP TO OUTPUT ROUTINE
LDC OPL
STM ODAC
ISTORE SRQA,(UJN SRQ1) SKIP SETTING CHANNEL FLAG
LDD HP
LPN 20
SHN 6
RAM CALL+3 INDICATE IF ATS CONTROLLER
PRS2 LDD HP
SHN 21-7
PJN PRS4 IF NOT CTS
ISTORE /PRESET/GPSC,(UJN /PRESET/GPS6.1) DO NOT SEND CONTINUE
LDC WCTL-1
STD T1
PRS3 LDM .WCT,T1 REPLACE *WRT* WITH *WCT*
STM WRTX,T1
SOD T1
PJN PRS3 IF MORE CODE TO MOVE
LDC WCTF
RJM MCH MODIFY CHANNEL INSTRUCTIONS
LDC 6331 GENERAL STATUS BITS TO TEST
STM /PRESET/WFEA
LDC 201 GENERAL STATUS BITS THAT SHOULD BE SET
STM /PRESET/WFEB
UJN PRS5 CONTINUE PRESET
PRS4 LDC 4635 GENERAL STATUS BITS TO TEST
STM //WEOA
LDC 201
STM //WEOB GENERAL STATUS BITS THAT SHOULD BE SET
PRS5 LDD MD
LPN 40
ZJP PRS6 IF NOT CONTROL WORD
LDC LDNI
STM CNWA
ADN 2
STM CNWB SET WORD COUNT TO 2
ISTORE CNWC,(UJN CNW14) IF NOT ENOUGH WORDS
LDC LDDI+CN+3
STM CNWD
LDC LBBY BYTES PER CHUNK
STM CNWE
ISTORE CNWF,(UJN CNW6) SKIP CONVERSION TO BYTES
AOM ODAA SET TO SKIP CONTROL WORD
AOM ODAE SET TO SKIP CONTROL WORD
LDC LDDI+CN+3
STM SLNA GET LEVEL NUMBER FROM CONTROL WORD
UJN PRS8 CONTINUE PRESET
PRS6 LDM CIOE SET TYPE OF WRITE OPERATION
SHN -3
SHN 2
LMD MD
LPN 14
LMD MD
STD MD
LPN 14
NJN PRS7 IF NOT PRU WRITE (004)
* LDN 0
STM WLIB
LDC WLI3
STM WLIC
PRS7 LDD MD
LPN 14
LMN 4
ZJN PRS8 IF WRITE (014)
ISTORE CNWG,(UJN CNW11) BYPASS *DRCM*
PRS8 LDM LNUM SET LEVEL NUMBER
SHN -10
STM LNUM
LDD MD
LPN 14
LMN 14
NJN PRS10 IF NOT EOF WRITE
LDC EOF SET TO WRITE EOF
STM WLID
LDM LNUM
LMN 17
NJN PRS9 IF NOT LEVEL 17
STM LNUM DO NOT WRITE DOUBLE EOF
PRS9 LDD MD CLEAR EOR/EOF FLAG THIS OPERATION
LPC 7377
STD MD
LDD UP CHECK LAST OPERATION EOR/EOF
LPN 30
LMN 20
ZJN PRS10 IF LAST OPERATION INCOMPLETE WRITE
LDM CIOE
SHN 21-12
MJN PRS10 IF DATA IN BUFFER
LDC 400 SET EOR/EOF FLAG THIS OPERATION
RAD MD
PRS10 LDD UP
SCN 24 CLEAR BLANK TAPE FLAG
LMN 20 SET LAST OPERATION WRITE FLAG
STD UP
LDC PRSB SET UP FOR INSTRUCTION MODIFICATION
STD CN
LDN 3 SET TO RETURN OUT POINTER
STD CN+4
LDC /SRU/ITWL*100 SET SRU INCREMENT
STM //CECA
LDC PRS11 SET TO RETURN HERE
STD BT
LJM PRSX RETURN
* RETURN HERE AFTER ALL ROUTINES LOADED.
* BUILD CALL TO *1LT*.
IFGT BUFB,*,1
BSS BUFB-* ENSURE PREFIX DOES NOT OVERLAY *PRS*
PRS11 LDD HP
SHN 21-7
PJN PRS12 IF NOT CTS
LDD CN+3
STM /WRITE/OPTU SAVE OUT POINTER FOR COMMAND RETRY
LDD CN+4
STM /WRITE/OPTL
PRS12 RJM CNW CHECK FIRST WRITE
ZJN PRS13 IF WRITE OK
LJM WLI1 PROCESS ERROR CONDITION
PRS13 LDD CP MERGE CP NUMBER
SHN -7
RAM CALL+1
LDD HP
LPC 7700 ALLOW *1LT* TO TEST FOR CTS
RAM CALL+2
LDD IA SET INPUT REGISTER ADDRESS IN CALL
STM CALL+4
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
ZJN PRS14 IF MOVE FLAG
LDD MA WRITE REQUEST BLOCK
CWM CALL,TR
LDN 1 SET TO NOT QUEUE REQUEST
STD CM+1
MONITOR RPPM REQUEST PP
LDD CM+1
NJN PRS15 IF PP ASSIGNED
PRS14 LJM RET2 REQUEUE
PRS15 STM CPDA SAVE PP INPUT REGISTER ADDRESS
PRS16 LDN 77 DELAY
SBN 1
NJN *-1
LDD MA CHECK FOR *1LT* ACKNOWLEDGE
ADN 1
CRD CM
LDD CM
ZJN PRS18 IF *1LT* READY
RJM CPD CHECK FOR *1LT* DROP
NJN PRS14 IF *1LT* GONE
LDN CMCL CHECK MOVE FLAG
CRD CM
LDD CM
SHN 7
LMD CP
NJN PRS16 IF NO MOVE FLAG FOR THIS CP
RJM CEC CHANGE BACK TO MAGNET CP
PRS17 RJM CPD CHECK PP DROP
NJN PRS14 IF *1LT* GONE
PAUSE NE
UJN PRS17 LOOP
PRS18 LDC 4000 SET BLOCKS WRITTEN FLAG
STD BT
LJM WLI ENTER WRITE CODE
SPACE 4,10
PRSA CHTB
PRSB TSAD
ERRMI ERLA-* IF OVERFLOW INTO *CPP*
WCT SPACE 4,15
** WCT - WRITE CARTRIDGE TAPE.
*
* THIS ROUTINE CHECKS END OF OPERATION STATUS AND CHECKS TO
* DETERMINE IF ANOTHER BLOCK CAN BE TRANSFERRED. FOR CTS
* THIS ROUTINE OVERLAYS THE FIRST PART OF *WRT*. THE LENGTH
* OF THIS ROUTINE MUST BE THE SAME AS THE LENGTH OF THE FIRST
* PART OF *WRT*.
*
* EXIT TO *WRT8* IF NO ERROR.
* TO *CWP* WITH (EC) = ERROR CODE IF ERROR.
* TO *EOF* IF COMMAND RETRY AND EOF WRITE.
* TO *WLI* IF COMMAND RETRY AND NOT EOF WRITE.
*
* USES CM - CM+4.
*
* CALLS CNW, *CWP*, /PRESET/WFE.
.WCT BSS 0
LOC WRTX
WCT SUBR ENTRY/EXIT
LDD UP
SCN 10 CLEAR EOR/EOF LAST BLOCK FLAG
STD UP
LDD MD
LPC 7377 CLEAR EOR/EOF THIS OPERATION FLAG
STD MD
LDM BUFB-4
LMN 5
NJN WCT1 IF NOT FULL BLOCK
LDM BUFB-5
LMN 5
ZJN WCT2 IF NOT EOR/EOF WRITTEN
WCT1 LDN 10
RAD UP SET EOR/EOF FLAGS
LDC 400
RAD MD
WCT2 RJM CNW CHECK NEXT WRITE
RJM /PRESET/WFE WAIT FOR END OF OPERATION
PJN WCT3 IF NOT COMMAND RETRY
LDM /WRITE/OPTU RESET OUT POINTER
STD CN+3
LDM /WRITE/OPTL
STD CN+4
LDD MD
LPC 7377 CLEAR EOR/EOF THIS OPERATION FLAG
STD MD
RJM CNW CHECK NEXT WRITE
LDN F0002
STM ITMA CONTINUE IS THE NEXT FUNCTION
LDM WCT
LMC EOFA
ZJP EOF IF CALLED FROM *EOF*
LJM WLI RETRY THE WRITE
WCT3 ZJN WCT4 IF NO ERROR
LDN /MTX/STE STATUS ERROR
WCT4 STD EC
LDM /WRITE/BYRM
ZJN WCT5 IF ALL BYTES TRANSFERRED
LDD EC
NJN WCT5 IF ERROR CODE ALREADY PRESENT
LDN /MTX/CMF CHANNEL MALFUNCTION
STD EC
WCT5 LDD EC
ADD EI
ZJN WCT6 IF NO ERROR OR NO RECOVERED ERROR
CALL CWP WRITE ERROR PROCESSOR
* RETURN HERE IF END OF TAPE OR RECOVERED ERROR.
WCT6 LDD CN+3
STM /WRITE/OPTU SAVE OUT POINTER FOR COMMAND RETRY
LDD CN+4
STM /WRITE/OPTL
WCTL EQU *-WCTX LENGTH OF *WCT*
ERRNZ WRT8-* ADJUST *BSS* BEFORE *WRT8*
LOC *O
WCTF CHTB CHANNEL TABLE FOR *WCT*
OPA SPACE 4,10
.OPA BSS 0
LOC .OPE
OPA SPACE 4,10
** OPA - OUTPUT DATA TO ATS UNIT (NON-CYBER 180).
*
* IF THERE ARE MULTIPLE CHUNKS IN THE BLOCK, THIS ROUTINE
* IS USED FOR ALL BUT THE LAST CHUNK. *OPL* IS USED FOR THE
* LAST CHUNK.
*
* ENTRY (BY) = NUMBER OF BYTES TO OUTPUT.
* (RDAB) = 0 IF NOT FIRST CHUNK.
*
* EXIT (A) = BYTES NOT TRANSFERRED.
OPA1 AJM *,CH WAIT FOR *1LT* TO OUTPUT CHUNK
LDD BY DELAY TO ALLOW *1LT* TO REACTIVATE CHANNEL
OAM BUFB,CH OUTPUT DATA
FJM *,CH
DCN CH+40 INDICATE TO *1LT* TO RESUME OUTPUT
NJN OPAX IF INCOMPLETE TRANSFER
ACN CH
OPA SUBR ENTRY/EXIT
LDM RDAB
ZJN OPA1 IF NOT FIRST CHUNK
LDD BY
ADN 5 ALLOW FOR BLOCK PREFIX
OAM BUFB-5,CH OUTPUT DATA
FJM *,CH
DCN CH+40 INDICATE TO *1LT* TO RESUME OUTPUT
NJN OPAX IF INCOMPLETE TRANSFER
ACN CH
UJN OPAX RETURN
OPL SPACE 4,10
** OPL - OUTPUT LAST PARTIAL CHUNK TO ATS UNIT (NON-CYBER 180).
*
* ENTRY (BY) = NUMBER OF BYTES TO TRANSFER.
* (RDAB) = 0 IF NOT FIRST CHUNK OF BLOCK.
*
* EXIT (A) = BYTES NOT TRANSFERRED.
OPL1 AJM *,CH WAIT FOR *1LT* TO OUTPUT CHUNK
LDD BY DELAY TO ALLOW *1LT* TO REACTIVATE CHANNEL
LPC 7776 WRITE EVEN BYTE COUNT
ADN 1
OAM BUFB,CH OUTPUT PARTIAL CHUNK
OPL SUBR ENTRY/EXIT
LDM RDAB
ZJN OPL1 IF NOT FIRST CHUNK
LDD BY
ADN 5+1
LPC 7776 WRITE EVEN BYTE COUNT
OAM BUFB-5,CH OUTPUT PARTIAL CHUNK
UJN OPLX RETURN
LOC *O
.OPAL EQU *-.OPA LENGTH OF CODE
ERRNG .OPEL-.OPAL IF CODE OVERFLOWS
.OPAC CHTB CHANNEL TABLE FOR *OPA*/*OPL*
OVERLAY (WRITE LABEL PROCESSOR.),(BUF+CLBL+10),,WLA
WLA SPACE 4,15
** WLA - WRITE LABELS PROCESSOR.
*
* ENTRY (PB) = 6/OPERATION TYPE, 6/SECTION.
*
* USES T1, T2, CM - CM+4, CN - CN+4.
*
* CALLS /CPP/CPP, HNG, ITM, RUD, UAD, /WRITE/WRT,
* LABEL PROCESSORS.
*
* MACROS CALL.
ENTRY WLA
WLA RJM RUD
LDC 4000 SET BLOCKS WRITTEN FLAG
STD BT
RJM UAD GET CIO FUNCTION
ADK /MTX/UFRQ
CRD CM
ADK /MTX/UCIA-/MTX/UFRQ
CRD CN
LDD PB CHECK FUNCTION
SHN -6
SBN /MTX/WLVR/100
ZJN WLA2 IF WRITE VOL1, HDR1 AFTER REEL SWAP
LDD CM
LMN /MTX/CIO
NJN WLA2 IF NOT PROCESSING CIO REQUEST
LDD CN
SHN -6
LPN 17
LMN /CIO/CLO
ZJN WLA1 IF CLOSE
LMN /CIO/OPE&/CIO/CLO
NJN WLA2 IF NOT OPEN
WLA1 CALL CPP CHANGE CONTROL POINTS
LDN ZERL SET ADDRESS RELOCATION
CRD CN
LDC TADD
STD CN
RJM /CPP/CPP
UJN WLA3 SELECT LABEL TYPE
WLA2 LDM FETO INSURE NO EXTENDED LABELS
SCN 40
STM FETO
WLA3 LDD LT
LPC 1000
ZJN WLA4 IF ANSI LABELS
LDN 3
WLA4 STD T1 SET LABEL TYPE INDEX
LDM LTYP,T1 SET ADDRESS OF LABEL OPERATION TABLE
STM WLAA
ADN 1
STM WLAB
LDM LTYP+1,T1 SET LENGTH OF LABEL
STD BY
LDD PB SET UP TO PROCESS LABEL
SHN -6
SHN 1
STD T2
RAM WLAB
STM WLAF
LDD T2
SBM LTYP+2,T1
PJN WLA6 IF UNDEFINED OPERATION
LDM *,T2
WLAA EQU *-1
ZJN WLA4 IF SEQUENCE NOT DEFINED
STM WLAC
LDD PB SET SECTION
LPN 77
STD T1
SBM *
WLAB EQU *-1
MJN WLA7 IF LEGAL SECTION
WLA6 RJM HNG HANG PP
WLA7 LDM *,T1
WLAC EQU *-1
STM WLAD
RJM * PROCESS LABEL
WLAD EQU *-1
ZJN WLA9 IF NO WRITE REQUIRED
SHN -21 SAVE ADVANCE SECTION FLAG
STM WLAE
* ENTER HERE ON RETRY FROM WRITE ERROR RECOVERY.
WLA8 LDD HP
SHN 21-7
PJN WLA8.1 IF NOT CTS
LDC F0250 SHORT WRITE
STM ITMA
UJN WLA8.2 WRITE TAPE
WLA8.1 RJM //ITM INITIATE TAPE MOTION
WLA8.2 RJM /WRITE/WRT WRITE TAPE
LDC *
WLAE EQU *-1
ZJN WLA9 IF ADVANCE SECTION
AOD PA ADVANCE SUBSECTION
UJN WLA10 CONTINUE LABEL PROCESSING
WLA9 AOD PB ADVANCE TO NEXT SECTION
WLA10 LDD PB
LPN 77
SBM *
WLAF EQU *-1
PJN WLA11 IF ALL SECTIONS PROCESSED
LJM WLA3 SELECT NEXT LABEL TYPE
WLAG EQU *-1
* LJM RET2 (RECOVERED PARITY ERROR)
WLA11 LJM RET1 EXIT
SPACE 4,10
** TABLE OF LABEL TYPES AND SIZES.
*T, 12/ TYPE,12/ SIZE
LTYP BSS 0
LOC 0
CON ANS,LABL,ANSL ANSI LABELS
* CON ANS,CLBL,ANSL (CTS)
LOC *O
LTYPL EQU *-LTYP
FAD SPACE 4,10
** FAD - SET FET ADDRESS.
*
* THIS ROUTINE IS HERE BECAUSE ADDRESS MODIFICATION DOES NOT
* WORK ABOVE 3777B.
*
* EXIT (A) = FET ADDRESS.
*
* MACROS SADT.
FAD SUBR ENTRY/EXIT
SADT .FE,,,A
LDC *
UJN FADX RETURN
WTE SPACE 4,15
** WTE - WRITE TAPE MARK ERROR PROCESSOR.
*
* THIS ROUTINE IS OVERLAYED WITH *CPE* FOR CTS.
*
* ENTRY (A) = 0 IF NOT NOT READY ERROR.
* (A) .NE. 0 IF NOT READY OR NO WRITE ENABLE.
*
* EXIT TO *RET3* IF READY DROP, NO WRITE ENABLE, OR WRITE
* TAPE MARK FAILURE.
* (EP) = 3 IF NO WRITE ENABLE.
*
* USES EC, EI, EP, LG, LG+1, T2, T3.
*
* CALLS *EMM*, FCN, UBW, WEO, WFC.
*
* MACROS CALL.
WTE23 LDD LG+1 SET LAST GOOD BLOCK INFORMATION
STD LG
LDN 0 CLEAR RETRY COUNTER
STD EI
LDN 1 SET TAPE MARK INDICATION
STM UBWB
RJM UBW UPDATE WINDOW
WTE SUBR ENTRY/EXIT
ZJN WTE2 IF CHECK STATUS
* NOT READY OR NO WRITE ENABLE.
WTE0 LPN 1
NJN WTE1 IF NOT READY
LDN 3 SET SUB ERROR CODE
STD EP
LDN /MTX/NWE NO WRITE ENABLE
LJM RET3 RETURN ERROR CODE
WTE1 LDN /MTX/RDR DROP READY ERROR CODE
STD EC
CALL EMM CALL ERROR HANDLER
LDD EC
LJM RET3 RETURN
WTE2 STD LG+1
STD EC
STM /WRITE/BYWR
STM /WRITE/BYRM
STD T3 CLEAR REPOSITIONING COUNT
RJM WEO WAIT END OF OPERATION
* CHECK FOR TAPE MARK STATUS IN REVERSE.
WTE3 LDC F0113 BACKSPACE OVER TAPE MARK
RJM FCN
RJM WFC WAIT END OF OPERATION
STM WTEB SAVE BACKSPACE STATUS FOR ANALYSIS
LPN 20 TAPEMARK STATUS BIT
STM WTEA SAVE STATUS OF BKSP OF CURRENT TAPE MARK
LDM BIDW,WP LOAD LAST GOOD RECORD BLOCK ID
SBN 1
ZJP WTE5 IF LAST GOOD RECORD IS TAPE MARK
WTE3.1 AOD T3 INCREASE REPOSITIONING COUNT
LDN 13 FORESPACE OVER TAPE MARK
RJM FCN
RJM WFC WAIT END OF OPERATION
LPN 20
ZJN WTE4 IF TAPE MARK NOT SEEN ON FORESPACE
LDM WTEA
ZJN WTE4.1 IF TAPE MARK NOT SEEN ON BACKSPACE
LJM WTE23 TAPE MARK SEEN IN BOTH DIRECTIONS
WTE4 LDM BIDW,WP LOAD BLOCK ID FROM WINDOW
SBM UBWB
NJN WTE4.1 IF NOT LAST GOOD DATA RECORD
SOD T3 ADJUST REPOSITIONING COUNT
AOD EI INCREMENT RETRY COUNTER
LJM WTE17 REWRITE THE TAPE MARK
WTE4.1 SOD T3 REDUCE REPOSITIONING COUNT
LDC F0113 BACKSPACE OVER THIS BLOCK
RJM FCN
RJM WFC WAIT END OF OPERATION
* TAPE MARK RECOVERY.
WTE5 AOD EI SET SINGLE RETRY
LDD WP POINTER TO LAST GOOD BLOCK ID
STD T2
WTE8 LDM BIDW,T2 LOAD BLOCK ID FROM WINDOW
SBN 4 INVALID BLOCK ID
ZJP WTE14 IF LAST BLOCK ID IN WINDOW
* BACKSPACE OVER TAPE MARKS AND LAST GOOD DATA BLOCK.
SOD T3 REDUCE REPOSITIONING COUNT
LDC F0113 BACKSPACE OVER PRU
RJM FCN
RJM WFC WAIT END OF OPERATION
SHN 21-4
PJN WTE11 IF NO TAPE MARK
LDM BIDW,T2
SBN 1
NJN WTE11 IF BLOCK ID WINDOW AND STATUS MISMATCH
SOD T2 REDUCE WINDOW POINTER
PJN WTE9 IF NO WRAP AROUND
LDN 7
STD T2
WTE9 SBD WP
NJN WTE8 IF MORE IN BLOCK ID WINDOW
UJP WTE14.1 LAST BLOCK ID IN WINDOW
* FORESPACE OVER LAST GOOD DATA BLOCK.
WTE11 LDD HP
LPN 1
NJN WTE12 IF 9 TRACK
LDD MD CURRENT PARITY TO BE USED ON FORESPACE
SHN -5
LMM BIDW,T2 PARITY THAT BLOCK WAS WRITTEN AT
LPN 2
ZJN WTE12 IF NO CHANGE NEEDED
LDN 5 TOGGLE TO OPPOSITE PARITY
RJM FCN
WTE12 AOD T3 INCREASE REPOSITIONING COUNT
LDN 13 FORESPACE OVER LAST GOOD DATA BLOCK
RJM FCN
RJM WFC WAIT END OF OPERATION
SHN 21-13
PJN WTE13 IF NO ALERT ON FORESPACE
LDM BIDW,T2 LOAD BLOCK ID
LPN 2
NJN WTE14 IF WRITTEN AS EVEN PARITY
WTE13 SHN 7
MJN WTE13.1 IF TAPE MARK STATUS FORESPACE
LDM BIDW,T2
SBM UBWB
ZJN WTE13.2 IF BLOCK ID MATCHES
AOM WTEA
LPN 62
ZJN WTE12 IF NO TAPE MARK AND NEXT BLOCK NOT CHECKED
WTE13.1 UJN WTE15 FATAL ERROR WRITING TAPE MARK
WTE13.2 LDM WTEA
LPN 1
ZJN WTE14 IF MATCH FOUND ON EXPECTED BLOCK
SOD T3 ADJUST REPOSITIONING COUNT
* FORESPACE OVER TAPE MARKS IF ANY.
WTE14 LDD T2
SBD WP
ZJN WTE16 IF NO TAPE MARKS
WTE14.1 AOD T2 INCREMENT TEMP WINDOW POINTER
LPN 7
STD T2
AOD T3 INCREASE REPOSITIONING COUNT
LDN 13 FORESPACE OVER TAPE MARK
RJM FCN
RJM WFC WAIT END OF OPERATION
LPN 20
NJN WTE14 IF TAPE MARK IN STATUS
WTE15 LJM WTE19 FATAL ERROR ON WRITING TAPE MARK
* CHECK IF CURRENT TAPE MARK SEEN ON BACKSPACE.
WTE16 STD T3 CLEAR REPOSITIONING COUNT
LDC 0 CURRENT TAPE MARK STATUS/FLAGS
WTEA EQU *-1
LPN 20
ZJN WTE17 IF NO TAPE MARK STATUS ON BACKSPACE
RAM WTEA BLOCK THIS PATH
LJM WTE3.1 CHECK FOR TAPE MARK
* ISSUE ERASES AND REWRITE TAPE MARK.
WTE17 LDD EI RETRY COUNTER
STD T2 MAKE ERASE COUNTER
SBN 6
PJN WTE19 IF MAX RETRY REACHED
WTE18 LDN 52 ISSUE ERASE
RJM FCN
RJM WEO
SOD T2 REDUCE ERASE COUNTER
NJN WTE18 IF LOOP ERASE FUNCTIONS
LDN F0051 ISSUE WRITE TAPE MARK
RJM FCN
RJM WEO
LDN /MTX/TME WRITE TAPE MARK ERROR CODE
STD EC
LDD DS SET UP DETAIL STATUS
STM //STER
CALL EMM CALL ERROR HANDLER
LJM WTE3 REVERIFY TAPE MARK
* ERROR ON TAPE MARK RECOVERY. REPOSITION TAPE FOR POSSIBLE
* SUBSEQUENT *CLOSER* OPERATION.
WTE19 LDD T3 ERROR REPOSITIONING COUNT
SHN 21-13
PJN WTE21 IF BACKSPACE REPOSITIONING NEEDED
AOD T3 INCREASE REPOSITIONING COUNT
SHN -14 CHECK FOR OVERFLOW
NJN WTE22 IF REPOSITIONING DONE OR NOT REQUIRED
LDC 13 FORESPACE ONE BLOCK
WTE20 RJM FCN
RJM WFC WAIT END OF OPERATION
UJN WTE19 CHECK IF MORE REPOSITIONING REQUIRED
WTE21 ZJN WTE22 IF REPOSITIONING DONE OR NOT REQUIRED
SOD T3 REDUCE REPOSITIONING COUNTER
LDC F0113
UJN WTE20 BACKSPACE ONE BLOCK
WTE22 LDN /MTX/TME WRITE TAPE MARK FAILURE
STD EC
LDD DS SET UP DETAIL STATUS
STM //STER
CALL EMM CALL ERROR HANDLER
LDD EC
LJM RET3 RETURN TO MAGNET
WTEB BSSZ 1 INITIAL BACKSPACE STATUS FOR ANALYSIS
WFC SPACE 4,10
** WFC - WAIT BACKSPACE FUNCTION COMPLETE.
* TIMES OUT APPROXIMATELY 25 FEET OF TAPE.
*
* EXIT (A) = (DS) = UNIT STATUS.
*
* USES T4.
*
* CALLS //STW.
WFC2 CON 0 ENTERED VIA *RJM* FROM //STW
SOD T4
NJN WFC1 IF NOT TIMEOUT
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFC1 ATTEMPT 1 MORE WAIT
WFC SUBR ENTRY/EXIT
LDC 2000 SET TIME OUT
STD T4
LDC WFC2 SET RETURN ON TIMEOUT IN //STW
STM //STWC
WFC1 LDN 0 WAIT NOT BUSY
RJM //STW
LDC //ERR RESET ERROR EXIT
STM //STWC
LDD DS
UJN WFCX RETURN
WFM SPACE 4,10
** WFM - WRITE FILE MARK.
*
* COUNTS TAPE MARK AS A DATA BLOCK IF NOT LABEL OPERATION.
*
* CALLS WTM.
WFM SUBR ENTRY/EXIT
LDD UP SET EOR/EOF FLAG
SCN 10
LMN 10
STD UP
LDD MD CLEAR TAPE MARK REQUEST
SCN 14
STD MD
RJM WTM WRITE TAPE MARKS
LDD PB
SHN -6
NJN WFM1 IF LABELING OPERATION
AOD BL+1 COUNT BLOCK
SHN -14
RAD BL
WFM1 LDN 0
UJN WFMX RETURN
SPACE 4,10
ERRNG BUFB-* OVERFLOWED INTO WRITE RECOVERY
TITLE ANSI LABEL PROCESSORS.
SPACE 4,10
** TABLE OF LABEL OPERATIONS.
ANS INDEX ANSI LABELS OPERATION TABLE
INDEX /MTX/WLTM/40,(WEF,WEFL) WRITE TAPE MARK
INDEX /MTX/WLTR/40,(ETL,ETLL) WRITE TRAILER LABEL
INDEX /MTX/WLEV/40,(EVL,EVLL) WRITE END OF VOLUME LABEL
INDEX /MTX/WLVH/40,(VLL,VLLL) WRITE VOL1, HDR1
INDEX /MTX/WLME/40,(EFL,EFLL) WRITE MULTI-FILE EOF
INDEX /MTX/WLVR/40,(VLL,VLLL) WRITE VOL1, HDR1 ON REEL SWAP
INDEX /MTX/WLMX/40 TERMINATE TABLE
ANSL EQU *-ANS LENGTH OF TABLE
EFL BSS 0
LOC 0
CON WFM WRITE FILE MARK
CON EOF WRITE *EOF1*
CON WFM WRITE FILE MARK
CON CWS CLEAR WRITE STATUS
LOC *O
EFLL EQU *-EFL
EVL BSS 0
LOC 0
CON ERA
CON WFM
CON EOV
CON EVO
CON UTL
CON WFM
CON WFM
CON WFM
CON CWS
LOC *O
EVLL EQU *-EVL
ETL BSS 0
LOC 0
CON WFM
CON EOF
CON EFO
CON UTL
CON WFM
CON WFM
CON WFM
CON CWS
LOC *O
ETLL EQU *-ETL
VLL BSS 0
LOC 0
CON VOL
CON UVL
CON HDR
CON OHD
CON UHL
CON WFM
LOC *O
VLLL EQU *-VLL
WEF BSS 0
LOC 0
CON WFM
LOC *O
WEFL EQU *-WEF
SPACE 4,10
** COMMON EXIT CONDITIONS.
* (A) = 0, NO WRITE REQUIRED, SECTION NUMBER WILL BE ADVANCED.
* (A) = 40XXXX, WRITE BLOCK, DON,T ADVANCE SECTION NUMBER.
* (A) = XXXX, WRITE BLOCK, ADVANCE SECTION NUMBER.
ELA SPACE 4,10
** ELA - EXTENDED LABELS ADDRESS PROCESSING.
*
* ENTRY (T6 - T7) = POSITION TO START AT IN BUFFER.
*
* EXIT (A) = ABSOLUTE ADDRESS.
* (A) = 0, END OF LABEL BUFFER.
*
* CALLS FAD.
ELA SUBR ENTRY/EXIT
LDM FETO
SHN 21-5
PJN ELA0 IF NO EXTENDED LABELS
RJM FAD GET FET ADDRESS
ADN 11
CRD CM
LDD CM+3
SHN 14
STD CM+1
SHN -14
STD CM+3
SHN 14
LMD CM+4
SBN 2
MJN ELA0 IF NO LABEL BUFFER
LDD CM+2
SHN 6
LMD CM+1
STD CM+2
SHN -14
STD CM+1
LDD T6
SBD CM+1
SHN 14
ADD T7
SBD CM+2
ADN 11 ALLOW FOR LABEL
MJN ELA1 IF NOT END OF LABEL BUFFER
ELA0 LDN 0 INDICATE END OF BUFFER
LJM ELAX RETURN
ELA1 LDD CM+1 CHECK IF BUFFER WITHIN FL
ADD CM+3
SHN 14
ADD CM+2
ADD CM+4
SHN -6
SBD FL
MJN ELA2 IF BUFFER WITHIN FL
LDN /MTX/BAE BUFFER ARGUMENT ERROR
LJM RET3 RETURN ERROR CODE
ELA2 LDD CM+3 CALCULATE LABEL ADDRESS
ADD T6
SHN 6
ADD RA
SHN 6
ADD CM+4
ADD T7
LJM ELAX RETURN
ERA SPACE 4,10
** ERA - ERASE.
*
* SKIP OVER THE EOT MARKER SO THAT THE FIRST TAPE MARK IN THE
* TRAILER LABEL SEQUENCE CAN BE WRITTEN AFTER THE EOT MARKER.
* THIS WILL REDUCE THE POSSIBILITY OF AN ERROR OCCURRING WHEN
* LATER READING THE FIRST TAPE MARK.
*
* EXIT (A) = 0.
*
* CALLS FCN, WEO.
ERA SUBR ENTRY/EXIT
LDN 52 SKIP OVER EOT BLOCK (ERASE)
ERAA EQU *-1
* UJN ERA1 (CTS)
RJM FCN
RJM WEO WAIT FOR END OF OPERATION
ERA1 LDN 0 NO WRITE REQUIRED, ADVANCE SECTION
UJN ERAX RETURN
EOV SPACE 4,10
** EOV - WRITE END OF VOLUME LABEL.
* WRITE 3 TAPE MARKS IF UNLABELED.
*
* CALLS CCB, HTR.
EOV2 AOD PB SKIP *EOV2* SEQUENCE
AOD PB SKIP *UTL* SEQUENCE
LDN 0 INDICATE NO WRITE
EOV SUBR ENTRY/EXIT
LDD LT
SHN 21-12
MJN EOV1 IF LABELED
LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN EOV1 IF I OR SI FORMAT
SBN /MTX/TFLI-/MTX/TFSI-1
NJN EOV2 IF NOT LI FORMAT
EOV1 LDN 1 SET POSITION IN LABEL BUFFER
STD T6
LDC =H*EOV1*+40000 SET *EOV1*
RJM CCB
RJM HTR
UJN EOVX RETURN
EVO SPACE 4,10
** EVO - END OF VOLUME - 2.
*
* USES T6.
*
* CALLS CCB, SFL.
EVO1 LDN 0 INDICATE NO WRITE
EVO SUBR ENTRY/EXIT
LDM IVSN
ZJN EVO1 IF NEXT VSN NOT KNOWN
LDM EVSN+4
SHN 21-5
MJN EVO1 IF NEXT VSN IS SCRATCH
LDN 1 SET POSITION IN LABEL BUFFER
STD T6
LDC =H*EOV2*+40000 SET EOV2
RJM CCB
LDC IVSN+60000 COPY VSN
RJM CCB
LDC 70D SPACE FILL REMAINDER
RJM SFL
LDN 1 INDICATE WRITE REQUIRED
UJN EVOX RETURN
EOF SPACE 4,10
** EOF - WRITE END OF FILE LABEL.
*
* USES T6.
*
* CALLS CCB, HTR.
EOF2 LDN 0 INDICATE NO WRITE
EOF SUBR ENTRY/EXIT
LDD LT
SHN 21-12
MJN EOF1 IF LABELED
LDD FM
SHN -6
SBN /MTX/TFSI+1
MJN EOF1 IF I OR SI FORMAT
SBN /MTX/TFLI-/MTX/TFSI-1
NJN EOF2 IF NOT LI FORMAT
EOF1 LDN 1 SET POSITION IN LABEL BUFFER
STD T6
LDC =H*EOF1*+40000 SET *EOF1*
RJM CCB
RJM HTR
UJN EOFX RETURN
EFO SPACE 4,10
** EFO - PROCESS EOF2 - EOF9.
*
* CALLS PSL.
EFO SUBR ENTRY/EXIT
LDC 3REOF
RJM PSL
UJN EFOX RETURN
HDR SPACE 4,10
** HDR - *HDR1* PROCESSOR.
*
* CALLS CCB, HTR.
HDR SUBR ENTRY/EXIT
LDN 1 SET POSITION IN LABEL BUFFER
STD T6
LDC =H*HDR1*+40000 SET *HDR1*
RJM CCB
RJM HTR
RJM WUC WRITE UNIT DESCRIPTOR TABLE CONDITIONALLY
UJN HDRX RETURN
OHD SPACE 4,10
** OHD - PROCESS HDR2-HDR9.
*
* CALLS PSL.
OHD SUBR ENTRY/EXIT
LDC 3RHDR
RJM PSL
UJN OHDX RETURN
UHL SPACE 4,10
** UHL - USER FILE HEADER LABEL.
*
* CALLS PUL.
UHL SUBR ENTRY/EXIT
LDC 3RUHL
RJM PUL
UJN UHLX RETURN
UTL SPACE 4,10
** UTL - USER TRAILER LABELS.
*
* CALLS PUL.
UTL SUBR ENTRY/EXIT
LDC 3RUTL
RJM PUL
UJN UTLX RETURN
UVL SPACE 4,10
** UVL - USER VOLUME HEADER LABEL.
*
* CALLS PSL.
UVL2 LDN 1R2 RESET SEARCH TO BEGIN AT XXX2
STM PSLA
SOM PSLB
LDN 0
STD PA
UVL SUBR ENTRY/EXIT
LDD PA
NJN UVL1 IF NOT FIRST ENTRY
LDN 1R1 SET SEARCH TO BEGIN AT UVL1
STM PSLA
AOM PSLB
UVL1 LDC 3RUVL SET LABEL TO SEARCH FOR
RJM PSL
ZJN UVL2 IF NO UVL LABELS
UJN UVLX RETURN
VOL SPACE 4,10
** VOL - VOLUME HEADER LABEL.
*
* USES T6, T7, CM - CM+4, CN - CN+4.
*
* CALLS CCB, CLF, GUD, SFL, SLC.
VOL1 AOD PB ADVANCE SECTION
LDN 0 SET LAST GOOD BLOCK TAPE MARK
STD LG
STD LG+1
VOL SUBR ENTRY/EXIT
LDD UP SET LAST OPERATION WRITE FLAG
SCN 20
LMN 20
STD UP
LDD EI
NJN VOL2 IF ERROR RECOVERY IN PROGRESS
LDD DS
LPN 4
ZJN VOL1 IF NOT LOAD POINT
VOL2 LDN 1 SET POSITION IN LABEL BUFFER
STD T6
LDC =H*VOL1*+40000 SET *VOL1*
RJM CCB
LDN 11D COPY VSN
STD T7
LDN 6
RJM CLF
LDN 55D COPY VOLUME ACCESSIBILITY FROM *UGNU*
STD T7
LDN 1
RJM CLF
LDN 20D SPACE FILL LABEL
RJM SFL
LDN 6 SPACE FILL LABEL
RJM SFL
LDN 8D GET FAMILY ORDINAL
STD T7
RJM GUD
NJN VOL3 IF NOT NULL FAMILY
LDN 1 SUBSTITUTE DEFAULT FAMILY
VOL3 STD CN SAVE FAMILY ORDINAL
LDK FOTP READ FOT POINTERS
CRD CM
LDD CM CALCULATE FOT ENTRY ADDRESS
SHN 14
ADD CM+1
ADD CN
CRD CN
LDC 70000+CN
RJM CCB
LDN 1 COPY USER NAME
STD T7
LDN 7
RJM CLF
LDN 28D SPACE FILL
RJM SFL
LDN 1R1 SET LABELS ARE ANSI STANDARD
RJM SLC
LDN 1 SET TO WRITE BLOCK
LJM VOLX RETURN
CWS SPACE 4,10
** CWS - CLEAR WRITE STATUS.
CWS SUBR ENTRY/EXIT
LDD UP
SCN 30 CLEAR WRITE OPERATION AND EOR/EOF FLAGS
STD UP
LDN 0
UJN CWSX RETURN
ERRNZ /MTX/WLTM
TITLE CHARACTER PROCESSING SUBROUTINES.
SPACE 4,10
** DIRECT CELL USAGE IN FOLLOWING ROUTINES.
*
* (T5) NUMBER OF CHARACTERS.
* (T6) CHARACTER POSITON IN *BUF*.
* (T7) CHARACTER POSITON IN *UDT*.
*
* ALL CHARACTER POSITIONS ARE REFERENCED STARTING WITH *1*.
* THUS, THE CHARACTER POSITION VALUES BEING USED TO ACCESS
* *BUF* MAY BE REFERENCED DIRECTLY TO THE LABEL STANDARD.
CCB SPACE 4,10
** CCB - COPY CHARACTER BUFFER.
* COPYS THE SPECIFIED NUMBER OF CHARACTERS FROM THE SPECIFIED
* FIELD TO THE LABEL BUFFER. TRAILING ZEROS ARE BLANK FILLED.
*
* ENTRY (A, 21 - 14) = NUMBER OF CHARACTERS.
* (A, 13 - 0) = ADDRESS OF BUFFER TO MOVE FROM.
* (T6) = CHARACTER POSITION IN *BUF*.
*
* CALLS SFL, SLC.
CCB2 LDD T5 SPACE FILL LABEL
RJM SFL
CCB SUBR ENTRY/EXIT
STD T4 SAVE BUFFER ADDRESS
SHN -14
STD T5 SAVE CHARACTER COUNT
CCB1 LDI T4 MOVE CHARACTER
SHN -6
ZJN CCB2 IF 00 CHARACTER
RJM SLC STORE CHARACTER
SOD T5
ZJN CCBX IF ALL CHARACTERS MOVED
LDI T4 MOVE CHARACTER
LPN 77
ZJN CCB2 IF 00 CHARACTER
RJM SLC
SOD T5
ZJN CCBX IF ALL CHARACTERS MOVED
AOD T4
UJN CCB1 LOOP
CLF SPACE 4,10
** CLF - COPY LABEL FIELD FROM UDT.
* IF FIRST CHARACTER FIELD IS ZERO, FIELD IS SPACE FILLED.
*
* ENTRY (A) = NUMBER OF CHARACTERS TO MOVE.
* (T6) = CHARACTER POSITION IN *BUF*.
* (T7) = CHARACTER POSITION IN *UDT*.
*
* CALLS GUD, SFL, SLC.
CLF SUBR ENTRY/EXIT
STD T5
RJM GUD
NJN CLF2 IF SPACE FILL NOT NEEDED
LDD T5 ADVANCE CHARACTER POSITION IN *UDT*
RAD T7
LDD T5 SPACE FILL
RJM SFL
UJN CLFX RETURN
CLF1 RJM GUD GET UNIT DESCRIPTOR CHARACTER
CLF2 RJM SLC STORE LABEL CHARACTER
SOD T5
NJN CLF1 IF STILL MORE CHARACTERS TO MOVE
UJN CLFX RETURN
DCV SPACE 4,10
** DCV - DECIMAL CONVERT TO A 6 DIGIT NUMBER.
*
* ENTRY (CM+3 - CM+4) = QUANITY TO BE CONVERTED.
*
* EXIT (DCB+2 - DCB+4) = DISPLAY CODE DECIMAL NUMBER.
*
* MACROS MONITOR.
DCV SUBR ENTRY/EXIT
LDN 0 PRESET TO CONVERT NUMBER
STD CM+1
STD CM+2
LDD MA
CWD CM
MONITOR RDCM REQUEST DATA CONVERSION
LDD MA
CRD CM
LDD CM+4 REMOVE *.* FROM DATA
STM DCB+4
LDD CM+3
LPN 77
SHN 14
LMD CM+2
SHN 6
STM DCB+3
LPC 770000
LMD CM+1
SHN 6
STM DCB+2
LDC DCB+1 REMOVE SPACES
STD T1
DCV1 AOD T1 ADVANCE TO NEXT BYTE
LMC DCB+5
ZJN DCV3 IF ALL SPACES
LDI T1
ZJN DCV2 IF ZERO
LMC 2R
NJN DCV3 IF NOT * *
DCV2 LDC 2R00
STI T1
UJN DCV1 LOOP
DCV3 SHN -6
NJN DCV4 IF NOT * *
LCN -1R0+1R
SHN 6
RAI T1
DCV4 LJM DCVX RETURN
GUD SPACE 4,10
** GUD - GET UNIT DESCRIPTOR CHARACTER.
*
* ENTRY (T7) = CHARACTER POSITION OF NEXT CHARACTER.
*
* EXIT (A) = CHARACTER.
* (T7) = INCREMENTED.
*
* USES T1.
GUD1 LDM UDTB-1,T1
LPN 77
GUD SUBR ENTRY/EXIT
AOD T7
SBN 1
SHN 21
STD T1
SHN -21
ZJN GUD1 IF EVEN CHARACTER POSITION
LDM UDTB,T1
SHN -6
UJN GUDX RETURN
HTR SPACE 4,10
** HTR - GENERATE HEADER/TRAILER LABEL INFORMATION.
*
* EXIT (A) = 1. (INDICATE BLOCK WRITE)
*
* CALLS CLF, C2D, DCV, SFL.
HTR SUBR ENTRY/EXIT
LDN 5 GENERATE FILE IDENTIFIER
STD T6
LDN 21D
STD T7
LDN 17D
RJM CLF
LDN 41D COPY SET IDENTIFCATION
STD T7
LDN 6
RJM CLF
LDM UDTB+22 CONVERT SECTION NUMBER
LPN 77
STD CM+3
LDM UDTB+23
STD CM+4
RJM DCV
LDC /MTX/UUDTL*10D+7
STD T7
LDN 4
RJM CLF
LDM UDTB+27 CONVERT SEQUENCE NUMBER
LPN 77
STD CM+3
LDM UDTB+30
STD CM+4
RJM DCV
LDC /MTX/UUDTL*10D+7
STD T7
LDN 4
RJM CLF
LDM UDTB+34 CONVERT GENERATION NUMBER
LPN 77
STD CM+3
LDM UDTB+35
STD CM+4
RJM DCV
LDC /MTX/UUDTL*10D+7
STD T7
LDN 4
RJM CLF
LDM UDTB+33 CONVERT GENERATION VERSION NUMBER
LPN 77
SHN 14
LMM UDTB+34
SHN -6
STD CM+4
LDN 0
STD CM+3
RJM DCV
LDC /MTX/UUDTL*10D+9D
STD T7
LDN 2
RJM CLF
LDN JDAL SET CREATION DATE
CRM DCB,ON
LDC /MTX/UUDTL*10D+6
STD T7
RJM SCL SET CREATION DATE CENTURY
LDN 5
RJM CLF
LDC 66D SET EXPIRATION DATE
STD T7
RJM SCL SET EXPIRATION DATE CENTURY
LDN 5
RJM CLF
LDN 47D SET ACCESSIBILITY CODE
STD T7
LDN 1
RJM CLF
LDD BL CONVERT BLOCK COUNT
STD CM+3
LDD BL+1
STD CM+4
RJM DCV
LDC /MTX/UUDTL*10D+5
STD T7
LDN 6
RJM CLF
LDD MA SET OPERATING SYSTEM NAME
CWM HTRA,ON
SBN 1
CRM DCB,ON
LDC /MTX/UUDTL*10D+1
STD T7
LDN 10D
RJM CLF
LDD EO SET EST ORDINAL WRITTEN ON
SHN -3 POSITION UPPER DIGITS
RJM C2D
STM DCB
LDD EO PROCESS LOWER DIGIT
LPN 7
ADN 1R0
SHN 6
STM DCB+1
LDC /MTX/UUDTL*10D+1
STD T7
LDN 3
RJM CLF
LDN 7 SPACE FILL
RJM SFL
LDN 1 INDICATE TO WRITE BLOCK
LJM HTRX RETURN
HTRA DATA 10HNOS "VERNUM"-
PSL SPACE 4,10
** PSL - PROCESS SEQUENTIAL TYPE OPTIONAL LABELS.
* (HDR2 - HDR9, EOF2 - EOF9, UVL1 - UVL9)
*
* ENTRY (A) = 3 CHARACTER LABEL NAME TO SEARCH FOR.
* (PA) = FOURTH CHARACTER OF LABEL - 2.
*
* EXIT (A) = (PA) = 0 IF NO LABEL.
*
* CALLS ELA.
PSL4 STD PA
PSL SUBR ENTRY/EXIT
SHN 14
STM PSLC
SHN -6
SCN 77
LMC 1R2
PSLA EQU *-1
* LMC 1R1 (UVL LABELS)
ADD PA
STM PSLD
LDN ZERL SET TO START AT BEGINNING OF BUFFER
CRD T5
LDD PA
PSLB LMN 9D-1
* LMN 9D (UVL LABELS)
ZJN PSL4 IF MAXIMUM LABELS
PSL1 RJM ELA
ZJN PSL4 IF NO EXTENDED LABEL OR END OF BUFFER
CRD CN
ADN 1
CRD CM
LDD CN+4
ZJN PSL4 IF END OF LABELS IN BUFFER
LMC 80D
NJN PSL3 IF NOT CORRECT LENGTH
LDD CM
LMC *
PSLC EQU *-1
NJN PSL2 IF NOT CORRECT LABEL
LDD CM+1
LMC *
PSLD EQU *-1
NJN PSL2 IF NOT CORRECT LABEL
LDN 10 READ LABEL
STD T5
RJM ELA
ADN 1
CRM BUF,T5
LCN 1 SET WRITE LABEL
LJM PSLX RETURN
PSL2 LDN 11 INCREMENT TO NEXT LABEL BLOCK
RAD T7
SHN -14
RAD T6
LJM PSL1 LOOP FOR NEXT LABEL
PSL3 LDN /MTX/IXL INCORRECT CHARACTER COUNT IN HEADER
LJM RET3 RETURN ERROR CODE
PUL SPACE 4,10
** PUL - PROCESS USER LABELS.
*
* ENTRY (A) = 3 CHARACTER LABEL NAME TO SEARCH FOR.
* (PA) = PARTICULAR LABEL OF TYPE TO TAKE.
*
* EXIT (PA) = (A) = 0, IF NO LABEL.
*
* CALLS ELA.
PUL4 STD PA
PUL SUBR ENTRY/EXIT
SHN 14
STM PULA
SHN -14
STM PULB
LDN ZERL
CRD T5
LDD PA
LMD HN
ZJN PUL4 IF MAXIMUM NUMBER OF USER LABELS
PUL1 RJM ELA
ZJN PUL4 IF NO EXTENDED LABELS OR END OF BUFFER
CRD CN
ADN 1
CRD CM
LDD CN+4
ZJN PUL4 IF END OF LABELS IN BUFFER
LMC 80D
NJN PUL3 IF NOT CORRECT LENGTH
LDD CM
LMC *
PULA EQU *-1
NJN PUL2 IF NOT CORRECT LABEL
LDD CM+1
SHN -6
LMC *
PULB EQU *-1
NJN PUL2 IF NOT CORRECT LABEL
AOD T5
SBN 1
LMD PA
NJN PUL2 IF NOT CORRECT LABEL BLOCK
LDN 10 READ LABEL
STD T5
RJM ELA
ADN 1
CRM BUF,T5
LCN 1
LJM PULX RETURN
PUL2 LDN 11 INCREMENT TO NEXT BLOCK
RAD T7
SHN -14
RAD T6
LJM PUL1 LOOP
PUL3 LDN /MTX/IXL INCORRECT CHARACTER COUNT IN HEADER
LJM RET3 RETURN ERROR CODE
RUD SPACE 4,10
** RUD - READ UDT VSN AND LABEL INFORMATION.
*
* EXIT (A) = 0 IF NOT AT MAGNET CP.
* UDT INFORMATION READ IF AT MAGNET CP.
*
* CALLS UDA.
RUD SUBR ENTRY/EXIT
RJM UDA
ZJN RUDX IF NOT AT MAGNET CP
CRM EVSN,T1 READ VSN AND LABEL INFORMATION
UJN RUDX RETURN
UDA SPACE 4,10
** UDA - SET UDT ADDRESS OF VSN AND LABEL PARAMETERS.
*
* EXIT (A) = ADDRESS OF *UESN*.
* (T1) = NUMBER OF UDT WORDS IN BLOCK.
*
* CALLS UAD.
UDA1 LDN 0
UDA SUBR ENTRY/EXIT
LDM CECB
LPN 77
NJN UDA1 IF NOT AT MAGNET CP
LDN /MTX/UUDTL+2
STD T1
RJM UAD
ADK /MTX/UESN
ERRNZ /MTX/UISN-/MTX/UESN-1
ERRNZ /MTX/UUFN-/MTX/UISN-1
UJN UDAX RETURN
WUC SPACE 4,15
** WUC - WRITE UNIT DESCRIPTOR TABLE CONDITIONALLY.
* UPDATE UDT CREATION DATE FOR SYMBOLIC ACCESS TMS TAPES.
*
* EXIT CREATION DATE FROM LABEL WRITTEN INTO *UDT* IF TAPE IS
* SYMBOLIC ACCESS.
*
* NOTE (A) IS PRESERVED.
*
* USES CM - CM+4.
*
* CALLS UAD, WUD.
WUC SUBR ENTRY/EXIT
STM WUCA+1 SAVE (A)
SHN -14
ADC LDCI
STM WUCA
LDM CECB CHECK CONTROL POINT
LPN 77
NJN WUC1 IF NOT AT MAGNET CP
RJM UAD GET UDT ADDRESS
ADN /MTX/UTMS
CRD CM CHECK FOR TMS TAPE, SYMBOLIC ACCESS
LDD CM+4
SHN 21-10
PJN WUC1 IF NOT SYMBOLIC ACCESS
LDM WUCB+0 SET CREATION DATE
STM WUCC+0
LDM WUCB+1
STM WUCC+1
LDM WUCC+2
LPN 77
STM WUCC+2
LDM WUCB+2
SCN 77
RAM WUCC+2
RJM WUD WRITE UNIT DESCRIPTOR TABLE
WUC1 BSS 0
WUCA LDC * RESTORE (A)
LJM WUCX RETURN
WUCB EQU BUF+42D/2 CREATION DATE IN LABEL BUFFER
*WUCC EQU UDTB+/MTX/UDAT*5-/MTX/UUFN*5 CREATION DATE IN UDT
WUD SPACE 4,10
** WUD - WRITE UDT VSN AND LABEL INFORMATION.
*
* CALLS UDA.
WUD SUBR ENTRY/EXIT
RJM UDA GET UDT LABEL ADDRESS ADDRESS
ZJN WUDX IF NOT AT MAGNET CP
CWM EVSN,T1
UJN WUDX RETURN
SCL SPACE 4,10
** SCL - SET CENTURY IN LABEL.
* GENERATES THE *ISO* STANDARD CENTURY CHARACTER, BASED ON THE
* YEAR IN THE *UDT*, AND PLACES IT IN THE OUTPUT BUFFER.
*
* ENTRY (T7) = CHARACTER POSITION OF YEAR IN *UDT*.
* (T6) = CHARACTER POSITION IN OUTPUT BUFFER.
*
* EXIT FILL CHARACTER PLACED IN OUTPUT BUFFER,
* (* * FOR 19XX YEARS, *0* FOR 20XX YEARS).
* (T7) = (A) = ORIGINAL (T7).
* (T6) INCREMENTED.
*
* CALLS GUD, SLC.
*
* USES T7.
SCL1 LDN 1R SPACE FILL
SCL2 RJM SLC STORE LABEL CHARACTER
SOD T7
SCL SUBR ENTRY/EXIT
RJM GUD GET TENS DIGIT OF YEAR
SBN 1R7
PJN SCL1 IF YEAR .LE. 1999
LDN 1R0 ZERO FILL FOR NEXT CENTURY
UJN SCL2 STORE CHARACTER AND RETURN
SLC SPACE 4,10
** SLC - STORE LABEL CHARACTER.
*
* ENTRY (T6) = CHARACTER POSITION IN *BUF*.
* (A) = CHARACTER.
*
* EXIT (T6) = INCREMENTED.
*
* USES T1.
SLC1 LDM BUF-1,T1
SCN 77
LMD T0
SLC2 STM BUF-1,T1
SLC SUBR ENTRY/EXIT
STD T0 SAVE CHARACTER
AOD T6 INCREMENT POSITION
SHN 21
STD T1
SHN -21
NJN SLC1 IF EVEN CHARACTER
LDM BUF-1,T1
LPN 77
SHN 14
LMD T0
SHN 6
UJN SLC2 STORE CHARACTER
SFL SPACE 4,10
** SFL - SPACE FILL LABEL.
*
* (A) = NUMBER OF SPACES.
* (T6) = FIRST CHARACTER OF LABEL FIELD.
*
* CALLS SLC.
SFL SUBR ENTRY/EXIT
STD T5
SFL1 LDN 1R
RJM SLC STORE LABEL CHARACTER
SOD T5
NJN SFL1 IF STILL MORE CHARACTERS TO FILL
UJN SFLX RETURN
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
TITLE HARDWARE PROCESSING SUBROUTINES.
WTM SPACE 4,10
** WTM - WRITE TAPE MARKS.
*
* CALLS FCN, STW, WTE.
WTM SUBR ENTRY/EXIT
WTM0 LDN 2 WAIT NOT BUSY
RJM STW
WTMA EQU *-1
* RJM /PRESET/GPS (IF CTS)
WTMB PSN
* MJN WTM2 IF COMMAND RETRY (CTS)
* LDD DS CHECK FOR READY AND WRITE ENABLE
LPC 201
LMC 201
NJN WTM1 IF NOT READY OR NO WRITE ENABLE
* WRITE TAPE MARK.
LDN F0051
RJM FCN
* LDN 0
WTM1 RJM WTE CHECK AND PROCESS ERRORS
UJN WTMX RETURN
WTM2 LDN F0002
RJM /PRESET/ICF ISSUE CONTINUE FUNCTION
UJP WTM0 WAIT FOR END OF OPERATION
SPACE 4,10
TADD TSAD ADDRESS RELOCATION TABLE
USE BUFFERS
ERROVL
EVSN EQU * *UESN*
IVSN EQU EVSN+5 *UISN*
UDTB EQU IVSN+5 UDT LABEL PARAMETERS (*UUFN* - *UDAT*)
DCB EQU UDTB+/MTX/UUDTL*5 DATA CONVERSION BUFFER
WUCC EQU UDTB+/MTX/UDAT*5-/MTX/UUFN*5 CREATION DATE IN UDT
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS MCH.
PRS LDC PRSA MODIFY CHANNELS
RJM MCH
LDD HP
SHN 21-7
PJP PRS2 IF NOT CTS
LDC LDNI+CCW/10000
STM /WRITE/WCTA DO CODE CONVERSION
LDN CLBL
STM LTYP+1 LENGTH OF LABEL
LDC LDNI+0
STM /WRITE/WCTD
STM /WRITE/WCTD+1
ISTORE /WRITE/WCTE,(UJN /WRITE/WCT5)
LDC 6321 BITS IN GENERAL STATUS TO CHECK
STM /PRESET/WFEA
LDC /PRESET/GPS
STM WTMA
ISTORE WTMB,(MJN WTM2)
LDK CPEL-1
STD T1
PRS1 LDM .CPE,T1 REPLACE *WTE* WITH *CPE*
STM WTEX,T1
SOD T1
PJN PRS1 IF MORE CODE TO MOVE
ISTORE ERAA,(UJN ERA1) SKIP ERASE GAP
ISTORE /WRITE/WCTJ,(UJN /WRITE/WRT7) SKIP READ CM BUFFER
LDC /WRITE/WCT2 SKIP CODE CONVERSION
STM /WRITE/WCTI
ISTORE /WRITE/WCTG,(UJN /WRITE/WCT7) SKIP READ OF CM BUFFER
ISTORE /WRITE/WCTM,(UJN /WRITE/WRT7) SKIP BLOCK COUNT UPDATE
UJN PRS3 SET SRU INCREMENT
PRS2 LDC LDNI+0
STM /WRITE/WRTC
STM /WRITE/WRTC+1
LDM PRSC
STM /WRITE/WRTD
LDM PRSD
STM /WRITE/WRTG
LDC 4625
STM //WEOA
PRS3 LDC /SRU/ITCL*100 SET SRU INCREMENT
STM //CECA
LDM PRSB
STM /WRITE/WRTH
LJM PRSX RETURN
PRSA CHTB CHANNEL TABLE
PRSB BSS 0
LOC /WRITE/WRTH
UJN /WRITE/WRT7 CALCULATE DATA CHECKSUM
LOC *O
PRSC BSS 0
LOC /WRITE/WRTD
UJN /WRITE/WRT3.1 WRITE LABELS
LOC *O
PRSD BSS 0
LOC /WRITE/WRTG
UJN /WRITE/WRT5 WRITE LABELS
LOC *O
TITLE CTS-SPECIFIC ROUTINES.
CPE SPACE 4,15
** CPE - CHECK AND PROCESS WRITE TAPE MARK ERRORS.
*
* THIS ROUTINE OVERLAYS *WTE* FOR CTS.
*
* ENTRY (A) .EQ. 0 IF STATUS SHOULD BE CHECKED.
* (A) .NE. 0 IF NOT READY OR NO WRITE ENABLE.
*
* CALLS *CEM*, *CWP*.
*
* MACROS CALL.
.CPE BSS 0
LOC WTEX
CPE SUBR ENTRY/EXIT
ZJN CPE2 IF CHECK STATUS
LPN 1
NJN CPE1 IF NOT READY
LDN 3
STD EP SET SUB ERROR CODE
LDN /MTX/NWE
UJN CPE1.1 RETURN
CPE1 LDN /MTX/RDR NOT READY
STD EC
CALL CEM CALL ERROR HANDLER
LDD EC
CPE1.1 LJM RET3 RETURN
CPE2 STD EC
CPE3 RJM /PRESET/WFE WAIT FOR END OF OPERATION
MJN CPE5 IF COMMAND RETRY
LMN 20 EXPECT TAPE MARK STATUS
ZJN CPE4 IF NO ERROR
LDN /MTX/STE STATUS ERROR
CPE4 ADD EI
ZJN CPEX IF NO ERROR OR PREVIOUS ERROR
CALL CWP WRITE ERROR PROCESSOR
UJP CPEX RETURN
CPE5 LDN F0002
RJM /PRESET/ICF ISSUE CONTINUE FUNCTION
UJN CPE3 WAIT FOR END OF OPERATION
CPEL EQU *-CPEX LENGTH OF *CPE*
ERRNG WTEB-* *CPE* LARGER THAN *WTE*
LOC *O
OVERLAY (CODE CONVERT LABEL TO WRITE.),(ERLB+5),P
CCW SPACE 4,10
** CCW - CODE CONVERT LABEL TO WRITE TO CTS.
*
* ENTRY (MD) = MODE FUNCTION.
* (DNCV) = CONVERSION MODE.
* (CF) = 63/64 CHARACTER SET FLAG.
*
* USES T1, T2, T3.
*
* CALLS GCC, SCC.
ENTRY CCW
CCW SUBR ENTRY/EXIT
LDD MD
SHN 21-6
PJN CCW1 IF NOT CODED
LDM DNCV
LPN 7
LMN /MTX/ANS
ZJN CCW1 IF ASCII CONVERSION MODE
LDC EBCI
STM GCCA CODE MODIFICATION FOR EBCDIC
CCW1 LDD CF
LPN 1
NJN CCW2 IF 64 CHARACTER SET
LDK 0#20
STM ANSI+ANSIA MODIFY TABLES FOR 63 CHARACTER SET
LDK 0#3A
STM ANSI+ANSIB
LDN 0
STM EBCI+EBCIA
LDK 0#7A
STM EBCI+EBCIB
CCW2 LDC 79D
STD T1 POINTER TO CHARACTER TO CONVERT
LDC 64
STD T2 POINTER TO STORE CONVERTED CHARACTER
LDN 1
STD T3 1 OF 3 POSITIONS OF 8-BIT BYTE
LDN 0
STM BUF+1,T2
CCW3 RJM GCC GET CONVERTED CHARACTER
RJM SCC STORE CONVERTED CHARACTER
SOD T1
PJN CCW3 IF MORE CHARACTERS TO CONVERT
LJM CCWX RETURN
GCC SPACE 4,15
** GCC - GET CONVERTED CHARACTER.
*
* ENTRY (T1) = POINTER TO CHARACTER TO CONVERT.
* (T5) = CHARACTER TO CONVERT IF (T1) HAS EVEN VALUE.
*
* EXIT (T6) = CONVERTED CHARACTER.
* (T5) = NEXT CHARACTER TO CONVERT IF (T1) HAS ODD VALUE.
GCC SUBR ENTRY/EXIT
LDD T1
SHN 21-0
STD T6
PJN GCC1 IF LEFT MOST CHARACTER OF WORD
LDM BUF,T6
STD T5
LPN 77
UJN GCC2 SAVE CHARACTER TO CONVERT
GCC1 LDD T5
SHN -6
GCC2 STD T6 CHARACTER TO CONVERT
LDM ANSI,T6
GCCA EQU *-1
* LDM EBCI,T6 (EBCDIC)
STD T6
UJN GCCX RETURN
SCC SPACE 4,15
** SCC - STORE CONVERTED CHARACTER.
*
* THIS ROUTINE CONVERTS ONE OF THE 80 CHARACTERS OF THE
* LABEL FROM DISPLAY CODE TO ASCII OR EBCDIC AND STORES
* IT IN THE LABEL BUFFER.
*
* ENTRY (T6) = CONVERTED CHARACTER.
* (T2) = POINTER TO STORE CHARACTER.
* (T3) = 1 0F 3 POSITIONS TO STORE 8-BIT BYTE.
SCC3 SOD T3
SCC SUBR ENTRY/EXIT
LDD T3
NJN SCC1 IF NOT BYTE 1 OF 3
LDD T6
SHN 4
RAM BUF,T2
LDN 2
STD T3
LCN 2
RAD T2
UJN SCCX RETURN
SCC1 SBN 1
NJN SCC2 IF NOT BYTE 2 OF 3
LDD T6
SHN 10
RAM BUF+1,T2
SHN -14
STM BUF,T2
UJN SCC3 UPDATE POINTER
SCC2 LDD T6
STM BUF+1,T2
UJP SCC3 UPDATE POINTER
ANSI SPACE 4,10
** ATANS - TABLE TO CONVERT DISPLAY TO ASCII.
ANSI BSS 0
LOC 0
CON 0#3A COLON
ANSIA EQU *-1
* CON 0#20 (63 CHARACTER SET - SPACE)
CON 0#41 A
CON 0#42 B
CON 0#43 C
CON 0#44 D
CON 0#45 E
CON 0#46 F
CON 0#47 G
CON 0#48 H
CON 0#49 I
CON 0#4A J
CON 0#4B K
CON 0#4C L
CON 0#4D M
CON 0#4E N
CON 0#4F O
CON 0#50 P
CON 0#51 Q
CON 0#52 R
CON 0#53 S
CON 0#54 T
CON 0#55 U
CON 0#56 V
CON 0#57 W
CON 0#58 X
CON 0#59 Y
CON 0#5A Z
CON 0#30 0
CON 0#31 1
CON 0#32 2
CON 0#33 3
CON 0#34 4
CON 0#35 5
CON 0#36 6
CON 0#37 7
CON 0#38 8
CON 0#39 9
CON 0#2B PLUS
CON 0#2D HYPHEN
CON 0#2A ASTERISK
CON 0#2F SLANT
CON 0#28 OPENING PAREN
CON 0#29 CLOSING PAREN
CON 0#24 DOLLAR SIGN
CON 0#3D EQUALS
CON 0#20 SPACE
CON 0#2C PERIOD
CON 0#2E COMMA
CON 0#23 NUMBER SIGN
CON 0#5B OPEN BRACKET
CON 0#5D CLOSING BRACKET
CON 0#25 PERCENT
ANSIB EQU *-1
* CON 0#3A (63 CHARACTER SET - PERCENT)
CON 0#22 QUOTATION MARKS
CON 0#5F UNDERLINE
CON 0#21 EXCLAMATION POINT
CON 0#26 AMPERSAND
CON 0#27 APOSTROPHE
CON 0#3F QUESTION MARK
CON 0#3C LESS THAN
CON 0#3E GREATER THAN
CON 0#40 COMMERCIAL AT
CON 0#5C REVERSE SLANT
CON 0#5E CIRCUMFLEX
CON 0#3B SEMICOLON
LOC *O
EBCI SPACE 4,10
** EBCI - TABLE TO CONVERT DISPLAY TO EBCDIC.
EBCI BSS 0
LOC 0
CON 0#7A COLON
EBCIA EQU *-1
* CON 0 (63 CHARACTER SET - COLON)
CON 0#C1 A
CON 0#C2 B
CON 0#C3 C
CON 0#C4 D
CON 0#C5 E
CON 0#C6 F
CON 0#C7 G
CON 0#C8 H
CON 0#C9 I
CON 0#D1 J
CON 0#D2 K
CON 0#D3 L
CON 0#D4 M
CON 0#D5 N
CON 0#D6 O
CON 0#D7 P
CON 0#D8 Q
CON 0#D9 R
CON 0#E2 S
CON 0#E3 T
CON 0#E4 U
CON 0#E5 V
CON 0#E6 W
CON 0#E7 X
CON 0#E8 Y
CON 0#E9 Z
CON 0#F0 0
CON 0#F1 1
CON 0#F2 2
CON 0#F3 3
CON 0#F4 4
CON 0#F5 5
CON 0#F6 6
CON 0#F7 7
CON 0#F8 8
CON 0#F9 9
CON 0#4E PLUS
CON 0#60 HYPHEN
CON 0#5C ASTERISK
CON 0#61 SLANT
CON 0#4D OPENING PAREN
CON 0#5D CLOSING PAREN
CON 0#5B DOLLAR SIGN
CON 0#7E EQUALS
CON 0#40 SPACE
CON 0#6B PERIOD
CON 0#4B COMMA
CON 0#7B NUMBER SIGN
CON 0#4A OPEN BRACKET
CON 0#5A CLOSING BRACKET
CON 0#6C PERCENT
EBCIB EQU *-1
* CON 0#7A (63 CHARACTER SET - COLON)
CON 0#7F QUOTATION MARKS
CON 0#6D UNDERLINE
CON 0#4F EXCLAMATION POINT
CON 0#50 AMPERSAND
CON 0#7D APOSTROPHE
CON 0#6F QUESTION MARK
CON 0#4C LESS THAN
CON 0#6E GREATER THAN
CON 0#7C COMMERCIAL AT
CON 0#E0 REVERSE SLANT
CON 0#5F CIRCUMFLEX
CON 0#5E SEMICOLON
LOC *O
ERRNG 473+ERLB+5-* IF OVERLAY LONGER THAN ONE PRU
OVERLAY (MTS/ATS WRITE ERROR PROCESSOR.),(BUFB+10),P
WEM SPACE 4,10
** WEM - WRITE ERROR PROCESSOR.
*
* ENTRY (EP, 11) = VERIFY IN PROGRESS.
* (EP, 10) = ERASE ERROR HAS OCCURRED.
* (EP, 9) = LOAD POINT ERROR FLAG.
* (EP, 8) = LOAD POINT RECOVERY FLAG.
* (EP+1, 5 - 0) = NUMBER OF ERASES.
*
* CALLS /CPP/CAL, CFC, /WRITE/CNW, *CPP*, EBW, *EMM*, EOT,
* /CPP/INM, MCH, POT, PRS, RCI, /CPP/SFP, WLP.
*
* MACROS CALL.
ENTRY WEM
WEM SUBR ENTRY
LDM //LOV SAVE CALLERS EXIT ADDRESS
STM WEMH
LDC WEM1 SET ADDRESS TO ENTER AT
STM //LOV
UJN WEMX RETURN
WEM1 LDD MA SAVE OUT POINTER
CWD CN
CRM WEMI,ON
LDC CTAB MODIFY CHANNELS
RJM MCH
RJM PRS
RJM EBW EVALUATE BID WINDOW
RJM CFC RECONNECT UNIT
LDM //STER RESTORE STATUS
STD DS
LPN 1
NJN WEM2 IF READY
LDN /MTX/RDR
STD EC
UJN WEM2.1 NO LOAD POINT RECOVERY IF NOT READY
WEM2 RJM WLP CHECK FOR LOAD POINT RECOVERY
* UJN WEM2.1 (NOT ATS CONTROLLER)
WEML EQU *-2
MJN WEM2.1 IF NO LOAD POINT ERROR OR ERROR RECOVERED
CALL EMM ISSUE MESSAGE
LDN 0
STD EC
AOD EI
LJM RET2 RETRY ON *BFW* ERROR
WEM2.1 LDD FN LOAD MAGNET FUNCTION CODE
LMN /MTX/WLA
NJN WEM3 IF NOT WRITE LABELS
LDC RET2 FORCE REQUEUE AFTER WRITE IS GOOD
STM /WLA/WLAG
AOM POTD
WEM3 LDM /WRITE/WTFE CHECK IF EOF REQUEST DETECTED AHEAD
WEMK EQU *-1
* LDM /WLI/WLIA (LI FORMAT)
LMN 1
NJN WEM4 IF NOT EOF REQUEST
LDD MD
SCN 14
STD MD
WEM4 LDD EC
ZJN WEM6 IF VERIFY OPERATION
LMN /MTX/STE
NJN WEM7 IF NOT STATUS ERROR
LDD DS
SHN 21-3
PJN WEM7 IF NOT EOT
SHN 12
PJN WEM5 IF NO OTHER ERRORS
LDM MTDS
LPC 7077
WEMA EQU *-1
* LPC 7777 (ATS UNIT)
NJN WEM7 IF OTHER ERRORS
WEM5 RJM EOT
WEM6 LJM WEM10 POSITION TAPE
WEM7 LDD DS CHECK FOR NON-FATAL ERRORS
SHN 21-13
PJN WEM8 IF OTHER ERRORS
LDM MTDS
LPC 7077
WEMB EQU *-1
* LPC 7777 (ATS UNIT)
NJN WEM8 IF FATAL ERRORS
STD EC
AOM WEME SET ACCEPT DATA FLAG
WEMC UJN WEM8 PROCESS MTS DATA
* LDM MTDS+1 (ATS UNIT)
CON MTDS+1
SHN -11
LPN 3
ZJN WEM7.1 IF NOT ON-THE-FLY
LDN /MTX/OTF
STD EC
UJN WEM8 PROCESS CORRECTED BLOCK
WEM7.1 LDD HN
RAM ECNT+1 INCREMENT LATE DATA COUNTER
SHN -14
RAM ECNT
WEM8 LDD SP
LPN 4
RAM WEME SET ACCEPT WRITE FLAG
LDD SP
LPN 4
NJN WEM9 IF ERROR PROCESSING INHIBITED
LDM /WRITE/BYWR SET BYTE COUNT
STD BY
LDC -0 RESTORE BID
WEMD EQU *-1
STM UBWB
CALL EMM DIAGNOSE ERROR
RJM CFC RECONNECT UNIT
WEM9 LDD EC
SBN /MTX/BFAT
MJN WEM10 IF NOT FATAL ERROR
SBN /MTX/MFAT-/MTX/BFAT
PJN WEM10 IF NOT FATAL ERROR
LJM RET4 RETURN FATAL ERROR
WEM10 LDC 0 ACCEPT DATA FLAG
WEME EQU *-1
NJN WEM11 IF ACCEPT DATA
RJM POT POSITION TAPE
WEMF EQU *-2
* UJN *+2 (DISCARD BLOCK AT EOT)
WEM11 LDN 0 CLEAR ERROR CODE
STD EC
WEMJ LDN 1
* LDN 0 (FORMAT CHANGE)
NJN WEM11.1 IF FORMAT PARAMETERS NOT CHANGED
STM //RELA
WEM11.1 CALL CPP RELOAD ADDRESS RELOCATOR
LDM WEMD RESTORE BLOCK ID
STM UBWB
LDM /WRITE/BYWR RESET BYTE COUNT
STD BY
LDD FN
LMN /MTX/WLA
NJN WEM12 IF NOT WRITE LABELS
LJM WEM15 EXIT
WEM12 RJM RCI READ UDT
RJM /CPP/CAL CALCULATE PARAMETERS
LDC ADDR MODIFY INSTRUCTIONS
RJM /CPP/INM
LDM WEME
ZJN WEM13 IF REREAD DATA
LDN 0 CLEAR ERROR PARAMATERS
STD EP
STD EP+1
STD EI
LDD MA RESTORE OUT POINTER
CWM WEMI,ON
SBN 1
CRD CN
LDM /WRITE/WTFE CHECK IF EOF REQUEST DETECTED AHEAD
WEMM EQU *-1
* LDM /WLI/WLIA (LI FORMAT)
LMN 1
NJN WEM14 IF NOT EOF REQUEST
LDN 14 SET EOF STATUS
RAD MD
UJN WEM15 EXIT
WEM13 LDN 3 READ OUT POINTER
RJM /CPP/SFP
WEM14 RJM /WRITE/CNW
WEMG EQU *-2
* UJN *+2 (DISCARD BLOCK AT EOT)
* RJM /WLI/CNW (LI FORMAT)
WEM15 LJM * EXIT
WEMH EQU *-1
WEMI EQU WEM
TBDW EQU WEMI+5 TEMPORARY BID WINDOW
ERRNG WEM1-TBDW BUFFER OVERFLOW
EOT SPACE 4,10
** EOT - END OF TAPE PROCESSOR.
EOT3 LDC EOTEXIT SET TO RETURN HERE AFTER POINTER UPDATE
STM /WRITE/WRTK
EOTA EQU *-1
* STM /WLI/WRTK (LI FORMAT)
LDD EI
ZJN EOTX IF RECOVERY NOT IN PROGRESS
LDN 0 SET TO VERIFY REWRITE AND ISSUE MESSAGE
STM WEME
STD EC
EOT SUBR ENTRY/EXIT
AOM WEME SET ACCEPT DATA FLAG
LDD SP
SHN -12
ZJN EOT3 IF TERMINATE WITH TAPE MARK
LMN 1
NJN EOT1 IF NOT ACCEPT BLOCK AT EOT
LDM /WRITE/STAT
SHN 21-3
PJN EOTX IF TAPE MARK ENCOUNTERED THIS BLOCK
UJN EOT2 CLEAR ACCEPT DATA FLAG
EOT1 LMN 2&1
NJN EOTX IF NOT DISCARD BLOCK AT EOT
LDD UP CLEAR EOR FLAG
SCN 10
STD UP
LDD MD CLEAR EOR/EOF THIS OPERATION
LPC 7377
STD MD
EOT2 LDN 0
STM WEME
LDC UJNI+2
STM WEMF
STM WEMG
LJM EOT3 SET RETURN ADDRESS
POT SPACE 4,10
** POT - POSITION AND VERIFY TAPE AFTER ERROR.
*
* USES CM - CM+4.
*
* CALLS BKS, CID, CKR, FCN, IRC, ISC, POS, RDA, STW, WEO.
POT SUBR ENTRY/EXIT
LDD EC
NJN POT1 IF ERROR
RJM DTS GET DETAIL STATUS
LJM POT12 VERIFY BLOCK REWRITE
* BACKSPACE OVER THE ERROR BLOCK.
POT1 AOD EI
RJM BKS BACKSPACE OVER BAD BLOCK
LDD EI LOAD ERROR COUNTER
LPN 77 ERROR ITERATION
SBN 2
PJN POT3 IF SECOND ITERATION
POT2 RJM POS POSITION TO LAST GOOD RECORD
* TAPE IS POSITIONED TO LGB.
LDD EP
SHN 21-13
PJN POT3 IF NOT VERIFY
LJM POT12 VERIFY BLOCK REWRITE
* ERASE TAPE.
POT3 AOD EP+1 COUNT ERASE
LPN 77
SBN ERAL
MJN POT4 IF NOT MAXIMUM ERASES
LDN /MTX/ERA ERASE LIMIT ERROR
STD EC
LJM POT17 FATAL ERROR
POT4 LDN 1 NUMBER OF ERASES TO PERFORM
STM POTK
LDN 2 WAIT NOT BUSY
RJM STW
LDD CP CHECK ERROR FLAG
ADN STSW
CRD CM
LDD CM+1
LPN 37
SBN SPET
MJN POT5 IF NO ERROR *SPET* OR ABOVE
LDN /MTX/EFT SET ERROR FLAG TERMINATION
STD EC
LJM POT17 RETURN ERROR
POT5 LDN 52 SKIP BAD SPOT (ERASE)
RJM FCN
LDN 2 WAIT NOT BUSY
RJM STW
SHN 21-3
PJN POT6 IF NOT EOT
LJM POT19 SET ERASE AT EOT FLAG
POT6 RJM WEO WAIT END OF OPERATION
SCN 10 IGNORE EOT
NJN POT7 IF ERASE ERROR
SOM POTK
NJN POT5 IF MORE ERASES TO PERFORM
LJM POT9 SET UP TO REWRITE BLOCK
POT7 LDN /MTX/STE DIAGNOSE ERASE ERROR
STD EC
LDD DS SET STATUS FOR MESSAGE
STM //STER
RJM ISC ISSUE MESSAGE AND RECONNECT UNIT
AOD EI INCREMENT ERROR ITERATION COUNT
LDM DNCV
LPN 70
LMN /MTX/D16*10
ZJN POT8 IF 1600 BPI CONTINUE ERASE
LMN /MTX/D62*10&/MTX/D16*10
ZJN POT8 IF 6250 CPI CONTINUE ERASE
LJM POT2 REPOSITION TO LAST GOOD RECORD
POT8 RJM CKR CHECK FOR UNIT READY
LJM POT3 REISSUE THE ERASE
* REWRITE THE BLOCK.
POT9 LDD LG+1
ZJN POT11 IF TAPE MARK WRITE
LDD UP CLEAR EOR FLAG
SCN 10
STD UP
LDD MD CLEAR EOR/EOF THIS OPERATION FLAG
LPC 7377
STD MD
LDD EI
LPN 7
ZJN POT11 IF TIME TO REQUEUE
LDC 0
POTD EQU *-1 ADD ONE TO *POTD*
ZJN POT10 IF NOT WRITE LABELS
LDC /WLA/WLA8-/WRITE/WTF
POT10 ADC /WRITE/WTF
ERRNZ /WRITE/WTF-/WLI/WLI ENTRY POINTS MUST BE THE SAME
STM WEMH
LJM POTX RETURN
POT11 LJM RET2 REQUEUE
* WRITE VERIFY OPERATION.
POT12 RJM BKS BACKSPACE OVER CURRENT BLOCK
LDD EP CHECK FOR LOAD POINT RECOVERY FLAG
SHN 21-10
MJN POT13 IF NOT LOAD POINT RECOVERY
LDD EP SET VERIFY IN PROGRESS
LPC 3777
LMC 4000
STD EP
RJM POS INSURE CORRECT TAPE POSITION
* VERIFY THE ENTIRE SEQUENCE.
POT13 RJM RDA READ BLOCK
LDD T4
NJN POT14 IF ERROR
RJM CID CHECK I FORMAT TRAILER INFORMATION
ZJN POT15 IF NO ERROR
LCN 0 SET BLOCK ID TO IMPOSSIBLE
STM WEMD
LJM POS6 ISSUE POSITION LOST MESSAGE, NO RETURN
POT14 LDN /MTX/WVF
STD EC
RJM ISC ISSUE POSITION LOST MESSAGE
UJN POT17 RETURN FATAL ERROR
POT15 AOM WEME SET TO ACCEPT WRITE
RJM ISC ISSUE RECOVERED MESSAGE AND CONNECT UNIT
RJM IRC INCREASE RECOVERED ERROR COUNTER
LDD FN
LMN /MTX/WLA
NJN POT16 IF NOT WRITE LABELS
STD EP+1 CLEAR ERROR PARAMETERS
STD EP
STD EI
POT16 LJM POTX RETURN
* CANNOT RECOVER ERROR.
POT17 LDD FN
LMN /MTX/WLA
NJN POT18 IF NOT WRITE LABELS
LDD UP
SCN 30 CLEAR WRITE OPERATION AND EOR/EOF FLAGS
STD UP
POT18 LJM RET4 RETURN FATAL ERROR
* ERASE AT EOT.
POT19 LDD EP
SHN 21-12
MJN POT17 IF IRRECOVERABLE ERROR
LDC 2000 SET ERASE OCCURRED AT EOT FLAG
RAD EP
LJM POT6 RETRY
POTK CON 0 NUMBER OF ERASES TO PERFORM
TITLE SUBROUTINES.
ABC SPACE 4,15
** ABC - ADJUST BYTE COUNT FOR 9 TRACK TAPES.
*
* ENTRY (BY) = BYTE COUNT.
* (T4) = BUFFER SIZE.
* (DS) = DEVICE STATUS.
*
* EXIT (A) = 0 IF NO BYTE ADJUSTMENT.
* (ES) = 40 IF FILL STATUS.
* = 0 IF NO FILL STATUS.
*
* USES T2, T4.
ABC SUBR ENTRY/EXIT
LDD HP
LPN 1
ZJN ABCX IF 7 TRACK
* SET FILL STATUS.
LDD DS
ABCA SHN 0-5
* UJN ABC2 (ATS UNIT)
LPN 1
ADD BY
LPN 3
ZJN ABC1 IF NO FILL STATUS
LDN 40
* LPN 40 (ATS UNIT)
ABCB EQU *-1
ABC1 STD ES
* CORRECT 9 TRACK BYTE COUNT.
LDD DS
LPN 40
ZJN ABC2 IF NO ODD COUNT
LDD BY
LPN 2
ZJN ABC2 IF NOT MODULO 4, 2 OR 3
SOD BY
SOD T4
* ADJUST BUFFER LENGTH FOR I FORMAT.
ABC2 LDD FM
SHN -6
LMN /MTX/TFI
ZJN ABC3 IF I FORMAT
LDN 0
UJN ABC4 RETURN
ABC3 LDD BY
ZJN ABC4 IF NO DATA READ
SBN 1
ZJN ABC4 IF POSSIBLE TAPE MARK
STD T2 CALCULATE WORD COUNT
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
LPN 1
ABC4 STM ABCC
LJM ABCX RETURN
ABCC CON 0
BKS SPACE 4,10
** BKS - BACKSPACE TAPE.
*
* EXIT (A) = NEGATIVE IF BOT.
* (DS) = GENERAL STATUS.
*
* CALLS CKR, FCN, STW, WFC.
BKS SUBR ENTRY/EXIT
RJM CKR CHECK READY
LDN 2 WAIT NOT BUSY
RJM STW
LDC F0113 BACKSPACE
RJM FCN
RJM WFC WAIT FUNCTION COMPLETE
LDD DS RETURN LOAD POINT STATUS
SHN 21-2
UJN BKSX RETURN
BTW SPACE 4,10
** BTW - BUILD TEMPORARY WINDOW.
*
* ENTRY (A) = NUMBER OF BLOCKS TO MOVE BACK.
*
* EXIT (TBDW) = TEMPORARY BLOCK ID WINDOW IF FIRST BKSP NOT
* AT LOAD POINT.
*
* USES T8, T9.
*
* CALLS BKS, DTS, ISC, SOB.
BTW SUBR ENTRY/EXIT
STD T8
LDN 4 SETUP FIRST BID BYTE
STM TBDW
BTW1 RJM BKS BACKSPACE
MJN BTW2 IF BOT
SOD T8
NJN BTW1 LOOP FOR NEXT BLOCK
BTW2 LDM POSB SET BID POINTER
STD T9
LDM POSA CHECK FOR LOAD POINT ON FIRST BKSP
SBD T8
ZJN BTWX IF FIRST BKSP AT LOAD POINT
LDN 0 CLEAR PRU COUNTER
STD T8
BTW3 RJM SOB SET UP AND READ ONE BLOCK
LDM UBWB
STM TBDW+1,T8
AOD T9 INCREMENT POINTER
LPN 7 RESET POINTER FOR POSSIBLE WRAP AROUND
STD T9
AOD T8
LMM POSA
NJN BTW4 IF LOOP FOR NEXT BLOCK
LJM BTWX RETURN
BTW4 RJM DTS GET DETAILED STATUS
BTWA UJN BTW3 MTS
* LDM MTDS+1 (ATS) LOAD ERROR CORRECTION FLAGS
CON MTDS+1
SHN -11
LPN 3 SINGLE/DOUBLE TRACK CORRECTED FLAGS
ZJN BTW3 IF NO CORRECTABLE ERRORS
LDD DS CHECK FOR ALERT
SHN 21-13
MJN BTW3 IF ALERT STATUS SET
LDD T8 SAVE TEMPORARIES
STM BTWB
LDD T9
STM BTWC
LDN /MTX/RCE ISSUE REPOSITION CORRECTION MESSAGE
STD EC
LDD DS SAVE STATUS
STM //STER
RJM ISC ISSUE MESSAGE AND RECONNECT
LDN 0 CLEAR ERROR CODE
STD EC
AOD EI
LDM BTWB RESTORE TEMPORARIES
STD T8
LDM BTWC
STD T9
LJM BTW3 CONTINUE FORESPACES
BTWB CON 0 SAVE T8
BTWC CON 0 SAVE T9
CFC SPACE 4,10
** CFC - CHECK FOR CONNECT.
*
* ENTRY (RELA) = CONNECT FLAG.
* (DS) = DEVICE STATUS.
*
* USES T1.
*
* CALLS CUI.
CFC SUBR ENTRY/EXIT
LDM MTSF+2 SAVE CURRENT ERROR CORRECTION CODE
STM CFCB
LPC 2000
ZJN CFC0 IF ERROR CORRECTION ENABLED
LDC 4000 ENABLE ERROR CORRECTION FOR RECOVERY
STM MTSF+2
LDN 0
STM //RELA CLEAR CONNECTED FLAG
LDC LDNI+0 SET FORMAT ALTERED FLAG
STM WEMJ
CFC0 LDM //RELA
ZJN CFC1 IF UNIT NOT CONNECTED
LDD DS
SHN 21-11
PJN CFCX RETURN IF UNIT CONNECTED
LDN 0
STM //RELA
CFC1 STD T1
CFC2 LDM MTDS,T1 SAVE DETAILED STATUS
STM CFCA,T1
AOD T1
LMN 10
NJN CFC2 IF MORE TO SAVE
RJM CUI CONNECT UNIT
LDN 0
STD T1
CFC3 LDM CFCA,T1 RESTORE DETAILED STATUS
STM MTDS,T1
AOD T1
LMN 10
NJN CFC3 IF MORE TO MOVE
LDM CFCB RESET ORIGINAL ERROR CORRECTION CODE
STM MTSF+2
LJM CFCX RETURN
CFCA BSS 10 SAVE AREA FOR DETAILED STATUS
CFCB BSS 1 ORIGINAL ERROR CORRECTION CODE
CBW SPACE 4,15
** CBW - COMPARE BID WINDOWS.
*
* COMPARE THE PERMANENT WINDOW (BIDW) TO THE TEMPORARY
* WINDOW (TBDW).
*
* ENTRY (T1) = FIRST BYTE IN BIDW TO COMPARE.
* (T2) = FIRST BYTE IN TBDW TO COMPARE.
*
* EXIT (A) = 0 IF MATCH OR NOT BLOCK ID EQUIPMENT.
* (A, 13-6) = NUMBER OF INVALID BLOCK ID-S.
* (A, 5-0) = NUMBER OF VALID BLOCK ID MISMATCHES.
*
* USES T1 - T4.
CBW SUBR ENTRY/EXIT
LDD CF CHECK IF BLOCK ID EQUIPMENT
LPC 300
LMC 300
ZJN CBWX IF NO BLOCK ID
LDN 0
STD T4
STD T3
LDD T1 SAVE (T1)
STM CBWA
CBW1 LDM BIDW,T1 LOAD HISTORY BLOCK ID
LMN 4
ZJN CBW3 IF INVALID BID IN HISTORY
LDM TBDW,T2 LOAD BID FROM TEMP WINDOW
LMN 4 INVALID CHECK
NJN CBW2 IF NOT INVALID BID IN TEMP WINDOW
AOD T3 CHECK NEXT BID
UJN CBW3 CONTINUE
CBW2 LDM BIDW,T1 LOAD BID FROM HISTORY
LMM TBDW,T2
ZJN CBW3 IF NO ERROR
AOD T4
CBW3 LDD WP
SBM CBWA
ZJN CBW4 IF ONLY ONE BLOCK ID
AOD T2
AOD T1 INCREMENT POINTER
LPN 7 RESET POINTER FOR POSSIBLE WRAP AROUND
STD T1
LMD WP
NJN CBW1 IF NOT END OF COMPARE
CBW4 LDD T3 FORM BID COMPARE RESULTS AND EXIT
SHN 6
ADD T4
LJM CBWX RETURN
CBWA CON 0 STORAGE FOR (T1)
CKR SPACE 4,10
** CKR - CHECK READY.
* IF UNIT NOT READY, A TIME OUT WILL BE PERFORMED WAITING FOR
* UNIT TO BECOME READY BEFORE GIVING A FATAL ERROR. THIS
* SHOULD ALLOW RECOVERY FROM MOMENTARY NOT READY CONDITIONS.
*
* CALLS CUI, FCN.
CKR SUBR ENTRY/EXIT
LCN 0 PRESET TIME OUT
STM CKRA
CKR1 LDN 12 STATUS UNIT
RJM FCN
ACN CH
LDC SBNI+1 RETRY FOR TWO MS
CKR2 EQU *-1
FJM CKR3,CH IF DATA
NJN CKR2 IF RETRY NOT COMPLETE
DCN CH+40
UJN CKR5 EXIT WITH ERROR
CKR3 IAN CH
DCN CH+40
LPC 1001
LMN 1
ZJN CKRX IF READY
SHN 21-11
PJN CKR4 IF UNIT CONNECTED
LDN 0
STM RELA CLEAR CONNECTED FLAG
RJM CUI CONNECT UNIT
CKR4 SOM CKRA
NJN CKR1 IF TIME OUT
CKR5 LDN /MTX/RDR READY DROP
LJM RET3 RETURN ERROR CODE
CKRA CON 7777 TIME OUT COUNTER
CID SPACE 4,15
** CID - CHECK I FORMAT TRAILER BYTES.
* IF LI FORMAT, CHECK THE BLOCK NUMBER IN THE PREFIX.
*
* ENTRY (A) = AMOUNT TO ADJUST BLOCK NUMBER BY.
* (BY) = BYTES IN BLOCK LAST READ.
* (EBUF - EBUF+3) = I FORMAT TRAILER BYTES.
* (EBUF-1 - EBUF+3) = LI FORMAT PREFIX.
*
* EXIT (A) = 0, GOOD BLOCK.
*
* USES T1.
CID3 LDN 0 INDICATE GOOD COMPARE
CID SUBR ENTRY/EXIT
STD T1 SAVE BLOCK NUMBER ADJUSTMENT
LDD FM
SHN -6
LMN /MTX/TFI
NJN CID3 IF NOT I FORMAT
CIDA EQU *-1
* UJN CID1 (LI FORMAT)
LDD FN
LMN /MTX/WTF
NJN CID3 IF NOT WRITE DATA
CID1 LDD BY
SBN 4
MJN CID3 IF TAPE MARK OR SNB BLOCK
LDD BY
LMN 40D
ZJN CIDX IF LABEL BLOCK
LDM EBUF+1 STORE DATA FOR MESSAGE
SHN 14
LMM EBUF+2
ADD T1
STM //BNEI+2
SHN -14
STM //BNEI+1
LDM EBUF
STM //BNEI
LMD BY
NJN CID2 IF LENGTHS DON,T COMPARE
CIDB EQU *-1
* PSN (LI FORMAT)
LDM EBUF+1 COMPARE BLOCK NUMBERS
SBD BL
SHN 14
ADM EBUF+2
SBD BL+1
ADD T1
CID2 LJM CIDX RETURN
IRC SPACE 4,10
*** IRC - INCREASE RECOVERED ERROR COUNTER.
* RECOVERED ERROR COUNT IN UDT INCREASED.
*
* ENTRY NONE.
*
* EXIT RECOVERED ERROR COUNTER INCREASED.
*
* USES CM - CM+4, CN - CN+4.
*
* MACROS DELAY, MONITOR, PAUSE.
IRC SUBR ENTRY/EXIT
LDN /MTX/UTMS
STD T1
IRC1 LDM UADA
ADD T1
STD CM+4
LDD HN REQUEST 1 WORD
STD CM+3
LDN 0 REQUEST READ FROM MAGNET
STD CM+1
LCN 7777-/SSD/MTSI SET MAGNET SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
LMN 1
NJN IRC2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN IRC1 REISSUE REQUEST
IRC2 LDD MA
CRD CN
LDD CN+1 CHECK RECOVERED ERROR COUNTER
LMC 7777
NJN IRC4 IF NOT MATCH MAX THRESHOLD
IRC3 LJM IRCX IF MATCH MAX THRESHOLD
IRC4 AOD CN+1
IRC5 LDN /MTX/RUU SET MAGNET FUNCTION
STD CM
LDN /MTX/UTMS SET UDT WORD
STD CM+2
LDD HN SET WORD COUNT
STD CM+3
LDM UADA SET UDT ADDRESS
STD CM+4
LDD MA WRITE MAGNET REQUEST
CWD CM
ADN 1 WRITE NEW UDT WORD
CWD CN
LDK /MTX/RCAL SET MAGNET REQUEST WORD
STD CM+4
LDC 200 SET WORD COUNT
STD CM+3
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
LDN 1 SET WRITE
STD CM+1
MONITOR TDAM
LDD CM+1
ZJN IRC3 IF REQUEST COMPLETE
SBN 4
PJN IRC6 IF NOT REJECT
PAUSE NE
DELAY
LJM IRC5 REISSUE REQUEST
IRC6 LJM //PNR5 DROP PP
SPACE 4,10
** END OF TAPE RETURN FOR EXIT.
*
* NOTE - THIS CODE MUST BE BEFORE BUFFERS.
EOTEXIT LDN /MTX/BEI RETURN END OF TAPE
LJM RET3 RETURN ERROR CODE
SPACE 4,10
ISC SPACE 4,10
** ISC - ISSUE MESSAGE AND RECONNECT UNIT.
*
* ENTRY (EC) = ERROR CODE.
*
* CALLS CFC, *EMM*.
*
* MACROS CALL.
ISC SUBR ENTRY/EXIT
LDM WEMD RESTORE BID FOR MESSAGE
STM UBWB
CALL EMM ISSUE MESSAGE
RJM CFC RECONNECT UNIT IF NEEDED
UJN ISCX RETURN
POS SPACE 4,15
** POS - POSITION TAPE.
*
* ENTRY (POSA) = NUMBER OF BLOCKS TO BACKUP.
* TAPE POSITIONED BEFORE BAD BLOCK.
*
* EXIT POSITION VERIFIED.
* SINGLE BLOCK MISPOSTION MESSAGES ISSUED AS NEEDED.
*
* USES T1, T2.
*
* CALLS BKS, BTW, CBW, ISC, SOB.
POS11 SHN 14
LMD EC
STM POSC SAVE EC
SHN -14
STD EC
RJM ISC ISSUE MESSAGE AND RECONNECT UNIT
LDC * RESTORE EC
POSC EQU *-1
STD EC
POS SUBR ENTRY/EXIT
LDD WP
SBM POSA
ADN 1
PJN POS1 IF NO WRAP AROUND
ADN 10
POS1 STM POSB STORE STARTING POINTER
LDC 0
POSA EQU *-1
RJM BTW BUILD TEMPORARY WINDOW
LDN 1
STD T2
LDC *
POSB EQU *-1
STD T1
RJM CBW COMPARE WINDOWS
ZJN POSX RETURN IF GOOD COMPARE
SHN -6 CHECK FOR INVALID BID IN TEMP WINDOW
ZJN POS2 IF NO INVALID BLOCK ID-S
LJM POS8 INVALID BLOCK ID-S EXIST
POS2 LDD WP CHECK FOR LAST GOOD RECORD VALID BID
STD T3
LDM BIDW,T3
STD T4
LMN 4
ZJN POS4 IF CANNOT TRY REPOSITION
SOD T3 CHECK LRG-1 NOT SAME
PJN POS3 IF NO OVERFLOW
LDN 7
STD T3
POS3 LDM BIDW,T3
LMD T4
NJN POS5 IF LAST TWO BID-S NOT THE SAME
POS4 LJM POS6 CANNOT TRY REPOSITION
POS5 LDN 2 CHECK FOR TOO FAR BACKWARD
STD T2
RAM POSA INCREASE REPOSITION COUNT BY TWO
LDM POSB
STD T1
LDM BIDW,T1
SBM TBDW,T2
NJN POS9 IF NOT TOO FAR BACKWARD
LDD WP
STD T9
RJM SOB SET UP AND READ ONE BLOCK
LDM POSA
RJM BTW REBUILD BLOCK ID WINDOW
LDN 1
STD T2
LDM POSB
STD T1
RJM CBW RECOMPARE THE BID WINDOWS
NJN POS6 IF POSITION LOST
LDN /MTX/SMB ISSUE SINGLE BLOCK MISPOSITION MESSAGE
LJM POS11 ISSUE ERROR MESSAGE
POS6 LDN /MTX/PLO ISSUE POSITION LOST MESSAGE
POS7 STD EC SAVE ERROR CODE
RJM ISC ISSUE MESSAGE AND RECONNECT UNIT
LJM RET4 RETURN FATAL ERROR
POS8 LDN /MTX/MWT
UJN POS7 ISSUE MARGINALLY WRITTEN TAPE
POS9 LDN 0 CHECK FOR TOO FAR FORWARD
STD T2
LDM POSB
STD T1
LDM BIDW,T1
SBM TBDW,T2
NJN POS6 IF POSITION LOST
RJM BKS CORRECT FOR TOO FAR FORWARD AND RETRY
LDM POSA
RJM BTW
LDN 1
STD T2
LDM POSB
STD T1
RJM CBW
ZJN POS10 IF POSITION NOT LOST
LJM POS6 POSITION LOST
POS10 LDN /MTX/SMF ISSUE SINGLE BLOCK MISPOSITION MESSAGE
LJM POS11 ISSUE ERROR MESSAGE
RCI SPACE 4,10
** RCI - READ *CIO* INFORMATION FROM *MAGNET,S FL.
*
* EXIT (T6 - T7) = FET ADDRESS.
* (T1 - T5) = UCIC WORD.
*
* USES CM - CM+4.
*
* CALLS HNG.
*
* MACROS DELAY, MONITOR, PAUSE.
RCI3 LDD MA READ WORDS
CRD T6-3
ADN 2
CRD T1
RCI SUBR ENTRY/EXIT
RCI1 LDM UADA SET FWA OF DESIRED UDT WORDS
ADN /MTX/UCIA
STD CM+4
LDC 300 REQUEST THREE WORDS
STD CM+3
LDN 0 REQUEST READ FROM *MAGNET*
STD CM+1
LCN 7777-/SSD/MTSI SET *MAGNET* SUBSYSTEM IDENTIFICATION
STD CM+2
MONITOR TDAM
LDD CM+1
ZJN RCI3 IF DONE
SBN 2
PJN RCI2 IF MOVE NOT IN PROGRESS
PAUSE NE
DELAY
UJN RCI1 REISSUE REQUEST
RCI2 RJM HNG HANG PP
RDA SPACE 4,15
** RDA - READ DATA.
*
* EXIT (A) = (T4) = 0, NO ERROR.
* (BY) = BYTE COUNT OF BLOCK.
* (EBUF - EBUF+3) = TRAILER BYTES FOR I FORMAT.
* (EBUF-1 - EBUF+3) = PREFIX BYTES FOR LI FORMAT.
* (UBWB) SET TO 1 IF TAPE MARK.
*
* USES T3, T4.
*
* CALLS ABC, CKR, FCN, WEO.
RDA SUBR ENTRY/EXIT
RJM CKR CHECK READY
LDN F0040 ISSUE READ FUNCTION
RJM FCN
ACN CH
RDA1 LDN 0
STD T3 CLEAR LOOP COUNTER
STD BY
* FLUSH DATA, COUNT BYTES, SAVE TRAILER (I FORMAT), SAVE
* PREFIX (LI FORMAT).
RDA2 LDC 500 INPUT DATA IN 500B WORD CHUNKS
IAM EBUF,CH
RDAD EQU *-1
* IAM EBUF-1,CH (LI FORMAT)
NJN RDA3 IF END OF DATA
RDA2.1 AOD T3 INCREMENT LOOP COUNTER
UJN RDA2 LOOP UNTIL END OF DATA
RDAE EQU *-1
* LDC 500 (LI FORMAT)
DATA 500
IAM EBUF+4,CH
ZJN RDA2.1 IF ALL WORDS TRANSFERRED
RDA3 STD T4 SAVE REMAINDER
LDC 500
SBD T4
STD T4
LDD T3 LOAD LOOP COUNT
ZJN RDA5 IF NOT GREATER THAN 500 WORDS
RDA4 LDC 500
RAD BY
SHN -12D
NJN RDA6 IF GREATER THAN 7777 WORDS
SOD T3 DECREMENT LOOP COUNT
NJN RDA4 IF NOT LAST CHUNK
RDA5 LDD T4 LOAD REMAINDER
NJN RDA5.1 IF NOT EVEN CHUNK
LDC 500 SET TO LAST ADDRESS OF CHUNK
STD T4
UJN RDA7 EXIT
RDA5.1 RAD BY
SHN -12D
ZJN RDA7 IF NO BORROW
RDA6 LCN 0
STD BY SET BYTE COUNT TO 7777
RDA7 RJM WEO WAIT END OF OPERATION
SCN 74
ZJN RDA9 IF NO ERRORS
SHN 21-10
RDAA PJN RDA8 IF NOT NOISE
* UJN RDA8 (ATS UNIT)
LDN 42 ISSUE REPEAT READ
RJM FCN
ACN CH
LJM RDA1 REINITIATE READ
RDA8 LDM MTDS
LPC 7077
RDAB EQU *-1
* LPC 7777 (ATS UNIT)
ZJN RDA9 IF ONLY WARNING STATUS
LCN 0
RDA9 STM RDAC
RJM ABC
ZJN RDA10 IF NO BYTE ADJUSTMENT
SOD T4
* MOVE I FORMAT TRAILOR INFORMATION.
RDA10 LDN 3
RDAF EQU *-1
* UJN RDA15 (LI FORMAT)
STD T5
RDA11 LDM EBUF-1,T4
STM EBUF,T5
SOD T4
SOD T5
PJN RDA11 IF MORE DATA TO MOVE
LDM ABCC
ZJN RDA15 IF NO ADJUSTMENT
SOD BY
RDA15 LDD DS CHECK FOR TAPE MARK
LPN 20
LMN 20
NJN RDA17 IF NOT TAPE MARK
STD BY
LDN 1 SET TAPE MARK INDICATION
STM UBWB
LDD HP
LPN 1
NJN RDA17 IF 9 TRACK
LDD MD
SHN 21-6
MJN RDA17 IF 7 TRACK CODED
LDN 0 CLEAR ERROR INDICATION
STM RDAC
RDA17 LDM RDAC LOAD EXIT FLAG
STD T4
LJM RDAX RETURN
RDAC CON 0 EXIT FLAG
SOB SPACE 4,10
** SOB - SET UP AND READ ONE BLOCK.
*
* ENTRY (T9) = POINTER TO BID WINDOW.
*
* EXIT (UBWB) = BID OF READ CORRECTED FOR CLIPPING LEVEL AND
* READ ERRORS.
*
* USES T0.
*
* CALLS FCN, RDA.
SOB2 RJM RDA READ BLOCK
ZJN SOBX IF GOOD READ
SOB3 LDN 4 SET UNUSABLE BID
STM UBWB
SOB SUBR ENTRY/EXIT
LDD MD CHECK IF PARITY CHANGE NEEDED
SHN -5
LMM BIDW,T9
LPN 2
ZJN SOB1 IF NO CHANGE NEEDED
LDD HP
LPN 1
NJN SOB1 IF 9 TRACK
LDN 5 TOGGLE TO OPPOSITE PARITY
RJM FCN
SOB1 LDM BIDW,T9 CHECK IF CHANGE IN CLIPPING LEVEL NEEDED
SHN 21-2
PJN SOB2 IF NO CHANGE NEEDED
LPN 7 SET CLIPPING LEVEL
SHN 6
ADN 6
RJM FCN
RJM RDA READ BLOCK
NJN SOB3 IF ERROR
LDM BIDW,T9 ADD CLIPPING LEVEL TO LAST BID
LPN 74
STD T0
LDM UBWB
SCN 74
LMD T0
STM UBWB
LJM SOBX RETURN
WFC SPACE 4,10
** WFC - WAIT BACKSPACE FUNCTION COMPLETE.
* TIMES OUT APPROXIMATELY 25 FEET OF TAPE.
*
* EXIT (DS) = UNIT STATUS.
*
* USES T2.
*
* CALLS //STW.
WFC2 CON 0 ENTERED VIA *RJM* FROM //STW
SOD T2
NJN WFC1 IF NOT TIMEOUT
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFC1 ATTEMPT 1 MORE WAIT
WFC SUBR ENTRY/EXIT
LDC 2000 SET TIME OUT
STD T2
LDC WFC2 SET RETURN ON TIMEOUT IN //STW
STM //STWC
WFC1 LDN 2 WAIT NOT BUSY
RJM //STW
LDC //ERR RESET ERROR EXIT
STM //STWC
UJN WFCX RETURN
WNB SPACE 4,10
** WNB - WAIT NOT BUSY ON *CMTS* OR *FSC* CONTROLLER.
*
* USES T2, CM - CM+4.
*
* CALLS ERR, FCN, STW.
*
* MACROS SFA.
WNB SUBR ENTRY/EXIT
LDC 2000
STD T2
WNB1 LDN 0
RJM //STW WAIT FOR END OF OPERATION
LPN 2
ZJN WNBX IF UNIT NOT BUSY
SOD T2
ZJN WNB2 IF TIMEOUT
LDN 1
RJM FCN RELEASE UNIT
SFA EST,EO
ADK EQDE
CRD CM
LDD CM+4
LPN 17 GET UNIT NUMBER
LMN 20
RJM FCN CONNECT UNIT
UJN WNB1 CONTINUE WAITING
WNB2 LDN /MTX/WEO
RJM ERR ISSUE ERROR MESSAGE
SPACE 4,10
ADDR TSAD SMER
SPACE 4,10
** BUFFERS FOR READING DURING WRITE RECOVERY.
EBUF BSS 0
ERRNG 7777-EBUF-4-510 BUFFER DOES NOT FIT WITHIN PP
WLP SPACE 4,15
** WLP - LOAD POINT RECOVERY.
*
* ENTRY DETAIL STATUS BUFFERS SET UP.
*
* EXIT (A) .LT. 0 IF NOT *TCF* OR *BFW* ERROR OR
* IF *TCF* OR *BFW* ERROR WAS RECOVERED.
* (A) = 0 IF RETRY ON *BFW* ERROR.
*
* ERROR TO *RET4* IF LOAD POINT PROBLEM.
* (EC) = *TCF* OR *BFW*.
*
* USES T1.
*
* CALLS DTS, *EMM*, FCN, WFC, WNB.
*
* MACROS CALL.
WLP SUBR ENTRY/EXIT
LDD EC
NJN WLP0 IF ERROR
RJM DTS GET DETAILED STATUS
* SAVE CURRENT EQUIPMENT STATUS.
WLP0 LDD DS SAVE GENERAL STATUS
STM WLPA
LDM UBWB SAVE BLOCK ID
STM WLPB
LDN 0 SAVE DETAIL STATUS
STD T1
WLP1 LDM MTDS,T1 MOVE ALL DETAIL STATUS WORDS
STM WLPC,T1
AOD T1 INCREMENT STATUS WORD COUNTER
SBN 16
NJN WLP1 IF NOT ALL STATUS WORDS MOVED
LDM ATUS+2 GET DETAIL STATUS WORD 13
SHN 21-2 POSITION CLEANER ACTIVE BIT
PJN WLP2 IF CLEANER PARKED
LDD EP SET LOAD POINT ERROR FLAG
LPC 6777
ADC 1000
STD EP
LDN /MTX/TCF CLEANER ACTIVE
LJM WLP10 ISSUE ERROR MESSAGE AND UNLOAD TAPE
WLP2 LDM MTDS LOAD DETAIL STATUS WORD 3
LPC 177 MASK ERROR CODES
SBN 7
ZJN WLP8 IF ERROR CODE 7
SBN 3
ZJN WLP8 IF ERROR CODE 12
SBN 1
ZJN WLP8 IF ERROR CODE 13
SBN 3
ZJN WLP8 IF ERROR CODE 16
LDD EC
NJN WLP6 IF NON-LOAD POINT ERROR
LDD EP
SHN 21-11
PJN WLP6 IF NO PREVIOUS LOAD POINT ERROR
LDN 0 CLEAR ERROR CODE
STD EC
LDD EP CLEAR LOAD POINT ERROR FLAG
LPC 6777
STD EP
WLP6 LDD EP CLEAR LOAD POINT RECOVERY FLAG
LPC 7377
STD EP
LCN 0
LJM WLPX RETURN NO LOAD POINT ERROR OR RECOVERED
WLP8 LDD EP SET LOAD POINT ERROR AND RECOVERY FLAGS
LPC 6377
LMC 1400
STD EP
LDD EI
LPN 77 ERROR ITERATION
ZJN WLP11 IF FIRST TRY ON BAD HEADER
LPN 7
ZJN WLP9 IF ITERATION IS A MULTIPLE OF 4
SBN 4
NJN WLP11 IF NOT A MULTIPLE OF 4
WLP9 LDN /MTX/BFW BAD PHASE/GCR HEADERS
WLP10 STD EC
CALL EMM ISSUE MESSAGE TO ERROR LOG
AOD EI
LDC 110 UNLOAD THE TAPE
RJM FCN
LDD HP
SHN 21-6
MJN WLP10.2 IF *CMTS* OR *FSC* CONTROLLER
RJM WFC WAIT END OF OPERATION
WLP10.1 LJM RET4 RETURN ERROR CODE
WLP10.2 RJM WNB WAIT END OF OPERATION
UJN WLP10.1 RETURN ERROR CODE
* REWIND TO LOAD POINT AND ATTEMPT REWRITE.
WLP11 LDN F0010 REWIND TAPE TO LOAD POINT
RJM FCN
RJM WFC
* RESTORE EQUIPMENT ERROR STATUS BEFORE EXIT.
LDN 0
STD T1
LDM WLPA RESTORE GENERAL STATUS
STD DS
LDM WLPB RESTORE BLOCK ID
STM UBWB
WLP12 LDM WLPC,T1 RESTORE ERROR STATUS
STM MTDS,T1
AOD T1 INCREMENT COUNTER
SBN 16
NJN WLP12 IF NOT ALL STATUS WORDS MOVED
* LDN 0
LJM WLPX TRY TO REWRITE FROM LOAD POINT
WLPA CON 0 GENERAL STATUS
WLPB CON 0 BLOCK ID
WLPC BSSZ 16 DETAILED STATUS
SPACE 4,10
** CTAB - CHANNEL TABLE.
CTAB CHTB
TITLE OVERLAYABLE SUBROUTINES.
SPACE 4,10
** NOTE - CODE AFTER THIS POINT WILL BE DESTROYED WHEN
* CALLING THE ERROR PROCESSOR *EMM*. ALL CALLS TO CODE
* LOCATED AFTER THIS POINT MUST BE DONE PRIOR TO CALLING
* *EMM*.
ERROVL
EBW SPACE 4,15
** EBW - EVALUATE BID WINDOW.
*
* ENTRY (BIDW) = BID WINDOW.
*
* EXIT (POSA) = NUMBER OF BLOCKS TO BACKSPACE.
* NUMBER OF BLOCKS TO BACKSPACE = 2 IF
* 1) NO BID PRESENT.
* 2) INVALID HISTORY BLOCK ID ENCOUNTERED.
* 3) .GT. 5 BLOCK ID-S ENCOUNTERED.
* 4) END OF BLOCK ID WINDOW ENCOUNTERED.
* (WEMD) = BID FROM LAST WRITE.
* (T2) = NUMBER OF DIFFERENT BLOCK ID-S.
* (T4) = NUMBER OF SAME BLOCK ID-S.
*
* USES T1 - T4.
EBW SUBR ENTRY/EXIT
LDD CF CHECK IF BID PRESENT
LPC 300
LMC 300
NJN EBW2 IF BID PRESENT
EBW1 LJM EBW9 FORCE BACKSPACE OF TWO BLOCKS
EBW2 LDM UBWB SAVE CURRENT BID
STM WEMD
LDD WP SET UP DIRECTS
STD T1
LDN 0
STD T2
STD T4
LCN 0
STD T3
EBW3 LDD T2 CHECK FOR MAX COUNT OF 5
ADD T4
SBN 5
PJN EBW1 IF MAX COUNT REACHED, FORCE SET 2
LDM BIDW,T1
LMN 4
ZJN EBW10 IF INVALID, STOP SCAN
LPN 1
ZJN EBW5 IF NOT TAPE MARK
AOD T2 FORCE BACKSPACE OVER TAPE MARK
EBW4 STM POSA SET BACKSPACE COUNT
LJM EBWX RETURN
EBW5 LDM BIDW,T1
SBD T3
NJN EBW6 IF NOT SAME
AOD T4 INCREMENT SAME BID COUNT
UJN EBW7 CONTINUE BID SCAN
EBW6 AOD T2 INCREMENT DIFFERENT COUNT
SBN 2
MJN EBW7 IF NOT TWO DIFFERENT BID-S
LDD T2
ADD T4
UJN EBW4 STORE BACKSPACE COUNT AND EXIT
EBW7 LDM BIDW,T1
STD T3 SAVE LAST BID
SOD T1 REDUCE POINTER
PJN EBW8 IF NO OVERFLOW
LPN 7
STD T1
EBW8 LMD WP CHECK FOR END OF WINDOW
NJN EBW11 IF NOT END OF WINDOW
EBW9 LDN 2 FORCE BACKSPACE OF TWO BLOCKS
UJN EBW4 STORE BACKSPACE COUNT AND EXIT
EBW10 LDD T2
ADD T4
ZJN EBW9 IF END OF WINDOW
UJN EBW4 STORE BACKSPACE COUNT AND EXIT
EBW11 LJM EBW3 CHECK NEXT BID
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS DME.
PRS SUBR ENTRY/EXIT
LDD HP
LPN 20
NJN PRS1 IF ATS-TYPE CONTROLLER
LDM PRSF DISABLE LOAD POINT RECOVERY
STM WEML
UJN PRSX EXIT PRESET
* MODIFY INSTRUCTIONS FOR ATS-TYPE CONTROLLER.
PRS1 LDM PRSA
STM ABCA
LDC LPNI-LDNI
RAM ABCB
LDC 5000 FUNCTION CODE FOR *LDM*
STM BTWA
LCN 0
STM WEMA
STM WEMB
STM RDAB
LDC UJNI-PJNI
RAM RDAA
LDC LDMI
STM WEMC
LDD FN
LMN /MTX/WTF
NJP PRS2 IF NOT WRITE FUNCTION
LDD FM
SHN -6
LMN /MTX/TFLI
NJP PRS2 IF NOT LI FORMAT
* LDN 0
STM ADDR NO INSTRUCTION MODIFICATION
STM CIDB NO BLOCK LENGTH CHECK
ISTORE CIDA,(UJN CID1)
LDC /WLI/WLIA
STM WEMK DROP OUT FLAG
STM WEMM
LDC /WLI/CNW
STM WEMG+1 SET ADDRESS OF *CNW*
LDC /WLI/WRTK
STM EOTA END OF TAPE EXIT ADDRESS
SOM RDAD LOCATION FOR PREFIX
LDC LDCI
STM RDAE
ISTORE RDAF,(UJN RDA15)
PRS2 LJM PRSX EXIT PRESET
PRSA BSS 0
LOC ABCA
UJN ABC2 ADJUST BUFFER LENGTH
LOC *O
PRSE BSS 0 BACKSPACE DELAYS FOR FSC, CMTS OR ISMT
LOC 0
CON LDNI+27 75 IPS UNIT (FSC)
CON LDNI+17 125 IPS UNIT (FSC)
CON LDNI+10 200 IPS UNIT (FSC OR CMTS)
CON LDNI+34 25 IPS UNIT (ISMT)
LOC *O
PRSF BSS 0
LOC WEML
UJN WEM2.1 DISABLE LOAD POINT RECOVERY
LOC *O
OVERLAY (CTS WRITE ERROR PROCESSOR.),(BUFB+10),P,CWP
CWP SPACE 4,15
** CWP - CTS WRITE ERROR PROCESSOR.
*
* EXIT TO CALLER IF EOT, RECOVERED ERROR OR ERROR PROCESSING
* INHIBITED.
* TO *WRA* IF ERROR.
* (CN+3, CN+4) = OUT POINTER IF WRITE.
*
* USES CN - CN+4.
*
* CALLS /WLI/CNW, /WRITE/CNW, *CEM*, EOT, MCH, PRS, WRA.
*
* MACROS CALL.
ENTRY CWP
CWP SUBR ENTRY/EXIT
* THE FOLLOWING CODE IS OVERLAYED BY THE OUT POINTER.
CWPA EQU *
CWPB EQU *+5
LDM //LOV SAVE CALLERS EXIT ADDRESS
STM CWP
LDD MA SAVE OUT POINTER
CWD CN
CRM CWPA,ON
LDC CTAB MODIFY CHANNELS
RJM MCH
RJM PRS PRESET
LDD DS
LPN 1
NJN CWP1 IF READY
LDN /MTX/RDR
STD EC
CWP1 LDD FN LOAD MAGNET FUNCTION CODE
LMN /MTX/WLA
NJN CWP2 IF NOT WRITE LABELS
LDC RET2 FORCE REQUEUE AFTER WRITE IS GOOD
STM /WLA/WLAG
CWP2 LDM /WRITE/WTFE CHECK IF EOF REQUEST DETECTED AHEAD
CWPC EQU *-1
* LDM /WLI/WLIA (LI FORMAT)
LMN 1
NJN CWP3 IF NOT EOF REQUEST
LDD MD
SCN 14
STD MD
CWP3 LDD EC
NJN CWP4 IF NOT RECOVERED ERROR
CALL CEM ISSUE RECOVERED MESSAGE
LDD FN
LMN /MTX/WLA
NJN CWP6 IF NOT WRITE LABELS
STD EP CLEAR ERROR PARAMETERS
STD EI CLEAR RETRY COUNT
UJN CWP6 CLEAR ERROR CODE
CWP4 LMN /MTX/STE
NJN CWP5 IF NOT STATUS ERROR
LDD DS
SHN 21-3
PJN CWP5 IF NOT EOT
SHN 21-13-21+3+22
MJN CWP5 IF OTHER ERRORS
RJM EOT
UJN CWP6 CLEAR ERROR CODE
CWP5 LDD SP
LPN 4
NJN CWP6 IF ERROR PROCESSING INHIBITED
RJM WRA WRITE RECOVERY ALGORITHM (NO RETURN)
CWP6 LDN 0 CLEAR ERROR CODE
STD EC
LDD FN
LMN /MTX/WLA
ZJN CWP8 IF WRITE LABELS
LDN 0 CLEAR ERROR PARAMATERS
STD EP
STD EI
LDD MA RESTORE OUT POINTER
CWM CWPA,ON
SBN 1
CRD CN
LDM /WRITE/WTFE CHECK IF EOF REQUEST DETECTED AHEAD
CWPD EQU *-1
* LDM /WLI/WLIA (LI FORMAT)
LMN 1
NJN CWP7 IF NOT EOF REQUEST
LDN 14 SET EOF STATUS
RAD MD
UJN CWP8 RESTORE MA BACK TO OLD OUT POINTER
CWP7 RJM /WRITE/CNW
CWPE EQU *-1
* RJM /WLI/CNW (LI FORMAT)
CWP8 LJM CWPX RETURN
EOT SPACE 4,10
** EOT - END OF TAPE PROCESSOR.
EOT SUBR ENTRY/EXIT
LDC EOT1 SET TO RETURN HERE AFTER POINTER UPDATE
STM /WRITE/WRTK
EOTA EQU *-1
* STM /WLI/WRTK (LI FORMAT)
UJN EOTX RETURN
EOT1 LDN /MTX/BEI RETURN END OF TAPE
LJM RET3 RETURN ERROR CODE
POS SPACE 4,15
** POS - POSITION TAPE.
* THIS ROUTINE USES THE LOCATE BLOCK COMMAND TO POSITION
* THE TAPE TO THE EXPECTED BLOCK POSITION.
*
* ENTRY (BL, BL+1) = NOS BLOCK POSITION.
* (WP, EP+1) = PHYSICAL BLOCK ID WHEN (BL,BL+1) = 0.
*
* EXIT (A) = 0 IF NO ERROR.
* TO *ERR* IF CHANNEL MALFUNCTION.
*
* USES T3.
*
* CALLS /PRESET/GPS, /PRESET/ICF, /PRESET/RBI.
POS SUBR ENTRY/EXIT
RJM /PRESET/RBI READ BLOCK ID
LDM BIDW
STM POSA
SBN 20
ZJN POS1 IF FIRST SEGMENT
STM POSA SET PHYSICAL REFERENCE BLOCK ID
POS1 LDD BL+1
SHN 4
ADD EP+1
STM POSA+2 MOVE BLOCK NUMBER TO PARAMETERS
SHN -14
STM POSA+1
LDD BL
SHN 4
ADD WP
RAM POSA+1
LDN F0016 LOCATE BLOCK
RJM /PRESET/ICF ISSUE FUNCTION
ACN CH
LDN 3
OAM POSA,CH OUTPUT THE 3 PARAMETER WORDS
STD T3 WORDS NOT TRANSFERRED
FJM *,CH WAIT FOR DATA TO BE TAKEN
POS2 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS GET AND PROCESS GENERAL STATUS
MJN POS2 IF COMMAND RETRY
SHN 21-13
MJN POS3 IF ERROR
LDD T3
ZJN POS4 IF ALL WORDS TRANSFERRED
LDN /MTX/CMF CHANNEL MALFUNCTION
RJM ERR REPORT ERROR (NO RETURN)
POS3 LDN /MTX/STE STATUS ERROR
STD EC
POS4 LJM POSX RETURN
POSA DATA 0 LOCATE BLOCK PARAMETERS
DATA 0 UPPER 12 BITS OF BLOCK NUMBER
DATA 0 8/LOWER BITS OF BLOCK NUMBER / 4 UNUSED
WFC SPACE 4,10
** WFC - WAIT FOR COMPLETION.
*
* CALLS /PRESET/GPS.
WFC SUBR ENTRY/EXIT
WFC1 LDN 0 WAIT FOR END OF OPERATION
RJM /PRESET/GPS
MJN WFC1 IF COMMAND RETRY
UJN WFCX RETURN
WRA SPACE 4,20
** WRA - WRITE RECOVERY ALGORITHM.
*
* ENTRY (EI) = RETRY COUNT.
*
* EXIT TO *RET2* TO REQUEUE.
* TO *RET4* TO RETURN A FATAL ERROR.
* TO *ERR* IF MICROCODE LOAD FAILED.
* (EI) = (EI) + 1.
*
* USES CN, CN+1, EC, HP, MD.
*
* CALLS *CEM*, /PRESET/ICF, POS, /PRESET/RCU, WFC, *0CT*.
*
* MACROS CALL, EXECUTE.
* THIS ROUTINE DOES ERROR RECOVERY AS FOLLOWS -
*
* IF (EI) = 0 LOG ERROR, POSITION TAPE, AND REQUEUE.
* IF (EI) = 1 LOG ERROR, LOAD CCC MICROCODE, POSITION TAPE,
* AND REQUEUE.
* IF (EI) = 2 LOG UNRECOVERED ERROR, POSITION TAPE, RETURN
* FATAL CODE.
*
WRA CON 0 ENTRY
LDC LDNI+F0002
STM /PRESET/GPSC SEND CONTINUE IF COMMAND RETRY
WRA1 CALL CEM LOG ERROR
LDC LDNI
STM //PNRC FORCE DROP OUT
AOD EI INCREMENT RETRY COUNT
SBN 1
ZJP WRA4 IF FIRST ERROR
SBN 1
NJP WRA5 IF RETRIES FAILED
CHTE *
LDN CH SET CHANNEL NUMBER
STD CN
LDC ERLB SET BUFFER ADDRESS
STD CN+1
EXECUTE 0CT,ERLA+5 LOAD CTS/CCC MICROCODE
LDD CN
ZJN WRA3 IF MICROCODE LOADED
STD EC
SHN 0-13
PJN WRA2 IF ERROR CODE ALREADY SAVED
LDN /MTX/CMF
STD EC
WRA2 LDM CN+1 SAVE FUNCTION
STM /PRESET/ICFA
RJM ERR REPORT ERROR (NO RETURN)
WRA3 RJM /PRESET/RCU RECONNECT UNIT
WRA4 RJM POS POSITION TAPE
NJP WRA1 IF LOCATE BLOCK FAILED
STD EC CLEAR ERROR CODE
LDD HP CLEAR EOR FLAG
LPC 5777
STD HP
LDD MD CLEAR EOR/EOF THIS OPERATION FLAG
LPC 7377
STD MD
LJM RET2 REQUEUE THE REQUEST
WRA5 LDD FN
LMN /MTX/WLA
NJN WRA7 IF NOT WRITE LABELS
LDD EC
LMN /MTX/STE
NJN WRA7 IF NOT STATUS ERROR
LDM CTGS
LPC 177
SBN CE007
ZJN WRA6 IF LOAD POINT ERROR
SBN CE012-CE007
NJN WRA7 IF NOT LOAD POINT ERROR
WRA6 LDN /MTX/BFW LOAD POINT ERROR
STD EC
CALL CEM LOG THE ERROR
LDC F0110 UNLOAD TAPE
RJM /PRESET/ICF ISSUE CTS FUNCTION
RJM WFC WAIT FOR COMPLETION
UJN WRA8 RETURN FATAL ERROR
WRA7 LDD FN
LMN /MTX/WLA
NJN WRA8 IF NOT WRITE LABELS
LDD UP
SCN 30 CLEAR WRITE OPERATION AND EOR/EOF FLAGS
STD UP
WRA8 LJM RET4 RETURN FATAL ERROR
SPACE 4,10
ERRNG ERLA-* CODE OVERFLOWS HELPER OVERLAY
ERRPL ERLA+5+ZCTL-ERLB *0CT* OVERFLOWS INTO BUFFER
SPACE 4,10
** CTAB - CHANNEL TABLE.
CTAB CHTB
PRS SPACE 4,10
** PRS - PRESET.
PRS SUBR ENTRY/EXIT
LDD FN
LMN /MTX/WTF
NJN PRSX IF NOT WRITE FUNCTION
LDD FM
SHN -6
LMN /MTX/TFLI
NJN PRSX IF NOT LI FORMAT
LDC /WLI/WLIA
STM CWPC DROP OUT FLAG
STM CWPD
LDC /WLI/CNW
STM CWPE SET ADDRESS OF *CNW*
LDC /WLI/WRTK
STM EOTA END OF TAPE EXIT ADDRESS
LJM PRSX EXIT PRESET
SPACE 4,10
OVERFLOW BUFB+10,/WLA/WTMX OVERFLOW INTO CALLING ROUTINE
OVERLAY (CTS ERPA CODES.),(ERLB+5),P,ERP
** ERP - ERROR RECOVERY PROCEDURE ACTION TEXT MESSAGES.
ENTRY ERP
ERP SUBR ENTRY/EXIT
UJN ERPX RETURN
* THE FOLLOWING TABLE CONTAINS POINTERS TO TEXT MESSAGES
* FOR ERPA CODES 21 THROUGH 4C.
ERPA CON ERP21
CON ERP22
CON ERP23
CON ERP24
CON ERP23
CON ERP23
CON ERP27
CON ERP28
CON 0,0,0
CON ERP2C
CON 0
CON ERP2E
CON 0
CON ERP30
CON ERP31
CON ERP32
CON ERP33
CON ERP34
CON ERP35
CON 0
CON ERP37
CON ERP38
CON ERP39
CON ERP3A
CON ERP3B
CON 0,0,0,0,0
CON ERP41
CON ERP42
CON ERP3A
CON ERP44
CON ERP45
CON ERP46
CON ERP47
CON 0
CON ERP49
CON ERP4A
CON 0
CON ERP4C
* THE FOLLOWING ARE ERPA TEXT MESSAGES.
ERP21 DATA C*DATA STREAMING ERROR.*
ERP22 DATA C*PATH EQUIPMENT CHECK.*
ERP23 DATA C*DATA CHECK.*
ERP24 DATA C*LOAD DISPLAY CHECK.*
ERP27 DATA C*COMMAND REJECT.*
ERP28 DATA C*WRITE ID CHECK.*
ERP2C DATA C*CU EQUIPMENT CHECK.*
ERP2E DATA C*NOT CAPABLE.*
ERP30 DATA C*FILE PROTECTED.*
ERP31 DATA C*TAPE VOID.*
ERP32 DATA C*TENSION LOSS.*
ERP33 DATA C*LOAD FAILURE.*
ERP34 DATA C*UNLOAD FAILURE.*
ERP35 DATA C*DRIVE EQUIPMENT CHECK.*
ERP37 DATA C*TAPE LENGTH ERROR.*
ERP38 DATA C*PHYSICAL END OF TAPE.*
ERP39 DATA C*BACKWARD AT BOT.*
ERP3A DATA C*DRIVE NOT READY.*
ERP3B DATA C*UNLOAD ERROR.*
ERP41 DATA C*BLOCK ID SEQUENCE ERROR.*
ERP42 DATA C*DEGRADED MODE.*
ERP44 DATA C*LOCATE BLOCK UNSUCCESSFUL.*
ERP45 DATA C*DRIVE ASSIGNED ELSEWHERE*
ERP46 DATA C*DRIVE OFFLINE.*
ERP47 DATA C*CU ERROR*
ERP49 DATA C*BUS OUT PARITY*
ERP4A DATA C*CU ERP FAILED.*
ERP4C DATA C*CU CHECK ONE ERROR*
ERRNG 1*473+ERLB+5-*
QUAL 1LT
.QNAM MICRO 1,, 1LT
.IM SET 0
TTL 1MT/1LT - LONG BLOCK PROCESSOR.
TITLE
IDENT 1LT,LTP LONG BLOCK HELPER PROCESSOR.
*COMMENT 1MT - LONG BLOCK HELPER PROCESSOR.
SPACE 4,10
** *1LT* CALL FORMAT.
*
* INPUT REGISTER -
*
*T, 18/ 1LT,6/ CP,6/ HP,6/ FUNC,2/ CF,10/ CH,12/ PPIA
*
* MESSAGE BUFFER + 1 (*1MT*) -
*
*T, 12/ -0,24/ FIRST,24/ LIMIT
*
* CP CONTROL POINT NUMBER.
* HP UNIT HARDWARE PARAMETERS (UPPER 6 BITS ONLY).
* FUNC FUNCTION (0 = READ, 1 = WRITE, 2 = WRITE *LI* FORMAT).
* CF MTS/ATS CONTROLLER FLAG.
* CH TAPE CHANNEL.
* PPIA *1MT* PP INPUT REGISTER ADDRESS.
* FIRST *FIRST* POINTER FROM FET.
* LIMIT *LIMIT* POINTER FROM FET.
SPACE 4,10
** *1LT* REQUEST/REPLY FORMAT.
*
* REQUESTS AND REPLYS ARE PASSED IN THE MESSAGE BUFFER OF *1LT*.
*
* REQUEST (*1MT*) -
*
*T, 12/ CC,12/ WC,12/ OV,24/ PT
*
* CC COMMAND CODE (1 = START OF BLOCK, 3 = READ SKIP).
* WC NUMBER OF WORDS IN LAST CHUNK (READ).
* WC NUMBER OF BYTES IN LAST CHUNK (WRITE).
* OV OVERFLOW CHUNK COUNT.
* PT POINTER TO START TRANSFER AT.
*
* REPLY (*1LT*) -
*
*T, 12/ CR,12/ BT,12/ WT,24/ 0
*
* CR COMMAND RESPONSE CODE (0 = ACKNOWLEDGE, 2 = COMPLETE).
* BT BYTES TRANSFERRED.
* WT WORDS TRANSFERRED.
SPACE 4,15
** *1MT*/*1LT* INTERLOCK (CYBER 180 ONLY).
*
* FOR CYBER 180 MAINFRAMES, AN INTERLOCK IS MAINTAINED
* IN MESSAGE BUFFER + 1 (*1LT*). THIS INTERLOCK IS USED
* TOGETHER WITH THE CHANNEL FLAG TO ENSURE THAT CHUNKS
* ARE SEQUENCED CORRECTLY.
*
*T, 12/ IN,48/ RESERVED
*
* IN INTERLOCK
* (0 = *1MT* MAY TRY TO SET THE CHANNEL FLAG,
* 1 = *1LT* MAY TRY TO SET THE CHANNEL FLAG).
SPACE 4,10
** DIRECT CELL DEFINITIONS.
LOC 20
CC BSS 1 COMMAND CODE
WC BSS 1 NUMBER WORDS IN LAST CHUNK (READ)
* NUMBER BYTES IN LAST CHUNK (WRITE)
OV BSS 1 OVERFLOW CHUNK COUNT
PT BSS 2 POINTER TO START TRANSFER AT
CR BSS 1 COMMAND RESPONSE CODE
BT BSS 1 BYTES TRANSFERRED
WT BSS 1 WORDS TRANSFERRED
ZR BSS 5 (5 BYTES OF ZEROES)
BI BSS 1 BYTES TO INPUT/OUTPUT
RS BSS 2 AMOUNT OF SPACE IN BUFFER - READ SKIP
LOC *O
LTP SPACE 4,10
** LTP - LONG BLOCK PROCESSOR.
*
* ENTRY (IR+2) = 6/X, 6/Y WHERE
* X = UPPER 6 BITS OF (HP).
* Y = 2 IF WRITE LI FORMAT.
* Y = 1 IF WRITE AND NOT LI FORMAT.
* Y = 0 IF READ.
*
* CALLS PRS.
*
* MACROS MONITOR.
ORG PPFW
LTP RJM PRS PRESET
LDD IR+2
LPN 77
NJN LTP1 IF WRITE
LJM RED PROCESS READ
LTP1 SBN 2
ZJN LTP2 IF WRITE LI FORMAT
LDC UJNI+WRT8.1-WRTE
STM WRTE DO NOT ADJUST BYTE COUNT
LTP2 LJM WRT PROCESS WRITE
DPP MONITOR DPPM DROP PPU
LJM PPR EXIT TO PP RESIDENT
RED SPACE 4,10
** RED - READ DATA FROM TAPE.
* THIS ROUTINE TRANSFERS CHUNKS 2, 4, 6, ... OF A LONG BLOCK.
* IT EXITS TO *WSB* AND RETURNS WITH TRANSFER INFORMATION
* IN *OV* AND *WC* IF IT IS NEEDED TO HELP TRANSFER A BLOCK.
*
* CALLS ADP, WDA, WSB.
RED RJM WSB WAIT FOR *1MT* TO START BLOCK
* INSURE *1MT* GETS FIRST PORTION OF DATA.
LDC UJNI+RED10-REDE SET START OF BLOCK
* LDC NJNI+.RED8-.REDB (ATS NON-CYBER 180)
* LDC NJNI+RED8.-REDB. (CYBER 180 IOU)
REDA EQU *-1
STM REDE
* STM .REDB (ATS NON-CYBER 180)
* STM REDB. (CYBER 180 IOU)
REDF EQU *-1
RED1 IJM RED12,CH IF *1MT* COMPLETE
* UJN RED3 (ATS NON-CYBER 180)
* UJN RED3 (CYBER 180 IOU)
REDB EQU *-2
FJM RED2,CH IF DATA TRANSFER STARTED
EJM RED1,CH IF *1MT* NOT STARTED
RED2 LDN 40 DELAY TO INSURE *1MT* INTO BLOCK TRANSFER
* LDN 77 (2X PPU SPEED)
REDC EQU *-1
SBN 1
NJN *-1
RED3 LCN 2
RAD OV
PJN RED5 IF INPUT FULL BLOCK
ADN 1
PJN RED4 IF NOT DONE
LJM RED12 SEND RESPONSE TO *1MT*
RED4 LDC NJNI+RED10-REDE
* LDC UJNI+.RED8-.REDB (ATS CONTROLLER)
* LDC UJNI+RED8.-REDB. (CYBER 180)
REDD EQU *-1
STM REDE
* STM .REDB (ATS NON-CYBER 180)
* STM REDB. (CYBER 180)
REDG EQU *-1
LDD WC
SHN 2
ADD WC
ADN 1
UJN RED6 SET UP TO INPUT DATA
ERRNZ RED6-.RED6 IF TAGS OUT OF SYNC
RED5 LDC LBBY
* THE FOLLOWING CODE IS OVERLAID BY THE ATS INPUT LOOP IF ATS
* ON A NON-CYBER 180, OR BY THE IOU INPUT LOOP ON A CYBER 180.
.REDA EQU * BEGINNING OF OVERLAID CODE
RED6 STD BI
STD T1 PRESET BYTES REMAINING
RED7 IJM RED10,CH IF *1MT* FINISHED INPUT
RED8 EJM RED7,CH IF *1MT* TAKING DATA
EJM RED7,CH IF *1MT* TAKING DATA
EJM RED7,CH IF *1MT* TAKING DATA
EJM RED7,CH IF *1MT* TAKING DATA
FJM RED9,CH IF TIME FOR *1LT* TO TAKE DATA
UJN RED8 LOOP
RED9 IAM BUFB,CH INPUT THIS PP,S DATA
STD T1
UJN RED10 NOT LAST PARTIAL BLOCK
* NJN RED10 (IF NOT BLOCK TOO LARGE)
REDE EQU *-1
DCN CH+40 TERMINATE TRANSFER
.REDAL EQU *-.REDA LENGTH OF OVERLAID AREA
RED10 LDD BI CALCULATE BYTES INPUT
SBD T1
STD BT
ADN 4
STD T2
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
STD WT WORDS TO TRANSFER
LDC /MTX/LBWD ADVANCE POINTER OVER DATA *1MT* PUT IN
RJM ADP
LDD WT ADVANCE POINTER FOR THIS TRANSFER
RJM ADP
RJM WDA WRITE DATA
LDD BT
LMC LBBY
NJN RED12 IF NOT FULL BLOCK
LJM RED3 LOOP
RED11 LDN 0 SET NO DATA READ
STD BT
STD WT
RED12 LDD MA SEND RESPONSE TO *1MT*
CWD CR
LJM RED WAIT FOR *1MT* TO INDICATE WHAT TO DO
WRT SPACE 4,10
** WRT - WRITE TAPE.
* THIS ROUTINE TRANSFERS CHUNKS 2, 4, 6, ... OF THE BLOCK.
* IT EXITS TO *WSB* AND RETURNS WITH TRANSFER INFORMATION
* IN *OV* AND *WC* IF IT IS NEEDED TO HELP TRANSFER A BLOCK.
*
* CALLS ADP, OPA, OPD, OPE, OPI, OPL, RDA, WSB.
WRT RJM WSB WAIT FOR *1MT* START INDICATION
LDD WC SET BYTES IN LAST BLOCK
STD BI
ADN 4
STD T2
SHN 1 13*BYTES
ADD T2
SHN 2
ADD T2
SHN 14 (-6) (13*BYTES)/64
STD T0
SHN 6+2 4*13*BYTES (52*BYTES)
SBD T2 51*BYTES
ADD T0 (51*BYTES)+((13*BYTES)/64)
SHN -8D WORDS = ((51*BYTES)+((13*BYTES)/64))/256
STD WC
LDN 0
WRT1 IJM WRT9,CH IF ERROR
EJM WRT1,CH IF DATA TRANSFER NOT STARTED
* UJN WRT2 (CYBER 180)
WRTA EQU *-2
* PREPARE TO OUTPUT NEXT CHUNK.
WRT2 LDC /MTX/LBWD SKIP CHUNK WRITTEN BY *1MT*
RJM ADP
LDD OV
ZJN WRT5 IF 1LT WILL FINISH
LCN 2 DECREMENT CHUNK COUNT
RAD OV
NJN WRT3 IF NOT EVEN MULTIPLE OR NOT DONE
LDD BI
NJN WRT6 IF NOT FULL CHUNK
LJM WRT7 FULL CHUNK WITH TERMINATION
WRT3 SBN 1
PJN WRT6 IF NOT COMPLETE
ADN 1
MJN WRT4 IF POSSIBLE PARTIAL BLOCK
LDD BI
ZJN WRT7 IF TERMINATION BLOCK
UJN WRT6 SET UP POINTERS
WRT4 LDD WC
NJN WRT8 IF *1LT* WILL FINISH WRITE
WRT5 LJM WRT9 SEND RESPONSE TO *1MT*
WRT6 LDC /MTX/LBWD SET UP POINTERS
RJM ADP
RJM RDA READ DATA
LDC LBBY OUTPUT DATA
STD BT
RJM OPD OUTPUT DATA
* RJM OPA (ATS NON-CYBER 180)
* RJM OPI (CYBER 180)
WRTB EQU *-1
NJN WRT9 IF TRANSFER INCOMPLETE
LJM WRT2 SET UP TO OUTPUT NEXT CHUNK
WRT7 LDC LBBY
STD BI
LDC /MTX/LBWD
WRT8 RJM ADP
RJM RDA READ DATA
LDD BI
LPC 7776 WRITE EVEN BYTE COUNT
WRTE EQU *-2
* UJN WRT8.1 (NOT LI FORMAT)
ADN 1
WRT8.1 RJM OPD OUTPUT DATA
* RJM OPL (ATS NON-CYBER 180 - OUTPUT LAST CHUNK)
* RJM OPE (CYBER 180 - OUTPUT LAST CHUNK
WRTC EQU *-1
FJM *,CH
NJN WRT9 IF INCOMPLETE TRANSFER
UJN WRT8.2
WRTD EQU *-1
* DELAY 10 MICROSECONDS TO PREVENT A HARDWARE ERROR IN THE
* CCC. THE DISCONNECT WOULD SOMETIMES CAUSE THE LAST BYTE TO
* BE LOST.
* LDN 20 (CTS)
SBN 1
NJN *-1
WRT8.2 DCN CH+40
WRT9 STD BT SAVE BYTES REMAINING
LDD MA SEND RESPONSE TO *1MT*
CWD CR
LJM WRT LOOP FOR NEXT BLOCK
TITLE SUBROUTINES.
ADP SPACE 4,10
** ADP - ADVANCE POINTER.
*
* ENTRY (PT - PT+1) = IN POINTER.
* (A) = WORDS TO INCREMENT IN POINTER BY.
*
* EXIT (T4 - T5) = STARTING IN POINTER.
* (PT - PT+1) = UPDATED IN POINTER.
* (T6) = FIRST PART WORD COUNT.
*
* MACROS SADT.
ADP SUBR ENTRY/EXIT
STD T6
ADPA UJN ADP2 NOT READ SKIP
* PSN (READ SKIP)
LDD RS
SHN 14
LMD RS+1
SBD T6
PJN ADP1 IF STILL ROOM FOR ENTIRE BLOCK
RAD T6 ADJUST WORD COUNT
LDN 0 SET BUFFER FULL
ADP1 STD RS+1
SHN -14
STD RS
ADP2 LDD PT SAVE IN
STD T4
LDD PT+1
STD T5
LDN 0 PRESET SECOND PART WORD COUNT
STD T7
LDD T6 UPDATE IN
RAD PT+1
SHN -14
RAD PT
SHN 14
LMD PT+1
SADT .LM,C
ADC -* (-LIMIT)
MJN ADPX IF NO WRAP AROUND
STD T7 SET SECOND PART WORD COUNT
SADT .FT
ADC * (FIRST)
STD PT+1
SHN -14
STD PT
LDD T6 RESET FIRST PART WORD COUNT
SBD T7
STD T6
LJM ADPX RETURN
CPD SPACE 4,10
** CPD - CHECK PP DROP OUT.
*
* ENTRY (IR+4) = *1MT* INPUT REGISTER ADDRESS.
*
* EXIT EXIT TO DPP IF *1MT* GONE.
*
* USES CM - CM+4.
CPD SUBR ENTRY/EXIT
CPDA LDC 0 (*ACPP* ADDRESS)
CRD CM GET CP ASSIGNMENT
LDD CM+2
LMD CP
NJN CPD1 IF NOT CORRECT CP ASSIGNMENT
LDD IR+4 GET INPUT REGISTER
CRD CM
LDD CM+1
SCN 77
SHN 6
LMD CM
LMC 3RT1M
NJN CPD1 IF NOT *1MT*
LDD CM+3
LMD IR+3
LPN 37
ZJN CPDX IF CORRECT CHANNEL
CPD1 LJM DPP DROP PPU
INM SPACE 4,10
** INM - INSTRUCTION MODIFICATION.
*
* ENTRY (A) = FWA OF INSTRUCTION MODIFICATION LIST.
*
* NOTE FET ADDRESS AND BLOCK SIZE ARE NOT AVAILABLE IN *1LT*.
*
* USES SC, CM+4, CM+5, T2 - CM+3.
INM SUBR ENTRY/EXIT
ZJN INMX IF NO MODIFICATIONS
STD SC
INMA LDC * SET FIRST
STD .FT+1
SHN -14
STD .FT
INMB LDC * SET LIMIT
STD .LM+1
SHN -14
STD .LM
SBD .FT
SHN 14
ADD .LM+1
SBD .FT+1
STD .LF+1
SHN -14
STD .LF
INM1 LDI SC
ZJN INMX IF END OF LIST
SHN 21-0
STD T1 SAVE INSTRUCTION ADDRESS
SHN -21
SHN 1 COMPLEMENT FLAG * 2
LMC UJNI+3
STM INMC
LDI T1 PRESERVE INSTRUCTION OP CODE
SCN 77
STI T1
LDM 1,SC EXTRACT DIRECT CELL TO REFERENCE
SHN 14
STD CM+4
SCN 77 CLEAR DIRECT CELL ADDRESS
SHN 3 EXTRACT BIAS
STD CM+5
SCN 7 CLEAR BIAS
ADI CM+4 ADD UPPER PORTION OF VALUE
PJN INM2 IF RELATIVE VALUE DESIRED
SHN 6
SCN 40 CLEAR ABSOLUTE FLAG
ADD RA
SHN 14
INM2 SHN 14
ADM 1,CM+4 ADD LOWER PORTION OF VALUE
ADD CM+5 ADD BIAS
* NOTE CODE SHOULD NOT BE ADDED IN NEXT THREE LINES.
INMC UJN 3 COMPLEMENT NOT NEEDED
* UJN 1 COMPLEMENT NEEDED
LMC -0
STM 1,T1 MODIFY INSTRUCTION
SHN -14
RAI T1
LDN 2 INCREMENT TO NEXT ITEM IN LIST
RAD SC
LJM INM1 LOOP
ITS SPACE 4,10
** ITS - INDICATE *1LT* TRANSFER STARTED.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
ITS SUBR ENTRY/EXIT
STD T0 SAVE BYTE COUNT
LDD MA INDICATE *1LT* TRANSFER STARTED
ADN 1
CWD ZR
LDD T0 RESTORE (A)
UJN ITSX RETURN
OPA SPACE 4,10
** OPA - OUTPUT DATA TO ATS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
OPA SUBR ENTRY/EXIT
AJM *,CH WAIT FOR *1MT* TO OUTPUT CHUNK
PSN DELAY TO ALLOW *1MT* TO REACTIVE CHANNEL
PSN
OAM BUFB,CH OUTPUT DATA
FJM *,CH
DCN CH+40 INDICATE TO *1MT* TO RESUME OUTPUT
NJN OPAX IF INCOMPLETE TRANSFER
ACN CH
UJN OPAX RETURN
OPD SPACE 4,10
** OPD - OUTPUT DATA TO MTS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
OPD2 FJM OPD1,CH IF *1MT* OUTPUTTING DATA
FJM OPD1,CH IF *1MT* OUTPUTTING DATA
FJM OPD1,CH IF *1MT* OUTPUTTING DATA
OAM BUFB,CH OUTPUT DATA
OPD SUBR ENTRY/EXIT
OPD1 FJM OPD1,CH IF *1MT* OUTPUTTING DATA
FJM OPD1,CH IF *1MT* OUTPUTTING DATA
UJN OPD2
OPI SPACE 4,10
** OPI - OUTPUT DATA FROM CYBER 180 IOU.
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
*
* CALLS ITS, WTS.
OPI SUBR ENTRY/EXIT
RJM WTS WAIT FOR *1MT* TRANSFER TO START
OPI1 IJM OPIX,CH IF *1MT* OUTPUT SHORT CHUNK
SCF OPI1,CH WAIT FOR *1MT* TO CLEAR CHANNEL FLAG
RJM ITS INDICATE *1LT* TRANSFER STARTED
OAM BUFB,CH
NJN OPIX IF INCOMPLETE TRANSFER
CCF *,CH SIGNAL *1MT* TO START OUTPUT
UJN OPIX RETURN
OPE SPACE 4,10
** OPE - OUTPUT ENDING CHUNK FROM CYBER 180 IOU.
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
*
* CALLS ITS, WTS.
OPE SUBR ENTRY/EXIT
RJM WTS WAIT FOR *1MT* TRANSFER TO START
OPE1 IJM OPE2,CH IF *1MT* OUTPUT SHORT CHUNK
SCF OPE1,CH WAIT FOR *1MT* TO CLEAR CHANNEL FLAG
RJM ITS INDICATE *1LT* TRANSFER STARTED
OAM BUFB,CH
OPE2 CCF *,CH CLEAR CHANNEL FLAG
UJN OPEX RETURN
OPL SPACE 4,10
** OPL - OUTPUT LAST PARTIAL CHUNK TO ATS UNIT (NON-CYBER 180).
*
* ENTRY (A) = NUMBER OF BYTES TO OUTPUT.
*
* EXIT (A) = BYTES REMAINING IF INCOMPLETE TRANSFER.
OPL SUBR ENTRY/EXIT
AJM *,CH WAIT FOR *1MT* TO OUTPUT CHUNK
PSN DELAY TO ALLOW *1MT* TO REACTIVATE CHANNEL
PSN
OAM BUFB,CH OUTPUT LAST PARTIAL CHUNK
UJN OPLX RETURN
RDA SPACE 4,10
** RDA - READ DATA FROM CENTRAL.
*
* ENTRY (T4 - T5) = IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
RDA SUBR ENTRY/EXIT
LDD T6
ZJN RDAX IF NO FIRST PART
SHN 2
ADD T6
ADC BUFB
STM RDAA
LDD T4 READ FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CRM BUFB,T6
LDD T7
ZJN RDAX IF NO SECOND PART
SADT .FT,,,A
LDC * READ SECOND PART
CRM *,T7
RDAA EQU *-1
UJN RDAX RETURN
WDA SPACE 4,10
** WDA - WRITE DATA TO CENTRAL.
*
* ENTRY (T4 - T5) = IN POINTER.
* (T6) = FIRST PART WORD COUNT.
* (T7) = SECOND PART WORD COUNT.
*
* MACROS SADT.
WDA SUBR ENTRY/EXIT
LDD T6
ZJN WDAX IF NO FIRST PART
SHN 2
ADD T6
ADC BUFB
STM WDAA
LDD T4 TRANSFER FIRST PART
SHN 6
ADD RA
SHN 6
ADD T5
CWM BUFB,T6
LDD T7
ZJN WDAX IF NO SECOND PART
SADT .FT,,,A
LDC * TRANSFER SECOND PART
CWM *,T7
WDAA EQU *-1
UJN WDAX RETURN
WSB SPACE 4,10
** WSB - WAIT START OF BLOCK FROM *1MT*.
*
* USES CM - CM+4.
*
* CALLS CPD, INM.
*
* MACROS PAUSE.
WSB SUBR ENTRY/EXIT
WSB1 LDN CMCL
CRD CM
LDD CP
SHN -7
LMD CM
NJN WSB3 IF MOVE FLAG NOT SET FOR THIS CP
LDD IR+4 CHECK IF *1MT* PAUSED
ADN 1
CRD CM
LDD CM
ZJN WSB3 IF NO FUNCTION
SHN 21-10 CHECK STORAGE MOVE ALLOWED (BIT 56)
MJN WSB2 IF STORAGE MOVE ALLOWED
SHN 10-21 RESTORE BYTE TO ORIGINAL POSITION
SBN SMAM
MJN WSB3 IF STORAGE MOVE NOT ALLOWED
SBN CPUM-SMAM
PJN WSB3 IF STORAGE MOVE NOT ALLOWED
WSB2 PAUSE NE
LDC ADDR MODIFY INSTRUCTIONS
RJM INM
WSB3 RJM CPD CHECK IF *1MT* STILL AROUND
LDD MA
CRD CC
LDD CC
LMN 1
NJN WSB4 IF NOT START OF BLOCK
STD CC ACKNOWLEDGE BLOCK START UP
LDD MA
CWD CC
LJM WSBX RETURN
WSB4 LMN 3&1
NJN WSB5 IF NOT READ SKIP OPERATION
STD CC
STM ADPA ENABLE READ SKIP
LDD MA ACKNOWLEDGE TRANSFER
CWD CC
LDD CC+3 SET AMOUNT OF SPACE IN BUFFER
STD RS
LDD CC+4
STD RS+1
WSB5 LJM WSB1 LOOP
ADDR TSAD ADDRESS RELOCATION INFORMATION
WTS SPACE 4,10
** WTS - WAIT FOR *1MT* TRANSFER TO START.
*
* ENTRY (A) = BYTE COUNT.
*
* EXIT (A) = BYTE COUNT.
*
* USES CM - CM+4.
*
* CALLS CPD.
WTS3 LDC * (BYTE COUNT)
WTSA EQU *-1
WTS SUBR ENTRY/EXIT
STM WTSA SAVE BYTE COUNT
WTS1 LDD MA CHECK *1MT*/*1LT* INTERLOCK
ADN 1
CRD CM
LDD CM
NJN WTS3 IF *1MT* TRANSFER STARTED
RJM CPD CHECK IF *1MT* PP DROPPED OUT
LDN 24 DELAY 10 MICROSECONDS
WTS2 SBN 1
NJN WTS2 IF NOT DONE
UJN WTS1 CHECK INTERLOCK
SPACE 4,10
BUFFER BUFB
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET.
*
* CALLS CPD, INM, MCH.
*
* MACROS CHTL.
PRS SUBR ENTRY/EXIT
LDK PPCP
CRD CM
LDD IR+4
SBD CM+4
SHN PPXES-PPCES SET EXTENDED PP COMMUNICATION BLOCK OFFSET
STD T1
LDD CM SET *ACPP* ADDRESS
SHN 14
ADD CM+1
ADD T1
ADK ACPP
STM CPDA+1
SHN -14
RAM CPDA
RJM CPD CHECK FOR DROP OUT OF *1MT*
LDD IR+4 READ PARAMETERS
ADN 3
CRD CM
LDD CM+1 SET FIRST
RAM INMA
LDD CM+2
STM INMA+1
LDD CM+3 SET LIMIT
RAM INMB
LDD CM+4
STM INMB+1
LDN ZERL SET ACKNOWLEDGE TO *1MT*
CRD ZR
LDD MA SET UP FOR REQUESTS FOR *1MT*
CWD ZR
ADN 1 PRESET *1MT*/*1LT* INTERLOCK
CWD ZR
LDN 2
STD CR
LDD IR+4 TELL *1MT* THAT *1LT* IS LOADED
ADN 3
CWD ZR
LDD IR+3 SET MTS/ATS CONTROLLER FLAG
SHN 14
STM PRSA
STM PRSB
SHN 6
LPN 37
STD IR+3
LDC TCHS MODIFY CHANNELS
STD T1
UJN PRS2 ENTER LOOP TO MODIFY INSTRUCTIONS
PRS1 RAI T2
AOD T1
PRS2 LDI T1 MODIFY CHANNEL INSTRUCTIONS
STD T2
LDD IR+3
CHTL *
SBN CH
NJN PRS1 IF MORE CHANNELS TO MODIFY
LDC ADDR MODIFY INSTRUCTIONS
RJM INM
LDD IR+2
SHN 21-7
PJN PRS2.1 IF NOT CTS
LDC LDNI+20 DELAY BEFORE DISCONNECT
STM WRTD
PRS2.1 LDK MABL
CRD CM
LDD CM+1
SHN -6
LPN 41
LMN 1
ZJN PRS3 IF CYBER 180 IOU
LDD IR+2
LPN 77
NJN PRS4 IF WRITE
LJM PRS6 PRESET FOR READ
PRS3 LJM PRS9 PRESET FOR CYBER 180
PRS4 LDC 0
PRSA EQU *-1
SHN 21-4
PJN PRS5 IF MTS CONTROLLER
LDC OPA SET ATS OUTPUT ROUTINE
STM WRTB
LDC OPL
STM WRTC
PRS5 LJM PRSX RETURN
PRS6 LDM DLYA
LPN 10
ZJN PRS7 IF 1X PPU SPEED
LDC LDNI+77 RESET DELAY FOR 2X PPU SPEED
STM REDC
PRS7 LDC 0 CHECK CONTROLLER TYPE
PRSB EQU *-1
SHN 21-4
PJN PRS5 IF MTS CONTROLLER
LDC NJNI+.RED8-.REDB MODIFY INSTRUCTIONS
STM REDA
LDC UJNI+.RED8-.REDB
STM REDD
LDC UJNI+RED3-REDB
STM REDB
LDC .REDB
STM REDF
STM REDG
LDN .REDRL-1 MOVE ATS INPUT LOOP
STD T1
PRS8 LDM .REDR,T1
STM .REDA,T1
SOD T1
PJN PRS8 IF MOVE NOT DONE
LDC .REDC MODIFY CHANNELS
RJM MCH
LJM PRSX RETURN
* PRESET FOR CYBER 180.
PRS9 LDC OPI MODIFY INSTRUCTIONS
STM WRTB
LDC OPE
STM WRTC
LDC NJNI+RED8.-REDB.
STM REDA
LDC UJNI+RED8.-REDB.
STM REDD
LDC UJNI+RED3-REDB
STM REDB
LDC REDB.
STM REDF
STM REDG
LDN REDRL.-1 MOVE IOU LOOP
STD T1
PRS10 LDM REDR.,T1
STM .REDA,T1
SOD T1
PJN PRS10 IF MOVE NOT COMPLETE
LDC REDC. MODIFY CHANNELS
RJM MCH
LDC UJNI+WRT2-WRTA MODIFY *WRTA*
STM WRTA
LJM PRSX RETURN
SPACE 4,10
TCHS CHTB CHANNEL TABLE
TITLE PRESET SUBROUTINES.
RED SPACE 4,10
** ATS INPUT LOOP (NON-CYBER 180).
.REDR BSS 0
LOC .REDA
.RED6 AJM *,CH WAIT FOR *1MT* TO DCN CHANNEL
STD BI SAVE BYTES TO INPUT
STD T1
.RED7 IJM RED11,CH IF *1MT* FINISHED INPUT
EJM .RED7,CH IF DATA NOT AVAILABLE
IAM BUFB,CH
DCN CH+40 INDICATE TO *1MT* TO CONTINUE READ
.REDB NJN .RED8 IF END OF BLOCK
* UJN .RED8 (LAST PARTIAL BLOCK BEING READ)
ACN CH
.RED8 STD T1 SAVE BYTES REMAINING
.RED9 IJM RED10,CH IF *1LT* FINISHED INPUT
EJM .RED9,CH IF *1MT* NOT TAKING DATA YET
UJN RED10 COMPUTE WORD COUNT
LOC *O
.REDRL EQU *-.REDR LENGTH OF ATS INPUT LOOP
ERRMI .REDAL-.REDRL OVERLAID CODE OVERFLOWED
MCH SPACE 4,10
** MCH - MODIFY CHANNELS.
*
* ENTRY (A) = ADDRESS OF CHANNEL TABLE
*
* USES T1, T2.
*
* MACROS CHTL.
MCH1 RAI T2
AOD T1
MCH2 LDI T1
STD T2
LDD IR+3
CHTL *
MCHA SBN CH
NJN MCH1 IF MORE CHANNEL TO MODIFY
MCH SUBR ENTRY/EXIT
STD T1 SAVE ADDRESS
UJN MCH2 ENTER LOOP TO MODIFY CHANNELS
.REDC CHTB CHANNEL TABLE FOR ATS INPUT LOOP
RED SPACE 4,10
** IOU INPUT LOOP (CYBER 180).
REDR. BSS 0
LOC .REDA
RED6. STD BI SAVE BYTES TO INPUT
STD T1
RJM WTS WAIT FOR *1MT* TRANSFER TO START
RED7. IJM RED11,CH IF *1MT* FINISHED INPUT
SCF RED7.,CH WAIT FOR *1MT* TO READ ITS CHUNK
RJM ITS INDICATE *1LT* TRANSFER STARTED
IAM BUFB,CH
NJN RED8. IF INCOMPLETE TRANSFER
* UJN RED8. LAST TRANSFER
REDB. EQU *-1
CCF *,CH SIGNAL *1MT* TO CONTINUE INPUT
RED8. STD T1
UJN RED10 COMPUTE WORD COUNT
LOC *O
REDRL. EQU *-REDR. LENGTH OF IOU INPUT LOOP
ERRMI .REDAL-REDRL. OVERLAID CODE OVERFLOWED
CHTL MCHA
REDC. CHTB CHANNEL TABLE FOR IOU INPUT LOOP
SPACE 4,10
TTL 1MT - PPU MAGNETIC TAPE EXECUTIVE.
END