IDENT 1SS,SSD
TITLE 1SS - M860 SECONDARY STORAGE DRIVER.
PERIPH
BASE M
SST
*COMMENT M860 SECONDARY STORAGE DRIVER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
SPACE 4
*** 1SS - M860 SECONDARY STORAGE DRIVER.
* W. J. STURGIS 82/02/18.
SPACE 4,10
*** 1SS PROCESSES REQUESTS FROM SSEXEC TO READ AND WRITE
* DATA AND MESSAGES. MULTIPLE FUNCTIONS CAN BE PROCESSED
* BY 1SS.
SPACE 4,10
*** CALL
*
*T IR 18/ *1SS* ,6/ ,12/ CHB CHA ,6/ FC ,18/ ADDR
*
*T ADDR 18/ MSG. OUT FET ,18/ RECALL ADDR. ,12/ EQ ,11/ CN ,1/S
*T,ADDR+1 42/ ,18/DATA FET ADDR
*
* WHERE
* ADDR = PARAMETER ADDRESS.
* FC = FUNCTION CODE.
* 1 = ENABLE TDAM BUFFER.
* 2 = MESSAGE BUFFER(S) TO PROCESS.
* 3 = MESSAGE AND DATA BUFFERS TO PROCESS.
* 4 = SET CHANNELS IN EST ENTRY.
* EQ = EST ORDINAL.
* CHB CHA = NEW CHANNELS TO BE SET IN EST FOR EQ.
* MSG. OUT FET = FET USED TO SEND MESSAGES TO THE M860.
* (MSG. OUT FET - 1) POINTER TO MESSAGE INPUT FET.
* RECALL = CPU DRIVER RECALL WORD
* DATA FET = FET FOR DATA I/O.
* CN = CONTROLLER ORDINAL IN UDT.
* S = 1, PPU ACTIVE (SET BY SSEXEC), CLEARED BY 1SS WHEN
* DROPPING OUT.
SPACE 4,10
*** MESSAGE FET
*
*T MFET 42/ ,8/ ERRC ,9/ ,1/C
*T, 42/ ,18/ FIRST
*T, 42/ ,18/ IN
*T, 42/ ,18/ OUT
*T, 12/ CH ,6/ ,18/ ABUF ,6/ ,18/ LIMIT
*T, 60/ EBUF
*
* WHERE.
* ERRC = ERROR RETURN CODE.
* C = COMPLETE FLAG.
* FIRST = FIRST POINTER.
* IN = IN POINTER.
* OUT = OUT POINTER.
* CH = CHANNEL TO USE.
* LIMIT = LIMIT POINTER.
* ABUF = AUX BUFFER FOR LONG ASSOCIATED DATA BLOCKS.
* EBUF = HARDWARE ERROR STATUS BUFFER.(5 WORDS)
SPACE 4,10
*** DATA FET.
*
*T DFET 42/ ,8/ ERRC ,1/E,8/ FUNC ,1/C
*T, 42/ ,18/ FIRST
*T, 42/ ,18/ IN
*T, 42/ ,18/ OUT
*T, 12/ UNIT,29/ ,1/T ,18/ LIMIT
*T, 60/ EBUF
*T, 60/ HBUF
*
* WHERE.
* ERRC = ERROR RETURN CODE.
* E = EOI STATUS(READ).
* FUNC = FUNCTION CODE.
* READ, WRITE, REWIND/UNLOAD.
* C = COMPLETE STATUS.
* FIRST = FIRST POINTER.
* IN = IN POINTER.
* OUT = OUT POINTER.
* UNIT = UNIT NUMBER.
* T = TERMINATE STREAMING FLAG.
* LIMIT = LIMIT POINTER.
* EBUF = HARDWARE ERROR STATUS BUFFER(5 WORDS).
* HBUF = STRIPE HEADER BUFFER(20 WORDS).
SPACE 4,10
*** STRIPE FORMAT.
*
* EACH M860 STRIPE IS CAPABLE OF HOLDING
* 6530 8 BIT BYTES OF DATA.
* 1SS WRITES A 150 BYTE HEADER, 483 - 6279 BYTES OF DATA
* AND EITHER A TAPEMARK (EOI) OR A 90 BYTE TRAILER.
* DATA CONSISTS OF FROM 1 TO 13 DISK SECTORS WITH PARTIAL
* NOS CONTROL WORDS. THE FIRST CONTROL WORD HAS ONLY
* THE PP WORD COUNT OF ACTUAL DATA AND THE SECOND CONTROL
* WORD ONLY HAS THE LEVEL NUMBER. THE REST OF THE CONTROL
* WORDS ARE RECONSTRUCTED BY 1SS BEFORE WRITING THE
* DATA TO THE CM BUFFER.
SPACE 4,10
*** JOB DAYFILE MESSAGES.
*
* *1SS ABT.* FIELD LENGTH ERROR.
* *1SS INVALID FUNCTION.* INPUT REG. FUNCTION INVALID.
*
*
* IF SENSE SWITCH 1 IS ON, TRACE AND TIMING MESSAGES
* ARE ISSUED TO THE CONTROL POINT DAYFILE.
SPACE 4,10
* COMMON DECKS.
LIST X
*CALL COMBCDD
LIST -X
*CALL COMPMAC
*CALL COMPCHI
TITLE ASSEMBLY CONSTANTS.
* DIRECT CELLS.
LOC 16
CL BSS 1 FUNCTION TIMEOUT CLOCK
EO BSS 1 END OF OPERATION TIMEOUT CLOCK
CN BSS 5 CM WORD BUFFER
BC BSS 1 BYTE COUNT
EC BSS 1 ERROR CODE
FE BSS 2 FET ADDRESS
IC BSS 1 IDLE COUNTER
MW BSS 1 MESSAGE WAITING FLAG
RC BSS 1 RECALL COUNT
ST BSS 1 GENERAL STATUS
WC BSS 1 WORD COUNT
ES BSS 1 EST ORDINAL OF CONTROL UNIT
EQ BSS 1 EQUIPMENT NUMBER OF CONTROL UNIT
PC BSS 1 PRU COUNT WITHIN A DATA STRIPE
UN BSS 1 UNIT NUMBER FOR DATA I/O
SC BSS 1 STRIPE COUNTER
DR BSS 2 CPU DRIVER RECALL ADDRESS
LOC *O
LOC 60
FT BSS 2 FIRST POINTER
IN BSS 2 IN POINTER
OT BSS 2 OUT POINTER
LM BSS 2 LIMIT POINTER
LOC *O
SPACE 4,10
* EQUATES.
CH EQU 0 DEFAULT CHANNEL NUMBER
DSTL EQU 24 DETAIL (FSC) STATUS LENGTH
BRTL EQU 77 BUSY RETRY LIMIT
EOPL EQU 480D END OF OP. TIME LIMIT
FTOL EQU 360D FUNCTION TIMEOUT LIMIT
GSTL EQU 3 GENERAL STATUS LENGTH
IPLM EQU 400D IDLE PASS LIMIT BEFORE DROP PP
MSBC EQU 43D LENGTH OF MESSAGE IN PP BYTES
MSWC EQU 9D LENGTH OF MESSAGE IN CM WORDS
MXAD EQU 3601 MAX ASSOCIATED DATA BYTE COUNT + 1
MXWC EQU 256D CM WORD COUNT OF MAX ASSOC DATA
PRUL EQU 66D LENGTH OF PRU WITH CONTROL WORDS
SPACE 4,20
* HARDWARE FUNCTION CODES.
RELF EQU 1 RELEASE UNIT
CMRF EQU 2 CONNECT FOR MESSAGE READ
CMWF EQU 3 CONNECT FOR MESSAGE WRITE
REWF EQU 10 REWIND
STPF EQU 11 STOP TAPE MOTION
GSTF EQU 12 GENERAL STATUS
RISF EQU 14 INTERRUPT STATUS
CONF EQU 20 CONNECT TO VIRTUAL TAPE UNIT
REDF EQU 40 READ DATA
MRDF EQU 43 MESSAGE READ
WRTF EQU 50 WRITE DATA
WTMF EQU 51 WRITE TAPE MARK
MWRF EQU 53 MESSAGE WRITE
RUNF EQU 110 REWIND/UNLOAD
CDEF EQU 120 CHECK FOR DEVICE END
WUMF EQU 140 WAIT UNIT MOUNTED
SWRF EQU 250 SHORT WRITE
FSTF EQU 312 FSC STATUS
MCLF EQU 414 MASTER CLEAR
DSTF EQU 704 DIAGNOSTIC STATUS
SPACE 4,10
* NOS 2 COMPATIBILITY.
IF -DEF,HNGM,1
HNGM EQU MXFM HANG PPU MONITOR FUNCTION
SPACE 4,10
TITLE LOCAL MACROS.
SPACE 4,10
** LOCAL MACROS.
SPACE 4,10
** ERROR - PROCESS ERROR.
*
* ERROR EC
*
* EC ERROR CODE.
PURGMAC ERROR
ERROR MACRO E
MACREF ERROR
LDN E
RJM ERR
ENDM
FETA SPACE 4,10
** FETA - LOAD ABSOLUTE FET ADDRESS.
*
* FETA A
*
* A = OFFSET INTO FET.
PURGMAC FETA
FETA MACRO A
MACREF FETA
LDD FE
SHN 14
ADD FE+1
IFC NE,$A$$,1
ADN A
RJM CFL
ENDM
LDCA SPACE 4,10
** LDCA - LOAD CENTRAL ADDRESS.
*
* LDCA A
*
* (A, A+1) = RELATIVE ADDRESS.
PURGMAC LDCA
LDCA MACRO A
MACREF LDCA
LDD A
LPN 77
SHN 14
ADD A+1
RJM CFL CHECK ADDRESS
ENDM
TITLE MAIN ROUTINE.
** SSD - MAIN ROUTINE.
ORG PPFW
SSD RJM PRS PRESET
* PROCESS CYBER MESSAGES.
SSD1 LDC 0 MESSAGE OUTPUT FET ADDRESS
SSDA EQU *-1
STD FE+1
SHN -14
STD FE
RJM WMS WRITE ANY MESSAGES TO M862
* PROCESS M860 MESSAGES.
SSD2 LDC 0 MESSAGE INPUT FET ADDRESS
SSDB EQU *-1
STD FE+1
SHN -14
STD FE
RJM CKM CHECK FOR MESSAGE
* PROCESS DATA I/O.
LDCA IR+3
ADN 1
CRD CM READ DATA FET ADDRESS
LDD CM+3
STD FE
SHN 14
ADD CM+4
ZJN SSD4 IF NO DATA FET
STD FE+1
RJM CFL CHECK FIELD LENGTH
RJM PDF PROCESS DATA FET
* CHECK FOR ACTIVITY.
SSD4 LDD MW
ZJN SSD6 IF NO ACTIVITY
LDC IPLM
STD IC INITIALIZE IDLE PASS LIMIT
SSD5 LJM SSD1 LOOK FOR WORK TO DO
SSD6 SOD IC
ZJN SSD7 IF IDLE PASS LIMIT
PAUSE
LDD CM+1
NJN DPP IF ERROR FLAG
DELAY
UJN SSD5 LOOK FOR WORK
SSD7 LDN ZERL
CRD CM
AOD CM+4
LDCA DR
CWD CM ACTIVATE CPU DRIVER
DPP LDCA IR+3
CRD CM READ AVTIVITY WORD
LDD CM+4
SCN 1 CLEAR PPU ACTIVE
STD CM+4
LDCA IR+3
CWD CM
DPP1 MONITOR DPPM
LJM PPR EXIT TO PPR
ERR SPACE 4,10
** ERR - PROCESS ERROR.
*
* ENTRY (A) = ERROR CODE.
*
* EXIT TO *DPP*.
*
* CALLS MCL, SCB.
*
* USES EC.
ERR CON 0 CALLERS ADDRESS FOR DEBUG
STD EC
SBN RCHWET
MJN ERR4 IF NOT HARDWARE ERROR TYPE
SBN RCMCLR-RCHWET
MJN ERR3 IF NO MASTERCLEAR REQUIRED
RJM MCL MASTER CLEAR FSC
ERR3 LDN ERRL
STD CM
FETA ERRW
CWM GSTS,CM WRITE STATUS TO FET
ERR4 RJM REL RELEASE CHANNEL
TRCA LDN 0
NJN ERR5 IF TRACE MODE
LDD EC
SBN RCHWET
MJN ERR6 IF NOT HARDWARE ERROR
ERR5 EXECUTE 2SS LOG ERROR
ERR6 LDN 0 ERROR STATUS ONLY
RJM SCB SET FET COMPLETE
LDN ZERL
CRD CM
AOD CM+4
LDCA DR
CWD CM RECALL CPU DRIVER
LJM DPP DROP PP
TITLE FUNCTION PROCESSORS.
PDF SPACE 4,10
** PDF - PROCESS DATA FET.
*
* ENTRY (FE - FE+1) = FET ADDRESS.
*
* EXIT DATA FET REQUEST PROCESSED.
*
* CALLS IBP, RDA, RUL, WDA.
*
* USES T1, CM - CM+4, CN - CN+4, ES, EQ, CH, PC, UN.
PDF SUBR ENTRY EXIT
FETA
CRD CM READ REQUEST WORD
ADN 4
CRD CN READ LIMIT WORD
LDD CM+4
SHN 21-0
MJN PDFX IF NO FUNCTION
SHN 22-21
LPC 777
STD CM+4
LDC TFCN TABLE OF LEGAL FUNCTIONS
STD T1
PDF1 LDI T1
NJN PDF2 IF NOT END OF TABLE
ERROR RCILLF ILLEGAL FUNCTION
PDF2 LMD CM+4
ZJN PDF3 IF FUNCTION FOUND
LDN 2
RAD T1 ADVANCE TABLE ENTRY
UJN PDF1 CHECK NEXT ENTRY
PDF3 LDM 1,T1 PROCESSOR ADDRESS
STM PDFA
LDD CN
STD UN SET UNIT NUMBER
SBN 17+1
MJN PDF4 IF LEGAL UNIT NUMBER
ERROR RCILLU ILLEGAL UNIT NUMBER
PDF4 RJM IBP INITIALIZE BUFFER POINTERS
RJM ** PROCESS FUNCTION
PDFA EQU *-1
LJM PDFX RETURN
TFCN SPACE 4,10
** TFCN - TABLE OF LEGAL FUNCTIONS AND PROCESSORS.
*
*T,TFCN 12/ FUNCTION CODE ,12/PROC. ADDRESS
TFCN BSS 0 TABLE OF LEGAL FUNCTION REQUESTS
CON FCRUN,RUN REWIND/UNLOAD
CON FCCWR,RDA CONTROL WORD READ DATA
CON FCCWW,WDA CONTROL WORD WRITE DATA
CON 0 END OF TABLE
RDA SPACE 4,10
** RDA - READ DATA IN STRIPE FORMAT.
*
* ENTRY FET INITIALIZED.
*
* EXIT EOI SET IN FET, ERROR OTHERWISE.
*
* CALLS CIB, CON, DV5, FCN, REL, SCB, ST, WBB.
*
* USES T0, T1, CM - CM+4, AC, BC, PC, RC, WC.
RDA SUBR ENTRY/EXIT
TRCB LDN 0
ZJN RDA0 IF NOT TRACE MODE
LDC =C*RDA.*+CPON
RJM DFM
RDA0 LDN 0
STD SC CLEAR STRIPE COUNTER
STD PC CLEAR PRU COUNT
STM PBUF INITIALIZE FIRST CONTROL WORD
STM PBUF+2
STM PBUF+3
LDD HN
STM PBUF+1
LDN ZERL INITIALIZE SECOND CONTROL WORD
CRM PBUF+PRUL*5-5,ON
RJM CON CONNECT UNIT
RDA1 RJM CIB CHECK INPUT BUFFER
ADC -PRUL*PRUPST
PJN RDA1.1 IF ROOM FOR FULL STRIPE
LDN 0 NO READ IN PROGRESS
RJM RCL RECALL CPU AND PAUSE
UJN RDA1 CHECK AGAIN
RDA1.1 LDN REDF
RJM FCN READ FUNCTION
ACN CH
LDC HDRL*5
STD BC
IAM HBUF,CH INPUT HEADER
NJN RDA2 IF NOT FULL BLOCK
LDN HDRL
STD T1
FETA HDRW
CWM HBUF,T1 WRITE HEADER TO CM
LDN BRTL
STM CBSA INITIALIZE RETRY COUNT
LJM RDA7 READ DATA
RDA2 STD WC SAVE REMAINDER
DCN CH+40
LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-13
PJN RDA4 IF NO ALERT
LDM STEC
LPC -2000B
NJN RDA3 IF EC .NE. 0 OR PARITY ERROR
LDM FSTS+4
SHN 21-1
PJN RDA3 IF NOT TAPE BOTTOM RIGHT
ERROR RCENDV
RDA3 RJM CBS CHECK BUSY STATUS
NJN RDA3.1 IF NOT TO RETRY
LJM RDA1 RETRY READ
RDA3.1 ERROR RCSTER STATUS ERROR
RDA4 LDD BC
LMD WC
NJN RDA5 IF NOT EMPTY BLOCK
LDD ST
SHN 21-4
MJN RDA6 IF EOI
LDN REDF
RJM FCN READ FUNCTION
ACN CH
LDN 1
IAM CM,CH
DCN CH+40
LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-4
MJN RDA6 IF EOI
RDA5 ERROR RCCHIN CHANNEL HANG ERROR
RDA6 LDD TH
RJM SCB SET COMPLETE WITH EOI
LJM RDAX RETURN
RDA7 BSS 0
RDA8 LDN 0
STD RC CLEAR RECALL COUNT
LDC 500+2
STD BC
IAM PBUF+4,CH
ZJN RDA9 IF FULL PRU
LJM RDA2 CHECK FOR EOI
RDA9 LDM PBUF+4
ADC -501
MJN RDA11 IF BYTE COUNT OK
RDA10 ERROR RCCWER CONTROL WORD ERROR
RDA11 ADC 501
RJM DV5
ADN 2 ADD CONTROL WORDS
STD WC
SBN 2
STD T0
SHN 2 *4
ADD T0 *5
LMM PBUF+4
NJN RDA10 IF NOT EXACT MULTIPLE OF 5
RJM WBB WRITE PRU
AOD PC
SBN PRUPST
ZJN RDA12 IF FULL STRIPE
ADN PRUPST/2
NJN RDA11.1 IF NOT 1/2 STRIPE READ
LDN DRCM
STD CM
LDD OA
CWD CM RECALL CPU DRIVER
RDA11.1 LJM RDA7 READ NEXT PRU
RDA12 STD PC CLEAR PRU COUNT
LDN TLRL*5
STD BC
IAM TBUF,CH
ZJN RDA13 IF FULL TRAILER
LJM RDA2 CHECK FOR EOI
RDA13 DCN CH+40
LDN GSTF
RJM STS WAIT END OF OP
SHN 21-13
PJN RDA14 IF NO ALERT
ERROR RCSTER STATUS ERROR
RDA14 LDM TBUF
SHN 21-13
MJN RDA15 IF TRAILER
ERROR RCHDER
RDA15 SHN 13-12
PJN RDA16 IF NOT END OF VOLUME
ERROR RCENDV END OF VOLUME RETURN
RDA16 SHN 12+1
LPC 3777 CLEAR TRAILER FLAG
STM TBUF
LDN TLRL
STD T1
FETA HDRW
CWM TBUF,T1
LDN DRCM
STD CM
LDD OA
CWD CM RECALL CPU
AOD SC
SBN STRPAU
NJN RDA17 IF NOT FULL AU
STD SC
AOD RC
* LDN 1 FLAG READ
RJM RCL PAUSE AND CHECK ERROR FLAG
RDA17 FETA 4
CRD CM READ LIMIT WORD
LDD CM+3
SHN -6
ZJN RDA18 IF TERMINATE FLAG NOT SET
ERROR RCTERF TERMINATE FLAG RETURN
RDA18 LDD SC
NJN RDA19 IF NOT END OF AU
RJM CMG CHECK FOR MESSAGES
RDA19 LJM RDA1 CONTINUE READ
RMS SPACE 4,10
** RMS - READ MESSAGE AND ASSOCIATED DATA.
*
* ENTRY MESSAGE WAITING INTERRUPT FROM M862.
* CHANNEL RESERVED.
*
* EXIT (A) .NE. 0, IF NO BUFFER SPACE FOR MESSAGE.
* (A) .EQ. 0, IF MESSAGE READ.
*
* CALLS CIB, DV3, DV5, FCN, IBP, REL, STS, WMB.
*
* USES BC, CM - CM+4, FE, FE+1, WC, T1, T2, T4, T5, T6, T7.
RMS0 RJM REL RELEASE CHANNEL
LDN ZERL
CRD CM
LDD IN
STD CM+3
LDD IN+1
STD CM+4
FETA 2
CWD CM UPDATE IN POINTER IN FET
LDN ZERL
CRD CM
AOD CM+4
LDCA DR
CWD CM RECALL CPU DRIVER
MONITOR DRCM
* LDN 0 SET MESSAGE READ
RMS SUBR ENTRY/EXIT
RJM IBP INITIALIZE BUFFER PARAMETERS
RJM CIB CHECK INPUT BUFFER
ADC -MSWC-MXWC
PJN RMS1 IF ROOM IN BUFFER
RJM REL RELEASE CHANNEL
LDN ZERL
CRD CM
AOD CM+4
LDCA DR
CWD CM RECALL CPU DRIVER
MONITOR DRCM RECALL CPU
LDN 1 SET MESSAGE WAITING FOR BUFFER
UJN RMSX RETURN
RMS1 LDN CMRF
RJM CMD CONNECT TO MESSAGE READ DEVICE
LDN MRDF
RJM FCN ISSUE MESSAGE READ FUNCTION
LDN MSBC
ACN CH
RMS2 IJM RMS3,CH IF ERROR
EJM RMS2,CH IF DATA NOT AVAILABLE
RMS3 IAM BUFR,CH READ MESSAGE
DCN CH+40
STD BC SAVE REMAINDER
LMN MSBC
NJN RMS3.1 IF NOT EMPTY MESSAGE
LJM RMS0 EXIT
RMS3.1 LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-13
PJN RMS4 IF NO ERROR
ERROR RCSTER STATUS ERROR
RMS4 LDD BC
ZJN RMS5 IF FULL BLOCK
ERROR RCCHIN CHANNEL HANG
RMS5 LDN MSWC
STD WC
RJM WMB WRITE MESSAGE TO BUFFER
TRCC LDN 0
ZJN RMS5.5 IF NOT TRACE MODE
LDC 2RIN
RJM MDF MESSAGE TO DAYFILE
RJM GMT GET MESSAGE TYPE
LMC 0#81
NJN RMS5.5 IF NOT REWIND UNLOAD MSG
RJM RUM REWIND UNLOAD MESSAGES
RMS5.5 LDM BUFR+2
SHN -4
STD T2
LDM BUFR+1
LPC 377
SHN 10
RAD T2
NJN RMS7 IF ASSOCIATED DATA BLOCK PRESENT
RMS6 LJM RMS0 UPDATE FET
RMS7 ADC -MXAD
PJN RMS8 IF ASSOC DATA GOES TO AUX BUFFER
LDN 0
STD T1
STD T4 CLEAR FULL BLOCK COUNT
STD T6 CLEAR AUX BUFFER ADDRESS
STD T7
LJM RMS10
RMS8 ADC MXAD
SHN -14
STD T1
FETA 4
CRD CM READ LIMIT WORD
LDD CM+1
LPN 77
STD T6 SET AUX BUFFER
SHN 14
ADD CM+2
STD T7
NJN RMS9 IF AUX BUFFER PRESENT
RMS8.1 LDN REDF
RJM FCN ISSUE READ FUNCTION
ACN CH
IAN CH
RJM FIN FLUSH INPUT
RJM GMT GET MESSAGE TYPE
LMN 0#04
NJN RMS8.2 IF NOT READ CART. LABEL
LJM RMS0 PUT MESSAGE IN BUFFER
RMS8.2 ERROR RCDLER DATA LENGTH ERROR
RMS9 RJM CFL CHECK ADDRESS
RJM GMT GET MESSAGE TYPE
LMN 0#11
NJN RMS8.1 IF NOT READ WITH ERROR MESSAGE
* LDN 0
STD T4 CLEAR FULL BLOCK COUNT
RMS10 LDD T1
SHN 14
ADD T2
ADC -500*3/2
MJN RMS11 IF NO MORE FULL BLOCKS
STD T2
SHN -14
STD T1
AOD T4 INCREMENT FULL BLOCK COUNT
UJN RMS10 CHECK FOR MORE FULL BLOCKS
RMS11 LDD T2
STD BC
ZJN RMS12 IF NO PARTIAL BLOCK
SHN 1 *2
RJM DV3 DIVIDE BY 3
STD BC SET PP BYTE COUNT
RJM DV5 DIVIDE BY 5 = CM WORD COUNT
STD T5
RMS12 LDN CMRF
RJM CMD RESERVE MESSAGE EVICE
LDN REDF
RJM FCN FUNCTION FOR READ
ACN CH
LDD T4
NJN RMS13 IF MORE FULL BLOCKS
LJM RMS19 PROCESS SHORT BLOCK
RMS13 LDC 500
IAM BUFR,CH READ FULL BLOCK
ZJN RMS16 IF FULL BLOCK
RMS14 DCN CH+40
LDN GSTF
RJM STS WAIT END OF OP
SHN 21-13
PJN RMS15 IF NO ERROR
ERROR RCSTER STATUS ERROR
RMS15 ERROR RCCHIN CHANNEL HANG
RMS16 LDD T6
ADD T7
NJN RMS17 IF AUX BUFFER PRESENT
LDD HN
STD WC
RJM WMB WRITE BLOCK TO CM
UJN RMS18 CHECK FOR NEXT BLOCK
RMS17 LDCA T6
CWM BUFR,HN WRITE DATA TO AUX BUFFER
LDD HN
RAD T7
SHN -14
RAD T6
RMS18 SOD T4
ZJN RMS19 IF NO MORE FULL BLOCKS
LJM RMS13 GET NEXT BLOCK
RMS19 LDD BC
ZJN RMS20 IF NO PARIIAL BLOCK
IAM BUFR,CH
ZJN RMS20 IF ALL DATA READ
LJM RMS14 CHECK STATUS
RMS20 DCN CH+40
LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-13
PJN RMS21 IF NOT ALERT
ERROR RCSTER STATUS ERROR RETURN
RMS21 LDD BC
ZJN RMS23 IF NO PARTIAL BLOCK
LDD T6
ADD T7
NJN RMS22 IF AUX BUFFER PRESENT
LDD T5
STD WC
RJM WMB WRITE DATA TO BUFFER
UJN RMS23 UPDATE FET
RMS22 LDCA T6
CWM BUFR,T5 WRITE DATA TO AUX BUFFER
RMS23 LJM RMS0 UPDATE FET
RUM SPACE 4,10
** RUM - REWIND UNLOAD MESSAGES
*
* ENTRY (BUFR) CONTAINS REWIND UNLOAD MESSAGE
*
* EXIT PHYSICAL AND LOGICAL STRIPES TO DAYFILE
*
* CALLS CHN, DFM.
*
* USES T0.
RUM SUBR ENTRY/EXIT
LDM BUFR+35
SHN -8D
STD T0
LDM BUFR+34
SHN 4
LMD T0
RJM CHN CONVERT PHYSICAL STRIPE
LDC 2R P
STM RUMA
LDC RUMA+CPON
RJM DFM ISSUE MESSAGE
LDM BUFR+36
LPN 0#F
SHN 14
LMM BUFR+37
RJM CHN CONVEWT LOGICAL STRIPE
LDC 2R L
STM RUMA
LDC RUMA+CPON
RJM DFM ISSUE MSSAGE
LJM RUMX RETURN
RUMA DIS ,* XS = 1234.*
CHN SPACE 4,10
** CHN - CONVERT HEX NUMBER
*
* ENTRY (A) = 16 BIT NUMBER
*
* EXIT (RUMA+3, RUMA+4) = DISPLAY CODE HEX NUMBER
*
* CALLS CTH.
*
* USES T1.
CHN SUBR ENTRY/EXIT
STD T1
SHN -14
RJM CTH CONVERT 1ST DIGIT
SHN 6
STM RUMA+3
LDD T1
SHN -8D
RJM CTH CONVERT 2ND DIGIT
RAM RUMA+3
LDD T1
SHN -4
RJM CTH CONVERT 3RD DIGIT
SHN 6
STM RUMA+4
LDD T1
RJM CTH CONVERT 4TH DIGIT
RAM RUMA+4
UJN CHNX RETURN
RUN SPACE 4,10
** RUN - REWIND UNLOAD UNIT.
*
* ENTRY (UN) = UNIT NUMBER.
*
* EXIT REWIND UNLOAD ISSUED.
*
* CALLS FCN, RES, SCB.
*
* USES CM - CM+4.
RUN SUBR ENTRY/EXIT
TRCD LDN 0
ZJN RUN0.0 IF NOT TRACE MODE
LDC =C*RUN.*+CPON
RJM DFM
RUN0.0 RJM RES RESERVE CHANNEL
LDN CONF
ADD UN
RJM FCN CONNECT UNIT
LDN GSTF
RJM STS GET STATUS
SHN 21-11
MJN RUN0 IF UNIT NOT CONNECTED
LDC RUNF
RJM FCN ISSUE REWIND UNLOAD
LDN GSTF
RJM STS GET STATUS
SHN 21-13
PJN RUN1 IF NOT ALERT
RUN0 ERROR RCSTER STATUS ERROR
RUN1 LDN 0
RJM SCB SET FET COMPLETE
TRCE LDN 0
ZJN RUN2 IF NOT TRACE MODE
LDC RTCL
CRD CM READ MILLISECOND CLOCK
LDN 0
STD CM CLEAR SECOND COUNT
STD CM+1
STD CM+2 ONLY USE 24 BITS
LDD MA
CWD CM
LDN 1
STD CM+1 ONLY 1 VALUE TO BE CONVERTED
MONITOR RDCM CONVERT TO F10.3
LDD MA
CRM RUNB,ON
LDC RUNA+CPON
RJM DFM ISSUE DAYFILE MESSAGE
RUN2 LJM RUNX
RUNA DATA 12HRUNL
RUNB BSS 6 MILLISECOND CLOCK
WDA SPACE 4,10
** WDA - WRITE DATA IN STRIPE FORMAT.
*
* ENTRY (UN) = UNIT NUMBER.
*
* EXIT AT EOI, ERROR OTHERWISE.
*
* CALLS CFS, DV5, FCN, RBB, REL, SCB, STS.
*
* USES T7, CM - CM+4, AC, PC, RC, WC.
WDA SUBR ENTRY/EXIT
TRCF LDN 0
ZJN WDA0.0 IF NOT TRACE MODE
LDC =C*WDA.*+CPON
RJM DFM
WDA0.0 LDN 0
STD SC CLEAR STRIPE COUNT
STD PC CLEAR PRU COUNT
LDN HDRL
STD T1
LDN TLRL
STD T2
FETA HDRW
CRM HBUF,T1 READ HEADER
SBN HDRL
CRM TBUF,T2 READ TRAILER
LDC 4000
RAM TBUF SET TRAILER FLAG
RJM CON CONNECT UNIT
WDA0 RJM CFS CHECK FOR FULL STRIPE
LDN WRTF
RJM FCN WRITE FUNCTION
ACN CH
LDC HDRL*5
OAM HBUF,CH OUTPUT HEADER
NJN WDA1 IF NOT ALL DATA OUTPUT
LJM WDA4 CONTINUE WRITE
WDA1 DCN CH+40
LDN GSTF
RJM STS
SHN 21-13
MJN WDA2 IF ALERT
ERROR RCCHOT CHANNEL HANG RETURN
WDA2 LDM FSTS+4
SHN 21-1
PJN WDA3 IF NOT TAPE BOTTOM RIGHT
LDM STEC
NJN WDA3 IF EC .NE. 0 OR PARITY ERROR
ERROR RCTBRT TAPE BOTTOM RIGHT ERROR
WDA3 RJM CBS CHECK BUSY STATUS
NJN WDA3.1 IF NOT TO RETRY
FETA 3
CRD CM RESET OUT POINTER
LDD CM+3
STD OT
LDD CM+4
STD OT+1
LJM WDA0 RETRY WRITE
WDA3.1 ERROR RCSTER STATUS ERROR
WDA4 BSS 0
WDA5 LDN BRTL
STM CBSA RESET RETRY COUNT
LDCA OT
CRD CM READ CONTROL WORD
LDD CM
SHN 21-12
PJN WDA9 IF NOT EOI
WDA6 DCN CH+40
LDN GSTF
RJM STS GET GENERAL STATUS
SHN 21-13
PJN WDA8 IF NO ALERT
WDA7 LJM WDA2 CHECK END OF TAPE
WDA8 LDN WTMF
RJM FCN WRITE TAPE MARK
LDN 1
STD WC
RJM RMB READ MEMORY BUFFER
RJM UCO UPDATE CENTRAL OUT
LDN GSTF
RJM STS GET STATUS
SHN 21-13
MJN WDA7 IF ALERT SET
LDN 0
RJM SCB SET FET COMPLETE
LJM WDAX RETURN
WDA9 LDD CM+4
ADC -501
MJN WDA10 IF BYTE COUNT OK
ERROR RCCWER CONTROL WORD ERROR
WDA10 LDD CM+4
RJM DV5
ADN 2 ADD CONTROL WORDS
STD WC
RJM RMB READ MEMORY BUFFER
LDC 500+2
OAM PBUF+4,CH
ZJN WDA11 IF FULL BLOCK
LJM WDA1 CHECK FOR HANG
WDA11 RJM UCO UPDATE CENTRAL OUT
AOD PC ADVANCE PRU COUNT
SBN PRUPST
ZJN WDA12 IF FULL STRIPE
ADN PRUPST/2
NJN WDA11.1 IF NOT TIME TO RECALL CPU
LDN DRCM
STD CM
LDD OA
CWD CM
WDA11.1 LJM WDA4 GET NEXT PRU
WDA12 STD PC RESET PRU COUNT
STD RC RESET RECALL COUNT
WDA13 RJM COB CHECK OUTPUT BUFFER
NJN WDA14 IF DATA
* LDN 0 FLAG WRITE
RJM RCL RECALL CPU
UJN WDA13 TRY AGAIN
WDA14 LDCA OT
CRD CM
LDD CM
SHN 21-12
PJN WDA15 IF NOT EOI
LJM WDA6 CHECK FOR ERROR AND WRITE TAPE MARK
WDA15 LDN TLRL*5
OAM TBUF,CH
ZJN WDA16 IF FULL BLOCK
LJM WDA1 CHECK FOR HANG
WDA16 DCN CH+40
LDN GSTF
RJM STS GET STATUS
SHN 21-13
PJN WDA18 IF NO ERROR
LJM WDA2 CHECK FOR TAPE BOTTOM RIGHT
WDA18 SHN 13-3
PJN WDA20 IF NOT EOT
LDM TBUF
SHN 21-12
PJN WDA19 IF NOT ALREADY SET EOV TRAILER
ERROR RCENDV END OF VOLUME
WDA19 SHN 12+1 REPOSITION
ADC 2000
STM TBUF SET END OF VOLUME FLAG
WDA20 AOM HBUF+4 INCREMENT STRIPE IN FILE
STM TBUF+4
SHN -14
RAM HBUF+3
STM TBUF+3
AOM HBUF+1*5+4 INCREMENT STRIPE IN VOLUME
STM TBUF+1*5+4
LDN 2
STD T1
FETA HDRW
CWM HBUF,T1
LDN DRCM
STD CM
LDD OA
CWD CM RECALL CPU
AOD SC
SBN STRPAU
NJN WDA21 IF NOT FULL AU
STD SC
AOD RC
LDN 0 FLAG WRITE
RJM RCL PAUSE AND CHECK ERROR FLAG
WDA21 FETA 4
CRD CM READ LIMIT WORD
LDD CM+3
SHN -6
ZJN WDA22 IF TERMINATE FLAG NOT SET
ERROR RCTERF TERMINATE FLAG RETURN
WDA22 LDD SC
NJN WDA23 IF NOT END OF AU
RJM CMG CHECK FOR MESSAGES
WDA23 LJM WDA0 CONTINUE WRITE
WMS SPACE 4,10
** WMS - WRITE MESSAGE AND ASSOCIATED DATA.
*
* ENTRY (FE - FE+1) = MESSAGE OUTPUT FET.
*
* EXIT ALL MESSAGES OUTPUT TO M860.
*
* CALLS COB, DV3, DV5, FCN, IBP, RMB, REL, RES, SCB, STS.
* CMD, CSM, GMT.
*
* USES T4, CM - CM+4, BC, WC.
WMS SUBR ENTRY/EXIT
LDN 1
STM WMSA CLEAR RESTART CONTROL UNIT FLAG
RJM IBP INITIALIZE BUFFER PARAMETERS
RJM COB CHECK OUTPUT BUFFER
ZJN WMSX IF NO MESSAGES
FETA CHECK FOR ERROR CODE SET
CRD CM
LDD CM+4
SHN 21-0
MJN WMSX IF COMPLETE
LDD CM+4
SHN -12
SHN 6
LMD CM+3
NJN WMSX IF ERROR CODE SET
RJM RES RESERVE CHANNEL
WMS0 RJM COB CHECK OUTPUT BUFFER
NJN WMS1 IF MESSAGE(S) IN BUFFER
MONITOR DRCM RECALL CPU
LDC ** RESTART CONTROL UNIT FLAG
WMSA EQU *-1
NJN WMS0.1 IF CONTROL UNIT NOT RESTARTED
LDN RISF
RJM STS IGNORE ANY OUTSTANDING INTERRUPTS
WMS0.1 RJM REL RELEASE CHANNEL
LJM WMSX RETURN
WMS1 SBN MSWC
PJN WMS2 IF ENOUGH DATA
ERROR RCDLER DATA LENGTH ERROR
WMS2 LDN MSWC
STD WC
RJM RMB READ MESSAGE
TRCG LDN 0
ZJN WMS2.1 IF NOT TRACE MODE
LDC 2ROT
RJM MDF MESSAGE TYPE TO DAYFILE
WMS2.1 LDN CMWF
RJM CMD CONNECT TO MESSAGE WRITE DEVICE
LDC BRTL
STM WMSB RETRY LIMIT
WMS2.2 LDN MWRF
RJM FCN ISSUE MESSAGE WRITE FUNCTION
LDN MSBC
ACN CH
OAM BUFR,CH OUTPUT MESSAGE
FJM *,CH WAIT FOR LAST BYTE
DCN CH+40
STD BC
LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-13
PJN WMS3 IF NO ERROR
SHN 13-1
PJN WMS2.3 IF NOT BUSY
SOM WMSB
MJN WMS2.3 IF RETRY LIMIT
RJM REL RELEASE CHANNEL
RJM BDL BUSY DELAY
RJM RES RESERVE CHANNEL
LJM WMS2.2 RETRY
WMS2.3 ERROR RCSTER STATUS ERROR
WMS3 LDD BC
ZJN WMS4 IF FULL BLOCK
ERROR RCCHOT CHANNEL HANG
WMS4 RJM GMT GET MESSAGE TYPE
LMN 0#1C
STM WMSA SET/CLEAR RESTART FLAG
LMN 0#1C
RJM CSM CHECK SPECIAL MESSAGE
LDM BUFR+2
SHN -4
STD BC ASSOCIATED DATA BYTE COUNT
LDM BUFR+1
LPC 377
SHN 10
RAD BC
NJN WMS6 IF ASSOCIATED DATA
WMS5 RJM UCO UPDATE CENTRAL OUT
LJM WMS0 CHECK FOR MORE MESSAGES
WMS6 ADC -MXAD
MJN WMS7 IF BLOCK NOT TOO BIG
ZJN WMS7 IF BLOCK NOT TOO BIG
ERROR RCDLER DATA LENGTH ERROR
WMS7 ADC MXAD
SHN 1 *2
STD T4
RJM DV3 /3 = PP BYTE COUNT
STD BC
RJM DV5 GET CM WORD COUNT
STD WC
RJM COB CHECK OUTPUT FET
SBD WC
PJN WMS8 IF DATA IN BUFFER
ERROR RCDLER DATA LENGTH ERROR
WMS8 RJM RMB READ DATA TO PP
LDC BRTL
STM WMSB RETRY LIMIT
WMS8.1 LDD BC
SHN 1 *2
ADD BC *3
SBD T4 REMAINDER FROM DIVISION BY 3
LPN 2 REMAINDER OF 2 = WRITE SHORT
SHN 6
ERRNZ SWRF-WRTF-200
ADN WRTF
RJM FCN ISSUE WRITE FUNCTION
LDD BC
STD WC SAVE FOR RETRY
ACN CH
OAM BUFR,CH SEND ASSOC. DATA
FJM *,CH WAIT FOR LAST BYTE
DCN CH+40
STD BC
LDN GSTF
RJM STS WAIT END OF OPERATION
SHN 21-13
PJN WMS9 IF NO ERROR
SHN 13-1
PJN WMS8.2 IF NOT BUSY
SOM WMSB
MJN WMS8.2 IF RETRY LIMIT
RJM REL RELEASE CHANNEL
RJM BDL BUSY DELAY
RJM RES RESERVE CHANNEL
LDD WC
STD BC RESTORE BYTE COUNT
LJM WMS8.1 RETRY
WMS8.2 ERROR RCSTER STATUS ERROR
WMS9 LDD BC
ZJN WMS10 IF FULL BLOCK
ERROR RCCHOT CHANNEL HANG
WMS10 LJM WMS5 UPDATE FET
WMSB CON BRTL RETRY LIMIT
TITLE SUBROUTINES.
TITLE I/O SUBROUTINES.
CKM SPACE 4,10
** CKM - CHECK FOR MESSAGE.
*
* ENTRY (MW) .NE. 0, IF MESSAGE ALREADY WAITING.
*
* EXIT (MW) = 0, IF NO MESSAGE WAITING FOR BUFFER.
*
* CALLS RES, RMS, STS.
*
* USES MW.
CKM SUBR ENTRY/EXIT
RJM RES RESERVE CHANNEL
LDD MW
NJN CKM1 IF MESSAGE WAITING
LDN RISF
RJM STS REQUEST INTERRUPT STATUS
SHN 21-10
MJN CKM1 IF MESSAGE READY
RJM REL RELEASE CHANNEL
UJN CKMX RETURN
CKM1 RJM RMS READ MESSAGE
STD MW SAVE BUFFER STATUS
UJN CKMX RETURN
CMD SPACE 4,10
** CMD - CONNECT TO MESSAGE DEVICE.
*
* ENTRY (A) = CONNECT FUNCTION CODE.
* CHANNEL RESERVED.
*
* EXIT MESSAGE DEVICE CONNECTED.
*
* CALLS FCN, STS.
*
* USES NONE.
CMD SUBR ENTRY/EXIT
STM CMDA SAVE FUNCTION CODE
LDC BRTL
STM CMDB RETRY LIMIT
CMD0 LDC **
CMDA EQU *-1
RJM FCN ISSUE CONNECT FUNCTION
LDN GSTF
RJM STS GET STATUS
SHN 21-13
PJN CMDX IF NOT ALERT
SOM CMDB
MJN CMD0.0 IF RETRY LIMIT
RJM REL RELEASE CHANNEL
RJM BDL BUSY DELAY
RJM RES RESERVE CHANNEL
UJN CMD0 RETRY
CMD0.0 LDM STEC ERROR CODE
LMC 170
NJN CMD1 IF CHANNEL INTERFACE ONLINE
ERROR RCCIFO CHANNEL INTERFACE OFF LINE
CMD1 ERROR RCIMPL
CMDB CON BRTL RETRY COUNTER
CMG SPACE 4,10
** CMG - CHECK FOR MESSAGES.
*
* ENTRY CHANNEL RESERVED.
*
* EXIT NORMAL, IF NO MESSAGES TO SEND/RECEIVE.
* TO *SSD1* IF MESSAGES TO PROCESS.
*
* CALLS REL, STS.
*
* USES CM - CM+4, CN - CN+4, MW.
CMG SUBR ENTRY/EXIT
LDN RISF
RJM STS GET MESSAGE STATUS
SHN 21-10
PJN CMG2 IF NO M860 MESSAGE
AOD MW FLAG MESSAGE READY
CMG1 RJM REL RELEASE CHANNEL
LJM SSD1 PROCESS MESSAGES
CMG2 LDM SSDA-1 CHECK MESSAGE FROM EXEC.
LPN 77
SHN 6
ADD RA
SHN 6
ADM SSDA
ADN 2 IN POINTER
CRD CM
ADN 1
CRD CN OUT POINTER
LDD CM+3
LMD CN+3
NJN CMG1 IF IN .NE. OUT
LDD CM+4
LMD CN+4
NJN CMG1 IF IN .NE. OUT
LJM CMGX RETURN
CON SPACE 4,10
** CON - CONNECT UNIT.
*
* ENTRY (UN) = UNIT NUMBER.
*
* EXIT CHANNEL RESERVED, UNIT CONNECTED AND NOT BUSY.
*
* CALLS FCN, RES, STS.
*
* USES NONE.
CON SUBR ENTRY/EXIT
RJM WUM WAIT UNIT MOUNTED
LDC BRTL
STM CONA INITIALIZE BUSY RETRY LIMIT
CON1 RJM RES RESERVE CHANNEL
LDN CONF
ADD UN
RJM FCN CONNECT UNIT
LDN GSTF
RJM STS GET STATUS
SHN 21-13
PJN CONX IF NO ALERT
LDM STEC GET ERROR CODE
LMN 2
ZJN CON2 IF BUSY CODE
LMC 2&165
NJN CON3 IF NOT SENSE ERROR
CON2 RJM REL RELEASE CHANNEL
SOM CONA
ZJN CON3 IF RETRY LIMIT
RJM BDL BUSY DELAY
UJN CON1 TRY AGAIN
CON3 ERROR RCSTER STATUS ERROR
CONA CON BRTL BUSY RETRY LIMIT
CSM SPACE 4,10
** CSM - CHECK SPECIAL MESSAGE.
*
* ENTRY (A) = MESSAGE CODE.
*
* EXIT SPECIAL MESSAGES PROCESSED.
*
* CALLS FCN, STS.
*
* USES CM - CM+4.
CSM SUBR ENTRY/EXIT
LMN 0#06
NJN CSM1 IF NOT MOUNT VOLUME
LDM BUFR+5 GET UNIT NUMBER
SHN -10
ADC WUMF PRIME FSC FOR READY INTERRUPT
RJM FCN ISSUE FUNCTION
UJN CSMX RETURN
CSM1 LMC 0#06&0#81
NJN CSMX IF NOT RESPONSE TO REWIND/UNLOAD MSG
LDC RTCL
CRD CM READ REALTIME CLOCK
LDD CM+1 SECONDS
ADC EOPL END OF OP. LIMIT
STM CMSA
CSM2 LDM BUFR+5 GET UNIT NUMBER
SHN -10
ADC CDEF CHECK FOR INTERRUPT
RJM STS GET STATUS
SHN 21-13
MJN CSM4 IF ALERT
CSM3 LJM CSMX RETURN
CSM4 LDM STEC ERROR CODE
LMN 2
NJN CSM3 IF NOT BUSY(EXPECT ALERT/EC=131)
RJM REL PAUSE CHECK ERROR FLG
LDC RTCL
CRD CM READ REALTIME CLOCK
LDD CM+1 SECONDS
LMC **
CMSA EQU *-1
ZJN CSM5 IF TIMEOUT
RJM RES RESERVE CHANNEL
UJN CSM2 CHECK AGAIN
CSM5 ERROR RCNEOP NO END OF OPERATION
DST SPACE 4,10
** DST - DIAGNOSTIC STATUS.
*
* ENTRY CHANNEL RESERVED.
*
* EXIT TO CALLER IF NO ERROR.
* TO ERR IF ERROR
*
* CALLS NONE.
*
* USES T0.
DST SUBR ENTRY/EXIT
DCN CH+40 INSURE INACTIVE CHANNEL
FNC DSTF,CH ISSUE DIAGNOSTIC STATUS FUNCTION
LCN 0
DST1 IJM DST2,CH IF FUNCTION ACCEPTED
SBN 1
NJN DST1 IF NOT TIMEOUT
ERROR RCFCTO FUNCTION TIMEOUT
DST2 ACN CH
LCN 0
DST3 FJM DST5,CH IF STATUS READY
SBN 1
NJN DST3 IF NOT TIMEOUT
DST4 ERROR RCCHMF CHANNEL MALFUNCTION
DST5 LCN 0
IAN CH+40
DCN CH+40
MJN DST4 IF NO DATA READ
STM DSTS PUT IN STATUS BUFFER
LPC 3003
LMN 2
ZJN DSTX IF NO ERROR
SHN 21-12
PJN DST6 IF NOT CHANNEL PARITY ERROR
ERROR RCCHPE
DST6 SHN 12-11
PJN DST7 IF NOT FSC MEMORY PARITY ERROR
ERROR RCFSPE
DST7 SHN 11-0
MJN DST8 IF PROCESSOR RUNNING
ERROR RCFSNR
DST8 ERROR RCFSAB FSC ABNORMAL
FCN SPACE 4,10
** FCN - FUNCTION M860 MSS INTERFACE.
*
* ENTRY (A) = FUNCTION CODE TO BE ISSUED.
*
* EXIT FUNCTION ISSUED, TO ERR IF ERROR.
*
* CALLS DST.
*
* USES CL, CN - CN+4.
FCN SUBR ENTRY/EXIT
STM FSTS+16D SAVE FUNCTION IN DETAIL STATUS BLOCK
ADD EQ SET EQUIPMENT NUMBER
FAN CH ISSUE FUNCTION
LDC RTCL SET TIMEOUT CLOCK
CRD CN
LDD CN+1 SECOND COUNT
ADC FTOL FUNCTION TIMEOUT LIMIT
STD CL
LDN 1
FCN1 IJM FCNX,CH IF ACCEPTED
ADN 1
NJN FCN1 IF NOT TIMEOUT
PAUSE
LDD CM+1
ZJN FCN1.0 IF NO ERROR FLAG
RJM REL RELEASE CHANNEL
LJM DPP DROP PP
FCN1.0 LDC RTCL READ CLOCK
CRD CN
LDD CL
LMD CN+1
NJN FCN1 IF NOT TIMEOUT
DCN CH+40
LDN GSTF
FAN CH TRY TO GET GENERAL STATUS
FCN2 IJM FCN3,CH IF ACCEPTED
ADN 1
PJN FCN2 IF NOT TIMEOUT
UJN FCN8 TIMEOUT
FCN3 ACN CH
LDN 1
FCN4 FJM FCN5,CH IF STATUS READY
ADN 1
PJN FCN4 IF NOT TIMEOUT
UJN FCN8 TIMEOUT
FCN5 LDN GSTL
IAM GSTS,CH READ GENERAL STATUS
NJN FCN8 IF NOT ALL STATUS READ
DCN CH+40
FNC FSTF,CH DETAIL STATUS
FCN6 IJM FCN7,CH IF ACCEPTED
ADN 1
PJN FCN6 IF NOT TIMEOUT
UJN FCN8 TIMEOUT
FCN7 ACN CH
LDN DSTL
IAM FSTS,CH READ DETAIL STATUS
FCN8 DCN CH+40
RJM DST GET DIAGNOSTIC STATUS
ERROR RCFCTO FUNCTION TIMEOUT
FIN SPACE 4,10
** FIN - FLUSH INPUT.
*
* ENTRY CHANNEL ACTIVE.
*
* EXIT INPUT OPERATION COMPLETE.
*
* CALLS NONE.
*
* USES NONE.
FIN SUBR ENTRY/EXIT
FIN1 IJM FINX,CH IF COMPLETE
LCN 0
FIN2 FJM FIN3,CH IF INPUT READY
SBN 1
NJN FIN2 IF NOT TIMEOUT
DCN CH+40
UJN FINX RETURN
FIN3 IAN CH+40
UJN FIN1 GET NEXT BYTE
MCL SPACE 4,15
** MCL - MASTER CLEAR FSC.
*
* ENTRY CHANNEL RESERVED.
*
* EXIT FSC MASTERCLEARED.
*
* CALLS NONE.
*
* USES T0.
MCL SUBR ENTRY/EXIT
DCN CH+40 INSURE CHANNEL INACTIVE
FNC MCLF,CH MASTERCLEAR
LDN 12
STD T0
MCL1 SOD T0
MJN MCL3 IF TIMEOUT
MCL2 ADN 1
PJN MCL2 DELAY
AJM MCL1,CH IF NOT PROCESSED
ACN CH
OAN CH
OAN CH
DELAY
MCL3 DCN CH+40
UJN MCLX RETURN
MDF SPACE 4,10
** MDF - MESSAGE TYPE TO DAYFILE.
*
* ENTRY (BUFR+2,3) = MESSAGE TYPE, SUBTYPE.
* (A) = *IN* OR *OT*.
*
* EXIT MESSAGE TO LOCAL DAYFILE.
*
* USES CM.
*
* CALLS CTH, DFM.
MDF SUBR ENTRY/EXIT
STM MDFC
CHTE *
LDN 0
STD T0
SHN 3
LMD T0
SCN 70
ADC 2R00
STM MDFAA+1
LDM BUFR+2 FIRST DIGIT OF TYPE
RJM CTH CONVERT TO HEX DISPLAY CODE
SHN 6
STM MDFA+2 STORE IN MESSAGE
LDM BUFR+3 REST OF TYPE, SUBTYPE
STD CM
SHN -10
RJM CTH CONVERT TO HEX DISPLAY CODE
RAM MDFA+2
LDD CM
SHN -4
RJM CTH CONVERT TO HEX DISPLAY CODE
SHN 6
STM MDFA+4
LDD CM
RJM CTH CONVERT TO HEX DISPLAY CODE
RAM MDFA+4
LDC RTCL
CRD CM READ MILLISECOND CLOCK
LDN 0
STD CM CLEAR SECOND COUNT
STD CM+1
STD CM+2 ONLY USE 24 BITS
LDD MA
CWD CM
LDN 1
STD CM+1 ONLY 1 VALUE TO BE CONVERTED
MONITOR RDCM CONVERT TO F10.3
LDD MA
CRM MDFB,ON READ TO MESSAGE
LDM BUFR+35D GET MESSAGE RETURN CODE
STD T2
LDM BUFR+34D
LPN 0#F
STD T1
RJM CTH CONVERT TO HEX
SHN 6
STM MDFD
LDD T2
SHN -8D
RJM CTH CONVERT TO HEX
RAM MDFD
LDD T2
SHN -4
RJM CTH CONVERT TO HEX
SHN 6
STM MDFD+1
LDD T2
RJM CTH CONVERT TO HEX
RAM MDFD+1
LDD T1
ADD T2
NJN MDF1 IF RETURN CODE PRESENT
STM MDFD SET END OF LINE
MDF1 LDC MDFAA+CPON
RJM DFM ISSUE MESSAGE TO LOCAL DAYFILE
LJM MDFX RETURN
MDFAA DATA 4H CXX CHANNEL NUMBER
MDFA DATA 12H MS XX, YY.
MDFB BSS 5 MILLISECOND CLOCK F10.3
DATA 2H
MDFC CON 0 *IN* OR *OT*
CON 2H
MDFD BSS 2 RETURN CODE
CON 0 END OF LINE
CTH SPACE 4,10
** CTH - CONVERT TO HEX DISPLAY CODE.
*
* ENTRY (A) = NUMBER TO BE CONVERTED.
*
* EXIT (A) = HEX DISPLAY CODE OF LOWER 4 BITS.
*
* USES NONE.
*
* CALLS NONE.
CTH1 ADN 1 A THRU F
CTH SUBR ENTRY/EXIT
LPN 17
SBN 12
PJN CTH1 IF A THRU F
ADN 1R0+12 0 THRU 9
UJN CTHX RETURN
RCL SPACE 4,10
** RCL - RECALL CPU.
*
* ENTRY (RC) = 0, RECALL CPU.
* (A) = 0, IF NOT READ ACTIVE
*
* EXIT IF NO ERROR.
* TO *ERR*, IF TERMINATE FLAG SET.
* TO *DPP*, IF ERROR FLAG SET.
*
* CALLS FIN.
*
* USES RC, CM - CM+4.
RCL SUBR ENTRY/EXIT
STM RCLA SAVE READ STATUS
RCL0 LDD OA
CRD CM
LDD CM
NJN RCL0 IF OUTPUT REGISTER NOT CLEAR
LDD RC
NJN RCL1 IF NOT TO RECALL CPU
MONITOR DRCM
RCL1 AOD RC
SBD HN
NJN RCL2 IF NOT TIME TO RECALL CPU
STD RC
RCL2 PAUSE
LDD CM+1
ZJN RCL3 IF NO ERROR FLAG
LDC ** READ/WRITE FLAG
RCLA EQU *-1
ZJN RCL2.1 IF NOT READ
RJM FIN FLUSH INPUT
RCL2.1 DCN CH+40
RJM REL RELEASE CHANNEL
LJM DPP DROP PP
RCL3 FETA 4
CRD CM READ LIMIT WORD
LDD CM+3
SHN -6
NJN RCL4 IF TERMINATE STREAMING FLAG
LJM RCLX RETURN
RCL4 LDM RCLA
ZJN RCL5 IF NOT READ OPERATION
RJM FIN FLUSH INPUT
RCL5 DCN CH+40
ERROR RCTERF TERMINATE FLAG SET
REL SPACE 4,10
** REL - RELEASE CHANNEL.
*
* ENTRY NONE.
*
* EXIT CHANNEL RELEASED.
* TO *DPP* IF ERROR FLAG SET.
*
* CALLS NONE.
*
* USES CM - CM+4.
REL SUBR ENTRY/EXIT
REL0 LDD OA
CRD CM
LDD CM
NJN REL0 IF OUTPUT REGISTER NOT CLEAR
LDC 0
RELA EQU *-1
ZJN REL1 IF CHANNEL NOT RESERVED
CHTE *
LDN CH
DCHAN
* LDN 0
STM RELA FLAG CHANNEL NOT RESERVED
REL1 PAUSE
LDD CM+1
ZJN RELX IF NO ERROR FLAG
LJM DPP DROP PP
RES SPACE 4,10
** RES - RESERVE CHANNEL.
*
* ENTRY (CH) = CHANNEL(S).
*
* EXIT CHANNEL RESERVED.
*
* CALLS NONE.
*
* USES T1, CM - CM+4.
RES SUBR ENTRY/EXIT
CHTE *
RES0 LDN CH
STD CM+1
MONITOR CCHM
LDD CM+2
NJN RES1 IF CHANNEL RESERVED
PAUSE
LDD CM+1
ZJN RES0 IF NO ERROR
LJM DPP EXIT
RES1 AOM RELA FLAG CHANNEL RESERVED
UJN RESX RETURN
STS SPACE 4,10
** STS - RETURN INTERFACE STATUS.
*
* ENTRY (A) = STATUS FUNCTION.
*
* EXIT (A) = (ST) INTERFACE STATUS.
*
* CALLS FCN, DST.
*
* USES CM - CM+4, ST, EO.
STS SUBR ENTRY/EXIT
STM STSA SAVE STATUS FUNCTION
LDC RTCL
CRD CM READ CLOCK
LDD CM+1 SECONDS
ADC EOPL END OF OP. LIMIT
STD EO
STS0 LDC ** STATUS FUNCTION
STSA EQU *-1
RJM FCN ISSUE STATUS FUNCTION
ACN CH
LDN 77 WAIT EOP DELAY
STS1 FJM STS2,CH IF STATUS READY
SBN 1
PJN STS1 IF NOT TIMEOUT
DCN CH+40
PAUSE
LDD CM+1
ZJN STS1.1 IF NO ERROR
RJM REL RELEASE CHANNEL
LJM DPP DROP PP
STS1.1 LDC RTCL
CRD CM READ CLOCK
LDD EO
LMD CM+1
NJN STS0 IF NOT TIMEOUT
RJM DST GET DIAGNOSTIC STATUS
ERROR RCNEOP NO END OF OPERATION
STS2 LDN GSTL GENERAL STATUS LENGTH
IAM GSTS,CH
DCN CH+40
LDM GSTS
STD ST
SHN 21-13
PJN STS3 IF NOT ALERT
LDM STSA
LMN GSTF
NJN STS3 IF NOT GENERAL STATUS
LDC FSTF
RJM FCN FSC STATUS FUNCTION
ACN CH
LDN DSTL DETAIL STATUS (FSC) LENGTH
IAM FSTS,CH READ FSC STATUS
DCN CH+40
RJM DST GET DIAGNOSTIC STATUS
STS3 LDD ST
LJM STSX RETURN
GSTS BSS 2 GENERAL STATUS
STEC BSS 1 ERROR CODE
FSTS BSS 24 FSC STATUS
CHTE *
CHAN CON CH CHANNEL USED
DSTS BSS 1 DIAGNOSTIC STATUS
WUM SPACE 4,10
** WUM - WAIT UNIT MOUNTED
*
* ENTRY (UN) = UNIT NUMBER
*
* EXIT UNIT MOUNTED INTERRUPT SENSED
*
* CALLS STS, RES, REL.
*
* USES CM - CM+4.
WUM1 RJM REL RELEASE CHANNEL
WUM SUBR ENTRY/EXIT
LDC RTCL
CRD CM READ SECOND CLOCK
LDD CM+1
ADC EOPL END OF OP. LIMIT
STM WUMA
WUM2 RJM RES RESERVE CHANNEL
LDD UN UNIT NUMBER
ADC CDEF CHECK DEVICE END
RJM STS
SHN 21-13
PJN WUM1 IF NO ALERT
LDM STEC
LMN 2
NJN WUM1 IF NOT BUSY
WUM3 RJM REL RELEASE CHANNEL
LDC RTCL
CRD CM
LDD CM+1 SECONDS
LMC **
WUMA EQU *-1
NJN WUM2 IF NOT TIMEOUT
ERROR RCNEOP NO END OF OPERATION
BDL SPACE 4,20
** BDL - BUSY DELAY.
*
* ENTRY BUSY STATUS FROM M860.
*
* EXIT DELAY TO ALLOW M860 INTERRUPT.
*
* CALLS NONE
*
* USES T0.
BDL SUBR ENTRY/EXIT
LDC 10D*100D 100 MSEC. DELAY
STD T0
BDL1 DELAY
SOD T0
NJN BDL1 IF NOT TIME
UJN BDLX
CBS SPACE 4,10
** CBS - CHECK BUSY STATUS.
*
* ENTRY (PC) = PRU COUNT.
* (STEC) = STATUS ERROR CODE.
*
* EXIT (A) = 0, IF TO RETRY OPERATION.
*
* CALLS REL, RES.
*
* USES NONE.
CBS SUBR ENTRY/EXIT
LDD PC
NJN CBSX IF NOT HEADER
LDM STEC
LMN 2
NJN CBSX IF NOT BUSY ERROR
SOM CBSA
NJN CBS1 IF NOT RETRY LIMIT
LDN 1 FLAG NO RETRY
UJN CBSX RETURN
CBS1 RJM REL RELEASE CHANNEL
RJM BDL BUSY DELAY
RJM RES RESERVE CHANNEL
LDN 0 FLAG RETRY
UJN CBSX RETURN
CBSA CON BRTL RETRY COUNTER
TITLE GENERAL SUBROUTINES.
CFL SPACE 4,15
** CFL - CHECK FIELD LENGTH.
*
* ENTRY (A) = RELATIVE ADDRESS TO BE ACCESSED.
* (RA) = CURRENT REFERENCE ADDRESS.
* (FL) = CURRENT FIELD LENGTH.
*
* EXIT (A) = RELATIVE + REFERENCE ADDRESS.
*
* CALLS DFM.
*
* USES NONE
CFL3 SHN 15 REPOSITION TO VALUE/100
ADD FL RESTORE VALUE
ADD RA ADD RA
SHN 6 REPOSITION VALUE
CFL SUBR ENTRY/EXIT
SBN 2
MJN CFL1 IF ADDRESS TOO SMALL
ADN 2
SHN 21
MJN CFL2 IF VALUE ODD
SHN 15 POSITION TO VALUE/100B
SBD FL
SHN 5
MJN CFL3 IF VALUE IN RANGE
CFL1 LDC CFLA
RJM DFM OUTPUT MESSAGE
RJM REL RELEASE CHANNEL
MONITOR HNGM HANG PPU
LJM DPP1 DROP PP
CFL2 SHN 15 POSITION TO VALUE/100B
SBD FL
SHN 5
MJN CFL1 IF VALUE TO BIG (OR NEGATIVE)
UJN CFL3 SET RA
CFLA DATA C*1SS ABT.*
CFS SPACE 4,10
** CFS - CHECK FULL STRIPE.
*
* ENTRY BUFFER POINTERS INITIALIZED.
*
* EXIT FULL STRIPE + 1 PRU OR EOI IN BUFFER.
*
* CALLS COB, DV5, RCL.
*
* USES T3, CM - CM+4, PC, WC.
CFS1 LDC ** RESTORE ORIGINAL OUT POINTER
CFSA EQU *-1
STD OT+1
SHN -14
STD OT
LDN 0
STD PC RESET PRU COUNT
CFS SUBR ENTRY/EXIT
LDD OT+1 SAVE OUT POINTER
STM CFSA
LDM CFSA-1
SCN 77
ADD OT
STM CFSA-1
LDN 0
STD PC INITIALIZE PRU COUNT
STD RC INITIALIZE RECALL COUNT
CFS2 RJM COB CHECK OUTPUT BUFFER
NJN CFS3 IF DATA IN BUFFER
* LDN 0 NOT READ
RJM RCL RECALL CPU
UJN CFS2 CHECK AGAIN
CFS3 LDCA OT
CRD CM READ FIRST CONTROL WORD
LDD CM
SHN 21-12
MJN CFS4 IF EOI
AOD PC ADVANCE PRU COUNT
SBN PRUPST+1
MJN CFS5 IF NOT FULL STRIPE + 1 PRU
CFS4 LJM CFS1 RESTORE OUT AND RETURN
CFS5 LDD CM+4 PRU BYTE COUNT
RJM DV5 CM WORD COUNT
ADN 2 CONTROL WORDS
STD WC
LDD LM
SBD OT
SHN 14
ADD LM+1
SBD OT+1 WORD COUNT TO LIMIT
STD T3
SBD WC
MJN CFS6 IF WRAPAROUND
ZJN CFS6 IF WC = ROOM TO LIMIT
LDD WC
RAD OT+1 ADVANCE OUT
SHN -14
RAD OT
LJM CFS2 CHECK FOR NEXT PRU
CFS6 LDD FT SET OUT=FIRST+WC-REMAINDER TO LIMIT
SHN 14
ADD FT+1
ADD WC
SBD T3
STD OT+1
SHN -14
STD OT
LJM CFS2 CHECK FOR NEXT PRU
CIB SPACE 4
** CIB - CHECK INPUT BUFFER.
*
* ENTRY (FE - FE+1) = FET ADDRESS.
* (FT - FT+1) = FIRST ADDRESS OF CM BUFFER.
* (IN - IN+1) = NEXT INPUT ADDRESS.
* (OT - OT+1) = NEXT OUTPUT ADDRESS.
* (LM - LM+1) = LIMIT ADDRESS OF CM BUFFER.
*
* EXIT (A) = WORD COUNT OF BUFFER.
* RESETS (OT - OT+1).
*
* CALLS CFL.
*
* USES CM - CM+4.
CIB SUBR ENTRY/EXIT
FETA 3
CRD CM
LDD CM+3 SET OUT
LPN 77
STD OT
SHN 14
LMD CM+4
STD OT+1
RJM CFL CHECK ADDRESS
LDD OT LENGTH = OUT - IN
SBD IN
SHN 14
ADD OT+1
SBD IN+1
ZJN CIB1 IF IN = OUT
PJN CIB2 IF OUT .GT. IN
CIB1 SHN 6 LENGTH = (LIMIT - IN) + OUT - FIRST)
ADD LM
SBD FT
SHN 14
ADD LM+1
SBD FT+1
CIB2 SBN 1 LENGTH - 1
UJN CIBX RETURN
COB SPACE 4,10
** COB - CHECK OUTPUT BUFFER.
*
* ENTRY (FE - FE+1) = ADDRESS OF FET.
* (FT - FT+1) = FIRST ADDRESS OF CM BUFFER.
* (IN - IN+1) = NEXT INPUT ADDRESS.
* (OT - OT+1) = NEXT OUTPUT ADDRESS.
* (LM - LM+1) = LIMIT ADDRESS OF CM BUFFER.
*
* EXIT (A) = WORD COUNT OF BUFFER.
* RESETS (IN - IN+1).
*
* CALLS CFL.
*
* USES CM - CM+4.
COB SUBR ENTRY/EXIT
FETA 2 READ IN
CRD CM
LDD CM+3 SET IN
LPN 77
STD IN
SHN 14
LMD CM+4
STD IN+1
RJM CFL CHECK ADDRESS
LDD IN LENGTH = IN - OUT
SBD OT
SHN 14
ADD IN+1
SBD OT+1
PJN COBX RETURN IF IN .GE. OUT
SHN 6 LENGTH = (LIMIT - OUT) + (IN - FIRST)
ADD LM
SBD FT
SHN 14
ADD LM+1
SBD FT+1
UJN COBX RETURN
DV3 SPACE 4,10
** DV3 - DIVIDE BY 3.
*
* DV3 USES THE APPROXIMATION N/3 = (85*N + 22*N/64) / 256.
* ROUNDING UP IS DONE.
*
* ENTRY (A) = NUMBER.
*
* EXIT (A) = NUMBER / 3.
*
* CALLS NONE.
*
* USES T0, T2.
DV3 SUBR ENTRY/EXIT
ADN 2 ROUND UP
STD T2 SAVE N
SHN 2 N*4
ADD T2 N*5
SHN 1 N*10
ADD T2 N*11
SHN 1+14 N*22/64
STD T0
SHN 6 N*22
SBD T2 N*21
SHN 2 N*84
ADD T2 N*85
ADD T0 N*85 + N*22/64
SHN -10 (N*85 + N*22/64) / 256
LJM DV3X RETURN
GMT SPACE 4,10
** GMT - GET MESSAGE TYPE.
*
* ENTRY 64 BYTE MESSAGE STARTING AT BUFR.
* ENTRY (BUFR) = START OF 64 BYTE M860 MESSAGE.
*
* EXIT (A) = MESSAGE TYPE(BYTE 4 OF MESSAGE).
*
* CALLS NONE.
*
* USES NONE.
GMT SUBR ENTRY/EXIT
LDM BUFR+2 UPPER 4 BITS OF TYPE
LPN 0#F
SHN 14
LMM BUFR+3
SHN -8D POSITION MESSAGE TYPE
UJN GMTX RETURN
IBP SPACE 4,10
** IBP - INITIALIZE AND CHECK BUFFER PARAMETERS.
*
* ENTRY (FE - FE+1) = FET ADDRESS.
*
* EXIT FT, IN, OT, AND LM INITIALIZED.
*
* CALLS CFL.
*
* USES T1 - T5, CM - CM+4.
IBP SUBR ENTRY/EXIT
FETA 1
CRD CM READ FIRST
ADN 1
CRD T1 READ IN
ADN 2
CRD LM-3 READ LIMIT
SBN 1
CRD OT-3 READ OUT
LDD CM+3
LPN 77
STD FT
LDD CM+4
STD FT+1
LDD LM
LPN 77
STD LM
SHN 14
ADD LM+1
SBN 1 ALLOW LIMIT = FL
RJM CFL CHECK ADDRESS
LDD OT CHECK OUT
SBD LM
SHN 14
ADD OT+1
SBD LM+1
PJN IBP1 IF OUT GE LIMIT
LDD OT
SBD FT
SHN 14
ADD OT+1
SBD FT+1
MJN IBP1 IF OUT LT FIRST
LDD T1+4
STD IN+1
LDD T1+3
LPN 77
STD IN
SBD LM CHECK IN
SHN 14
ADD IN+1
SBD LM+1
PJN IBP1 IF IN GE LIMIT
LDD IN
SBD FT
SHN 14
ADD IN+1
SBD FT+1
PJN IBP2 IF IN GE FIRST
IBP1 ERROR RCBARG BUFFER ARGUMENT ERROR
IBP2 LJM IBPX RETURN
RMB SPACE 4,10
** RMB - READ MESSAGE BUFFER.
*
* ENTRY (WC) = CM WORD COUNT.
*
* EXIT OUT POINTER UPDATED IN (OT - OT+1).
*
* CALLS NONE.
*
* USES T3, OT - OT+1, WC.
RMB SUBR ENTRY/EXIT
LDC BUFR
STM RMBA PP BUFFER ADDRESS
LDD LM
SBD OT
SHN 14
ADD LM+1
SBD OT+1
STD T3 WORD COUNT TO LIMIT
SBD WC
MJN RMB4 IF WRAPAROUND
RMB2 LDCA OT
CRM **,WC
RMBA EQU *-1
LDD WC
RAD OT+1
SHN -14
RAD OT UPDATE OUT
LMD LM
NJN RMB3 IF OUT NE LIMIT
LDD OT+1
LMD LM+1
NJN RMB3 IF OUT NE LIMIT
LDD FT
STD OT SET OUT = FIRST
LDD FT+1
STD OT+1
RMB3 LJM RMBX RETURN
RMB4 LDCA OT
CRM BUFR,T3
LDD FT SET OUT = FIRST
STD OT
LDD FT+1
STD OT+1
LDD T3
SHN 2
ADD T3 PP WORD COUNT
RAM RMBA UPDATE PP BUFFER ADDRESS
LDD WC
SBD T3
STD WC SET NEW WORD COUNT
LJM RMB2 READ REMAINING DATA
SCB SPACE 4,10
** SCB - SET COMPLETE BIT.
*
* ENTRY (A) = ENDING STATUS.
* (EC) = ERROR CODE.
*
* EXIT FET UPDATED.
* (EC) = 0.
*
* CALLS REL.
*
* USES CM - CM+4, CN.
SCB SUBR ENTRY/EXIT
STD CN SAVE STATUS
RJM REL RELEASE CHANNEL
FETA
CRD CM READ FET STATUS WORD
LDD CM+3 CLEAR ANY EXISTING STATUS
SCN 77
STD CM+3
LDD CM+4
LPC 776
STD CM+4
LDD EC
SHN 12 POSITION ERROR CODE
LMD CN SET STATUS
LMD CM+4 RESTORE FUNCTION CODE
LMN 1 INSURE COMPLETE STATUS
STD CM+4
SHN -14
RAD CM+3 SET ERROR CODE
FETA
CWD CM UPDATE FET
LDN 0
STD EC CLEAR ERROR CODE
LJM SCBX RETURN
UCO SPACE 4,10
** UCO - UPDATE CENTRAL OUT.
*
* ENTRY (FE) = FET ADDRESS.
* (OT - OT+1) = OUT POINTER.
*
* EXIT OUT UPDATED IN FET.
*
* CALLS NONE.
*
* USES CM - CM+4.
UCO SUBR ENTRY/EXIT
LDN ZERL
CRD CM
LDD OT
STD CM+3
LDD OT+1
STD CM+4
FETA 3
CWD CM UPDATE OUT
UJN UCOX RETURN
WBB SPACE 4,10
** WBB - WRITE BINARY BUFFER.
*
* ENTRY (WC) = CM WORD COUNT.
*
* EXIT IN POINTER UPDATER IN FET.
*
* CALLS NONE.
*
* USES T3, CM - CM+4, WC.
WBB1 LDN ZERL UPDATE IN POINTER IN FET
CRD CM
LDD IN
STD CM+3
LDD IN+1
STD CM+4
FETA 2
CWD CM
WBB SUBR ENTRY/EXIT
LDC PBUF
STM WBBA PPU BUFFER ADDRESS
LDD LM
SBD IN
SHN 14
ADD LM+1
SBD IN+1
STD T3 WORD COUNT TO LIMIT
SBD WC
MJN WBB4 IF WRAPAROUND
WBB2 LDCA IN
CWM **,WC WRITE DATA TO BUFFER
WBBA EQU *-1
LDD WC
RAD IN+1
SHN -14
RAD IN
LMD LM
NJN WBB3 IF IN NE LIMIT
LDD IN+1
LMD LM+1
NJN WBB3 IF IN NE LIMIT
LDD FT SET IN = FIRST
STD IN
LDD FT+1
STD IN+1
WBB3 LJM WBB1 UPDATE CENTRAL IN
WBB4 LDCA IN
CWM PBUF,T3
LDD FT SET IN = FIRST
STD IN
LDD FT+1
STD IN+1
LDD T3 UPDATE PP BUFFER ADDRESS
SHN 2
ADD T3
RAM WBBA
LDD WC
SBD T3
STD WC SET REMAINING WORD COUNT
LJM WBB2 READ REMAINING DATA
WMB SPACE 4,10
** WMB - WRITE MESSAGE BUFFER.
*
* ENTRY (WC) = CM WORD COUNT.
*
* EXIT IN POINTER UPDATED IN PP.
*
* CALLS NONE.
*
* USES T3, IN - IN+1, WC.
WMB SUBR ENTRY/EXIT
LDC BUFR
STM WMBA PPU BUFFER ADDRESS
LDD LM
SBD IN
SHN 14
ADD LM+1
SBD IN+1
STD T3 WORD COUNT TO LIMIT
SBD WC
MJN WMB4 IF WRAPAROUND
WMB2 LDCA IN
CWM **,WC WRITE DATA TO BUFFER
WMBA EQU *-1
LDD WC
RAD IN+1
SHN -14
RAD IN
LMD LM
NJN WMB3 IF IN NE LIMIT
LDD IN+1
LMD LM+1
NJN WMB3 IF IN NE LIMIT
LDD FT SET IN = FIRST
STD IN
LDD FT+1
STD IN+1
WMB3 LJM WMBX UPDATE CENTRAL IN
WMB4 LDCA IN
CWM BUFR,T3
LDD FT SET IN = FIRST
STD IN
LDD FT+1
STD IN+1
LDD T3 UPDATE PP BUFFER ADDRESS
SHN 2
ADD T3
RAM WMBA
LDD WC
SBD T3
STD WC SET REMAINING WORD COUNT
LJM WMB2 READ REMAINING DATA
SPACE 4,10
* COMMON DECKS.
RND$ EQU 1 ROUND UP
*CALL COMPDV5
TITLE PRESET.
USE PRESET
OVLA EQU *+5 OVERLAY LOAD ADDRESS
BUFR EQU * MESSAGE BUFFER
PBUF EQU BUFR PRU BUFFER
HBUF EQU PBUF+PRUL*5 STRIPE HEADER BUFFER
TBUF EQU HBUF+HDRL*5 STRIPE TRAILER BUFFER
LBUF EQU TBUF+TLRL*5 LENGTH OF ALL BUFFERS
ERRNG 7776-LBUF BUFFER OVERFLOW
ERRNG 7777-BUFR-PRUL MESSAGE BUFFER OVERFLOW
PRS SPACE 4,10
* PRS - PRESET.
PRS SUBR ENTRY/EXIT
LDN 0
STD EC CLEAR ERROR CODE
STD MW CLEAR MESSAGE WAITING FLAGS
LDC IPLM
STD IC SET IDLE PASS LIMIT
LDD IR+3
LPN 77
SHN 14
ADD IR+4
RJM CFL
CRD CN READ PARAMETER WORD
LDD CN+3
STD ES EST ORDINAL FOR CONTROL UNIT
SFA EST,ES GET EST ENTRY ADDRESS
CRD CM READ EST ENTRY
LDD CM+4
LPC 7000
STD EQ EQUIPMENT NUMBER
LDD IR+3
SHN -6 FUNCTION CODE
STD T1
ZJN PRS0 IF NO FUNCTION
SBN TREQL
MJN PRS2 IF VALID FUNCTION
PRS0 LDC =C*1SS - INVALID FUNCTION.*
RJM DFM
PRS1 LJM DPP DROP
PRS2 LDM TREQ,T1
STD T1
LJM 0,T1 INITIALIZE FOR FUNCTION
* SCH - SET CHANNELS IN EST
SCH LDD ES
STD CM+1 EQUIPMENT NUMBER
LDD IR+2
STD CM+3 CHANNELS
LDN 2 SET CHANNELS SUBFUNCTION
STD CM+2
MONITOR SEQM SET CHANNELS
UJN PRS1 DROP PP
* ETD - ENABLE TDAM REQUEST BUFFER
ETD NFA ICAN
CRD CM
LDD CM
LPC 3777
ADC 4000 ENABLE PP *TDAM* WRITE
STD CM
NFA ICAN UPDATE INTER-CONTROL POINT CONTROLS
CWD CM
UJN PRS1 DROP
* MSG - INITIALIZE FOR MESSAGE I/O
MSG LDD CN+1
SCN 77
SHN 6
LMD CN
SHN 6
STM SSDA INITIALIZE MESSAGE OUTPUT ADDRESS
SHN -14
RAM SSDA-1
LPN 77
SHN 14
LMM SSDA
ADN 4 LIMIT WORD
RJM CFL CHECK ADDRESS
CRD T7 READ LIMIT WORD
SBN 4+1
CRD CM READ POINTER TO MESSAGE OUTPUT FET
LDC TCHS CHANNEL INSTRUCTION LIST
STD T1
PRS3 LDI T1
ZJN PRS4 IF END OF LIST
STD T2
LDI T2
SCN 37
ADD T7 SET CHANNEL
STI T2
AOD T1 ADVANCE LIST
UJN PRS3 SET NEXT ENTRY
PRS4 LDD CM+3
LPN 77
RAM SSDB-1 INITIALIZE MESSAGE INPUT FET ADDRESS
LPN 77
SHN 14
LMD CM+4
STM SSDB
RJM CFL CHECK ADDRESS
LDD CN+1 SET DRIVER RECALL ADDRESS
LPN 77
STD DR
SHN 14
ADD CN+2
STD DR+1
RJM CFL CHECK FIELDLENGTH
LDD CP
ADN SNSW
CRD CM READ SENSE SWITCH WORD
LDD CM+4
SHN 21-6
MJN PRS5 IF TRACE MODE REQUESTED
LJM PRSX RETURN
PRS5 AOM TRCA
AOM TRCB
AOM TRCC
AOM TRCD
AOM TRCE
AOM TRCF
AOM TRCG
LJM PRSX RETURN
TCHS SPACE 4,10
** TCHS - CHANNEL TABLE.
* TABLE CONTAINS THE ADDRESSES OF ALL INSTRUCTIONS WHICH
* REFERENCE THE EQUIPMENT CHANNEL.
TCHS CHTB
SPACE 4,10
* TREQ - TABLE OF LEGAL FUNCTION PRESET ROUTINES.
TREQ BSS 0
LOC 0
CON 0 NULL FUNCTION
IRTDAM CON ETD ENABLE TDAM BUFFER
IRPMSG CON MSG MESSAGE I/O
IRMDAT CON MSG MESSAGE AND DATA I/O
IRCHAN CON SCH SET CHANNELS IN EST
LOC *O
TREQL EQU *-TREQ
TITLE 2SS - ERROR MESSAGE OVERLAY.
IDENT 2SS,EMSX
*COMMENT 1SS - ERROR MESSAGE OVERLAY.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
*** 2SS - ERROR MESSAGE OVERLAY.
*
* 2SS IS CALLED BY 1SS TO ISSUE ERROR MESSAGES
* TO THE MSAS SUBSYSTEM LOCAL DAYFILE WHEN AN
* ERROR IS DETECTED.
*
* ENTRY
*
* (ERR) = PP ADDRESS WHERE ERROR DETECTED.
* (GSTS) = START OF HAEDWARE STATUS BUFFER(25 WORDS).
*
* EXIT
* MESSAGES ISSUED.
*
*
* MESSAGE FOR ALL ERRORS.
*
* ERR = XX, ADR YYYY.
*
* XX ERROR CODE (SEE COMBCDD).
* YYYY PP ADDRESS WHERE ERROR DETECTED.
*
* HARDWARE ERROR MESSAGES.
*
* SS,CXX,GSSSSSSSSSSSS.
* SS,CXX,FYYYYYYYYYYYYYYYYYYYY.
* SS,CXX,DZZZZ. MESSAGE.
*
* WHERE.
* XX = CHANNEL.
* SS...S = GENERAL STATUS.
* YY...Y = FSC STATUS.
* ZZZZ = DIAGNOSTIC STATUS.
* MESSAGE = ONE OF THE FOLLOWING.
* STATUS ERROR. = ALERT STATUS AND NONE OF THE FOLLOWING.
* INPUT HANG. = CHANNEL HUNG ON INPUT OPERATION.
* OUTPUT HANG. = CHANNEL HUNG ON OUTPUT OPERATION.
* FUNCTION TIMEOUT. = NO RESPONSE TO FUNCTION IN 2 SECONDS.
* NO EOP. = NO ENDING STATUS FROM M860 IN 6 SECONDS.
* CHAN. MALF. = NO RESPONSE TO DIAGNOSTIC STATUS FUNCTION.
* CHAN. PE. = FSC DETECTED CHANNEL A CHANNEL PARITY ERROR.
* FSC MEM. PE. = FSC HAD A MEMORY PARITY ERROR.
* FSC NOT RUNNING. = FSC PROCESSOR WAS NOT RUNNING.
* FSC ABNORMAL. = FSC ABNORMAL STATUS.
EJECT
EMS SPACE 0
** EMS - ERROR MESSAGE PROCESSOR
*
* ENTRY (EC) = ERROR CODE.
* (GSTS) = STATUS BUFFER.
*
* EXIT MESSAGES ISSUED.
*
* USES T1, T2, CN, IN, OT, LM.
*
* CALLS C2D.
ORG OVLA
EMS SUBR ENTRY/EXIT
LDD CP
ADN SNSW
CRD CM READ SENSE SWITCH WORD
LDD CM+4
SHN 21-6
MJN EMS00 IF TRACE MODE
LDD EC
SBN RCHWET
MJN EMSX IF NOT HARDWARE ERROR
LJM EMS0 MUST BE HARDWARE ERROR
EMS00 LDM ERRT-1,EC
STD T1 GET ERROR TYPE MESSAGE
LDI T1
STM EMSE
LDM 1,T1
STM EMSE+1
LDM 2,T1
STM EMSE+2
LDM ERR GET ADDRESS WHERE DETECTED
SBN 3
SHN -6
RJM C2D UPPER DIGITS
STM EMSE+6
LDM ERR
SBN 3
RJM C2D LOWRE DIGITS
STM EMSE+7
LDC EMSE+CPON
RJM DFM ISSUE MESSAGE
LDD EC
SBN RCHWET
PJN EMS0 IF HARDWARE ERROR
LJM EMSX RETURN
EMS0 LDM CHAN GET CHANNEL USED
RJM C2D CONVERT TO DISPLAY
STM EMSA+2 STORE IN MESSAGES
STM EMSB+2
STM EMSC+2
LDC GSTS GENERAL STATUS BUFFER
STD IN
LDC EMSA+4
STD OT
EMS1 LDI IN
SHN -6
RJM C2D CONVERT UPPER 2 DIGITS
STI OT
AOD OT
LDI IN
RJM C2D CONVERT LOWER 2 DIGITS
STI OT
AOD OT
AOD IN
LMC FSTS
NJN EMS1 IF NOT AT FSC STATUS
LDC EMSA+CPON
RJM DFM ISSUE MESSAGE TO CONTROL POINT DAYFILE
LDN 4 SET UP FOR 4 MESSAGES OF 5 BUTES EACH
STD CN
EMS2 LDD IN
ADN 5
STD LM
LDC EMSB+4
STD OT
EMS3 LDI IN
SHN -6
RJM C2D CONVERT LOWER 2 DIGITS
STI OT
AOD OT
LDI IN
RJM C2D CONVERT LOWER 2 DIGITS
STI OT
AOD OT
AOD IN
LMD LM
NJN EMS3 IF NOT 5 BYTES MOVED
LDC EMSB+CPON
RJM DFM ISSUE MESSAGE TO CONTROL POINT DAYFILE
SOD CN
NJN EMS2 IF NOT 4 MESSAGES
LDM DSTS GET DIAGNOSTIC STATUS
SHN -6
RJM C2D CONVERT UPPER 2 DIGITS
STM EMSC+4
LDM DSTS
RJM C2D CONVERT LOWER 2 DIGITS
STM EMSC+5
LDC EMSD MOVE MESSAGE
STD OT
LDD EC ERROR CODE TO SSEXEC
SBN RCHWET REMOVE HARDWARE ERROR BIAS
STD T1
LDM EMST,T1 ADDRESS OF SPECIFIC MESSAGE
STD IN
EMS4 LDI IN
STI OT MOVE MESSAGE
ZJN EMS5 IF END OF MESSAGE
AOD IN
AOD OT
UJN EMS4 FINISH MOVE
EMS5 LDC EMSC+CPON
RJM DFM ISSUE MESSAGE TO CONTROL POINT DAYFILE
LJM EMSX RETURN
EMSA DIS ,*SS,CXX,GSSSSSSSSSSSS.*
EMSB DIS ,*SS,CXX,FXXXXXXXXXXXXXXXXXXXX.*
EMSC DATA 14HSS,CXX,DZZZZ,
EMSD BSS 30 SPECIFIC ERROR MESSAGE
EMSE DIS ,*RCXXXX, ADR YYYY.*
SPACE 4,10
* EMST - TABLE OF SPECIFIC ERROR MESSAGES.
EMST BSS 0
CON =C*STATUS ERROR.*
CON =C*INPUT HANG.*
CON =C*OUTPUT HANG.*
CON =C*FUNCTION TIMEOUT.*
CON =C*NO EOP.*
CON =C*CHAN. MALF.*
CON =C*CHAN. PE.*
CON =C*CCC MEM. PE.*
CON =C*CCC NOT RUNNING.*
CON =C*CCC ABNORMAL.*
CON =C*DIAGNOSTIC FAILURE.*
CON 0 CPU ONLY ERROR CODE
CON =C*OPERATOR IMPL REQUIRED.*
CON =C*CHANNEL INTERFACE OFF LINE.*
ERRT SPACE 4,10
** ERRT - TABLE OF ERROR RETURN CODES.
ERRT BSS 0
CON =6HRCILLF ILLEGAL FUNCTION
CON =6HRCDLER DATA LENGTH ERROR
CON =6HRCCWER CONTROL WORD ERROR
CON =6HRCBARG BUFFER ARGUMENT ERROR
CON =6HRCHDER HEADER/TRAILER ERROR
CON =6HRCENDV END OF VOLUME
CON =6HRCILLU ILLEGAL UNIT NUMBER
CON =6HRCBFTO BUFFER TIMEOUT ERROR
CON =6HRCTBRT TAPE BOTTOM RIGHT
CON =6HRCTERF TERMINATE FLAG DETECTED
CON =6HNO ERR
CON =6HNO ERR
CON =6HNO ERR
CON =6HNO ERR
CON =6HNO ERR
CON =6HRCSTER STATUS ERROR
CON =6HRCCHIN CHANNEL HUNG ON INPUT
CON =6HRCCHOT CHANNEL HUNG ON OUTPUT
CON =6HRCFCTO FUNCTION TIMEOUT
CON =6HRCNEOP NO END OF OPERATION
CON =6HRCCHMF CHANNEL MALFUNCTION
CON =6HRCCHPE CHANNEL PARITY ERROR
CON =6HRCFSPE FSC MEMORY PARITY ERR
CON =6HRCFSNR FSC NOT RUNNING
CON =6HRCFSAB FSC ABNORMAL
CON =6HRCFSDF FSC DIAGNOSTIC FAILURE
CON =6HRCXSUM XSUM ERROR (CM DRIVER)
CON =6HRCIMPL OPERATOR IMPL REQUIRED
CON =6HRCCIFO M860 CHANNEL OFFLINE
SPACE 4,10
* COMMON DECKS.
*CALL COMPC2D
SPACE 4,10
END