! FILE 'ERTE_INIT90' !THE INITIALISE TASK "INIT" - FOR data general nova. ! W.S.C. 27TH JULY 1976 ! J.C.A. 31ST JAN 1978 ! G.J.B. 19TH SEPT 1978 ! J.C.A. 27TH SEPT 1978 ! B.G. 25.JAN.80 ! ??? LAST UPDATE 21:12:78 - FILE INIT70 ! THIS VERSION IS FOR USE WITH ICL VME/B !THE TASK RUNS IN SYSTEM SLOT 29 !SET STACK TO 140 STREAMS=0 PRIORITY=1 %CONTROL K'101011' %BEGIN %OWNSTRING(19) ERTE1='A.R.T.E. mk. 7.1 ' %OWNSTRING(31) TARGETNOW="* to Data General Nova" %OWNSTRING(16) VERSION=' BG 10.Feb.82' %CONSTINTEGERARRAY DZAD(1:4) = K'760100', K'760110', K'760120', K'760130' %CONSTINTEGERARRAY DZ R INT(1:4) = -31, -33, -35, -37 %CONSTINTEGERARRAY DX T INT(1:4) = -32, -34, -36, -38 %SYSTEMROUTINESPEC ALARM(%INTEGER TICKS) %PERMROUTINESPEC SVC(%INTEGER EP,P1,P2) %SYSTEMROUTINESPEC LINKIN(%INTEGER SER) %RECORDFORMAT PF(%BYTEINTEGER SERVICE,REPLY,%INTEGER A1,%C %BYTEINTEGERARRAYNAME A2,%INTEGER A3) %OWNRECORD (PF) P %RECORDFORMAT P2F(%BYTEINTEGER SER, REPLY, LINE, %C LINE TYPE, %INTEGER AD, %BYTEINTEGER RX INT, TXINT) %OWNRECORD (P2F) P2 %OWNRECORD (P2F) %NAME P3 %OWNINTEGER TSKCT,TSK SER,TASKS,I,TASK ID %CONSTBYTEINTEGERNAME ID=K'160030' %CONSTBYTEINTEGERNAME FSYS = K'160055' %CONSTBYTEINTEGERNAME TT NO = K'160061' %CONSTBYTEINTEGERARRAY TIME(0:5)='T','I','M','E','O',NL %OWNBYTEINTEGERARRAY TASK(0:11)=%C 'T','S','K','1',' ','T','K','P','A','R','1',NL %OWNBYTEINTEGERARRAY DGCP(0:10)=%C 'D','G','C','P','Y', ' ','/','.','L','P',NL %CONSTBYTEINTEGERARRAY LOGT(0:4)= %C 'L','O','G','Y',NL %CONSTBYTEINTEGERARRAY PROT(0:11)=%C 'D', 'G', 'N', '1', 'Y', ' ', '/', '.', 'L', 'P', NL %CONSTBYTEINTEGERARRAY DZ11(0:5) = %C 'D', 'Z', '1', '1', 'Y', NL %CONSTBYTEINTEGERARRAY CPUT(0:5)=%C 'C','P','U','T','Y',NL %ROUTINESPEC CALL LOADER(%BYTEINTEGERARRAYNAME S) %CONSTINTEGER LOAD SER=5; !LOAD SERVICE NUMBER %CONSTINTEGER TIME SER=28; !STIMULATOR TIME SERVICE NUMBER %CONSTINTEGER DGCP SER=27; !DGCP SERVICE NUMBER !%CONSTINTEGER LINKIN=13; !LINKIN SVC NUMBER %CONSTINTEGER SYSLOT=29; !SYSTEM SLOT NUMBER FOR INIT %CONSTBYTEINTEGERNAME INT=K'160060' %CONSTINTEGER PAUSE TICKS=100; !2 SECONDS !NETWORK INFO TO BE SENT TO DGCP !CONTAINS: ! ERTE ADDRESS, ! TARGET ADDRESS, ! TARGET NAME LENGTH, ! TARGET NAME MESSAGE; !**************************************************************** !**************************************************************** %ROUTINE FATAL PRINTSTRING('Fatal Error number') WRITE(P_A1,0);SPACES(5) PRINTSTRING('Task number') WRITE(P_REPLY,0) NEWLINE %END !***************************************************************** !***************************************************************** NEWLINE PRINTSTRING(ERTE1) PRINTSTRING(TARGETNOW) PRINTSTRING(VERSION) NEWLINES(2) LINKIN(SYSLOT) P3 == P SVC(18,1,0); !SET PRIORITY TO 1 ! PROMPT('DGCP unit : ') ! READSYMBOL(I) ! DGCP(6)=I ! SKIPSYMBOL ! !LOAD TIME TASK ! CALL LOADER(TIME) PRINTSTRING('TIME loaded') NEWLINE CALL LOADER(LOGT) PRINTSTRING("LOG loaded ") CALL LOADER(DGCP) PRINTSTRING("DGCP loaded ") CALL LOADER(DZ11) PRINTSTRING("DZ11 loaded ") %CYCLE I = 1, 1, 1 P2_SER = TASK ID; P2_REPLY = ID P2_LINE = I P2_AD = DZAD(I)&K'077777' P2_RX INT = DXRINT(I); P2_TX INT = DXTINT(I) PON(P2) %REPEAT P2_LINE = 255; ! STOP IT WAITING WITH THIS PON(P2); ! SER/REPLY AS ABOVE CALL LOADER(PROT) PRINTSTRING("DGN1 loaded ") NEWLINE !CALL LOADER(CPUT) !PRINTSTRING('CPUT loaded') !NEWLINE ! READ IN NUMBER OF SCRIPT TASKS PRINT STRING('Number of tasks : '); PROMPT('') READ(TASKS) ! !LOAD ALL SCRIPT TASKS ! %IF TASKS=0 %THEN ->WAIT TSK SER=26 %CYCLE I=1,1,TASKS TASK(3) = I+'0'; ! CHANGE NAME OF SCRIPT TASK TASK(10) = I+'0'; ! CHANGE NAME OF PARAMETER FILE CALL LOADER(TASK) PRINTSTRING('Script task') WRITE(I,1) PRINTSTRING(' started') ! !WAIT FOR TASK TO RESPOND ! WAIT FOR IT: P_SERVICE=0 POFF(P) %IF P_A3#-111 %START NEWLINE PRINTSTRING('Unexpected message') TASKS=P_REPLY WRITE(TASKS,5) WRITE(P_A1,5) WRITE(P3_AD, 5) WRITE(P_A3,5) NEWLINE -> WAIT FOR IT %FINISH PRINTSTRING(' with') WRITE(P_A1,0) PRINTSTRING(' scripts') NEWLINE %IF P_A1<0 %THEN FATAL %REPEAT TSKCT=0 ! PAUSE FOR A WHILE PAUSE: P_SERVICE=TIMESER P_REPLY=ID P_A1=PAUSE TICKS P_A3=0 PON(P) ! WAIT FOR MESSAGES WAIT:P_SERVICE=0 POFF(P) %IF P_REPLY=TIMESER %THEN %START %IF INT='A' %THEN TSKCT=TASKS*2 %AND ->HALT ->PAUSE %FINISH %IF P_A1<0 %START FATAL %FINISH %ELSE %START PRINTSTRING('Task no.') WRITE(P_REPLY,0) PRINTSTRING(' terminated') NEWLINE %FINISH TSKCT=TSKCT+1 HALT: INT='G' %IF TSKCT=TASKS*2 %START !N.B. 2 MESSAGES FROM stopped TASK. !STOP TIME,DGCP AND SELF P_SERVICE=DGCP SER P_REPLY=SYSLOT PON(P) P_SERVICE=0; POFF(P); !WAIT FOR DGCP AND NSIZ TO STOP P_SERVICE=0; POFF(P) PRINTSTRING('DGCP stopped');NEWLINE P_SERVICE=TIME SER P_REPLY=SYSLOT P_A3=40 PON(P) P_SERVICE=0 POFF(P) PRINTSTRING('TIME stopped');NEWLINE PRINTSTRING('INIT stopped');NEWLINE %STOP %FINISH ->WAIT %ROUTINE CALL LOADER(%BYTEINTEGERARRAYNAME S) P_SERVICE=LOAD SER;P_REPLY=ID P_A1=1!FSYS<<8;P_A3=4!TT NO<<8;P_A2==S PONOFF(P) %IF P_A1 = 0 %START PRINTSTRING("file does not exist ") %STOP %FINISH TASK ID = P_A1; ! PICK UP THE TASKS ID %END %ENDOFPROGRAM P_REPLY=SYSLOT