IDENT MPF,MPF
PERIPH
BASE MIXED
SST
TITLE MPF - *PACKER* UTILITY HELPER.
SPACE 4,10
*COMMENT MPF - *PACKER* UTILITY HELPER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
SPACE 4,10
*** MPF - *PACKER* UTILITY PP HELPER ROUTINE.
*
* W. J. STURGIS. 78/02/14.
* K. A. GILLIAM. 80/08/11.
* D. G. BEAUSANG. 80/08/26.
* A. J. NATHANSON. 83/10/25.
* K. R. DELAY. 84/03/26.
* P. C. SMITH. 87/12/01.
SPACE 4,10
*** MPF IS A PP HELPER PROGRAM FOR THE UTILITY *PACKER*.
SPACE 4,10
*** CALL -
*
*T 18/ *MPF*,6/ R,12/ FN,6/ ,18/ ADDR
*
* FN = FUNCTION CODE.
* ADDR = ADDRESS OF FET OR PARAMETER BLOCK.
*
* SEE INDIVIDUAL FUNCTIONS FOR MORE DETAILS.
*
* FN = 0, DROP TRACKS ON IAPF CHAIN.
* FN = 1, REWRITE EOI.
* FN = 2, DELINK TRACKS FROM IAPF CHAIN.
* FN = 3, (RESERVED).
* FN = 4, READ SYSTEM SECTOR.
* FN = 5, WRITE SYSTEM SECTOR.
* FN = 6, RETURN FST FOR CATALOG OVERFLOW TRACK.
* FN = 7, REWRITE CATALOG SECTOR.
SPACE 4,10
*** DAYFILE MESSAGES.
*
* THESE MESSAGES ARE ISSUED TO THE SYSTEM AND LOCAL
* DAYFILES, AND THE CALLING JOB IS ABORTED.
*
* * MPF - ADDRESS OUT OF RANGE.*
* THE SPECIFIED ADDRESS WAS .LE. 1 OR .GE. FL.
*
* * MPF - BUFFER ARGUMENT ERROR.*
* BUFFER ARGUMENTS (FIRST/IN/OUT/LIMIT) ARE INCORRECT.
*
* * MPF - CATALOG REWRITE LINK BYTE ERROR.*
* AN INCORRECT LINK BYTE WAS READ FROM THE
* CATALOG TRACK.
*
* * MPF - DEVICE ERROR IDLE SET.*
* A DEVICE ERROR IDLE WAS SET AS THE RESULT OF AN
* INCORRECT CATALOG SECTOR WRITE.
*
* * MPF - EQXX TKYYYY SCZZZZ.*
* THE EST ORDINAL, TRACK AND SECTOR LOCATION OF THE
* INCORRECT SECTOR WRITE.
*
* * MPF - FET COMPLETE BIT SET.*
* THE FET COMPLETE BIT WAS SET ON ENTRY FOR FN=7.
*
* * MPF - FET TOO SHORT.*
* THE FET WAS TOO SHORT FOR FN=7.
*
* * MPF - FILE NOT FOUND.*
* THE LOCAL FILE SPECIFIED IN THE FET WAS NOT FOUND.
*
* * MPF - FM DN FFFFFFF NN.*
* THE FAMILY NAME (FFFFFFF) AND DEVICE NUMBER (NN)
* OF THE DEVICE ON WHICH ERROR IDLE WAS SET.
*
* * MPF - INACCESSIBLE DEVICE.*
* THE DEVICE STATUS RETURNED BY THE *SETMS* MACRO
* INDICATES THAT THE DEVICE IS NOT ACCESSIBLE.
*
* * MPF - INCORRECT CALL.*
* CALLER WAS NOT *SSJ=* PROGRAM, OR *MPF* WAS
* NOT CALLED WITH AUTO RECALL.
*
* * MPF - INCORRECT CATALOG REWRITE REQUEST.*
* INCORRECT SECTOR LENGTH, INCORRECT RANDOM ADDRESS,
* INCORRECT EST ORDINAL, ET CETERA.
*
* * MPF - INCORRECT CIO CODE IN CATALOG REWRITE.*
* THE CIO CODE FOR *REWRITE* MUST BE SET IN THE FET
* FOR A SECTOR REWRITE WITH 100B WORDS; THE CIO CODE
* FOR *REWRITER* MUST BE SET IN THE FET FOR A SECTOR
* WITH LESS THAN 100B WORDS.
*
* * MPF - INCORRECT FUNCTION.*
* FUNCTION NUMBER NOT RECOGNIZED.
*
* * MPF - INCORRECT LINK BYTE IN CATALOG SCAN.*
* THE CONTROL BYTES IN THE SECTOR AT END OF A TRACK
* WERE NOT LINK BYTES, THE LINK BYTE POINTED TO AN
* UNRESERVED TRACK, OR THE LINK BYTE POINTED TO A
* TRACK WHICH WAS NOT ON THE TRACK CHAIN WHICH STARTED
* WITH THE LABEL TRACK.
*
* * MPF - INCORRECT OVERFLOW FST REQUEST.*
* THE PARAMETER BLOCK FOR FN=6 WAS INCORRECT.
*
* * MPF - INCORRECT SECTOR READ IN CATALOG REWRITE.*
* AN UNRECOVERED MASS STORAGE ERROR WAS ENCOUNTERED
* ON A SECTOR READ.
*
* * MPF - INCORRECT SECTOR READ IN CATALOG SCAN.*
* AN UNRECOVERED MASS STORAGE ERROR WAS ENCOUNTERED
* ON A CATALOG TRACK.
*
* * MPF - INCORRECT SYSTEM SECTOR.*
* THE LINKAGE BYTES IN THE BUFFER WERE NOT CORRECT
* FOR THE WRITE SYSTEM SECTOR FUNCTION.
*
* * MPF - INCORRECT WORD COUNT IN CATALOG REWRITE.*
* THE WORD COUNT IN THE CIO BUFFER IS .GE. THAN 100B.
*
* * MPF - INCORRECT WRITE IN CATALOG REWRITE.*
* AN UNRECOVERED MASS STORAGE ERROR WAS ENCOUNTERED
* ON A SECTOR WRITE. THIS ERROR WILL SET ERROR IDLE
* ON THE DEVICE.
*
* * MPF - I/O SEQUENCE ERROR.*
* FST ENTRY FOR REWRITE EOI WAS BUSY.
*
* * MPF - RANDOM ADDRESS NOT ON IAPF CHAIN.*
* THE SPECIFIED RANDOM ADDRESS WAS NOT FOUND ON
* THE IAPF CHAIN.
*
* * MPF - SYSTEM SECTOR ERROR.*
* A MASS STORAGE ERROR WAS ENCOUNTERED WHEN READING
* OR WRITING A SYSTEM SECTOR.
*
* * MPF - WRITE LOCK-OUT ON CATALOG FILE.*
* THE CATALOG FILE WAS NOT IN WRITE MODE.
TITLE COMMON DECKS.
SPACE 4,10
* COMMON DECKS.
SPACE 4,10
*CALL COMPMAC
*CALL COMSCPS
*CALL COMSLSD
*CALL COMSMSP
*CALL COMSMST
*CALL COMSPIM
*CALL COMSWEI
TITLE MACRO DEFINITIONS.
SPACE 4,10
* MACRO DEFINITIONS.
ERROR SPACE 4,10
** ERROR - ISSUE ERROR MESSAGE AND ABORT.
*
* ERROR MSG
*
* MSG = ADDRESS OF ERROR MESSAGE.
*
* CALLS ERR.
PURGMAC ERROR
ERROR MACRO M
MACREF ERROR
LDC M
RJM ERR
ERROR ENDM
LDCA SPACE 4,10
** LDCA - LOAD AND CHECK CENTRAL ADDRESS.
*
* LDCA ADDR,OFFSET
*
* (ADDR - ADDR+1) = RELATIVE ADDRESS.
* OFFSET = ADDED TO ADDRESS.
*
* CALLS VCA.
*
* USES T1, T2.
PURGMAC LDCA
LDCA MACRO A,N
MACREF LDCA
LDD A
LPN 37
SHN 14
ADD A+1
IFC NE,$N$$,1
ADK N
RJM VCA
LDCA ENDM
TITLE DIRECT CELL DEFINITIONS.
SPACE 4,10
* DIRECT CELL DEFINITIONS.
FS EQU 20 - 24 FST ENTRY
RI EQU 25 - 26 RANDOM INDEX
CT EQU 35 OVERFLOW TRACK NUMBER
TK EQU 36 LABEL TRACK
FN EQU 40 - 44 FNT ENTRY
FA EQU 57 FNT ADDRESS
FT EQU 60 - 61 FIRST
IN EQU 62 - 63 IN
OT EQU 64 - 65 OUT
LM EQU 66 - 67 LIMIT
TITLE MAIN PROGRAM.
SPACE 4,10
ORG PPFW
MPF SPACE 4,10
** MPF - MAIN PROGRAM.
MPF BSS 0 ENTRY
RJM PRS PRESET
RJM 0,T1 EXECUTE FUNCTION
MONITOR DPPM DROP PP
LJM PPR EXIT TO PP RESIDENT
TITLE ERROR PROCESSING.
ERR SPACE 4,10
** ERR - ERROR PROCESSOR.
*
* ENTRY (A) = ADDRESS OF ERROR MESSAGE TEXT.
*
* EXIT TO *PPR*.
* PP HUNG IF *SYSTEM DEBUG* ENABLED.
*
* CALLS DFM, SFC.
*
* MACROS MONITOR.
ERR SUBR ENTRY
RJM DFM ISSUE DAYFILE MESSAGE
RJM SFC SET FST COMPLETE
LDK ZERL
CRD CM
LDM ERR SET ADDRESS OF CALLER
STD CM+1
MONITOR CHGM CONDITIONALLY HANG PP
MONITOR ABTM ABORT CONTROL POINT
LJM PPR EXIT TO PP RESIDENT
ERRMSG SPACE 4,10
* ERROR MESSAGES.
ERAR DATA C* MPF - ADDRESS OUT OF RANGE.*
ERBA DATA C* MPF - BUFFER ARGUMENT ERROR.*
ERCC DATA C* MPF - INCORRECT CIO CODE IN CATALOG REWRITE.*
ERCR DATA C* MPF - INCORRECT CATALOG REWRITE REQUEST.*
EREI DATA C* MPF - DEVICE ERROR IDLE SET.*
ERFC DATA C* MPF - FET COMPLETE BIT SET.*
ERFS DATA C* MPF - FET TOO SHORT.*
ERIC DATA C* MPF - INCORRECT CALL.*
ERID DATA C* MPF - INACCESSIBLE DEVICE.*
ERIF DATA C* MPF - INCORRECT FUNCTION.*
ERIO DATA C* MPF - I/O SEQUENCE ERROR.*
ERIS DATA C* MPF - INCORRECT SYSTEM SECTOR.*
ERLR DATA C* MPF - CATALOG REWRITE LINK BYTE ERROR.*
ERLS DATA C* MPF - INCORRECT LINK BYTE IN CATALOG SCAN.*
ERNF DATA C* MPF - FILE NOT FOUND.*
EROF DATA C* MPF - INCORRECT OVERFLOW FST REQUEST.*
ERRA DATA C* MPF - RANDOM ADDRESS NOT ON IAPF CHAIN.*
ERRR DATA C* MPF - INCORRECT SECTOR READ IN CATALOG REWRITE.*
ERSR DATA C* MPF - INCORRECT SECTOR READ IN CATALOG SCAN.*
ERSS DATA C* MPF - SYSTEM SECTOR ERROR.*
ERWL DATA C* MPF - WRITE LOCK-OUT ON CATALOG FILE.*
ERWR DATA C* MPF - INCORRECT WORD COUNT IN CATALOG REWRITE.*
ERWW DATA C* MPF - INCORRECT WRITE IN CATALOG REWRITE.*
TITLE FUNCTION PROCESSORS.
DTK SPACE 4,10
*** DTK (0) - DROP TRACKS ON IAPF CHAIN.
*
* ENTRY (IR+3 - IR+4) = PARAMETER ADDRESS.
*
*T ADDR 12/ EQ,24/ ,24/ EOI
*
* EQ = EST ORDINAL.
* EOI = RANDOM ADDRESS OF NEW EOI.
*
* EXIT TRT UPDATED.
* DEVICE CHECKPOINT REQUESTED.
DTK SUBR
LDCA IR+3 SET EST ORDINAL
CRD CM
LDD CM
LPC 3777
STD T5
LDCA IR+3
RJM CDA COMPUTE DISK ADDRESS
LDD T5
ADC 4000 DEVICE CHECKPOINT FLAG
STD CM+1
LDD T6 SET EOI TRACK
LPC 3777 CLEAR LINK BIT
STD CM+2
LDD T7 SET EOI SECTOR
STD CM+3
MONITOR DTKM
LJM DTKX RETURN
RWE SPACE 4,10
*** RWE (1) - REWRITE EOI.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
* LOCAL FILE POSITIONED TO CORRECT SECTOR FOR EOI WRITE.
*
* EXIT EOI WRITTEN.
RWE SUBR
RJM SFP SET FILE PARAMETERS
SETMS IO,RW
RJM PDS PROCESS DEVICE STATUS
RJM WEI WRITE EOI SECTOR
ENDMS
RJM SFC SET FST COMPLETE
UJN RWEX RETURN
DLK SPACE 4,15
*** DLK (2) - DELINK TRACKS FROM IAPF CHAIN.
*
* ENTRY (IR+3 - IR+4) = PARAMETER ADDRESS.
*
*T ADDR 12/ ,12/ EQ,12/ FT,12/ NT,12/ LT
*
* EQ = EST ORDINAL.
* FT = FIRST TRACK.
* NT = NEXT TRACK.
* LT = LAST TRACK.
*
* EXIT TRACKS DELINKED FROM IAPF CHAIN.
* DEVICE CHECKPOINT REQUESTED.
DLK SUBR
LDCA IR+3
CRD CM READ PARAMETER
LDD CM+1
LPC 3777
LMC 4000 DEVICE CHECKPOINT FLAG
STD CM+1
LDD CM+2 ENSURE LINK BIT CLEAR
LPC 3777
STD CM+2
MONITOR DLKM
UJN DLKX RETURN
RSC SPACE 4,10
*** RSC (4) - READ SYSTEM SECTOR.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
* RANDOM ADDRESS OF SYSTEM SECTOR IN FET+6.
*
* EXIT SYSTEM SECTOR RETURNED TO BUFFER STARTING AT *FIRST*.
* RANDOM ADDRESS IN FET+6 UPDATED.
RSC SUBR ENTRY/EXIT
RJM SFP SET FILE PARAMETERS
LDCA IR+3,6 GET RANDOM ADDRESS
RJM CDA COMPUTE DISK ADDRESS
SETMS IO
RJM PDS PROCESS DEVICE STATUS
LDN 0 DO NOT COMPARE FILE NAME
RJM RSS READ SYSTEM SECTOR
ZJN RSC2 IF SYSTEM SECTOR VALID
RSC1 ERROR ERSS * SYSTEM SECTOR ERROR.*
RSC2 ENDMS
LDCA IR+3,6
CRD CM
AOD CM+4 UPDATE RANDOM ADDRESS IN FET+6
SHN -14
RAD CM+3
LDCA IR+3,6
CWD CM
SBN 5 FIRST
CRD CM
LDCA CM+3,101 ENSURE THAT SYSTEM SECTOR FITS IN CM FL
LDCA CM+3
CWM BFMS,ON WRITE CONTROL BYTES TO CM BUFFER
CWM BFMS+2,HN WRITE SYSTEM SECTOR TO CM BUFFER
RJM SFC SET FST COMPLETE
LJM RSCX RETURN
WSC SPACE 4,10
*** WSC (5) - WRITE SYSTEM SECTOR.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
* SYSTEM SECTOR IN BUFFER STARTING AT *FIRST*.
* RANDOM ADDRESS OF SYSTEM SECTOR IN FET+6.
*
* EXIT SYSTEM SECTOR WRITTEN.
* RANDOM ADDRESS IN FET+6 UPDATED.
WSC SUBR ENTRY/EXIT
RJM SFP SET FILE PARAMETERS
LDCA IR+3,6 RANDOM ADDRESS
RJM CDA COMPUTE DISK ADDRESS
LDCA IR+3,1 FIRST
CRD CM
LDCA CM+3,101 ENSURE SYSTEM SECTOR IS WITHIN CM FL
LDCA CM+3
CRM BFMS,ON READ CONTROL BYTES FROM CM BUFFER
CRM BFMS+2,HN READ SYSTEM SECTOR FROM CM BUFFER
LDM BFMS
LMC 3777 CHECK CONTROL BYTES
LMM BFMS+1
LMN 77
ZJN WSC1 IF CONTROL BYTES VALID
ERROR ERIS * INCORRECT SYSTEM SECTOR.*
WSC1 LDD T6
STM FTSS SET FIRST TRACK
LDD T7
ADN FSMS
STM NSSS NEXT SECTOR
LMM SLM
NJN WSC2 IF NOT END OF TRACK
RJM SNT
STM NSSS
WSC2 SETMS IO,RW
RJM PDS PROCESS DEVICE STATUS
LDC BFMS+WLSF
RJM WDS WRITE SYSTEM SECTOR
PJN WSC3 IF NO DISK ERROR
ERROR ERSS * SYSTEM SECTOR ERROR.*
WSC3 ENDMS
RJM SFC SET FST COMPLETE
LDCA IR+3,6
CRD CM
AOD CM+4 UPDATE RANDOM ADDRESS IN FET+6
SHN -14
RAD CM+3
LDCA IR+3,6
CWD CM
LJM WSCX RETURN
RTF SPACE 4,25
*** RTF (6) - RETURN FST FOR CATALOG OVERFLOW TRACK.
*
* ENTRY (IR+3 - IR+4) = PARAMETER BLOCK ADDRESS.
*
*T ADDR 12/ EQ,12/ FT,12/ CT,12/ CS,12/ ST
*T,ADDR+1 48/ ,12/ OT
*T,ADDR+2 60/
*
* EQ = EST ORDINAL.
* FT = FIRST TRACK.
* CT = CURRENT TRACK (IGNORED).
* CS = CURRENT SECTOR (IGNORED).
* ST = STATUS (IGNORED).
* OT = OVERFLOW TRACK INDEX.
*
* EXIT (ADDR+2) = FST ENTRY FOR THE *OT*-TH OVERFLOW TRACK.
*
*T ADDR+2 12/ EQ,12/ FT,12/ CT,12/ CS,12/ ST
*
* EQ = EST ORDINAL.
* FT = FIRST TRACK.
* CT = FIRST TRACK.
* CS = 0.
* ST = 5.
RTF6 LDCA IR+3,2 RETURN LOCATION IN PARAMETER BLOCK
CWD FS WRITE REPLY
RTF SUBR ENTRY/EXIT
LDCA IR+3 READ PARAMETER BLOCK
CRD FS
LDCA IR+3,1
CRD CM
LDD CM+4
ZJN RTF1 IF NO OVERFLOW TRACK INDEX
STD CT
AOD CT INCREMENT FOR ENTRY INTO LOOP
LDD FS EST ORDINAL
LPC 3777
STD T5
LDD FS+1 TRACK
LPC 3777
LMC 4000
STD T6
LDN 0 SET FST FIELDS FOR RETURN
STD FS+3
LDN 5
STD FS+4
RJM CMS CHECK MASS STORAGE
NJN RTF1 IF ERROR
LDD FS+1 STARTING TRACK
LPC 3777
ADC 4000
RJM VTB VALIDATE TRACK BYTE
ZJN RTF2 IF TRACK BYTE VALID
RTF1 ERROR EROF * INCORRECT OVERFLOW FST REQUEST.*
RTF2 SOD CT DECREMENT COUNTER
ZJP RTF6 IF DONE
LDD FS+1 TRACK
STD T6
SETMS IO
RJM PDS PROCESS DEVICE STATUS
LDM SLM SECTOR LIMIT
SBN 1 LAST SECTOR ON TRACK
STD T7
LDC BFMS
RJM RDS READ SECTOR
PJN RTF3 IF NO ERROR
ERROR ERSR * INCORRECT SECTOR READ IN CATALOG SCAN.*
RTF3 ENDMS
LDM BFMS GET LINK BYTE
NJN RFT4 IF NOT EOF/EOI
LDM BFMS+1 GET SECOND LINK BYTE
RFT4 SHN 21-13
PJN RTF5 IF NOT LINK BYTE
SHN -6
STD FS+1
STD FS+2
RJM VTB VALIDATE TRACK LINK BYTE
ZJP RTF2 IF NO ERROR
RTF5 ERROR ERLS * INCORRECT LINK BYTE IN CATALOG SCAN.*
RWC SPACE 4,25
*** RWC (7) - REWRITE CATALOG SECTOR.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
* RANDOM ADDRESS FOR REWRITE IN FET+6.
* SECTOR DATA IN CM BUFFER.
*
* EXIT SECTOR REWRITTEN, FET UPDATED AND SET COMPLETE.
* CRI NOT UPDATED, RR NOT CLEARED, FST POSITION
* IS THE TRACK AND SECTOR JUST WRITTEN.
*
* TO *ERR* IF ERROR; ERROR IDLE SET ON DEVICE
* IF UNRECOVERABLE MS ERROR RETURNED ON REWRITE
* OF CATALOG SECTOR.
RWC SUBR ENTRY/EXIT
LDN 5+2 MINIMUM FET LENGTH REQUIRED
RJM IFQ INITIAL FET QUERY
RJM PIO PRESET I/O
RJM CMS CHECK MASS STORAGE
NJN RWC1 IF ERROR
LDD FS+1 FIRST TRACK
RJM VTB VALIDATE THAT TRACK IS ON LABEL TRT CHAIN
ZJN RWC2 IF NO ERROR
RWC1 ERROR ERCR * INCORRECT CATALOG REWRITE REQUEST.*
RWC2 NFA FA,R READ FNT
CRD CM
LDD CM+3
LPN 1
ZJN RWC3 IF FILE IN WRITE MODE
ERROR ERWL * WRITE LOCK-OUT ON CATALOG FILE.*
RWC3 LDD FS+1 FIRST TRACK
STD T6
LDCA IR+3,6 RANDOM ADDRESS FROM FET (RR)
CRD CM
LDD CM+4
STD RI+1 RANDOM INDEX
LDD CM+3
STD RI
LDN 0 ENSURE CURRENT TRT
RJM CRA CONVERT RANDOM ADDRESS
MJP RWC1 IF ADDRESS NOT VALID
LDD T6
LMD FS+1
NJP RWC1 IF TRACK IS NOT THE SAME AS FIRST TRACK
LDD T7 CHECK TRACK AT SECTOR LIMIT
ADN 1
STM BFMS NEXT SECTOR
LMM SLM
ZJN RWC4 IF AT LAST SECTOR IN TRACK
RJM COB CHECK OUTPUT BUFFER (GET WORDS IN BUFFER)
MJP RWC11 IF BUFFER ARGUMENT ERROR
STM BFMS+1 WORDS IN SECTOR
SBD HN
ZJN RWC5 IF FULL SECTOR
MJN RWC6 IF SHORT SECTOR
ERROR ERWR * INCORRECT WORD COUNT IN CAT REWRITE.*
RWC4 SETMS IO READ TO OBTAIN LINK BYTES
RJM PDS PROCESS DEVICE STATUS
LDC BFMS
RJM RDS
PJN RWC8 IF NO ERROR
ERROR ERRR * INCORRECT SECTOR READ IN CAT REWRITE.*
RWC5 LDC 214 *REWRITE* CODE
UJN RWC7 SET *CIO* FUNCTION CODE
RWC6 LDC 224 *REWRITER* CODE
RWC7 STD T3 SET *CIO* FUNCTION CODE
LDCA IR+3 GET *CIO* FUNCTION CODE FROM FET+0
CRD CM
LDD CM+4
LPC 1774 CODE FIELD
LMD T3
ZJN RWC12 IF *CIO* FUNCTION CODE MATCHES
ERROR ERCC * INCORRECT CIO CODE IN CAT REWRITE.*
RWC8 LDM BFMS CHECK LINKAGE BYTES
ZJN RWC9 IF EOF OR EOI
LMC 3777
ZJN RWC9 IF SYSTEM SECTOR
RJM COB CHECK OUTPUT BUFFER (GET WORDS IN BUFFER)
MJN RWC10 IF BUFFER ARGUMENT ERROR
LMM BFMS+1
ZJN RWC12 IF SECTOR LENGTH DID NOT CHANGE
RWC9 ENDMS
ERROR ERLR * CATALOG REWRITE LINK BYTE ERROR.*
RWC10 ENDMS
RWC11 ERROR ERBA * BUFFER ARGUMENT ERROR.*
RWC12 LDM BFMS+1 NUMBER OF WORDS IN SECTOR
STM T3 NUMBER OF WORDS TO READ
LDC BFMS+2 PP BUFFER ADDRESS
RJM RBB READ BINARY BUFFER
SETMS IO,RW,EBMS
RJM PDS PROCESS DEVICE STATUS
LDC BFMS+WLSF
RJM WDS
PJN RWC13 IF NO ERROR
LDC ERWW * MPF - INCORRECT WRITE IN CAT REWRITE.*
RJM DFM
RJM LTD LOG LOCATION TO DAYFILE
RJM FDD LOG FAMILY NAME, DEVICE NUMBER TO DAYFILE
LDN STEI SET ERROR IDLE STATUS
RJM SES
SMSTF GDEI
ERROR EREI * DEVICE ERROR IDLE SET.*
RWC13 ENDMS
LDN ZERL UPDATE OUT POINTER IN FET
CRD CM
LDD OT+1
STD CM+4
LDD OT
STD CM+3
LDCA IR+3,3
CWD CM
* T6 AND T7 (CURRENT TRACK AND CURRENT SECTOR) ARE NOT
* UPDATED TO REFLECT THE NEXT SECTOR TO AVOID THE NON-
* STANDARD NEXT TRACK LINKAGE PROBLEM. THUS, THE FST
* CURRENT POSITION WILL POINT AT THE SECTOR WRITTEN.
RJM CIO COMPLETE I/O
LJM RWCX RETURN
TITLE SUBROUTINES.
CDA SPACE 4,15
** CDA - COMPUTE DISK ADDRESS.
*
* ENTRY (A) = CM ADDRESS OF RANDOM ADDRESS.
* (T5) = EST ORDINAL.
*
* EXIT (T6) = TRACK.
* (T7) = SECTOR.
* (RI - RI+1) = RANDOM ADDRESS.
*
* USES T6, CM - CM+4, RI - RI+1.
*
* CALLS CRA.
*
* MACROS ERROR, SFA.
CDA SUBR ENTRY/EXIT
CRD CM
LDD CM+3
STD RI
LDD CM+4
STD RI+1
SFA EST,T5
ADK EQDE
CRD CM READ EST ENTRY
LDD CM+4
SHN 3 MST ADDRESS
ADN ALGL
CRD CM
LDD CM FIRST TRACK OF IAPF CHAIN
STD T6
LDN 0 ENSURE CURRENT TRT
RJM CRA COMPUTE RANDOM ADDRESS
PJN CDAX IF ADDRESS IS IN TRACK CHAIN
ERROR ERRA * RANDOM ADDRESS NOT ON IAPF CHAIN.*
CFS SPACE 4,10
** CFS - COMPLETE FET STATUS.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
*
* EXIT FET STATUS SET COMPLETE (IF FET ADDRESS VALID).
* (IR+3 - IR+4) = 0 (IF FET STATUS SET COMPLETE).
*
* USES CM - CM+4, IR+3 - IR+4.
*
* MACROS LDCA.
CFS SUBR ENTRY/EXIT
LDCA IR+3 FET ADDRESS
CRD CM
AOD CM+4
LDCA IR+3
CWD CM
LDN 0 CLEAR FET ADDRESS
STD IR+3
STD IR+4
UJN CFSX RETURN
CIO SPACE 4,20
** CIO - COMPLETE I/O.
*
* COMPLETE FST WRITE AND SET FET STATUS COMPLETE.
*
* ENTRY OPERATION COMPLETED ON FILE.
* (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
*
* EXIT FET STATUS SET COMPLETE.
* FST WRITTEN.
*
* USES FS - FS+4.
*
* CALLS CFS, SFC.
CIO SUBR ENTRY/EXIT
* UPDATE FST ENTRY AND WRITE.
LDD FS+4 SET FILE STATUS
SCN 16
LMN 4
STD FS+4
LDD T6 SET TRACK
STD FS+2
LDD T7 SET SECTOR
STD FS+3
LDD T5 SET EST ORDINAL
STD FS
RJM SFC SET FST COMPLETE
RJM CFS COMPLETE FET STATUS
UJP CIOX RETURN
CMS SPACE 4,15
** CMS - CHECK MASS STORAGE.
*
* ENTRY (T5) = EST ORDINAL.
* (T6) = TRACK.
*
* EXIT (A) = 0 IF NO ERROR.
* (TK) = LABEL TRACK.
*
* USES T1, CM - CM+4.
*
* MACROS SFA.
CMS1 LDN 1 INDICATE ERROR
CMS SUBR ENTRY/EXIT
SFA EST,T5 READ EST ENTRY
ADK EQDE
CRD CM
LDD CM
SHN 21-13
PJN CMS1 IF NOT MASS STORAGE
LDD CM+4 MST/10
STD T1
SHN 3
ADK TDGL
CRD CM
LDD CM+2 LENGTH OF TRT
ADD TH 4000/4
SHN 2
SBD T6 REQUESTED TRACK
MJN CMS1 IF INCORRECT TRACK
LDD T1
SHN 3
ADN ALGL
CRD CM
LDD CM+1 LABEL TRACK
LPC 3777
ADC 4000
STD TK
LDD CM+3
ZJP CMS1 IF NO CATALOG TRACKS
LDN 0 INDICATE NO ERROR
UJP CMSX RETURN
FDD SPACE 4,15
** FDD - LOG FAMILY NAME AND DEVICE NUMBER TO DAYFILE.
*
* ENTRY (T5) = EST ORDINAL.
*
* EXIT MESSAGE ISSUED.
*
* USES CM - CM+4.
*
* CALLS C2D, DFM.
*
* MACROS SFA.
FDD SUBR ENTRY/EXIT
SFA EST,T5 READ EST ENTRY
ADK EQDE
CRD CM
LDD CM+4 GET MST ADDRESS
SHN 3
ADK PFGL READ FAMILY NAME / DEVICE NUMBER
CRM FDDA+6,ON MERGE INTO MESSAGE
LDM FDDA+11 CONVERT DEVICE NUMBER
RJM C2D
STM FDDA+12 SET DEVICE NUMBER INTO MESSAGE
LDM FDDA+11 BLANK FILL FAMILY NAME
SCN 77 CLEAR BINARY DEVICE NUMBER
ZJN FDD1 IF TWO OR MORE BLANKS NEEDED
LMN 1R MERGE SINGLE BLANK INTO MESSAGE
STM FDDA+11
UJN FDD4 ISSUE MESSAGE
FDD1 LDC 2R SET TWO BLANKS INTO MESSAGE
STM FDDA+11
LDN 3 NUMBER OF BYTES MAY NEED TO BLANK FILL
STD CM
FDD2 LDM FDDA+5,CM
NJN FDD3 IF END OF FAMILY NAME FOUND
LDC 2R SET TWO MORE BLANKS INTO MESSAGE
STM FDDA+5,CM
SOD CM DECREMENT COUNTER
NJN FDD2 IF NOT DONE
UJN FDD4 ISSUE MESSAGE
FDD3 LPN 77 CHECK IF SINGLE BLANK NEEDED
NJN FDD4 IF NO BLANK NEEDED
LDM FDDA+5,CM
LMN 1R SINGLE BLANK
STM FDDA+5,CM
FDD4 LDC FDDA
RJM DFM ISSUE DAYFILE MESSAGE
LJM FDDX RETURN
FDDA DATA C*MPF - FM DN FFFFFFF NN.*
IFQ SPACE 4,15
** IFQ - INITIAL FET QUERY.
*
* VALIDATE THAT THE FET IS LONG ENOUGH, IS WITHIN FL,
* AND DOES NOT HAVE COMPLETE BIT SET.
*
* ENTRY (A) = MINIMUM FET LENGTH REQUIRED.
* (IR+3 - IR+4) = FET ADDRESS.
*
* EXIT TO *ERR* IF FET IS NOT VALID.
*
* USES T2, T3, CM - CM+4.
*
* CALLS VCA.
*
* MACROS LDCA.
IFQ SUBR ENTRY/EXIT
STD T3 REQUIRED FET LENGTH
LDCA IR+3 VALIDATE FET+0 ADDRESS
CRD CM CHECK COMPLETE BIT CLEAR
LDD CM+4
LPN 1
ZJN IFQ1 IF COMPLETE BIT IS CLEAR
ERROR ERFC * FET COMPLETE BIT SET.*
IFQ1 LDCA IR+3,1 GET FET LENGTH
CRD CM
LDD CM+3
SHN -6
ADN 5
STD T2 CHECK FET LENGTH
SBD T3
PJN IFQ2 IF FET IS LONG ENOUGH
ERROR ERFS * FET TOO SHORT.*
IFQ2 LDD IR+3 CHECK IF LAST WORD OF FET IS WITHIN FL
SHN 14
LMD IR+4
ADD T2
SBN 1
RJM VCA VALIDATE CENTRAL ADDRESS
UJP IFQX RETURN
LTD SPACE 4,10
** LTD - LOG LOCATION TO DAYFILE.
*
* ENTRY (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
*
* EXIT MESSAGE ISSUED TO DAYFILE.
*
* CALLS C2D, DFM.
LTD SUBR ENTRY/EXIT
LDD T5 CONVERT EST ORDINAL
RJM C2D
STM LTDA+5
LDD T5
SHN -6
RJM C2D
STM LTDA+4
LDD T6 CONVERT TRACK
RJM C2D
STM LTDA+11
LDD T6
SHN -6
RJM C2D
STM LTDA+10
LDD T7 CONVERT SECTOR
RJM C2D
STM LTDA+15
LDD T7
SHN -6
RJM C2D
STM LTDA+14
LDC LTDA ISSUE MESSAGE
RJM DFM
UJP LTDX RETURN
LTDA DATA C*MPF - EQXXXX TKYYYY SCZZZZ.*
PDS SPACE 4,10
** PDS - PROCESS DEVICE STATUS.
*
* ENTRY (MSD) = DEVICE STATUS UPON EXIT FROM *SETMS*.
* (T5) = EST ORDINAL OF THE DEVICE.
* DRIVER SOFTWARE IS LOADED.
*
* EXIT TO *ERR* IF DEVICE IS INACCESSIBLE.
*
* MACROS ENDMS, ERROR.
PDS SUBR ENTRY/EXIT
LDM MSD
SHN 21-6
PJN PDSX IF DEVICE IS AVAILABLE, RETURN
ENDMS
ERROR ERID * INACCESSIBLE DEVICE.*
PIO SPACE 4,20
** PIO - PRESET I/O.
*
* SET DIRECT CELLS FOR I/O OPERATION.
*
* ENTRY (IR+3 - IR+4) = VALIDATED FET ADDRESS.
*
* EXIT (FA) = FST ADDRESS OF FILE.
* (FS - FS+4) = FST ENTRY FOR FILE.
* (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
* (FT - FT+1) = FIRST.
* (IN - IN+1) = IN.
* (OT - OT+1) = OUT.
* (LM - LM+1) = LIMIT.
*
* CALLS SBA, SFP, VBA.
PIO SUBR ENTRY/EXIT
RJM SFP SET FILE PARAMETERS
RJM SBA SET BUFFER ADDRESSES
RJM VBA VALIDATE BUFFER ADDRESSES
UJN PIOX RETURN
SBA SPACE 4,15
** SBA - SET BUFFER ARGUMENTS.
*
* READ BUFFER POINTERS INTO DIRECT CELLS.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
*
* EXIT (FT - FT+1) = FIRST.
* (IN - IN+1) = IN.
* (OT - OT+1) = OUT.
* (LM - LM+1) = LIMIT.
*
* USES CM - CM+4, FT - FT+1, IN - IN+1, LM - LM+1, OT - OT+1.
SBA SUBR ENTRY/EXIT
LDCA IR+3,4 READ LIMIT
CRD LM-3
SBN 1 READ OUT
CRD OT-3
SBN 1 READ IN
CRD CM
LDD CM+3
STD IN
LDD CM+4
STD IN+1
LDCA IR+3,1 READ FIRST
CRD CM
LDD CM+3
LPN 77
STD FT
LDD CM+4
STD FT+1
UJP SBAX RETURN
SFC SPACE 4,15
** SFC - SET FST COMPLETE.
*
* ENTRY (FS - FS+4) = FST.
* (FA) = FNT ADDRESS.
* (FA) = 0, IF NO FILE CURRENTLY SET BUSY.
*
* EXIT FST SET COMPLETE AND WRITTEN TO CENTRAL.
* (FA) = 0.
*
* USES FA, FS+4.
*
* MACROS NFA.
SFC SUBR ENTRY/EXIT
AOD FS+4 SET STATUS COMPLETE
LDD FA
ZJN SFCX IF NO FST ADDRESS
NFA FA,R WRITE FST
ADK FSTL
CWD FS
LDN 0 CLEAR FNT ADDRESS
STD FA
UJN SFCX RETURN
SFP SPACE 4,10
** SFP - SET FILE PARAMETERS.
*
* ENTRY (IR+3 - IR+4) = FET ADDRESS.
*
* EXIT (FA) = FNT ADDRESS.
* (FS - FS+4) = FST ENTRY.
* (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
* FST SET BUSY.
*
* USES FA, T5, T6, T7, FN - FN+4, FS - FS+4.
*
* CALLS SAF, SFB.
*
* MACROS ERROR, LDCA.
SFP SUBR ENTRY/EXIT
LDCA IR+3 READ FILE NAME
CRD FN
LDCA IR+3,4 READ FNT ADDRESS
CRD FS
LDD FS
RJM SAF SEARCH FOR ASSIGNED FILE
NJN SFP1 IF FILE FOUND
ERROR ERNF * FILE NOT FOUND.*
SFP1 RJM SFB SET FILE BUSY
ZJN SFP2 IF FILE SET BUSY
LDN 0 CLEAR FNT ADDRESS
STD FA
ERROR ERIO * I/O SEQUENCE ERROR.*
SFP2 LDD FS
LPC 3777
STD T5 EST ORDINAL
LDD FS+2
STD T6 TRACK
LDD FS+3
STD T7 SECTOR
UJP SFPX RETURN
VBA SPACE 4,10
** VBA - VALIDATE BUFFER ADDRESSES.
*
* ENTRY (FT - FT+1) = FIRST.
* (IN - IN+1) = IN.
* (OT - OT+1) = OUT.
* (LM - LM+1) = LIMIT.
*
* EXIT TO *ERR* IF BUFFER ARGUMENT ERROR.
*
* MACROS ERROR.
VBA SUBR ENTRY/EXIT
LDD LM CHECK LIMIT
SHN 14
LMD LM+1
SBN 1
SHN -6
SBD FL
PJN VBA1 IF LIMIT .GT. FL
LDD OT CHECK OUT
SBD LM
SHN 14
ADD OT+1
SBD LM+1
PJN VBA1 IF OUT .GE. LIMIT
LDD OT
SBD FT
SHN 14
ADD OT+1
SBD FT+1
MJN VBA1 IF OUT .LT. FIRST
LDD IN CHECK IN
SBD LM
SHN 14
ADD IN+1
SBD LM+1
PJN VBA1 IF IN .GE. LIMIT
LDD IN
SBD FT
SHN 14
ADD IN+1
SBD FT+1
MJN VBA1 IF IN .LT. FIRST
UJP VBAX RETURN
VBA1 ERROR ERBA * BUFFER ARGUMENT ERROR.*
VCA SPACE 4,10
** VCA - VALIDATE CENTRAL ADDRESS.
*
* ENTRY (A) = RELATIVE ADDRESS.
*
* EXIT (A) = ABSOLUTE ADDRESS IF ADDRESS VALID.
*
* USES T1, T2.
*
* MACROS ERROR.
VCA SUBR
STD T2
SCN 1
ZJN VCA1 IF ADDRESS .LE. 1
SCN 77
SHN 6
STD T1
SHN 6
SBD FL
PJN VCA1 IF ADDRESS .GE. FL
LDD T1 FORM ABSOLUTE ADDRESS
SHN 6
ADD RA
SHN 6
ADD T2
UJP VCAX RETURN
VCA1 ERROR ERAR * ADDRESS OUT OF RANGE.*
VTB SPACE 4,10
** VTB - VALIDATE TRACK LINK BYTE.
*
* ENTRY (A) = TRACK LINK BYTE TO VALIDATE.
* (TK) = LABEL TRACK.
* (T5) = EST ORDINAL.
*
* EXIT (A) = 0 IF NO ERROR.
*
* USES T1, T2, T6, CM - CM+4.
*
* CALLS SNT.
*
* MACROS MONITOR.
VTB SUBR ENTRY/EXIT
STD T2 SAVE BYTE
LDD TK LABEL TRACK
STD T6
LDN UTRS SET SUBFUNCTION CODE
STD CM+3
LDD T5 SET EST ORDINAL
STD CM+1
MONITOR STBM GET CURRENT TRT
VTB1 RJM SNT GET LINK
STD T6
LMD T2
ZJN VTB3 IF LINKED TO REQUESTED TRACK BYTE
LDD T6
SHN 21-13
MJN VTB1 IF LINK BYTE
VTB2 LDN 1 INDICATE ERROR
UJN VTBX RETURN
VTB3 LDD T6
SHN 21-13
PJN VTB2 IF NOT A LINK BYTE
RJM SNT
LDD T1
ADC SHNI+6+14-4
STM VTBA
LDD CM+4
VTBA SHN **
PJN VTB2 IF NOT RESERVED
LDN 0 INDICATE NO ERROR
UJP VTBX RETURN
TITLE BUFFER ALLOCATION.
SPACE 4,10
* BUFFER ALLOCATION.
WEIA BSSZ WCEI*5+2 EOI SECTOR BUFFER (FOR *COMPWEI*)
EBMS EQU BFMS-502 MASS STORAGE ERROR BUFFER
TITLE COMMON DECKS.
SPACE 4,10
* COMMON DECKS.
*CALL COMPCOB
CRA$ EQU 0 ENSURE CURRENT TRT
*CALL COMPCRA
*CALL COMPCRS
*CALL COMPC2D
*CALL COMPRBB
RIS$ EQU 1 READ IAPF SYSTEM SECTOR
*CALL COMPRSS
SAF$ EQU 0 SEARCH SPECIFIC ENTRY FIRST
*CALL COMPSAF
*CALL COMPSES
*CALL COMPSFB
*CALL COMPSNT
*CALL COMPTGB
*CALL COMPWEI
SPACE 4,10
ERRPL *-EBMS OVERFLOW INTO MS ERROR BUFFER
ERRPL *-BFMS OVERFLOW INTO MS BUFFER
TITLE PRESET.
PRS SPACE 4,15
** PRS - PRESET.
*
* ENTRY (IR+2) = FUNCTION CODE.
*
* EXIT (T1) = FUNCTION PROCESSOR ADDRESS.
*
* USES FA, T1, CM - CM+4.
*
* CALLS CRS.
*
* MACROS ERROR.
PRS SUBR
LDN 0 CLEAR FST ADDRESS
STD FA
LDD CP CHECK IF CALLER IS *SSJ=*
ADK SEPW
CRD CM
LDD CM
SHN 21-2
MJN PRS2 IF CALLER IS *SSJ=*
PRS1 ERROR ERIC * INCORRECT CALL.*
PRS2 RJM CRS
ZJN PRS1 IF NOT CALLED WITH AUTO RECALL
LDD IR+2
STD T1 FUNCTION CODE
SBN TFCNL
MJN PRS4 IF LEGAL FUNCTION
PRS3 ERROR ERIF * INCORRECT FUNCTION.*
PRS4 LDM TFCN,T1 FUNCION PROCESSOR ADDRESS
STD T1
ZJN PRS3 IF INCORRECT FUNCTION
UJP PRSX RETURN
SPACE 4,10
* TFCN - TABLE OF FUNCTION PROCESSORS.
TFCN BSS 0
CON DTK DROP TRACKS
CON RWE REWRITE END OF INFORMATION
CON DLK DELINK TRACKS
CON 0 (RESERVED)
CON RSC READ SYSTEM SECTOR
CON WSC WRITE SYSTEM SECTOR
CON RTF RETURN FST FOR CATALOG OVERFLOW TRACK
CON RWC REWRITE CATALOG SECTOR
TFCNL EQU *-TFCN
SPACE 4,10
OVERFLOW PPFW,EPFW
SPACE 4
END