TITLE ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE SUBTTL THIS IS ONLY CODE PLACED AT THE END OF IOINIT ;WHICH SHOULD BE THE LAST LOADED PROGRAM BEFORE SYSMAK AND DDT ;THUS IF IT OVERFLOWS INTO THE USER AREA NO HARM IS DONE ;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHA XP SYSFIN,.-1 ;LAST LOC. IN SYSTEM NXM=10000 ;NON EX-MEM INTERNAL PATCH PATCH: BLOCK 100 ;PATCH SPACE ;C(SYSSIZE) SHOULD BE UPDATED AS PATCHES ARE MADE T=TAC ;SOME ACS C=TAC1 INT=DAT ;INTERRUPT SERVICE ENTRY POINT(USUALLY A CONSO INSTR.) CHL=DEVDAT ;THE PLACE WHERE PC IS STORED FOR THAT CHANNEL ;LINK TO SERVICE ROUTINES INTERNAL LINKSR EXTERNAL NDEVM1 ;=NDOV-1 (DEFINED IN IOINI1) EXTERNAL DEVINT,JOBSYM LINKSR: 0 ;CALLED WITH JSR FROM SYSINI ;CHAIN INTERUPT SERVICE ROUTINES TOGETH HRLZI INT, 254000 ;FORM JRST INSTR. MOVEI C, NDEVM1 ;NO. OV DEV. SERV. ROUTINES TO CHAIN DEV1: HLRZ CHL, DEVINT(C) ;LOC. WHERE PC IS STORED HRR INT, DEVINT(C) ;INTERRUPT SERVICE ROUTINE ENTRY POINT MOVE T, 1(CHL) ;INSERT THIS ROUTINE AT FRONT OF CHAIN MOVEM T, 1(INT) MOVEM INT, 1(CHL) SOJGE C, DEV1 ;MOVE SYMBOL TABLE UP IN MEMORY ;EXEC MUST BE LOADED IN 15K OR LESS IF GOING INTO 16K MACHINE SETZM DAT ;FIND FIRST NON EX MEM CONO APR,NXM ;CLEAR NON-EX MEM FLAG ADDI DAT,2000 ;TRY NEXT 1K BLOCK MOVE TAC1,(DAT) ;REFERENCE THIS LOCATION CONSO APR,NXM ;NON-EXISTENT? JRST .-3 ;NO SUBI DAT,1 ;YES, HIGHEST LEGAL LOC MOVEM DAT,DDTMEM ;FOR DDT SUBI DAT,200-1 ;MAKE ROOM FOR DECDUMP HLRE TAC1,JOBSYM ;-LENGTH OF S. T. JUMPE TAC1,JRSTI1 ;0 IF NON S. T. TO MOVE UP MOVNS TAC1 ;+LENGTH HRRZ TAC,JOBSYM ;FIRST ADDRESS ADDI TAC,(TAC1) HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1 HRRM DAT,STO1 ;DIST. TO MOVE MOVE TAC1,JOBSYM ;-N,FIRST ADD. ADDI TAC,1(DAT) ;FORM NEW S.T. POINTER MOVEM TAC1,JOBSYM MOVEI TAC1,JOBSYM MOVEM TAC1,DDTSYM MOVE TAC1,-1(TAC) STO1: MOVEM TAC1,.(TAC) SUB TAC,[XWD 1,1] JUMPGE TAC,.-3 ;SETUP LOCATIONS 40 THRU 57 JRSTI1: MOVE TAC,[XWD LOC40,40] BLT TAC,57 MOVE TAC,JRSTI MOVEM TAC,LINKSR+1 ;DO ONCE ONLY JRSTI: JRST @LINKSR EXTERN UUO0,ERROR EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7 LOC40: 0 ;UUO PC JSR UUO0 ;TO UUO HANDLER JSR CH1 JSP DAT,ERROR JSR CH2 JSP DAT,ERROR JSR CH3 JSP DAT,ERROR JSR CH4 JSP DAT,ERROR JSR CH5 JSP DAT,ERROR JSR CH6 JSP DAT,ERROR JSR CH7 JSP DAT,ERROR ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE INTERNAL ONCE EXTERNAL CONMES,RADX10,CRLF,DECIN,DECIN1 EXTERNAL THSDAT,MAKEND,JOBFF EXTERNAL ERNAM,OCTPNT,SYSSIZ,CONFIG,SYSNUM,SYSDAT ONCE: 0 MOVEI TAC,SYSFIN ;SET SIZE OF MONITOR MOVEM TAC,SYSSIZ MOVE DAT,LINEP ;SETUP LINE BYTE POINTER MOVE PDP,[XWD ONCEPN,ONCEPD] PUSHJ PDP,CRLF MOVEI TAC,CONFIG PUSHJ PDP,CONMES MOVEI TAC,TSEXEC PUSHJ PDP,CONMES HLRZ TAC,SYSNUM PUSHJ PDP,RADX10 MOVEI TAC,[ASCIZ /./] PUSHJ PDP,CONMES HRRZ TAC,SYSNUM PUSHJ PDP,RADX10 MOVEI TAC,[ASCIZ / /] PUSHJ PDP,CONMES MOVEI TAC,SYSDAT PUSHJ PDP,CONMES PUSHJ PDP,CRLF PUSHJ PDP,OPOUT ;ASK FOR TODAYS DATE AND CONVERT ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1 DATLOP: SETZM THSDAT MOVE DAT,LINEP MOVEI TAC,TODATE PUSHJ PDP,CONMES PUSHJ PDP,OPOUT PUSHJ PDP,GETLIN JRST DATLOP ;JUST CR PUSHJ PDP,DECIN1 ;MONTH JRST DATLOP ;ERROR SKIPE TAC1 CAILE TAC1,^D12 JRST DATLOP SUBI TAC1,1 IMULI TAC1,^D31 ADDM TAC1,THSDAT PUSHJ PDP,DECIN1 ;DAY JRST DATLOP SKIPE TAC1 CAILE TAC,^D31 JRST DATLOP SUBI TAC1,1 ADDM TAC1,THSDAT PUSHJ PDP,DECIN1 ;YEAR JRST DATLOP CAIL TAC1,^D65 CAILE TAC1,^D99 JRST DATLOP SUBI TAC1,^D64 ;YEAR ZERO IMULI TAC1,^D12*^D31 ADDM TAC1,THSDAT ;GET TIME OF DAY EXTERN TIME TIMLOP: SETZM TIME MOVE DAT,LINEP MOVEI TAC,TIMEM PUSHJ PDP,CONMES PUSHJ PDP,OPOUT PUSHJ PDP,GETLIN JRST TIMLOP ;JUST A CR ILDB TAC1,TAC SUBI TAC1,60 SKIPL TAC1 ;CHECK FIRST DIGIT OF HOUR CAILE TAC1,2 JRST TIMLOP IMUL TAC1,[^D60*^D60*^D60*^D10] ADDM TAC1,TIME ILDB TAC1,TAC SUBI TAC1,60 ;CONVERT TO BINARY SKIPL TAC1 CAILE TAC1,^D9 JRST TIMLOP IMULI TAC1,^D60*^D60*^D60 ADDM TAC1,TIME PUSHJ PDP,DECIN1 JRST TIMLOP CAILE TAC1,^D59 JRST TIMLOP IMULI TAC1,^D60*^D60 ADDM TAC1,TIME ;PRINT IO CONFIGURATION EXTERN DEVLST MOVE DAT,LINEP MOVEI TAC,IOCONF PUSHJ PDP,CONMES HLRZ DEVDAT,DEVLST MOVEI TAC,ITEM PUSH PDP,TAC ONCE5: MOVEI TAC,1 HLLZ ITEM,DEVNAM(DEVDAT) ONCE4: HLRZ DEVDAT,DEVSER(DEVDAT) JUMPE DEVDAT,ONCE6 HLLZ TAC1,DEVNAM(DEVDAT) CAMN TAC1,ITEM AOJA TAC,ONCE4 ONCE6: MOVE PROG,TAC ;SAVE NO. PUSHJ PDP,RADX10 MOVEI UUO," " IDPB UUO,DAT MOVEI UUO,3 MOVE JDAT,[POINT 6,ITEM] ONCE7: ILDB TAC1,JDAT ADDI TAC1,240 IDPB TAC1,DAT SOJG UUO,ONCE7 MOVEI TAC,[ASCIZ /'S/] CAILE PROG,1 PUSHJ PDP,CONMES PUSHJ PDP,CRLF JUMPN DEVDAT,ONCE5 POP PDP,TAC1 PUSHJ PDP,OPOUT ;ASK IF SYSMAK IS WANTED MOVE DAT,LINEP MOVEI TAC,SYSM PUSHJ PDP,CONMES PUSHJ PDP,OPOUT PUSHJ PDP,GETLIN JRST ONCE2 ;NO SYSMAK MOVEI TAC,MAKEND ;YES MOVEM TAC,SYSSIZ ;IS EXEC DDT WANTED? ONCE2: MOVE DAT,LINEP MOVEI TAC,SYSDM PUSHJ PDP,CONMES PUSHJ PDP,OPOUT PUSHJ PDP,GETLIN JRST ONCE3 ;NO MOVEI TAC,JOBFF ;FIRST FREE LOCATION HRRZM TAC,SYSSIZ ;PRINT OCTAL SIZE OF MONITOR ONCE3: MOVE DAT,LINEP MOVEI TAC,EXECIS PUSHJ PDP,CONMES MOVE TAC,SYSSIZ PUSHJ PDP,OCTPNT MOVEI TAC,LENGTH PUSHJ PDP,CONMES PUSHJ PDP,OPOUT JRST @ONCE ;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE ;CALL: PUSHJ PDP,GETLIN ; JUST A CR TYPED IN ; A LINE TYPED IN,TAC SET AS BYTE POINTER EXTERN CPOPJ, CPOPJ1 GETLIN: MOVE TAC,LINEP MOVEI ITEM,0 GET1: CONSO TTY,40 JRST .-1 DATAI TTY,TAC1 DATAO TTY,TAC1 IDPB TAC1,TAC ANDI TAC1,177 CAIN TAC1,177 ;RUBOUT JRST CPOPJ CAIE TAC1,15 AOJA ITEM,GET1 CONSO TTY,20 JRST .-1 MOVEI TAC1,12 DATAO TTY,TAC1 MOVE TAC,LINEP JUMPN ITEM,CPOPJ1 POPJ PDP, ;ROUTINE TO TYPE A LINE ON OPERATORS CONSOLE ;ECHO CHECK STOPS LINE AND RETURNS ;CALL: DAT SET TO END OF MESSAGE OPOUT: MOVE TAC,LINEP DATAI TTY,TAC1 OPOUT1: CAMN TAC,DAT POP PDP, CONSZ TTY,40 JRST OPOUT2 ;ECHO CHECK CONSZ TTY,20 JRST .-1 ILDB TAC1,TAC DATAO TTY,TAC1 JRST OPOUT1 OPOUT2: CONSZ TTY,20 JRST .-1 DATAO TTY,[15] CONSZ TTY,20 JRST .-1 DATAO TTY,[12] POPJ PDP, LINEP: POINT 7,LINBUF LINBUF: BLOCK 20 ONCEPN=10 ONCEPD: BLOCK ONCEPN ;MESSAGES TSEXEC: ASCIZ / T. S. EXEC-/ TODATE: ASCIZ / TYPE TODAY'S DATE AS ABOVE. / TIMEM: ASCIZ / TYPE 4 DIGIT NAVY TIME(0953 IS 9:53 AM). / IOCONF: ASCIZ / IO CONFIGURATION / SYSM: ASCIZ / DO YOU WANT SYSMAK(TYPE Y IF YES,CR IF NO)? / SYSDM: ASCIZ / EXEC DDT? / EXECIS: ASCIZ / EXEC IS / LENGTH: ASCIZ /OCTAL LOCATIONS LONG. / END,