IDENT 1MS,TMSO
PERIPH
BASE MIXED
SST BFMS,FNSS,EQSS,FTSS,NSSS,FASS,DTSS,EISS,GQSS
QUAL$ EQU 1 DEFINE UNQUALIFIED COMMON DECKS
*COMMENT 1MS - MASS STORAGE INPUT/OUTPUT.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE 1MS - MASS STORAGE INPUT/OUTPUT.
SPACE 4,10
*** 1MS - MASS STORAGE INPUT/OUTPUT.
*
* G. R. MANSFIELD. 72/03/16.
* J. C. BOHNHOFF. 72/11/01.
* J. J. EIKUM. 79/06/18.
* J. L. LARSON. 80/08/01.
SPACE 4,10
*** *1MS* PROCESSES INPUT/OUTPUT REQUESTS TO MASS STORAGE
* FILES FOR CPU PROGRAMS. THE *CIO* SYSTEM REQUEST ISSUED BY
* THE USER CPU PROGRAM IS PRE-PROCESSED BY THE *CPUCIO*
* SECTION OF *CPUMTR*. *1MS* PROCESSES *RETURN*, *UNLOAD*,
* AND *EVICT* FUNCTIONS FOR ALL EQUIPMENT TYPES (CALLS
* *0DF* TO DROP FILE). *1MS* ALSO ISSUES ERROR MESSAGES FOR
* ERRORS DETECTED BY *CPUCIO* ON ANY EQUIPMENT TYPE.
* *1MS* COMPLETES NON-READ/WRITE FUNCTIONS FOR *TT* EQUIPMENT.
* ALL OTHER FUNCTIONS PROCESSED BY *1MS* ARE ON MASS
* STORAGE OR NULL EQUIPMENT.
SPACE 4,10
*** CALL.
*
*
*T IR 18/ *1MS*, 1/A, 5/ CP, 18/ SKIP, 18/ FET
* A SET IF AUTO RECALL REQUESTED.
* CP CONTROL POINT NUMBER.
* SKIP COUNT FOR SKIP OPERATIONS, DATA PATTERN SELECTIONS
* FOR OVERWRITE OPERATION.
* FET ADDRESS OF FET.
*
*T MB 1/S, 5/RF, 6/RC, 5/0, 1/F, 6/EC, 12/ORD, 4/LV, 8/XC, 12/IC
* S SET IF *1MS* RESTARTED FROM RECALL STACK.
* RF RESTART FLAGS = 1/TIF, 1/OPF, 1/SDT, 1/BDF, 1/DTF.
* TIF = TRACK INTERLOCK FLAG.
* OPF = ORIGINAL POSITION FLAG FOR SKIP BACKWARD/OPEN.
* SDT = SKIP DATA TRANSFER FLAG FOR *READSKP*.
* BDF = BUFFERED DEVICE FUNCTION FLAG.
* DTF = DATA TRANSFERRED FLAG.
* RC REASON CODE FOR RECALL STACK ENTRY.
* F IF SET, BUILD FNT ENTRY AND RESTART *CPUCIO*.
* EC ERROR CODE, IF NONZERO.
* ORD RELATIVE ADDRESS OF FNT ENTRY IN NEGATIVE FL,
* IF NONZERO.
* LV LEVEL NUMBER, IF NO ERROR.
* XC EXTERNAL *CIO* FUNCTION CODE, IF NO ERROR.
* IC INTERNAL *CIO* FUNCTION CODE (AS DEFINED IN
* *COMSCIO*), IF NO ERROR.
*
*T MB+1 12/ 0, 24/ IN, 24/ OUT
*T MB+2 1/R, 5/0, 6/ FETL, 24/ FIRST, 24/ LIMIT
* R SET IF RANDOM FILE.
* FETL FET LENGTH - 5.
* FET POINTERS ARE TRANSFERRED ONLY IF *1MS* IS
* NOT RESTARTED FROM THE RECALL STACK.
SPACE 4,10
*** SYSTEM SECTOR PROCESSING.
*
* *1MS* WILL READ AND WRITE THE SYSTEM SECTOR TO/FROM THE
* CIRCULAR BUFFER BASED ON THE SYSTEM SECTOR OPERATION FLAG
* IN THE FST (BYTE 4, BIT 13B). TO READ THE SYSTEM SECTOR, THE
* FORMAT OF THE FST SHOULD BE
*
*T FST 12/ EQ,12/ FIRST TRACK,12/ FIRST TRACK,12/ 0,12/4005
*
* TO WRITE THE SYSTEM SECTOR, THE FORMAT OF THE FST SHOULD BE
*
*T 6/ ,6/ EQ,12/ FIRST TRACK,12/ 0,12/ 0,12/ 4005
* THE EQUIPMENT AND FIRST TRACK ARE OPTIONAL AND MAY BE 0 IN
* WHICH CASE *1MS* WILL ASSIGN A MASS STORAGE DEVICE.
*
* SYSTEM SECTOR OPERATIONS ARE ONLY SUPPORTED FOR CONTROL WORD
* READS AND WRITES AND *INCORRECT I/O REQUEST* WILL BE ISSUED
* IF A NON-CONTROL WORD READ OR WRITE IS ISSUED AND THE SYSTEM
* SECTOR OPERATION BIT IS SET IN THE FST. THE SYSTEM SECTOR
* OPERATION BIT IS CLEARED BY *1MS* AFTER THE CONTROL WORD
* READ OR WRITE.
SPACE 4,10
*** DAYFILE MESSAGES.
*
*
* *ASSIGNED FOR DIAGNOSTICS, FILE FFF AT NNN.*
* A *MALET* USER ATTEMPTED A *CIO* OPERATION OTHER
* THAN RETURN/UNLOAD ON A PREASSIGNED TAPE WITH
* FILE NAME FFF AND FET ADDRESS NNN.
*
* *BUFFER ARGUMENT ERROR ON FFF AT NNN.*
* A BUFFER POINTER DOES NOT CONFORM TO THESE CONSTRAINTS
* FIRST .LE. IN
* FIRST .LE. OUT
* OUT .LT. LIMIT
* IN .LT. LIMIT
* LIMIT .LE. FL
*
* *BUFFER CONTROL WORD ERROR ON FFF AT NNN.*
* BLOCK LENGTH AS SPECIFIED DURING A *WRITECW* OPERATION
* IS GREATER THAN ALLOWABLE PRU SIZE FOR DEVICE.
*
* *DEVICE ERROR ON FILE FFF AT NNN.*
* AN UNRECOVERED ERROR OCCURRED ON THE MASS STORAGE
* DEVICE CONTAINING THE FILE.
*
* *ERROR FLAG TERMINATION, FILE FFF AT NNN.*
* A SPECIAL ERROR FLAG WAS SET DURING PROCESSING OF THE
* OPERATION AND THE OPERATION WAS NOT COMPLETED.
*
* *FET ADDRESS OUT OF RANGE AT NNN.*
* FET ADDRESS .LE. 1 OR FET EXTENDS PAST FL.
*
* *FET PARAMETER ERROR ON FFF AT NNN.*
* ONE OF THE PARAMETERS IN THE FET IS INCORRECT (IE. THE
* LIST ADDRESS IS .GT. THE JOBS FL) OR THE FET IS NOT
* LONG ENOUGH FOR THE PARAMETER.
*
* *FILE ACCESS LEVEL CONFLICT, FFF AT NNN.*
* THE ACCESS LEVEL SPECIFIED FOR FILE FFF
* IS NOT WITHIN THE JOB VALIDATIONS.
*
* *FILE TOO LONG, FILE FFF AT NNN.* = DIRECT ACCESS PERMANENT
* FILE FFF HAS EXCEEDED THE DIRECT ACCESS FILE SIZE
* LIMIT.
*
* *INCORRECT EQUIPMENT ON FILE FFF AT NNN.*
* THE EQUIPMENT IN THE FST ENTRY FOR THE FILE IS NOT
* SUPPORTED FOR *CIO* FUNCTIONS.
*
* *INCORRECT FILE NAME FFF AT NNN.*
* THE FILE NAME DOES NOT CONFORM TO ESTABLISHED RULES.
*
* *INCORRECT I/O REQUEST ON FILE FFF AT NNN.*
* THE FUNCTION CODE IS NOT RECOGNIZED OR THE FUNCTION
* IS NOT ALLOWED ON THE FILE IN ITS CURRENT STATE.
*
* *INCORRECT MODIFICATION OF FFF AT NNN.*
* EITHER THE FUNCTION WOULD RESULT IN SHORTENING A
* MODIFY-ONLY FILE OR THE FILE HAS MODIFY LOCK-OUT.
*
* *INDEX ADDRESS OUT OF RANGE FOR FFF AT NNN.*
* RANDOM ADDRESS RETURN ADDRESS IS .GT. FL.
*
* *INDEX TOO LARGE ON OPEN, FILE FFF AT NNN.*
* FOR OPEN FUNCTION, THE RANDOM INDEX LENGTH EXCEEDED
* THE INDEX BUFFER SIZE.
*
* *I/O ON EXECUTE-ONLY FILE FFF AT NNN.*
* FUNCTION IS NOT ALLOWED BY JOB ON EXECUTE-ONLY FILE.
*
* *I/O SEQUENCE ERROR ON FILE FFF AT NNN.*
* MULTIPLE CONCURRENT FUNCTIONS WERE ATTEMPTED ON A
* SINGLE FILE.
*
* *JOB ACCESS LEVEL CONFLICT, FFF AT NNN.*
* THE ACCESS LEVEL OF THE JOB IS NOT VALID FOR
* THE DEVICE ON WHICH FILE FFF RESIDES.
*
* *M.T. NOT AVAILABLE ON FILE FFF AT NNN.*
* THE MAGNETIC TAPE EXECUTIVE IS NOT EXECUTING.
*
* *PRU LIMIT, FILE FFF AT NNN.*
* WRITING ON FILE FFF WOULD EXCEED THE JOBS PRU LIMIT.
*
* *RANDOM ADDRESS NOT ON FILE FFF AT NNN.*
* THE RANDOM ADDRESS EXCEEDS THE NUMBER OF ADDRESSES ON
* THE FILE.
*
* *REQUEST UNDEFINED ON DEVICE, FFF AT NNN.*
* THE FUNCTION CANNOT BE PERFORMED ON THE DEVICE UPON
* WHICH THE FILE RESIDES.
*
* *UNNECESSARY CIO FCT. 000 ON FFF AT NNN.*
* THE SPECIFIED *CIO* READ OR WRITE FUNCTION WAS
* UNNECESSARY, SINCE THE USER I/O BUFFER WAS ALREADY
* FULL (FOR READ) OR EMPTY (FOR WRITE) AND NO DATA
* COULD BE TRANSFERRED FOR THIS *CIO* CALL.
*
* *WRITE ON READ-ONLY FILE FFF AT NNN.*
* A WRITE WAS ATTEMPTED ON A FILE WITH WRITE LOCK-OUT.
*
* *WRITEDOWN PROHIBITED ON FILE FFF AT NNN.*
* THE ACCESS LEVEL OF THE JOB IS HIGHER THAN THE
* CURRENT ACCESS LEVEL OF FILE FFF, AND THE FILE
* IS A TAPE FILE OR A DIRECT ACCCESS PERMANENT FILE.
*
* IN THE ABOVE MESSAGES, FFF REPRESENTS THE FILE NAME AS GIVEN
* IN THE FET AND NNN REPRESENTS THE FET ADDRESS.
SPACE 4,10
*** OPERATOR MESSAGES.
*
*
* *EQXXX, TRACK LIMIT.* = *1MS* IS WAITING FOR MASS STORAGE
* SPACE TO BECOME AVAILABLE ON EST ORDINAL XXX.
*
* * TRACK LIMIT.* = *1MS* IS WAITING FOR MASS STORAGE SPACE TO
* BECOME AVAILABLE ON A TEMPORARY FILE DEVICE.
*
* * TRACK LIMIT, LVLX.* = *1MS* IS WAITING FOR TEMPORARY
* FILE MASS STORAGE SPACE ON ANY MASS STORAGE DEVICE
* WITH ACCESS LEVEL LVLX.
SPACE 4,10
*** HANG CONDITIONS.
*
* *1MS* WILL HANG ISSUING THE *MXFM* MONITOR FUNCTION
* IN THE FOLLOWING CASES -
*
* 1. *WMS* TRIES TO WRITE A DATA SECTOR ON THE LAST SECTOR
* OF A TRACK WITH NO NEXT TRACK RESERVED.
* 2. *WMS* TRIES TO WRITE AN EOF SECTOR ON THE LAST SECTOR
* OF A TRACK WITH NO NEXT TRACK RESERVED.
* 3. *PMS* CALLED TO PROCESS FUNCTION OTHER THAN
* SKIP, OPEN, OR RANDOM READ/WRITE.
* 4. HANG ERROR CODE WAS PASSED TO *1MS* FROM *CPUCIO*
* (DEFINED IN *COMSCIO*).
* 5. *0DQ* WAS UNABLE TO LOCATE GLOBAL ENTRY ASSOCIATED
* WITH QUEUED FILE FOR *EVICT* PROCESSING.
* 6. ERROR CODE PASSED IN MESSAGE BUFFER PARAMETER WORD IS
* INCORRECT.
SPACE 4,10
** ROUTINES USED.
*
*
* 0BF - BEGIN FILE.
* 0DF - DROP FILE.
SPACE 4,10
** SYSTEM SECTOR BUFFER ASSIGNMENTS.
BFMS EQU 6776-2*5 ALLOW FOR CONTROL WORDS
SPACE 4,10
** COMMON DECKS.
*CALL COMPMAC
LIST X
*CALL COMSCIO
LIST *
*CALL COMSCPS
*CALL COMSEVT
*CALL COMSMLS
QUAL COMSHIO
*CALL COMSHIO
QUAL *
*CALL COMSMSP
QUAL PFM
*CALL COMSPFM
QUAL *
*CALL COMSPIM
*CALL COMSSCD
*CALL COMSSRU
*CALL COMSSSD
*CALL COMSSSE
*CALL COMSWEI
*CALL COMSZOL
TITLE DIRECT LOCATION ASSIGNMENTS.
SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
T8 EQU 16 TEMPORARY (DESTROYED BY OVL LOAD)
T9 EQU 17 TEMPORARY (DESTROYED BY OVL LOAD)
EN EQU 17 ERROR NUMBER
* THE FOLLOWING DIRECT CELLS (MB - MB2) ARE READ IN BY *PPR*
* FROM *MB* THROUGH *MB*+2 IMMEDIATELY AFTER PP ASSIGNMENT
* SO THAT THE INFORMATION IS NOT DESTROYED BY LOADING THE PP.
MB EQU 20 - 24 MESSAGE BUFFER PARAMETERS
ERRNZ MB-MP ADDRESSES MUST MATCH
MB1 EQU 25 - 31 MB + 1 PARAMETERS
ERRNZ MB1-MP-5 ADDRESS MUST BE CONSECUTIVE
MB2 EQU 32 - 36 MB + 2 PARAMETERS
ERRNZ MB2-MP-10D ADDRESS MUST BE CONSECUTIVE
FS EQU 20 - 24 FST ENTRY (5 LOCATIONS)
PC EQU 25 PHYSICAL RECORD COUNT
RC EQU 26 *DRCM* REQUEST CODE
FO EQU 27 FET OPTIONS
DP EQU 30 - 34 DATA POINTER (5 LOCATIONS)
* 35 USED BY OVERLAYS
* 36 USED BY OVERLAYS
* 37 USED BY OVERLAYS
BS EQU 40 - 44 BUFFER STATUS (5 LOCATIONS)
FN EQU BS FILE NAME (5 LOCATIONS)
FC EQU 45 FUNCTION CODE
* 46 USED BY OVERLAYS
* 47 USED BY OVERLAYS
FA EQU 57 FNT ENTRY RELATIVE ADDRESS IN NFL
FT EQU 60 - 61 FIRST ADDRESS OF BUFFER (2 LOCATIONS)
LM EQU 62 - 63 LIMIT ADDRESS OF BUFFER (2 LOCATIONS)
IN EQU 64 - 65 NEXT INPUT ADDRESS (2 LOCATIONS)
OT EQU 66 - 67 NEXT OUTPUT ADDRESS (2 LOCATIONS)
TITLE MACRO DEFINITIONS.
SPACE 4,10
** MACRO DEFINITIONS.
CFET SPACE 4,10
** CFET - COMPUTE FET ADDRESS.
* CFET N
*
* ENTRY *N* = FET WORD NUMBER.
*
* COMPUTES ABSOLUTE FET ADDRESS USING (IR+3 - IR+4).
*
* CALLS CAF.
CFET MACRO W
RJM CAF
IFC NE,$W$$,1
ADN W
ENDM
ERROR SPACE 4,10
** ERROR - PROCESS ERROR.
*
* ERROR EC
*
* *EC* = ERROR CODE.
ERROR MACRO EC
.1 IFC EQ,$EC$UCF$
LDN SSTL
CRD CM
LDD CM+3
LPN 20
NJP CFN IF LOGGING DISABLED
.1 ENDIF
LDN /CIOERR/EC
LJM ERR
ENDM
MSG SPACE 4,10
** MSG - DEFINE ERROR MESSAGE.
*
*ERR MSG (TEXT),EF,CODE
*
* ENTRY *ERR* = ERROR CODE.
* *TEXT* = ERROR MESSAGE.
* *EF* = ERROR FLAG.
* *CODE* = OPTION CODE.
MACRO MSG,ERR,TEXT,EF,CODE
LOCAL A
ORG TEPO+/CIOERR/ERR
.A IFC NE,$EF_CODE_TEXT$$
LOC /CIOERR/ERR
VFD 6/EF,6/CODE
LOC *O
ORG TMSG+/CIOERR/ERR
.B IFC NE,$TEXT$$
CON =Z*_TEXT_*
.B ELSE
CON 0
.B ENDIF
A MICRO 1,,$TEXT$
A MICCNT A
ERRNG 31D-A
.A ENDIF
ENDM
OVERLAY SPACE 4,10
** OVERLAY - DEFINE OVERLAY.
*
*
*NAME OVERLAY (TITLE),ORG
*
* ENTRY *NAME* = OVERLAY NAME.
* *TITLE* = OVERLAY TITLE.
* *ORG* = ORIGIN ADDRESS.
NOREF .N
.N SET 0 OVERLAY NUMBER
PURGMAC OVERLAY
MACRO OVERLAY,NAME,TEXT,ORIG
QUAL
.1 SET .N/1R4
.1 MICRO .1+1,1 M
.N MICRO .N-.1*1R4+1,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ01234
.N MICRO 1,, ".1"".N"
NAME EQU 2R".N"
.N SET .N+1
TTL 1MS/4".N" - TEXT
TITLE
USE
QUAL NAME
IDENT 4".N",ORIG TEXT
ORG ORIG
*COMMENT 1MS - TEXT
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
ENDM
TITLE MAIN PROGRAM.
ORG PPFW
TMSO LJM PRS PRESET PROGRAM
* GLOBAL DATA.
FACF EQU *-2 FILE ACCESS FLAGS
FETL EQU *-1 FET LENGTH
PMFF CON 1 PERMANENT FILE FLAG
MSFF CON 0 MASS STORAGE FILE FLAG
FSAL CON 0 FILE SECURITY ACCESS LEVEL
JSAL CON 0 JOB SECURITY ACCESS LEVEL
OSSM CON 0 OPERATING SYSTEM SECURITY MODE
* THE FOLLOWING 5 CONSECUTIVE LOCATIONS SAVE *1MS*
* MESSAGE BUFFER PARAMETERS.
RCRF CON 0 REASON CODE AND RESTART FLAGS
ERCF CON 0 ERROR CODE AND FUNCTION FLAGS
FNTA CON 0 FNT ENTRY RELATIVE ADDRESS
LVXC CON 0 LEVEL NUMBER AND EXTERNAL FUNCTION CODE
ICFC CON 0 INTERNAL *CIO* FUNCTION CODE
ERRNZ /CIO/RDF CODE DEPENDS ON INTERNAL READ FUNCTION
ERRNZ /CIO/WTF-1 CODE DEPENDS ON INTERNAL WRITE FUNCTION
TMS SPACE 4,10
** TMS - TRANSFER MASS STORAGE DATA.
*
* EXIT TO *MSP*.
*
* CALLS EXR.
TMS BSS 0 ENTRY
LDC 0
* LDC 1 (RANDOM READ/WRITE)
TMSA EQU *-1
ZJN TMS1 IF NOT RANDOM READ/WRITE
LDC 1L4+PMS LOAD POSITION OVERLAY
RJM EXR
TMS1 LDC 1L4+PMS LOAD POSITION OVERLAY
* LDC 1L4+RMS (READ)
* LDC 1L4+WMS (WRITE)
* LDC 1L4+CMS (CLOSE)
* LDC 1L4+OMS (OVERWRITE)
TMSB EQU *-1
RJM EXR EXECUTE FUNCTION PROCESSOR
* UJN MSP COMPLETE MASS STORAGE PROCESSING
TITLE TERMINATION.
** TERMINATION PROCESSORS.
MSP SPACE 4,15
** MSP - COMPLETE MASS STORAGE PROCESSING.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = FET OPTIONS.
* (PC) = SECTOR COUNT FOR RANDOM INDEX UPDATE.
* (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
*
* EXIT RANDOM ADDRESS IN FET+6 UPDATED.
* TO *COC*.
*
* USES CM - CM+4.
*
* MACROS CFET.
MSP BSS 0 ENTRY
LDD FC CHECK FUNCTION
SHN -7
LPN 7
NJN COC IF NOT READ/WRITE
LDD FO CHECK PROCESSING BITS
SHN 21-13
PJN COC IF NOT RANDOM FET
CFET 6 READ RANDOM ACCESS CONTROL
CRD CM
LDD PC ADVANCE SECTOR COUNT
SHN 6
RAD CM+2
SHN -14
RAD CM+1
SHN -14
RAD CM
CFET 6
CWD CM STORE RANDOM ACCESS CONTROL
* UJN COC CHECK OPERATION COMPLETE
COC SPACE 4,10
** COC - CHECK OPERATION COMPLETE.
*
* EXIT TO *CFN* IF TO ENTER RECALL STACK OR
* RESTART *CPUCIO*.
* TO *UFS* IF FUNCTION COMPLETE.
COC BSS 0 ENTRY
LDC 0 CHECK FOR ENTRY TO RECALL STACK
* LDC 1 (ENTER RECALL STACK)
* LDC 4000 (RESTART *CPUCIO*)
COCA EQU *-1
ZJN UFS IF FUNCTION COMPLETE
SHN 21-13
MJN COC1 IF *CPUCIO* RESTART
SOM CFNA LEAVE FILE SET BUSY
COC1 LDN 0 PREVENT SETTING FET COMPLETE
STM CFNC
STM CFNE PREVENT FUNCTION CHARGE
STM CFNE+1
LJM CFN COMPLETE FUNCTION
CLS SPACE 4,10
** CLS - CLOSE MASS STORAGE COMPLETION.
*
* EXIT TO *CFN* IF *CLOSE/NO REWIND* FUNCTION.
* TO *DRF* IF *CLOSE/RETURN* OR *CLOSE/UNLOAD*.
* TO *REW* IF *CLOSE/REWIND* FUNCTION.
CLS BSS 0 ENTRY
LDM CFNB CLEAR FILE OPENED AND WRITTEN BITS
LPN 71
STM CFNB
CLSA LDN 0 SET RETURN FLAG FOR *DRF*
* LDN 1 (SET UNLOAD FLAG FOR *DRF*)
LJM REW REWIND FILE
* LJM DRF (CLOSE/RETURN OR UNLOAD)
* LJM CFN (CLOSE/NO REWIND)
CLSB EQU *-1
UFS SPACE 4,15
** UFS - UPDATE FET STATUS FOR READ OR POSITION FUNCTION.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
*
* EXIT (BS - BS+4) = (FET+0) UPDATED WITH TERMINATION
* STATUS.
* TO *CFN* FOR FUNCTION OTHER THAN *CLOSE*.
* TO *CLS* FOR *CLOSE* FUNCTION.
*
* USES T1.
UFS BSS 0 ENTRY
LDD FC CHECK FUNCTION
SHN -6
LPN 17
ZJN UFS1 IF READ FUNCTION
LMN /CIO/CLO
ZJN CLS IF CLOSE FUNCTION
LMN /CIO/SKP&/CIO/CLO
NJN UFS3 IF NOT SKIP FUNCTION
LDC 6742
STM UFSB
UFS1 LDD FS+4 CHECK TERMINATION CONDITION
LPN 14
UFSA SHN -2
* LDN 0 (TERMINATION CONDITION NOT REACHED)
ZJN UFS3 IF NOT EOR/EOF/EOI
STD T1
LDD FC
SHN 21-13
MJN UFS2 IF SKIP BACKWARD FUNCTION
LDD BS+4
LPC 6002
* LPC 6742 (SKIP FORWARD)
UFSB EQU *-1
LMM UFSC-1,T1 SET EOR/EOF/EOI INDICATOR
STD BS+4
UFS2 LDD BS+3
SCN 74
LMM UFSD-1,T1 SET LEVEL NUMBER
STD BS+3
UFS3 UJN CFN COMPLETE FUNCTION
UFSC BSS 0 READ/POSITION FUNCTION RETURNS
LOC 1
CON 20 EOR
CON 30 EOF
CON 1030 EOI
LOC *O
UFSD BSS 0 LEVEL NUMBER RETURNS
LOC 1
CON 0 EOR
CON 74B EOF
CON 74B EOI
LOC *O
RRF SPACE 4,15
** RRF - RESET RANDOM FET POINTERS.
*
* ENTRY (FO) = FET OPTIONS.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (FS+4) = FST STATUS.
* TO *CFN*.
*
* USES DP - DP+4.
*
* MACROS CFET.
RRF BSS 0 ENTRY
LDD FS CHECK DEVICE TYPE
LMN TEEQ
ZJN RRF1 IF *TE*
LDN 4 SET EOR FST STATUS
RRF1 STD FS+4
LDD FO CHECK FOR RANDOM FILE
SHN 21-13
PJN CFN IF NOT RANDOM FILE
CFET 6 READ RANDOM INDEX WORD
CRD DP
LDN 0 SET *CRI* TO 1
STD DP
STD DP+1
LDD HN
STD DP+2
CFET 6 REWRITE FET+6
CWD DP
* UJN CFN COMPLETE FUNCTION
CFN SPACE 4,20
** CFN - COMPLETE FUNCTION.
*
* ENTRY (FA) = FNT ORDINAL.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (PC) = PRU COUNT.
* (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
*
* EXIT TO *PPR* IF FUNCTION COMPLETE.
* TO *CRC* IF TO ENTER RECALL STACK OR RESTART
* *CPUCIO*.
*
* USES T1, CM+1, CM+2.
*
* CALLS CIT.
*
* MACROS CFET, MONITOR, NFA.
CFN BSS 0 ENTRY
RJM CIT CLEAR TRACK INTERLOCK
LDD FA CHECK FNT ADDRESS
ZJN CFN1 IF NO FNT ENTRY
AOD FS+4 SET FILE NOT BUSY
CFNA LPN 77
* LPN 76 (ENTER RECALL STACK, LEAVE FILE BUSY)
SHN 14
LMC ** RESET UPPER STATUS
CFNB EQU *-1 (UPPER 6 BITS OF PREVIOUS FST STATUS)
SHN 6
STD FS+4
NFA FA,R
ADN FSTL
CWD FS
CFN1 AOD BS+4 SET FET COMPLETE
* PSN (ENTER RECALL STACK/RESTART *CPUCIO*)
CFNC EQU *-1
CFET STORE FET STATUS
CFND CWD BS
* PSN (ERROR PROCESSING)
* UPDATE ACCOUNTING CHARGES AND MASS STORAGE PRU COUNT.
* DROP PPU.
LDM CFNJ CHECK FOR MASS STORAGE PRU COUNT UPDATE
ADM CFNJ+1
ZJN CFN2 IF NO FILE SIZE CHANGE
LDN 1
* ENTRY FROM *PRS* IF ERROR CODE INCORRECT.
CFN2 ADN 1 SET *UADM* PARAMETER COUNT
STD CM+1
LDD FC GET FUNCTION CODE
SHN -6
LPN 17
STD T1
LDD PC CHARGE FOR PRUS TRANSFERRED
SHN IMPT
CFNE ADM TACC,T1 CHARGE FOR FUNCTION
* PSN (ENTER RECALL STACK/RESTART *CPUCIO*)
* PSN (ENTER RECALL STACK/RESTART *CPUCIO*)
RAM CFNH+1
SHN -14
RAM CFNH
ADM CFNH+1
NJN CFN3 IF ACCOUNTING CHARGE
SOD CM+1
ZJN CFN4 IF NO FILE SIZE UPDATE
LDN CFNI-CFNG
RAM CFNF
CFN3 LDD MA STORE *UADM* PARAMETER WORDS
CWM CFNG,CM+1
* CWM CFNI,CM+1 (FILE SIZE UPDATE ONLY)
CFNF EQU *-1
CFN4 LDM COCA CHECK FOR RECALL
NJN CRC IF FUNCTION NOT COMPLETE
LDD IR+1 CHECK AUTO RECALL
SHN 1-5
LPN 2
LMN 2 RECALL CPU FOR NON-AUTO RECALL REQUEST
STD CM+2 SET TO DROP PPU AND RECALL CPU
MONITOR UADM
LJM PPR EXIT TO PP RESIDENT
* MESSAGE BUFFER STRUCTURE FOR UADM FUNCTION.
* (THE FOLLOWING 2 CM WORDS MUST BE CONTIGUOUS.)
CFNG CON AISS INCREMENT I/O ACCUMULATOR
CON IOAW I/O ACCUMULATOR WORD
CON 40D*100+20D POSITION AND WIDTH OF FIELD
CFNH CON 0 PRU COUNT
CON 0
CFNI CON CDCS DECREMENT CONTROL POINT AREA FIELD
CON ACLW MASS STORAGE PRU LIMIT
CON 0D*100+18D POSITION AND WIDTH OF LIMIT FIELD
CFNJ CON 0 18 BIT SECTOR COUNT (RIGHT-JUSTIFIED)
CON 0
TACC SPACE 4,10
** TACC - TABLE OF ACCOUNTING CHARGES.
*
* INDEXED BY INTERNAL *CIO* FUNCTION CODE.
TACC INDEX
INDEX /CIO/RDF,IMRD READ
INDEX /CIO/WTF,IMWT WRITE
INDEX /CIO/SKP,IMSK SKIP
INDEX /CIO/OPE,IMOP OPEN
INDEX /CIO/CLO,IMCL CLOSE
INDEX /CIO/RET,IMRU RETURN/UNLOAD
INDEX /CIO/EVI,IMRU EVICT
INDEX /CIO/OVW,IMWT OVERWRITE
INDEX /CIO/MFC
CRC SPACE 4,10
** CRC - CHECK FOR RESTART OF *CPUCIO*.
*
* ENTRY (CM+1) = *UADM* PARAMETER WORD COUNT.
*
* EXIT TO *ERS* IF TO ENTER RECALL STACK.
* TO *PPR* IF *CPUCIO* RESTARTED.
*
* USES CM+1 - CM+2, IR - IR+1.
*
* MACROS MONITOR.
CRC BSS 0 ENTRY
LDD CM+1 CHECK IF *UADM* NECESSARY
ZJN CRC1 IF *UADM* NOT NECESSARY
LDN 1 SET NO DROP OF PP
STD CM+2
MONITOR UADM UPDATE ACCOUNTING
CRC1 LDM COCA
SHN -13
NJN CRC2 IF NOT TO ENTER RECALL STACK
LJM ERS ENTER RECALL STACK
CRC2 LDC 2RCI RESET *CIO* CALL
STD IR
LDD IR+1
LPN 77
ADC 1RO*100
STD IR+1
LDN ZERL
CRD CM
LDD MA
CWD IR
ADN 1 CLEAR MB+1
CWD CM
CRCA LDN 2 SET DROP PP FLAG
* LDN 0 (NO DROP FOR TERMINAL EQUIPMENT)
STD CM+1
MONITOR RPPM RESTART CIO
CRCB UJN CRC3 EXIT TO PP RESIDENT
* PSN (DROP PPU REQUIRED)
LDD IA CLEAR AUTO RECALL FLAG
CRD IR
LDD IR+1
SCN 40
STD IR+1
LDD IA
CWD IR
MONITOR DPPM DROP PP
CRC3 LJM PPR EXIT TO PP RESIDENT
ERS SPACE 4,10
** ERS - ENTER RECALL STACK.
*
* ENTRY (PC) = PRU COUNT.
* (FS - FS+4) = FST ENTRY.
*
* EXIT TO *PPR*.
* TO *1RJ* IF RECALL DUE TO MASS STORAGE ERROR.
*
* USES BS - BS+4, CM - CM+4, DP - DP+4.
*
* CALLS CBD.
*
* MACROS EXECUTE, MONITOR.
ERS BSS 0 ENTRY
LDD PC
ZJN ERS1 IF NO PRUS TRANSFERRED
LDM RCRF SET DATA TRANSFERRED FLAG
LPC 3600
ADD HN
UJN ERS2 SET RECALL STACK REASON
ERS1 LDM RCRF
LPC 3700
ERS2 LMN PTLR SET PRU TRANSFER LIMIT RECALL REASON CODE
* LMN TRLR (TRACK LIMIT REASON CODE)
* LMN TIRR (TRACK INTERLOCK REJECT REASON CODE)
* LMN NFIR (NFL INCREASE PENDING REASON CODE)
* LMN LBBR (WAIT FOR BUFFER FLUSH REASON CODE)
* LMN WFOR (WAIT FOR INACCESSABLE DEVICE REASON CODE)
ERSA EQU *-1
STM RCRF
LPN 77
LMN PTLR
NJN ERS3 IF NOT PRU TRANSFER LIMIT
RJM CBD CHECK FOR BUFFERED DEVICE
RAM ERSC INCREASE ACTIVITY FOR BUFFERED DEVICE
LDD CM+4
SHN 3
ADN PFGL GET NUMBER OF UNITS ON EQUIPMENT
CRD BS
ADN DALL-PFGL GET DEVICE ACTIVITY
CRD DP
LDD DP EXTRACT ACTIVITY ONLY FROM DALL
LPN 77
STD DP
LDD BS+4
LPN 7
ADN 1
ERSC SHN 1
* SHN 3 (BUFFERED DEVICE)
SBD DP
PJN ERS3 IF NOT EXCESSIVE DEVICE ACTIVITY
LDK ACRT SET DEVICE ACTIVITY RECALL TIME PERIOD
UJN ERS4 ENTER RECALL STACK
ERS3 LDC IORT SET I/O RECALL TIME PERIOD
* LDC TLRT (TRACK LIMIT RECALL TIME PERIOD)
* LDC TIRT (TRACK INTERLOCK REJECT RECALL TIME)
ERSB EQU *-1
ERS4 STD CM+4 SET RECALL TIME
SHN -14
STD CM+3
LDN 0
STD CM+2
LDD IA STORE *1MS* CALL
CWD IR
ADN 2
CWD IR
ADN 1 STORE *1MS* RECALL PARAMETERS
CWM RCRF,ON
LDM RCRF CHECK IF WAITING FOR SUSPECT EQUIPMENT
LPN 77
LMN WFOR
ZJN ERS5 IF WAITING FOR SUSPECT DEVICE - CALL 1RJ*
LDN PTMF SET TIMED RECALL CRITERION
STD CM+1
MONITOR RECM
LJM PPR EXIT TO PP RESIDENT
* CALL *1RJ* TO RECALL THE PP AND ROLL THE JOB.
ERS5 LDC 0 SET EST ORDINAL IN *1RJ* CALL
ERSD EQU *-1
NJN ERS6 IF ERROR RETURNED FROM *0DF*
LDD FS
ERS6 STD IR+4
LDD MA READ RECALL PARAMETERS FOR *1RJ*
ADN 1
CRD MB
EXECUTE 1RJ
ERR SPACE 4,10
** ERR - PROCESS ERROR.
*
* ENTRY (A) = ERROR NUMBER.
*
* EXIT (ERRA) = ERROR NUMBER.
* TO *CFN* IF NO LOGGING NEEDED FOR UNNECESSARY
* *CIO* FUNCTION.
*
* CALLS EXR.
ERR BSS 0 ENTRY
STM ERRA SET ERROR NUMBER
LDC 1L4+ERP
RJM EXR
ERRA CON 0 ERROR NUMBER
CHG SPACE 4,10
** CHG - CONDITIONALLY HANG PP.
*
* ENTRY (A) = ERROR FLAG TO BE SET OR ZERO.
*
* EXIT (A) = 0.
*
* USES CM - CM+4.
*
* MACROS MONITOR.
CHG SUBR ENTRY/EXIT
STD CM+2 STORE ERROR FLAG IN REQUEST
LDM CHG GET ADDRESS WHERE ERROR DETECTED
STD CM+1
MONITOR CHGM CONDITIONALLY HANG PP
UJN CHGX RETURN
TITLE RESIDENT PROCESSORS.
CDA SPACE 4,15
** CDA - CHECK DEVICE ACCESSIBILITY.
*
* THIS ROUTINE CHECKS THE RETURN STATUS FROM THE DRIVER, THE
* REAL TIME FLAG IN THE FET, AND THE SUBSYSTEM INDICATION
* TO DETERMINE IF THE JOB SHOULD BE ROLLED OUT.
*
* ENTRY (RDCT), (MSD) = STATUS FROM THE DRIVER.
*
* EXIT TO *MSR*, IF REAL TIME FLAG SET, UNRECOVERABLE ERROR,
* SUBSYSTEM, OR CONTROL POINT ERROR FLAG
* SET.
* TO *COC*, IF JOB SHOULD BE ROLLED.
*
* NOTE IN SOME CASES, THE ERROR PROCESSOR JUMPS TO THE
* *CDA* RETURN ADDRESS.
CDA CON 0
LDM RDCT
SHN 21-12
MJN CDA1 IF UNRECOVERABLE ERROR
LDD FO
SHN 21-7
MJN CDA1 IF REAL TIME FLAG SET
LDM MSD
SHN 21-13
PJN CDA5 IF SUBSYSTEM
LDD CP CHECK ERROR FLAG
ADN STSW
CRD CM
LDD CM+1
CDA1 NJN CDA5 IF ERROR FLAG SET
CDAA LDD FC
* UJN CDA4 (ERROR SETTING TRACK INTERLOCK)
SHN -6 CHECK FOR WRITE OPERATION
LPN 17
LMN /CIO/WTF
ZJN CDA2 IF WRITE FUNCTION
LMN /CIO/CLO&/CIO/WTF
NJN CDA3 IF NOT CLOSE FUNCTION
CDA2 RJM /WMS/WEI ATTEMPT TO WRITE EOI ON FILE
CDA3 LDM ERSD
ZJN CDA4 IF NOT ERROR RETURN FROM *0DF*
LDN 0
STD FA
CDA4 LDN WFOR-PTLR ADJUST REASON CODE
RAM ERSA
LDN 1 SET TO RECALL PP
STM COCA
LJM COC COMPLETE AND RECALL PP
* LJM /SMR/SLS (*READLS*/*RPHRLS*)
CDAB EQU *-1
CDA5 LDM RDCT SAVE DRIVER RETURN CODE
STD T4
LDD MA SAVE DIRECT CELLS
CWD T3
CRM DCSA,ON
ERROR DRE *DEVICE ERROR ON FILE*
DRF SPACE 4,15
** DRF - DROP FILE.
*
* ENTRY (A) = 0 IF RETURN FUNCTION.
* = 1 IF UNLOAD FUNCTION.
* (FA) = RELATIVE FNT ADDRESS IN NFL.
*
* EXIT (FA) = 0.
* TO *CDA*, IF ERROR FROM *0DF*.
* TO *REW1*.
*
* CALLS CIT.
*
* MACROS EXECUTE.
DRF BSS 0 ENTRY
STM OVL-1 SAVE RETURN/UNLOAD FLAG FOR *0DF*
LDD FA
ZJN DRF2 IF NO FNT ENTRY
* CHANGE TO RETURN FUNCTION IN CASE RECALL IS NECESSARY DUE TO
* AN ERROR FROM *0DF*. THIS ALSO PREVENTS ERROR PROCESSING FROM
* ATTEMPTING TO WRITE AN EOI ON THE FILE AFTER A *0DF* ERROR
* ON A CLOSE/RETURN FUNCTION.
LDD FC
LPC 6077
LMC /CIO/RET*100
STD FC
STM ICFC
RJM CIT CLEAR TRACK INTERLOCK
EXECUTE 0DF,OVL DROP FILE
DRF2 PJN REW1 IF NO ERROR
LDD T5
STM ERSD
RJM CDA CHECK DEVICE
REW SPACE 4,10
** REW - REWIND MASS STORAGE.
*
* ENTRY (FS - FS+4) = FST ENTRY.
*
* EXIT (FS - FS+4) = UPDATED FST ENTRY.
* TO *RRF*.
REW BSS 0 ENTRY
LDM CFNB CLEAR SYSTEM SECTOR OPERATION FLAG
SCN 40
STM CFNB
LDM MSFF GET MASS STORAGE FILE FLAG
NJN REW1 IF NOT MASS STORAGE FILE
LDD FS+2 CHECK CURRENT TRACK
ZJN REW1 IF FILE NOT USED
LDD FS+1 SET FIRST TRACK
STD FS+2
LDN FSMS SET FIRST SECTOR
STD FS+3
REW1 LJM RRF RESET POINTERS
TITLE RESIDENT SUBROUTINES.
SPACE 4,10
** COMMON DECKS.
*CALL COMPCTI
CAF SPACE 4,10
** CAF - COMPUTE ABSOLUTE FET ADDRESS.
*
* ENTRY (IR+3 - IR+4) = RELATIVE FET ADDRESS.
*
* EXIT (A) = ABSOLUTE FET ADDRESS.
CAF SUBR ENTRY/EXIT
LDD IR+3 CALCULATE ABSOLUTE FET ADDRESS
LPN 37
SHN 6
ADD RA
SHN 6
ADD IR+4
UJN CAFX RETURN
CBD SPACE 4,10
** CBD - CHECK FOR BUFFERED DEVICE.
*
* ENTRY (FS) = EQUIPMENT.
*
* EXIT (A) = 0 IF NOT BUFFERED DEVICE.
* (A) = 2 IF BUFFERED DEVICE.
* (CM - CM+4) = EST ENTRY IF EQUIPMENT ASSIGNED.
*
* USES CM - CM+4.
*
* MACROS SFA.
CBD1 LDN 0 INDICATE NOT BUFFERED DEVICE
CBD SUBR ENTRY/EXIT
LDD FS
ZJN CBDX IF NO EQUIPMENT
SFA EST READ EST ENTRY
ADK EQDE
CRD CM
LDD CM
SHN 21-13
PJN CBD1 IF NOT MASS STORAGE
SHN 1-5-21+13 CHECK BUFFERED DEVICE FLAG
LPN 2
UJN CBDX RETURN
FWB SPACE 4,15
** FWB - FLUSH WRITE DATA FOR BUFFERED DEVICE.
*
* ENTRY (FA) = RELATIVE ADDRESS OF FNT ENTRY IN NFL.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (A) = 0 IF NO FLUSH REQUIRED.
* (A) = 1 IF FLUSH IN PROGRESS.
*
* USES CM - T9, T0 - T4.
*
* CALLS CBD.
*
* MACROS MONITOR, NFA.
FWB SUBR ENTRY/EXIT
RJM CBD CHECK FOR BUFFERED DEVICE
ZJN FWBX IF NOT BUFFERED DEVICE
NFA FA,R GET CONTROL BUFFER INDEX FROM FNT ENTRY
ADN FUTL
CRD T9-4
LDK BIOL GET BUFFERED I/O TABLES FWA
CRD CM
LDD CM+1
SHN 14
ADD CM+2
ADK /COMSHIO/CBTP GET CONTROL BUFFERS FWA
CRD CM
LDD T9
ZJN FWBX IF NO CONTROL BUFFER INDEX
SHN /COMSHIO/CBTLS
ADD CM+4
SHN 6
ADD CM+3
SHN 14
ADN /COMSHIO/LSLK
CRD T0
SBN -/COMSHIO/IOLK+/COMSHIO/LSLK
CRD CM
SBN -/COMSHIO/FSTC+/COMSHIO/IOLK
CRD CM+1
LDD T0
NJN FWB1 IF BUFFER BEING ACCESSED
LDD CM+1 COMPARE FST INFORMATION
LMD FS
LPC 777
NJN FWB1 IF BUFFER NOT FOR SAME EQUIPMENT
LDD CM+2
ZJN FWB3 IF NO FIRST TRACK
LMD FS+1
ZJN FWB3 IF SAME TRACK
FWB1 LDN 0 INDICATE NO FLUSH REQUIRED
FWB2 LJM FWBX RETURN
FWB3 LDD CM
SHN 21-11
PJN FWB1 IF NOT WRITE DATA
SHN 21-13-21+11+22
MJN FWB4 IF I/O INTERLOCK SET
LDD FA SET FNT RELATIVE ADDRESS
STD CM+4
LDC FLBS*100 REQUEST BUFFER FLUSH
STD CM+1
MONITOR PIOM
FWB4 LDN 1 INDICATE FLUSH IN PROGRESS
UJN FWB2 RETURN
SCF SPACE 4,10
** SCF - SET CONTROL BUFFER INDEX INTO FNT.
* CONTROL BUFFER INDEX IS TAKEN FROM THE PP LINK TABLE
* FOR BUFFERED DEVICES.
*
* USES CM - CM+5.
*
* CALLS CBD.
*
* MACROS NFA.
SCF SUBR ENTRY/EXIT
RJM CBD CHECK FOR BUFFERED DEVICE
ZJN SCFX IF NOT BUFFERED DEVICE
LDK PPCP GET PP COMMUNICATION BUFFER FWA
CRD CM+1
LDK BIOL GET PP LINK TABLE ADDRESS
CRD CM
LDD CM+1
SHN 14
ADD CM+2
ADN /COMSHIO/PLTP
CRD CM
LDD IA CALCULATE PP NUMBER
SBD CM+1+4
SHN -3
ADD CM+4
SHN 6
ADD CM+3
SHN 14
CRD CM+1 READ CONTROL BUFFER INDEX
NFA FA,R UPDATE LINK IN FNT ENTRY
ADN FUTL
CRD CM
LDD CM+1+4
STD CM+4
NFA FA,R
ADN FUTL
CWD CM
LJM SCFX RETURN
CIT SPACE 4,10
** CIT - CLEAR TRACK INTERLOCK.
*
* ENTRY (FS - FS+4) = FST ENTRY.
*
* USES T5.
*
* CALLS CTI.
CIT SUBR ENTRY/EXIT
LDM RCRF CHECK TRACK INTERLOCK FLAG
SHN 21-12
PJN CITX IF TRACK INTERLOCK NOT SET
LDC -2000 CLEAR TRACK INTERLOCK FLAG
RAM RCRF
LDD FS SET EST ORDINAL
STD T5
LDD FS+1 SET FIRST TRACK
RJM CTI CLEAR TRACK INTERLOCK
UJN CITX RETURN
DCC SPACE 4,10
** DCC - DROP CHANNEL WHEN OUTPUT REGISTER CLEAR.
*
* EXIT (A) = 0.
*
* USES CM - CM+4.
*
* MACROS ENDMS.
DCC2 ENDMS END MASS STORAGE OPERATION
DCC SUBR ENTRY/EXIT
DCC1 LDD OA WAIT OUTPUT REGISTER CLEAR
CRD CM
LDD CM
ZJN DCC2 IF OUTPUT REGISTER CLEAR
LDN 77
SBN 1
NJN *-1 DELAY
UJN DCC1 REREAD OUTPUT REGISTER
VAL SPACE 4,10
** VAL - VALIDATE FILE ACCESS LEVEL.
*
* ENTRY (A) = 0 IF VALIDATE FILE READ.
* (A) = 1 IF VALIDATE FILE WRITE.
*
* ERROR TO *ERR* IF VALIDATION ERROR DETECTED.
*
* USES T1, CM - CM+7.
*
* MACROS ERROR, MONITOR.
VAL SUBR ENTRY/EXIT
STD T1
LDM OSSM CHECK O/S SECURITY MODE
ZJN VALX IF UNSECURED SYSTEM
LDD CP CHECK FOR SUBSYSTEM
ADK JCIW
CRD CM+3
ADK SEPW-JCIW CHECK FOR SSJ=
CRD CM
LDD CM
SHN 21-2
MJN VALX IF SSJ=
LDD CM+3+2
SBK LSSI+1
PJN VALX IF SUBSYSTEM
LDM JSAL COMPARE JOB AND FILE ACCESS LEVELS
SBM FSAL
VAL1 ZJN VALX IF FILE IS AT JOB ACCESS LEVEL
PJN VAL3 IF JOB LEVEL .GT. FILE LEVEL
LDD T1
NJN VALX IF WRITE TO FILE
LDM FSAL RAISE JOB LEVEL TO FILE LEVEL FOR READ
STD CM+4
LDN VJAS
VAL2 STD CM+1
MONITOR VSAM
LDD CM+1
ZJN VAL1 IF ACCESS LEVEL CHANGED
ERROR LNJ *JOB ACCESS LEVEL CONFLICT.*
VAL3 LDD T1
ZJN VAL1 IF READ FILE
LDD CP CHECK WRITE DOWN VALIDATION
ADK JSCW
CRD CM
LDD CM
LPN 40
LMN 40
ZJN VAL1 IF USER ALLOWED TO WRITE TO LOWER LEVEL
LDM PMFF
ZJN VAL4 IF PERMANENT FILE
LDD FA GET FNT ADDRESS
STD CM+3
LDM JSAL RAISE FILE TO JOB ACCESS LEVEL FOR WRITE
STD CM+4
LDN VSFS
UJN VAL2 ISSUE *VSAM* MONITOR FUNCTION
VAL4 ERROR WDP *WRITEDOWN PROHIBITED ON FILE.*
SPACE 4,10
DCSA BSSZ 5 T3, RDCT, T5, T6, T7 SAVE AREA
SPACE 4,10
MSDO EQU *+5 MASS STORAGE DRIVER ORIGIN
SPACE 4,10
OVL EQU *+5 ZERO LEVEL OVERLAY LOAD ADDRESS
ERRNG BFMS-OVL-ZDFL CHECK LENGTH OF *0DF*
TITLE INITIALIZATION.
CFE SPACE 4,15
** CFE - CREATE FNT ENTRY.
*
* ENTRY (FN - FN+3) = FILE NAME.
*
* EXIT TO *ERS1* IF NFL INCREASE REJECTED.
* TO *CRC2* IF FNT ENTRY CREATED.
*
* ERROR TO *ERR* IF ERROR DETECTED.
*
* USES FA, FS, FS+4, CM - CM+4.
*
* CALLS VFN, *0BF*.
*
* MACROS CFET, ERROR, EXECUTE, NFA, MONITOR.
CFE BSS 0 ENTRY
LDD FN+3 CLEAR LEVEL NUMBER
SCN 77
STD FN+3
RJM VFN VALIDATE FILE NAME
NJN CFE1 IF NO FILE NAME ERROR
ERROR FLN *INCORRECT FILE NAME*
CFE1 LDN 6 RETURN ON NFL INCREASE/LOCAL FILE LIMIT
STM CFO-1
LDM JSAL SET DEFAULT FILE ACCESS LEVEL
STM FSAL
LDD FO
SHN 21-3
PJN CFE1.1 IF NO ACCESS LEVEL PROCESSING
CFET 4 GET FILE ACCESS LEVEL
CRD CM
LDD CM+1
LPN 7
STD CM+1
STM FSAL
ADN 10
SHN 6
RAM CFO-1
LDM OSSM CHECK O/S SECURITY MODE
ZJN CFE1.1 IF UNSECURED SYSTEM
LDD MA VALIDATE FILE ACCESS LEVEL FOR JOB
CWD CM
LDN 1
STD CM+4
LDN VAJS
STD CM+1
MONITOR VSAM
LDD CM+1
NJN CFE1.2 IF FILE ACCESS LEVEL NOT VALID
CFE1.1 LDC 2000 PREVENT MS TRACK ASSIGNMENT
STD FS
EXECUTE 0BF,CFO
UJN CFE2 CHECK RETURN STATUS
* ADVANCE EXIT IF FNT ENTRY FOUND.
LDN 0
STD FA
ERROR FSQ *I/O SEQUENCE ERROR*
CFE1.2 ERROR LNF *FILE ACCESS LEVEL CONFLICT.*
CFE2 ZJN CFE4 IF FNT ENTRY CREATED
LMN 4
NJN CFE3 IF NOT LOCAL FILE LIMIT
ERROR LFL *LOCAL FILE LIMIT*
CFE3 LCN PTLR-NFIR SET NFL INCREASE PENDING REASON CODE
RAM ERSA
LJM ERS1 ENTER RECALL STACK
* SET FNT POINTER IN FET. SET FST NOT BUSY.
* ENTER RECALL STACK TO REISSUE *CIO* CALL TO *CPUCIO*.
CFE4 CFET 4 SET FNT POINTER IN FET
CRD CM
LDD FA
STD CM
CFET 4
CWD CM
AOD FS+4 SET FST NOT BUSY
NFA FA,R
ADN FSTL
CWD FS
LDD FS CHECK FOR TERMINAL EQUIPMENT
LPC 777
ZJN CFE5 IF NO EQUIPMENT ASSIGNED
LCN 2 SET FOR NO DROP OF PP ON *RPPM*
RAM CRCA
LDN 0 SET TO ISSUE *DPPM*
STM CRCB
CFE5 LJM CRC2 RESTART *CPUCIO*
CFO EQU *+1 *0BF* LOAD ADDRESS FOR *CFE*
ERRNG BFMS-CFO-ZBFL CHECK *0BF* LENGTH
PRS SPACE 4,45
** PRS - PRESET.
*
* ENTRY (IR - IR+4) = *1MS* CALL.
* (MB - MB+4) = MESSAGE BUFFER PARAMETERS.
* (MB1 - MB1+4) = MESSAGE BUFFER + 1 PARAMETERS.
* (MB2 - MB2+4) = MESSAGE BUFFER + 2 PARAMETERS.
*
* EXIT (FA) = RELATIVE ADDRESS OF FNT ENTRY.
* = 0 IF NO FNT ENTRY.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = SPECIAL FET OPTIONS.
* (RC) = *DRCM* MONITOR FUNCTION CODE.
* (BS - BS+4) = FILE NAME AND EXTERNAL REQUEST.
* (DP - DP+4) = (FET+6) IF RANDOM FILE.
* (FS - FS+4) = FST ENTRY.
* (FT - FT+1) = FIRST.
* (IN - IN+1) = IN.
* (LM - LM+1) = LIMIT.
* (OT - OT+1) = OUT.
* (PC) = 0.
* (CFNB) = UPPER STATUS BITS OF FST ENTRY.
* (ERCF) = ERROR CODE AND FUNCTION FLAGS.
* (FACF) = FILE ACCESS FLAGS.
* (FETL) = FET LENGTH - 5.
* (FNTA) = RELATIVE ADDRESS OF FNT ENTRY, IF NONZERO.
* (ICFC) = INTERNAL *CIO* FUNCTION CODE.
* (LVXC) = LEVEL NUMBER.
* (MSFF) = MASS STORAGE FILE, IF ZERO.
* (PMFF) = DIRECT ACCESS PERMANENT FILE, IF NONZERO.
* (RCRF) = RECALL REASON CODE AND RESTART FLAGS.
* TO *CFE* IF FNT ENTRY TO BE CREATED.
* TO *CFN* IF WRITE OF NON-MASS STORAGE FILE.
* TO *CFN2* IF ERROR CODE NOT CORRECT.
* TO *DRF* TO DROP FILE.
* TO *ERS1* IF TO WAIT FOR WRITE BUFFER FLUSH.
* TO *TMS* IF SKIP, OPEN, CLOSE, READ, OR WRITE
* FUNCTION PROCESSOR TO BE LOADED.
* TO *UFS* IF READ OF NULL FILE.
*
* ERROR TO *ERR* IF PRESET ERROR DETECTED.
*
* USES EN, CM - CM+4, T1 - T5.
*
* CALLS CHG, /SRP/EVF, EXR, FWB, STI.
*
* MACROS CFET, ERROR, MONITOR, NFA, SFA.
PRS BSS 0 ENTRY
LDD MA RESET FET PARAMETERS IN MESSAGE BUFFER
CWD MB SAVE MESSAGE BUFFER PARAMETERS
CRM RCRF,ON
ADN 1
CWD MB1
ADN 1
CWD MB2
LDD MB+3 GET EXTERNAL *CIO* FUNCTION CODE
SHN 1 REPOSITION EXTERNAL *CIO* CODE
STD FO
LDD MB+4 GET INTERNAL *CIO* FUNCTION CODE
STD FC
LDN ZERL
CRD FS
LDM FNTA GET FNT RELATIVE ADDRESS
STD FA
ZJN PRS1 IF NO FNT ENTRY
NFA FA,R READ FNT ENTRY
CRD DP
ADN FSTL READ FST ENTRY
CRD FS
ADN FUTL-FSTL READ FUT ENTRY
CRD CM
LDD CM+2 SAVE FILE SECURITY ACCESS LEVEL
LPN 7
STM FSAL
LDD FS+4 SAVE UPPER STATUS BITS
SHN -6
STM CFNB
LDD DP+4 SAVE FILE TYPE FLAG
SHN -6
LMN PMFT
STM PMFF
LDD DP+3 SAVE FILE ACCESS FLAGS
LPN 77
STM FACF
PRS1 LDN DRCM SET DRIVER RECALL MONITOR FUNCTION
STD RC
LDD CP GET JOB SECURITY ACCESS LEVEL
ADK JSCW
CRD CM
LDD CM+1
SHN -11
STM JSAL
LDK SSML GET O/S SECURITY MODE
CRD CM
LDD CM
LPN 77
STM OSSM
LDN 0
STD PC CLEAR PRU COUNT
STD CM+1 CLEAR *VFPM* ERROR FLAG
LDM ERCF GET ERROR CODE
LPN 77
STD EN SAVE ERROR CODE
SBN /CIOERR/ARG
ZJN PRS3 IF INCORRECT FET ADDRESS
SBN /CIOERR/MEC-/CIOERR/ARG
MJN PRS2 IF ERROR CODE VALID
LDK PPET SET PPU ABORT ERROR FLAG
RJM CHG CONDITIONALLY HANG PP
LJM CFN2 COMPLETE FUNCTION
* REVALIDATE FET PARAMETERS IF RESTARTED FROM RECALL STACK.
PRS2 LDM RCRF GET RECALL STACK FLAG
SHN 21-13
PJN PRS4 IF FET PARAMETERS PASSED IN CALL
LDD FC GET VALIDATION FLAGS
LPN 3
STD CM+1
LDD IR+3 SET FET ADDRESS
LPN 77
STD CM+3
LDD IR+4
STD CM+4
MONITOR VFPM
LDD CM+1
LMN 1
NJN PRS4 IF NOT INCORRECT FET ADDRESS
PRS3 ERROR ARG *FET ADDRESS OUT OF RANGE*
PRS4 CFET GET FILE NAME AND EXTERNAL FUNCTION CODE
CRD BS
ADN 1
CRD T1 GET SPECIAL OPTIONS
LDD FC
NJN PRS5 IF INTERNAL CODE SET
LDD BS+3 CLEAR ERROR FIELD
SCN 3
STD BS+3
LDD BS+4
STD FO
UJN PRS6 SET EXTERNAL CODE
PRS5 LDD BS+3 CLEAR LEVEL NUMBER FROM FET
SCN 77
STD BS+3
LDM LVXC RESET LEVEL NUMBER IN FET
SHN -6
LPN 74
RAD BS+3
PRS6 LDD FO GET EXTERNAL *CIO* CODE
LPC 776 CLEAR COMPLETE BIT AND ERROR FIELD
STD BS+4
* GET BUFFER POINTERS.
LDD MA
ADN 2
CRD IN-1 *IN* AND *OUT*
ADN 1
CRD FT-1 RANDOM FLAG, FET LENGTH, *FIRST*, *LIMIT*
LDD FT-1 GET FET LENGTH - 5
LPN 77
STM FETL
LDD FT-1 GET RANDOM FLAG
LPC 4000
STD FO
ZJN PRS7 IF NOT RANDOM FILE
LDD FC CHECK FUNCTION CODE
SHN -7
LPN 7
NJN PRS7 IF NOT READ/WRITE
LDM RCRF CHECK DATA TRANSFERRED FLAG
LPC 100
NJN PRS7 IF PRIOR DATA TRANSFER
CFET 6 READ RANDOM REQUEST WORD
CRD DP
LDD DP+3 CHECK RANDOM REQUEST ADDRESS
ADD DP+4
ZJN PRS7 IF RANDOM REQUEST ADDRESS NOT SET
AOM TMSA SET RANDOM FUNCTION FLAG
PRS7 LDD T1+1 SET FET OPTIONS
LPC 3777
RAD FO
LDM FNTA RESET FNT RELATIVE ADDRESS
STD FA
LDD EN CHECK FOR ERROR
ZJN PRS8 IF NO ERROR
LJM ERR PROCESS ERROR
PRS8 LDD CM+1 CHECK *VFPM* REPLY
ZJN PRS9 IF NO ERROR
ERROR BUF *BUFFER ARGUMENT ERROR*
PRS9 LDD FA
NJN PRS10 IF FNT ENTRY PRESENT
LDM ERCF CHECK IF TO CREATE FNT ENTRY
SHN 21-6
PJN PRS10 IF NOT TO CREATE FNT ENTRY
LJM CFE CREATE FNT ENTRY
PRS10 LDD FS CHECK FOR MASS STORAGE
ZJN PRS11 IF NO EQUIPMENT ASSIGNED
SFA EST READ EST ENTRY
ADK EQDE
CRD CM
LDD CM
SHN -13
LMN 1
PRS11 STD T1 SAVE MASS STORAGE FLAG
STM MSFF
LDD FC
SHN -6
LPN 17
LMN /CIO/RET
ZJN PRS12 IF RETURN/UNLOAD FUNCTION
LMN /CIO/EVI&/CIO/RET
NJN PRS13 IF NOT EVICT FUNCTION
LDD T1
NJN PRS12 IF NOT MASS STORAGE FILE
LDD FA
ZJN PRS12 IF NO FNT ENTRY
LDC 1L4+SRP LOAD SPECIAL PROCESSOR OVERLAY
RJM EXR
RJM /SRP/EVF EVICT MASS STORAGE FILE
PRS12 LDD FC GET UNLOAD FLAG FOR *DRF*
SHN -12
LPN 1
LJM DRF DROP FILE
SRPO EQU *+5 SPECIAL REQUEST PROCESSOR ORIGIN
PRS13 LDD T1 GET MASS STORAGE FLAG
ADM PMFF CHECK FILE TYPE
NJN PRS14 IF NOT DIRECT ACCESS PERMANENT FILE
LDM TMSA
NJN PRS13.1 IF RANDOM READ/WRITE
LDD FC
SHN -6
LPN 17
LMN /CIO/WTF
ZJN PRS13.2 IF WRITE
PRS13.1 RJM FWB FLUSH WRITE BUFFER
ZJN PRS13.2 IF NO FLUSH IN PROGRESS
LDN LBBR-PTLR SET BUFFER BUSY REJECT
RAM ERSA
LJM ERS1 ENTER RECALL STACK
PRS13.2 LDM FACF CHECK FILE ACCESS MODE
LPN 20
ZJN PRS14 IF NOT M, A, RM, OR RA MODE
RJM STI SET TRACK INTERLOCK
* DETERMINE FUNCTION PROCESSOR.
PRS14 LDD FC
SHN -6
LPN 17
NJN PRS17 IF NOT READ
LDD FS+2 CHECK FOR NULL READ
ZJN PRS15 IF NO CURRENT TRACK
LCN WMS-RMS LOAD READ OVERLAY
UJN PRS18 SET READ OVERLAY NAME
* PROCESS READ OF NULL FILE.
PRS15 LDN /CIO/EOI SET EOI FST STATUS
STD FS+4
LDD FO
SHN 21-13
PJN PRS16 IF NOT RANDOM FILE
LDN ZERL SET RANDOM INDEX = 1
CRD CM
LDD HN
STD CM+2
CFET 6
CWD CM
PRS16 LJM UFS UPDATE FET STATUS
* PROCESS WRITE OF FILE ASSIGNED TO NULL EQUIPMENT.
PRS17 LMN /CIO/WTF
NJN PRS19 IF NOT WRITE
LDM MSFF
ZJN PRS18 IF MASS STORAGE FILE
LDN 0 SET OUT = IN
STD IN-1
STD IN-2
STD IN-3
CFET 3
CWD IN-3
LJM CFN COMPLETE FUNCTION
PRS18 ADC WMS SET WRITE OVERLAY NAME
UJN PRS20 EXECUTE FUNCTION PROCESSOR
PRS19 LMN /CIO/CLO&/CIO/WTF
NJN PRS22 IF NOT CLOSE
LDC CMS SET CLOSE OVERLAY NAME
PRS20 STM TMSB
PRS21 LJM TMS LOAD AND EXECUTE FUNCTION PROCESSOR
PRS22 LMN /CIO/OVW&/CIO/CLO
NJN PRS21 IF NOT OVERWRITE
LDC OMS SET OVERWRITE OVERLAY NAME
UJN PRS20 EXECUTE FUNCTION PROCESSOR
STI SPACE 4,15
** STI - SET TRACK INTERLOCK.
*
* ENTRY (FS - FS+4) = FST ENTRY.
*
* EXIT (A) = 0.
*
* ERROR TO *ERS1* IF INTERLOCK REJECT.
* TO *ERR* IF ERROR FLAG SET.
*
* USES CM - CM+4.
*
* MACROS ERROR, MONITOR.
STI2 LDC 2000 SET TRACK INTERLOCK FLAG
RAM RCRF
STI SUBR ENTRY/EXIT
LDM RCRF CHECK TRACK INTERLOCK FLAG
SHN 21-12
MJN STIX IF TRACK INTERLOCK ALREADY SET
LDD FS SET EQUIPMENT
ADD TH IMMEDIATE RETURN IF INACCESSIBLE DEVICE
STD CM+1
LDD FS+1 SET FIRST TRACK
STD CM+2
LDN STIS
STD CM+3
MONITOR STBM SET TRACK INTERLOCK
LDD CM+1
SHN 21-11
PJN STI0 IF FUNCTION PROCESSED
ISTORE CDAA,(UJN CDA4) SKIP EOI WRITE
LDD FS SET EST ORDINAL
STM ERSD
RJM CDA CHECK DEVICE ACCESSIBILITY
STI0 ZJP STI2 IF INTERLOCK SET
LDD CP
ADN STSW
CRD CM
LDD CM+1
SBN SPET
MJN STI1 IF ERROR FLAG NOT ABOVE THRESHOLD
ERROR EFT *ERROR FLAG TERMINATION*
STI1 LDN TIRR-PTLR SET TRACK INTERLOCK REJECT REASON CODE
RAM ERSA
LDN TIRT SET TRACK INTERLOCK REJECT RECALL TIME
STM ERSB
LJM ERS1 ENTER RECALL STACK
SPACE 4,10
** COMMON DECKS.
*CALL COMPVFN
SPACE 4,10
OVERFLOW PPFW
SRP OVERLAY (SPECIAL REQUEST PROCESSOR.),SRPO
SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
QA EQU 26 DEQUEUE GLOBAL FNT ENTRY INDICATOR
SRP SPACE 4,10
** SRP - SPECIAL REQUEST PROCESSOR.
SRP SUBR ENTRY/EXIT
UJN SRPX RETURN
EVF SPACE 4,15
** EVF - EVICT MASS STORAGE FILE.
*
* ENTRY (FA) = RELATIVE ADDRESS OF FNT ENTRY IN NFL.
* (DP - DP+4) = LOCAL FNT ENTRY.
* (FS - FS+4) = LOCAL FST ENTRY.
*
* EXIT (FS - FS+4) = UPDATED FST ENTRY.
* TO *RRF* IF FILE SUCCESSFULLY EVICTED.
* TO *RRF* IF ERROR CLEARING GLOBAL QUEUE ENTRY.
* TO *CDA*, IF ERROR FROM *0DQ*.
*
* USES T1, T5, T6, T7, CM+1 - CM+3.
*
* CALLS CHG, MSR, WEI, *0DQ*.
*
* MACROS ENDMS, EXECUTE, MONITOR, NFA, SETMS.
EVF SUBR ENTRY/EXIT
LDD DP+3 CHECK WRITE LOCKOUT
LPN 1
NJN EVFX IF WRITE LOCKOUT SET
LDD FS+2 CHECK CURRENT TRACK
ZJN EVF1 IF FILE NOT USED
LDD DP+4 GET FILE TYPE
SHN -6
STD T1
LDM TFTY,T1 SET PROCESSOR ADDRESS
ZJN EVFX IF NO PROCESSING FOR FILE TYPE
STD T1
LJM 0,T1 JUMP TO PROCESSOR
EVF1 LJM RRF RESET POINTERS
* EVICT QUEUED FILE.
EVF2 LDN 0 FORCE QFT SEARCH
STD QA
LDN 1 SELECT NO RELEASE OF DISK SPACE
STM DQLA-1
EXECUTE 0DQ,DQLA RETURN QFT ENTRY
MJP EVF5.0 IF DEVICE IS INACCESSIBLE
LDD QA
NJN EVF3 IF GLOBAL ENTRY FOUND AND CLEARED
* LDN 0 SET NO ERROR FLAG
RJM CHG CONDITIONALLY HANG PP
LJM RRF RESET RANDOM FET POINTERS
EVF3 LDD DP+4 CHANGE FILE TYPE IN LOCAL FNT
LPN 77
LMC LOFT*100
STD DP+4
NFA FA,R REWRITE LOCAL FNT ENTRY
CWD DP
* EVICT LOCAL FILE.
EVF4 LDN 0 CLEAR SECTOR
STD T7
STD FS+3 CLEAR CURRENT SECTOR
STD FS+2 CLEAR CURRENT TRACK
EVF5 LDD FS SET EQUIPMENT
ADD TH IMMEDIATE RETURN IF INACCESSIBLE DEVICE
ADC 0 SET DEVICE CHECKPOINT
* ADC 4000 (DIRECT ACCESS PERMANENT FILE)
EVFA EQU *-1
STD CM+1
LDD FS+1 SET FIRST TRACK
LPC 3777
STD CM+2
LDD T7 SET SECTOR
STD CM+3
MONITOR DTKM DROP TRACKS
LDD CM+1 CHECK STATUS
SHN 21-11
PJN EVF5.1 IF FUNCTION PROCESSED
NFA FA,R RESTORE (FS - FS+4)
ADN 1
CRD FS
EVF5.0 LDD FS SET EST ORDINAL
STM ERSD
RJM CDA CHECK DEVICE ACCESSIBILITY
* INCREMENT PRU LIMIT FIELD IN CONTROL POINT AREA.
* ACTUAL COUNT OF SECTORS RETURNED VIA DTKM IS IN CM+3 - CM+4
EVF5.1 LDD CM+3 MOVE SECTOR COUNT TO RESIDENT CIO BUFFER
STM CFNJ
LDD CM+4
STM CFNJ+1
LDN CICS CHANGE TO INCREMENT FUNCTION
STM CFNI
LJM RRF RESET POINTERS
DQLA EQU *+1 *0DQ* LOAD ADDRESS
ERRNG 10000-DQLA-ZDQL CHECK *0DQ* LENGTH
* EVICT PERMANENT FILE OR PRIMARY FILE.
EVF6 LDC 4000 SET DEVICE CHECKPOINT FLAG
STM EVFA
EVF7 LDD FS+1 SET FIRST TRACK
STD T6
STD FS+2
LDD DP+3 CHECK WRITE RESTRICTIONS
LPN 30
ZJN EVF8 IF NOT MODIFY OR APPEND MODE
LJM EVFX RETURN
EVF8 LDD FS SET EST ORDINAL
STD T5
LDN FSMS SET FIRST SECTOR
STD FS+3
STD T7
SETMS IO
RJM WEI WRITE EOI SECTOR
PJN EVF9 IF NO ERROR
RJM CDA CHECK DEVICE
EVF9 ENDMS END MASS STORAGE OPERATION
LDM CFNB SET FILE MODIFIED
LPN 74
LMN 03
STM CFNB
LJM EVF5 DROP TRACKS
TFTY SPACE 4,10
** TFTY - TABLE OF FILE TYPE PROCESSORS.
* ENTRY 1 WORD.
* INDEXED BY FILE TYPE.
*
*T, 12/ ADDR
* ADDR ADDRESS OF FILE PROCESSOR
TFTY INDEX
INDEX PTFT,EVF7 PRIMARY
INDEX PMFT,EVF6 PERMANENT
INDEX LOFT,EVF4 LOCAL
INDEX QFFT,EVF2 QUEUED
INDEX MXFT
SPACE 4,10
** COMMON DECKS.
*CALL COMPWEI
SPACE 4,10
OVERFLOW SRPO
RMS OVERLAY (READ MASS STORAGE.),MSDO
RMS SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
OP EQU 16 - 17 *OUT* POINTER FOR RECALL CALCULATION
TC EQU 35 TRACK COUNT
BP EQU 37 BUFFER SPACE IN PRUS
RMS SPACE 4,10
ORG *+2
LJM PRS PRESET FOR READ
LSO SPACE 4,10
** LSO - LOAD SPECIAL READ OVERLAY.
*
* EXIT TO *RMS*.
*
* CALLS EXR.
LSO BSS 0 ENTRY
LDC 1L4+SMR LOAD SPECIAL READ OVERLAY
RJM EXR
* UJN RMS PROCESS READ
RMS SPACE 4,15
** RMS - READ MASS STORAGE MAIN ROUTINE.
*
* EXIT (T1) = 0 FOR CONTROL WORD INITIAL SECTOR LENGTH.
* (T3) = 0 FOR CONTROL WORD HEADER USE.
* (T5) = EQUIPMENT.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* TO *BRD* FOR NON-CONTROL WORD READ.
* TO *CRD* FOR CONTROL WORD READ.
*
* USES CM - CM+4.
*
* CALLS SBA, SCA.
*
* MACROS PAUSE, SETMS.
RMS BSS 0 ENTRY
* INITIALIZE FOR MASS STORAGE DEVICE.
LDD FS SET EST ORDINAL
STD T5
LDD FS+2 SET TRACK
STD T6
LDD FS+3 SET SECTOR
STD T7
* INITIALIZE READ PARAMETERS.
LDN 0 SET IN POINTER WORD
STD DP
STD DP+1
STD DP+2
STD TC INITIALIZE TRACK COUNT
LDD IN
STD DP+3
LDD IN+1
STD DP+4
* BEGIN READ.
SETMS IO
LDD CM
SHN 21-12
PJN RMS1 IF NOT SYSTEM DEVICE
LDN FNTP READ FNT POINTER
CRD CM
LDD CM READ SYSTEM FST ENTRY
SHN 14
ADD CM+1
ERRNZ SYFO CHECK SYSTEM FILE POSITION IN FNT
ADN FSTG
CRD CM
LDD CM+1 CHECK MATCHING FIRST TRACK
LMD FS+1
NJN RMS1 IF NOT SYSTEM FILE
* *CIO* IS USED TO ACCESS THE SYSTEM FILE FOR THE LOADER, CCL,
* ETC. THE READSYS OPTION CAUSES THE DRIVER TO SELECT THE
* SYSTEM DEVICE WITH THE LEAST ACTIVITY. IT ALSO CAUSES THE
* DRIVER ERROR PROCESSOR TO AUTOMATICALLY TRY A DIFFERENT
* SYSTEM DEVICE WHEN AN ERROR IS ENCOUNTERED.
SETMS READSYS SYSTEM SELECTION OF SYSTEM DEVICE
RMS1 LDC RWPC SET DEFAULT PRU COUNT
ADD T7 ADJUST BY CURRENT SECTOR
RMS2 STD T1
AOD TC INCREMENT TRACK COUNT
LDD T1
SBM SLM
PJN RMS2 IF MORE TRACKS TO PROCESS
LDD OT SAVE *OUT*
STD OP
LDD OT+1
STD OP+1
PAUSE NE
LDD FC CHECK FOR CONTROL WORD OPERATION
SHN 21-5
MJN RMS3 IF *READCW*
RJM SBA SET ADDRESSES
LJM BRD ENTER BUFFER READ LOOP
* LJM RSK9 (*READSKP* SKIP PROCESSING)
RMSA EQU *-1
RMS3 RJM SCA SET ADDRESSES
LDN 0 PRESET CONTROL WORD
STD T3
STD T1
STM BFMS+2-5
STM BFMS+2-3
LDD HN
STM BFMS+2-4
LJM CRD ENTER CONTROL WORD READ LOOP
EOF SPACE 4,10
** EOF - TERMINATE ON EOF.
*
* ENTRY (T2) = LINKAGE BYTE.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (FS+4) = EOF STATUS.
* TO *CPR* TO COMPLETE FUNCTION.
* TO */SMR/ALS* TO ADVANCE LIST PROCESSING.
EOF BSS 0 ENTRY
LDD T2 ADVANCE TO NEXT SECTOR
STD T7
SHN 6
PJN EOF1 IF NOT TRACK POINTER
SHN -6
STD T6
LDN 0
STD T7
EOF1 LDN /CIO/EOF SET EOF FST STATUS
STD FS+4
LJM CPR COMPLETE READ PROCESSING
* LJM /SMR/ALS (*READLS*/*RPHRLS*)
* LJM CPR (CLEANUP AFTER MS ERROR)
EOFA EQU *-1
CPR SPACE 4,15
** CPR - COMPLETE READ.
*
* ENTRY (DP - DP+4) = IN POINTER.
*
* EXIT (FS - FS+4) = UPDATED FST ENTRY.
* TO *MSP* TO COMPLETE PROCESSING.
* TO */SMR/SLS* TO SET READ LIST STATUS.
*
* USES CM-2 - CM+4.
*
* CALLS DCC.
CPR BSS 0 ENTRY
RJM DCC DROP CHANNEL WHEN OUTPUT REGISTER CLEAR
LDD T6 UPDATE TRACK
STD FS+2
LDD T7 UPDATE SECTOR
STD FS+3
CPRA LDC 0 GET POINTER TO BAD DATA BLOCK
ZJN CPR1 IF NO PARITY ERROR
STD CM+4 WRITE BAD DATA POINTER AT *IN*
SHN -14
STD CM+3
LDN ZERL
CRD CM-2
LDD DP+3
SHN 6
ADD RA
SHN 6
ADD DP+4
CWD CM
CPR1 LJM MSP PROCESS MASS STORAGE EXIT
* LJM /SMR/SLS (*READLS*/*RPHRLS*)
CPRB EQU *-1
TITLE BUFFER READ.
BRD SPACE 4,25
** BRD - BUFFER READ LOOP.
*
* ENTRY (BP) = BUFFER SPACE IN PRUS.
* (PC) = 0.
* (RC) = *DRCM* MONITOR FUNCTION CODE.
* (T6) = TRACK.
* (T7) = SECTOR.
* (DP - DP+4) = *IN* POINTER.
* (FS - FS+4) = FST ENTRY.
* ADDRESS REFERENCES SET.
* AT *BRD11* IF PROCESSING TRANSFER OF PARTIAL
* SECTOR FOR *READSKP*.
*
* EXIT (FS+4) = READ STATUS.
* (PC) = COUNT OF PRUS TRANSFERRED.
* (T6) = UPDATED CURRENT TRACK.
* (T7) = UPDATED CURRENT SECTOR.
* (DP - DP+4) = ADVANCED *IN* POINTER.
* TO *CPR* TO COMPLETE PROCESSING.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES BP, OT+1, T1, T2, CM - CM+4, OP-3 - OP+1.
*
* CALLS CRT, MSR, RDS, SBA.
* LOOP TO PROCESS NEXT SECTOR.
BRD BSS 0 ENTRY
BRDA LDC ** (OUT + RA)
CRD OP-3 READ OUT
LDD OP LENGTH = OUT - IN - 1
SBD DP+3
SHN 14
ADD OP+1
SBD DP+4
SBN 1
PJN BRD1 IF IN+1 .LT. OUT
BRDB ADC ** (LIMIT - FIRST)
BRD1 SHN -6
STD BP
BRDC NJN BRD5 IF BUFFER NOT FULL
* PSN (TIME TO ENTER RECALL STACK)
LDC LDNI CLEAR SETTING OF FET TERMINATION STATUS
STM UFSA
BRD2 LDC 7777 CHECK FOR EOF
BRDD EQU *-1
LMD PC
ZJN BRD3 IF LAST SECTOR READ WAS AN EOF
LDM BFMS+1 CHECK FOR EOR
LMD HN
ZJN BRD4 IF LAST SECTOR READ WAS FULL SECTOR
LDN /CIO/EOR&/CIO/EOF SET EOR STATUS
BRD3 LMN /CIO/EOF
BRD4 STD FS+4
LJM CPR COMPLETE READ
* LJM RSK2 (*READSKP*)
* LJM CPR (CLEANUP AFTER MS ERROR)
BRDE EQU *-1
* READ NEXT SECTOR.
BRD5 AOD PC INCREMENT PRU COUNT
LDC BFMS READ SECTOR
RJM RDS
PJN BRD6 IF NO ERROR
LDD T6 SET CURRENT TRACK
STD FS+2
LDD T7 SET CURRENT SECTOR
STD FS+3
RJM CDA CHECK DEVICE
BRD6 LDM BFMS CHECK FIRST CONTROL BYTE
NJN BRD8 IF NOT EOF/EOI
LDM BFMS+1
NJN BRD7 IF NOT EOI
SOD PC
LDN /CIO/EOI SET EOI STATUS
STD FS+4
LJM CPR COMPLETE READ
* LJM /SMR/ALS (*READLS*/*RPHRLS*)
* LJM CPR (CLEANUP AFTER MS ERROR)
BRDF EQU *-1
* PROCESS EOF.
BRD7 STD T2
BRDG LJM EOF PROCESS EOF
* UJN *+2 (*READEI*)
LDN 0 SET WORD COUNT
STM BFMS+1
LDD PC SAVE SECTOR NUMBER
STM BRDD
LDD T2
BRD8 STD T7 SET NEXT SECTOR
SHN 6
PJN BRD9 IF NOT NEW TRACK
SHN -6 SET NEXT TRACK
STD T6
LDN 0 CLEAR SECTOR
STD T7
SOD TC DECREMENT TRACK COUNT
BRDY NJN BRD9 IF NOT TIME TO RECALL
* UJN BRD9 (*READLS*/*RPHRLS*/*RPHR*)
STM BRDC SET TO ENTER RECALL STACK
LDM BFMS+1
SHN -6
BRDZ ZJN BRD9 IF EOR/EOF
* PSN (*READNS*/*READEI*)
AOM COCA
BRD9 LDD RA CHECK RA CHANGED
LMC ** (RA)
BRDH EQU *-1
ZJN BRD10 IF RA NOT CHANGED
RJM SBA SET BUFFER ADDRESSES
BRD10 LDM BFMS+1 SET SECTOR WORD COUNT
STD T1
NJN BRD11 IF NOT EMPTY SECTOR
LJM BRD16 PROCESS EMPTY PRU
* ENTRY FROM *READSKP* PROCESSOR TO TRANSFER PARTIAL SECTOR.
BRD11 ADD DP+4 CHECK IN + WORD COUNT
SHN 6
ADD DP+3
SHN 14
BRDI ADC -** (-LIMIT)
MJN BRD12 IF NOT WRAP AROUND SECTOR
NJN BRD14 IF SECOND PART TO TRANSFER
SBD T1 STORE PRU
BRDJ ADC ** (LIMIT + RA)
CWM BFMS+2,T1
BRDK LDC ** (FIRST)
UJN BRD13 STORE *IN* POINTER
* PROCESS NORMAL SECTOR.
BRD12 SBD T1 STORE PRU
BRDL ADC ** (LIMIT + RA)
CWM BFMS+2,T1
* ADVANCE *IN* POINTER.
BRDM ADC -** (-RA)
BRD13 STD DP+4 ADVANCE *IN*
SHN -14
STD DP+3
* THE FOLLOWING LINE OF CODE IS MODIFIED VIA *RJM*.
LJM BRD15 UPDATE *IN* IF NOT BUFFERED OPERATION
* LJM BRD18 (CHECK OUT)
* LJM BRD19 (RECALL CPU)
BRDN EQU *-1
UJN BRD15 UPDATE *IN*
* PROCESS WRAP AROUND SECTOR.
BRD14 STD CM+1 SET SECOND PART WORD COUNT
LDD T1 SET FIRST PART WORD COUNT
SBD CM+1
STD CM
SHN 2 SET PPU ADDRESS OF SECOND PART
ADD CM
ADC BFMS+2
STM BRDQ
LDD DP+3 STORE FIRST PART
SHN 14
ADD DP+4
BRDO ADC ** (RA)
CWM BFMS+2,CM
BRDP LDC ** (FIRST + RA) STORE SECOND PART
CWM BFMS+2,CM+1
BRDQ EQU *-1 (PP ADDRESS OF SECOND PART)
BRDR ADC -** (-RA)
STD DP+4
SHN -14
STD DP+3
* UPDATE *IN*.
BRD15 LDC ** (IN+RA)
BRDS EQU *-2
CWD DP STORE IN
* CHECK TERMINATIONS.
BRD16 LDD T1 CHECK SECTOR WORD COUNT
* LJM BRD (*READNS*)
* LJM BRD (*READEI*)
* LJM BRD2 (AFTER MS ERROR)
BRDT EQU *-1
SHN -6
ZJN BRD17 IF SHORT SECTOR
LJM BRD CONTINUE DATA TRANSFER
BRDU EQU *-1
* LJM BRD2 (*RPHR*)
* LJM /SMR/RSK7 (*READSKP* PARTIAL SECTOR TRANSFER)
* LJM /SMR/ALS (*RPHRLS* ADVANCE LIST)
BRD17 LJM BRD2 TERMINATE TRANSFER
* LJM /SMR/RSK7 (*READSKP* PARTIAL SECTOR TRANSFER)
* LJM /SMR/ALS (*READLS*/*RPHRLS*)
BRDV EQU *-1
* WAIT FOR *OUT* TO CHANGE FOR BUFFERED OPERATION.
* ONLY 12 BITS OF *OUT* IS CHECKED DUE TO TIMING
* CONSIDERATIONS.
BRD18 RJM BRDN MODIFY INSTRUCTION
LDD BP
SHN -3
NJN BRD15 IF .GE. 8 SECTORS OF FREE SPACE
LDD OP+1
SBD OT+1
ZJN BRD15 IF *OUT* NOT CHANGED
RAD OT+1 SAVE NEW *OUT*
* RECALL CPU ON THE NEXT SECTOR IF JOB IS IN *X* STATUS.
RJM BRDN MODIFY INSTRUCTION
* THE FOLLOWING CHECK MINIMIZES OVERHEAD ON TRACK SWITCH
* AND PREVENTS A *DRCM* BEING ISSUED JUST PRIOR
* TO THE DRIVER NEEDING TO DO AN *LDAM*.
BRD19 LDD T7
ZJN BRD15 IF TRACK SWITCH
LDC **+CWQW CHECK CPU RECALL REQUIRED
BRDW EQU *-1
CRD CM
LDD CM+1
SHN 21-12
MJN BRD18 IF RECALL NOT REQUIRED
LDD OA RECALL CPU
CWD RC
UJN BRD18 RESET TO CHECK *OUT*
SBA SPACE 4,10
** SBA - SET BUFFER ADDRESSES.
* PRESETS ADDRESSES IN *BRD*.
* ENTER IF (RA) CHANGES.
*
* ENTRY (FT - FT+1) = *FIRST* POINTER.
* (LM - LM+1) = *LIMIT* POINTER.
*
* MACROS CFET.
SBA SUBR ENTRY/EXIT
LDD RA CHECK RA CHANGED
LMM BRDH
ZJN SBAX IF BUFFER ADDRESSES CORRECT
LDD RA RA
STM BRDH
SHN 6
STM BRDO+1
LMC 7777
STM BRDM+1
STM BRDR+1
SHN -14
LMC ADCI
STM BRDO
LMN 77
STM BRDM
STM BRDR
LDD FT FIRST + RA
SHN 6
ADD RA
SHN 6
ADD FT+1
STM BRDP+1
SHN -14
LMC LDCI
STM BRDP
CFET 2 IN + RA
STM BRDS+1
STM BRDA+1
SHN -14
LMC LDCI
STM BRDS
STM BRDA
AOM BRDA+1 OUT + RA
SHN -14
RAM BRDA
LDD LM LIMIT + RA
SHN 6
ADD RA
SHN 6
ADD LM+1
STM BRDL+1
STM BRDJ+1
SHN -14
LMC ADCI
STM BRDL
STM BRDJ
LJM SBAX RETURN
SPACE 4,10
QUAL
SMRO EQU *+5 SPECIAL READ OVERLAY LOAD ADDRESS
QUAL *
TITLE CONTROL WORD READ.
CRD SPACE 4,20
** CRD - CONTROL WORD READ LOOP.
*
* ENTRY (PC) = 0.
* (RC) = *DRCM* MONITOR FUNCTION CODE.
* (T5) = EQUIPMENT.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (DP - DP+4) = *IN* POINTER.
* (FS - FS+4) = FST ENTRY.
* ADDRESS REFERENCES SET.
*
* EXIT (PC) = PRU COUNT.
* (T6) = UPDATED CURRENT TRACK.
* (T7) = UPDATED CURRENT SECTOR.
* (FS+4) = READ STATUS.
* (DP - DP+4) = ADVANCED *IN* POINTER.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES BP, T0, T1, T2, CM - CM+4, OT+1, OP-3 - OP+1.
*
* CALLS CRT, MSR, RDS, SCA.
CRD BSS 0 ENTRY
* *OUT* NOT READ HERE EACH PASS DUE TO TIMING CONSIDERATIONS.
LDD OP LENGTH = OUT - IN - 1
SBD DP+3
SHN 14
ADD OP+1
SBD DP+4
SBN 1
PJN CRD1 IF IN+1 .LT. OUT
CRDA ADC ** (LIMIT - FIRST)
CRD1 ADC -102
CRDB PJN CRD4 IF BUFFER NOT FULL
* PSN (TIME TO ENTER RECALL STACK)
* PSN (CLEANUP AFTER MS ERROR)
LDC LDNI CLEAR SETTING OF FET TERMINATION STATUS
STM UFSA
LDC 7777 CHECK FOR EOF
CRDC EQU *-1
LMD PC
ZJN CRD2 IF LAST SECTOR READ WAS AN EOF
LDM BFMS+2-1 CHECK FOR EOR
LMC 500
ZJN CRD3 IF LAST SECTOR READ WAS FULL SECTOR
LDN /CIO/EOR&/CIO/EOF
CRD2 LMN /CIO/EOF
CRD3 UJN CRD7 COMPLETE READ
* READ NEXT SECTOR.
CRD4 SHN -6 SAVE APPROXIMATE NUMBER OF SECTORS
STD BP
AOD PC INCREMENT PRU COUNT
LDC BFMS READ SECTOR
RJM RDS
PJN CRD5 IF NO ERROR
LDD T6 SET CURRENT TRACK
STD FS+2
LDD T7 SET CURRENT SECTOR
STD FS+3
RJM CDA CHECK DEVICE
CRD5 LDD RA CHECK RA CHANGED
LMC ** (RA)
CRDD EQU *-1
ZJN CRD6 IF RA NOT CHANGED
RJM SCA SET BUFFER ADDRESSES
CRD6 LDD MA SAVE CONTROL WORD TRAILER
CWD T3
LDM BFMS CHECK FIRST CONTROL BYTE
NJN CRD10 IF NOT EOF/EOI
LDM BFMS+1
NJN CRD8 IF NOT EOI
SOD PC
LDN /CIO/EOI SET EOI STATUS
CRD7 STD FS+4
LJM CPR COMPLETE READ
* PROCESS EOF.
CRD8 STD T2
LDD FC CHECK TERMINATION CONDITION
LPN 14
LMN /CIO/EOF
NJN CRD9 IF NOT TERMINATE ON EOF
LJM EOF TERMINATE READ
CRD9 LDN 17 SET LEVEL NUMBER
STD T3
LDD MA UPDATE CONTROL WORD TRAILER
CWD T3
LDC CRD19 CHANGE LOOP
STM CRDQ
LDN 0
STM BFMS+1
LDD T2
* UPDATE SECTOR AND TRACK.
CRD10 STD T7
SHN 6
PJN CRD11 IF NOT NEW TRACK
SHN -6
STD T6
LDN 0 RESET SECTOR
STD T7
SOD TC
NJN CRD11 IF NOT TIME TO ENTER RECALL STACK
STM CRDB SET TO ENTER RECALL STACK
AOM COCA
* WRITE SECTOR TO BUFFER.
CRD11 LDM BFMS+1 SET SECTOR WORD COUNT
STD T1
SHN 2 SET WORD COUNT
ADD T1
STM BFMS+2-1
ADC BFMS+2
STM CRDE
LDN 0
STM BFMS+2-2
LDD MA
CRM **,ON MOVE TRAILER CONTROL WORD
CRDE EQU *-1
LDN 2
RAD T1
ADD DP+4 CHECK IN + WORD COUNT
SHN 6
ADD DP+3
SHN 14
CRDF ADC -** (-LIMIT)
MJN CRD12 IF NOT WRAP AROUND SECTOR
NJN CRD14 IF A SECOND PART
SBD T1
CRDG ADC ** (LIMIT + RA)
CWM BFMS+2-5,T1
CRDH LDC ** (FIRST)
UJN CRD13 STORE *IN* POINTER
* PROCESS NORMAL SECTOR.
CRD12 SBD T1 STORE PRU
CRDI ADC ** (LIMIT + RA)
CWM BFMS+2-5,T1
* ADVANCE *IN* POINTER.
CRDJ ADC -** (-RA) UPDATE IN
CRD13 STD DP+4
SHN -14
STD DP+3
* THE FOLLOWING CHECK MINIMIZES OVERHEAD ON TRACK SWITCH
* AND PREVENTS A *DRCM* BEING ISSUED JUST PRIOR
* TO THE DRIVER NEEDING TO DO AN *LDAM*.
LDD T7
ZJN CRD15 IF TRACK SWITCH
* THE FOLLOWING LINE OF CODE IS MODIFIED VIA *RJM*.
LJM CRD15 UPDATE *IN* IF NOT BUFFERED OPERATION
* LJM CRD17 (RECALL CPU)
* LJM CRD18 (WAIT FOR OUT TO CHANGE)
CRDK EQU *-1
UJN CRD15 UPDATE IN
* PROCESS WRAP AROUND SECTOR.
CRD14 STD CM+1 SET SECOND PART WORD COUNT
LDD T1 SET FIRST PART WORD COUNT
SBD CM+1
STD CM
SHN 2 SET PPU ADDRESS OF SECOND PART
ADD CM
ADC BFMS+2-5
STM CRDN
LDD DP+3 WRITE FIRST PART
SHN 14
ADD DP+4
CRDL ADC ** (RA)
CWM BFMS+2-5,CM
CRDM LDC ** (FIRST + RA)
CWM **,CM+1 WRITE SECOND PART
CRDN EQU *-1 (PPU ADDRESS OF SECOND PART)
CRDO ADC -** (-RA)
STD DP+4 UPDATE *IN* POINTER
SHN -14
STD DP+3
* UPDATE *IN*.
CRD15 LDC ** UPDATE *IN* POINTER
CRDP EQU *-2 (IN + RA)
CWD DP
LJM CRD CONTINUE DATA TRANSFER
* LJM CRD19 (EOF READ)
* LJM CRD20 (SYSTEM SECTOR READ)
CRDQ EQU *-1
* RECALL CPU ON THE NEXT SECTOR IF JOB IS IN *X* STATUS.
CRD16 RJM CRDK MODIFY INSTRUCTION
CRD17 LDC **+CWQW CHECK CPU RECALL REQUIRED
CRDR EQU *-1
CRD CM
LDD CM+1
SHN 21-12
MJN CRD18 IF RECALL NOT REQUIRED
LDD OA RECALL CPU
CWD RC
* READ *OUT* AND CHECK IF *OUT* HAS CHANGED.
CRD18 RJM CRDK MODIFY INSTRUCTION
LDD BP
SHN -3
NJN CRD15 IF .GT. 8 SECTORS OF SPACE
LDC ** (OUT+RA)
CRDS EQU *-2
CRD OP-3
LDD OP+1
SBD OT+1
ZJN CRD15 IF *OUT* NOT CHANGED
RAD OT+1 SAVE NEW *OUT*
UJN CRD16 SET TO RECALL CPU
* EOF POST PROCESSING CODE.
CRD19 LDN 0 RESET LEVEL NUMBER
STD T3
LDD PC SAVE EOF SECTOR NUMBER
STM CRDC
UJN CRD21 RESTORE LOOP
* SYSTEM SECTOR POST PROCESSING CODE.
CRD20 LDN FSMS SET FIRST DATA SECTOR
STD T7
LDM CFNB
LPN 37
STM CFNB
CRD21 LDC CRD RESTORE LOOP
STM CRDQ
LJM CRD LOOP
SCA SPACE 4,10
** SCA - SET CONTROL WORD READ ADDRESSES.
* PRESETS ADDRESSES IN *CRD*.
* ENTER IF (RA) CHANGES.
*
* ENTRY (FT - FT+1) = *FIRST* POINTER.
* (LM - LM+1) = *LIMIT* POINTER.
*
* MACROS CFET.
SCA SUBR ENTRY/EXIT
LDD RA RA AND -RA
STM CRDD
SHN 6
STM CRDL+1
LMC 7777
STM CRDJ+1
STM CRDO+1
SHN -14
LMC ADCI
STM CRDL
LMN 77
STM CRDJ
STM CRDO
LDD FT FIRST + RA
SHN 6
ADD RA
SHN 6
ADD FT+1
STM CRDM+1
SHN -14
LMC LDCI
STM CRDM
CFET 2 IN + RA
STM CRDP+1
STM CRDS+1
SHN -14
LMC LDCI
STM CRDP
STM CRDS
AOM CRDS+1 OUT + RA
SHN -14
RAM CRDS
LDD LM LIMIT + RA
SHN 6
ADD RA
SHN 6
ADD LM+1
STM CRDI+1
STM CRDG+1
SHN -14
LMC ADCI
STM CRDI
STM CRDG
LJM SCAX RETURN
SPACE 4,10
QUAL
ERMS EQU *+5 END OF MASS STORAGE READ OVERLAY
QUAL *
TITLE READ MASS STORAGE PRESET.
PRS SPACE 4,20
** PRS - READ MASS STORAGE PRESET.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FT - OT+1) = BUFFER POINTERS.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (BP) = BUFFER SPACE IN PRUS FOR NON-CONTROL WORD
* READ, IN WORDS FOR CONTROL WORD READ.
* (OP - OP+1) = (OT - OT+1).
* TO *RMS* IF SYSTEM SECTOR WRITE REQUIRED.
* TO *RMS1* IF SYSTEM SECTOR WRITE NOT REQUIRED.
* TO *UFS* IF INSUFFICIENT BUFFER SPACE FOR
* CONTINUATION FUNCTION.
*
* ERROR TO *ERR* IF ERROR OR UNNECESSARY FUNCTION.
*
* USES T1, CM - CM+4.
PRS BSS 0 ENTRY
LDD OT CHECK BUFFER SPACE
SBD IN LENGTH = OUT - IN - 1
SHN 14
ADD OT+1
SBD IN+1
SBN 1
PJN PRS1 IF NO WRAP AROUND
SHN 6 LENGTH = LIMIT - IN - 1 + OUT - FIRST
ADD LM
SBD FT
SHN 14
ADD LM+1
SBD FT+1
PRS1 STD T1 SAVE FREE WORD COUNT
SHN -6
STD BP SAVE BUFFER SPACE / 100B
NJN PRS3 IF BUFFER NOT FULL
LDD FC CHECK REQUEST
SHN 21-12
MJN PRS3 IF *READSKP*
LDM RCRF
SHN 21-6
MJN PRS2 IF DATA TRANSFERRED PREVIOUSLY
ERROR UCF *UNNECESSARY CIO FUNCTION*
PRS2 LJM UFS UPDATE FET STATUS
* SET UP RECALL LOGIC.
PRS3 LDD IR+1 CHECK RECALL STATUC
SHN 21-5
MJN PRS4 IF AUTO RECALL
LDD CP SET CONTROL POINT ADDRESS
RAM BRDW
STM CRDR
LDC BRD19 SET TO RECALL CPU AFTER FIRST SECTOR
STM BRDN
LDC CRD17
STM CRDK
* SET BUFFER RELATED ADDRESSES.
PRS4 LDD LM LIMIT - FIRST
SBD FT
SHN 14
ADD LM+1
SBD FT+1
STM BRDB+1
STM CRDA+1
SHN -14
RAM BRDB
STM CRDA
LDC ADCI+77 -LIMIT
LMD LM
STM BRDI
STM CRDF
LDC 7777
LMD LM+1
STM BRDI+1
STM CRDF+1
LDD FT+1 FIRST
STM BRDK+1
STM CRDH+1
LDD FT
RAM BRDK
STM CRDH
* CHECK FOR SYSTEM SECTOR READ.
LDD FS+4
SHN 21-13
PJN PRS5 IF NOT SYSTEM SECTOR READ
LDD FC
SHN 21-5
PJN PRS7 IF NOT *READCW*
LDC CRD20 CHANGE LOOP
STM CRDQ
PRS5 LDN 0
STD FS+4
LDD FC
SHN 21-12
MJN PRS6 IF *READSKP*
SHN 21-4-21+12
PJN PRS8 IF NOT READ LIST
LDK UJNI-NJNI PREVENT ENTERING RECALL STACK
RAM BRDY
PRS6 LJM LSO LOAD SPECIAL READ OVERLAY
PRS7 ERROR IRQ *INCORRECT I/O REQUEST*
PRS8 SHN 21-5-21+4+22
MJN PRS11 IF *READCW*
SHN -21+5+22
LPN 14 GET TERMINATION CONDITION
NJN PRS9 IF NOT *RPHR*
LDC BRD2 SET STOP ON PRU
STM BRDU
LDK UJNI-NJNI PREVENT ENTERING RECALL STACK
RAM BRDY
UJN PRS11 PROCESS READ
PRS9 LMN /CIO/EOF
ZJN PRS10 IF *READNS*
LMN /CIO/EOI&/CIO/EOF
NJN PRS11 IF NOT *READEI*
LDC UJNI+2 CLEAR STOP ON EOF
STM BRDG
PRS10 LDD HN+LJMI* CLEAR EOR CHECK
STM BRDT
LDC BRD
STM BRDT+1
LDK PSNI PREVENT EOR/EOF CHECK
STM BRDZ
PRS11 LJM RMS PROCESS READ
SPACE 4,10
OVERFLOW MSDO
SMR OVERLAY (SPECIAL MASS STORAGE READS.),SMRO
SMR SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
OP EQU 16 - 17 *OUT* POINTER
LE EQU 30 - 31 LIST ENTRY (2 LOCATIONS)
RI EQU 32 - 33 RANDOM INDEX (2 LOCATIONS)
LP EQU 34 - 35 LIST POINTER (2 LOCATIONS)
TC EQU 35 TRACK COUNT
LI EQU 36 LIST INDEX
BP EQU 37 BUFFER SPACE IN PRUS
LS EQU 46 - 47 LIST ADDRESS (2 LOCATIONS)
SMR SPACE 4,10
** SMR - SPECIAL MASS STORAGE READS MAIN ROUTINE.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
*
* EXIT TO *RLS* IF *READLS*.
* TO *RPL* IF *RPHRLS*.
* TO *RSK* IF *READSKP*.
SMR SUBR ENTRY/EXIT
LDD FC
SHN 21-12
MJN RSK IF *READSKP*
SHN -21+12+22 GET TERMINATION CONDITION
LPN 14
ZJN SMR1 IF *RPHRLS*
LJM RLS PROCESS *READLS*
SMR1 LJM RPL PROCESS *RPHRLS*
TITLE READ SKIP PROCESSOR.
RSK SPACE 4,15
** RSK - READ SKIP (*READSKP*) PROCESSOR (FUNCTION 020).
*
* ENTRY (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
* (FT - FT+1) = *FIRST* POINTER.
* (OP - OP+1) = *OUT* POINTER.
*
* EXIT (PC) = COUNT OF PRUS TRANSFERRED.
* (FS - FS+4) = ADVANCED FST ENTRY.
* TO */RMS/CPR*.
* TO *SMRX* AFTER PRESET FOR REENTRY.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* CALLS /RMS/BRD, CRT, RNS, /RMS/SBA.
*
* USES T1, T3.
RSK BSS 0 ENTRY
LDM RCRF CHECK FOR SKIP PROCESSING
SHN 21-10
PJN RSK1 IF NOT SKIP PROCESSING
LDC RSK9 SET TO CONTINUE SKIP PROCESSING
STM /RMS/RMSA
RSK1 LDC RSK2 SET LOAD BUFFER EXIT
STM /RMS/BRDE
LDD HN PRESET FULL SECTOR FOR *READSKP*
STM BFMS+1
UJN SMRX RETURN
* REENTRY AFTER TRACK COUNT EXHAUSTED OR WHEN USER
* BUFFER FULL (LESS THAN ONE PRU OF SPACE REMAINS)
* OR EOR/EOF/EOI ENCOUNTERED.
RSK2 LDM COCA
NJN RSK3 IF TO ENTER RECALL STACK
LDC SHNI+77-2 FORCE SETTING OF FET TERMINATION STATUS
STM UFSA
LDD FS+4 CHECK FET STATUS
LPN 14
ZJN RSK4 IF NOT EOR/EOF/EOI
LPN 10
NJN RSK3 IF EOF OR EOI ENCOUNTERED
LDC 400 SET SKIP FLAG
RAM RCRF
LJM RSK11 CHECK FOR SKIP TO EOF
RSK3 LJM /RMS/CPR EXIT TO COMPLETE READ
* PROCESS PARTIAL SECTOR TRANSFER TO USER BUFFER.
RSK4 AOD PC INCREMENT PRU COUNT
LDC RSK7 SET STOP ON PRU
STM /RMS/BRDU
STM /RMS/BRDV
LDC 400 SET SKIP FLAG
RAM RCRF
LDC BFMS READ NEXT SECTOR
RJM RNS
ZJN RSK7.2 IF EMPTY SECTOR
STM RSKA
LDD OP CHECK BUFFER SPACE
SBD DP+3 LENGTH = OUT - IN - 1
SHN 14
ADD OP+1
SBD DP+4
SBN 1
PJN RSK5 IF NO WRAP AROUND
SHN 6 LENGTH = LIMIT - IN - 1 + OUT - FIRST
ADD LM
SBD FT
SHN 14
ADD LM+1
SBD FT+1
RSK5 STD T3 SET BUFFER LENGTH
SBD T1
PJN RSK6 IF ROOM FOR SECTOR
LDD T3 SET BUFFER WORD COUNT
STD T1
ZJN RSK7 IF FULL BUFFER
RSK6 RJM /RMS/SBA RESET BUFFER ADDRESSES
LDD T1
LJM /RMS/BRD11 WRITE DATA TO BUFFER
* PROCESS SKIP TO EOR/EOF/EOI.
RSK7 LDC ** CHECK SECTOR WORD COUNT
RSKA EQU *-1
RSK7.1 SHN -6
RSK7.2 ZJN RSK11 IF SHORT SECTOR
RSK8 LDD T7 CHECK FOR NEW TRACK
* LDN 0 (MASS STORAGE ERROR)
RSKB EQU *-1
RSKC NJN RSK9 IF NOT NEW TRACK
* LJM RSK13 (MASS STORAGE ERROR)
RJM CRT CHECK RECALL TIME
MJN RSK10 IF PROCESSING TIME EXCEEDED
LDD PC
ADM SLM
SHN -14
NJN RSK10 IF PRU COUNT WILL EXCEED 12 BITS
RSK9 AOD PC
LDC BFMS+DTSF READ NEXT SECTOR HEADER WORDS
RJM RNS
UJN RSK7.1 CONTINUE SKIP TO SHORT SECTOR
RSK10 AOM COCA SET RECALL STACK FLAG
UJN RSK14 COMPLETE READ PROCESSING
RSK11 LDM BFMS CHECK TERMINATION
ZJN RSK12 IF EOF/EOI
LDD BS+3 CHECK SKIP TO EOF
LPN 74
LMN 74
ZJN RSK8 IF SKIP TO EOF
LDN /CIO/EOR
UJN RSK13 SET EOR READ STATUS
RSK12 LDN /CIO/EOF SET EOF
STD FS+4
LDM BFMS+1
NJN RSK14 IF NOT EOI
SOD PC
LDN /CIO/EOI
RSK13 STD FS+4
RSK14 LJM /RMS/CPR EXIT TO COMPLETE READ
CRT SPACE 4,10
** CRT - CHECK RECALL TIME.
*
* ENTRY FIRST CALL STARTS TIMING. ELAPSED TIME OF EACH
* INTERVAL IS KEPT TO MINIMIZE CLOCK OVERFLOW.
*
* EXIT (A) .LT. 0 IF PROCESSING TIME EXCEEDED.
*
* USES CM - CM+4.
CRT2 AOM CRTA INDICATE TIME ACCUMULATION STARTED
CRT3 LDD CM+4 SAVE CURRENT CLOCK VALUE
STM CRTB
CRT SUBR ENTRY/EXIT
LDC RTCL READ REAL TIME CLOCK
CRD CM
LDC 0 ELAPSED TIME
CRTA EQU *-1
ZJN CRT2 IF FIRST CALL
LDD CM+4 CALCULATE TIME SINCE LAST CALL
SBM CRTB
PJN CRT1 IF NO OVERFLOW
ADC 10000
CRT1 RAM CRTA ACCUMULATED PROCESSING TIME
ADC -RSPT
MJN CRT3 IF TIME NOT EXCEEDED
LCN 0 SET TIME EXCEEDED
UJN CRTX RETURN
CRTB CON 0 PREVIOUS CLOCK VALUE
TITLE READ LIST PROCESSOR.
RPL SPACE 4,10
** RPL - READ PRUS WITH LIST (*RPHRLS*) (FUNCTION 230).
*
* EXIT TO *RLS*.
RPL BSS 0 ENTRY
LDC ALS SET LIST ADVANCE AT EACH PRU
STM /RMS/BRDU
* LJM RLS PROCESS LIKE *READNS*
RLS SPACE 4,20
** RLS - READ RECORDS WITH LIST (*READLS*) (FUNCTION 210).
*
* ENTRY (FO) = FET OPTIONS.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (LI) = LIST INDEX (IN *TLSA* TRACK/SECTOR TABLE).
* (FS - FS+4) = ADVANCED FST AENTRY.
* (LS - LS+1) = LIST ADDRESS.
* TO *SLS* IF EMPTY LIST.
* TO *SMRX* AFTER PRESET FOR REENTRY.
*
* USES T5, CM - CM+4, LP - LP+1.
*
* CALLS CLI.
*
* MACROS CFET, ERROR, SETMS.
RLS BSS 0 ENTRY
LDM FETL CHECK FET LENGTH
NJN RLS1 IF FET CONTAINS THE LIST ADDRESS WORD
ERROR FPE *FET PARAMETER ERROR*
RLS1 LDC ALS SET LIST ADVANCE ON EOR
STM /RMS/BRDV
STM /RMS/BRDF
STM /RMS/EOFA
LDC SLS SET LIST COMPLETION
STM /RMS/CPRB
STM CDAB
LDC TLSA SET LIST INDEX
STD LI
CFET 5 READ LIST POINTER
CRD CM
LDD CM+3 SET LIST POINTER
LPC 4037
STD LS
STM SLSC
LPN 37
STD LP
LDD CM+4
STD LS+1
STD LP+1
LDD FS SET EST ORDINAL
STD T5
SETMS STATUS
LDD CM+4 READ TRT POINTER
SHN 3
ADN TRLL
CRD CM
LDD CM+3 EXTRACT TRT ADDRESS
LPN 77
SHN 14
LMD CM+4
ADC -4000/4
STM CLIA+1
STM CLIB+1
STM CLIC+1
SHN -14
RAM CLIA
STM CLIB
STM CLIC
RJM CLI CONVERT LIST INDICES
LDN 0 TERMINATE LIST
STI LI
LDC TLSA RESET LIST INDEX
STD LI
LDI LI SET TRACK
ZJN RLS3 IF EMPTY LIST
LDD LS
SHN 21-13
MJN RLS2 IF CONTINUATION OF PREVIOUS OPERATION
LDC 4000 SET CONTINUATION FLAG
RAD LS
LDI LI
STD FS+2
LDM 1,LI SET SECTOR
STD FS+3
RLS2 LJM SMRX RETURN
RLS3 LDD FO CLEAR RANDOM FILE FLAG
LPC 3777
STD FO
LDN /CIO/EOF SET EOF STATUS
RAM SLSA
* LJM SLS SET LIST STATUS
SLS SPACE 4,15
** SLS - SET LIST STATUS.
*
* ENTRY (FO) = FET OPTIONS.
* (PC) = ACCUMULATED PRU COUNT.
* (LS - LS+1) = LIST ADDRESS AND CONTINUATION FLAG.
*
* EXIT (FS+4) = LIST STATUS.
* TO *MSP* IF NOT RANDOM FILE OR IF ALL PROCESSING
* DONE FOR SAME CONTINUATION LIST ENTRY.
* TO *COC* IF NEW LIST ENTRY PROCESSED.
*
* USES CM - CM+4.
*
* MACROS CFET.
SLS BSS 0 ENTRY
CFET 5 UPDATE LIST POINTER
CRD CM
LDD LI UPDATE LIST ADDRESS
ADC -TLSA
SHN -1
RAD LS+1
STD CM+4
SHN -14
RAD LS
STD CM+3
SHN -13 COMPLEMENT CONTINUATION FLAG
* IF CONTINUATION, CRI UPDATE IS BASED ON ENTRY POINTED TO.
* OTHERWISE *CRI* IS SET BASED ON PREVIOUS ENTRY.
LMN 1
STD T2
CFET 5
CWD CM
SLSA LDN 0 SET FST STATUS
* LDN /CIO/EOF (END OF LIST - SET EOF STATUS)
STD FS+4
LDC 0 CALCULATE PRUS TRANSFERRED FOR LIST ENTRY
SLSB EQU *-1
NJN SLS2 IF LIST HAS BEEN ADVANCED
LDC 0 (ORIGINAL LIST POINTER CONTINUATION FLAG)
SLSC EQU *-1
SHN 21-13
PJN SLS3 IF NOT CONTINUATION OPERATION INITIALLY
SLS1 LJM MSP COMPLETE MASS STORAGE PROCESSING
* CALCULATE I/O PENALTY.
SLS2 LDD LI
ADC -TLSA
SHN -1
STD T1
LDM TLAA,T1 ADD I/O PENALTY
RAM CFNH+1
SHN -14
RAM CFNH
LCN 2
RAD LI
LMC TLSA
NJN SLS2 IF NOT AT BEGINNING OF LIST
* RETURN RANDOM ADDRESS TO FET.
SLS3 LDD FO
SHN 21-13
PJN SLS1 IF NOT RANDOM FET
CFET 6
CRD CM
* USE PREVIOUS ENTRY UNLESS CONTINUATION, THEN USE CURRENT
* ENTRY.
LDD LS
LPN 37
SHN 6
ADD RA
SHN 6
ADD LS+1
SBD T2
CRD DP
LDD CM+2
LPN 77
STD CM+2
LDD PC ADVANCE RANDOM ADDRESS
SBM SLSB
RAD DP+4
SHN -14
RAD DP+3
LDD DP+4
SHN 6
RAD CM+2
LMD CM+2
ADD DP+3
SHN 6
STD CM+1
SHN -14
STD CM
CFET 6
CWD CM
LJM COC COMPLETE MASS STORAGE PROCESSING
ALS SPACE 4,20
** ALS - ADVANCE LIST.
*
* ENTRY (LI) = LIST INDEX.
* (PC) = ACCUMULATED PRU COUNT.
* (LS - LS+1) = LIST ADDRESS AND CONTINUATION FLAG.
* (TC) = TRACKS TO PROCESS COUNT.
*
* EXIT (LI) = ADVANCED LIST INDEX.
* (T6) = NEW LIST ENTRY CURRENT TRACK.
* (T7) = NEW LIST ENTRY CURRENT SECTOR.
* (LS) = CONTINUATION CLEARED IF RECALL OR END OF LIST.
* (TC) = DECREMENTED IF TRACK SWITCH.
* (SLSC) = (PC) IF NORMAL EXIT.
* TO */RMS/BRD* TO PROCESS READ FOR NEXT LIST ENTRY.
* TO */RMS/CPR* TO COMPLETE READ PROCESSING.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES CM - CM+4.
*
* CALLS RNS.
*
* MACROS SETMS.
ALS BSS 0 ENTRY
LDN 2 ADVANCE LIST INDEX
RAD LI
LDI LI CHECK TRACK
NJN ALS4 IF NOT END OF TABLE
LDD LI CHECK LIST INDEX
ADC -TLSAE
MJN ALS2 IF END OF REQUEST LIST ENCOUNTERED
ALS1 AOM COCA SET RECALL STACK FLAG
UJN ALS3 COMPLETE READ PROCESSING
ALS2 LDN /CIO/EOF SET EOF STATUS
RAM SLSA
ALS3 LDC -4000 CLEAR CONTINUATION FLAG
RAD LS
LJM /RMS/CPR COMPLETE READ PROCESSING
ALS4 LMD T6
ZJN ALS6 IF SAME TRACK
SOD TC DECREMENT TRACK COUNT
NJN ALS5 IF NOT TIME TO RECALL
LDD PC
SBD HN
PJN ALS1 IF 100 OR MORE SECTORS READ
LDN 2 RESET TRACK COUNT
STD TC
ALS5 LDI LI SET NEW TRACK
STD T6
SETMS POSITION
UJN ALS7 EXIT
ALS6 LDM 1,LI
SBD T7
* TIMING OF THIS ROUTINE WHEN PROCESSING CONSECUTIVE SECTORS IS
* CRITICAL. ADDITIONAL CODE MAY CAUSE LOST REVOLUTIONS.
ZJN ALS8 IF NEXT SECTOR IS DESIRED ONE
MJN ALS7 IF ADDRESSES NOT ASCENDING
SBN 5
PJN ALS7 IF ENOUGH TIME TO RESEEK
* READING OF UP TO 5 SECTORS IS DONE INSTEAD OF ISSUING A SEEK
* AS MOST CONTROLLERS ARE NOT FAST ENOUGH TO PROCESS THE SEEK
* AND BE ABLE TO ACCESS THE NEXT SECTOR OR THE ONE FOLLOWING.
LDC BFMS+DTSF READ HEADER WORDS ONLY OPTION
RJM RNS READ NEXT SECTOR
UJN ALS6 LOOP TO DESIRED SECTOR
ALS7 LDM 1,LI SET SECTOR
STD T7
ALS8 LDD PC SAVE SECTORS READ SO FAR
STM SLSB
LJM /RMS/BRD PROCESS NEXT READ
CLI SPACE 4,10
** CLI - CONVERT LIST INDICES.
*
* ENTRY (LI) = INITIAL LIST INDEX.
* (LP - LP+1) = LIST ADDRESS.
*
* EXIT TRACK/SECTOR/PENALTY TABLES BUILT FOR LIST ENTRIES.
*
* USES CM - CM+4, LE - LE+1, RI - RI+1, T1 - T3, T6 - T7.
*
* MACROS ERROR.
CLI SUBR ENTRY/EXIT
CLI1 LDN 1 SET RANDOM INDEX
STD RI+1
SHN -14
STD RI
LDN FSMS SET FIRST SECTOR
STD T7
LDD FS+1 SET FIRST TRACK
STD T6
SHN -2 CHECK FIRST TRACK CONTAINS EOI
CLIA ADC TRTS
CRD CM
LDD T6
LPN 3
STD T1
LDM CM,T1
STD T3
SHN 6
PJN CLI2 IF FIRST TRACK CONTAINS EOI
LDM SLM
STD T3
CLI2 LDD LI CHECK LIST INDEX
ADC -TLSAE
CLI3 PJN CLIX IF LIST FULL
LDD LP CHECK POINTER ADDRESS
SHN 14
LMD LP+1
SBN 2
MJN CLI4 IF LIST ADDRESS .LT. 2
ADN 2
SHN -6
SBD FL
MJN CLI5 IF ADDRESS WITHIN FL
CLI4 ERROR FPE *FET PARAMETER ERROR*
CLI5 LDD LP READ LIST ENTRY
SHN 6
ADD RA
SHN 6
ADD LP+1
CRD CM
LDD LI COMPUTE INDEX INTO PENALTY TABLE
ADC -TLSA
SHN -1
STD T2
LDC 0 (PREVIOUS POSITION)
CLID EQU *-1
SBD CM+3
ZJN CLI5.1 IF THE SAME
PJN CLI5.2 IF PENALTY CHARGE
ADN 1
NJN CLI5.2 IF PENALTY CHARGE
SBN 1
SHN 14
CLI5.1 ADC 0 (PREVIOUS POSITION)
CLIE EQU *-1
SBD CM+4
PJN CLI5.2 IF PENALTY CHARGE
ADC IMPL
MJN CLI5.2 IF PENALTY CHARGE
LDN 0
UJN CLI5.3 NO CHARGE
CLI5.2 LDN IMRL SET PENALTY
CLI5.3 STM TLAA,T2
LDD CM+4 SET LIST INDEX
STD LE+1
ADD CM+3
NJN CLI5.4 IF NOT END OF LIST
LJM CLIX RETURN
CLI5.4 LDD CM+3
STD LE
* SET SECTOR ADVANCE
CLI6 LDD LE+1 SUBTRACT BOTTOM 12 BITS
SBD RI+1
STD T2
PJN CLI7 IF NO BORROW
AOD T2 END AROUND CARRY
LCN 1
UJN CLI8 BORROW FROM UPPER
CLI7 LDN 0
CLI8 ADD LE SUBTRACT TOP 12 BITS
SBD RI
STD T1
PJN CLI9 IF FORWARD
LJM CLI1 RESTART
CLI9 LDD T7 CHECK FOR SECTOR LIMIT
RAD T2
SHN -14
ADD T1
NJN CLI10 IF SECTOR LIMIT PASSED
LDD T2
STM 1,LI
SBD T3
PJN CLI10 IF SECTOR LIMIT PASSED
LDD T6 SET TRACK
STI LI
LDD LE UPDATE RANDOM INDEX
STD RI
STM CLID SAVE POSITION
LDD LE+1
STD RI+1
STM CLIE SAVE POSITION
LDM 1,LI UPDATE SECTOR NUMBER
STD T7
AOD LP+1 ADVANCE LIST POINTER
SHN -14
RAD LP
LDN 2 ADVANCE LIST INDEX
RAD LI
LJM CLI2 LOOP
* ADVANCE TRACK.
CLI10 LDD T3 ADVANCE RANDOM INDEX
SBD T7
RAD RI+1
SHN -14
RAD RI
LDN 0 SECTOR = 0
STD T7
LDD T6 CHECK NEXT TRACK
SHN -2
CLIB ADC TRTS
CRD CM
LDD T6 SET BYTE INDEX
LPN 3
STD T1
LDM CM,T1 SET NEXT TRACK
STD T6
SHN 6
MJN CLI11 IF NEXT TRACK FOUND
ERROR RAD *RANDOM ADDRESS NOT ON FILE*
CLI11 SHN -10
CLIC ADC TRTS
CRD CM
LDD T6
LPN 3
STD T1
LDM CM,T1
STD T3 SET SECTOR LIMIT
SHN 6
PJN CLI12 IF END OF CHAIN
LDM SLM
STD T3
CLI12 LJM CLI6 LOOP
SPACE 4,10
** COMMON DECKS.
MSR$ EQU 1 DEFINE ERROR PROCESSING
MSR EQU CDA ERROR PROCESSOR FOR *COMPRNS*
*CALL COMPRNS
SPACE 4,10
** READ LIST BUFFERS.
USE BUFFER
TLAA EQU * ACCOUNTING PENALTY INCREMENT BUFFER
TLSA EQU TLAA+MRAL+1
TLSAE EQU TLSA+MRAL*2
ERRPL TLSAE+1-BFMS OVERFLOW INTO MASS STORAGE BUFFER
SPACE 4,10
QUAL
ERDO EQU *+5 END OF READ OVERLAYS
SPACE 4,10
OVERFLOW ERMS
WMS OVERLAY (WRITE MASS STORAGE.),MSDO
WMS SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
IP EQU 16 - 17 *IN* POINTER FOR RECALL CALCULATION
WC EQU 35 SECTOR WORD COUNT
NT EQU 36 NEXT TRACK TABLE ADDRESS
BD EQU 37 WORDS OF DATA IN BUFFER
SC EQU 46 SECTOR COUNT
SL EQU 47 NEXT SECTOR/TRACK LINK FLAG
WMS SPACE 4,10
ORG *+2
LJM PRS PRESET FOR WRITE
WSY SPACE 4,10
** WSY - WRITE SYSTEM SECTOR.
*
* EXIT TO *WMS*.
* TO *CDA*, IF ERROR WRITING SYSTEM SECTOR.
*
* CALLS SBA, WSS.
WSY BSS 0 ENTRY
RJM WSS WRITE SYSTEM SECTOR
PJN WSY1 IF NO ERROR
RJM CDA CHECK DEVICE
WSY1 CFET 3 UPDATE OUT POINTER
CWD DP
LDM CFNB CLEAR SYSTEM SECTOR OPERATION FLAG
LPN 37
STM CFNB
LDM WTBP
LMD RA
ZJN WMS IF NO MOVE
RJM SBA SET BUFFER ADDRESSES
* UJN WMS PROCESS WRITE
WMS SPACE 4,10
** WMS - WRITE MASS STORAGE MAIN ROUTINE.
*
* EXIT TO *CDA*, IF MASS STORAGE ERROR.
* TO *MSP*.
*
* USES WC.
*
* CALLS WEI, WTB.
WMS BSS 0 ENTRY
LDD HN SET FULL SECTOR WORD COUNT
STD WC
STM BFMS+1
LJM WTB3 WRITE DATA
* LJM WTB (*WRITECW*)
* LJM WMS1 (*WRITEF*, NO DATA, OPERATION COMPLETE)
* LJM WMS2 (BUFFERED DEVICE SYSTEM SECTOR WRITE)
WMSA EQU *-1
* REENTRY FROM *WTB* FOR EOF WRITE.
* WRITE EOF SECTOR FOR *WRITEF*/*REWRITEF*.
WMS1 LDN 0 PREVENT UPDATE OF OUT POINTER
STM WTBT
LDC WTB18-WTBN+UJNI
STM WTBN
LDC WMS2 SET RETURN ADDRESS FOR *WTB*
STM WTBU
LJM WTB11 WRITE EOF SECTOR
* REENTRY FROM *WTB*.
* WRITE EOI SECTOR.
WMS2 RJM WEI WRITE EOI SECTOR
ZJN WMS3 IF NO ERROR
RJM CDA CHECK DEVICE
WMS3 LDM CFNB SET FILE MODIFIED
LPN 74
* LPN 76 (REWRITE)
WMSB EQU *-1
LMN 3
* LMN 1 (REWRITE)
WMSC EQU *-1
STM CFNB
LDN 2 SET WRITE MODE
STD FS+4
LDM BFMS+2+505+4 WORD COUNT - 500
ADC -500
NJN WMS4 IF EOR/EOF ON *WRITECW*
LDD BS+4 CHECK REQUEST
SHN 21-4
PJN WMS5 IF NOT EOR/EOF
WMS4 LDN 4 SET OPERATION COMPLETE
RAD FS+4
WMS5 LJM MSP PROCESS MASS STORAGE EXIT
WTB SPACE 4,30
** WTB - WRITE BUFFER.
*
* ENTRY (BD) = WORD COUNT OF DATA IN BUFFER.
* (FC) = INTERNAL *CIO* FUNCTION.
* (PC) = 0.
* (RC) = *DRCM* MONITOR FUNCTION CODE.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (DP - DP+4) = *OUT* POINTER.
* (IN - IN+1) = (IP - IP+1) = *IN* POINTER.
* AT *WTB* FOR *WRITECW* OF DATA.
* AT *WTB3* FOR NON-CONTROL WORD WRITE OF DATA.
* AT *WTB6* FOR *WRITECW* SYSTEM SECTOR OPERATION.
* AT *WTB11* TO WRITE EOF SECTOR.
*
* EXIT (PC) = COUNT OF PRUS TRANSFERRED.
* (T6) = ADVANCED CURRENT TRACK.
* (T7) = ADVANCED CURRENT SECTOR.
* (DP - DP+4) = ADVANCED *OUT* POINTER.
* TO *CFN* IF PRESET TRACK ALLOCATION ERROR.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* ERROR TO *ERR* IF CONTROL WORD ERROR.
*
* USES IN+1, NT, SL, T1, T2, T3, WC, CM - CM+4, IP-3, IP+1.
*
* CALLS CHG, MSR, SBA, WDS, WEI.
*
* MACROS ERROR.
WTB25 UJN WMS2 COMPLETE OPERATION
WTB26 RJM WEI WRITE EOI
ZJN WTB27 IF NO ERROR
RJM CDA CHECK DEVICE
WTB27 ERROR BLE *BUFFER CONTROL WORD ERROR*
* *WRITECW* PREPROCESSING FOR DATA BLOCK.
* ENTRY FOR CONTROL WORD WRITE.
* LOOP FOR *WRITECW* AFTER SHORT BLOCK PROCESSED.
WTB BSS 0 ENTRY
LDD HN SET FULL SECTOR WORD COUNT
STM BFMS+1
ADN 2 ALLOW FOR CONTROL WORDS
STD WC
LDC WTB1 RESET FULL BLOCK LOOP
STM WTBU
* LOOP FOR *WRITECW* AFTER FULL BLOCK PROCESSED.
WTB1 LDD BD CHECK FOR EMPTY BUFFER
ZJN WTB25 IF BUFFER EMPTY
LDM BFMS+2+505+4 PREPROCESS HEADER CONTROL WORD
ADC -500
ZJN WTB3 IF FULL BLOCK
PJN WTB26 IF BLOCK .GT. 500 BYTES
ADC 500 CALCULATE WORD COUNT
STD T2 (BYTE COUNT * 103) / 512
SHN 1
ADD T2
STD T1
SHN 3
ADD T2
SHN 2
ADD T1
SHN -9D
STM BFMS+1 SET SECTOR WORD COUNT
ADN 2
STD WC SET CONTROL WORD BLOCK WORD COUNT
SBN 2 SAVE INDEX TO END OF BLOCK
STD T3
SHN 2
RAD T3
LDC WTB SET TO RESTORE FULL BLOCK WORD COUNT
STM WTBU
LDC WTB12+77-WTBN+UJNI
STM WTBN
* ENTRY FOR NON-CONTROL WORD WRITE.
* CHECK AMOUNT OF DATA IN BUFFER.
* *IN* IS NOT READ UP HERE DUE TO TIMING CONSIDERATIONS.
WTB3 BSS 0 ENTRY
LDD IP DATA LENGTH = IN - OUT
SBD DP+3
SHN 14
ADD IP+1
SBD DP+4
PJN WTB4 IF NOT WRAP AROUND
WTBA ADC ** (LIMIT - FIRST)
WTB4 SBD WC
PJN WTB5 IF SUFFICIENT DATA IN BUFFER
LJM WMS2 RETURN
* LJM WTB21 (PROCESS EOR FOR EOR/EOF WRITE)
WTBB EQU *-1
* READ DATA FROM *CIO* BUFFER.
WTB5 STD BD UPDATE BUFFER DATA WORD COUNT
SHN -14
ZJN WTB6 IF .LT. 10000B WORDS OF DATA
LCN 0 SET 7777B WORDS OF DATA
STD BD
* ENTRY FOR *WRITECW* SYSTEM SECTOR OPERATION.
WTB6 LDD DP+3 CHECK FOR WRAP AROUND SECTOR
SHN 14
ADD DP+4
ADD WC
WTBC ADC -** (-LIMIT)
* ADC -** ((-LIMIT)+1) FOR *WRITECW*
MJN WTB7 IF NOT WRAP AROUND SECTOR
STD T2 SET SECOND PART WORD COUNT
NJN WTB9 IF SECOND PART PRESENT
LDD DP+3
SHN 14
ADD DP+4
WTBD ADC ** (RA)
* ADC ** (RA+1) FOR *WRITECW*
CRM BFMS+2,WC
WTBE LDC ** (FIRST)
* LDC ** (LIMIT-1) FOR *WRITECW*
UJN WTB8 UPDATE OUT
* PROCESS NORMAL SECTOR.
WTB7 ADC ** (LIMIT+RA)
WTBF EQU *-2
SBD WC
CRM BFMS+2,WC
WTBG ADC -** (-RA)
* ADC -** (-RA-1) FOR *WRITECW*
WTB8 STD DP+4 UPDATE OUT
SHN -14
STD DP+3
* THE FOLLOWING CHECK MINIMIZES OVERHEAD ON TRACK SWITCH
* AND PREVENTS A *DRCM* BEING ISSUED JUST PRIOR
* TO THE DRIVER NEEDING TO DO AN *LDAM*.
LDD T7
ZJN WTB11 IF TRACK SWITCH
* THE FOLLOWING LINE OF CODE IS MODIFIED VIA *RJM*.
LJM WTB11 WRITE SECTOR
WTBH EQU *-1
* LJM WTB23 (RECALL CPU AFTER FIRST SECTOR)
* LJM WTB23+2 (RECALL CPU)
* LJM WTB24+2 (MONITOR IN POINTER)
UJN WTB11 WRITE SECTOR
* PROCESS WRAP-AROUND SECTOR.
WTB9 LDD WC SET FIRST PART WORD COUNT
SBD T2
STD T1
ZJN WTB10 IF NO FIRST PART
LDD DP+3 READ FIRST PART
SHN 14
ADD DP+4
WTBI ADC ** (RA)
* ADC ** (RA+1) FOR *WRITECW*
CRM BFMS+2,T1
LDD T1 ADVANCE PP BUFFER ADDRESS
SHN 2
ADD T1
WTB10 ADC BFMS+2
STM WTBK
WTBJ LDC ** (FIRST+RA)
CRM **,T2 READ SECOND PART
WTBK EQU *-1
WTBL ADC -** (-RA)
* ADC -** (-RA-1) FOR *WRITECW*
STD DP+4 UPDATE OUT
SHN -14
STD DP+3
* ENTRY TO WRITE EOF SECTOR FOR *WRITEF*/*REWRITEF*.
* ADVANCE CURRENT SECTOR/TRACK.
* RETURN TO *PRS* FOR *WRITECW* OF SYSTEM SECTOR.
WTB11 LDD T7 SET NEXT SECTOR POINTER
* LJM PRS25 (*WRITECW* SYSTEM SECTOR OPERATION)
WTBM EQU *-1
ADN 1
STM BFMS
* CHECK FOR END OF TRACK (IF UPDATE MODE AND/OR REWRITE, AND
* IF PROCESSING ORIGINAL EOI TRACK, CHECK FOR ORIGINAL EOI
* SECTOR). ONCE THE ORIGINAL EOI IS REACHED ON A BUFFERED
* DEVICE, *SETMS RW* MAY NO LONGER BE USED. WRITING BEYOND
* THE ORIGINAL EOI IN UPDATE MODE IS AN ERROR.
LMC ** CHECK FOR END OF TRACK OR ORIGINAL EOI
* LMC (SLM) (END OF TRACK)
* LMC (EOI+1) (ORIGINAL EOI SECTOR)
WTBZ EQU *-1
STD SL
NJP WTB13 IF NOT END OF TRACK (IF NOT ORIGINAL EOI)
WTBAA UJN WTB11.1 SET NEXT TRACK
* PSN (UPDATE MODE AND/OR REWRITE)
* CHECK FOR ORIGINAL EOI TRACK.
LDM 1,NT CHECK NEXT TRACK
LMC **
WTBAB EQU *-1 (ORIGINAL EOI TRACK)
WTBAC NJN WTB11.2 IF NEXT TRACK IS NOT ORIGINAL EOI TRACK
* NJN WTB11.3 (UPDATE MODE - IF NEXT TRACK IS NOT EOI)
LDC * SET CHECK FOR ORIGINAL EOI SECTOR
WTBAD EQU *-1
STM WTBZ
WTB11.1 UJN WTB11.3 SET NEXT TRACK
WTB11.2 LDI NT CHECK CURRENT TRACK
LMM WTBAB
NJN WTB11.3 IF CURRENT TRACK NOT ORIGINAL EOI TRACK
SETMS IO,NF,WDSB CLEAR *RW* (REWRITE) OPTION
ISTORE WTBAA,(UJN WTB11.1) DISABLE ORIGINAL EOI CHECK
LDM SLM RESET SECTOR LIMIT CHECK
STM WTBZ
LMM BFMS
STD SL
NJN WTB13 IF ORIGINAL EOI IS NOT ALSO END OF TRACK
* SET NEXT TRACK.
WTB11.3 AOD NT SET NEXT TRACK
LDI NT CHECK IF NEXT TRACK RESERVED
STM BFMS
NJN WTB13 IF NEXT TRACK RESERVED
LJM WTB19 CHECK TERMINATION CONDITION
* LJM WTB20.1 (UPDATE MODE - WRITE PAST EOI)
WTBAE EQU *-1
* PROCESS *WRITECW* SHORT BLOCK.
WTB12 LDC AODI+PC RESET FULL BLOCK PROCESSING
STM WTBN
LDM BFMS+2+5+4,T3 MOVE NEXT BYTE COUNT
STM BFMS+2+505+4
LDD T3 CHECK FOR EOF BLOCK
NJN WTB13 IF DATA IN BLOCK
LDM BFMS+2,T3
LMN 17
ZJN WTB18 IF EOF
* TRANSFER SECTOR TO DISK.
WTB13 AOD PC INCREMENT PRU COUNT
* UJN WTB12 (PROCESS SHORT BLOCK FOR *WRITECW*)
* UJN WTB18 (PROCESS EOF SECTOR FOR EOF WRITE)
WTBN EQU *-1
ERRPL WTBN-WTB12-40 JUMP OUT OF RANGE
ERRPL WTB18-WTBN-40 JUMP OUT OF RANGE
WTB13.1 LDC BFMS+WCSF
* LDC BFMS+WLSF (*WPHR*)
WTBO EQU *-2
RJM WDS WRITE SECTOR
PJN WTB14 IF NO ERROR
RJM CDA CHECK DEVICE
WTB14 LDD RA CHECK RA
LMC ** (RA)
WTBP EQU *-1
ZJN WTB15 IF NO CHANGE
RJM SBA SET BUFFER ADDRESSES
WTB15 LDD SL CHECK FOR TRACK CHANGE
ZJN WTB16 IF NEW TRACK
AOD T7 INCREMENT SECTOR
* *IN* IS READ UP HERE SO THAT THE OVERHEAD IS NOT ENCOUNTERED
* ON LOGICAL TRACK SWITCH.
WTBQ LDC ** (IN + RA)
WTBR PSN (NON-BUFFERED OR UPDATE MODE FILE)
* CRD IP-3 (BUFFERED)
UJN WTB17 STORE OUT
WTB16 STD T7 RESET SECTOR
LDI NT SET NEXT TRACK
STD T6
* STORE OUT POINTER. THE OUT POINTER IS NOT UPDATED BEFORE THE
* WRITE SO RECOVERABLE ERRORS CAN BE RETRIED WHEN THE DEVICE
* BECOMES ACCESSIBLE.
WTB17 LDC ** (OUT + RA)
WTBS EQU *-2
WTBT CWD DP STORE OUT
* PSN (*CLOSE*)
* PSN (*WRITEF*/*REWRITEF* WRITE EOF SECTOR)
LJM WTB3 TRANSFER NEXT BLOCK
* LJM WTB (*WRITECW* AFTER SHORT BLOCK)
* LJM WTB1 (*WRITECW* AFTER FULL BLOCK)
* LJM WMS1 (EOR BLOCK WRITTEN FOR EOF WRITE)
* LJM WMS2 (EOR BLOCK WRITTEN FOR EOR WRITE)
* LJM WMS2 (EOF BLOCK WRITTEN FOR EOF WRITE)
* LJM WMS2 (*WPHR*)
WTBU EQU *-1
* PROCESS EOF WRITE FOR *WRITECW* AND *WRITEF*/*REWRITEF*.
WTB18 LDM BFMS SET EOF HEADER BYTES
STM BFMS+1
LDN 0
STM BFMS
AOD PC INCREMENT PRU COUNT
UJP WTB13.1 WRITE SECTOR
* PROCESS END OF TRACK TABLE.
WTB19 LDD FC CHECK TERMINATION CONDITION
LPN 14
LMN /CIO/EOI
ZJN WTB20 IF *WRITE*/*REWRITE*/*WRITECW*
* WRITE FUNCTIONS (AND *CLOSE*) OTHER THAN *WRITE*, *REWRITE*,
* OR *WRITECW* SHOULD NOT REQUIRE MORE TRACKS THAN THOSE
* ALLOCATED BY *RMS* IN PRESET PROCESSING.
RJM WEI WRITE EOI SECTOR
LDK SWET SET SYSTEM ERROR FLAG
RJM CHG CONDITIONALLY HANG PP
LJM CFN COMPLETE FUNCTION
WTB20 AOM COCA SET TO ENTER RECALL STACK
LJM WMS2 RETURN
WTB20.1 ENDMS RELEASE CHANNEL
ERROR IFM *INCORRECT MODIFICATION*
* PROCESS EOR SECTOR FOR EOR/EOF WRITE.
WTB21 RAD WC
LDC WMS2 SET RETURN FOR EOR WRITE
* LDC WMS1 (SET RETURN FOR EOF WRITE)
WTBV EQU *-1
STM WTBU
LDD WC GET EOR BLOCK LENGTH
STM BFMS+1
ZJN WTB22 IF ZERO LENGTH BLOCK
LJM WTB6 READ CENTRAL BUFFER
WTB22 LJM WTB11 WRITE EOR SECTOR
* PROCESS CPU RECALL.
WTB23 RJM WTBH MODIFY INSTRUCTION
LDC **+CWQW CHECK RECALL REQUIRED
WTBW EQU *-1
CRD CM
LDD CM+1
SHN 21-12
MJN WTB24 IF RECALL NOT REQUIRED
LDD OA
CWD RC
* CALCULATE DATA IN THE BUFFER.
WTB24 RJM WTBH MODIFY INSTRUCTION
LDD BD
SHN -11
NJN WTB24 IF .GE. 8 SECTORS OF DATA IN THE BUFFER
LDD IP+1
SBD IN+1
ZJN WTB24 IF *IN* NOT CHANGED
RAD IN+1
UJN WTB23 RECALL CPU
SBA SPACE 4,10
** SBA - SET BUFFER ADDRESSES.
* PRESETS CM ADDRESSES IN *WTB*.
* ENTER IF (RA) CHANGES.
*
* ENTRY (FT - FT+1) = *FIRST* POINTER.
* (LM - LM+1) = *LIMIT* POINTER.
*
* MACROS CFET.
SBA SUBR ENTRY/EXIT
LDD RA RA
STM WTBP
SHN 6
SBAA ADN 0
* ADN 1 (*WRITECW*)
STM WTBI+1
STM WTBD+1
LMC 7777 -RA
STM WTBG+1
STM WTBL+1
SHN -14
LMC ADCI
STM WTBI
STM WTBD
LMN 77
STM WTBG
STM WTBL
LDD FT FIRST + RA
SHN 6
ADD RA
SHN 6
ADD FT+1
STM WTBJ+1
SHN -14
LMC LDCI
STM WTBJ
CFET 2 IN + RA
STM WTBS+1
STM WTBQ+1
SHN -14
LMC LDCI
STM WTBS
STM WTBQ
AOM WTBS+1 OUT + RA
SHN -14
RAM WTBS
LDD LM LIMIT + RA
SHN 6
ADD RA
SHN 6
ADD LM+1
STM WTBF+1
SHN -14
LMC ADCI
STM WTBF
LJM SBAX RETURN
SRW SPACE 4,15
** SRW - STATUS LAST SECTOR REWRITE.
*
* ENTRY (MSD) = DRIVER IDENTIFIER.
* (PC) = PRU COUNT WRITTEN.
* (T4) = CHANNEL.
* (T5) = EQUIPMENT.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
*
* EXIT (T7) = CURRENT SECTOR.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES T1, T2, T7.
*
* CALLS MSR, WDS.
SRW SUBR ENTRY/EXIT
LDD PC
ZJN SRWX IF NO SECTORS WRITTEN
LDM MSD
LPN 77
LMN LA6DI
ZJN SRW1 IF *6DI* DRIVER
LMK LA6DJ&LA6DI
NJN SRWX IF NOT *6DJ* DRIVER
SRW1 LDM CHRV CHECK IF CHANNEL CONNECTED
LPN 1
ZJN SRWX IF CHANNEL NOT CONNECTED
LDD T7 CHECK TRACK SWITCH (DRIVER ISSUED *WLSF*)
ZJN SRWX IF STATUS NOT NEEDED
SOD T7
LDC SRW2
STM WDS
LJM .DST1 ENTER DRIVER TO TAKE SECOND GENERAL STATUS
SRW2 PJN SRW4 IF NO ERROR
RJM CDA PROCESS ERROR
SRW4 AOD T7 ADVANCE SECTOR
SRW5 LJM SRWX RETURN
WEI SPACE 4,25
** WEI - WRITE EOI SECTOR.
*
* ENTRY (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
* (NT) = NEXT TRACK POINTER.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FS - FS+4) = FST ENTRY.
* (WEIA) = OLD EOI TRACK TABLE ADDRESS.
* (WEIB) = OLD EOI SECTOR.
* (WEIC) = 1 IF ADDITIONAL TRACKS ALLOWED.
* (WEID) = EOI TRACK SET BY *RTCM*.
* (WEIE) = EOI SECTOR SET BY *RTCM*.
*
* EXIT (FS - FS+4) = UPDATED FST ENTRY.
* (A) = 0 IF NO DISK ERROR.
* CHANNEL RELEASED AND EXCESS TRACKS DROPPED.
*
* USES T1, T2, CM - CM+4.
*
* CALLS DCC, FWB, MSR, SCF, SRW, /WEI/WEI.
*
* MACROS MONITOR.
WEI SUBR ENTRY/EXIT
* CHECK FOR ERROR WRITING SYSTEM SECTOR.
LDD T6
LMD FS+1
NJN WEI1 IF NOT IN FIRST TRACK
LDD T7
ZJN WEIX IF POSITIONED AT SYSTEM SECTOR
WEI1 LDD T6 SET CURRENT TRACK IN FST
STD FS+2
LDD T7 SET CURRENT SECTOR IN FST
STD FS+3
LDD FC CHECK FOR REWRITE
SHN 21-12
PJP WEI3 IF NOT REWRITE
LDC 7777 CHECK TRACK TABLE
WEIA EQU *-1
SBD NT
MJN WEI1.1 IF TRACK BEYOND EOI USED
NJN WEI1.2 IF NOT AT EOI TRACK
LDC 7777 CHECK EOI SECTOR
WEIB EQU *-1
SBD T7
WEI1.1 MJN WEI3 IF SECTOR BEYOND EOI
WEI1.2 RJM SRW STATUS LAST SECTOR REWRITE
RJM DCC DROP CHANNEL WHEN OUTPUT REGISTER CLEAR
LDN 76 ONLY SET FILE WRITTEN IN FST IF REWRITE
STM WMSB
LDN 1 SET FILE WRITTEN
STM WMSC
RJM SCF SET CONTROL BUFFER INDEX INTO FNT
RJM FWB FLUSH WRITE DATA FOR BUFFERED DEVICE
WEIC LDN 0 CHECK TRT MODIFIED
* LDN 1 (ADDITIONAL TRACKS REQUESTED)
ZJN WEI2 IF NO TRT UPDATE NEEDED
LDM WEIB RESET OLD EOI SECTOR
STD CM+3
LDM WEIA RESET OLD EOI TRACK
STD T1
LDI T1 RESET OLD EOI TRACK
UJN WEI5 RESET EOI IN TRT
WEI2 LJM WEI9 RETURN
WEI3 RJM /WEI/WEI WRITE EOI SECTOR
SHN 0-21
RAM WEIF
RJM DCC DROP CHANNEL
RJM SCF SET CONTROL BUFFER INDEX INTO FNT
LDM COCA
SHN 21-13
MJN WEI4.1 IF TO RESTART *CPUCIO* FOR BUFFERED DEVICE
RJM FWB FLUSH WRITE DATA FOR BUFFERED DEVICE
WEI4.1 LDD T7 SET CURRENT SECTOR
STD CM+3
LDD T6 SET CURRENT TRACK
WEI5 LPC 3777
STD CM+2
LMC 0 CHECK EOI ALREADY SET CORRECTLY BY *RTCM*
WEID EQU *-1
LMC 4000
NJN WEI6 IF EOI NOT ON SAME TRACK
LDC 0 CHECK EOI SECTOR CORRECT IN TRT
WEIE EQU *-1
LMD CM+3
ZJN WEI2 IF EOI CORRECT IN TRT
WEI6 LDD T5 SET EQUIPMENT
STD CM+1
LDM PMFF CHECK FILE TYPE
NJN WEI7 IF NOT DIRECT ACCESS PERMANENT FILE
LDC 4000 SET TO CHECKPOINT DEVICE
RAD CM+1
WEI7 MONITOR DTKM DROP TRACKS AND UPDATE TRT
* COMPUTE COUNT OF SECTORS EITHER ADDITIONALLY ALLOCATED, OR
* RETURNED TO THE SYSTEM FOR THE CURRENT WRITE OPERATION.
* ACTUAL COUNT OF SECTORS RETURNED VIA DTKM IS IN CM+3 - CM+4
LDM CFNJ COMPUTE NET STORAGE COMSUMED
SBD CM+3
SHN 14
ADM CFNJ+1
SBD CM+4 SECTORS ALLOCATED MINUS SECTORS RETURNED
PJN WEI8 IF MORE SECTORS USED THAN RETURNED
LDN CICS CHANGE TO INCREMENT FUNCTION
STM CFNI
LDD CM+3
SBM CFNJ
SHN 14
ADD CM+4
SBM CFNJ+1
WEI8 STM CFNJ+1
SHN -14
STM CFNJ
WEI9 LDN 0
WEIF EQU *-1
* LDN 1 (ERROR OCCURRED ON THE WRITE)
LJM WEIX RETURN
RWF SPACE 4,10
** RWF - REWRITE FILE ON DIFFERENT TRACK.
*
* IF IT IS POSSIBLE TO START THE OPERATION OVER (I.E. THE
* FET POINTERS HAVE NOT BEEN CHANGED), TRY THE OPERATION
* ON A DIFFERENT TRACK. THIS IS ACCOMPLISHED BY RETURNING
* THE BAD TRACK AND RESTARTING THE OPERATION. IF IT CANNOT
* BE RESTARTED AND THE FET POINTERS HAVE BEEN ADVANCED, THE
* FILE IS RESET TO THE EMPTY STATE AND AN ERROR IS RETURNED
* BECAUSE IT IS NOT POSSIBLE TO DETERMINE WHETHER OR NOT
* THE SYSTEM SECTOR WAS PROPERLY WRITTEN.
*
* EXIT TO *CDA* IF NON-MEDIA ERROR ON PRE-ASSIGNED DEVICE.
* TO *TMS* IF THE OPERATION CAN BE RESTARTED ON ANOTHER
* TRACK.
*
* NOTE - THIS SUBROUTINE IS ONLY USED BY THE ERROR PROCESSOR.
* FET POINTERS HAVE BEEN ADVANCED - DROP TRACKS, LEAVE FST
* IN ORIGINAL VALUE AND CONTINUE WITH ERROR PROCESSING.
RWF5 LDD FS+1 SET TRACK NUMBER
STD CM+2
LDM RWFC
ZJN RWF6 IF NOT PRE-ASSIGNED TO A DEVICE
LDD CM+2 SET EOI
LPC 3777
STD CM+2
UJN RWF7 DROP TRACKS
RWF6 STD FS CLEAR EQUIPMENT ASSIGNMENT
STD FS+1
RWF7 MONITOR DTKM
RWF SUBR ENTRY/EXIT
RWFA LDN ZERL SET UP MONITOR FUNCTION PARAMETERS
* UJN RWFX (NON-MEDIA ERROR ON PRE-ASSIGNED DEVICE)
CRD CM
LDD T5
STD CM+1
LDD IR+1
SHN 21-5
MJN RWF1 IF AUTORECALL
LDD T7
RWFB SBN FSMS+1
* SBN FSMS (SYSTEM SECTOR DATA IS IN CM BUFFER)
PJN RWF5 IF OPERATION ADVANCED PAST SYSTEM SECTOR
LDD T6
LMD FS+1
NJN RWF5 IF OPERATION ADVANCED PAST SYSTEM SECTOR
RWF1 LDD TH IMMEDIATE RETURN IF INACCESSIBLE DEVICE
RAD CM+1
LDC *
RWFC EQU *-1
ZJN RWF3 IF NOT PRE-ASSIGNED TO A DEVICE
LDM DCSA+1
LPN 77
LMN PARE
ZJN RWF2 IF MEDIA ERROR
* NON-MEDIA ERROR ON PRE-ASSIGNED DEVICE - RETURN TO *CDA* TO
* RESTART THE JOB OR PROCESS THE ERROR.
RWF1.1 LDM DCSA+1 SET UP TO RECALL JOB AND RESTART OPERATION
LPC 5777 CLEAR UNRECOVERABLE FLAG
STM RDCT
ISTORE RWFA,(UJN RWFX)
LJM CDA+1 REDETERMINE PROPER PROCESSING FOR ERROR
* MEDIA ERROR ON PRE-ASSIGNED DEVICE - REQUEST NEW TRACK ON
* SAME DEVICE, RETURN PREVIOUS TRACK, AND RESTART THE
* OPERATION.
RWF2 MONITOR RTCM
LDD CM+1 CHECK STATUS
SHN 21-11
MJN RWF1.1 IF FUNCTION CANT BE PROCESSED
LDD CM+4
UJN RWF4 DROP THE OLD TRACK CHAIN
* THE DEVICE WAS CHOSEN BY THIS *1MS* CALL - DROP THE TRACKS,
* LEAVE THE FST FIRST TRACK = 0, AND RESTART THE OPERATION.
RWF3 STD FS
RWF4 STD FS+1
LDD T6 DROP TRACKS
STD CM+2
MONITOR DTKM
* NOTE - THE *DTKM* STATUS IS NOT CHECKED. IF TRACKS CANNOT
* BE DROPPED ON AN INACCESSIBLE ISHARE DEVICE, THEY WILL JUST
* BE LEFT RESERVED UNTIL THE NEXT TIME THE DEVICE IS RECOVERED
* BY *MSM*. IT IS BETTER TO LEAVE THE TRACKS RESERVED AND LET
* THE JOB CONTINUE THAN TO TIE UP THE PP TRYING TO DROP THEM.
NFA FA,R
ADK FSTL
CWD FS
LDC * RESTORE FLAGS
RWFD EQU *-1
STM RCRF
LJM TMS RESTART THE OPERATION
SPACE 4,10
** COMMON DECKS.
QUAL WEI
*CALL COMPWEI
QUAL *
WCS$ EQU 0
*CALL COMPWSS
TRTK SPACE 4,10
** TRTK - TABLE OF RESERVED TRACKS.
* ENTRY = 1 WORD.
*
*T, 12/ TK
* TK TRACK IN FILE CHAIN
TRTK BSS 0
WDSB SPACE 4,10
** WDSB - WRITE ERROR PROCESSING BUFFER.
* THIS BUFFER IS USED STRICTLY BY THE DRIVER ERROR PROCESSOR
* WHEN A WRITE ERROR IS ENCOUNTERED ON THE SECTOR PREVIOUS TO
* A SECTOR CURRENTLY BEING WRITTEN. THIS SPACE MAY BE
* OVERLAYED BY THE ERROR PROCESSING OVERLAY.
WDSB EQU TRTK+202
ERRNG BFMS-WDSB-502 WDSB EXTENDS INTO BFMS
SPACE 4,10
QUAL
EWTO EQU /WMS/WDSB+5 END OF WRITE MASS STORAGE OVERLAY
QUAL *
TITLE WRITE MASS STORAGE PRESET.
PRS SPACE 4,15
** PRS - WRITE MASS STORAGE PRESET.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FS - FS+4) = FST ENTRY.
* (FT - OT+1) = BUFFER POINTERS.
*
* EXIT (BD) = WORD COUNT OF DATA IN BUFFER.
* (DP - DP+4) = *OUT* POINTER.
* (IP - IP+1) = *IN* POINTER.
*
* USES SC, WC.
*
* CALLS GNT, RMS, SBA.
*
* MACROS ERROR, PAUSE.
PRS BSS 0 ENTRY
LDC 500 SET BYTE COUNT FOR *WMS* COMPLETION CODE
STM BFMS+2+505+4
LDM RCRF SAVE RESTART FLAG STATUS
STM RWFD
* SET BUFFER RELATED ADDRESSES.
LDD LM LIMIT - FIRST
SBD FT
SHN 14
ADD LM+1
SBD FT+1
STM WTBA+1
STM PRSA+1
SHN -14
LMC ADCI
STM WTBA
STM PRSA
LDC ADCI+77 -LIMIT
LMD LM
STM WTBC
LCN 0
LMD LM+1
STM WTBC+1
LDD FC
SHN 21-5
PJN PRS1 IF NOT *WRITECW*
AOM WTBC+1 ADJUST FOR CONTROL WORDS
SHN -14
RAM WTBC
LDD LM SET LIMIT-1
SHN 14
LMD LM+1
SBN 1
UJN PRS2 SET BOUNDARY CONDITION FOR *WTB*
PRS1 LDD FT SET FIRST
SHN 14
LMD FT+1
PRS2 STM WTBE+1
SHN -14
RAM WTBE
* CHECK AMOUNT OF DATA IN THE BUFFER.
LDD IN+1 SET *IN* POINTER
STD IP+1
LDD IN CHECK DATA IN BUFFER
STD IP
SBD OT LENGTH = IN - OUT
SHN 14
ADD IN+1
SBD OT+1
PJN PRS3 IF NO WRAP AROUND
PRSA ADC ** (LIMIT - FIRST)
PRS3 STD BD SAVE WORD COUNT OF DATA IN BUFFER
SHN 21-5
STD SC SAVE NUMBER OF PRUS OF DATA
NJN PRS4 IF DATA IN BUFFER
LDD FC
SHN 21-5
MJN PRS5 IF *WRITECW* WITH NO DATA
SHN 5-21+22 GET TERMINATION CONDITION
LPN 14
LMN /CIO/EOF
NJN PRS4 IF NOT EOF OPERATION
LDD FS+4 CHECK LAST STATUS
LPN 6
LMN 2
ZJN PRS4 IF LAST OPERATION INCOMPLETE WRITE
LDC WMS1 PREVENT BUFFER WRITE
STM WMSA
PRS4 LDD SC
NJN PRS7 IF AT LEAST ONE SECTOR IN BUFFER
LDD FC CHECK TERMINATION CONDITION AND *WRITECW*
LPN 54
ZJN PRS5 IF *WPHR*
LMN /CIO/EOI
NJN PRS7 IF NOT BUFFERED WRITE
PRS5 LDM RCRF CHECK FOR DATA PREVIOUSLY TRANSFERRED
SHN 21-6
MJN PRS6 IF DATA ALREADY TRANSFERRED
ERROR UCF *UNNECESSARY CIO FUNCTION*
PRS6 LJM CFN COMPLETE FUNCTION
PRS7 LDD SC CHECK DATA WORD COUNT
SHN -6
ZJN PRS8 IF LESS THAN 10000B WORDS OF DATA
LCN 0 SET 7777B WORDS OF DATA
STD BD
PRS8 LDD FC
LPN 54
NJN PRS9 IF NOT *WPHR*
LDC WMS2 SET TERMINATION CONDITION
STM WTBU
LDC LDCI+WLSF/10000 SET WRITE LAST SECTOR
STM WTBO
LDN 1
LJM PRS14 SET SECTOR COUNT TO 1 FOR *WPHR*
PRS9 LMN /CIO/EOI+40
ZJN PRS11 IF *WRITECW*
LMN 40
ZJN PRS10 IF NOT EOR/EOF OPERATION
LJM PRS15 CALCULATE PRU COUNT FOR EOR/EOF OPERATION
PRS10 LDD IR+1 CHECK RECALL STATUS
SHN 21-5
PJN PRS12 IF NOT AUTO RECALL
LJM PRS17 CHECK FILE POSITION
PRS11 AOM SBAA SET TO ALLOW FOR HEADER WORD
LDC WTB SET LOOP ADDRESS
STM WMSA
* READ FIRST CONTROL WORD.
LDD OT
SHN 6
ADD RA
SHN 6
ADD OT+1
CRM BFMS+2+505,ON
LDD IR+1 CHECK AUTO RECALL
SHN 21-5
MJN PRS13 IF AUTO RECALL
PRS12 LDD CP SET CONTROL POINT ADDRESS
RAM WTBW
LDC CRDI+IP-3 SET TO READ IN
STM WTBR
LDC WTB23 SET TO RECALL CPU AFTER FIRST SECTOR
STM WTBH
PRS13 LDN 0 SET TO REDUCE SECTOR COUNT TO USER LIMIT
STM CFSA
AOM RTCA
LDC RWPC SET DEFAULT PRU COUNT
PRS14 STD SC
UJN PRS17 CHECK FILE POSITION
PRS15 LMN /CIO/EOF&/CIO/EOI
NJN PRS16 IF NOT EOF OPERATION
LDC WMS1 SET RETURN ADDRESS FOR EOF WRITE
STM WTBV
AOD SC COUNT EOF SECTOR
PRS16 AOD SC COUNT EOR SECTOR
LDC WTB21
STM WTBB
LDD FC CHECK FOR *CLOSE* OPERATION
SHN -6
LPN 17
LMN /CIO/CLO
NJN PRS17 IF NOT CLOSE
STM WTBT PREVENT UPDATE OF OUT POINTER
* CHECK FILE CURRENT POSITION AT EOI.
PRS17 AOD SC COUNT EOI SECTOR
LDD FS+2 GET CURRENT TRACK
ZJN PRS19 IF FILE NOT USED
RJM GNT GET NEXT TRACK POINTER
SHN 6
MJN PRS18 IF NOT AT EOI TRACK
SHN -6
SBD FS+3
ZJN PRS19 IF AT EOI SECTOR
PRS18 LDD FS+4
LPN 2
ZJN PRS20 IF LAST OPERATION NOT WRITE
AOM PRSB SET REWRITE FLAG
PRS19 LDD FC CLEAR REWRITE FLAG
SHN 0-12+22
SCN 1
PRSB LMN 0
* LMN 1 (SET REWRITE FLAG)
SHN 12-0
STD FC
STM ICFC
ERRNG *-TRTK-202 CHECK TRACK TABLE LENGTH
PRS20 RJM RMS RESERVE MASS STORAGE
* THE *LAST OPERATION WRITE* FLAG MUST BE WRITTEN TO THE
* CM COPY OF THE FST BEFORE THE WRITE OPERATION BEGINS
* IN CASE THE OPERATION IS INTERRUPTED BY A SYSTEM HANG.
* *REC*, ON A LEVEL 3, CHECKS THIS FLAG TO DETERMINE IF IT
* SHOULD VERIFY THAT FILES HAVE AN EOI AND ADD ONE TO FILES
* THAT DONT. THE FST IS UPDATED AGAIN WHEN THE WRITE OPERATION
* IS COMPLETE.
LDD FS+4 SET THE WRITE MODE FLAG
SCN 2
LMN 2
STD FS+4
NFA FA,R REWRITE THE FST ENTRY
ADK FSTL
CWD FS
LDN 0 BUILD OUT POINTER
STD DP
STD DP+1
STD DP+2
LDD OT
STD DP+3
LDD OT+1
STD DP+4
PAUSE NE
RJM SBA SET BUFFER ADDRESSES
LDD FS+2
ZJN PRS21 IF FIRST WRITE FOR NEW FILE
LJM WMS PROCESS DATA WRITE
PRS21 LDD FS+4
SHN 21-13
MJN PRS24 IF SYSTEM SECTOR OPERATION
LJM WSY WRITE SYSTEM SECTOR
PRS22 ERROR IRQ *INCORRECT I/O REQUEST*
PRS23 ERROR BLE *BUFFER CONTROL WORD ERROR*
* PROCESS *WRITECW* SYSTEM SECTOR OPERATION.
PRS24 LDD FC
SHN 21-5
PJN PRS22 IF NOT *WRITECW*
LDM BFMS+2+505+4
LMC 77*5
NJN PRS23 IF WRONG WORD COUNT
LDC 77+2 SET WORD COUNT OF DATA IN BUFFER
STD WC
LDD BD UPDATE BUFFER WORD COUNT
SBD WC
MJN PRS23 IF BUFFER CONTROL WORD ERROR
STD BD
SOM RWFB
LDD HN SET RETURN TO PRESET
ERRNZ 100-LJMI ADJUST IF INSTRUCTION VALUE CHANGES
STM WTBM
LDC PRS25
STM WTBM+1
LJM WTB6 READ CENTRAL BUFFER
* COMPLETE *WRITECW* SYSTEM SECTOR OPERATION.
PRS25 LDC LDDI+T7 RESET INSTRUCTIONS
STM WTBM
LDC ADNI+1
STM WTBM+1
LDM BFMS+2+500+4 MOVE WORD COUNT FOR NEXT PRU
STM BFMS+2+505+4
LJM WSY WRITE SYSTEM SECTOR
TITLE WRITE PRESET SUBROUTINES.
CFL SPACE 4,10
** CFL - CHECK FILE SIZE LIMIT.
*
* ENTRY (DP - DP+1) = ADDITIONAL FILE SIZE ALLOWED
* IN SECTORS.
*
* EXIT (A) .LT. 0 IF FILE SIZE LIMIT EXCEEDED.
* (DP - DP+1) = REMAINING ADDITIONAL FILE SIZE ALLOWED
* IN SECTORS.
CFL2 LDD DP
ADD DP+1
ZJN CFL1 IF LIMIT REACHED
CFL SUBR ENTRY/EXIT
LDD DP+1
SBM SLM
STD DP+1
PJN CFL2 IF NO UNDERFLOW
AOD DP+1
SOD DP
PJN CFL2 IF LIMIT NOT EXCEEDED
CFL1 LCN 0 INDICATE FILE SIZE LIMIT EXCEEDED
UJN CFLX RETURN
CFS SPACE 4,20
** CFS - CHECK FILE SIZE.
*
* ENTRY (FS - FS+4) = FST ENTRY.
* (FA) = FNT ORDINAL IN NEGATIVE FL.
* (SC) = ADDITIONAL SECTOR COUNT, INCLUDING EOI TRACK.
*
* EXIT (A) .LT. 0 IF NO ADDITIONAL TRACKS NEEDED.
* .EQ. 0 IF TRACKS REQUIRED FOR BUFFERED WRITE.
* .GT. 0 IF TRACKS REQUIRED FOR NON-BUFFERED WRITE.
*
* ERROR TO *ERR* IF FILE SIZE LIMIT EXCEEDED.
*
* USES SC, T2, CM - CM+4, DP - DP+2.
*
* CALLS CFL, GNT, RJC.
*
* MACROS ERROR, NFA.
CFS SUBR ENTRY/EXIT
LDD SC CHECK ROOM FOR WRITE
SBM SLM
STD SC
SBN 1
MJN CFSX IF SUFFICIENT TRACKS ASSIGNED
NFA FA,R GET FNT+2 WORD
ADN FUTL
CRD CM
LDD CM+2 GET FILE LIMIT INDEX
SHN -6
LPN 7
SHN 1 SET INDEX FOR TABLE
STD T2
NJN CFS0 IF NON-ZERO INDEX
LDM PMFF
NJN CFS0 IF NOT DIRECT ACCESS PERMANENT FILE
LDD CP GET JOB SERVICE CLASS
ADN TFSW
CRD CM
SFA EJT,CM
ADN SCLE
CRD CM
LDD CM GET VALUE FROM JOB CONTROL AREA
SHN -6
RJM RJC READ JOB CONTROL AREA
ZJN CFS0 IF SERVICE CLASS UNDEFINED
ADN PFCT
CRD CM
LDD CM SET SERVICE CLASS *DS* VALUE
SHN -11
LPN 7
SHN 1
STD T2
CFS0 LDM CFSB,T2 SET LIMIT
STD DP
LDM CFSB+1,T2
STD DP+1
ADD DP
ZJN CFS2 IF UNLIMITED
LDD FS+1 FIRST TRACK
SHN 6
CFS1 SHN -6
RJM GNT GET NEXT TRACK
RJM CFL CHECK FILE LIMIT
MJN CFS6 IF FILE SIZE LIMIT EXCEEDED
LDD T3
SHN 6
MJN CFS1 IF NOT EOI TRACK
LDD DP CHECK IF SECTORS NEEDED WITHIN LIMIT
SHN 14
ADD DP+1
SBD SC
PJN CFS2 IF ADDITIONAL SECTORS WITHIN USER LIMIT
LDD SC SAVE SECTOR COUNT
STD DP+2
CFSA UJN CFS5 CHECK IF REQUIRED TRACKS WITHIN LIMIT
* PSN (VARIABLE SECTOR COUNT)
LDD DP+1 REQUEST UP TO 1 TRACK OVER LIMIT
STD SC
CFS2 LDM CFSA RETURN BUFFERED/NON-BUFFERED WRITE STATUS
CFS3 LJM CFSX RETURN
CFS4 RJM CFL CHECK FILE LIMIT
MJN CFS7 IF FILE SIZE LIMIT EXCEEDED
CFS5 LDD DP+2 COUNT SECTORS FOR ADDITIONAL TRACKS
SBM SLM
STD DP+2
SBN 1
PJN CFS4 IF MORE TRACKS NEEDED
UJN CFS2 RETURN
CFS6 LDM CFSA CHECK IF BUFFERED WRITE
NJN CFS7 IF NOT VARIABLE SECTOR COUNT
LDD FS+3 CHECK CURRENT SECTOR AT END OF TRACK
ADN 1
SBM SLM
MJN CFS3 IF LIMIT TRACK NOT FULL
CFS7 ERROR FTL *FILE TOO LONG*
CFSB BSS 0 TABLE OF DIRECT ACCESS FILE SIZE LIMITS
CON 0,0
CON /PFM/DSRNG1/100,/PFM/DSRNG1*100-/PFM/DSRNG1/100*10000
CON /PFM/DSRNG2/100,/PFM/DSRNG2*100-/PFM/DSRNG2/100*10000
CON /PFM/DSRNG3/100,/PFM/DSRNG3*100-/PFM/DSRNG3/100*10000
CON /PFM/DSRNG4/100,/PFM/DSRNG4*100-/PFM/DSRNG4/100*10000
CON /PFM/DSRNG5/100,/PFM/DSRNG5*100-/PFM/DSRNG5/100*10000
CON /PFM/DSRNG6/100,/PFM/DSRNG6*100-/PFM/DSRNG6/100*10000
CON /PFM/DSRNG7/100,/PFM/DSRNG7*100-/PFM/DSRNG7/100*10000
CMA SPACE 4,10
** CMA - CHECK FILE MODIFICATION ALLOWED.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
*
* ERROR TO *ERR* IF MODIFICATION NOT ALLOWED.
*
* MACROS ERROR.
CMA SUBR ENTRY/EXIT
LDM FACF CHECK FILE ACCESS FLAGS
LPN 30
ZJN CMAX IF NO RESTRICTIONS
SHN 21-3
PJN CMA1 IF MODIFICATION NOT ALLOWED
LDD FC CHECK FOR REWRITE
SHN 21-12
MJN CMAX IF REWRITE
CMA1 ERROR IFM *INCORRECT MODIFICATION*
GNT SPACE 4,10
** GNT - GET NEXT TRACK POINTER.
*
* ENTRY (A) = CURRENT TRACK POINTER.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (A) = (T3) = NEXT TRACK POINTER.
* (T2) = CURRENT TRACK POINTER.
* (T5) = EQUIPMENT IF INITIAL CALL.
*
* USES T2, T3, CM - CM+4.
*
* MACROS SFA.
GNT2 SHN -2 READ TRT WORD
GNTB ADC **
CRD CM
LDD T2 SET BYTE INDEX
LPN 3
STD T3
LDM CM,T3 GET NEXT TRACK POINTER
STD T3
GNT SUBR ENTRY/EXIT
STD T2 SAVE CURRENT TRACK POINTER
GNT1 LDD FS
* UJN GNT2 (TRT ADDRESS PRESET)
GNTA EQU *-1
STD T5
SFA EST GET EST ENTRY
ADK EQDE
CRD CM
LDD CM+4 MST ADDDRESS / 10
SHN 3
ADN TRLL READ TRT POINTER
CRD CM
LDD CM+3 EXTRACT TRT ADDRESS
LPN 77
SHN 14
LMD CM+4
SBD TH COMPENSATE FOR TRACK LINK FLAG (4000/4)
STM GNTB+1 SET TRT BASE ADDRESS
SHN -14
RAM GNTB
ISTORE GNTA,(UJN GNT2)
LDD T2
UJN GNT1 GET NEXT TRACK POINTER
RTC SPACE 4,15
** RTC - REQUEST TRACK CHAIN.
*
* ENTRY (A) = TRACK PARAMETER OR DEVICE SELECTION.
* (T5) = EQUIPMENT IF NONZERO.
* (SC) = SECTOR COUNT.
*
* EXIT (A) = FIRST TRACK ASSIGNED.
* (CM+1) = EQUIPMENT.
*
* ERROR TO *ERR* IF MS PRU LIMIT OR TRACK LIMIT.
*
* USES CM - CM+4, DP - DP+4.
*
* MACROS ERROR, MONITOR.
RTC6 ERROR PRL *PRU LIMIT*
RTC SUBR ENTRY/EXIT
STD CM+2 SET TRACK PARAMETER/DEVICE SELECTION
LDD CP READ MASS STORAGE LIMIT WORD
ADN ACLW
CRD DP
LDD DP+3 CHECK MASS STORAGE PRU LIMIT
LPN 77
SHN 14
LMD DP+4
ZJN RTC6 IF JOB PRU LIMIT EXCEEDED
LDD CM+2 SAVE TRACK PARAMETER/DEVICE SELECTION
STD DP
RTC1 LDD T5 SET EQUIPMENT
ADD TH IMMEDIATE RETURN IF INACCESSIBLE DEVICE
STD CM+1
LDM PMFF CHECK FILE TYPE
NJN RTC2 IF NOT DIRECT ACCESS PERMANENT FILE
LDC 4000 SET DEVICE CHECKPOINT
RAD CM+1
RTC2 LDM FSAL GET FILE SECURITY ACCESS LEVEL
ADN 40 SET ACCESS LEVEL SELECTION
SHN 6
STD CM+3
LDD SC SET SECTOR COUNT
STD CM+4
MONITOR RTCM ASSIGN MASS STORAGE SPACE
LDD CM+1 CHECK STATUS
SHN 21-11
PJN RTC2.1 IF FUNCTION PROCESSED
ISTORE CDAA,(UJN CDA4) SKIP EOI WRITE
LDD FS SET EST ORDINAL
STM ERSD
RJM CDA CHECK DEVICE ACCESSIBILITY
RTC2.1 LDD CM+4
ZJN RTC4 IF NO TRACKS ASSIGNED
LDD CM+2 SAVE NEW EOI TRACK
STM WEID
LDD CM+3 SAVE NEW EOI SECTOR
STM WEIE
AOM WEIC SET TRT MODIFIED FLAG
LDM RCRF CHECK IF IN RECALL STACK FOR TRACK LIMIT
LPN 77
LMN TRLR
NJN RTC3 IF NO PRIOR TRACK LIMIT
LDD CP CLEAR CONSOLE MESSAGE
ADN MS2W
CWD CM
RTC3 LDD CM+4 RETURN FIRST TRACK ASSIGNED
LJM RTCX RETURN
RTC4 LDN 0 CHECK FOR BUFFERED WRITE
* LDN 1 (VARIABLE SECTOR COUNT)
RTCA EQU *-1
ZJN RTC5 IF NOT VARIABLE SECTOR COUNT
SOM RTCA
LDN 3 SET MINIMUM SECTOR COUNT
STD SC
LDD DP RESET TRACK PARAMETER/DEVICE SELECTION
STD CM+2
LJM RTC1 RETRY REQUEST FOR ONE TRACK
RTC5 ERROR TKL *TRACK LIMIT*
RMS SPACE 4,20
** RMS - RESERVE MASS STORAGE SPACE.
*
* ENTRY (FS - FS+4) = FST ENTRY.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (SC) = SECTOR COUNT TO WRITE.
*
* EXIT (T5) = EQUIPMENT.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (NT) = TRACK TABLE ADDRESS.
* (FS - FS+1) = EQUIPMENT AND FIRST TRACK ASSIGNED
* IF NEW FILE.
* (TRTK) = TABLE OF RESERVED TRACKS.
*
* USES SC, CM - CM+4.
*
* CALLS CFS, CMA, GNT, RTC.
*
* MACROS NFA, SETMS.
* COPY EXISTING TRACKS FROM TRT TO TRACK TABLE.
RMS8 STI NT ENTER TRACK TABLE
RJM GNT GET NEXT TRACK TABLE
SHN 6
PJN RMS10 IF EOI LINK
AOD NT ADVANCE TRACK TABLE ADDRESS
LDD SC CHECK SECTOR COUNT
SBM SLM
MJN RMS9 IF ROOM FOR WRITE
ZJN RMS9 IF EXACTLY FILLS TRACK
STD SC UPDATE SECTOR COUNT
LDD T3 SET NEXT TRACK
UJN RMS8 LOOP TO EOI OR ROOM FOR WRITE
* CHECK FILE MODIFICATION ALLOWED.
RMS9 RJM CMA CHECK MODIFICATION ALLOWED
LJM RMS17 PROCESS EXIT
* SET EOI POSITION.
RMS10 AOD NT ADVANCE TRACK TABLE ADDRESS
RMSB SBN 1
* LJM RMS12 (FIRST WRITE OF NEW FILE)
STM WEIA SET TRACK TABLE ADDRESS
LDD T3 SET ORIGINAL EOI SECTOR
STM WEIB
ADN 1
STM WTBAD
LDM FACF CHECK FILE ACCESS FLAGS
LPN 30
LMN 10
ZJN RMS10.1 IF UPDATE MODE
LDD FC
SHN 21-12
PJN RMS10.4 IF NOT REWRITE
RMS10.1 ISTORE WTBAA,(PSN) FORCE CHECK FOR ORIGINAL EOI TRACK
LDD T2 SAVE ORIGINAL EOI TRACK
STM WTBAB
LMD FS+2
NJN RMS10.2 IF NOT CURRENTLY AT EOI TRACK
LDM WTBAD FORCE CHECK FOR ORIGINAL EOI SECTOR
STM WTBZ
RMS10.2 LDM FACF CHECK FILE ACCESS FLAGS
LPN 30
LMN 10
NJN RMS10.4 IF NOT UPDATE MODE
ISTORE WTBAC,(NJN WTB11.3) STOP TRANSFER AT ORIGINAL EOI
LDC WTB20.1 SET ERROR FOR WRITE PAST EOI
STM WTBAE
RMS10.3 LJM RMS9 CHECK IF MODIFICATION ALLOWED
RMS10.4 LDD T3
SBD SC
PJN RMS10.3 IF NO FILE EXTENSION
LDM FACF CHECK FILE ACCESS FLAGS
LPN 30
ZJN RMS12 IF NO RESTRICTIONS
LDD T2
LMD FS+2
NJN RMS11 IF NOT AT EOI TRACK
LDD T3
LMD FS+3
ZJN RMS12 IF AT EOI SECTOR
RMS11 RJM CMA CHECK MODIFICATION ALLOWED
RMS12 LDD T2 SAVE TRACK LINK
STD SL
* CHECK MASS STORAGE LIMIT AND RESERVE ADDITIONAL TRACKS.
RJM CFS CHECK FILE SIZE
MJN RMS17 IF SUFFICIENT TRACKS ASSIGNED
NJN RMS14 IF NOT BUFFERED WRITE
LDD SC
RMS13 SBM SLM
PJN RMS13 IF MORE TRACKS NEEDED
LMC 777777
RAD SC ROUND SECTOR COUNT UP TO END OF TRACK
RMS14 LDD SL
RJM RTC REQUEST TRACK CHAIN
RMS15 SHN 6
RMS16 SHN -6
STI NT ENTER TRACK TABLE
RJM GNT GET NEXT TRACK
AOD NT ADVANCE TRACK TABLE
LDM SLM ACCUMULATE COUNT OF SECTORS
RAM CFNJ+1
SHN -14
RAM CFNJ
LDD T3 CHECK NEXT LINK
SHN 6
MJN RMS16 IF MORE TRACKS
RMS17 LDN 0 INDICATE END OF RESERVED TRACK TABLE
STI NT
LDC TRTK RESET TRACK TABLE ADDRESS
STD NT
RMS SUBR ENTRY/EXIT
LDC TRTK SET TRACK TABLE ADDRESS
STD NT
LDD FS+3 BIAS SECTOR COUNT WITH CURRENT SECTOR
STD T7
RAD SC
LDD FS+2
ZJN RMS1 IF FILE NOT USED
LJM RMS5 BUILD TRACK TABLE
RMS1 AOD SC COUNT SYSTEM SECTOR
LDD FS GET EQUIPMENT ASSIGNMENT
STM RWFC
STD T5
LDD FS+1
NJN RMS2 IF FIRST TRACK ASSIGNED
LDC RMS15 SET TO BYPASS TRACK LINK SEARCH
STM RMSA
RJM SMA SET *MSAL* PARAMETER
RJM RTC REQUEST TRACK CHAIN
STD FS+1 SET FIRST TRACK
LDD CM+1 SET EQUIPMENT
STD FS
RMS2 RJM CBD CHECK FOR BUFFERED DEVICE
ZJN RMS3 IF NOT BUFFERED DEVICE
LDD FC CHECK TERMINATION CONDITION
LPN 14
ZJN RMS3 IF *WPHR*
LDM RCRF SET BUFFERED DEVICE FUNCTION FLAG
LPC 7577
LMC 200
STM RCRF
RMS3 LDM RCRF
SHN 21-7
PJN RMS4 IF NOT BUFFERED DEVICE FUNCTION
LDC WMS2 PREVENT DATA AND EOF WRITE
STM WMSA
LDC 4000 SET TO RESTART *CPUCIO*
STM COCA
LDN 2 SET SYSTEM SECTOR AND EOI SECTOR COUNT
STD SC
RMS4 LDC LJMI SET UP FOR FIRST WRITE OF NEW FILE
STM RMSB
LDC RMS12
STM RMSB+1
LDD FS+1 SET CURRENT TRACK TO FIRST TRACK
RMS5 STD T6
LDD FS SET EQUIPMENT
STD T5
LDD FC
SHN 21-12
PJN RMS6 IF NOT REWRITE
SETMS IO,RW,WDSB
UJN RMS7 BUILD TRACK TABLE
RMS6 SETMS IO,NF,WDSB
RMS7 LDM SLM
STM WTBZ
LDD T6
LJM RMS8 BUILD TRACK TABLE
* LJM RMS15 (BYPASS TRACK LINK SEARCH)
RMSA EQU *-1
SMA SPACE 4,10
** SMA - SET MASS STORAGE ALLOCATION (*MSAL*) PARAMETER.
*
* ENTRY (BS - BS+4) = FET+0.
*
* EXIT (A) = *MSAL* PARAMETER.
*
* USES T1.
SMA2 MJN SMA1 IF SEARCH NAME IS BEYOND CURRENT ENTRY
LDN LOCS RETURN *MSAL* SELECTION
SMA SUBR ENTRY/EXIT
LDC TSFN-TSFNL
STD T1
SMA1 LDN TSFNL
RAD T1
LDI T1
SBD BS
NJN SMA2 IF NO MATCH ON FIRST TWO CHARACTERS
LDM 1,T1
LMD BS+1
NJN SMA1 IF NAMES DO NOT MATCH
LDM 2,T1
LMD BS+2
NJN SMA1 IF NAMES DO NOT MATCH
LDM 3,T1
LMD BS+3
SCN 77
NJN SMA1 IF NAMES DO NOT MATCH
LDM 3,T1
LPN 77
UJN SMAX RETURN *MSAL* SELECTION
TSFN SPACE 4,10
** TSFN - TABLE OF SPECIAL FILE NAMES.
* TABLE MUST BE ARRANGED IN ASCENDING ORDER.
*
* ONE CM WORD PER ENTRY -
*T 42/ FN,6/ MP
* FN FILE NAME.
* MP *MSAL* PARAMETER.
TSFN BSS 0
TSFNL EQU 4
VFD 42/0LLGO,6/LGOS
VFD 42/0LOUTPUT,6/OUTS
VFD 42/0LPUNCH,6/OUTS
VFD 42/0LPUNCHB,6/OUTS
VFD 42/0LP8,6/OUTS
CON 7777 TERMINATE TABLE
SPACE 4,10
SPACE 4,10
** COMMON DECKS.
*CALL COMPRJC
EJT$ EQU 1 DEFINE EJT ACCESS
*CALL COMPGFP
OVERFLOW MSDO,BFMS
PMS OVERLAY (POSITION MASS STORAGE.),MSDO
PMS SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
BI EQU 35 BACKSPACE INDEX
RI EQU 36 - 37 RANDOM INDEX (2 LOCATIONS)
PMS SPACE 4,10
** PMS - POSITION MASS STORAGE MAIN ROUTINE.
PMS SUBR ENTRY/EXIT
LJM PRS PRESET
MSR SPACE 4,10
** MSR - PROCESS MASS STORAGE ERROR FROM *COMPRNS*.
MSR SUBR
LDD T6 SET CURRENT TRACK
STD FS+2
LDD T7 SET CURRENT SECTOR
STD FS+3
RJM CDA CHECK DEVICE (ERROR PROCESSOR RETURNS)
UJN MSRX RETURN
SRC SPACE 4,10
** SRC - SET RECALL CONDITIONS.
*
* EXIT (FS+2) = UPDATED CURRENT TRACK.
* (FS+3) = UPDATED CURRENT SECTOR.
* TO *PMSX* TO ENTER RECALL STACK.
* TO *ERR* IF ERROR FLAG TERMINATION.
*
* CALLS CET.
*
* MACROS ENDMS.
SRC BSS 0 ENTRY
ENDMS END MASS STORAGE OPERATION
LDD T6 SET CURRENT TRACK
STD FS+2
LDD T7 SET CURRENT SECTOR
STD FS+3
RJM CET CHECK ERROR FLAG TERMINATION
AOM COCA SET RECALL STACK FLAG
SRC1 UJN PMSX RETURN
SFP SPACE 4,20
** SFP - SET FILE POSITION.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = FET OPTIONS.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (FS - FS+4) = FST ENTRY.
* (RI - RI+1) = RANDOM ADDRESS IF *SFPA* SET AND
* RANDOM FET.
*
* EXIT (FS - FS+4) = ADVANCED FST ENTRY.
* TO *PMSX*.
*
* USES DP - DP+4.
*
* CALLS SRA.
*
* MACROS CFET.
SFP BSS 0 ENTRY
LDD T6 SET CURRENT TRACK
STD FS+2
LDD T7 SET CURRENT SECTOR
STD FS+3
LDN ZERL
CRD DP
LDD FO CHECK FET STATUS
SHN 6
PJN SRC1 IF NOT RANDOM FET
SFPA LDN 0
NJN SFP1 IF RANDOM ADDRESS IS PRESET
LDD FS+2 CHECK FILE
ZJN SFP1 IF FILE NOT USED
LDD FS+1 SET RANDOM ADDRESS
RJM SRA
SFP1 LDM ERRA CHECK MS ERROR OCCURRED
ZJN SFP2 IF NO ERROR
CFET 6 MERGE RANDOM ADDRESS
CRD DP
SFP2 LDD RI+1 ENTER CURRENT RANDOM ADDRESS
SHN 6
STD DP+2
SHN -14
STD DP+1
LDD RI
SHN 6
RAD DP+1
SHN -14
STD DP
CFET 6 STORE RANDOM ACCESS WORD
CWD DP
LJM PMSX EXIT
TITLE SKIP/OPEN FUNCTION PROCESSORS.
BKS SPACE 4,15
** BKS - BACKSPACE SECTOR.
*
* ENTRY (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (T6) = UPDATED CURRENT TRACK.
* (T7) = UPDATED CURRENT SECTOR.
* TO *SFS* IF BOI ENCOUNTERED.
* TO *SFS2* IF PRU BACKSPACE COMPLETE.
*
* CALLS BOT, DSC.
BKS BSS 0 ENTRY
LDD T6 CHECK CURRENT TRACK
LMD FS+1
NJN BKS1 IF NOT FIRST TRACK
LDD T7 CHECK CURRENT SECTOR
LMN FSMS
ZJN SFS IF FIRST SECTOR
BKS1 SOD T7 DECREMENT SECTOR
PJN BKS2 IF SAME TRACK
RJM BOT BACK UP ONE TRACK
SBN 1 SET LAST SECTOR
STD T7
BKS2 RJM DSC DECREMENT SKIP COUNT
NJN BKS IF SKIP NOT COMPLETE
UJN SFS2 SET FST STATUS
SFS SPACE 4,10
** SFS - SET FILE STATUS.
*
* ENTRY (A) = FST STATUS IF ENTRY AT *SFS2*.
* AT *SFS* TO SET BOI STATUS IN FET.
* AT *SFS1* TO SET EOR FST STATUS.
* AT *SFS2* TO STORE FST STATUS.
*
* EXIT (FS+4) = FST STATUS.
* TO *SFP*.
SFS BSS 0 ENTRY
LDD BS+4 SET REWIND FUNCTION STATUS
LPN 2
ADN 50
STD BS+4
LDC LDNI DISABLE FET STATUS UPDATE
STM UFSA
* SET EOR STATUS IN FST.
SFS1 LDN /CIO/EOR SET EOR FST STATUS
* SET STATUS IN FST.
SFS2 STD FS+4 STORE FST STATUS
LJM SFP EXIT
SKB SPACE 4,15
** SKB - SKIP RECORD/FILE BACKWARD.
*
* ENTRY (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (T6) = UPDATED CURRENT TRACK.
* (T7) = UPDATED CURRENT SECTOR.
* TO *SFS* IF BOI ENCOUNTERED.
* TO *SFS1* OR *SFS2* IF SKIP COMPLETE.
*
* CALLS BKR, DSC, SMS.
SKB BSS 0 ENTRY
RJM SMS LOAD MASS STORAGE DRIVER
SKB0 LDD T6 CHECK CURRENT TRACK
LMD FS+1
NJN SKB1 IF NOT FIRST TRACK
LDD T7 CHECK CURRENT SECTOR
LMN FSMS
ZJN SFS IF FIRST SECTOR
SKB1 RJM BKR BACKSPACE RECORD
LDD FC
LPN 14
LMN /CIO/EOF
NJN SKB2 IF NOT SKIP TO EOF
LDD T1
SHN 21-13
PJN SKB0 IF NOT EOF
SKB2 RJM DSC DECREMENT SKIP COUNT
NJN SKB0 IF SKIP NOT COMPLETE
LDD T1 GET EOF INDICATOR
SHN 0-13
ZJN SFS1 IF NOT EOF
LDN /CIO/EOF
UJN SFS2 SET FST STATUS
SKF SPACE 4,15
** SKF - SKIP RECORD/FILE FORWARD.
*
* ENTRY (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
*
* EXIT (PC) = PRU COUNT.
* TO *SFP* IF SKIP COMPLETE.
* TO *SRC* TO ENTER RECALL STACK.
*
* CALLS CRT, DSC, RNS, SMS.
*
* MACROS ENDMS.
SKF5 LCN 0 RESET PRU COUNT
STD PC
LJM SRC SET RECALL CONDITIONS
SKF BSS 0 ENTRY
RJM SMS LOAD MASS STORAGE DRIVER
SKF0 LDD T7 CHECK FOR NEW ENTRY
SKFA EQU *-1
* LJM SFP (MASS STORAGE ERROR)
NJN SKF1 IF NOT NEW TRACK
RJM CRT CHECK RECALL TIME
SKF1 AOD PC INCREMENT PRU COUNT
SHN -14
NJN SKF5 IF PRU COUNT EXCEEDS 12 BITS
LDC BFMS+DTSF READ NEXT SECTOR HEADER WORD
RJM RNS
SHN -6
NJN SKF0 IF NOT EOR
LDM BFMS
ADM BFMS+1
ZJN SKF4 IF EOI
LDD FC
LPN 14
LMN /CIO/EOF
NJN SKF2 IF NOT SKIP TO EOF
LDM BFMS
NJN SKF0 IF NOT EOF
SKF2 RJM DSC DECREMENT SKIP COUNT
NJN SKF0 IF SKIP NOT COMPLETE
LDM BFMS
ZJN SKF3 IF EOF
LDN /CIO/EOR&/CIO/EOF
SKF3 LMN /CIO/EOF&/CIO/EOI
SKF4 LMN /CIO/EOI
STD FS+4 SET FST STATUS
ENDMS END MASS STORAGE OPERATION
LJM SFP EXIT
SKP SPACE 4,20
** SKP - SKIP PROCESSOR.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
*
* EXIT (BS+4) = REWIND STATUS IF BOI ENCOUNTERED ON
* BACKWARD SKIP.
* (FS - FS+4) = UPDATED FST ENTRY.
* TO *BKS* IF BACKSPACE PRU FUNCTION.
* TO *SKB* IF BACKSPACE RECORD/FILE FUNCTION.
* TO *SKF* IF SKIP RECORD/FILE FORWARD.
* TO *SFP* IF FORWARD SKIP ON NULL FILE OR *SKIPEI*.
* TO *SFS* IF BACKWARD SKIP ON NULL FILE.
*
* USES T1.
*
* CALLS CET, SEI.
SKP BSS 0 ENTRY
LDD T6 CHECK CURRENT TRACK
NJN SKP1 IF FILE USED
LDD FC
SHN -13
ZJN SKP3 IF FORWARD SKIP
LJM SFS SET BOI STATUS
SKP1 RJM CET CHECK ERROR TERMINATION
LDD FC
SHN -13
STD T1 0 = SKIP FORWARD, 1 = SKIP BACKWARD
NJN SKP4 IF BACKWARD SKIP
LDD FC CHECK FOR *SKIPEI*
LPN 14
LMN /CIO/EOI
NJN SKP5 IF NOT SKIP TO EOI
LDD FO
SHN 6
PJN SKP2 IF NOT RANDOM FET
LDD FS+1 START AT FIRST TRACK TO GET FILE LENGTH
STD T6
AOM SFPA INDICATE THAT *RI* IS PRESET
SKP2 RJM SEI SKIP TO END OF INFORMATION
LDD T2 SET RELATIVE SECTOR ADDRESS
STD RI
LDD T3
STD RI+1
SKP3 LDN /CIO/EOI
STD FS+4 SET EOI FST STATUS
LJM SFP EXIT
SKP4 LDD FC CHECK TERMINATION CONDITION
LPN 14
ZJN SKP5 IF BACKSPACE PRU
AOD T1 2 = SKIP RECORD/FILE BACKWARD
LDD FS+3 INITIALIZE BACKSPACE SECTOR
STM BKRA
LDD FS+2 INITIALIZE BACKSPACE TRACK
STM BKRB
SKP5 LDM TSPA,T1
STD T1
LJM 0,T1 PROCESS SKIP FUNCTION
TSPA BSS 0 TABLE OF SKIP PROCESSOR ADDRESSES
LOC 0
CON SKF SKIP FORWARD
CON BKS BACKSPACE PRU
CON SKB SKIP RECORD/FILE BACKWARD
LOC *O
OPE SPACE 4,15
** OPE - OPEN FILE.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = FET OPTIONS.
*
* EXIT TO *REW* IF OPEN/REWIND.
* TO *SFP* IF OPEN/NO REWIND.
*
* USES CM - CM+4.
*
* CALLS LRI.
*
* MACROS CFET.
OPE BSS 0 ENTRY
LDD FO CHECK SPECIAL PROCESSING
SHN 6
PJN OPE1 IF NOT RANDOM FILE
LDM FETL CHECK FET LENGTH
SBN 3
MJN OPE1 IF NO INDEX WORD IN FET
RJM LRI LOAD RANDOM INDEX
OPE1 CFET 4 READ LIMIT
CRD CM
LDN 1 SET PRU SIZE
STD CM+2
LDD CM+3
LPN 37
STD CM+3
CFET 4 STORE LIMIT
CWD CM
LDM CFNB CLEAR FILE OPENED AND WRITTEN BITS
LPN 71
LMN 04 SET FILE OPENED STATUS
STM CFNB
LDD FC CHECK FOR OPEN/REWIND OPERATION
SHN 21-13
PJN OPE2 IF NO REWIND
LJM REW REWIND FILE
OPE2 LJM SFP RETURN
TITLE SKIP/OPEN SUBROUTINES.
BKR SPACE 4,20
** BKR - BACKSPACE RECORD.
*
* ENTRY (T4 - T7) = MS PARAMETERS.
* (BI) = BACKSPACE INDEX.
* (FS - FS+4) = FST ENTRY.
* DRIVER PRESET.
*
* EXIT (BIT 13B OF T1) = 1 IF EOF.
* (T6 - T7) UPDATED.
* (BI) = ADVANCED BACKSPACE INDEX.
* (PC) = ACCUMULATED PRUS TRANSFERRED COUNT.
* (FS - FS+4) = UPDATED FST ENTRY.
* TO *SRC* IF PRU TRANSFER LIMIT.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES T1.
*
* CALLS BOT, CET, CRT, RNS.
*
* MACROS ENDMS.
BKR SUBR ENTRY/EXIT
* SET PREVIOUS END OF RECORD POSITION FROM BUFFER IF POSSIBLE.
LDD BI
ZJN BKR5 IF BACKSPACE INDEX EMPTY
LDD T7 SET CURRENT SECTOR
STD FS+3
BKR1 SOD BI DECREMENT INDEX
LDM BKRB SET TRACK
STD T6
LDM BBUF,BI SET EOF STATUS
STD T1
LPC 3777 SET SECTOR
STD T7
NJN BKR2 IF NOT FIRST SECTOR OF NEXT TRACK
LDD FS+2 SET NEXT TRACK
STD T6
BKR2 LDD FS+3 COUNT PRUS TRANSFERRED
NJN BKR3 IF NOT NEXT TRACK
LDM SLM SECTORS PER TRACK
BKR3 SBD T7
RAD PC
UJN BKRX RETURN
BKR4 LJM SRC ENTER RECALL STACK
* BACKSPACE UP TO *MPTB* SECTORS OR BEGINNING OF TRACK.
BKR5 LDC 0 SET PRIOR TRACK/SECTOR POSITION
BKRA EQU *-1
STD T7
STD FS+3
LDC 0
BKRB EQU *-1
STD T6
STD FS+2
RJM CET CHECK ERROR TERMINATION
RJM CRT CHECK RECALL TIME
LDD PC
ADC MPTB
SHN -14
NJN BKR4 IF PRU TRANSFER LIMIT
LDD T7 CHECK SECTOR
NJN BKR6 IF NOT FIRST SECTOR
RJM BOT BACK UP ONE TRACK
BKR6 ADC -MPTB CHECK NUMBER OF SECTORS
PJN BKR7 IF NUMBER OF SECTORS .GT. BUFFER SIZE
LDN 0 POSITION TO FIRST SECTOR
BKR7 STD T7 SET SECTOR
STM BKRA
LDD T6 SAVE CURRENT TRACK
STM BKRB
LMD FS+1
NJN BKR8 IF NOT FIRST TRACK
LDD T7
NJN BKR8 IF NOT FIRST SECTOR
LDN FSMS SET FIRST SECTOR
STD T7
STM BKRA
STM BBUF,BI
AOD BI
UJN BKR10 CONTINUE PROCESSING AT BOI
* SCAN TRACK AND SET END OF RECORD POSITIONS.
BKR8 LDC BFMS+DTSF READ NEXT SECTOR HEADER WORDS
RJM RNS
SHN -6 CHECK WORD COUNT
NJN BKR10 IF FULL SECTOR
LDD T7 SET SECTOR
STM BBUF,BI
LDM BFMS CHECK CONTROL BYTE
NJN BKR9 IF EOR
LDM BFMS+1 CHECK FOR EOI
ZJN BKR11 IF EOI ENCOUNTERED
LDC 4000 SET EOF STATUS
RAM BBUF,BI
BKR9 AOD BI ADVANCE BACKSPACE INDEX
BKR10 LDD T7 CHECK CURRENT POSITION
LMD FS+3
NJN BKR8 IF CURRENT POSITION NOT REACHED
LDD T6
LMD FS+2
NJN BKR8 IF CURRENT POSITION NOT REACHED
LDM RCRF
SHN 21-11
MJN BKR11 IF NOT AT ORIGINAL POSITION
* IGNORE END OF RECORD IF CURRENT POSITION REACHED
LDD T1 CHECK WORD COUNT OF SECTOR
SHN -6
NJN BKR11 IF NOT END OF RECORD
SOD BI DECREMENT INDEX
BKR11 ENDMS END MASS STORAGE OPERATION
LDM RCRF SET POSITION CHANGED FLAG
LPC 6777
LMD TH
STM RCRF
LDD BI
ZJN BKR12 IF BACKSPACE INDEX EMPTY
LJM BKR1 RETURN NEXT RECORD LOCATION
BKR12 LDD FS+3 COUNT PRUS TRANSFERRED
NJN BKR13 IF NOT NEXT TRACK
LDM SLM SECTORS PER TRACK
BKR13 SBM BKRA
RAD PC
LJM BKR5 CONTINUE BACKSPACE
BOT SPACE 4,15
** BOT - BACK ONE TRACK.
*
* ENTRY (T6) = CURRENT TRACK.
* (FS+1) = FIRST TRACK.
*
* EXIT (T6) = PREVIOUS TRACK.
* (A) = SECTOR LIMIT FOR TRACK.
*
* USES T3.
*
* CALLS SNT.
BOT1 LMD T3 SET NEXT TRACK
BOT2 STD T6
RJM SNT
LMD T3
NJN BOT1 IF NEXT TRACK NOT EQUAL TO CURRENT TRACK
LDM SLM
BOT SUBR ENTRY/EXIT
LDD T6 SAVE CURRENT TRACK
STD T3
LDD FS+1 SET FIRST TRACK
UJN BOT2 ENTER LOOP
CET SPACE 4,10
** CET - CHECK ERROR TERMINATION.
*
* EXIT TO *ERR* IF ERROR FLAG TERMINATION.
*
* USES CM - CM+4.
CET SUBR ENTRY/EXIT
LDD CP CHECK ERROR FLAG
ADN STSW
CRD CM
LDD CM+1
SBN SPET
MJN CETX IF NOT SPECIAL ERROR
ERROR EFT *ERROR FLAG TERMINATION*
CRT SPACE 4,10
** CRT - CHECK RECALL TIME.
*
* ENTRY FIRST CALL STARTS TIMING. ELAPSED TIME OF EACH
* INTERVAL IS KEPT TO MINIMIZE CLOCK OVERFLOW.
*
* EXIT TO *SRC* IF PROCESSING TIME EXCEEDED.
*
* USES CM - CM+4.
CRT2 AOM CRTA INDICATE TIME ACCUMULATION STARTED
CRT3 LDD CM+4 SAVE CURRENT CLOCK VALUE
STM CRTB
CRT SUBR ENTRY/EXIT
LDC RTCL READ REAL TIME CLOCK
CRD CM
LDC 0 ELAPSED TIME
CRTA EQU *-1
ZJN CRT2 IF FIRST CALL
LDD CM+4 CALCULATE TIME SINCE LAST CALL
SBM CRTB
PJN CRT1 IF NO OVERFLOW
ADC 10000
CRT1 RAM CRTA ACCUMULATED PROCESSING TIME
ADC -RSPT
MJN CRT3 IF TIME NOT EXCEEDED
LJM SRC SET RECALL CONDITIONS
CRTB CON 0 PREVIOUS CLOCK VALUE
DSC SPACE 4,10
** DSC - DECREMENT SKIP COUNT.
*
* EXIT (A) = 0, IF SKIP COMPLETE.
* SKIP COUNT IN (IR+2 - IR+3) DECREMENTED BY ONE.
*
* USES T0.
DSC SUBR ENTRY/EXIT
LDD IR+3 GET SKIP COUNT
SCN 77
STD T0
SHN 6
LMD IR+2
SHN 6
SBN 1
ZJN DSCX IF SKIP COMPLETE
SHN 14 RESET SKIP COUNT
STD IR+2
SHN -6
SCN 77
LMD T0
LMD IR+3
STD IR+3
LDN 1 INDICATE SKIP NOT COMPLETE
UJN DSCX RETURN
LRI SPACE 4,15
** LRI - LOAD RANDOM INDEX.
*
* ENTRY (FS - FS+4) = FST ENTRY.
*
* EXIT (FS - FS+4) UPDATED.
* (PC) = ACCUMULATED PRU COUNT TRANSFERRED.
* TO *CDA*, IF MASS STORAGE ERROR.
*
* USES PC, T1, T2, T6, T7, CM - CM+4, LM - LM+1, IN - IN+1.
*
* CALLS BKR, DDT, MSR, RNS, SEI, SMS, VAL.
*
* MACROS CFET, ENDMS, ERROR, NFA, SFA.
LRI SUBR ENTRY/EXIT
CFET 7 READ (FET+7)
CRD CM
LDD CM+3 CHECK INDEX LENGTH
SCN 77
SHN 6
LMD CM+2
ZJN LRIX IF INDEX LENGTH = 0
SHN 6
STD LM+1
SHN -14
LPN 37
STD LM
LDD CM+3 CHECK FWA
LPN 37
STD IN
SHN 14
LMD CM+4
STD IN+1
SBN 2
PJN LRI2 IF INDEX ADDRESS .GE. 2
LRI1 ERROR FPE *FET PARAMETER ERROR*
LRI2 ADN 2
SHN 6
ADD LM
SHN 14
ADD LM+1
SHN -6
SBD FL
PJN LRI1 IF INDEX BUFFER LWA+1 .GE. FL
LDM RCRF
SHN 21-6
MJN LRI6 IF CONTINUATION OF BACKSPACE
LDN ZERL
CRD CM
LDN 0
STD T1
STD T2
* ZERO INDEX AREA.
LRI3 LDD IN CLEAR INDEX AREA
ADD T1
SHN 6
ADD RA
SHN 6
ADD IN+1
ADD T2
CWD CM
AOD T2
SHN -14
RAD T1
LMD LM
NJN LRI3 IF NOT END OF INDEX AREA
LDD T2
LMD LM+1
NJN LRI3 IF NOT END OF INDEX AREA
LDD T6 CHECK TRACK
NJN LRI5 IF FILE USED
LRI4 LJM LRIX RETURN
LRI5 RJM SEI SKIP FROM CURRENT POSITION TO EOI
LDD T6
LMD FS+1
LRI6 NJN LRI7 IF MORE THAN ONE TRACK ON FILE
LDD T7
LMN FSMS
ZJN LRI4 IF FILE CONTAINS ONLY AN EOI
LRI7 LDN 0 CHECK READ SECURITY
RJM VAL VALIDATE FILE ACCESS LEVEL
LDD T7 INITIALIZE BACKSPACE SECTOR
STM BKRA
LDD T6 INITIALIZE BACKSPACE TRACK
STM BKRB
RJM SMS LOAD MASS STORAGE DRIVER
RJM BKR BACKSPACE RECORD
LDD PC CHARGE FOR PRUS TRANSFERRED
SHN IMPT
RAM CFNH+1
SHN -14
RAM CFNH
LDN 0 CLEAR PRU COUNT
STD PC
SFA EST,T5 CHECK IF DEVICE BUFFERED IN ECS
ADK EQDE
CRD CM
LDD CM+4
SHN 3
ADN DILL
CRD CM
LDD CM+3
SHN 21-13
PJN LRI8 IF DEVICE NOT BUFFERED IN ECS
LJM LRI11 PROCESS DIRECT TRANSFER
* READ RANDOM INDEX AND STORE INTO BUFFER.
LRI8 LDC BFMS READ NEXT SECTOR
RJM RNS
ZJN LRI9 IF ZERO LENGTH SECTOR
AOD PC ADVANCE SECTOR COUNT
LDD LM
SHN 14
ADD LM+1
SBD T1
PJN LRI10 IF ROOM FOR SECTOR
AOM LRIB SET INDEX TOO LARGE FLAG
LDD LM+1
STD T1
NJN LRI10 IF ROOM LEFT IN INDEX AREA
LRI9 LJM LRI14 COMPLETE PROCESSING
LRI10 LDD IN STORE SECTOR
SHN 6
ADD RA
SHN 6
ADD IN+1
CWM BFMS+2,T1
LDD T1 ADVANCE ADDRESS
RAD IN+1
SHN -14
RAD IN
LDD LM DECREMENT LENGTH
SHN 14
ADD LM+1
SBD T1
STD LM+1
SHN -14
STD LM
LDD T1
SHN -6
LRIA ZJN LRI9 IF EOR
* UJN LRI9 (AFTER MS ERROR)
LJM LRI8 LOOP TO EOR
* DIRECT TRANSFER RANDOM INDEX FOR ECS BUFFERED DEVICE.
LRI11 LDD IN SET FWA INDEX AREA
STD CM+3
SHN 14
ADD IN+1
STD CM+4
RAD LM+1 SET LWA INDEX AREA
SHN -14
RAD LM
SHN 14
ADD LM+1
SHN 14
STD CM+2
SHN -14
SHN 6
RAD CM+3
LDC RDDS*10000+7777 DIRECT READ TO EOR
RJM DDT
PJN LRI13 IF NO ERROR
SHN 21-20
MJN LRI12 IF TRANSFER TRUNCATED
RJM CDA CHECK DEVICE
LRI12 AOM LRIB SET INDEX TOO LARGE FLAG
LRI13 LDD T4 SET PRU TRANSFERRED COUNT
STD PC
* COMPLETE PROCESSING.
LRI14 ENDMS END MASS STORAGE OPERATION
LDD PC CHECK SECTOR COUNT
NJN LRI16 IF INDEX TRANSFERRED
LDD FC CHECK FOR REWIND REQUEST
SHN 21-13
MJN LRI15 IF REWIND REQUESTED
NFA FA,R RETAIN ORIGINAL POSITION AND STATUS
ADN FSTL
CRD FS
LDD FS+2 RESET CURRENT POSITION
STD T6
LDD FS+3
STD T7
* CLEAR RANDOM FILE BIT.
LRI15 CFET 1 READ FIRST
CRD CM
LDD CM+1 CLEAR RANDOM BIT
LPC 3777
STD CM+1
CFET 1 STORE FIRST
CWD CM
LJM LRIX RETURN
* PROCESS INDEX TOO LARGE.
LRI16 LDM BFMS+1 SET FET STATUS
SHN 2-6
LPN 4
LMN 4
STD FS+4
LRIB LDN 0
* LDN 1 (INDEX TRUNCATED)
ZJN LRI18 IF INDEX NOT TRUNCATED
LDM ERRA CHECK FOR MASS STORAGE ERROR
NJN LRI18 IF MASS STORAGE ERROR
LDD FO CHECK ERROR PROCESSING SELECTED
SHN 21-10
MJN LRI17 IF ERROR PROCESSING SELECTED
ERROR ITL *INDEX TOO LARGE ON OPEN*
LRI17 LDC 23S9 SET STATUS = 23B
RAD BS+4
SHN -14
RAD BS+3
LDM FETL CHECK FET LENGTH
SBN 2
MJN LRI18 IF NO DETAILED STATUS FIELD
CFET 6 CLEAR DETAILED STATUS FIELD
CRD CM
LDN 0
STD CM+3
STD CM+4
CFET 6
CWD CM
LRI18 LJM LRIX RETURN
SPACE 4,10
** COMMON DECKS.
IRA$ EQU 1 SET INITIALIZATION
*CALL COMPCRA
LIST X
*CALL COMPDDT
LIST -X
MSR$ EQU 1 DEFINE ERROR PROCESSING
*CALL COMPRNS
*CALL COMPSEI
*CALL COMPSNT
*CALL COMPSRA
SPACE 4,10
BBUF BSS 0 BACKSPACE BUFFER
ERRNG BFMS-BBUF-MPTB CHECK FOR BACKSPACE BUFFER OVERFLOW
QUAL
EPSO EQU *+5 END OF POSITION OVERLAY
.ERPO MAX EWTO,ERDO,EPSO CALCULATE MAXIMUM OVERLAY SIZE
ERPO EQU .ERPO ERROR PROCESSING OVERLAY ORIGIN
QUAL *
TITLE RANDOM ACCESS PROCESSORS.
RRD SPACE 4,15
** RRD - PROCESS RANDOM READ.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (DP - DP+4) = (FET+6).
* (FS - FS+4) = FST ENTRY.
*
* EXIT (FS - FS+4) = ADVANCED FST ENTRY.
* (RI - RI+1) = RANDOM ADDRESS.
* TO *SFP* TO COMPLETE PROCESSING.
*
* ERROR TO *ERR* IF RANDOM ADDRESS ERROR.
*
* CALLS CRA.
*
* MACROS ERROR.
RRD2 LDD FC
LPC 1700
ZJN RRD3 IF READ
LDD FS+4 SET LAST OPERATION COMPLETE WRITE
SCN 16
LMN 6
STD FS+4
RRD3 LDD DP+3 RESET RANDOM ADDRESS
STD RI
LDD DP+4
STD RI+1
AOM SFPA INDICATE *RI* IS PRESET
LJM SFP PROCESS EXIT
RRD BSS 0 ENTRY
LDD DP+3 SET RANDOM ADDRESS
STD RI
LDD DP+4
STD RI+1
LDD FS+2
ZJN RRD1 IF FILE NOT WRITTEN ON
LDD FS+1 SET FIRST TRACK
STD T6
RJM CRA CONVERT RANDOM ADDRESS
PJN RRD2 IF SECTOR ON FILE
RRD1 ERROR RAD *RANDOM ADDRESS NOT ON FILE*
RWT SPACE 4,20
** RWT - PROCESS RANDOM WRITE.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (DP - DP+4) = (FET+6).
* (FS - FS+4) = FST ENTRY.
*
* EXIT (FC) = UPDATED INTERNAL *CIO* FUNCTION CODE.
* (RI - RI+1) = RANDOM ADDRESS.
* TO *RRD* IF REWRITE OPERATION.
* TO *SFP* IF RANDOM WRITE AT EOI.
*
* USES T2, T3, T6, CM - CM+4.
*
* CALLS SEI.
*
* MACROS ERROR.
RWT BSS 0 ENTRY
LDD FC
SHN 21-12
MJN RRD IF REWRITE FUNCTION
LDD DP+2 CHECK FOR REWRITE
LPN 40
ZJN RWT1 IF NOT REWRITE IN PLACE
LDC 2000 SET REWRITE FLAG IN FUNCTION CODE
RAD FC
STM ICFC
UJN RRD CONVERT RANDOM ADDRESS
* RANDOM WRITE AT END OF INFORMATION.
RWT1 LDD DP+3 CHECK RETURN ADDRESS
LPN 37
STD DP+3
SHN 14
LMD DP+4
SBN 2
MJN RWT2 IF .LT. 2
ADN 2
SHN -6
SBD FL
MJN RWT3 IF .LT. FL
RWT2 ERROR RWT *INDEX ADDRESS OUT OF RANGE*
RWT3 LDD FS+2 CHECK CURRENT TRACK
NJN RWT4 IF FILE USED
STD T2 SET FIRST SECTOR
LDN FSMS
STD T3
UJN RWT5 UPDATE RESPONSE WORD
* SKIP FROM BEGINNING OF FILE TO EOI AND CALCULATE LENGTH.
RWT4 LDD FS+1
STD T6
RJM SEI SEARCH FOR EOI
RWT5 LDD DP+3 READ RESPONSE WORD
SHN 6
ADD RA
SHN 6
ADD DP+4
CRD CM
LDD T2 SET RANDOM INDEX
STD CM+3
STD RI
LDD T3
STD CM+4
STD RI+1
LDD DP+3 STORE RESPONSE WORD
SHN 6
ADD RA
SHN 6
ADD DP+4
CWD CM
AOM SFPA INDICATE *RI* IS PRESET
LJM SFP EXIT
TITLE POSITION MASS STORAGE PRESET.
PRS SPACE 4,15
** PRS - POSITION MASS STORAGE PRESET ROUTINE.
*
* ENTRY (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (T5) = EST ORDINAL.
* (T6) = CURRENT TRACK.
* (T7) = CURRENT SECTOR.
* (BI) = 0.
* (RI - RI+1) = 1.
* TO *CFN* IF INCORRECT *CIO* FUNCTION CODE.
*
* USES T1, CM - CM+4.
*
* CALLS CHG, IRA.
PRS BSS 0 ENTRY
LDN 0 CLEAR BACKSPACE INDEX
STD BI
LDD FS SET EST ORDINAL
STD T5
LDD FS+2 SET TRACK
STD T6
ZJN PRS1 IF FILE NOT USED
RJM IRA INITIALIZE RANDOM ACCESS
* IDENTIFY FUNCTION.
PRS1 LDD FS+3 SET SECTOR
STD T7
LDN 0
STD RI PRESET RANDOM INDEX
LDN FSMS
STD RI+1
LDD FC SET FUNCTION INDEX
SHN -6
LPN 17
STD T1
SBN TFPAL
PJN PRS2 IF FUNCTION NOT IN TABLE
LDM TFPA,T1 SET PROCESSING ADDRESS
ZJN PRS2 IF FUNCTION PROCESSOR NOT DEFINED
STD T1
LJM 0,T1 JUMP TO PROCESSOR
PRS2 LDK SWET SET SYSTEM SOFTWARE ERROR
RJM CHG CONDITIONALLY HANG PP
LJM CFN COMPLETE FUNCTION
TFPA INDEX TABLE OF FUNCTION PROCESSOR ADDRESSES
TFPAL1 MAX /CIO/RDF,/CIO/WTF,/CIO/SKP,/CIO/OPE
TFPAL EQU TFPAL1+1 TABLE LENGTH
INDEX /CIO/RDF,RRD RANDOM READ
INDEX /CIO/WTF,RWT RANDOM WRITE
INDEX /CIO/SKP,SKP SKIP
INDEX /CIO/OPE,OPE OPEN
INDEX TFPAL END OF TABLE
SMS SPACE 4,10
** SMS - SET MASS STORAGE DRIVER.
*
* ENTRY (T5) = EQUIPMENT ORDINAL.
* (FS+1) = FIRST TRACK OF LOCAL FILE.
*
* EXIT DRIVER LOADED.
* SYSTEM ACCESS SET IF FILE IS SYSTEM FILE.
*
* USES CM - CM+4.
*
* MACROS SETMS.
SMS1 SETMS IO
SMS SUBR
SFA EST,T5 CHECK FOR SYSTEM DEVICE
CRD CM
LDD CM
SHN 21-12
PJN SMS1 IF NOT SYSTEM DEVICE
LDN FNTP READ FNT POINTER
CRD CM
LDD CM
SHN 14
ADD CM+1
ERRNZ SYFO CHECK SYSTEM FILE POSITION IN FNT
ADK FSTG
CRD CM
LDD CM+1
LMD FS+1
NJN SMS1 IF NOT SYSTEM FILE
* *CIO* IS USED TO ACCESS THE SYSTEM FILE FOR THE LOADER, CCL,
* ETC. THE READSYS OPTION CAUSES THE DRIVER TO SELECT THE
* SYSTEM DEVICE WITH THE LEAST ACTIVITY. IT ALSO CAUSES THE
* DRIVER ERROR PROCESSOR TO AUTOMATICALLY TRY A DIFFERENT
* SYSTEM DEVICE WHEN AN ERROR IS ENCOUNTERED.
SETMS READSYS
UJN SMSX RETURN
SPACE 4,10
** COMMON DECKS.
*CALL COMPIRA
SPACE 4,10
OVERFLOW MSDO
CMS OVERLAY (CLOSE MASS STORAGE.),MSDO
CMS SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
RI EQU 36 - 37 RANDOM INDEX (2 LOCATIONS)
CMS SPACE 4,10
ORG *+2
CLO SPACE 4,15
** CLO - CLOSE FILE.
*
* ENTRY (FO) = FET OPTIONS.
* (BS - BS+4) = (FET+0).
* (FS - FS+4) = FST ENTRY.
*
* EXIT TO *CLS*.
*
* USES T5, T6.
*
* CALLS DRI.
CLO BSS 0 ENTRY
LDD BS+4 GET CLOSE FUNCTION
SHN -3
LPN 7
LMN 5
ZJN CLO2 IF REWIND
LMN 3&5
ZJN CLO1 IF NO REWIND
LDD BS+4 SET RETURN/UNLOAD FLAG FOR *0DF*
SHN -2
LPN 1
LMN 1
RAM CLSA
LDN IMRU CHARGE FOR RETURN/UNLOAD
RAM TACC+/CIO/CLO
LDC DRF&CFN SET COMPLETION ADDRESS
CLO1 LMC CFN
STM CLSB
CLO2 LDM MSFF GET MASS STORAGE FILE FLAG
NJN CLO3 IF NOT MASS STORAGE FILE
LDD FS+2
ZJN CLO3 IF FILE NOT USED
STD T6 SET CURRENT TRACK
LDD FS SET EST ORDINAL
STD T5
LDD FO CHECK SPECIAL PROCESSING
SHN 6
PJN CLO3 IF NOT RANDOM FILE
LDM FETL
SBN 3
MJN CLO3 IF NO INDEX WORD IN FET
LDD FS+4 CHECK WRITE STATUS
SHN 21-7
PJN CLO3 IF NOT WRITTEN SINCE LAST OPEN
LDM FACF CHECK WRITE LOCKOUT SET
LPN 1
NJN CLO3 IF WRITE LOCKOUT SET
RJM DRI DUMP RANDOM INDEX
CLO3 LJM CLS COMPLETE CLOSE PROCESSING
DRI SPACE 4,15
** DRI - DUMP RANDOM INDEX.
*
* EXIT TO *WMS* OVERLAY IF RANDOM INDEX TO BE WRITTEN.
* (FS+2) = EOI TRACK.
* (FS+3) = EOI SECTOR.
* (FS+4) = COMPLETE WRITE FST STATUS.
* (IN - IN+1) = LWA+1 INDEX AREA.
* (LM - LM+1) = LWA+2 INDEX AREA.
* (OT - OT+1) = FWA INDEX AREA.
*
* USES T1, T2, CM - CM+4.
*
* CALLS EXR, SEI, VAL.
*
* MACROS ERROR.
DRI SUBR ENTRY/EXIT
CFET 7 READ (FET+7)
CRD CM
LDD CM+3 CHECK INDEX LENGTH
SCN 77
SHN 6
LMD CM+2
ZJN DRIX IF INDEX LENGTH=0 - RETURN
SHN 6
STD T2
SHN -14
LPN 37
STD T1
LDD CM+3 OUT = FWA
LPN 37
STD OT
SHN 14
LMD CM+4
STD OT+1
SBN 2
PJN DRI2 IF INDEX BUFFER ADDRESS .GE. 2
DRI1 ERROR FPE *FET PARAMETER ERROR*
DRI2 ADN 2
SHN 6
ADD T1
SHN 14
ADD T2
STD IN+1 IN = FWA+LENGTH = LWA+1
SHN -6
SBD FL
PJN DRI1 IF INDEX BUFFER LWA+1 .GE. FL
ADD FL
SHN -6
STD IN
LDN 1 CHECK WRITE SECURITY
RJM VAL VALIDATE FILE ACCESS LEVEL
RJM SEI SEARCH FOR END OF INFORMATION
LDD T6 SET TRACK
STD FS+2
LDD T7 SET SECTOR
STD FS+3
LDN 6 SET COMPLETE WRITE FST STATUS
STD FS+4
LDD IN LIMIT = IN + 1
SHN 14
ADD IN+1
ADN 1
STD LM+1
SHN -14
STD LM
LDC 1L4+WMS SET WRITE OVERLAY NAME
RJM EXR EXECUTE ROUTINE
SPACE 4,10
** COMMON DECKS.
*CALL COMPSEI
SPACE 4,10
OVERFLOW MSDO
OMS OVERLAY (OVERWRITE MASS STORAGE.),MSDO
SPACE 4,10
** DIRECT LOCATION ASSIGNMENTS.
NT EQU 36 EOI/NEXT TRACK LINK
TC EQU 37 TRACK COUNT BEFORE PP RELEASE
SPACE 4,10
ORG *+2
OVW SPACE 4,15
** OVW - OVERWRITE FILE.
*
* ENTRY (BS - BS+4) = (FET+0).
* (FA) = FNT ENTRY NFL RELATIVE ADDRESS.
* (FS - FS+4) = FST ENTRY.
* (PC) = 0.
*
* EXIT TO *COC* IF TO ENTER RECALL STACK.
* TO *DRF* IF TO DROP FILE AFTER OVERWRITE.
* TO *REW* IF TO REWIND FILE AFTER OVERWRITE.
* TO *CDA*, IF RECOVERABLE MASS STORAGE ERROR.
*
* CALLS GNT, IBP, WDS, WEI.
*
* MACROS ENDMS, SETMS.
OVW BSS 0 ENTRY
LDD FA
ZJN OVW2 IF NO FNT ENTRY
LDM FACF CHECK FILE MODE
LPN 30
ZJN OVW1 IF NO RESTRICTIONS
ERROR IFM *INCORRECT MODIFICATION*
OVW1 LDM RCRF CHECK FOR CONTINUATION OF FUNCTION
SHN 21-6
MJN OVW4 IF FUNCTION PREVIOUSLY INITIALIZED
LDD FS+2
NJN OVW3 IF FILE USED
OVW2 LJM OVW11 REWIND OR DROP FILE
OVW3 LDN FSMS SET CURRENT SECTOR = FIRST SECTOR
STD FS+3
LDD FS+1 SET CURRENT TRACK = FIRST TRACK
STD FS+2
RJM GNT GET NEXT TRACK
SBN FSMS
ZJN OVW2 IF EOI ONLY ON FILE
OVW4 RJM IBP INITIALIZE BUFFER WITH PATTERN
LDD FS+3 SET CURRENT SECTOR
STD T7
LDD FS+2 SET CURRENT TRACK
STD T6
RJM GNT GET EOI/NEXT TRACK LINK
SETMS IO,,WDSB
LDN 0
STD TC CLEAR TRACK COUNT
LDD PC
STD T1
OVW5 AOD TC CALCULATE TRACK COUNT BEFORE PP RELEASE
LDM SLM
RAD T1
SBK RWPC
MJN OVW5 IF ALLOWED TO WRITE MORE TRACKS
OVW6 LDD T7 SET NEXT SECTOR LINKAGE
ADN 1
STM BFMS
STD FS+3
SBM SLM
NJN OVW7 IF NOT AT END OF TRACK
STD FS+3 RESET TO FIRST SECTOR
LDD NT SET NEXT TRACK LINK
STM BFMS
STD FS+2
RJM GNT GET NEXT TRACK LINK
ZJN OVW7 IF EOI IN FIRST SECTOR OF NEXT TRACK
SOD TC
NJN OVW7 IF NOT TRACK COUNT LIMIT
AOM COCA SET TO ENTER RECALL STACK
LDC LDCI+WLSF/10000
STM OVWA
OVW7 LDD FS+3
SBD NT
NJN OVW7.1 IF NOT LAST SECTOR BEFORE EOI
LDN 77 SET EOR ON LAST SECTOR BEFORE EOI
STM BFMS+1
OVW7.1 LDC BFMS+WCSF WRITE SECTOR
* LDC BFMS+WLSF (ENTER RECALL STACK)
OVWA EQU *-2
RJM WDS
PJN OVW7.2 IF NO ERROR
LPN 77
LMN PARE
ZJN OVW7.2 IF MEDIA ERROR CONTINUE
RJM CDA CHECK DEVICE
OVW7.2 AOD PC INCREMENT PRU COUNT
LDD FS+2
STD T6
LDD FS+3
STD T7
SBD NT
ZJN OVW9 IF EOI ENCOUNTERED
LDM COCA
NJN OVW8 IF TRACK COUNT LIMIT
LJM OVW6 WRITE NEXT SECTOR
OVW8 ENDMS
AOM COCA
LDN 2 SET WRITE MODE FLAG
STD FS+4
LJM COC ENTER RECALL STACK
OVW9 RJM WEI WRITE EOI
LDD IR+3
SHN -6
SBN 2
MJN OVW10 IF FUNCTION COMPLETE
LDC -100
RAD IR+3
LDD FS+1 SET CURRENT TRACK = FIRST TRACK
STD FS+2
LDN FSMS SET CURRENT SECTOR = FIRST SECTOR
STD FS+3
SOD TC
ZJN OVW8 IF TRACK COUNT LIMIT
LJM OVW4 PROCESS NEXT DATA PATTERN
OVW10 ENDMS
LDM CFNB SET FILE WRITTEN FLAGS
LPN 74
LMN 03
STM CFNB
OVW11 LDD BS+4 CHECK OVERWRITE FUNCTION CODE
LPN 10
ZJP REW IF TO REWIND FILE
LDN 0 SELECT *0DF* RETURN FUNCTION
LJM DRF DROP FILE
GNT SPACE 4,10
** GNT - GET NEXT TRACK POINTER.
*
* ENTRY (A) = CURRENT TRACK POINTER.
* (FS - FS+4) = FST ENTRY.
*
* EXIT (A) = (NT) = NEXT TRACK POINTER.
* (T2) = CURRENT TRACK POINTER.
* (T5) = EQUIPMENT IF INITIAL CALL.
*
* USES NT, T2, CM - CM+4.
*
* MACROS SFA.
GNT2 SHN -2 READ TRT WORD
GNTB ADC ** ADD TRT BASE ADDRESS
CRD CM
LDD T2 SET BYTE INDEX
LPN 3
STD NT
LDM CM,NT GET NEXT TRACK POINTER
STD NT
GNT SUBR ENTRY/EXIT
STD T2 SAVE CURRENT TRACK POINTER
GNT1 LDD FS SET EQUIPMENT
* UJN GNT2 (TRT ADDRESS PRESET)
GNTA EQU *-1
STD T5
SFA EST GET EST ENTRY
ADK EQDE
CRD CM
LDD CM+4 MST ADDDRESS / 10
SHN 3
ADN TRLL READ TRT POINTER
CRD CM
LDD CM+3 EXTRACT TRT ADDRESS
LPN 77
SHN 14
LMD CM+4
SBD TH COMPENSATE FOR TRACK LINK FLAG (4000/4)
STM GNTB+1 SET TRT BASE ADDRESS
SHN -14
RAM GNTB
ISTORE GNTA,(UJN GNT2)
LDD T2
UJN GNT1 GET NEXT TRACK POINTER
IBP SPACE 4,10
** IBP - INITIALIZE BUFFER WITH PATTERN SELECTION.
*
* EXIT (BFMS+1 - BFMS+501) INITIALIZED.
*
* USES T1, T2.
IBP SUBR ENTRY/EXIT
LDC BFMS+2
STD T1
LDD IR+3 GET PATTERN SELECTION
LPC 377
STD IR+3
SHN -6
STD T2
LDM TWPS,T2
STD T2
IBP1 LDD T2 INITIALIZE BUFFER
STI T1
AOD T1
LMC BFMS+502
NJN IBP1 IF MORE WORDS TO INITIALIZE
LDD HN SET BUFFER WORD COUNT
STM BFMS+1
UJN IBPX RETURN
TWPS BSS 0 TABLE OF WORD PATTERN SELECTIONS
LOC 0
CON 0
CON 5252
CON 7777
CON 0
LOC *O
SPACE 4,10
** COMMON DECKS.
*CALL COMPWEI
WDSB SPACE 4,10
** WDSB - WRITE ERROR PROCESSING BUFFER.
* THIS BUFFER IS USED STRICTLY BY THE DRIVER ERROR PROCESSOR
* WHEN A WRITE ERROR IS ENCOUNTERED ON THE SECTOR PREVIOUS TO
* A SECTOR CURRENTLY BEING WRITTEN. THIS SPACE MAY BE
* OVERLAYED BY THE ERROR PROCESSING OVERLAY.
WDSB EQU *
ERRNG BFMS-WDSB-502 WDSB EXTENDS INTO BFMS
SPACE 4,10
OVERFLOW MSDO,BFMS
ERP OVERLAY (ERROR PROCESSOR.),ERPO
ERP SPACE 4,10
ORG *+2
UJN ERP ENTER ERROR PROCESSOR
SPACE 4,35
*** RETURN OF UNRECOVERABLE MASS STORAGE ERROR STATUS.
*
* WHENEVER A MASS STORAGE DEVICE RETURNS AN ERROR STATUS OR THE
* DEVICE DRIVER DETECTS AN ERROR, AN ERROR STATUS IS PLACED IN
* THE STATUS FIELD OF THE FET. IF THE USER ERROR PROCESSING BIT
* IS SET IN THE FET *SP* FIELD, FURTHER *DETAIL* STATUS IS
* RETURNED TO THE USER ; IF NOT SET, A MESSAGE IS ISSUED TO THE
* DAYFILE AND THE JOB IS ABORTED.
*
* ERROR STATUS (STATUS FIELD)
* 002 END OF DEVICE (TRACK LIMIT).
* 004 PARITY ERROR.
* 023 RANDOM INDEX TOO LARGE FOR INDEX BUFFER.
* 022 OTHER ERROR.
*
* DETAIL ERROR STATUS (DEC FIELD) (ONLY IF *EPR* SET)
* X001 PARITY ERROR.
* X002 ADDRESS ERROR.
* X003 DEVICE STATUS ERROR.
* X004 6681 FUNCTION REJECT.
* X005 DEVICE RESERVED.
* X006 DEVICE NOT READY.
* 4007 TRACK LIMIT. (DEVICE FULL)
* 0000 OTHER ERROR.
*
* IF, AFTER A READ ERROR (WITH *EPR* SET), THE SYSTEM
* DETERMINES THAT THE PROPER PRU WAS READ (ALTHOUGH IT
* PROBABLY CONTAINS BAD DATA) THEN *X* ABOVE IS ZERO, THE
* DATA IS PLACED IN THE BUFFER, AND THE FILE IS POSITIONED
* TO THE NEXT PRU OF THE FILE. IF THE PROPER PRU WAS NOT
* READ THEN *X* IS 4, NO DATA IS PLACED IN THE BUFFER, AND
* THE FILE IS LEFT POSITIONED AT THE OFFENDING PRU. *CRI*
* IS SET AS USUAL.
IMR SPACE 4,10
** IMR - ISSUE MESSAGE AND RETURN TO MAIN PROGRAM.
*
* ENTRY (A) = ADDRESS TO RETURN TO.
* AT *IMR* TO SET RETURN ADDRESS.
* AT *IMR1* IF TO USE DEFAULT RETURN ADDRESS (*CFN*).
* AT *IMR2* TO SET PP HANG.
*
* CALLS IDM.
* ENTRY TO SET PP HANG.
IMR2 LDC CHP SET HANG PP ADDRESS
IMR BSS 0 ENTRY
ZJN IMR1 IF NO EXIT ADDRESS SPECIFIED
STM IMRA SAVE RETURN ADDRESS
* ENTRY IF TO USE DEFAULT RETURN ADDRESS (*CFN*).
IMR1 RJM IDM ISSUE DAYFILE MESSAGE
LDD MA RESTORE T3 - T7
CWM DCSA,ON
SBN 1
CRD T3
LJM CFN COMPLETE FUNCTION AND DROP PPU
* LJM MSP (PROCESS WRITE OPERATION)
* LJM /PMS/SFP (PROCESS POSITION ERROR)
* LJM /PMS/LRIX (PROCESS OPEN ERROR - NOT CORRECT SECTOR)
* LJM /PMS/LRIX (USER PROCESSING INDEX TOO LARGE ON OPEN)
* LJM MSRX (PROCESS SKIP FORWARD - CORRECT SECTOR)
* LJM MSRX (PROCESS OPEN ERROR - CORRECT SECTOR)
* LJM MSRX (COMPLETE READ - CORRECT SECTOR)
* LJM /RMS/CPR (COMPLETE READ - NOT CORRECT SECTOR)
* LJM CHP (HANG MESSAGE)
IMRA EQU *-1
ERP SPACE 4,20
** ERP - MAIN ROUTINE.
*
* ENTRY (ERRA) = ERROR NUMBER
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = FET OPTIONS.
* (BS - BS+4) = (FET+0).
*
* EXIT (BS - BS+4) = UPDATED WITH ERROR STATUS.
* TO *ABJ* IF FATAL ERROR.
* TO *IMR* IF ERROR PROCESSING SELECTED FOR INDEX
* TOO LARGE ERROR.
* TO *IMR1* IF WARNING MESSAGE.
* TO *IMR2* IF HANG CONDITION.
* TO *RES* IF DEVICE ERROR.
*
* USES EN, T1, T4 - T4+4.
*
* CALLS PTL, WEI.
ERP BSS 0 ENTRY
LDM ERRA SET ERROR NUMBER
STD EN
SBN /CIOERR/HMSL
MJN IMR2 IF HANG CONDITION
SBN /CIOERR/WMSL-/CIOERR/HMSL
PJN ERP1 IF ERROR MESSAGE
LDM TMSG+/CIOERR/UCF SET EXTERNAL FUNCTION IN MESSAGE
ADN 10D
STD T1
LDD BS+4
SHN -6
LPN 7
RAI T1
AOD T1
LDD BS+4
LPN 4
RAI T1
LDD BS+4
LPN 70
SHN 3
RAI T1
LJM IMR1 ISSUE WARNING MESSAGE
ERP1 LDN 0 CLEAR RECALL STACK FLAG
STM COCA
* CHECK FOR EOI NEEDED.
LDD EN
LMN /CIOERR/DRE
NJN ERP3 IF NOT DEVICE ERROR
LDD MA RESTORE T3 - T7
CWM DCSA,ON
SBN 1
CRD T3
LDM ERSD
NJN ERP2.1 IF NO ERROR ON THE FILE
LDD FC
SHN -6
LPN 17
LMN /CIO/WTF
ZJN ERP2 IF WRITE
LMN /CIO/CLO&/CIO/WTF
NJN ERP2.1 IF NOT CLOSE
* WRITE EOI IF FILE WRITTEN ON.
ERP2 LDD EN SAVE THE ERROR CODE
STM ERPA
RJM WEI WRITE AN EOI SECTOR
LDC **
ERPA EQU *-1
STD EN
ERP2.1 UJP RES RETURN ERROR STATUS
* CHECK FOR TRACK LIMIT.
ERP3 LDD EN
LMN /CIOERR/TKL
NJN ERP4 IF NOT TRACK LIMIT
RJM PTL PROCESS TRACK LIMIT ERROR
* CHECK USER PROCESSING OF ERRORS.
ERP4 LDC 22S9 SET STATUS = 22
RAD BS+4
SHN -14
RAD BS+3
LDD EN
LMN /CIOERR/ITL
NJN ERP6 IF NOT INDEX TOO LARGE ERROR
STM ERRA CLEAR ERROR CODE
LDD TH SET STATUS = 23B
RAD BS+4
ERP5 LJM ABJ ABORT JOB
ERP6 LMN /CIOERR/FTL&/CIOERR/ITL
ZJN ERP7 IF FILE TOO LONG ERROR
LMN /CIOERR/LFL&/CIOERR/FTL
ZJN ERP7 IF LOCAL FILE LIMIT ERROR
LMN /CIOERR/PRL&/CIOERR/LFL
ZJN ERP7 IF PRU LIMIT ERROR
LMN /CIOERR/RAD&/CIOERR/PRL
ZJN ERP7 IF RANDOM ADDRESS ERROR
LMN /CIOERR/BLE&/CIOERR/RAD
NJN ERP5 IF NOT BUFFER CONTROL WORD ERROR
ERP7 LDD CP CHECK IF SUBSYSTEM
ADK JCIW
CRD CM
LDD CM+2
SBK LSSI
MJN ERP5 IF NOT SUBSYSTEM
LJM IMR1 TREAT ERROR AS WARNING
RES SPACE 4,10
** RES - RETURN ERROR STATUS.
*
* ENTRY (T4) = (RDCT) AT THE TIME OF THE ERROR.
*
* EXIT TO *ERP5* IF ERROR PROCESSING NOT SELECTED.
* TO *IMR* TO ISSUE DAYFILE MESSAGE.
*
* CALLS MDE, SES.
* PROCESS DRIVER DETECTED DEVICE ERROR.
RES BSS 0 ENTRY
LDD T4 GET ERROR STATUS
RJM MDE MAP DISK ERROR
RJM SES
ZJN ERP5 IF ERROR PROCESSING NOT SELECTED
LDD FC GET PROCESSOR ADDRESS
SHN -6
LPN 17
STD T1
LDM RESB,T1
STM RESA
LJM * ENTER PROCESSOR
RESA EQU *-1
* PROCESS SKIP ERROR.
RES1 LDN 0
STD FS+4 CLEAR FST STATUS
LDD FC
SHN -13
NJN RES2 IF BACKWARD SKIP
LDD T4 CHECK IF CORRECT SECTOR READ
SHN -13
NJN RES2 IF INCORRECT DATA
LDD HN+LJMI* SET TERMINATOR
STM /PMS/SKFA
LDC /PMS/SFP
STM /PMS/SKFA+1
UJN RES5 RETURN TO CALLER
* PROCESS WRITE/REWIND/RETURN/UNLOAD/EVICT ERRORS.
RES2 LDM RESC,T1 GET CONTINUATION PROCESSOR
RES3 LJM IMR ISSUE DAYFILE MESSAGE
* PROCESS OPEN ERROR.
RES4 LDD T4
SHN 21-11D
PJN RES2 IF WRONG SECTOR READ
LDC UJNI-ZJNI SET STOP AFTER SECTOR WRITE
RAM /PMS/LRIA
RES5 LDM CDA GET RETURN ADDRESS
UJN RES3 ISSUE DAYFILE MESSAGE
* PROCESS CLOSE/OVERWRITE ERROR.
RES6 LDM ERSD
ZJP RES2 IF NO ERROR ON THE FILE
LDC RRF EXIT TO RESET POINTERS
UJP RES3 ISSUE DAYFILE MESSAGE AND RETURN
* PROCESS READ ERROR.
RES7 LDC 4000 SET ERROR FLAG IN CONTROL WORD
RAM BFMS+2-5
LDN 0 SET STOP FOR CONTROL WORD READ LOOP
STM /RMS/CRDB
UJP RES5 RETURN TO CALLER
RES8 LDD T4
SHN 21-11D
MJN RES2 IF WRONG SECTOR READ
LDD FC CHECK READ FUNCTION
SHN 21-5
MJN RES7 IF *READCW*
SHN 21-12-21+5+22
PJN RES9 IF NOT *READSKP*
LDC LDNI+0
STM /SMR/RSKB
LDD HN+LJMI* SET TERMINATION
STM /SMR/RSKC
LDC /SMR/RSK13
STM /SMR/RSKC+1
RES9 LDC /RMS/CPR SET STOPS FOR BUFFER READ LOOP
STM /RMS/BRDE
STM /RMS/BRDF
STM /RMS/EOFA
LDD HN+LJMI* SET TERMINATION
STM /RMS/BRDT
LDC /RMS/BRD2
STM /RMS/BRDT+1
LJM RES5 ISSUE DAYFILE MESSAGE
RESB INDEX TABLE OF ERROR COMPLETION PROCESSORS
INDEX /CIO/RDF,RES8 READ
INDEX /CIO/WTF,RES2 WRITE
INDEX /CIO/SKP,RES1 SKIP
INDEX /CIO/OPE,RES4 OPEN
INDEX /CIO/CLO,RES6 CLOSE
INDEX /CIO/REW,RES2 REWIND
INDEX /CIO/RET,RES2 RETURN/UNLOAD
INDEX /CIO/EVI,RES2 EVICT
INDEX /CIO/OVW,RES6 OVERWRITE
INDEX /CIO/MFC
RESC INDEX TABLE OF FUNCTION CONTINUATION ROUTINES
INDEX /CIO/RDF,/RMS/CPR READ
INDEX /CIO/WTF,/WMS/WMS3 WRITE
INDEX /CIO/SKP,/PMS/SFP SKIP
INDEX /CIO/OPE,/PMS/LRIX OPEN
INDEX /CIO/CLO,/WMS/WMS3 CLOSE
INDEX /CIO/REW,RRF REWIND
INDEX /CIO/RET,RRF RETURN/UNLOAD
INDEX /CIO/EVI,RRF EVICT
INDEX /CIO/OVW,/OMS/OVW10 OVERWRITE
INDEX /CIO/MFC
ABJ SPACE 4,15
** ABJ - ABORT JOB.
*
* ENTRY (EN) = ERROR NUMBER.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (BS - BS+4) = (FET+0).
*
* EXIT TO *IMR1* FOR EXIT TO *CFN*.
*
* USES T1, CM - CM+4.
*
* CALLS CTI.
*
* MACROS MONITOR.
* SET CONTROL POINT ERROR FLAG.
ABJ BSS 0 ENTRY
LDM TEPO,EN SET CONTROL POINT ERROR FLAG
SHN -6
ZJN ABJ1 IF NO ERROR FLAG
STD CM+1 SET ERROR FLAG
MONITOR CEFM
ABJ1 LDD EN
LMN /CIOERR/ARG
NJN ABJ2 IF NOT ARGUMENT ERROR
STD BS CLEAR FILE NAME
STM CFND PREVENT WRITE OF FET+0
UJN ABJ3 COMPLETE ABORT PROCESSING
ABJ2 LDD FO CHECK FET OPTIONS
SHN 21-10
PJN ABJ3 IF ERROR PROCESSING NOT SELECTED
LDN 0 CLEAR DETAILED STATUS FIELD IN FET
STD T1
RJM SDS
ABJ3 LDD FC
NJN ABJ4 IF INTERNAL FUNCTION DEFINED
STM TACC PREVENT ACCOUNTING FUNCTION CHARGE
* SET UP FET DUMP REQUEST.
ABJ4 LDM TEPO,EN CHECK ERROR CONTROL
LPN 1
ZJN ABJ5 IF FET DUMP NOT NEEDED
LDD CP READ PPDW
ADC PPDW
STD T1
CRD CM
LDD IR+3 SET DUMP LENGTH AND FET ADDRESS
LPN 77
SHN 14
LMM FETL
ADN 5
SHN 6
STD CM+3
LDD IR+4
STD CM+4
LDD T1 REWRITE PPDW
CWD CM
ABJ5 LJM IMR1 ISSUE MESSAGE
TMSG SPACE 4,10
** TMSG - TABLE OF MESSAGE ADDRESSES.
* INDEXED BY ERROR CODE.
*
*T, 12/ ADDR
* ADDR ADDRESS OF MESSAGE
TMSG EQU *-1
LOC TMSG+/CIOERR/MEC
TEPO SPACE 4,10
** TEPO - TABLE OF ERROR PROCESSING OPTIONS.
* INDEXED BY ERROR CODE.
*
*T, 6/ EF, 5/ 0, 1/F
*
* EF ERROR FLAG.
* F = 1 IF FET DUMP NEEDED.
TEPO EQU *-1
ARG MSG (FET ADDRESS OUT OF RANGE),PPET,0
ASD MSG (ASSIGNED FOR DIAGNOSTICS, FILE ),PPET,0
BLE MSG (BUFFER CONTROL WORD ERROR ON ),PPET,0
BUF MSG (BUFFER ARGUMENT ERROR ON ),PPET,1
DRE MSG (DEVICE ERROR ON FILE ),PPET,0
EFT MSG (ERROR FLAG TERMINATION, FILE ),0,0
EXO MSG (I/O ON EXECUTE-ONLY FILE ),PPET,0
FLN MSG (INCORRECT FILE NAME ),PPET,0
FPE MSG (FET PARAMETER ERROR ON ),PPET,1
FSQ MSG (I/O SEQUENCE ERROR ON FILE ),PPET,0
FTL MSG (FILE TOO LONG, FILE ),PPET,0
IEQ MSG (INCORRECT EQUIPMENT ON FILE ),0,0
IFM MSG (INCORRECT MODIFICATION OF ),PPET,0
IRQ MSG (INCORRECT I/O REQUEST ON FILE ),PPET,1
ITL MSG (INDEX TOO LARGE ON OPEN, FILE ),PPET,1
IWR MSG (WRITE ON READ-ONLY FILE ),PPET,0
LFL MSG ,FLET,0
LNF MSG (FILE ACCESS LEVEL CONFLICT, ),SVET,0
LNJ MSG (JOB ACCESS LEVEL CONFLICT, ),SVET,0
PRL MSG (PRU LIMIT, FILE ),TKET,0
RAD MSG (RANDOM ADDRESS NOT ON FILE ),PPET,1
RUD MSG (REQUEST UNDEFINED ON DEVICE, ),PPET,1
RWT MSG (INDEX ADDRESS OUT OF RANGE FOR ),PPET,1
TKL MSG ,0,1
TNA MSG (M.T. NOT AVAILABLE ON FILE ),PPET,0
UCF MSG (UNNECESSARY CIO FCT. 000 ON ),0,0
WDP MSG (WRITEDOWN PROHIBITED ON ),SVET,0
MEC MSG
BOS SPACE 4,10
** BOS - BACKUP ONE SECTOR.
*
BOS1 LMD T3 SAVE TRACK NUMBER
BOS2 STD T6
RJM SNT GET NEXT TRACK
LMD T3
NJN BOS1 IF NOT EQUAL TO CURRENT TRACK
LDM SLM SET SECTOR TO END OF TRACK
SBN 1
STD T7
BOS SUBR
SOD T7 DECREMENT SECTOR
PJN BOSX IF SAME TRACK
LDD T6 SAVE CURRENT TRACK
STD T3
LDD FS+1 START WITH FIRST TRACK
UJN BOS2 ENTER LOOP
CHP SPACE 4,10
** CHP - CONDITIONALLY HANG PP.
*
* EXIT TO *CFN*.
*
* CALLS CHG.
CHP LDK SWET SET SYSTEM SOFTWARE ERROR FLAG
RJM CHG CONDITIONALLY HANG PP
LJM CFN COMPLETE FUNCTION
TITLE ERROR PROCESSOR SUBROUTINES.
MDE SPACE 4,15
** MDE - MAP DISK ERROR.
*
* ENTRY (A) = DETAILED ERROR CODE FROM DRIVER.
* 6/, 8/, 4/DC
* DC = DRIVER ERROR CODE.
*
* EXIT (A) = 6/0,8/NC,4/CC
* NC = NOT CHANGED FROM INPUT.
* CC = CPU ERROR CODE EQUIVALENT TO *DC* IF *DC*
* IN EQUIVALENCE TABLE, OTHERWISE *DC*.
*
* USES T0, T1.
MDE1 LDD T0 RESTORE ORIGINAL ERROR CODE
MDE SUBR ENTRY/EXIT
STD T0 SAVE ORIGINAL ERROR CODE
LPN 77 GET DRIVER ERROR CODE
STD T1
SBN MXDE
PJN MDE1 IF CODE NOT IN TABLE
LDM MDEA,T1 GET EQUIVALENT CPU ERROR CODE
SBD T1 MAP DRIVER CODE TO CPU CODE
ADD T0
UJN MDEX EXIT
LIST G
MDEA CON CEC.LN ISHARED RETURN-ON-INACCESSIBLE DEVICE
ECHO 1,ERRCODE=("DREC")
CON CEC._ERRCODE "TXT._ERRCODE"
LIST *
PTL SPACE 4,20
** PTL - PROCESS TRACK LIMIT.
*
* ENTRY (EN) = ERROR NUMBER.
* (FO) = FET OPTIONS.
*
* EXIT (EN) = */ERR/EFT* IF SPECIAL ERROR FLAG SET ON CP.
* TRACK LIMIT SYSTEM EVENT ISSUED.
* TO *MSP* IF USER PROCESSING OF TRACK LIMIT REQUESTED
* (AND NO SPECIAL ERROR FLAG SET ON CP).
* TO *COC* IF NOT USER PROCESSING OF TRACK LIMIT
* (AND NO SPECIAL ERROR FLAG SET ON CP).
*
* USES CM - CM+4.
*
* CALLS SES.
*
* MACROS MONITOR.
PTL3 LDN /CIOERR/EFT *ERROR FLAG TERMINATION*
STD EN
STM ERRA
PTL SUBR ENTRY/EXIT
LDN ZERL SET TRACK LIMIT EVENT
CRD CM
LDN TKLE
STD CM+4
MONITOR EATM
LDD CP CHECK ERROR FLAG
ADN STSW
CRD CM
LDD CM+1
SBN SPET
PJN PTL3 IF SPECIAL ERROR TYPE
ADN SPET-ODET
ZJN PTL3 IF OPERATOR DROP ERROR FLAG
ADN ODET-FSET
ZJN PTL3 IF FORCED ERROR
ADN FSET-TAET
ZJN PTL3 IF USER BREAK TWO
ADN TAET-TIET
ZJN PTL3 IF USER BREAK ONE
LDD FO CHECK USER PROCESSING
SHN 21-11
PJN PTL1 IF NOT USER PROCESSING
LDC TLME SET TRACK LIMIT ERROR STATUS
RJM SES SET ERROR STATUS
LJM /WMS/WMS3 COMPLETE WRITE FUNCTION
PTL0 LDM OSSM
ZJN PTL0.1 IF UNSECURED SYSTEM
LDC PTLB+12 SET ACCESS LEVEL MESSAGE ADDRESS
STD T1
LDM FSAL GET FILE ACCESS LEVEL
SHN 2
ADC TALV
RJM ACS MOVE ACCESS LEVEL NAME TO MESSAGE
LDC =Z*.*
RJM ACS
LDC 2R,
STM PTLB+11
LDN 0
PTL0.1 UJN PTL2 WRITE CONSOLE MESSAGE
PTL1 LDD FS CONVERT UPPER TWO DIGITS OF EST ORDINAL
ZJN PTL0 IF NO EQUIPMENT ASSIGNED
SHN -3
STD T0
SHN 3
LMD T0
SCN 70
RAM PTLB+1
LDD FS CONVERT LOWER DIGIT OF EST ORDINAL
LPN 7
SHN 6
RAM PTLB+2
LCN 3
PTL2 ADC PTLB+3 SET MESSAGE ADDRESS
STM PTLA
LDD CP WRITE CONSOLE *TRACK LIMIT* MESSAGE
ADN MS2W
CWM *,TR
PTLA EQU *-1 ADDRESS OF MESSAGE
AOM COCA SET RECALL STACK FLAG
LDN TRLR-PTLR SET TRACK LIMIT REASON CODE
RAM ERSA
LDC TLRT SET TRACK LIMIT RECALL TIME PERIOD
STM ERSB
LJM COC SET UP TO ENTER RECALL STACK
PTLB DATA C*EQ000, TRACK LIMIT.*
BSSZ 4 ACCESS LEVEL NAME
SDS SPACE 4,10
** SDS - SET DETAILED STATUS FIELD IN FET.
*
* ENTRY (T1) = DETAILED STATUS.
*
* USES CM - CM+4.
*
* MACROS CFET.
SDS SUBR ENTRY/EXIT
LDM FETL CHECK FET LENGTH
SBN 2
MJN SDSX IF NO DETAILED STATUS FIELD IN FET
CFET 6 SET DETAILED STATUS
CRD CM
LDN 0
STD CM+3
LDD T1
STD CM+4
CFET 6
CWD CM
UJN SDSX RETURN
SES SPACE 4,15
** SES - SET ERROR STATUS.
*
* ENTRY (A)= DETAIL STATUS CODE.
* (FC) = INTERNAL *CIO* FUNCTION CODE.
* (FO) = FET OPTIONS.
* (BS - BS+4) = (FET+0).
* (DP - DP+4) = *IN* POINTER FOR READ FUNCTION.
*
* EXIT (A) = 0 IF ERROR PROCESSING (EP) NOT SELECTED.
* (BS+3 - BS+4)= ERROR STATUS.
* DETAIL STATUS SET IN BITS 0-12 OF FET+6.
*
* USES T0, T1, CM - CM+4.
*
* MACROS CFET.
SES4 LDN 0 SET ERROR PROCESSING NOT SELECTED
SES SUBR ENTRY/EXIT
LPC 6077 PRESERVE DATA TO BE RETURNED TO FET
STD T1 SAVE STATUS CODE
LPN 77
LMN PTYE CHECK STATUS CODE
STD T0 SET/CLEAR PARITY ERROR FLAG
ZJN SES1 IF PARITY ERROR
LDD T1
LMC TLME
ZJN SES2 IF TRACK LIMIT
LDN 22-4 STATUS = 22
SES1 ADN 2 STATUS = 4
SES2 ADN 2 STATUS = 2
SHN 11
LMD BS+4
STD BS+4
SHN -11-3
LMD BS+3
STD BS+3
LDD FO CHECK ERROR PROCESSING SELECTED
SHN 21-8D
PJN SES4 IF NOT SELECTED
LDD FC GET FUNCTION CODE
LPC 1700
ADD T0
NJN SES3 IF NOT READ PARITY ERROR
LDD DP+3 SAVE *IN* POINTER
RAM /RMS/CPRA
LDD DP+4
STM /RMS/CPRA+1
SES3 RJM SDS SET DETAILED STATUS
LJM SESX RETURN
WEI SPACE 4,15
** WEI - WRITE EOI SECTOR.
*
* ENTRY (T5) = EST ORDINAL.
* (T6) = TRACK WHERE ERROR OCCURED.
* (T7) = SECTOR WHERE ERROR OCCURED.
* (FS+1) = FIRST TRACK OF FILE.
*
* EXIT (FS+2) = CURRENT TRACK.
* (FS+3) = CURRENT SECTOR.
*
* USES RC, T6, T7, CM - CM+4.
*
* CALLS FWB, SCF, SNT, /WEI/WEI.
*
* MACROS ENDMS, MONITOR, SETMS.
WEI SUBR ENTRY/EXIT
LDD FC CHECK FOR REWRITE
SHN 21-12
PJN WEI1 IF NOT REWRITE
LDM /WMS/WEIA CHECK TRACK TABLE
STD RC
SBD /WMS/NT
MJP WEI3 IF TRACK BEYOND EOI USED
NJN WEI2 IF NOT AT EOI TRACK
LDD T7 CHECK OLD EOI SECTOR
SBM /WMS/WEIB
WEI1 PJN WEI3 IF EOI NOT INTACT
WEI2 LDD T6 SET CURRENT TRACK IN FST
STD FS+2
LDD T7 SET CURRENT SECTOR IN FST
STD FS+3
LDN 76 ONLY SET FILE WRITTEN IN FST IF REWRITE
STM /WMS/WMSB
LDN 1 SET FILE WRITTEN
STM /WMS/WMSC
RJM SCF SET CONTROL BUFFER INDEX INTO FNT
RJM FWB FLUSH WRITE DATA FOR BUFFERED DEVICE
LDM /WMS/WEIC CHECK TRT MODIFIED
LPN 77
ZJP WEIX IF NO TRT UPDATE NEEDED
LDM /WMS/WEIB RESET OLD EOI SECTOR
STD CM+3
LDI RC RESET OLD EOI TRACK
LJM WEI10 RESET EOI IN TRT
* BACK UP AND WRITE AN EOI.
WEI3 LDD FS+2
NJN WEI3.1 IF SYSTEM SECTOR NOT WRITTEN THIS TIME
* SINCE THIS IS THE BEGINNING OF THE FILE, TRY TO START THE
* OPERATION OVER AGAIN USING A DIFFERENT TRACK OR DEVICE.
RJM /WMS/RWF REWRITE FILE
LJM WEIX RETURN
WEI3.1 SETMS IO,NS RESET TO CORRECT DRIVER
LDM DCSA+1
SHN 21-10
MJN WEI6 IF SECTORS BUFFERED IN THE HARDWARE
* SINCE, FOR FULL TRACK DEVICES, THE ERROR COULD HAVE OCCURED
* IN THE CURRENT SECTOR OR THE PREVIOUS SECTOR, BACK UP TWO
* SECTORS AND WRITE THE EOI.
LDD T6
LMD FS+1
NJN WEI4 IF NOT FIRST TRACK
LDD T7
SBN FSMS
ZJN WEI9 IF FIRST SECTOR
SBN 1
ZJN WEI5 IF CAN ONLY BACKUP ONE SECTOR
WEI4 RJM BOS BACKUP ONE SECTOR
WEI5 RJM BOS BACKUP ONE SECTOR
UJN WEI9 WRITE EOI SECTOR
* FOR DEVICES THAT HAVE HARDWARE BUFFERING, THE EXACT POINT
* AT WHICH THE ERROR OCCURED CANNOT BE DETERMINED. THE EOI
* IS WRITTEN AT THE POSITION AT WHICH THE OPERATION STARTED.
WEI6 LDD FS+2 RESET POSITION
STD T6
LDD FS+3
WEI8 STD T7
WEI9 RJM /WEI/WEI WRITE EOI SECTOR
ENDMS END MASS STORAGE OPERATION
RJM SCF SET CONTROL BUFFER INDEX INTO FNT
RJM FWB FLUSH WRITE DATA FOR BUFFERED DEVICE
LDD T7 DROP UNUSED TRACKS
STD FS+3 SET CURRENT SECTOR IN FST
STD CM+3
LDD T6
STD FS+2 SET CURRENT TRACK IN FST
WEI10 LPC 3777
STD CM+2
LDD T5
STD CM+1
LDM PMFF CHECK FILE TYPE
NJN WEI11 IF NOT DIRECT ACCESS PERMANENT FILE
LDC 4000 SET DEVICE CHECKPOINT
RAD CM+1
WEI11 MONITOR DTKM RESET EOI
LDM CFNJ COMPUTE NET STORAGE
SBD CM+3
SHN 14
ADM CFNJ+1
SBD CM+4
PJN WEI12 IF MORE SECTOR ALLOCATED THAN RETURNED
LDN CICS CHANGE TO INCREMENT FUNCTION
STM CFNI
LDD CM+3
SBM CFNJ
SHN 14
ADD CM+4
SBM CFNJ+1
WEI12 STM CFNJ+1 SET SECTOR COUNT
SHN -14
STM CFNJ
LJM WEIX RETURN
IDM SPACE 4,10
** IDM - ISSUE DAYFILE MESSAGE.
*
* ENTRY (ERRA) = (EN) = ERROR NUMBER.
* (BS - BS+4) = (FET+0).
*
* USES T1.
*
* CALLS ALS, DFM.
IDM SUBR ENTRY/EXIT
LDC BUFA SET BUFFER ADDRESS
STD T1
LDC 1R *100
STI T1
LDM TMSG,EN MOVE MESSAGE
ZJN IDMX IF NO MESSAGE
RJM ACS
LDD BS+3 CLEAR 8TH CHARACTER
STM IDMA
SCN 77
STD BS+3
LDN BS MOVE NAME
RJM ACS
LDC =Z* AT * ADD * AT *
RJM ACS
LDD IR+3 ADD FET ADDRESS
LPN 77
SHN 14
ADD IR+4
RJM ANS
LDC =Z*.* ADD PERIOD
RJM ACS
LDC BUFA ISSUE MESSAGE
RJM DFM
LDD EN
LMN /CIOERR/LNF
NJN IDM1 IF FILE ACCESS LEVEL COULD BE ADVANCED
* ISSUE *MFFI* ACCOUNT FILE MESSAGE IF THE FILE ACCESS LEVEL
* COULD NOT BE ADVANCED TO THE THE JOB ACCESS LEVEL.
LDC SVAM+3 SET MESSAGE ADDRESS
STD T1
LDN BS MOVE FILE NAME
RJM ACS
LDC =Z*, *
RJM ACS
LDM JSAL GET NAME OF JOB ACCESS LEVEL
SHN 2
ADC TALV
RJM ACS MOVE ACCESS LEVEL NAME
LDC =Z*.*
RJM ACS
LDC SVAM+ACFN ISSUE ACCOUNT FILE MESSAGE
RJM DFM
IDM1 LDC * RESTORE STATUS FIELD
IDMA EQU *-1
STD BS+3
LJM IDMX RETURN
SVAM DATA 6HMFFI,
BSSZ 12
SPACE 4,10
** COMMON DECKS.
*CALL COMPACS
*CALL COMPANS
*CALL COMPSNT
VAL$ SET 1
*CALL COMPVLC
SPACE 4,10
USE LITERALS
BUFA BSS 0
SPACE 4,10
OVERFLOW ERPO,BFMS
ERRNG BFMS-BUFA-26D
TTL 1MS - MASS STORAGE INPUT/OUTPUT.
TITLE 1MS - MASS STORAGE INPUT/OUTPUT.
END