! FILE 'RLES' ! RLS/RL A.L. IBBETSON UNIKENT 1979 ! for ERCC NODE use - B. Gilmore 25.Feb.81 ! DOWN-LINE LOADING VIA RING ! ! Reads from stream 1. File in abs loader format ! compatible with card reader - i.e. fixed length 80 ! byte records. Data is scanned for load block to ! flag termination of file. ! ! I RLS,.TT/RLESY. STREAMS 1. STACK 400 ! Copy RLESY into RLESY(0) ! %CONTROL 1 %include "deimosperm" %BEGIN %RECORDFORMAT MEF(%RECORD (MEF) %NAME LINK,%BYTEINTEGER LEN,TYPE,%C %INTEGER ADR,%INTEGERARRAY DATA(0:124)) %RECORDFORMAT PE(%BYTEINTEGER SER,REPLY,FN,PORT,%RECORD (MEF) %NAME MES,%C %BYTEINTEGER L,S) %RECORD (PE) P %RECORDFORMAT FF(%BYTEINTEGERARRAY FN(0:5)) %RECORDFORMAT FNAMEF(%INTEGER A, B, C, D, %BYTEINTEGER UNIT, FSYS, %C %RECORD (FF) FNAME) ! FILE MANIPULATION FORMATS %RECORD %FORMAT STRPF(%RECORD (FNAMEF) %NAME STRD) %CONSTRECORD (STRPF) %NAME STRM1 == K'160034' %RECORDFORMAT P3F(%BYTEINTEGER SER, REPLY, %RECORD (FF) FNAME) %RECORD (P3F) %NAME P3 %RECORDFORMAT FRIGF(%BYTEINTEGERARRAY A(0:7)) %RECORD(FRIGF)%NAME FRIG %CONSTBYTEINTEGER RING SER = 13, BUF MAN = 17; ! STD SERVICES IN FEP %CONSTINTEGER MAGIC PATTERN = X'9800' ;! SINGLE PACKET (LOW BYTE=DATA) %INTEGERARRAYNAME BUFFER %INTEGER ADR,I,EOF,TIME,C1,C2,LEN ! ! ! %ROUTINE MESSAGE(%RECORD (PE) %NAME P) %IF INT#0 %THEN PRINTSTRING("PON") %AND WRITE(P_SER,3) PON(P) REPOFF: P_SER = 0; POFF(P) %IF INT # 0 %START PRINTSTRING(" POFF") WRITE(P_REPLY,3) NEWLINE %FINISH %IF P_SER=own id %AND P_REPLY=0 %START ;! CLOCK TIME = TIME - 1 %IF TIME=0 %START PRINTSTRING("?DOWN - Timed out. Load Failed"); NEWLINE %STOP %FINISH ALARM(50) ;! 1 SEC -> REPOFF %FINISH %END ! ! P3 == P ADR = 0 P_SER = 0; POFF(P); ! WAIT FOR INSTRUCTIONS ADR = P_FN; STRM1_STRD_FSYS = P_PORT; ! PICK UP STN ADDR&FILE SYSTEM P_SER = 0; POFF(P); ! WAIT FOR FILE NAME STRM1_STRD_FNAME = P3_FNAME; ! COPY FILE NAME ! SELECTINPUT(1) i = MAP VIRT(BUFMAN,4,3) i = MAP VIRT(BUFMAN,5,4) i = MAP VIRT(BUFMAN,6,5) EOF = 0 ALARM(50) ;! ONE SECOND ! %WHILE EOF = 0 %CYCLE TIME = 5 ;! SECS TO COMPLETE A TXFR P_SER=BUFMAN; P_REPLY=own id P_FN=0; P_L=0 ;! REQUEST 256 BYTE BUFFER MESSAGE(P) LEN = 0; BUFFER == P_MES_DATA ! ! Continue until load block received. ! %CYCLE I=0,1,39 READSYMBOL(C1); READSYMBOL(C2) BUFFER(LEN) = C1 ! (C2<<8) LEN = LEN+1 %REPEAT %IF BUFFER(0)#1 %START P_SER=BUFMAN; P_REPLY=own id P_FN=1; ! RETURN BUFFER. PON(P) PRINTSTRING("?DOWN - File corrupt? "); %EXIT %FINISH %IF BUFFER(1)=6 %THEN EOF=1 ! P_SER=RINGSER; P_REPLY=own id P_FN=K'301'; P_MES_ADR=ADR; P_MES_LEN=40 ! ! Note that the bootstrap receives 42 word + checksum. ! MESSAGE(P); ! REQUEST SINGLE-SHOT RING TRANSFER ! %IF P_FN=0 %THENCONTINUE ! %IF P_REPLY = RING SER %AND P_FN = 1 %START PRINTSTRING("?DOWN - Ring Transfer Failed ") %EXIT; ! THIS WAITS FOR TIMER TICK %FINISH PRINTSTRING("?DOWN - Unexplained reply: ") FRIG == P %CYCLE I=0,1,7 WRITE(FRIG_A(I),6) %REPEAT NEWLINE %EXIT %REPEAT %IF EOF#0 %START PRINTSTRING("!DOWN - Load done ") %FINISH P_SER=0; POFF(P) ;! ALLOW ALARM TO COME THRO %ENDOFPROGRAM