cdc:nos2.source:opl871:mst
Table of Contents
MST
Table Of Contents
- [00010] MST - MASS STORAGE TEST.
- [00012] MASS STORAGE TEST.
- [00212] DATA.
- [00246] MAIN PROGRAM.
- [00248] MAIN PROGRAM.
- [00295] TEST SECTIONS.
- [00297] WSQ - WRITE SEQUENTIAL.
- [00349] RSQ - READ SEQUENTIAL.
- [00415] POS - SEQUENTIAL POSITIONING.
- [00489] RRD - RANDOM READ.
- [00547] WRD - RANDOM WRITE.
- [00626] SUBROUTINES.
- [00628] ABT - ABORT JOB.
- [00663] AIP - ADVANCE *IN* POINTER.
- [00802] CKS - CHECK SECTOR.
- [00918] CIO - COMPUTE I/O RATE.
- [00950] CTR - COMPUTE TRANSFER RATE.
- [00990] CVA - CONVERT ADDRESS.
- [01033] DCH - DATA CHECK.
- [01105] ERR - SEND ERROR MESSAGE.
- [01203] GDB - GENERATE DATA BUFFER.
- [01251] MEM - REQUEST MEMORY.
- [01275] MES - SEND MESSAGE.
- [01294] RNO - GENERATE RANDOM SECTOR NUMBER.
- [01333] WIC - WAIT I/O COMPLETE.
- [01378] BUFFERS.
- [01390] PRESET.
- [01404] PRS - PRESET PROGRAM.
- [01655] PRESET SUBROUTINES.
- [01657] CNS - CALCULATE NUMBER OF SECTORS.
- [01738] PRESET DATA.
- [01790] TBLM - GENERATE TABLE VIA *TBL* MACRO.
- [01824] ADDRESS CONVERSION ROUTINES.
- [01826] CDE - CONVERT *DE* ADDRESS.
- [01831] CDP - CONVERT *DP* ADDRESS.
Source Code
- MST.txt
- IDENT MST,FET
- ABS
- SST FL
- ENTRY MST
- ENTRY MFL=
- ENTRY SSJ=
- SYSCOM B1
- *COMMENT MST - MASS STORAGE TEST.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- TITLE MST - MASS STORAGE TEST.
- SPACE 4
- *** MST - MASS STORAGE TEST.
- * G. R. MANSFIELD. 70/12/06.
- * MODIFIED BY W. E. GOEBEL. 74/01/21.
- SPACE 4
- *** MST IS A CENTRAL PROCESSOR DRIVEN MASS STORAGE TEST. IT
- * PERFORMS SEQUENTIAL WRITES, READS AND POSITIONS ALONG WITH
- * RANDOM READS AND WRITES ON A SELECTED MASS STORAGE DEVICE.
- *
- * OPERATING INSTRUCTIONS.
- * WHEN CALLED, MST WILL REQUEST ASSIGNMENT OF THE FILE *DISK1*.
- *
- * SEQUENTIAL WRITE.
- * RANDOM DATA IS WRITTEN SEQUENTIALLY ON THE FILE IN THIS
- * FORMAT - 1 WORD CONTAINING JSN, MFID AND PRU NUMBER
- * 1 WORD CONTAINING RANDOM DATA SEED
- * 61 WORDS OF RANDOM DATA
- * 1 WORD CHECKSUM OF ABOVE DATA
- *
- * SEQUENTIAL READ.
- * FILE IS REWOUND AND DATA IS READ BACK CHECKING SECTOR NUMBER
- * AND CHECKSUM OF RANDOM DATA.
- *
- * SEQUENTIAL POSITIONING.
- * FILE IS POSITIONED ALTERNATELY TO SUCCESSIVE SECTORS
- * FROM BEGINING TO END.
- *
- * RANDOM READ.
- * RANDOM SECTOR NUMBERS ARE PICKED AND THE SECTORS READ.
- * THE SECTOR NUMBER IS CHECKED AND THE DATA CHECKSUM VERIFIED.
- *
- * RANDOM WRITE.
- * RANDOM SECTOR NUMBERS ARE PICKED AND THE SECTORS ARE WRITTEN.
- * A SEQUENTIAL READ IS PERFORMED TO VERIFY THE WRITTEN DATA.
- *
- * FOR BUFFERED DISKS THERE IS A THREE SECOND PAUSE FOLLOWING
- * EACH SECTION TO ALLOW I/O ACTIVITY TO COMPLETE ON THE
- * DISK BEFORE CONTINUING TO THE NEXT SECTION.
- SPACE 4
- *** ARGUMENT PARAMETERS.
- *
- * T TEST SECTION (CAN BE EQUATED).
- * T=0 OR T OR OMISSION OF THIS PARAMETER WILL RUN ALL
- * SECTIONS.
- * T=1 WRITE SEQUENTIAL.
- * T=2 READ SEQUENTIAL.
- * T=3 POSITION SEQUENTIAL.
- * T=4 RANDOM READ.
- * T=5 RANDOM WRITE.
- *
- * P TEST PATTERN (CAN BE EQUATED).
- * P=0 ALL ZEROS PATTERN.
- * P=1 ALL ONES PATTERN.
- * P=2 25252525252525252525B PATTERN.
- * P=3 52525252525252525252B PATTERN.
- * P=4 DO NOT GENERATE OR CHECK DATA. THE SECTOR
- * NUMBER, JSN AND MFID IS GENERATED AND CHECKED
- * FOR EACH SECTOR.
- * P=5 OR P OR OMISSION OF THIS PARAMETER WILL ENABLE
- * RANDOM PATTERN.
- * P=6 DO NOT GENERATE OR CHECK DATA. DO NOT COPY DATA
- * BETWEEN THE CIO BUFFER AND THE WORKING BUFFER.
- * THE SECTOR NUMBER, JSN AND MFID IS GENERATED AND
- * CHECKED FOR EACH SECTOR.
- *
- * N NUMBER OF SECTORS (CAN BE EQUATED).
- * N=0 GIVES ARGUMENT ERROR MESSAGE AND PROGRAM ABORT.
- * N=XXXXXXX WILL RUN THE TEST ON XXXXXXX SECTORS.
- * IF TOO LARGE A VALUE OF XXXXXXX IS SPECIFIED,
- * A TRACK LIMIT WILL RESULT.
- * N=* WILL TEST ALL AVAILABLE SECTORS.
- * IF SPECIFIED ON A DEVICE WITH OTHER ACTIVITY,
- * A TRACK LIMIT MAY RESULT.
- *
- * NW NO WRITE PERFORMED AT BEGINING OF TEST.
- *
- * TL TRANSFER LENGTH IN SECTORS FOR RANDOM I/O.
- * DEFAULT IS 10B SECTORS.
- *
- * NV IF SPECIFIED, DO NOT PERFORM SEQUENTIAL READ AFTER
- * RANDOM WRITE.
- *
- * RO IF SPECIFIED, SIMULATE ROLLIN/ROLLOUT I/O ON BUFFERED
- * DEVICES.
- *
- * IO IF SPECIFIED, GIVES THE NUMBER OF I/O-S TO BE
- * PERFORMED ON THE DEVICE. IF *IO* IS NOT SPECIFIED,
- * THE VALUE FOR NUMBER OF I/O-S IS COMPUTED FROM THE
- * TRANSFER LENGTH.
- *
- * NOTE:
- * SENSE SWITCH 2 - IF SET WILL ABORT ON ERRORS.
- * SENSE SWITCH 3 - IF SET WILL CONTINUE AT END OF TEST.
- * SENSE SWITCH 4 - IF SET WILL REPEAT CURRENT SECTION.
- *
- * ISSUING A CALL OF MST FROM THE CONSOLE WILL
- * SELECT ALL SECTIONS, RANDOM PATTERN, DEFAULT SECTOR
- * VALUE, PAUSE ON ERROR AND STOP AT END OF TEST.
- * TO CONTINUE ON ERRORS TYPE *GO.*.
- *
- MST SPACE 4
- *** DAYFILE MESSAGES.
- *
- * * ARGUMENT ERROR.* = ONE OF PARAMETERS IS IN ERROR.
- *
- * * ILLEGAL EQUIPMENT.* = THE EQUIPMENT WHICH WAS ASSIGNED IN
- * RESPONSE TO THE DISPLAY REQUEST IS NOT
- * RECOGNIZED AS BEING A DEVICE UPON WHICH
- * THE TEST MAY BE RUN.
- *
- * * SEQUENTIAL WRITE.* = THIS TEST SECTION IS BEING EXECUTED.
- *
- * * SEQUENTIAL READ.* = THIS TEST SECTION IS BEING EXECUTED.
- *
- * * SEQUENTIAL POSITIONING.* = THIS SECTION IS BEING EXECUTED.
- *
- * * RANDOM READ.* = THIS TEST SECTION IS BEING EXECUTED.
- *
- * * RANDOM WRITE.* = THIS TEST SECTION IS BEING EXECUTED.
- *
- * *MST TRANSFER RATE = XXXXXX.XXX KC.* = THE DISK TRANSFER
- * RATE FOR THE PREVIOUS SECTION WAS
- * XXXXXX.XXX KILO-CHARACTERS PER SECOND.
- *
- * * NUMBER OF I/O-S = XXXXXXXXXX.* = THE NUMBER OF IO PAIRS
- * SPECIFIED WITH THE *IO* PARAMETER OR
- * COMPUTED FROM THE *NL* PARAMETER.
- *
- * * IO PER SECONDS = XXXXXX.XXX.* = NUMBER OF IO-S PERFORMED
- * PER SECOND.
- *
- * * FILE SIZE = XXXXXXXXXX SECTORS.* = SIZE OF THE DATA
- * FILE IN SECTORS.*
- *
- * * ILLEGAL EOF DETECTED.* = AN EOF WAS DETECTED BEFORE THE
- * LAST SECTOR ON THE FILE.
- *
- * * NO EOF DETECTED ON LAST READ.* = NO EOF ON THE LAST SECTOR.
- *
- * * JOB ABORTED.* = ABNORMAL TERMINATION OF MST.
- *
- * *EQXXX,DATA ERROR AT -PHYSICAL POSITION-.*
- * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.*
- * DATA ERRORS HAVE BEEN DETECTED ON A
- * SECTOR WHICH WAS READ.
- *
- * *EQXXX,POS. ERROR AT -PHYSICAL POSITION-.*
- * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.*
- * THE SECTOR WHICH WAS READ WAS NOT
- * THE CORRECT SECTOR. THE POSITION GIVEN
- * IS THE POSITION OF THE SECTOR READ.
- *
- * *EQXXX,DEV.-TYPE ERR--PHYSICAL POSITION-.*
- * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.*
- * CIO HAS DETECTED ONE OF THE FOLLOWING
- * ERRORS WHICH APPEAR IN THE -TYPE ERR-
- * POSITION.
- * -TYPE ERR- = PARITY ER. -- PARITY ERROR
- * ADDR. ERR. -- ADDRESS ERROR
- * STATUS ER. -- DEVICE STATUS ERROR
- * 81 FNC REJ -- 6681 FUNCTION REJECT
- * RESERVED -- DEVICE RESERVED
- * NOT READY -- DEVICE NOT READY
- *
- * *EQXXX,EXP. POSITION -PHYSICAL POSITION-.*
- * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.*
- * WHEN A POSITION OR DEVICE ADDRESS ERROR
- * OCCURES THE EXPECTED POSITION IS GIVEN
- * BY THIS MESSAGE.
- *
- * *EQXXX,DATA EXP WWW,EEEEEEEEEEEEEEEEEEEE*
- * *EQXXX,DATA READ WWW,RRRRRRRRRRRRRRRRRRRR*
- * *EQXXX,DATA DIFF WWW,DDDDDDDDDDDDDDDDDDDD*
- * *DATA OK.* (OPTIONAL - SEE BELOW)
- * WHEN A DATA ERROR OR DEVICE PARITY ERROR IS
- * DETECTED THE DATA ON THE SECTOR IS CHECKED
- * AND THE ERRORS REPORTED. IF NO ERRORS ARE
- * FOUND THE MESSAGE *DATA OK.* IS ISSUED.
- * WWW IS THE WORD NUMBER IN THE SECTOR.
- * EE-----E IS THE EXPECTED DATA.
- * RR-----R IS THE DATA READ.
- * DD-----D IS THE DIFFERNCE.
- *
- * * MST ERROR - GO / DROP.* = *MST* HAS DETECTED AN
- * IRRECOVERABLE READ ERROR.
- *
- * * END MASS STORAGE TEST.* = END OF TEST.
- SPACE 4
- ** COMMON DECKS.
- *CALL COMCMAC
- *CALL COMCCMD
- *CALL COMSCIO
- *CALL COMSMSP
- SPACE 4
- **** ASSEMBLY CONSTANTS.
- DBUFL EQU 4001B
- ****
- TITLE DATA.
- FET SPACE 4
- * FILE FET.
- ORG 110B
- FET BSS 0
- D BSS 0
- DISK1 RFILEB DBUF,DBUFL,(FET=8),(DTY=2RMS)
- * DATA STORAGE.
- FL CON 0 ORIGINAL FIELD LENGTH
- NS CON 10000B NUMBER OF SECTORS
- SM CON 7777B SECTOR MASK
- NW CON 0 NO SEQUENTIAL WRITE AT BEGINNING OF TEST
- TS CON 0L0 TEST SECTION TO BE EXECUTED
- TP CON 0L5 DEFAULT TEST PATTERN
- ST CON 0 START TIME
- ET CON 0 ENDING TIME
- BD CON 0 BUFFERED DEVICE FLAG
- ND CON 0 NULL DATA FLAG
- NT CON 1 NO DATA TRANSFER FLAG
- TL CON 0L10B TRANSFER LENGTH
- NV CON 0 NO VERIFICATION AFTER RANDOM WRITE FLAG
- RO CON 0 ROLLOUT SIMULATION FLAG
- IO CON 0 NUMBER OF I/O-S
- JN CON 0 24/JSN, 12/MAINFRAME ID, 24/0
- EMTS VFD 1/1,59/0 EXTENDED MEMORY TRACK SHIFT
- * SPECIAL ENTRY POINTS.
- SSJ= EQU 0
- TITLE MAIN PROGRAM.
- MST SPACE 4
- ** MST - MAIN PROGRAM.
- MST SB1 1 (B1) = 1
- SB7 B0
- SX6 A0
- SA6 FL
- RJ PRS PRESET
- MST1 SA1 NW
- NZ X1,MST2 IF NO WRITE
- RJ WSQ WRITE SEQUENTIAL
- RJ WIC WAIT I/O COMPLETE
- MST2 SA1 TS
- ZR X1,MST3 IF ALL SECTIONS SELECTED
- SB5 X1-1
- ZR B5,MST7
- SB2 3
- GT B5,B2,MST6
- EQ B5,B2,MST5
- GT B5,B1,MST4
- MST3 RJ RSQ READ SEQUENTIAL
- RJ WIC WAIT I/O COMPLETE
- SA1 TS
- NZ X1,MST7
- MST4 RJ POS POSITION SEQUENTIAL
- RJ WIC WAIT I/O COMPLETE
- SA1 TS
- NZ X1,MST7
- MST5 RJ RRD READ RANDOM
- RJ WIC WAIT I/O COMPLETE
- SA1 TS
- NZ X1,MST7
- MST6 RJ WRD WRITE RANDOM
- RJ WIC WAIT I/O COMPLETE
- SA1 NV
- NZ X1,MST7 IF NO VERIFICATION REQUIRED
- RJ RSQ READ SEQUENTIAL
- MST7 SA1 B0
- LX1 59-8
- PL X1,MST8 IF REPEAT TEST NOT SET
- RJ WIC WAIT I/O COMPLETE
- EQ MST1 CONTINUE
- MST8 MESSAGE (=C* END MASS STORAGE TEST.*)
- ENDRUN
- MSTA CON 0 TEMPORARY USED BY RSQ AND RRD
- TITLE TEST SECTIONS.
- WSQ SPACE 4,15
- ** WSQ - WRITE SEQUENTIAL.
- *
- * USES X - 0, 1, 2, 4, 5, 6, 7.
- * A - 1, 5, 6, 7.
- *
- * CALLS AIP, CKS, CTR, GDB, MEM, MES.
- *
- * MACROS REWIND, RTIME, WRITEF, WRITEW.
- WSQ SUBR ENTRY/EXIT
- SX6 1 SET SECTORS TO CHECK
- SA6 CKSI
- SA1 FL
- RJ MEM REQUEST MEMORY
- WSQ1 REWIND D,R
- SX1 =C* SEQUENTIAL WRITE.*
- RJ MES SEND MESSAGE
- SA5 NS NUMBER OF SECTORS TO WRITE
- BX0 X5
- BX6 X5 SAVE SECTOR COUNT
- SA6 CTRB
- SX5 B1
- RTIME ST
- WSQ2 SA2 JN JSN AND MFID
- SA1 TP GENERATE SECTOR TO WRITE
- BX7 X2+X5
- BX6 X1
- SA7 SBUF
- SA6 SBUF+1
- RJ GDB GENERATE DATA BUFFER
- SA7 TP
- SX2 D SET FET ADDRESS
- SA1 NT
- ZR X1,WQS3 IF NO DATA TRANSFER
- WRITEW X2,SBUF,100B
- EQ WQS4 CHECK FOR CIO ERROR
- WQS3 RJ AIP ADVANCE *IN* POINTER
- WQS4 SX4 B0
- RJ CKS CHECK FOR CIO ERROR
- SX6 B1+
- IX5 X5+X6 ADVANCE SECTOR COUNTER
- IX0 X0-X6
- NZ X0,WSQ2 IF MORE SECTORS TO WRITE
- WRITEF D,R
- RJ CTR COMPUTE TRANSFER RATE
- SA1 B0
- LX1 59-9
- NG X1,WSQ1 IF REPEAT SECTION SET
- EQ WSQX RETURN
- RSQ SPACE 4,15
- ** RSQ - READ SEQUENTIAL.
- *
- * USES X - 0, 1, 2, 4, 5, 6, 7.
- * A - 1, 5, 6, 7.
- *
- * CALLS ABT, AOP, CKS, CTR, MEM, MES.
- *
- * MACROS MESSAGE, READ, READW, REWIND, RTIME.
- RSQ SUBR ENTRY/EXIT
- SX6 1 SET SECTORS TO CHECK
- SA6 CKSI
- SA1 FL
- RJ MEM REQUEST MEMORY
- RSQ1 REWIND D,R
- SX1 =C* SEQUENTIAL READ.*
- RJ MES SEND MESSAGE
- SA5 NS NUMBER OF SECTORS
- BX0 X5
- BX6 X5 SAVE SECTOR COUNT
- SA6 CTRB
- SX5 B0
- RTIME ST
- RSQ2 READ D
- RSQ3 SX2 D SET FET ADDRESS
- SA1 NT
- ZR X1,RSQ3.1 IF NO DATA TRANSFER
- READW X2,SBUF,100B
- EQ RSQ3.2 CHECK FOR EOR/EOF
- RSQ3.1 RJ AOP ADVANCE *OUT* POINTER
- RSQ3.2 ZR X1,RSQ3.3 IF NO EOR/EOF DETECTED
- SX1 X1+3 CHECK FOR *CIO* ERROR
- NZ X1,RSQ5 IF NO *CIO* ERROR
- RSQ3.3 ZR X0,RSQ4 IF EOF EXPECTED
- SX2 B1
- IX4 X5+X2 ADVANCE EXPECTED SECTOR
- SA5 SBUF
- BX6 X4
- SA6 MSTA SAVE RANDOM ADDRESS
- IX0 X0-X2 DECREMENT SECTOR COUNTER
- RJ CKS CHECK SECTOR
- SA5 MSTA
- ZR X4,RSQ3 IF NO ERROR DETECTED
- SA1 D+1 RESTART READ ON ERROR
- SX2 B1
- IX7 X5+X2 SET RANDOM ADDRESS TO NEXT SECTOR
- SX6 X1
- SA6 A1+B1
- SA7 D+6
- SA6 A6+B1
- EQ RSQ2
- RSQ4 MESSAGE (=C* NO EOF ON LAST READ.*)
- EQ RSQ6
- RSQ5 ZR X0,RSQ7 IF EOF EXPECTED
- MESSAGE (=C* ILLEGAL EOF DETECTED.*)
- RSQ6 RJ ABT CHECK FOR ABORT ON ERRORS
- RSQ7 RJ CTR COMPUTE TRANSFER RATE
- SA1 B0
- LX1 59-9
- NG X1,RSQ1 IF REPEAT SECTION
- EQ RSQX RETURN
- POS SPACE 4,15
- ** POS - SEQUENTIAL POSITIONING.
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 5, 6, 7.
- * B - 2.
- *
- * CALLS CKS, CTR, MES, MTR.
- *
- * MACROS READW, REWIND, RPHRLS, RTIME.
- POS7 RJ CTR COMPUTE TRANSFER RATE
- SA1 B0
- LX1 59-9
- NG X1,POS1 IF REPEAT SECTION SET
- POS SUBR ENTRY/EXIT
- REWIND D,R
- SX1 MFL=-200000B
- RJ MEM REQUEST MEMORY
- POS1 SX1 =C* SEQUENTIAL POSITIONING.*
- RJ MES SEND MESSAGE
- BX6 X6-X6 CLEAR SECTOR COUNT
- SA6 CTRB
- RTIME ST
- SA1 NS
- SX7 B1
- BX0 X0-X0
- LX6 X1
- EQ POS3
- POS2 SX0 X0-40B
- NZ X0,POS7 IF LAST READ ENCOUNTERED - RETURN
- SA2 A4-B1
- SA1 A2-B1
- BX7 X2
- LX6 X1
- POS3 SA3 POSA
- SA7 TRRD-1
- POS4 IX6 X6-X3 GENERATE LIST OF SECTORS
- IX7 X7+X3
- NG X6,POS5 IF END OF SECTORS TO READ
- SA6 A7+1
- SA7 A7+2
- SB2 A6-TRRD-36B
- NZ B2,POS4 IF LIST NOT FULL
- POS5 MX7 0 SET END OF LIST FLAG
- SB2 B1+B1
- SX2 D
- SX6 DBUF IN = OUT = FIRST
- SA7 A7+B1
- SA6 X2+B2
- SX7 TRRD
- SA6 A6+B1
- SA7 A6+B2 SET LIST ADDRESS
- RPHRLS X2
- POS6 READW D,SBUF,100B GET SECTOR TO CHECK
- SA4 TRRD+X0
- SA5 SBUF
- ZR X4,POS2 IF END OF LIST
- RJ CKS CHECK SECTOR
- SX0 X0+B1
- SA1 CTRB COUNT SECTORS
- SX2 B1
- IX6 X1+X2
- SA6 A1
- EQ POS6 NEXT SECTOR
- POSA CON 0 INCREMENT (SET BY PRESET)
- RRD SPACE 4,15
- ** RRD - RANDOM READ.
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- *
- * USES X - 0, 1, 4, 5, 6, 7.
- * A - 1, 4, 5, 6, 7.
- * B - NONE.
- *
- * CALLS CIO, CKS, CTR, MES, RNO.
- *
- * MACROS READ, RTIME.
- RRD SUBR ENTRY/EXIT
- SA1 TL REQUEST MEMORY
- BX6 X1
- LX1 6
- SA6 CKSI SET SECTORS TO READ
- SX1 X1+DBUF+11B
- BX6 X1
- SA6 D+4
- RJ MEM
- RRD1 SX1 =C* RANDOM READ.*
- RJ MES ISSUE MESSAGE
- SA1 TL
- SA5 IO GET NUMBER OF I/O-S
- BX0 -X5
- SA5 NS SET NUMBER OF SECTORS TRANSFERED
- AX5 7
- IX6 X1*X5
- SA6 CTRB
- RTIME ST
- RRD2 SX7 B1 SET RANDOM ADDRESS IN FET
- LX7 29-0
- RJ RNO GET RANDOM NUMBER
- SA6 RRDA
- BX7 X6+X7
- SA7 D+6
- SX6 DBUF SET IN = OUT = FIRST
- SA6 D+2
- SA6 A6+B1
- READ D,R
- SA5 DBUF SET ACTUAL RANDOM ADDRESS
- SA4 RRDA SET EXPECTED RANDOM ADDRESS
- RJ CKS CHECK DATA
- SX0 X0+B1 INCREMENT I/O COUNT
- NG X0,RRD2 IF MORE I/O-S REQUIRED
- RJ CTR COMPUTE TRANSFER RATE
- RJ CIO COMPUTE I/O RATE
- SA1 B0
- LX1 59-9
- NG X1,RRD1 IF NOT DONE
- EQ RRDX RETURN
- RRDA CON 0 EXPECTED RANDOM ADDRESS
- WRD SPACE 4,15
- ** WRD - RANDOM WRITE.
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- *
- * USES X - 0, 1, 5, 6, 7.
- * A - 1, 5, 6, 7.
- * B - 4, 5.
- *
- * CALLS CIO, CTR, GDB, MEM, MES, RNO.
- *
- * MACROS RTIME, WRITE.
- WRD SUBR ENTRY/EXIT
- SA1 D+1 CLEAR EPR BIT
- SX6 B1
- LX6 44
- BX6 -X6*X1
- SA6 A1
- SA1 TL
- BX6 X1
- SA6 CKSI SET SECTORS TO CHECK
- LX1 6
- SX1 X1+DBUF+11B
- RJ MEM
- WRD1 SX1 =C* RANDOM WRITE.*
- RJ MES SEND MESSAGE
- SA5 NS
- SA1 TL REQUEST MEMORY
- AX5 7
- BX0 -X5
- IX6 X1*X5
- SA6 CTRB
- RTIME ST
- WRD1.1 SA1 TL
- SB4 B0
- SB5 X1
- SX7 B1
- LX7 29
- RJ RNO GET RANDOM NUMBER
- SA2 JN JSN AND MFID
- BX7 X6+X7 SET RANDOM BIT
- SA7 D+6
- BX6 X2+X6 ADD JSN AND MFID TO SECTOR NUMBER
- WRD2 SA6 B4+DBUF
- SA1 TP
- BX6 X1
- SA6 B4+DBUF+1 STORE RANDOM ADDRESS IN FET
- RJ GDB GENERATE DATA BUFFER
- SA7 TP
- SA1 B4+DBUF
- SX6 1
- IX6 X1+X6
- SB5 B5-B1
- SB4 B4+100B
- NE B5,WRD2 IF MORE SECTORS TO GENERATE
- SA1 TL
- LX1 6
- SX6 DBUF
- IX7 X6+X1
- SA6 D+3 OUT = FIRST
- SA7 D+2 IN = FIRST + 64
- WRITE D,R
- SX6 B1
- IX0 X0+X6 COUNT SECTOR
- NG X0,WRD1.1 IF MORE SECTORS TO TRANSFER
- RJ CTR COMPUTE TRANSFER RATE
- RJ CIO COMPUTE I/O RATE
- SA1 B0
- LX1 59-9
- NG X1,WRD1 IF REPEAT SECTION SET
- SA1 D+1 SET EPR BIT
- SX6 B1
- LX6 44
- BX6 X6+X1
- SA6 A1
- EQ WRDX RETURN
- TITLE SUBROUTINES.
- ABT SPACE 4,15
- ** ABT - ABORT JOB.
- *
- * ABORTS JOB IF PAUSE ON ERROR NOT SELECTED.
- *
- * EXIT (X4) = 1.
- *
- * USES X - 1, 4, 7.
- * A - 1, 7.
- * B - NONE.
- *
- * MACROS ABORT, MESSAGE, RECALL.
- ABT SUBR ENTRY/EXIT
- SA1 B0
- LX1 59-7
- NG X1,ABT2 IF ABORT ON ERROR
- SX7 B1+ SET PAUSE BIT
- LX1 7-59
- LX7 12
- BX7 X7+X1
- SA7 A1
- MESSAGE ABTA,2,R ISSUE MESSAGE TO SECOND LINE
- ABT1 RECALL
- SA1 B0
- LX1 59-12
- NG X1,ABT1 IF PAUSE BIT SET
- SX4 B1
- EQ ABTX RETURN
- ABT2 MESSAGE (=C* JOB ABORTED.*)
- ABT3 ABORT ABORT JOB
- ABTA DATA C*$MST ERROR - GO / DROP.*
- AIP SPACE 4,20
- ** AIP - ADVANCE *IN* POINTER.
- *
- * ADVANCE THE *IN* POINTER BY 100B (AS IF A *WRITEW* OF 100B
- * WORDS HAD BEEN PERFORMED), BUT DO NOT TRANSFER THE DATA.
- * COPY ONLY THE FIRST WORD OF THE BLOCK FROM BUFFER *SBUF*
- * TO THE CIO BUFFER.
- *
- * ENTRY (X2) = ADDRESS OF FET FOR FILE.
- *
- * EXIT VIA *WTX=*.
- * (X2) = ADDRESS OF FET FOR FILE.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6.
- * B - 2, 3, 4, 5, 6, 7.
- *
- * CALLS DCB=, WTX=.
- + EQ AIP1 (REENTRY ADDRESS FROM *DCB=*)
- AIP SUBR ENTRY/EXIT
- SA4 *-1 SET REENTRY/RETURN ADDRESS
- SA1 X2+4 (B5) = LIMIT
- SA3 X2+B1 (X3) = FIRST
- SB5 X1
- * REENTER HERE FROM *DCB=*.
- AIP1 SA2 X2 (B2) = FET STATUS
- SA1 A3+2 (B4) = OUT
- SB2 X2
- SA2 A3+B1 (X2) = IN
- SB4 X1
- SB3 X2+B1 (B3) = IN+1
- LE B3,B4,AIP3 IF IN .LT. OUT
- * CALCULATE SPACE LEFT IN BUFFER (IN .GE. OUT).
- SB7 X3
- SX6 B5-B7 (LIMIT-FIRST)
- SX7 B3-B4 (IN+1-OUT)
- IX6 X6-X7 AVAILABLE SPACE IN BUFFER
- SX7 X6-100B
- NG X7,DCB= IF NOT ENOUGH SPACE
- * UPDATE BUFFER POINTER (IN .GE. OUT).
- SB6 X2+100B NEW VALUE OF IN
- LT B6,B5,AIP2 IF NO BUFFER WRAPAROUND
- SB7 B5-B7 (LIMIT-FIRST)
- SB6 B6-B7 NEW VALUE OF IN
- AIP2 SA1 SBUF COPY FIRST WORD OF BLOCK TO (IN)
- BX6 X1
- SA6 X2
- SX2 B6 SET NEW VALUE OF IN
- EQ WTX= EXIT
- * CALCULATE SPACE LEFT IN BUFFER (IN .LT. OUT).
- AIP3 SX6 B4-B3 AVAILABLE SPACE IN BUFFER
- SX7 X6-100B
- NG X7,DCB= IF NOT ENOUGH SPACE IN BUFFER
- * UPDATE BUFFER POINTER (IN .LT. OUT).
- SB6 X2+100B NEW VALUE OF IN
- EQ AIP2 EXIT
- AOP SPACE 4,20
- *** AOP - ADVANCE *OUT* POINTER.
- *
- * ADVANCE THE *OUT* POINTER BY 100B (AS IF A *READW* OF 100B
- * WORDS HAD BEEN PERFORMED), BUT DO NOT TRANSFER THE DATA.
- * COPY ONLY THE FIRST WORD OF THE BLOCK FROM THE CIO BUFFER
- * TO BUFFER *SBUF*.
- *
- * ENTRY (X2) = ADDRESS OF FET FOR FILE.
- *
- * EXIT VIA *RDX=*.
- * (X1) = 0 FOR TRANSFER COMPLETE.
- * (X1) = -1 IF EOF DETECTED ON FILE.
- * (X1) = -2 IF EOI DETECTED ON FILE.
- * (X2) = ADDRESS OF FET FOR FILE.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 7.
- * B - 3, 4, 5, 6, 7.
- *
- * CALLS LCB=, RDX=.
- + EQ AOP1 (REENTRY ADDRESS FOR *LCB=*)
- AOP SUBR ENTRY/EXIT
- SA4 *-1 SET REENTRY/RETURN ADDRESS
- SA1 X2+4 (B5) = LIMIT
- SA3 X2+B1 (X3) = FIRST
- SB5 X1
- * REENTER HERE FROM *LCB=*.
- AOP1 SA1 A3+B1 (B3) = IN
- SA2 A1+B1 (B4) = OUT
- SB3 X1
- SB4 X2
- LT B3,B4,AOP3 IF IN .LT. OUT
- * CALCULATE DATA AVAILABLE IN BUFFER (IN .GE. OUT).
- SX6 B3-B4 AVAILABLE DATA IN BUFFER
- SX7 X6-100B
- NG X7,LCB= IF NOT ENOUGH DATA IN BUFFER
- * UPDATE BUFFER POINTER (IN .GE. OUT).
- SB6 B4+100B NEW VALUE OF OUT
- AOP2 SA1 B4 COPY FIRST WORD OF BLOCK FROM (OUT)
- BX7 X1
- SA7 SBUF
- SB4 B6 SET NEW VALUE OF OUT
- EQ RDX= EXIT
- * CALCULATE DATA AVAILABLE IN BUFFER (IN .LT. OUT)
- AOP3 SB7 X3
- SX6 B5-B7 (LIMIT-FIRST)
- SX7 B4-B3 (OUT-IN)
- IX6 X6-X7 AVAILABLE DATA IN BUFFER
- SX7 X6-100B
- NG X7,LCB= IF NOT ENOUGH DATA IN BUFFER
- * UPDATE BUFFER POINTER (IN .LT. OUT).
- SB6 B4+100B NEW VALUE OF OUT
- LT B6,B5,AOP2 IF NO BUFFER WRAPAROUND
- SB7 B5-B7 (LIMIT-FIRST)
- SB6 B6-B7 NEW VALUE OF OUT
- EQ AOP2 EXIT
- CKS SPACE 4,20
- ** CKS - CHECK SECTOR.
- *
- * ENTRY (X5) = SECTOR NUMBER, JSN AND MFID READ.
- * (X4) = SECTOR NUMBER EXPECTED.
- * (A5) = ADDRESS OF SECTOR TO BE CHECKED.
- * ND .NE. 0 IF DATA IS TO BE CHECKED.
- *
- * EXIT (X4) = 0 IF NO ERROR DETECTED.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 5, 6, 7.
- * B - 2.
- *
- * RESTORES X5, D+2, D+3, X0, D+6 WHEN RETURNING FROM ERROR.
- *
- * CALLS ABT, DCH, ERR.
- CKS SUBR ENTRY/EXIT
- SA3 D+6 CHECK FOR CIO ERROR
- MX2 -3
- BX2 -X2*X3
- NZ X2,CKS2 IF CIO ERROR
- ZR X4,CKSX IF CHECKING ON WRITE - RETURN
- CKS0 SA2 JN GET JSN AND MFID
- BX2 X2+X4 MERGE WITH SECTOR NUMBER
- BX6 X2-X5
- NZ X6,CKS3 IF POSITION ERROR
- SX6 B1
- IX6 X4+X6 INCREMENT RANDOM ADDRESS FOR NEXT SECTOR
- SA6 CKSJ
- SA4 ND
- ZR X4,CKSX IF DATA NOT TO BE CHECKED
- SX4 B0
- SB2 76B
- SA2 A5+77B LOAD CHECKSUM
- CKS1 SA1 A5+B2 VALIDATE CHECKSUM
- IX2 X2-X1
- SB2 B2-1
- GT B2,B1,CKS1 IF MORE DATA
- NZ X2,CKS1.1 IF CHECKSUM ERROR
- SA3 CKSI CHECK SECTOR COUNT
- SX6 X3-1
- ZR X6,CKSX IF END OF TRANSFER
- SA6 A3+
- SA5 A5+100B SET ACTUAL RANDOM ADDRESS
- SA4 CKSJ SET EXPECTED RANDOM ADDRESS
- EQ CKS0 NEXT SECTOR
- CKS1.1 SA1 CKSA DATA ERROR PROCESSING
- SA2 CKSE
- RJ ERR DATA ERROR MESSAGE
- RJ DCH DATA CHECK
- EQ CKS6
- CKS2 SA1 CKSB CIO ERROR PROCESSING
- SX6 X2-2
- SA2 X2+TCIO-1
- SA6 CKSG
- LX7 X4
- SX4 B0
- SA7 CKSH
- RJ ERR CIO ERROR MESSAGE
- SA1 CKSG
- NG X1,CKS5 IF PARITY ERROR
- ZR X1,CKS4 IF ADDRESS ERROR
- EQ CKS6
- CKS3 SA1 CKSC POSITION ERROR PROCESSING
- SA2 CKSE
- BX6 X4
- SX4 B0
- SA6 CKSH
- RJ ERR POSITION ERROR MESSAGE
- CKS4 SA4 CKSH SECTOR EXPECTED
- SA1 CKSD
- SA2 CKSF
- BX5 X4
- SX4 B1
- ZR X5,CKS6 IF ADDRESS ERROR ON SEQUENTIAL WRITE
- RJ ERR EXPECTED ERROR MESSAGE
- CKS5 RJ DCH DATA CHECK
- CKS6 RJ ABT CHECK FOR ABORT ON ERRORS
- CKS7 SA5 ERRA RESTORE REGISTERS
- SA2 A5+B1
- SA3 A2+B1
- SA1 A3+B1
- BX6 X2
- LX7 X3
- SA2 A1+B1
- SA6 D+2
- SA7 D+3
- LX6 X2
- BX0 X1
- SA6 D+6
- EQ CKSX RETURN
- CKSA DATA 10HEQXXX,DATA
- CKSB DATA 10HEQXXX,DEV.
- CKSC DATA 10HEQXXX,POS.
- CKSD DATA 10HEQXXX,EXP.
- CKSE CON 10H ERROR AT
- CKSF CON 10H POSITION
- CKSG CON 0 TEMPORARY
- CKSH CON 0 TEMPORARY
- CKSI CON 0 NUMBER OF SECTORS REMAINING TO CHECK
- CKSJ CON 0 EXPECTED RANDOM ADDRESS OF NEXT SECTOR
- TCIO CON 10LPARITY ER. PARITY ERROR
- CON 10LADDR. ERR. ADDRESS ERROR
- CON 10LSTATUS ER. DEVICE STATUS ERROR
- CON 10L81 FNC REJ 6681 FUNCTION REJECT
- CON 10LRESERVED DEVICE RESERVED
- CON 10LNOT READY DEVICE NOT READY
- CIO SPACE 4,10
- ** CIO - COMPUTE I/O RATE.
- *
- * USES X - 1, 2, 5, 6.
- * A - 1, 2, 5, 6.
- * B - NONE.
- *
- * CALLS CDD, CFD, MES.
- CIO SUBR ENTRY/EXIT
- SA1 CIOA GET ELAPSED TIME
- SA5 NS SET NUMBER OF I/O-S
- AX5 7
- SA2 CIOD
- IX5 X2*X5
- IX1 X5/X1
- RJ CFD CONVERT TO FLOATING POINT
- SA6 CIOB+2
- SA1 IO
- RJ CDD CONVERT TO DISPLAY
- SA6 CIOC+2
- SX1 CIOB
- RJ MES SEND I/O-S PER SECOND MESSAGE
- SX1 CIOC
- RJ MES
- EQ CIOX RETURN
- CIOA CON 0 ELAPSED TIME
- CIOB DATA C* IO PER SECOND = XXXXXX.XXX.*
- CIOC DATA C* NUMBER OF I/O-S = XXXXXXXXXX.*
- CIOD CON 1000D*1000D
- CTR SPACE 4,15
- ** CTR - COMPUTE TRANSFER RATE.
- *
- * ENTRY (CTRB) = NUMBER OF SECTORS TRANSFERRED.
- * (ST) = START TIME.
- *
- * EXIT TRANSFER RATE MESSAGE ISSUED TO DAYFILE.
- *
- * USES X - 0, 1, 2, 3, 6.
- * A - 1, 2, 6.
- * B - NONE.
- *
- * CALLS CFD, MES.
- *
- * MACROS RTIME.
- CTR SUBR ENTRY/EXIT
- RTIME ET GET ENDING TIME
- SA1 ST COMPUTE ELAPSED TIME
- SA2 ET
- MX0 -36
- BX1 -X0*X1
- BX2 -X0*X2
- IX2 X2-X1
- BX6 X2
- SA6 CIOA
- SA1 CTRB
- SX3 640*1000/64
- LX3 6
- IX3 X1*X3 CHAR
- IX1 X3/X2
- RJ CFD CONVERT TO DISPLAY CODE
- SA6 CTRA+2
- SX1 CTRA SEND TRANSFER RATE MESSAGE
- RJ MES
- EQ CTRX RETURN
- CTRA DATA C*MST TRANSFER RATE = XXXXXX.XXX KC.*
- CTRB CON 0 SECTORS TRANSFERRED
- CVA SPACE 4,15
- ** CVA - CONVERT ADDRESS.
- *
- * THIS SUBROUTINE PERFORMS THE CONVERSION OF LOGICAL
- * TO PHYSICAL DISK ADDRESS. IT IS OVERLAYED BY THE
- * THE CONVERSION ROUTINE FOR THE SPECIFIED EQUIPMENT.
- *
- * ENTRY (B6) = MESSAGE ADDRESS.
- *
- * EXIT NONE.
- *
- * USES X - 0, 1, 2, 6, 7.
- * A - 1, 2, 6, 7.
- * B - NONE.
- *
- * CALLS WOD.
- * WILL NEED WORK HERE FOR MULTI-PARTITION DEVICES.
- CVA PS ENTRY/EXIT
- SA2 D+6 PLACE TRACK AND SECTOR
- MX0 -12
- AX2 12
- BX6 -X0*X2
- AX2 12
- BX7 -X0*X2
- LX7 15*3
- LX6 9*3
- BX1 X7+X6
- RJ WOD
- SA1 CVAA
- SA2 A1+B1
- IX6 X1+X6
- IX7 X2+X7
- SA6 B6
- SA7 B6+B1
- EQ CVA RETURN
- CVAA CON 10HT0000 S000-10H0000000000
- CON 10H0. -10H0000000000
- BSS 10
- CVAE BSS 0
- DCH SPACE 4,15
- ** DCH - DATA CHECK.
- *
- * ENTRY (SBUF - SBUF+77B) = SECTOR TO BE CHECKED.
- *
- * USES X - 0, 1, 2, 6, 7.
- * A - 1, 2, 6, 7.
- * B - 2, 5, 6, 7.
- *
- * CALLS COD, GDB, WOD.
- *
- * MACROS MESSAGE.
- DCH4 NZ B7,DCHX IF ERRORS FOUND RETURN
- MESSAGE (=C*DATA OK.*)
- DCH SUBR ENTRY/EXIT
- SA1 ND
- ZR X1,DCHX IF NO DATA GENERATED
- SA1 SBUF+1
- SB5 B1
- BX6 X1
- SA6 TBUF+1
- SB7 B0+
- RJ GDB REGENERATE DATA
- DCH1 SB6 77B
- DCH2 SA1 TBUF+B5
- SA2 SBUF+B5
- SB5 B5+B1
- BX7 X2-X1
- GT B5,B6,DCH4 IF END OF CHECK
- ZR X7,DCH2 IF DATA MATCHES
- LX6 X2
- SB7 B1 ERROR FLAG
- SA6 DCHA
- SA7 A6+B1
- BX0 X1
- SX1 B5
- SB6 B0
- RJ COD CONVERT WORD NUMBER
- LX6 6
- SX1 B1
- IX6 X6+X1
- BX1 X0
- SA6 DCHD
- DCH3 RJ WOD CONVERT DATA
- SA1 TMES+B6 MESSAGE TYPE
- SA2 DCHD
- SA6 DCHE
- MX0 -24
- SA7 A6+B1
- BX2 -X0*X2 MERGE MESSAGE TYPE
- BX1 X0*X1
- BX6 X2+X1
- SA6 A2
- MESSAGE DCHC,,R
- SA1 DCHA+B6
- SB2 B6-B1
- SB6 B6+B1
- NE B2,B1,DCH3 IF MORE MESSAGES FOR THIS ERROR
- EQ DCH1
- DCHA CON 0 TEMPORARY
- DCHB CON 0 TEMPORARY
- DCHC DATA 10HEQXXX,DATA
- DCHD CON 10H .... 000,
- DCHE CON 0,0,0
- TMES CON 6L EXP TABLE OF MESSAGES
- CON 6L READ
- CON 6L DIFF
- ERR SPACE 4,15
- ** ERR - SEND ERROR MESSAGE.
- *
- * ENTRY (X5) = SECTOR NUMBER, JSN AND MFID READ.
- * (X4) = 0 IF REGISTERS MUST BE SAVED.
- * (X2) = SECOND WORD OF MESSAGE.
- * (X1) = FIRST WORD OF MESSAGE.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 6, 7.
- * B - 6
- *
- * CALLS CVA, WOD.
- *
- * MACROS MESSAGE, RECALL, RPHR, STATUS.
- ERR SUBR ENTRY/EXIT
- BX6 X1
- LX7 X2
- SA6 ERRB
- MX6 -24
- BX6 -X6*X5
- SA7 A6+B1
- SA6 ERRH
- RECALL D
- NZ X4,ERR1 IF REGISTERS ALREADY SAVED
- SA2 D+2
- SA3 D+3
- LX6 X5
- BX7 X2
- SA2 D+6
- SA6 ERRA
- LX6 X3
- SA7 A6+B1
- BX7 X0
- SA6 A7+B1
- LX6 X2
- SA7 A6+B1
- SA6 A6+2
- ERR1 SA2 ERRH POSITION TO ERROR
- SA1 D+1
- BX6 X2
- SX7 X1
- SA6 D+6
- SX6 X1+B1
- SA7 A1+B1
- SA6 A7+B1
- RPHR D,R
- STATUS X2,P
- SA1 ERRH MERGE RANDOM ADDRESS TRACK AND SECTOR
- SA2 D+6
- MX0 30
- LX2 18
- BX1 -X0*X1
- BX2 X0*X2
- BX1 X1+X2
- RJ WOD CONVERT RANDOM ADDRESS TRACK AND SECTOR
- SA1 ERRE
- MX0 -18
- SA2 A1+B1
- BX1 X0*X1
- LX7 -24
- MX4 24
- BX3 -X0*X7
- BX2 -X4*X2
- BX4 X4*X7
- BX7 X1+X3 MERGE RANDOM ADDRESS IN MESSAGE
- SA3 A2+B1
- BX2 X4+X2
- SA7 A1
- MX4 -24
- BX7 -X4*X6
- AX6 24
- BX2 X4*X2 CLEAR TRACK
- BX6 -X4*X6
- LX4 24
- BX3 X4*X3 CLEAR SECTOR
- BX6 X6+X2 MERGE TRACK IN MESSAGE
- LX7 24
- SA6 A2
- BX7 X7+X3 MERGE SECTOR IN MESSAGE
- SA7 A3
- SB6 ERRD
- RJ CVA CONVERT ADDRESS
- MESSAGE ERRB,,R
- MESSAGE ERRE,,R
- EQ ERRX RETURN
- ERRA BSS 5
- ERRB DATA 10HEQXXX,ZZZZ
- ERRC CON 10H ERROR AT
- ERRD CON 0,0
- CON 0 END OF LINE FOR FIRST MESSAGE
- ERRE DATA 10HEQXXX,R000
- ERRF CON 10H0000,T0000
- ERRG CON 7L,S0000.
- ERRH CON 0 RANDOM ADDRESS TEMPORARY
- GDB SPACE 4,15
- ** GDB - GENERATE DATA BUFFER.
- *
- * ENTRY (X6) = RANDOM NUMBER WHICH WILL GENERATE BUFFER.
- * (A6) = ADDRESS OF RANDOM NUMBER IN BUFFER.
- *
- * EXIT (X6) = CHECKSUM OF BUFFER.
- * (X7) = LAST DATA WORD STORED IN BUFFER.
- * (B2) = (B3) = NUMBER OF DATA WORDS GENERATED.
- * (A6) = ADDRESS OF LAST WORD IN BUFFER.
- *
- * USES X - 2, 6, 7.
- * A - 2, 6, 7.
- * B - 2, 3.
- GDB SUBR ENTRY/EXIT
- SA2 ND
- ZR X2,GDBX IF NO DATA GENERATION
- SB3 75B
- SB2 B0+
- GDBA BX7 X6
- SA7 A6
- * THIS INSTRUCTION IS MODIFIED BY PRESET
- * EQ GDB2 IF NON-RANDOM PATTERN
- SX6 B0+ IF RANDOM PATTERN - CLEAR CHECKSUM
- GDB1 PX2 X7
- DX7 X2*X2
- IX7 X7+X2
- SB2 B2+B1
- LX2 15
- IX7 X7+X2
- LX2 19
- IX7 X2+X7
- SA7 A7+B1
- IX6 X6+X7 ADVANCE CHECKSUM
- NE B2,B3,GDB1 IF MORE DATA TO GENERATE
- SA6 A7+B1 CHECKSUM IN LAST LOCATION OF BUFFER
- EQ GDBX
- GDB2 SB2 B2+B1
- SA7 A7+B1
- NE B2,B3,GDB2 IF BUFFER NOT FULL
- SA6 A7+B1
- EQ GDBX
- MEM SPACE 4,15
- ** MEM - REQUEST MEMORY.
- *
- * ENTRY (X1) = REQUESTED MEMORY.
- *
- * EXIT (IN) = (OUT) = (FIRST).
- * (LIMIT) = REQUESTED FIELD LENGTH.
- *
- * USES X - 2, 6, 7.
- * A - 2, 6, 7.
- * B - NONE.
- *
- * MACROS MEMORY.
- MEM SUBR ENTRY/EXIT
- SA2 D+1
- SX7 X1-10B
- SX6 X2
- SA7 D+4 LIMIT
- SA6 A7-B1 OUT
- SA6 A6-B1 IN
- MEMORY ,,R,X1 REQUEST MEMORY
- EQ MEMX RETURN
- MES SPACE 4,15
- ** MES - SEND MESSAGE.
- *
- * ENTRY (X1) = MESSAGE ADDRESS.
- *
- * EXIT MESSAGE SENT TO CONTROL POINT AND JOB DAYFILE.
- *
- * USES X - 0.
- * A - NONE.
- * B - NONE.
- *
- * MACROS MESSAGE.
- MES SUBR ENTRY/EXIT
- SX0 X1+
- MESSAGE X1,1,R
- MESSAGE X0,3,R
- EQ MESX RETURN
- RNO SPACE 4
- ** RNO - GENERATE RANDOM SECTOR NUMBER.
- *
- * ENTRY NONE.
- *
- * EXIT (X6) = RANDOM SECTOR NUMBER IN FILE.
- *
- * USES X - 1, 3, 5, 6.
- * A - 1, 3, 5, 6.
- * B - NONE.
- RNO SUBR ENTRY/EXIT
- RNO1 SA1 RNOA LAST NUMBER
- SA3 SM SECTOR MASK
- SA5 NS NUMBER OF SECTORS
- PX1 X1
- DX6 X1*X1
- IX6 X1+X6
- LX1 15
- IX6 X1+X6
- LX1 19
- IX6 X1+X6
- SA6 A1 SAVE NEW NUMBER
- SA1 TL
- IX5 X5-X1
- BX6 -X3*X6
- SA1 RO CHECK ROLLOUT SIMULATION REQUEST
- ZR X1,RNO2 IF NO ROLLOUT SIMULATION
- IX6 X1+X6 ROUND SECTOR ADDRESS UP TO MULTIPLE OF 32
- AX6 5
- LX6 5
- RNO2 BSS 0
- IX3 X5-X6
- ZR X6,RNO1 IF SECTOR NUMBER = 0
- NG X3,RNO1 IF SECTOR NOT IN FILE
- EQ RNOX RETURN
- RNOA DATA 13576420735162531625B
- WIC SPACE 4,10
- ** WIC - WAIT I/O COMPLETE.
- *
- * ENTRY (BD) = 2 IF DEVICE IS BUFFERED.
- *
- * USES X - 1, 2, 3.
- * A - 1.
- * B - NONE.
- *
- * MACROS MESSAGE, RECALL, RTIME.
- WIC SUBR
- SA1 BD
- LX1 59-1
- PL X1,WICX IF DEVICE NOT BUFFERED
- MESSAGE (=C* WAIT I/O COMPLETE.*),1,R
- RTIME WICA FETCH TIME
- SA1 WICA
- MX3 -36
- BX2 -X3*X1 SAVE START TIME
- WIC1 RECALL DELAY
- RTIME WICA CHECK TIME
- SA1 WICA
- BX1 -X3*X1
- IX1 X1-X2 TIME SINCE FIRST CALL
- SX1 X1-3000
- NG X1,WIC1 IF 3 SECONDS NOT ELAPSED
- EQ WICX RETURN
- WICA BSS 1
- SPACE 4
- ** COMMON DECKS.
- ERP1$ EQU 1 ENABLE I/O ERROR PROCESSING
- *CALL COMCCDD
- *CALL COMCCOD
- *CALL COMCCIO
- *CALL COMCCFD
- *CALL COMCLFM
- *CALL COMCRDW
- *CALL COMCSYS
- *CALL COMCWOD
- *CALL COMCWTW
- BUFFERS SPACE 4
- TITLE BUFFERS.
- USE //
- SEG
- BUFS BSS 0
- TRRD EQU BUFS+1 TABLE OF SECTORS FOR RANDOM READ WITH LIST
- TBUF EQU TRRD+41 TEST BUFFER FOR PATTERN REGENERATION
- SBUF EQU TBUF+100B
- DBUF EQU SBUF+100B
- MFL= EQU DBUF+DBUFL+10B+200000B
- TITLE PRESET.
- ORG BUFS
- ** THE FOLLOWING CODE IS OVERLAYED BY BUFFERS.
- * COMMON DECKS
- *CALL COMCARG
- *CALL COMCCPM
- *CALL COMCDXB
- *CALL COMCMVE
- PRS SPACE 4
- ** PRS - PRESET PROGRAM.
- *
- * ENTRY (B7) = 1 IF ADDRESS CONVERSION PRESET.
- PRS SUBR ENTRY/EXIT
- SYSTEM RSB,R,PRSF SET EXTENDED MEMORY TRACK SHIFT
- SA1 EMTS
- MX0 -2
- LX1 0-29
- BX6 -X0*X1
- SA6 A1
- EQ B7,B1,PRS5 IF ADDRESS CONVERSION PRESET
- MODE 1
- GETJN JN GET JSN
- MACHID PRSH GET MAINFRAME ID
- SA1 PRSH MERGE JSN AND MFID
- SA2 JN
- LX1 24
- BX6 X1+X2
- SA6 A2+
- REQUEST D
- STATUS X2,P
- SA1 D+6
- BX6 X1
- AX6 48
- SA6 PRSG SAVE EST ORDINAL
- RJ WOD CONVERT EST ORDINAL
- SA1 D+1
- AX6 6 POSITION EST ORDINAL
- MX0 12
- BX1 X0*X1
- MX0 18
- LX0 -12
- BX6 X0*X6
- BX6 X6+X1 MERGE EST ORDINAL AND TYPE
- MX0 -30
- SA1 DCHC SET EQUIPMENT IN MESSAGES
- BX1 -X0*X1
- BX7 X6+X1
- SA7 DCHC
- SA1 ERRE
- BX1 -X0*X1
- BX7 X6+X1
- SA7 ERRE
- SA1 CKSA-1
- SB2 B0+
- SB3 4
- PRS1 SA1 A1+B1
- BX1 -X0*X1
- SB2 B2+1
- BX7 X6+X1
- SA7 A1
- LT B2,B3,PRS1 IF MORE MESSAGES
- MX6 0
- SA6 D+5
- SA6 A6+B1
- * IDENTIFY ASSIGNED EQUIPMENT.
- SA2 TEQP
- SA1 D+B1
- MX0 -24
- MX5 1 SET EP BIT IN FET
- MX4 12
- LX5 44-59
- SX7 B1
- PRS2 ZR X2,PRS8 IF END OF TABLE
- BX3 X2-X1
- BX6 X4*X3
- LX3 X2
- SA2 A2+B1
- NZ X6,PRS2 IF NO EQUIPMENT MATCH
- BX6 X1+X5
- SA6 A1 SET EPR BIT IN FET
- BX6 -X0*X3
- IX6 X6-X7
- SA6 NS
- MX7 12 SET SECTOR MASK
- NX6 X6,B2
- AX7 X7,B2
- AX3 24
- SA7 A6+B1
- MX0 -6
- BX6 -X0*X3
- SA6 BD SET BUFFERED DEVICE FLAG
- AX3 6
- SX2 X3
- ZR X2,PRS8 IF ILLEGAL EQUIPMENT
- MOVE CVAE-CVA,X2,CVA
- * RETRIEVE ARGUMENTS.
- SA1 ACTR ARGUMENT COUNT
- SB7 B0
- SB4 X1
- SA4 ARGR FIRST ARGUMENT
- SB5 TARG ARGUMENT TABLE
- RJ ARG PROCESS ARGUMENTS
- NZ X1,PRS7 IF ARGUMENT ERROR
- * PROCESS *N* PARAMETER (NUMBER OF SECTORS).
- SA5 NS NUMBER OF SECTORS
- MX2 14B
- BX3 X2*X5
- ZR X3,PRS3 IF ARGUMENT OMITTED
- SA3 =0L*
- BX3 X3-X5
- AX3 18
- NZ X3,PRS2.1 IF NOT /*/
- RJ CNS CALCULATE NUMBER OF SECTORS
- EQ PRS2.2 SET NUMBER OF SECTORS
- PRS2.1 RJ DXB CONVERT ARGUMENT
- SX1 B1
- IX6 X6-X1
- ZR X6,PRS7 IF ARGUMENT ERROR
- PRS2.2 SA6 NS
- MX7 12 SET SECTOR MASK
- NX6 X6,B2
- AX7 X7,B2
- SA7 SM
- PRS3 SA1 NS SET SECTOR SIZE
- RJ CDD CONVERT TO DISPLAY
- SA6 PRSE+2
- SX1 PRSE
- RJ MES SEND FILE SIZE MESSAGE
- * PROCESS *IO* PARAMETER (NUMBER OF I/O-S).
- SA5 IO SET NUMBER OF I/O-S
- ZR X5,PRS3.1 IF NUMBER OF I/O-S NOT SPECIFIED
- RJ DXB
- NZ X4,PRS7 IF ERROR IN CONVERSION
- EQ PRS3.2 SAVE NUMBER OF I/O-S
- PRS3.1 SA5 NS BASE NUMBER OF I/O-S ON NUMBER OF SECTORS
- AX5 7
- BX6 X5
- PRS3.2 SA6 IO
- * PROCESS *TL* PARAMETER (TRANSFER LENGTH).
- SA5 TL SET TRANSFER LENGTH
- RJ DXB
- NZ X4,PRS7 IF ERROR IN CONVERSION
- ZR X6,PRS7 IF INVALID TRANSFER LENGTH
- SA6 A5
- SA5 NS
- IX6 X5-X6
- NG X6,PRS7 IF TRANSFER SIZE GREATER THAN FILE SIZE
- * PROCESS *P* PARAMETER (SELECT TEST PATTERN).
- PRS3.3 SA5 TP
- RJ DXB
- NZ X4,PRS7 IF ARGUMENT ERROR
- SB5 X6-TPATL+1
- BX5 X6
- GT B5,B0,PRS7 IF ARGUMENT ERROR
- SA1 X6+TPAT
- SA2 PRSA
- BX6 X1
- LX7 X2
- SB5 X5-5
- ZR B5,PRS4 IF P=5 (RANDOM PATTERN)
- SA7 GDBA SETS AN INSTRUCTION IN GDB
- PRS4 SA6 TP
- SX7 X5-4
- SA7 ND SET NO DATA FLAG
- ZR X7,PRS4.1 IF P=4
- SX7 X5-6
- NZ X7,PRS4.1 IF NOT P=6
- SA7 ND SET NO DATA FLAG
- SA7 NT SET NO DATA TRANSFER FLAG
- PRS4.1 SA1 NS SET INCREMENT FOR POSITION TEST
- SX2 B1+
- AX1 6
- IX7 X1+X2
- SA7 POSA
- * PROCESS *T* PARAMETER (SELECT TEST SECTION).
- SA5 TS
- RJ DXB
- NZ X4,PRS7 IF ARGUMENT ERROR
- SX3 X6-6
- PL X3,PRS7 IF ARGUMENT ERROR
- SA6 TS
- EQ PRSX RETURN
- * PRESET FOR ADDRESS CONVERSION.
- PRS5 SA1 ACTR
- SA4 ARGR
- SB5 TART
- SB4 X1+
- RJ ARG PROCESS ARGUMENTS
- NZ X1,PRS7 IF ARGUMENT ERROR
- SA1 PRSB
- SA5 PRSC ADDRESS
- SA2 TEQP-1
- PRS6 SA2 A2+B1
- ZR X2,PRS8 IF EQUIPMENT NOT FOUND
- BX3 X2-X1
- AX3 48
- NZ X3,PRS6 IF NO MATCH
- BX6 X2
- LX2 30
- SA6 A1
- SB6 X2
- SB7 B0
- RJ DXB
- NZ X4,PRS7 IF ARGUMENT ERROR
- SA6 PRSC
- SA5 PRSD
- RJ DXB CONVERT SECTOR
- NZ X4,PRS7 IF ARGUMENT ERROR
- MX0 -12
- BX5 X0*X6
- SA1 PRSC
- NZ X5,PRS7 IF TRACK ERROR
- BX5 X0*X1
- LX1 12
- NZ X5,PRS7 IF SECTOR ERROR
- BX6 X6+X1
- LX6 12
- SA6 D+6
- SB4 CVA
- EQ B4,B5,PRSX IF TRACK AND SECTOR ADDRESS
- MOVE CVAE-CVA,B6,B4
- EQ PRSX RETURN
- PRS7 MESSAGE (=C* ARGUMENT ERROR.*)
- EQ ABT3 ABORT
- PRS8 MESSAGE (=C* ILLEGAL EQUIPMENT.*)
- EQ ABT3 ABORT
- PRSA BX7 X6
- SA7 A6
- EQ GDB2
- PRSB CON 0 DEVICE TYPE - NO DEFAULT
- PRSC DATA 0L0 TRACK
- PRSD CON 0 SECTOR
- PRSE DATA C* FILE SIZE = XXXXXXXXXX SECTORS.*
- PRSF VFD 24/1,18/MEFL,18/EMTS
- PRSG DATA 0 EST ORDINAL
- PRSH CON 0 MAINFRAME ID
- TITLE PRESET SUBROUTINES.
- CNS SPACE 4,20
- ** CNS - CALCULATE NUMBER OF SECTORS.
- *
- * READS THE MST FOR THE SPECIFIED DEVICE AND COMPUTES
- * NS = (AVAILABLE TRACKS)*(SECTOR LIMIT) - 5. THIS SIZE
- * ALLOWS FOR BOI, EOR, EOF, EOI, AND AN EXTRA SECTOR.
- * FOR *LDAM* DEVICES, DO NOT TEST THE LAST *RWPC* SECTORS,
- * TO AVOID A TRACK LIMIT CAUSED BY LOGIC IN *1MS*.
- *
- * ENTRY (PRSG) = EST ORDINAL.
- *
- * EXIT (X6) = NUMBER OF SECTORS.
- *
- * USES X - 1, 2, 3, 4, 6.
- * A - 1, 2.
- *
- * CALLS RSB=.
- CNS SUBR
- SX1 CNSA READ EST POINTER
- SX2 ESTP
- SX3 B1
- SX4 B0
- RJ RSB= READ POINTER
- * READ EST ENTRY FOR DEVICE.
- SA1 PRSG
- SA2 CNSA
- SX3 ESTE
- AX2 36
- MX4 -24
- IX1 X1*X3
- BX2 -X4*X2 FWA EST
- SX3 EQDE
- IX2 X1+X2 EST ADDRESS FOR SPECIFIED DEVICE
- IX2 X2+X3
- SX1 CNSB READ *EQDE* WORD OF EST ENTRY
- SX3 B1
- SX4 B0
- RJ RSB= READ EST
- * READ MST FOR SPECIFIED DEVICE.
- SA1 CNSB
- MX2 -12 GET MST ADDRESS
- BX2 -X2*X1
- LX2 3
- SX1 CNSC
- SX4 B0
- SX3 MSTL
- RJ RSB= READ MST
- * CALCULATE NUMBER OF AVAILABLE SECTORS.
- SA1 CNSC+TDGL
- SA2 CNSC+MDGL
- MX3 -12
- BX1 -X3*X1 NUMBER OF AVAILABLE TRACKS
- BX2 -X3*X2 SECTOR LIMIT
- SX1 X1+B1 ADD TRACK ALREADY ALLOCATED TO FILE
- IX1 X1*X2
- SX4 5
- IX6 X1-X4 SET TOTAL SECTOR COUNT
- SA1 CNSB
- LX1 59-55
- PL X1,CNSX IF NOT *LDAM* DEVICE
- SX1 RWPC DO NOT TEST THE LAST *RWPC* SECTORS
- IX6 X6-X1
- EQ CNSX RETURN
- CNSA VFD 1/1,23/0,18/0,18/0
- CNSB VFD 1/1,23/0,18/0,18/0
- CNSC VFD 1/1,23/0,18/0,18/0
- BSS MSTL-1
- SPACE 4,10
- * COMMON DECKS.
- *CALL COMCRSB
- TITLE PRESET DATA.
- TARG BSS 0 MST ARGUMENT TABLE
- T ARG DZRO,TS,400B
- P ARG TP,TP,400B
- N ARG DZRO,NS,400B
- NW ARG -ONE,NW
- TL ARG TL,TL,400B
- NV ARG -ONE,NV
- RO ARG -T32,RO
- IO ARG IO,IO,400B
- ARG
- TART BSS 0 ARGUMENT TABLE FOR ADDRESS CONVERSION
- EQ ARG TEQP+1,PRSB,400B
- T ARG DZRO,PRSC,400B
- S ARG DZRO,PRSD,400B
- ARG
- DZRO DATA 1L0 DISPLAY CODE ZERO
- ONE DATA 1 CONSTANT 1
- T32 DATA 32 CONSTANT 32
- SPACE 4
- CDV EQU CVA 819 SINGLE DENSITY
- CDW EQU CVA 819 DOUBLE DENSITY
- CDB EQU CVA PFMD - DEMA ACCESS
- CDC EQU CVA 895
- CDF EQU CVA 887 (4KB SECTOR)
- CDH EQU CVA 887 (16KB SECTOR)
- CDN EQU CVA 9853
- CEA EQU CVA 5832 (1X SSD)
- CEB EQU CVA 5832 (2X SSD)
- CEC EQU CVA 5833 (1X SABRE)
- CED EQU CVA 5833 (1XP SABRE)
- CEE EQU CVA 5833 (2X SABRE)
- CEF EQU CVA 5833 (2XP SABRE)
- CEG EQU CVA 5838 (1X ELITE)
- CEH EQU CVA 5838 (1XP ELITE)
- CEI EQU CVA 5838 (2X ELITE)
- CEJ EQU CVA 5838 (2XP ELITE)
- CEK EQU CVA 5838 (3XP ELITE)
- CEL EQU CVA 5838 (4X ELITE)
- CEM EQU CVA 5833 (3XP SABRE)
- CEN EQU CVA 5833 (4X SABRE)
- CEO EQU CVA 47444 (1X 3.5IN)
- CEP EQU CVA 47444 (1XP 3.5IN)
- CES EQU CVA 47444 (2X 3.5IN)
- CEU EQU CVA 47444 (2XP 3.5IN)
- CEV EQU CVA 47444 (3XP 3.5IN)
- CEW EQU CVA 47444 (4X 3.5IN)
- SPACE 4
- ** TBLM - GENERATE TABLE VIA *TBL* MACRO.
- PURGMAC TBLM
- TBLM MACRO EQ
- IFC NE,*"DRN_EQ"*DI*
- IFC NE,*"DRN_EQ"*DJ*
- VFD 12/2R_EQ,18/C_EQ,6/BF_EQ
- ELSE 1
- VFD 12/2R_EQ,18/CVA,6/BF_EQ
- IFNE NT_EQ,0
- VFD 24/NT_EQ*SL_EQ/2
- ELSE 1
- VFD 24/3400B
- ENDM
- TEQP BSS 0 TABLE OF EQUIPMENTS
- LIST G
- TBL "MSEQ"
- LIST -G
- CON 0 END OF TABLE
- TPAT BSS 0 TABLE OF PATTERNS.
- DATA 0
- DATA -0
- DATA 25252525252525252525B
- DATA 52525252525252525252B
- DATA 0
- DATA 13576420735162531625B
- DATA 0
- TPATL EQU *-TPAT
- PRS SPACE 4
- TITLE ADDRESS CONVERSION ROUTINES.
- CDE SPACE 4
- ** CDE - CONVERT *DE* ADDRESS.
- CDE BSS 0
- CDP SPACE 4,10
- ** CDP - CONVERT *DP* ADDRESS.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 6, 7.
- * B - NONE.
- *
- * CALLS WOD.
- CDP BSS 0
- LOC CVA
- CVA PS ENTRY/EXIT
- SA1 EMTS GET EM TRACK SHIFT
- SB2 X1+10
- SB3 X1+4
- MX6 -12
- SA1 D+6 READ POSITION
- AX1 12 EXTRACT SECTOR
- BX7 -X6*X1
- SX4 3777B
- LX7 6 SECTOR * 101B
- BX6 -X6*X1
- IX3 X7+X6
- AX1 12 EXTRACT TRACK
- BX2 X4*X1 TRACK * 101 * SECTOR LIMIT
- LX2 B2
- BX7 X4*X1
- LX7 B3
- IX2 X7+X2
- IX1 X2+X3
- LX1 12*3 POSITION DATA
- RJ WOD CONVERT DATA
- SA1 CDEA
- SA2 A1+B1
- IX6 X1+X6
- IX7 X2+X7
- SA6 B6
- SA7 B6+B1
- EQ CVA RETURN
- CDEA CON 10HA0000000. -10H0000000000
- CON 10H -10H0000000000
- ERRNG CVAE-*
- LOC *O
- SPACE 4
- END
cdc/nos2.source/opl871/mst.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator