; UPDATE 9/23/72 ERRTYP.S13 ; UPDATE 9/21/72 ERRTYP.S12 ; UPDATE 8/23/72 ERRTYP.S11 ; UPDATE 8/15/72 ERRTYP.S10 ; UPDATE 8/1/72 ERRTYP.S09 ; UPDATE ERRTYP.S08 ; UPDATE 12/20/71 ERRTYP.S07 ; UPDATE 12/7/71 ERRTYP.S06 ; UPDATE 12/2/71 ERRTYP.S05 ; UPDATE 11/8/71 ERRTYP.S04 ; UPDATE 11/1/71 ERRTYP.S03 ; UPDATE 10/8/71 ; UPDATE RQUEST.S06 ; UPDATE 6/22/72 RQUEST.S05 ; UPDATE 5/2/72 RQUEST.S04 ; UPDATE 1/18/72 RQUEST.S03 ; UPDATE 1/12/72 RQUEST.S02 ; UPDATE 11/8/71 RQUEST.S01 .TITLE RQUEST ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. RQUEST, CATALOG NO. ; * ; UPDATE 9/21/72 INPUT.S31 ********FORCE OVERLAY = 0 ; UPDATE 8/23/72 INPUT.S30 ; UPDATE 8/16/72 INPUT.S29 ; UPDATE 8/15/72 INPUT.S28 ; UPDATE 8/9/72 INPUT.S27 ; UPDATE 8/8/72 INPUT.S26 ; UPDATE 8/4/72 INPUT.S25 ; UPDATE 8/1/72 INPUT.S24 ; UPDATE INPUT.S23 ; UPDATE 6/28/72 INPUT.S22 ; UPDATE 6/24/72 INPUT.; UPDATE 8/10/72 BINASC.S04 ; UPDATE 8/8/72 BINASC.S03 ; UPDATE 11/8/71 BINASC.S02 ; UPDATE 10/8/71 BINASC.S01 .TITLE BINASC ;*********************************************************************** ; ; BINASC, CATALOG NUMBER ;BINARY TO ; ASCII CONVERSION SUBROUTINE. ; ; THIS SUBROUTINE CONVERTS A SIGNED 15-BIT BINARY ; INTEGER TO STANDARD 8-BIT U.S. ASCII CODE. THE ; CONVERTED ASCII IS P ERRTYP.S02 ; UPDATE 9/15/71 ERRTYP.S01 .TITLE ERRTYP ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. ERRTYP, CATALOG NO. ; * ;* TYPE ROS ERROR MESSAGES * ;* * ;* PURPOSE. THIS SUBROUTINE WILL TYPE A SYSTEM E ;* REQUEST BUTTON INTERRUPT HANDLER * ;* * ;* PURPOSE. THIS INTERRUPT HANDLER SERVES THE PURPOSE * ;* OF QUEUEING THE OPERATOR INPUT PROCESSING TASK 'INPUT' * ;* IN THE ROS TASK QUEUE. * ;* * ;* PROGRAM USAGE. THE LINKAGE TO THIS INTERRUPT HANDLER S21 ; UPDATE 6/23/72 INPUT.S20 ; UPDATE 6/22/72 INPUT.S19 ; UPDATE 5/5/72 INPUT.S18 ; UPDATE 5/2/72 INPUT.S17 ; UPDATE 4/21/72 INPUT.S16 ; UPDATE 4/10/72 INPUT.S15 ; UPDATE 3/31/72 INPUT.S14 ; UPDATE 2/16/72 INPUT.S13 ; UPDATE 1/28/72 INPUT.S12 ; UPDATE 1/18/72 INPUT.S11 ; UPDATE 12/20/71 INPUT.S10 ; UPDATE 12/1 ACKED ONE CHARACTER PER BYTE, ; WHICH IS STORED IN A SIX BYTE ARRAY SPECIFIED BY ; THE CALLING PROGRAM. ; CALLING SEQUENCE: ; ; MOV INTEGR,-(SP) ; MOV # STRING,-(SP) ; EMT BINASC ; ; WHERE: INTEGR = SIGNED BINARY INTEGER ; # STRING = ADDRESS OF ASCII BYTE STRING ; ; REGISTERS R0 THRU R5 ARE SAVED IN THE STACK ; AREA (SP) AND RESTORED UPON EXIT. ; ; ; PROGRAMMER 54 ; DA RROR MESSAGE * ;* ON THE SYSTEM OUTPUT DEVICE WITH SPECIFIED ARGUMENTS * ;* GIVEN BY THE CALLER. THIS SUBROUTINE PROVIDES THE CON- * ;* SISTENT ERROR MESSAGE FORMAT: * ;* * ;* "ERROR (NUMBER) * ;* ARG1 * ;* ARG2  * ;* IS VIA THE PDP-11'S HARDWARE/SOFTWARE INTERFACE: * ;* * ;* BR4 * ;* VECTOR = 244 * ;* * ;* PROGRAMMER 54 * ;* DATE 5/71 INPUT.S09 ; UPDATE 12/11/71 INPUT.S08 ; UPDATE 12/10/71 INPUT.S07 ; UPDATE 12/2/71 INPUT.S06 ; UPDATE 11/12/71 INPUT.S05 ; UPDATE 11/10/71 INPUT.S04 ; UPDATE 11/8/71 INPUT.S03 ; UPDATE 11/1/71 INPUT.S02 ; UPDATE 10/8/71 INPUT.S01 .TITLE INPUT ;*********************************************************************** ;* TE ; REVISION ; ;*********************************************************************** .DEF BINASC .REF PUSHR,POPR .IFNZ $KT11C .REF $CTASK,TVSV5 .ENDC ; .CSECT ; ; PLUS=53 MINUS=55 SPACE=40 ZERO=60 ; DIVTAB: .WORD 10000. ;DECIMAL DIVISION TABLE .WORD 1000. .WORD 100. .WORD 10. .WORD 0 ; ; BINASC = . JSR R5,PUSHR * ;* ARG3 * ;* ARG4" * ;* * ;* A ROS ERROR LOG SHOULD BE MAINTAINED FOR CLASSIFICATION * ;* LOOK-UP AND MEANING OF ARGUMENTS. IT IS ALSO RECOMMENDED * ;* THAT USER ERROR NUMBERS START AT 500 SUCH THAT ERRORS * ;* 1-499 MAY BE RESERVED FOR ROS. * ;* REVISION * ;* * ;*********************************************************************** .DEF RQUEST .REF QUEUE,RESTOR .DEF LOGMAX,PHYDEV,ALTDEV ; ; .CSECT ; ; ; ; RQUEST = . JSR R5,SAVE ; SAVE ENVIRONMENT MOV #$INPNO,-(SP) ; PUSH CLR -(SP)  * ;* PROGRAM IDENTIFICATION. INPUT, CATALOG NO. ; * ;* OPERATOR INPUT PROCESSING. * ;* * ;* PURPOSE. THIS TASK WILL REQUEST AND ACCEPT OPERATOR REQUESTS * ;* FROM THE SYSTEM TTY; AND, IF PRECEDED BY A PROPER AUTHORIZATION* ;* CODE, THE REQUEST WILL BE PROCESSED. VALID OPERATOR REQUESTS, * ;* FORMAT AND FUNCTION AR ; SAVE REGISTERS .IFNZ $KT11C MOV $KPAR5,-(SP) ; SAVE .ENDC MOV 16.+2*$KT11C(SP),R4 ; R4 = INTEGER MOV 14.+2*$KT11C(SP),R5 ; R5 = ADDRESS OF STRING .IFNZ $KT11C MOV $CTASK,-(SP) ; TASK NO. OF CALLER MOV R5,-(SP) ; TVA JSR PC,TVSV5 MOV (SP)+,R5 ; SVA .ENDC MOV #DIVTAB,R0 ;R0=DIVISION TABLE ADDRESS TST R4  * ;* * ;* PROGRAM USAGE. THE LINKAGE TO ERRTYP IS AS FOLLOWS: * ;* * ;* MOV MADDR,-(SP) * ;* EMT ERRTYP * ;* * ;* OR THE FORTRAN EQUIVAL ; ARGUMENTS FOR QUEUE TST -(SP) ; ONTO CLR -(SP) ; STACK JSR PC,QUEUE ; QUEUE INPUT TST (SP)+ ; DISREGARD ERROR JMP RESTOR ; RESTORE ENVIRONMENT & EXIT ; ; PHYSICAL DEVICE TABLE ; LOGMAX: .WORD 12. ; LARGEST VALID LOGICAL DEVICE NO. PHYDEV: .WORD 040000 ; TTY 3 AVAL.,ALT. AVIL .WORD 000400 ; DISC 0 AVAIL., NO ALE: * ;* * ;* FORMAT PROGRAM(SEGMENT)FUNCTION * ;* ************************************************************* * ;* CCCC INPUT INPUT OF AUTHORIZATION CODE * ;* EN,NNN ENABLE ENABLE SPECIFIED TASK * ;* DS,NNN DSABLE DISABLE SPECIFIED TASK * ;* QU,NNN  ;IS INTEGER NEGATIVE? BMI BTA050 ;YES MOVB #PLUS,(R5)+ ;NO-SET PLUS SIGN AND BUMP BTA010: MOVB #SPACE,R1 ;R1=ZERO SUPPRESS BYTE REGISTER BTA020: CLR R2 ;INITIALIZE SUBTRACTION COUNTER BTA030: SUB (R0),R4 ;SUBTRACT DIVISOR FROM INTEGER BPL BTA060 ADD (R0)+,R4 ;ADD BACK & BUMP DIVISOR POINTER TST R2 BEQ BTA040 MOV #ZERO,R1 ;STOP ZERO SUPPRESSENT: * ;* * ;* CALL ERRTYP(MADDR) * ;* WHERE MADDR IS THE ADDRESS OF THE ERROR MODULE: * ;* * ;* WORD 0 = THREAD WORD * ; ;* WORD 1 = SYSTEM WORD * ;* WOT. .WORD 100000 .WORD 100000 .WORD 040001 ; TTY 1 AVAIL, ALT. AVAIL ; FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ALTERNATE DEVICE TABLE ; ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; .END  QTASK QUEUE SPECIFIED TASK * ;* XX,NNN TABORT ABORT SPECIFIED TASK * ;* TM,HH:MM TIME SET TIME-OF-DAY * ;* TM TIME TYPE TIME OF DAY * ;* DT,MM/DD/YY DATE SET DATE * ;* DT DATE TYPE DATE * ;* RE,YYY RESET RESET DEVICE AVAILABLE * ;* EX ION BTA040: ADD R1,R2 ;CALCULATE ASCII BYTE MOVB R2,(R5)+ ;SET IN STRING AND BUMP TST (R0) BNE BTA020 ;NOT FINISHED ADD #ZERO,R4 ;MAKE SURE UNITS SIGNIFICANT MOVB R4,(R5) ;PUT IN UNITS POSITION MOV 12.+2*$KT11C(SP),16.+2*$KT11C(SP) ; ; SET UP STACK FOR RETURN .IFNZ $KT11C MOV (SP)+,$KPAR5 ; RESTORE .ENDC JSRD 2 = ERROR NUMBER * ;* WORD 3 = ARGUMENT 1 * ;* WORD 4 = ARGUMENT 2 * ;* WORD 5 = ARGUMENT 3 * ;* WORD 6 = ARGUMENT 4 * ;* * ;* THE ARGUMENTS WILL BE TYPED AS SIX CHARACTER * ;* OC ; UPDATE 8/23/72 ASCBIN.S09 ; UPDATE 8/15/72 ASCBIN.S08 ; UPDATE 8/10/72 ASCBIN.S07 ; UPDATE 8/8/72 ASCBIN.S06 ; UPDATE 8/4/72 ASCBIN.S05 ; UPDATE 4/4/72 ASCBIN.S04 ; UPDATE 11/8/71 ASCBIN.S03 ; UPDATE 10/8/71 ASCBIN.S02 ; UPDATE 9/15/71 ASCBIN.S01 .TITLE ASCBIN ;*********************************************************************** ; ; ASC INPUT TERMINATE INPUT * ;* C/R TERMINATE INPUT * ;* * ;* WHERE: CCCC IS FOUR-DIGIT AUTHORIZATION CODE * ;* NNN IS A 1-3-DIGIT TASK NUMBER * ;* HH IS TWO-DIGIT HOUR * TIME * ;* MM IS TWO-DIGIT MINUTE * TIME * ;* R R5,POPR ; RESTORE REGISTERS CMP (SP)+,(SP)+ ; STACK OK NOW RTS PC ; RETURN TO CALLER ; ; BTA050: MOVB #MINUS,(R5)+ ; SET MINUS SIGN AND BUMP NEG R4 ;SET INTEGER POSITIVE BR BTA010 ; BTA060: TSTB (R2)+ ;BUMP SUBTRACTION COUNTER BR BTA030 ; ; .END !TAL NUMBERS. IF ANY ERRORS OCCURS, THEY * ;* WILL BE IGNORED. * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;*"BIN, CATALOG NUMBER ,ASCII ; TO BINARY CONVERSION SUBROUTINE. ; ; THIS SUBROUTINE WILL CONVERT A SIGNED 5 ; INTEGER ASCII DECIMAL STRING STORED IN A ; SIX BYTE ARRAY, SPECIFIED BY THE CALLING ; PROGRAM, TO A SIGNED BINARY INTEGER OF ; 15-BITS AND SIGN(16-BIT COMPUTER WORD). ; A VALIDITY CHECK WILL BE MADE ON EACH ; BYTE TO DETERMINE IF WITHIN THE RANGE ; 0 THRU 9. ; CALLING SEQUENCE: ; ; MOV #STRING,-(SP)# MM IS TWO-DIGIT MONTH * DATE * ;* DD IS TWO-DIGIT DAY * DATE * ;* YY IS TWO-DIGIT YEAR * DATE * ;* YYY IS A 1-3 DIGIT LOGICAL DEVICE NO. * ;* * ;* END OF MESSAGE WILL BE A CARRIAGE RETURN. * ;* *$; UPDATE 9/25/72 IPL3.S40 ; UPDATE 9/25/72 IPL3.S39 DON'T FORCE OVRLAY=0 ANYMORE ; UPDATE 9/23/72 IPL3.S38 ; UPDATE 9/23/72 IPL3.S37 ; UPDATE 9/21/72 IPL3.S36 ******FORCE OVRLAY TO BE 0 ; UPDATE 9/21/72 IPL3.S35 ; UPDATE 9/21/72 IPL3.S34 ; UPDATE 8/18/72 IPL3.S33 ; UPDATE 8/15/72 IPL3.S32 ; UPDATE 8/8/72 IPL3.S31 ; UPDATE 8/7/72 %********************************************************************** .DEF ERRTYP,LERTYP,BIN2OC,B2ONTA .REF PUSHR,POPR,BINASC,TTYOUT .REF RELTSK,IOSTAT .IFNZ $KT11C .REF $CTASK,PPASV5,PPASV6,SVPPA .ENDC ; .CSECT ; ; THE FOLLOWING IS THE FIRST AND LAST DIRECTORY FOR THE ; ERROR TYPE THREAD ; .QUE QFRST,QLST,1 QFIRST = QFRST+4 QLAST = QLST+4 ; ; ; THE FOLLOWING TABLE IS TH& ; ; EMT ASCBIN ; MOV (SP)+,INTGR ; TST (SP)+ ; BNE ERROR ; ; ; WHERE: #STRING=ADDRESS OF ASCII BYTE STRING ; INTGR=LOCATION TO PUT BINARY INTEGER ; ; ASCII SPACES OR BINARY ZEROS ARE VALID IN LEADING ; NON-SIGNIFICANT POSITIONS. REGISTERS R0 THRU ; R5 ARE SAVED IN THE STACK AREA (SP) AND RE- ; STORED UPON EXIT. ; ; UPON RETURN IF ERROR WORD, PUSHED ON STA' ;* PROGRAM USAGE. INPUT WILL BE CONSTRUCTED SUCH THAT * ;* IF IN A DISC SYSTEM, IT WILL BE AN OVERLAY * ;* TASK WITH SEGMENTS. INPUT IS PLACED IN THE ROS * ;* SOFTWARE TASK QUEUE WHENEVER A "REQUEST" INTERRUPT * ;* OCCURS. IF WHILE WAITING FOR INPUT, TTY MAX SECONDS * ;* HAVE ELAPSED, INPUT WILL BE ABORTED. IT WILL BE NECESSARY * ;* FOR THE OPERATOR TO REQUEST AGAIN. ( IPL3.S30 ; UPDATE 8/4/72 IPL3.S29 ; UPDATE 8/1/72 IPL3.S28 ; UPDATE 6/22/72 IPL2.S27 ; UPDATE 5/17/72 IPL2.S26 ; UPDATE 5/16/72 IPL2.S25 ; UPDATE 5/16/72 IPL2.S24 ; UPDATE 5/5/72 IPL2.S23 ; UPDATE 5/2/72 IPL2.S22 ; UPDATE 4/17/42 IPL2.S21 ; UPDATE 4/14/72 IPL2.S20 ; UPDATE 4/12/72 IPL2.S19 ; UPDATE 4/10/72 )E I/O LIST FOR THE ; ERROR MESSAGE TYPE-OUT. ; .BOUND IOLIST = . .WORD 1 ; THREAD WORD .BYTE SYSTTY ; LOGICAL DEVICE-SYSTEM TTY .BYTE 3 ; EXIT TYPE 3 .WORD TTYNXT ; I/O COMPLETE SUBROUTINE .BYTE 0 ; DON'T QUEUE ERROR TASK .BYTE 1 ; USE PRIORITY TYPE-OUT QUEUE .WORD 0,0 ; TWO SYSTEM USE WORDS .WORD TYPBUF *CK BY ASCBIN, ; NOT = 0, A CONVERSION ERROR OCCURRED. ; ; ; PROGRAMMER 54 ; DATE ; REVISION ; ;*********************************************************************** .DEF ASCBIN .REF PUSHR,POPR ; .CSECT ; ; ; SPACE=40 ZERO=60 MINUS=55 NINE=9. ; ; ASCBIN = . TST -(SP) ; PUSH ONE MORE WORD ON STACK JSR R5, PUSHR ; SAVE REGISTERS ON STACK + * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;*********************************************************************** .DEF INPUT,OPCOMR,ER3MSG,DATADR,TTYLST,INPTHD,IPL2.S18 ; UPDATE 4/5/72 IPL2.S17 ; UPDATE 3/23/72 IPL2.S16 ; UPDATE 3/21/72 IPL2.S15 ; UPDATE 3/20/72 IPL2.S14 ; UPDATE 3/17/72 IPL2.S13 ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.S07 ; UPDATE 12/2/71 IPL.S0- ; ADDRESS OF OUTPUT BUFFER .WORD 0,TYPBUF ; ; ; THE FOLLOWING IS THE MESSAGE STRING USED BY TTYOUT ; TYPBUF = . .WORD 41. ; NO. OF CHARACTERS TO OUTPUT .WORD 0 ; USED BY TTYOUT .BYTE 15 ; START OFF WITH CR/LF .ASCII /ERROR/ EDIT1: .ASCII / XXXXX/ .BYTE 15 .ASCII /XXXXX/ ; ARG 1 EDIT2: .ASCII /X/ .BYTE 15 .ASCII /XXXXX/ . MOV 16.(SP),R1 ; ADDRESS OF STRING TO POSITION POINTER MOV 14.(SP),12.(SP) ; SET STACK FOR RETURN AND 2 PARAM. PASS TSTB (R1)+ ;BUMP TO 10,000 POSITION MOV #5,R0 ;SET POSITION INDEX FOR LOOP CLR R5 ; CLEAR BINARY INTEGER ACCUM. ATB010: MOVB (R1)+,R4 ; GET ASCII BYTE AND BUMP BEQ ATB020 ;IF BINARY ZERO-SUPPRESS CMPB #SPACE,R4 ;IF ASCII SPACE-SUPPRESS BNE/ .DEF TTRLST .REF ENABLE,DSABLE,QTASK .REF TABORT,TIME,DATE .REF IOSTAT,TPRTY,HEADER .REF RESET,TSTAT,TASKS TTYOUT = 13 TTYIN = 14 ASCBIN = 17 BINASC = 16 EXIT = 4 NOCKPT = 30 QUEUE = 1 ABORT = 6 ROSGET = 56 ; .CSECT OVRLAY = 0 ;*********FORCE OVERLAY OPTION OFF ; NSIZE = 50. ; TASK STACK SIZE ; ; MXCHIN = 06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11/15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* THEN EXIT TO DISPATCH. THIS MODULE SHOULD B1; ARG 2 EDIT3: .ASCII /X/ .BYTE 15 .ASCII /XXXXX/ ; ARG 3 EDIT4: .ASCII /X/ .BYTE 15 .ASCII /XXXXX/ ; ARG 4 EDIT5: .ASCII /X/ .BYTE 15 .EVEN ; ; THE FOLLOWING EDIT TABLE IS USED TO POINT TO 6 BYTE ASCII ; STRINGS IN THE MESSAGE INTO WHICH BINASC OR BIN2OC ; WILL PUT THE CONVERTED RESULTS. ; EDITBL = . .WORD EDIT1 ; POINTER FOR ERROR NUMBER .WORD EDIT22 ATB105 ;SIGNIFICANT-START CALCULATION ATB020: DEC R0 ; FINISHED WITH STRING BNE ATB010 ;NO-TRY AGAIN BR ATB110 ;YES-FINISHED ; ; PERFORM CONVERSION BY MULTIPLYING AN INITIALLY ; CLEARED ACCUMULATOR BY 10(MULTIPLYING ITS CONTENTS ; BY 5 AND THEN DOUBLING) AND ADDING THE ; ASCII EQUIVALENT BCD VALUE. THIS WILL BE DONE ; FOR EACH SIGNIFICANT POSITION LEFT TO RIGHT. ; EACH DIGIT'S RESULT IS 3 24. ; MAXIMUM NO. CHAR. DURING INPUT .PAGE .IFZ OVRLAY ; .TITLE $$TSK1 ; TASK HEADER FOR NON-OVERLAYED INPUT ; ; ; INPTHD = . .WORD 1 ; THREAD WORD .WORD $INPNO ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD INPUT-RELOC ; ENTRY POINT .WORD 0 ; MAX TIME .WORD 0 4E EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST TIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* * ;*************************5 ; FPOINTER FOR FIRST ARGUMENT .WORD EDIT3 ; POINTER FOR SECOND ARGUMENT .WORD EDIT4 ; POINTER FOR THIRD ARGUMENT .WORD EDIT5 ; POINTER FOR FOURTH ARGUMENT .WORD 0 ; END OF TABLE ; ; EXITSW: .WORD 0 ; EXIT SWITCH. 0=SUBROUTINE EXIT ; ; 1=I/O COMPLETE SUB EXIT IOLUSE: .WORD -1. ; I/O LIST IN USE SWITCH ; 6STORED BACK IN THE ; ACCUMULATOR TO USE FOR THE NEXT CALCULATION. ; ATB100: MOVB (R1)+,R4 ;GET NEXT ASCII BYTE AND BUMP ATB105: SUB #ZERO,R4 ;ASCII NUMERIC TO BCD BMI ATB200 ;ERROR IF LESS THAN ZERO CMPB R4,#NINE BHI ATB200 ;ERROR IF GREATER THAN NINE MOV R5,R3 ; ACCUM. TO SHIFT 2 MOV R3,R2 ;DUPLICATE IN SHIFT 1 ACCUM. ASL R3 ; MULTIPLY ASL7 ; CURRENT TIMER .WORD NSIZE ; TASK STACK SIZE .WORD 0,0,0 ; RESERVED .IFNZ $KT11C .WORD 013406 ; PDR 0 27 BLOCKS, READ/WRITE ACCESS .WORD 0,0,0,0,0,0 ; PDR'S 1-6 NON-EXISTENT .WORD 077406 ; PDR 7, DEVICE REGISTERS, READ/WRITE ; ; NEXT ARE THE PAR'S ; .DEF $INSTK $INSTK: .WORD TSTACK ; PAR0-RESOLVE BY IPL (TSTACK/64.) .WORD 0,0,0,0,0,0 ; PAR'S 1H********************************************** .DEF IPL,SSTACK .DEF DYNSIZ ; # BYTES IN DYNAMIC POOL .DEF BEGDYN,ENDDYN,DYSINI .REF TIMER,IOTXIT,SCHED .REF CLINIT .REF RQUEST,SAVE,DSPTCH,TPRTY,HEADER .REF PFSIPL,PSTIPL .REF TSTAT,SYSINI,DINT .REF EMTRAP .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOARD ;INTERRUPT ROUTINES .REF TTE ; NO. OF REQUESTS ; ; SPACE = 40 ; ASCII SPACE ; ; THE FOLLOWING EQUATES ARE FOR THE ERROR MODULE ; THREAD = 0. ; THREAD WORD SYSTEM = 2. ERRNUM = 4. ; ERROR NUMBER ARGM1 = 6. ; ARGUMENT 1 ARGM2 = 8. ; ARGUMENT 2 ARGM3 = 10. ; ARGUMENT 3 ARGM4 = 12. ; ARGUMENT 4 ; ; PLOCK = 340 ; PRIORITY LOCK-OUT MASK FOR G R3 ; BY 4 ADD R3,R2 ; SAME AS N*5 ADD R2,R2 ; SAME AS N*10 ADD R4,R2 ;COMBINE WITH BCD VALUE MOV R2,R5 ; SET IN BINARY INT. ACCUM DEC R0 ;FINISHED WITH STRING? BNE ATB100 ;NO ATB110: CMPB #MINUS,-6(R1) ;YES-STRING SIGN NEGATIVE BNE ATB120 ;NO NEG R5 ; YES-NEGATE BINARY INTEGER ATB120: CLR F-6 NON-EXISTENT .WORD 7600 ; PAR 7, DEVICE REGISTER BASE ADDRESS . = .+12. ; FORCE LOCATION COUNTER BACK ; ; TO 32-WORD BOUNDARY. .ENDC .IFZ $KT11C RELOC = 0 .ENDC .IFNZ $KT11C RELOC = . .ENDC .ENDC TSTACK = . . = TSTACK+NSIZE+NSIZE ; ; THE FOLLOWING IS USED FOR ASCII TO BINARY CONVERSIONS ; ASCII = . """"""" """""DDD@DDDDDDDDDDDDDDDDDDDDDDDDDDD "DDDDDDDD""""""""""""""""""""""""UUDDDD """""""""""""""""""""""*@DD """""@DDDDDDDD̈@DDDADDB C""{=sL"{:`|R ; {; { G:@.| =sL"{h|:`|KQ""{Wzy:{O:@/|; { u~#"SV\!p{R=[g4{hfp{ zy:{ ; {5r,{9 a\!p{q>%( Hr,4d:NRj$Dwwa ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & IPSR PSR = 177776 ; ADDRESS OF PROCESSOR STATUS REGISTER ; TEMP: .WORD 0 ; TEMPORARY SAVE AREA FOR LERTYP ; ; LERTYP IS CALLED TO TYPE AN ERROR MESSAGE UNDER LOCKOUT. ; MOV PSR,-(SP) ; MOV MADDR,-(SP) ; JSR PC,LERTYP ; ; LOCKOUT WILL BE RELEASED UPON THREADING THE ERROR MODULE ; LERTYP = . MOV 2.(SP),TEMP ; SAVE MODJ .BYTE 0,0,0,0,0,0 ; ASCII STRING STORAGE ; .IFNZ NDISCS .IFNZ $BATCH ; ; BFUP COMMUNICATIONS BLOCK ; BFBLCK = . .WORD 0 ; ERROR WORD .WORD $BCHID ; BATCH FILE ID .WORD 0,0 ; ELEMENT NAME .WORD 1 ; FORCE INIT. .WORD 0,0 ; NOT USED BY BFINIT ; .ENDC .ENDC .PAGE ; ; THE FOLLOWING LIST IS THE I/O 16.(SP) ; SET NO ERROR INDICATOR ATB130: MOV R5,14.(SP) ; SET BINARY INTEG. IN STACK JSR R5,POPR ; RESTORE REGISTERS RTS PC ; RETURN TO CALLER ; ; ERROR IN STRING ; ATB200 = . MOV R4,16.(SP) ; SET ERROR INDICATOR BR ATB130 ; ; .END LINIT ;TTYIO INITIALIZATION SUBROUTINE .IFG NLP ; ONLY IF HAVE LINE PRINTERS .REF LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READERS .REF CRINIT .ENDC .IFNZ $DTAPE .REF DTINT .ENDC ; ; ; .CSECT ; .IFZ OVRLAY SSTACK = . ; BEGIN SYSTEM STACK HERE FOR ROS I .ENDC PSR = 177776 ; PROCESSOR STATUS RMULE ADDRESS UNDER LOCKOUT MOV (SP)+,(SP) ; FOR PROPER RETURN JSR R5,PUSHR ; SAVE ALL REGISTERS .IFNZ $KT11C MOV $KPAR5,-(SP) MOV $KPAR6,-(SP) .ENDC MOV 14.+4*$KT11C(SP),-(SP) ; PUT PSR ON STACK SO COMPATABLE MOV TEMP,R5 ; ADDRESS OF MODULE BR ERRA05 ; DO IT ; ERRTYP = . JSR R5,PUSHR ; SAVE ALL REGISTERS .IFNZ $KT11C NPARAMETER LIST USED FOR ; TTY I/O ; .BOUND TTYLST = . .WORD 1 ; THREAD WORD .BYTE SYSTTY ; LOGICAL DEVICE .BYTE 2 ; USE EXIT TYPE #2 -ALL TTY I/O .WORD 0 ; NO I/O COMPLETE ROUTINE .BYTE 0 ; NO ERROR TASK NO. .BYTE 1 ; USE TTY PRIORITY QUEUES INERR: .WORD 0 ; FOR SYSTEM USE - SYSTEM .WORD 0 ; FOR q ; UPDATE 8/23/72 INPUT.S30 ; UPDATE 8/16/72 INPUT.S29 ; UPDATE 8/15/72 INPUT.S28 ; UPDATE 8/9/72 INPUT.S27 ; UPDATE 8/8/72 INPUT.S26 ; UPDATE 8/4/72 INPUT.S25 ; UPDATE 8/1/72 INPUT.S24 ; UPDATE INPUT.S23 ; UPDATE 6/28/72 INPUT.S22 ; UPDATE 6/24/72 INPUT.S21 ; UPDATE 6/23/72 INPUT.S20 ; UPDATE 6/22/72 PEGISTER EQUATE PSBENB = 165400 ; DEVICE ADDRESS AT WHICH TO ENABLE ; ; MANUAL PUSHBUTTON ; ; INTERRUPT VECTOR EQUATES ; MPSHBT = 244 ; MANUAL PUSHBUTTON MPSHLV = 340 ; LEVEL 7 .CSECT .CRINT .CSECT .LPINT .CSECT .SYSIN .CSECT .DYSIN .CSECT .QUEUE .CSECT .EMTIN .CSECT .CLINT .CSECT .TTYIN .CSECT .MAIN. Q MOV $KPAR5,-(SP) MOV $KPAR6,-(SP) .ENDC MOV 14.+4*$KT11C(SP),R5 ; GET MODEL ADDRESS MOV @#PSR,-(SP) ; SAVE PROCESSOR PRIORITY ON STACK ERRA05 = . .IFNZ $KT11C MOV R5,-(SP) JSR PC,SVPPA MOV (SP)+,R4 ; PPA OF MODULE .ENDC .LOCK DEC (R5) ; IS MODULE THREADABLE BNE ERRA30 ; NO - BUMP BACK AND RETURN TO CALLER RSYSTEM USE - SYSTM2 DATADR: .WORD 0 ; WILL CONTAIN ADDRESS OF DATA BUFFER .WORD 0,0 ; ; INPUT TTY INPUT BUFFER ; INBUF = . .WORD MXCHIN ; MAXIMUM INPUT RESPONSE NOCHAR: .WORD 0 ; USED BY TTYIN BUFST = . ; MESSAGE STARTS HERE .BYTE 0,0,0,0,0,0,0,0,0,0 ; ADD .BYTE 0,0,0,0,0,0,0,0,0,0 ; MORE .BYTE 0,0,0,0,0,0,0,0,0,0 ; IF .BYTE 0,0,0,0,0,0,0,0S; UPDATE 8/15/72 SYSINI.S06 ; UPDATE 8/7/72 SYSINI.S05 ; UPDATE 8/4/72 SYSINI.S04 ; UPDATE 8/1/72 SYSINI.S03 ; UPDATE 5/2/72 SYSINI.S02 ; UPDATE 4/14/72 SYSINI.S01 .TITLE SYSINI ;*********************************************************************** ;* * ;* SET UP SYSTEM TASKS IN TASK TABLE IF THEY ARE CORE * T; START OF CODE. MUST BE AFTER OTHER NAMED ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES .LOCK MOV #SSTACK,SP ; SET UP SYSTEM STACK .IFNZ OVRLAY CMP SP,#3000 ; MAKE SURE ROOM IN THIS SYSTEM FOR BGE IPLA10 ; SPECIFIED DYNAMIC CORE POOL SIZE. HALT ; NOT ENOUGH. BAD BAD BAD IPLA10: .ENDC ; JSR PC,PSTIPL ; SET UP THE TRAP HANDLER U .IFZ $KT11C MOV R5,@QLAST ; THREAD REQUEST MOV R5,QLAST ; VIA QLAST .ENDC .IFNZ $KT11C MOV QLAST,-(SP) JSR PC,PPASV6 ; GET LAST SVA MOV R4,@(SP)+ ; THREAD MODULE MOV R4,QLAST ; VIA QLAST .ENDC MOV $CTASK,R3 ; TASK NO. MOV R3,SYSTEM(R5) ; SAVE BEQ ERRA08 INCB IOSTAT(R3) ; SET IOSTAT ERRA08V,0,0 ; GREATER .BYTE 0,0,0,0,0,0,0,0,0,0 ; THAN 50 REQUIRED . = BUFST+MXCHIN ; DELETE THOSE NOT NEEDED .EVEN ; ; THE FOLLOWING LIST IS THE I/O LIST FOR THE READY MESSAGE ; PRINTOUT WITH AN EXIT TYPE ONE SO AN EXIT TYPE 2 REQUEST ; CAN BE MADE IMMEDIATELY AFTERWARDS.***UNTIL WE CAN ; COMMAND CHAIN LISTS ON TTY. ; .BOUND TTRLST = . .WORD 1 ; THREAD WORD .BYTE SYSTTY ;* RESIDENT TASKS-CALLED BY IPL. * ;* * ;*********************************************************************** .DEF SYSINI .REF CMPRHD,FLSTHD,RASHED,LODHED .REF HEADER,TSTAT,TPRTY,TASKS .REF QIPL,INPTHD .REF INIDSC .DEF TIMERQ .DEF TASK4,TASK5,TASK6,TASK7,TASK8,TASK9 .DEF TASK10,TASK11 .CSEX ; .IIF NZ $KT11C JSR PC,KERNEL ; GO SET KT11C ASRS ; JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT ; SET UP HANDLER FOR MANUAL PUSHBUTTON MOV #MPSHLV,MPSHBT+2 .IFGE NTTYS-1 MOV #340,R1 ; INIT. INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV R1,62 MOV #PRTINT,64 MOV R1,66 .ENDY = . INC IOLUSE ; BUMP NO. OF REQUESTS BEQ ERRB00 ; FIRST ONE - LET'S DO IT ERRA10: MOVB (SP)+,@#PSR ; RESTORE CPU PRIORITY ERRA20 = . .IFNZ $KT11C MOV (SP)+,$KPAR6 MOV (SP)+,$KPAR5 .ENDC JSR R5,POPR ; RESTORE REGISTERS MOV (SP)+,(SP) ; SET STACK UP FOR VALID RETURN RTS PC ; RETURN TO CALLER ; ; CAN'T THREAD ERROR MODZ ; LOGICAL DEVICE .BYTE 1 ; USE EXIT TYPE 1 .WORD 0 ; NO I/O COMPLETE REOUTINE .BYTE 0 ; NO ERROR TASK NUMBER .BYTE 1 ; USE TTY PRIORITY QUEUES .WORD 0 ; SYSTEM .WORD 0 ; SYSTM2 .WORD RDYMSG-RELOC ; READY MESSAGE '? ' .WORD 0,0 ; ; AUTHORIZATION CODE REQUEST MESSAGE ; ACMSG = . .WORD 5. .W[; UPDATE 9/21/72 ERRTYP.S12 ; UPDATE 8/23/72 ERRTYP.S11 ; UPDATE 8/15/72 ERRTYP.S10 ; UPDATE 8/1/72 ERRTYP.S09 ; UPDATE ERRTYP.S08 ; UPDATE 12/20/71 ERRTYP.S07 ; UPDATE 12/7/71 ERRTYP.S06 ; UPDATE 12/2/71 ERRTYP.S05 ; UPDATE 11/8/71 ERRTYP.S04 ; UPDATE 11/1/71 ERRTYP.S03 ; UPDATE 10/8/71 ERRTYP.S02 ; UPDATE 9/15/7\C .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV #DINT,204 ; SET UP FOR DISC 0 MOV #340,206 ; ]ULE ; ERRA30 = . INC (R5) ; SET BACK THREAD WORD BR ERRA10 ; RETURN ; ; FIRST REQUEST - START MESSAGE ; ERRB00 = . CLR EXITSW ; CLEAR EXIT SWITCH FOR GOOD RETURN ERRB10 = . .IFZ $KT11C MOV QFIRST,R5 ; GET NEXT REQUEST .ENDC .IFNZ $KT11C MOV QFIRST,-(SP) JSR PC,PPASV5 ; GET REQUEST'S SVA MOV (SP)+,R5 ^ORD 0 .BYTE 15 .ASCII /AC:/ .BYTE 15 ; CARRIAGE RETURN .EVEN ; ; READY RESPONSE ; RDYMSG = . .WORD 3. .WORD 0 .BYTE 15 .ASCII /? / ; ? SPACE .EVEN ; ; ILLEGAL COMMAND ERROR MESSAGE ; ER1MSG = . .WORD 9. .WORD 0 .ASCII /ILL CMD!/ .BYTE 15 .EVEN ; ; ILLEGAL PARAMETER ERROR MESSAGE ; ER2MSG = _1 ERRTYP.S01 .TITLE ERRTYP ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. ERRTYP, CATALOG NO. ; * ;* TYPE ROS ERROR MESSAGES * ;* * ;* PURPOSE. THIS SUBROUTINE WILL TYPE A SYSTEM ERROR MESSAGE * ;* ON THE SYSTE`AT INTERRUPT LEVEL 7 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,530 ; DISC 0 MOV #340,532 ; AT LEVEL 7 .ENDC .ENDC .IFNZ $DTAPE MOV #DTINT,214 ; SET UP VECTOR FOR MOV #340,216 ; THE DECTAPE .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; MOV #EMTRAP,30 ; SET OF TRAP VECTOR FOR MOV #340,32 a .ENDC BEQ ERRB30 ; NO REQUESTS LEFT MOV (R5)+,QFIRST ; PULL THREAD, RELINK, R5=ADDR. ERRNUM BNE ERRB15 MOV #QFIRST,QLAST ; PULLED LAST REQUEST-RESET QLAST .IFNZ $KT11C CLC ROR QLAST ; CALCULATE CLC ROR QLAST ; PPA .ENDC ERRB15: MOVB (SP),@#PSR ; RESTORE CPU PRIORITY MOV #EDITBL,R4 ; ADDRESS OF MESSAGE EDIT TABLE b . .WORD 9. .WORD 0 .ASCII /ILL PAR!/ .BYTE 15 .EVEN ; ; CANNOT PERFORM FCN BECAUSE TASK Q'ED OR ACTIVE ; ER3MSG = . .WORD 14. .WORD 0 .ASCII /NON-QUIESCENT/ .BYTE 15 .EVEN ; .PAGE ; ; AUTHORIZATION CODE TABLE ; ; ; AUTHORIZATION CODE ASSIGNMENTS ; AC0000 = 0. AC0001 = 1. AC0002 = 2. AC0003 = 3. AC0004 = 4. AC0005 =cM OUTPUT DEVICE WITH SPECIFIED ARGUMENTS * ;* GIVEN BY THE CALLER. THIS SUBROUTINE PROVIDES THE CON- * ;* SISTENT ERROR MESSAGE FORMAT: * ;* * ;* "ERROR (NUMBER) * ;* ARG1 * ;* ARG2 * ;* d ; EMT HANDLER MOV #TIMER,TIMINT ;INITIALIZE TIMER INTERRUPT VECTOR MOV #340,TIMINT+2 .IFNZ $CLOCK MOV #SCHED,TODINT ;INITIALIZE TIME OF DAY INT. VECTOR MOV #340,TODINT+2 .ENDC ;DO WE NEED TO INITIALIZE STALL ALARM VECTOR? .IFNZ $KT11C MOV #IOTXIT,20 ;INITIALIZE IOT TRAP VECTOR MOV #30340,22 ;(SHOULD ONLY HAVE TO BE 340) .ENDC e MOV (R5)+,-(SP) ; INTEGER TO STACK AND BUMP POINTER MOV (R4)+,-(SP) ; EDIT STRING ADDRESS TO STACK JSR PC,BINASC ; CONVERT ERROR NO. TO ASCII ; ; BYTE STRING ERRB20: MOV (R5)+,R3 ; BINARY NO. MOV (R4)+,R2 ; DESTINATION END ADDRESS JSR PC,BIN2OC ; BINARY TO OCTAL FOR ARGS. TST (R4) ; BUMP EDIT POINTER BNE ERRB20 ; NO - AGf 5. AC0006 = 6. AC0007 = 7. AC0008 = 8. AC0009 = 9. AC0010 = 10. AC0011 = 11. AC0012 = 12. AC0013 = 13. AC0014 = 14. AC0015 = 15. AC0016 = 16. AC0017 = 17. AC0018 = 18. AC0019 = 19. AC0020 = 20. ; ; EXPAND IF MORE THAN 20 ASSIGNMENTS ; AUTCOD = . .WORD AC0000 .WORD AC0001 .WORD AC0002 .WORD AC0003 .WORD AC0004 g ARG3 * ;* ARG4" * ;* * ;* A ROS ERROR LOG SHOULD BE MAINTAINED FOR CLASSIFICATION * ;* LOOK-UP AND MEANING OF ARGUMENTS. IT IS ALSO RECOMMENDED * ;* THAT USER ERROR NUMBERS START AT 500 SUCH THAT ERRORS * ;* 1-499 MAY BE RESERVED FOR ROS. * ;* k JSR PC,TTINIT ;INITIALIZE TTYIO TABLES .IFNZ OVRLAY JSR PC,DYSINI ; INIT. DYNAMIC STORAGE ALLOCATOR .ENDC .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC .IFNZ NDISCS .REF AUFCN,AULIST,DISCIO,INIDSC .REF AUBUF,TKFLBF ; .REF CDIFCN,CDILST .RiAIN MOVB #SPACE,EDIT1 ; WIPE OUT SIGN IN ERRNUM; SUB #12.,R5 ; R5 = THREAD WORD ADDRESS .LOCK MOV #1.,(R5) ; SET THREADABLE MOV SYSTEM(R5),R1 ; TASK NO. BEQ ERRB24 DECB IOSTAT(R1) ; RESET .IFNZ OVRLAY BNE ERRB24 MOV (SP),@#PSR ; RESET PRIORITY LOCKOUT MOV R1,-(SP) ; TASK NO. TO STACK JSR PC,RELTSK .ENDC ERRB2j .WORD AC0005 .WORD AC0006 .WORD AC0007 .WORD AC0008 .WORD AC0009 .WORD AC0010 .WORD AC0011 .WORD AC0012 .WORD AC0013 .WORD AC0014 .WORD AC0015 .WORD AC0016 .WORD AC0017 .WORD AC0018 .WORD AC0019 .WORD AC0020 ; .= AUTCOD+ACTSIZ+ACTSIZ ; USE ONLY AMOUNT NEEDED .WORD -1. ; END OF TABLE .PAGE * ;* PROGRAM USAGE. THE LINKAGE TO ERRTYP IS AS FOLLOWS: * ;* * ;* MOV MADDR,-(SP) * ;* EMT ERRTYP * ;* * ;* OR THE FORTRAN EQUIVALENT: l; UPDATE 8/1/72 RQUEST.S07 ; UPDATE RQUEST.S06 ; UPDATE 6/22/72 RQUEST.S05 ; UPDATE 5/2/72 RQUEST.S04 ; UPDATE 1/18/72 RQUEST.S03 ; UPDATE 1/12/72 RQUEST.S02 ; UPDATE 11/8/71 RQUEST.S01 .TITLE RQUEST ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATIONm4 = . MOVB (SP)+,@#PSR ; MAKE SURE RESET MOV #IOLIST,-(SP) ; I/O LIST ADDRESS ON STACK FOR TTYOUT JSR PC,TTYOUT ; TYPE ERROR MESSAGE ERRB25: TST EXITSW ; CALLED FROM I/O COMPLETE? BEQ ERRA20 ; NO - RETURN TO CALLER RTS PC ; YES-RETURN TO TTYOUT ; ; I/O COMPLETE SUBROUTINE FROM TTYOUT - EXIT TYPE 3 ; TTYNXT = . INC EXITSW ; SET EXIT SWITCH FROM I/On; ; OPERATOR COMMAND TABLE - EITHER CONTAINS ADDRESSES OF ; COMMAND PROCESSORS OR SEGMENT NUMBERS DEPENDING ON ; WHETHER OR NOT INPUT IS AN OVERLAY TASK ; OPCOMM = . .ASCII /EN/ .WORD ENABLE-RELOC ; ADDRESS OF ENABLE .ASCII /DS/ .WORD DSABLE-RELOC ; ADDRESS OF DSABLE .ASCII /QU/ .WORD QTASK-RELOC ; ADDRESS OF QTASK .ASCII /XX/ .WORD TABORT-RELOC ; ADDRESS OF TABORT .ASoEF TASKS,$TKFLS,$TKFLF CLR PSR ; RESET LOCKOUT SO DISC INTERRUPT ; ; MAY BE RECEIVED CLRB AUFCN ; SET TO READ ALLOCATION FILE TYPE DIR. MOV #AULIST,-(SP) .IIF NZ $KT11C MOV #AUBUF,AULIST+20 JSR PC,DISCIO ; READ FILE TYPE DIRECTORY IPLX20: CMP #1.,AULIST ; I/O COMPLETE? BNE IPLX20 ; NO-KEEP CHECKING MOVB #1.,AUFCN ; PUT p. RQUEST, CATALOG NO. ; * ;* REQUEST BUTTON INTERRUPT HANDLER * ;* * ;* PURPOSE. THIS INTERRUPT HANDLER SERVES THE PURPOSE * ;* OF QUEUEING THE OPERATOR INPUT PROCESSING TASK 'INPUT' * ;* IN THE ROS TASK QUEUE. * ;* * ;* PROGRAM USAGE. COMPLETE MOV @#PSR,-(SP) ; SAVE PROCESSOR PRIORITY .LOCK BR ERRB10 ; SEE IF ANY OTHER REQUESTS AND ; ; PROCESS THEM ACCORDINGLY ; ERRB30: MOV #-1.,IOLUSE ; RESET I/O LIST IN USE SWITCH MOVB (SP)+,@#PSR ; RESTORE CPU PRIORITY RTS PC ; RETURN TO TTYOUT ; ; SUBROUTINE BINARY TO OCTAL ASCII CONVERSION. ; INPUT: ; R3 = BINARY NUMBErCII /TM/ .WORD TIME-RELOC ; ADDRESS OF TIME .ASCII /DT/ .WORD DATE-RELOC ; ADDRESS OF DATE .ASCII /RE/ .WORD RESET-RELOC ; ADDRESS OF RESET .IFNZ NDISCS .ASCII /CM/ .WORD QCMPRS-RELOC ; QUEUE COMPRS .ASCII /AS/ .WORD QRASM-RELOC ; QUEUE ROS ASSEMBLER .ASCII /LD/ .WORD QROSLD-RELOC ; QUEUE ROSLOD .ASCII /DI/ .WORD QDINIT-RELOC ; QsBACK FCN AS WRITE IN LIST CLRB CDIFCN ; SET TO READ CORE DIRECTORY IMAGE MOV #CDILST,-(SP) JSR PC,DISCIO ; READ CORE DIRECTORY IMAGE INTO CORE DIR. IPLX30: CMP #1.,CDILST ; I/O COMPLETE? BNE IPLX30 ; NO-KEEP CHECKING MOVB #1.,CDIFCN ; RESET FCN IN LIST BACK TO WRITE CLRB $TKFLF ; SET UP TO READ TASK TABLE .IIF NZ $KT11C MOV #TKFLBF,$TKFLST+20 MOV #$TKFLt THE LINKAGE TO THIS INTERRUPT HANDLER * ;* IS VIA THE PDP-11'S HARDWARE/SOFTWARE INTERFACE: * ;* * ;* BR4 * ;* VECTOR = 244 * ;* * ;* PROGRAMMER 54 * ;* DATE u INPUT.S19 ; UPDATE 5/5/72 INPUT.S18 ; UPDATE 5/2/72 INPUT.S17 ; UPDATE 4/21/72 INPUT.S16 ; UPDATE 4/10/72 INPUT.S15 ; UPDATE 3/31/72 INPUT.S14 ; UPDATE 2/16/72 INPUT.S13 ; UPDATE 1/28/72 INPUT.S12 ; UPDATE 1/18/72 INPUT.S11 ; UPDATE 12/20/71 INPUT.S10 ; UPDATE 12/15/71 INPUT.S09 ; UPDATE 12/11/71 INPUT.S08 ; vUEUE DISC INIT. .ASCII /FL/ .WORD QFLST-RELOC ; QUEUE FILE LIST .IFNZ OVRLAY .ASCII /TI/ .WORD TSKINI-RELOC ; TASK INIT. .ENDC .ASCII /UT/ .WORD QUTIL-RELOC ; QUEUE UTILITY .ASCII /TC/ .WORD QTC-RELOC ; QUEU TASK C??? .IFNZ $BATCH .ASCII /BR/ ; BATCH FILE RESET .WORD BFINIT-RELOC ; BATCH FILE INIT. .ENDC .ENDC wS,-(SP) JSR PC,DISCIO ; READ TASK TABLE IPLX40: CMP #1.,$TKFLS ; I/O COMPLETE? BNE IPLX40 MOVB #3.,$TKFLF ; SET BACK AS WRITE WITH WRITE CHECK IPLX60 = . .ENDC JSR PC,SYSINI ; INIT. CORE TASK TABLES AND TASKS ; ; .IFNZ $KT11C ; ; SET UP KERNEL I SPACE, QUEUES AND ANYTHING ELSE ; NECESSARY FOR ROS WITH MEMORY MANAGEMENT ; .REF $INSTK,TMRQST .REF $STKx * ;* REVISION * ;* * ;*********************************************************************** .DEF RQUEST .REF QUEUE,RESTOR,SAVE .DEF LOGMAX,PHYDEV,ALTDEV ; ; .CSECT ; ; ; ; RQUEST = . JSR R5,SAVE ; SAVE ENVIRONMENT MOV #$y UPDATE 12/10/71 INPUT.S07 ; UPDATE 12/2/71 INPUT.S06 ; UPDATE 11/12/71 INPUT.S05 ; UPDATE 11/10/71 INPUT.S04 ; UPDATE 11/8/71 INPUT.S03 ; UPDATE 11/1/71 INPUT.S02 ; UPDATE 10/8/71 INPUT.S01 .TITLE INPUT ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. INPUT,z .ASCII /EX/ .WORD 0 ; EXIT FROM INPUT TASK .WORD 0 ; END OF TABLE ; .PAGE ; ; EQUATES FOR ASCII STRING ; ASCIIS = ASCII ; ASCII SIGN POSITION ASCII1 = ASCII+1. ; 10,000 POSITION ASCII2 = ASCII+2. ; 1,000 POSITION ASCII3 = ASCII+3. ; 100 POSITION ASCII4 = ASCII+4. ; 10 POSITION ASCII5 = ASCII+5. ; DIGIT POSITION ASCII6 = ASCII+6. {03 .REF STK04,STK05,STK06,STK07,STK08,STK09 .REF STK10,STK11 ; BR IPLX70 ; ; ; CTSKTB: .WORD $INSTK .WORD $STK03 .WORD STK04 .WORD TMRQST .WORD STK05 .WORD STK06 .WORD STK07 .WORD STK08 .WORD STK09 .WORD STK10 .WORD STK11 .WORD 0 ; KERNEL = . KERN20 = . MOV #CTSKTB,R0 KERN25: MOV (R|INPNO,-(SP) ; PUSH CLR -(SP) ; ARGUMENTS FOR QUEUE TST -(SP) ; ONTO CLR -(SP) ; STACK JSR PC,QUEUE ; QUEUE INPUT TST (SP)+ ; DISREGARD ERROR JMP RESTOR ; RESTORE ENVIRONMENT & EXIT ; ; PHYSICAL DEVICE TABLE ; LOGMAX: .WORD 12. ; LARGEST VALID LOGICAL DEVICE NO. PHYDEV: .WORD 040000 ; TTY 3 AVAL.,ALT. AVIL } CATALOG NO. ; * ;* OPERATOR INPUT PROCESSING. * ;* * ;* PURPOSE. THIS TASK WILL REQUEST AND ACCEPT OPERATOR REQUESTS * ;* FROM THE SYSTEM TTY; AND, IF PRECEDED BY A PROPER AUTHORIZATION* ;* CODE, THE REQUEST WILL BE PROCESSED. VALID OPERATOR REQUESTS, * ;* FORMAT AND FUNCTION ARE: * ;* ~; ADDRESS OF DIGITS POSITION + 1 .PAGE ; ; INPUT = . .IFNZ OVRLAY EMT NOCKPT ; SET INPUT NOT CHECKPOINTABLE .ENDC .IFNZ $KT11C EMT ROSGET ; GET INPUT'S ASR 4,5&6 TO POINT TO ROS .ENDC MOV #ACMSG-RELOC,DATADR ; AUTHORIZATION CODE REQUEST MOV #TTYLST-RELOC,-(SP) ; I/O LIST ADDRESS TO STACK EMT TTYOUT ; TYPE "AC:" - EXIT TYPE 2 MOV #10)+,R1 ; ADDRESS TO DIVIDE BY 64. BEQ KERN30 ; FINISHED CLR R2 MOV (R1),R3 DIV #64.,R2 ; DIVIDE MOV R2,(R1) BR KERN25 KERN30 = . MOV #077406,R0 ; PDR-4K, READ/WRITE ACESS MOV #$KPDR0,R1 MOV #8.,R2 ; THRU LOOP EIGHT TIMES KERN35: MOV R0,(R1)+ SOB R2,KERN35 ; SET UP KERNEL PDR'S MOV #$KPAR0,R1 ; R2 I .WORD 000400 ; DISC 0 AVAIL., NO ALT. .WORD 100000 .WORD 100000 .WORD 040001 ; TTY 1 AVAIL, ALT. AVAIL ; FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ALTERNATE DEVICE TABLE ; ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; .END * ;* FORMAT PROGRAM(SEGMENT)FUNCTION * ;* ************************************************************* * ;* CCCC INPUT INPUT OF AUTHORIZATION CODE * ;* EN,NNN ENABLE ENABLE SPECIFIED TASK * ;* DS,NNN DSABLE DISABLE SPECIFIED TASK * ;* QU,NNN QTASK QUEUE SPECIFIED TASK * ;* XX,NNN 00004,INBUF ; INPUT FOUR CHARACTER AUTHORIZATION MOV #INBUF-RELOC,DATADR ; CODE - NO ECHO MOV #TTYLST-RELOC,-(SP) EMT TTYIN ; GET AUTHORIZATION CODE TST INERR ; ERROR OR TIMEOUT OCCUR? BNE IPTA20 ; YES CMP #4.,NOCHAR ; 4 CHARACTERS INPUT? BNE IPTA20 ; NO-EXIT CLR ASCII ; CLEAR SIGN & 10,000 POSITION MOV BUFST,ASCII2 ; SET UP 1,0NITIALLY HAS 0 NOW MOV #4.,R0 ; THRU LOOP 4 TIMES KERN40: MOV R2,(R1)+ ; SET UP KERNEL PAR'S ADD #200,R2 ; INCREMENT NEXT PAR BY 4K SOB R0,KERN40 MOV #077406,$KPDR7 ; SET UP MOV #7600,$KPAR7 ; DEVICE PAGE INC @#177572 ; TURN ON KT11C RTS PC .ENDC IPLX70: CLR R0 CLR R1 CLR R2 CLR R3 CLR R4 * ;* * ;* CALL ERRTYP(MADDR) * ;* WHERE MADDR IS THE ADDRESS OF THE ERROR MODULE: * ;* * ;* WORD 0 = THREAD WORD * ; ;* WORD 1 = SYSTEM WORD * ;* WORD 2 = ERROR NUMBER TABORT ABORT SPECIFIED TASK * ;* TM,HH:MM TIME SET TIME-OF-DAY * ;* TM TIME TYPE TIME OF DAY * ;* DT,MM/DD/YY DATE SET DATE * ;* DT DATE TYPE DATE * ;* RE,YYY RESET RESET DEVICE AVAILABLE * ;* EX INPUT TERMINATE INPUT * ;* C/R 00 & 100 POSITION MOV BUFST+2,ASCII4 ; SET UP 10 & DIGIT POSITION MOV #ASCII-RELOC,-(SP) ; ASCII STRING ADDRESS EMT ASCBIN ; CONVERT ASCII TO BINARY MOV (SP)+,R1 ; GET CONVERTED A.C. TST (SP)+ ; CONVERSION ERROR OCCUR? BNE IPTA20 ; YES - EXIT MOV #AUTCOD-RELOC,R0 ; SEARCH AUTCOD TABLE FOR MATCH IPTA10: CMP (R0)+,R1 ; MATCH? BEQ IPTB00  CLR R5 MOVB #200,PSBENB ; ENABLE MANUAL PUSHBUTTON INTERRUPT JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; ; .IFNZ OVRLAY ; ; ; ; ENDDYN = . - 2 ; TOP ADDRESS OF DYNAMIC CORE POOL ; SSTACK = ENDDYN - $DYNSZ ; TOP STACK ADDRESS FOR ROS II & III ; BEGDYN = SSTACK ; LOWEST ADD. OF DYNAMIC CORE POOL. ; ; ; THIS IS FOR ROS II/45 ONLY BEGDYN = 160000 ; BEG. OF DY * ;* WORD 3 = ARGUMENT 1 * ;* WORD 4 = ARGUMENT 2 * ;* WORD 5 = ARGUMENT 3 * ;* WORD 6 = ARGUMENT 4 * ;* * ;* THE ARGUMENTS WILL BE TYPED AS SIX CHARACTER * ;* OCTAL NUMBERS. IF ANY ERRORS OCCURS, THEY TERMINATE INPUT * ;* * ;* WHERE: CCCC IS FOUR-DIGIT AUTHORIZATION CODE * ;* NNN IS A 1-3-DIGIT TASK NUMBER * ;* HH IS TWO-DIGIT HOUR * TIME * ;* MM IS TWO-DIGIT MINUTE * TIME * ;* MM IS TWO-DIGIT MONTH * DATE * ;* ; YES - CONTINUE TST (R0) ; END OF TABLE? BPL IPTA10 ; NO- KEEP-A- SEARCHIN' IPTA20: EMT EXIT ; EXIT FROM TASK ; ; MESSAGE INTERPRETER ; IPTB00 = . MOV #TTRLST-RELOC,-(SP) ; TTY I/O LIST FOR READY MSG EMT TTYOUT ; TYPE "? " WITH EXIT TYPE 1 MOV #MXCHIN,INBUF ; SET TO INPUT OPERATOR COMMAND MOV #INBUF-RELOC,DATADR ; SET BUFFER ADDRESS IN LIST CLR ; UPDATE 9/25/72 IPL3.S41 ; UPDATE 9/25/72 IPL3.S40 ; UPDATE 9/25/72 IPL3.S39 DON'T FORCE OVRLAY=0 ANYMORE ; UPDATE 9/23/72 IPL3.S38 ; UPDATE 9/23/72 IPL3.S37 ; UPDATE 9/21/72 IPL3.S36 ******FORCE OVRLAY TO BE 0 ; UPDATE 9/21/72 IPL3.S35 ; UPDATE 9/21/72 IPL3.S34 ; UPDATE 8/18/72 IPL3.S33 ; UPDATE 8/15/72 IPL3.S32 ; UPDATE 8/8/72 * ;* WILL BE IGNORED. * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;***************************************** DD IS TWO-DIGIT DAY * DATE * ;* YY IS TWO-DIGIT YEAR * DATE * ;* YYY IS A 1-3 DIGIT LOGICAL DEVICE NO. * ;* * ;* END OF MESSAGE WILL BE A CARRIAGE RETURN. * ;* * ;* PROGRAM USAGE. INPUT WILL BE CONSTRUCTED SUCH THAT * BUFST+2 ; RESET DELIMITER POSITION MOV #TTYLST-RELOC,-(SP) ; TTY I/O LIST TO STACK EMT TTYIN ; WAIT FOR COMMAND TST INERR ; TIME-OUT OCCUR BNE IPTA20 ; YES- CANCEL THIS TASK MOV #NOCHAR-RELOC,R5 ; SIZE OF INPUT MESSAGE ADDRESS MOV (R5)+,R4 ; GET NO. CHARACTERS INPUT BEQ IPTA20 ; CARRIAGE RETURN-EXIT SUB #2.,R4 ; MUST BE AT LEA IPL3.S31 ; UPDATE 8/7/72 IPL3.S30 ; UPDATE 8/4/72 IPL3.S29 ; UPDATE 8/1/72 IPL3.S28 ; UPDATE 6/22/72 IPL2.S27 ; UPDATE 5/17/72 IPL2.S26 ; UPDATE 5/16/72 IPL2.S25 ; UPDATE 5/16/72 IPL2.S24 ; UPDATE 5/5/72 IPL2.S23 ; UPDATE 5/2/72 IPL2.S22 ; UPDATE 4/17/42 IPL2.S21 ; UPDATE 4/14/72 IPL2.S20 ; UPDATE 4/12/72 ****************************** .DEF ERRTYP,LERTYP,BIN2OC,B2ONTA .REF PUSHR,POPR,BINASC,TTYOUT .REF RELTSK,IOSTAT .IFNZ $KT11C .REF $CTASK,PPASV5,PPASV6,SVPPA .ENDC ; .CSECT ; ; THE FOLLOWING IS THE FIRST AND LAST DIRECTORY FOR THE ; ERROR TYPE THREAD ; .QUE QFRST,QLST,1 QFIRST = QFRST+4 QLAST = QLST+4 ; ; ; THE FOLLOWING TABLE IS THE I/O LIST FOR THE ; ERROR MESSAG ;* IF IN A DISC SYSTEM, IT WILL BE AN OVERLAY * ;* TASK WITH SEGMENTS. INPUT IS PLACED IN THE ROS * ;* SOFTWARE TASK QUEUE WHENEVER A "REQUEST" INTERRUPT * ;* OCCURS. IF WHILE WAITING FOR INPUT, TTY MAX SECONDS * ;* HAVE ELAPSED, INPUT WILL BE ABORTED. IT WILL BE NECESSARY * ;* FOR THE OPERATOR TO REQUEST AGAIN. * ;* ST TWO BMI IPTB20 ; CHARACTERS OR ERROR DEC R4 ; R4= # CHARS. IN PARAMETER MOV #OPCOMM-RELOC,R3 ; ADDRESS OF OPCOMM TO R3 FOR IPTB10: CMP (R5),(R3)+ ; OPERATOR COMMAND CODE SEARCH BEQ IPTC00 ; FOUND IT TST (R3)+ ; BUMP TO NEXT POSSIBLE COMMAND TST (R3) ; END OF TABLE? BNE IPTB10 ; NO- KEEP LOOKING IPTB20: MOV #ER1MSG-RELOC,DA IPL2.S19 ; UPDATE 4/10/72 IPL2.S18 ; UPDATE 4/5/72 IPL2.S17 ; UPDATE 3/23/72 IPL2.S16 ; UPDATE 3/21/72 IPL2.S15 ; UPDATE 3/20/72 IPL2.S14 ; UPDATE 3/17/72 IPL2.S13 ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.E TYPE-OUT. ; .BOUND IOLIST = . .WORD 1 ; THREAD WORD .BYTE SYSTTY ; LOGICAL DEVICE-SYSTEM TTY .BYTE 3 ; EXIT TYPE 3 .WORD TTYNXT ; I/O COMPLETE SUBROUTINE .BYTE 0 ; DON'T QUEUE ERROR TASK .BYTE 1 ; USE PRIORITY TYPE-OUT QUEUE .WORD 0,0 ; TWO SYSTEM USE WORDS .WORD TYPBUF ; ADDRESS OF OUTPUT BUFFER * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;*********************************************************************** .DEF INPUT,OPCOMR,ER3MSG,DATADR,TTYLST,INPTHD .DEF TTRLST .REF ENABLE,DSABLE,QTASK .RTADR ; YES-REPORT ERROR IPTB21: MOV #TTYLST-RELOC,-(SP) ; TTY I/O LIST TO STACK EMT TTYOUT ; TYPE "ILL CMD!" BR IPTB00 ; REQUEST AGAIN ; ; TRANSFER TO APPROPRIATE PROCESSOR. ; CALLING SEQUENCE: ; JSR PC, PROCES ; WHERE R5 = ADDRESS OF COMMAND STRING ; DELIMITER POSITION ; R4 = NO. OF CHARACTERS IN PARAMETER ; S07 ; UPDATE 12/2/71 IPL.S06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11/15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* .WORD TYPBUF,0 ; ; THE FOLLOWING IS THE MESSAGE STRING USED BY TTYOUT ; TYPBUF = . .WORD 41. ; NO. OF CHARACTERS TO OUTPUT .WORD 0 ; USED BY TTYOUT .BYTE 15 ; START OFF WITH CR/LF .ASCII /ERROR/ EDIT1: .ASCII / XXXXX/ .BYTE 15 .ASCII /XXXXX/ ; ARG 1 EDIT2: .ASCII /X/ .BYTE 15 .ASCII /XXXXX/ ; ARG 2 EDIT3: .ASCII /X/ .BYTE 15EF TABORT,TIME,DATE .REF IOSTAT,TPRTY,HEADER .REF RESET,TSTAT,TASKS TTYOUT = 13 TTYIN = 14 ASCBIN = 17 BINASC = 16 EXIT = 4 NOCKPT = 30 QUEUE = 1 ABORT = 6 ROSGET = 56 ; .CSECT ; NSIZE = 50. ; TASK STACK SIZE ; ; MXCHIN = 24. ; MAXIMUM NO. CHAR. DURING INPUT .PAGE .IFZ OVRLAY ; .TITLE $$TSK1 ; TASK HEADER IF LESS THAN 0-NONE ; IPTC00 = . TST (R3) ; IF ZERO- EX..IT COMMAND BEQ IPTA20 ; YES, GOOD-BY TST (R5)+ ; R5 = ADDRESS OF DELIMITER POSITION JSR PC,@(R3)+ ; PERFORM COMMAND PROCESS - INC. TO SAVE WORD ; ; RETURN FROM OPERATOR COMMAND PROCESSORS HERE ; OPCOMR = . TST R5 ; DID AN ERROR OCCUR BNE IPTB00 ; NO-SEND READY FOR ANOTHERTHEN EXIT TO DISPATCH. THIS MODULE SHOULD BE EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST TIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* CT .SYSIN ; HDRTBL = . .WORD CMPRHD .WORD FLSTHD .WORD RASHED .WORD LODHED .WORD INPTHD .WORD INIDSC .WORD TIMERQ .WORD TASK4 .WORD TASK5 .WORD TASK6 .WORD TASK7 .WORD TASK8 .WORD TASK9 .WORD TASK10 .WORD TASK11 ; ; TNOTBL = . .WORD $CPTNO .WORD $FLTNO .WORD $RASNO .WORD FOR NON-OVERLAYED INPUT ; ; ; INPTHD = . .WORD 1 ; THREAD WORD .WORD $INPNO ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD INPUT-RELOC ; ENTRY POINT .WORD 0 ; MAX TIME .WORD 0 ; CURRENT TIMER .WORD NSIZE ; TASK STACK SIZE .WORD 0,0,0 ; RESERVED .IFNZ $KT11C REQUEST MOV #ER2MSG-RELOC,DATADR ; TYPE 'ILL PAR!' BR IPTB21 ; ; ;*********************************************************************** ;* * ;* RESET LOGICAL DEVICE AVAILABLE IN ROS PHYSICAL DEVICE TABLE. * ;* TO BE FUTHER DOCUMENTED AFTER ROS 1 DEMO. * ;* * ;************************************* .ASCII /XXXXX/ ; ARG 3 EDIT4: .ASCII /X/ .BYTE 15 .ASCII /XXXXX/ ; ARG 4 EDIT5: .ASCII /X/ .BYTE 15 .EVEN ; ; THE FOLLOWING EDIT TABLE IS USED TO POINT TO 6 BYTE ASCII ; STRINGS IN THE MESSAGE INTO WHICH BINASC OR BIN2OC ; WILL PUT THE CONVERTED RESULTS. ; EDITBL = . .WORD EDIT1 ; POINTER FOR ERROR NUMBER .WORD EDIT2 ; FPOINTER FOR FIRST ARGUMENT $RLDNO .WORD $INPNO .WORD $INITD .WORD $TMRNO .WORD 4. .WORD 5. .WORD 6. .WORD 7. .WORD 8. .WORD 9. .WORD 10. .WORD 11. ; ; NOSYST = 15. ; NO. OF TASKS IN TABLE TO INITIALIZE NOSYSI = NOSYST+NOSYST ; INDEX OF ABOVE PRIOR = 5. ; TASK PRIORITY IN HEADER ; ; SYSINI = . JSR PC,QIPL ; INIT. .WORD 013406 ; PDR 0 27 BLOCKS, READ/WRITE ACCESS .WORD 0,0,0,0,0,0 ; PDR'S 1-6 NON-EXISTENT .WORD 077406 ; PDR 7, DEVICE REGISTERS, READ/WRITE ; ; NEXT ARE THE PAR'S ; .DEF $INSTK $INSTK: .WORD TSTACK ; PAR0-RESOLVE BY IPL (TSTACK/64.) .WORD 0,0,0,0,0,0 ; PAR'S 1-6 NON-EXISTENT .WORD 7600 ; PAR 7, DEVICE REGISTER BASE ADDRESS . = .+12. ; FORCE LOCATION COUN********************************** .DEF RESET .REF LOGMAX,PHYDEV,CVTBIN ; ; COMMA = 54 ; ASCII COMMA ; RESET = . JSR PC,RES010 ; GET LOGICAL UNIT CMP R4,@#LOGMAX+$ROSM ; VALID LOGICAL DEVICE? BGT RESERR ; NO-ERROR ASL R4 ; COMPUTE WORD INDEX BIC #120000,PHYDEV+$ROSM(R4) ; SET DEVICE NOT AVAILABLE ; ; ALTERN.WORD EDIT3 ; POINTER FOR SECOND ARGUMENT .WORD EDIT4 ; POINTER FOR THIRD ARGUMENT .WORD EDIT5 ; POINTER FOR FOURTH ARGUMENT .WORD 0 ; END OF TABLE ; ; EXITSW: .WORD 0 ; EXIT SWITCH. 0=SUBROUTINE EXIT ; ; 1=I/O COMPLETE SUB EXIT IOLUSE: .WORD -1. ; I/O LIST IN USE SWITCH ; ; NO. OF REQUESTS ; ; SPACE = TASK TABLE MOV #-NOSYSI,R0 ; LOOP CONTROL AND INDEX SYSI00: MOV HDRTBL+NOSYSI(R0),R1 ; GET A HEADER ADDRESS BEQ SYSI20 ; NOT IN CORE-FORGET MOV TNOTBL+NOSYSI(R0),R2 ; GET TASK'S NUMBER CLRB TSTAT(R2) ; SET TASK QUIESCENT MOVB PRIOR(R1),TPRTY(R2) ; SET PRIORITY DEFAULT CMP R2,TASKS BLE SYSI10 MOV R2,TASKS SYSI10: ASL R2 ; TASK NO. WORD INDEX .ITER BACK ; ; TO 32-WORD BOUNDARY. .ENDC .IFZ $KT11C RELOC = 0 .ENDC .IFNZ $KT11C RELOC = . .ENDC .ENDC TSTACK = . . = TSTACK+NSIZE+NSIZE ; ; THE FOLLOWING IS USED FOR ASCII TO BINARY CONVERSIONS ; ASCII = . .BYTE 0,0,0,0,0,0 ; ASCII STRING STORAGE ; .IFNZ NDISCS .IFNZ $BATCH ; ; BFUP COMMUNICATIONS BLATE NOT IN USE RTS PC ; RETURN TO CALLER ; ; RES010: CMPB (R5)+,#COMMA ; DELIMETER A COMMA? BNE RSERR ; NO-ERROR TST R4 ; PARAM. MUST BE 1-3 CHARS. BEQ RSERR CMP R4,#3. BHI RSERR JSR PC,CVTBIN ; CONVERT TO BINARY INTEGER TST R5 BEQ RSERR ; CONVERSION ERROR RTS PC ; ; ERROR OCCURED ; RSERR = 40 ; ASCII SPACE ; ; THE FOLLOWING EQUATES ARE FOR THE ERROR MODULE ; THREAD = 0. ; THREAD WORD SYSTEM = 2. ERRNUM = 4. ; ERROR NUMBER ARGM1 = 6. ; ARGUMENT 1 ARGM2 = 8. ; ARGUMENT 2 ARGM3 = 10. ; ARGUMENT 3 ARGM4 = 12. ; ARGUMENT 4 ; ; PLOCK = 340 ; PRIORITY LOCK-OUT MASK FOR PSR PSR = 177776 ; ADDRESS OF FNZ $KT11C CLC ROR R1 ; MAKE CLC ROR R1 ; PPA .ENDC MOV R1,HEADER(R2) ; HEADER ADDRESS SYSI20: ADD #2.,R0 ; BUMP INDEX BLT SYSI00 ; DO FOR ALL .IFNZ NDISCS .REF $TKFLS,PFRITE MOV #$TKFLS,-(SP) ; WRITE TASK TABLE ON DISC JSR PC,PFRITE .ENDC RTS PC ; RETURN TO IPL ; ; OCK ; BFBLCK = . .WORD 0 ; ERROR WORD .WORD $BCHID ; BATCH FILE ID .WORD 0,0 ; ELEMENT NAME .WORD 1 ; FORCE INIT. .WORD 0,0 ; NOT USED BY BFINIT ; .ENDC .ENDC .PAGE ; ; THE FOLLOWING LIST IS THE I/O PARAMETER LIST USED FOR ; TTY I/O ; .BOUND TTYLST = . .WORD 1 ; THREAD WORD .BYTE . TST (SP)+ ; POP STACK RESERR = . CLR R5 ; SET ERROR GUY RTS PC ; RETURN ; .IFNZ NDISCS ; ; ; THE FOLLOWING ARE USED TO QUEUE ROS SYSTEM TASKS ; QCMPRS = . ; QUEUE COMPRS JSR PC,RES010 ; GET FILE TYPE MOV #$CPTNO,-(SP) ; COMPRESS TASK NO. TO STACK QCMP20 = . CLR -(SP) ; USE PRIORITY IN TASK TABLE PROCESSOR STATUS REGISTER ; TEMP: .WORD 0 ; TEMPORARY SAVE AREA FOR LERTYP ; ; LERTYP IS CALLED TO TYPE AN ERROR MESSAGE UNDER LOCKOUT. ; MOV PSR,-(SP) ; MOV MADDR,-(SP) ; JSR PC,LERTYP ; ; LOCKOUT WILL BE RELEASED UPON THREADING THE ERROR MODULE ; LERTYP = . MOV 2.(SP),TEMP ; SAVE MODULE ADDRESS UNDER LOCKOUT MOV (SP)+, .END SYSTTY ; LOGICAL DEVICE .BYTE 2 ; USE EXIT TYPE #2 -ALL TTY I/O .WORD 0 ; NO I/O COMPLETE ROUTINE .BYTE 0 ; NO ERROR TASK NO. .BYTE 1 ; USE TTY PRIORITY QUEUES INERR: .WORD 0 ; FOR SYSTEM USE - SYSTEM .WORD 0 ; FOR SYSTEM USE - SYSTM2 DATADR: .WORD 0 ; WILL CONTAIN ADDRESS OF DATA BUFFER .WORD 0,0 ; ; INPUT TTY INPUT MOV R4,-(SP) ; PASS FILE TYPE AS ARGUMENT CLR -(SP) ; IMMEDIATE RETURN REQUESTED EMT QUEUE TST (SP)+ ; POP ERROR WORD BGT RESERR ; ERROR EMT EXIT ; EXIT FROM INPUT ; ; QRASM = . ; QUEUE RASM MOV #$RASNO,-(SP) BR QCMP20 ; ; QROSLD = . ; QUEUE ROS LOADER MOV #$RLDNO,-(SP) BR QCMP20(SP) ; FOR PROPER RETURN JSR R5,PUSHR ; SAVE ALL REGISTERS .IFNZ $KT11C MOV $KPAR5,-(SP) MOV $KPAR6,-(SP) .ENDC MOV 14.+4*$KT11C(SP),-(SP) ; PUT PSR ON STACK SO COMPATABLE MOV TEMP,R5 ; ADDRESS OF MODULE BR ERRA05 ; DO IT ; ERRTYP = . JSR R5,PUSHR ; SAVE ALL REGISTERS .IFNZ $KT11C MOV $KPAR5,-(SP) MOV $KPAR6,-R ; R2 = DESTINATION END ADDRESS ; R0 = ITERATION LENGTH IF B2ONTA ENTERED ; BIN2OC = . MOV #6,R0 ; SET UP ITERATION LENGTH B2ONTA: INC R2 B2LOOP: MOVB R3,-(R2) BICB #370,(R2) BISB #060,(R2) ; CHANGE TO ASCII CODE ASR R3 ; BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R3 ; PREVENT SIGN PROPAGATION ASR R3 ASR R3 BUFFER ; INBUF = . .WORD MXCHIN ; MAXIMUM INPUT RESPONSE NOCHAR: .WORD 0 ; USED BY TTYIN BUFST = . ; MESSAGE STARTS HERE .BYTE 0,0,0,0,0,0,0,0,0,0 ; ADD .BYTE 0,0,0,0,0,0,0,0,0,0 ; MORE .BYTE 0,0,0,0,0,0,0,0,0,0 ; IF .BYTE 0,0,0,0,0,0,0,0,0,0 ; GREATER .BYTE 0,0,0,0,0,0,0,0,0,0 ; THAN 50 REQUIRED . = BUFST+MXCHIN ; DELETE THOSE NOT NEED ; ; QUTIL = . MOV #$UTLNO,-(SP) BR QCMP20 ; ; QTC = . MOV #$TKCNO,-(SP) BR QCMP20 ; ; QDINIT = . ; QUEUE DISC INITIALIZER MOV #$INITD,R0 ; GET TASK NUMBER CLRB TSTAT+$ROSM(R0) ; SET TASK QUIESCENT MOV R0,-(SP) ; TASK NUMBER TO STACK BR QCMP20 ; ; QFLST = . CMPB (R5)+,#COMMA ; DELIM A COMMA BNE(SP) .ENDC MOV 14.+4*$KT11C(SP),R5 ; GET MODEL ADDRESS MOV @#PSR,-(SP) ; SAVE PROCESSOR PRIORITY ON STACK ERRA05 = . .IFNZ $KT11C MOV R5,-(SP) JSR PC,SVPPA MOV (SP)+,R4 ; PPA OF MODULE .ENDC .LOCK DEC (R5) ; IS MODULE THREADABLE BNE ERRA30 ; NO - BUMP BACK AND RETURN TO CALLER .IFZ $KT11C MOV R5,@QLAST DEC R0 ; MORE TO GO ? BGT B2LOOP ; YES RTS PC ; NO- FINISHED ; ; .END ED .EVEN ; ; THE FOLLOWING LIST IS THE I/O LIST FOR THE READY MESSAGE ; PRINTOUT WITH AN EXIT TYPE ONE SO AN EXIT TYPE 2 REQUEST ; CAN BE MADE IMMEDIATELY AFTERWARDS.***UNTIL WE CAN ; COMMAND CHAIN LISTS ON TTY. ; .BOUND TTRLST = . .WORD 1 ; THREAD WORD .BYTE SYSTTY ; LOGICAL DEVICE .BYTE 1 ; USE EXIT TYPE 1 .WORD 0 ; NO I/O COMPLETE REOUTINE QFLST1 ; NO-LIST ALL FILE TYPES .IFNZ $BATCH CMPB (R5),#'B ; BATCH LIST? BEQ QFLST3 ; YES DEC R5 ; BUMP BACK .ENDC JSR PC,RES010 ; GET FILE TYPE TST R4 BEQ RESERR ; TYPE 0 ILLEGAL FOR FLMGMT CMP R4,#$FTMAX BGT RESERR ; NOT VALID FOR THIS SYSTEM QFLST2: MOV #$FLTNO,-(SP) ; FILE LIST TASK NO. TO STACK ; THREAD REQUEST MOV R5,QLAST ; VIA QLAST .ENDC .IFNZ $KT11C MOV QLAST,-(SP) JSR PC,PPASV6 ; GET LAST SVA MOV R4,@(SP)+ ; THREAD MODULE MOV R4,QLAST ; VIA QLAST .ENDC MOV $CTASK,R3 ; TASK NO. MOV R3,SYSTEM(R5) ; SAVE BEQ ERRA08 INCB IOSTAT(R3) ; SET IOSTAT ERRA08 = . INC IOLUSE ; BU; UPDATE 8/15/72 ASCBIN.S08 ; UPDATE 8/10/72 ASCBIN.S07 ; UPDATE 8/8/72 ASCBIN.S06 ; UPDATE 8/4/72 ASCBIN.S05 ; UPDATE 4/4/72 ASCBIN.S04 ; UPDATE 11/8/71 ASCBIN.S03 ; UPDATE 10/8/71 ASCBIN.S02 ; UPDATE 9/15/71 ASCBIN.S01 .TITLE ASCBIN ;*********************************************************************** ; ; ASCBIN, CATALOG NUMBER ,ASCII ; .BYTE 0 ; NO ERROR TASK NUMBER .BYTE 1 ; USE TTY PRIORITY QUEUES .WORD 0 ; SYSTEM .WORD 0 ; SYSTM2 .WORD RDYMSG-RELOC ; READY MESSAGE '? ' .WORD 0,0 ; ; AUTHORIZATION CODE REQUEST MESSAGE ; ACMSG = . .WORD 5. .WORD 0 .BYTE 15 .ASCII /AC:/ .BYTE 15 ; CARRIAGE RETURN .EVEN ; ; READY RESPONS BR QCMP20 ; QUEUE FLIST QFLST1: CLR R4 ; LIST ALL BR QFLST2 .IFNZ $BATCH QFLST3: MOV #-1.,R4 ; LIST BATCH ELEMENTS BR QFLST2 .ENDC ; ; .IFNZ $BATCH ; ; BATCH FILE INITIALIZER ; BFINIT = . MOV #BFBLCK-RELOC,-(SP) ; COMM. BLOCK ADDRESS EMT 30. ; INITIALIZE DIRECTORY FOR BFUP TST BFBLCK ; ERROR? BNE MP NO. OF REQUESTS BEQ ERRB00 ; FIRST ONE - LET'S DO IT ERRA10: MOVB (SP)+,@#PSR ; RESTORE CPU PRIORITY ERRA20 = . .IFNZ $KT11C MOV (SP)+,$KPAR6 MOV (SP)+,$KPAR5 .ENDC JSR R5,POPR ; RESTORE REGISTERS MOV (SP)+,(SP) ; SET STACK UP FOR VALID RETURN RTS PC ; RETURN TO CALLER ; ; CAN'T THREAD ERROR MODULE ; ERRA30 = . INC (R5) TO BINARY CONVERSION SUBROUTINE. ; ; THIS SUBROUTINE WILL CONVERT A SIGNED 5 ; INTEGER ASCII DECIMAL STRING STORED IN A ; SIX BYTE ARRAY, SPECIFIED BY THE CALLING ; PROGRAM, TO A SIGNED BINARY INTEGER OF ; 15-BITS AND SIGN(16-BIT COMPUTER WORD). ; A VALIDITY CHECK WILL BE MADE ON EACH ; BYTE TO DETERMINE IF WITHIN THE RANGE ; 0 THRU 9. ; CALLING SEQUENCE: ; ; MOV #STRING,-(SP) ; ; EMT ASCBIN ; E ; RDYMSG = . .WORD 3. .WORD 0 .BYTE 15 .ASCII /? / ; ? SPACE .EVEN ; ; ILLEGAL COMMAND ERROR MESSAGE ; ER1MSG = . .WORD 9. .WORD 0 .ASCII /ILL CMD!/ .BYTE 15 .EVEN ; ; ILLEGAL PARAMETER ERROR MESSAGE ; ER2MSG = . .WORD 9. .WORD 0 .ASCII /ILL PAR!/ .BYTE 15 .EVEN ; ; CANNOT PERFORM FCN BECA RESERR ; YES RTS PC ; .ENDC ; .IFNZ OVRLAY ; ; RESET ALL OVERLAY TASK TABLES TO UNUSED CONDITION ; TSKINI = . MOV #OVTMIN,R0 ; SET BYTE BASE INDEX INTO TASK TABLES MOV #OVTMIN+OVTMIN,R1 ; SET WORD INDEX TIA10: MOVB #6.,TSTAT+$ROSM(R0) ; DISABLE TASK CLRB IOSTAT+$ROSM(R0) ; CLEAR THE I/O STATUS CLRB TPRTY+$ROSM(R0) ; CLEAR THE PRIORITY MOV #1,HEAD ; SET BACK THREAD WORD BR ERRA10 ; RETURN ; ; FIRST REQUEST - START MESSAGE ; ERRB00 = . CLR EXITSW ; CLEAR EXIT SWITCH FOR GOOD RETURN ERRB10 = . .IFZ $KT11C MOV QFIRST,R5 ; GET NEXT REQUEST .ENDC .IFNZ $KT11C MOV QFIRST,-(SP) JSR PC,PPASV5 ; GET REQUEST'S SVA MOV (SP)+,R5 .ENDC BEQ ERRB30 ; NO REQ MOV (SP)+,INTGR ; TST (SP)+ ; BNE ERROR ; ; ; WHERE: #STRING=ADDRESS OF ASCII BYTE STRING ; INTGR=LOCATION TO PUT BINARY INTEGER ; ; ASCII SPACES OR BINARY ZEROS ARE VALID IN LEADING ; NON-SIGNIFICANT POSITIONS. REGISTERS R0 THRU ; R5 ARE SAVED IN THE STACK AREA (SP) AND RE- ; STORED UPON EXIT. ; ; UPON RETURN IF ERROR WORD, PUSHED ON STACK BY ASCBIN, ; NOT = 0, A CONVERSION EUSE TASK Q'ED OR ACTIVE ; ER3MSG = . .WORD 14. .WORD 0 .ASCII /NON-QUIESCENT/ .BYTE 15 .EVEN ; .PAGE ; ; AUTHORIZATION CODE TABLE ; ; ; AUTHORIZATION CODE ASSIGNMENTS ; AC0000 = 0. AC0001 = 1. AC0002 = 2. AC0003 = 3. AC0004 = 4. AC0005 = 5. AC0006 = 6. AC0007 = 7. AC0008 = 8. AC0009 = 9. AC0010 = 10. AC0011 = 11. AC0012 =ER+$ROSM(R0) ; SET HEADER TO NON-EXISTENT TST (R1)+ ; BUMP TO NEXT WORD INC R0 ; AND TO NEXT BYTE CMP R0,#TASMAX ; DONE? BLE TIA10 ; NO .REF $TKFLS MOV #$TKFLS+$ROSM,-(SP) EMT PFRITE RTS PC .ENDC .ENDC ;*********************************************************************** ;* UESTS LEFT MOV (R5)+,QFIRST ; PULL THREAD, RELINK, R5=ADDR. ERRNUM BNE ERRB15 MOV #QFIRST,QLAST ; PULLED LAST REQUEST-RESET QLAST .IFNZ $KT11C CLC ROR QLAST ; CALCULATE CLC ROR QLAST ; PPA .ENDC ERRB15: MOVB (SP),@#PSR ; RESTORE CPU PRIORITY MOV #EDITBL,R4 ; ADDRESS OF MESSAGE EDIT TABLE MOV (R5)+,-(SP) ; INTEGER TO STACK ANRROR OCCURRED. ; ; ; PROGRAMMER 54 ; DATE ; REVISION ; ;*********************************************************************** .DEF ASCBIN .REF PUSHR,POPR .IFNZ $KT11C .REF $CTASK,TVSV5 .ENDC ; .CSECT ; ; ; SPACE=40 ZERO=60 MINUS=55 NINE=9. ; ; ASCBIN = . TST -(SP) ; PUSH ONE MORE WORD ON STACK JSR R5, PUSHR ; SAVE REG 12. AC0013 = 13. AC0014 = 14. AC0015 = 15. AC0016 = 16. AC0017 = 17. AC0018 = 18. AC0019 = 19. AC0020 = 20. ; ; EXPAND IF MORE THAN 20 ASSIGNMENTS ; AUTCOD = . .WORD AC0000 .WORD AC0001 .WORD AC0002 .WORD AC0003 .WORD AC0004 .WORD AC0005 .WORD AC0006 .WORD AC0007 .WORD AC0008 .WORD AC0009 .WORD AC001 * ;* PROGRAM IDENTIFICATION. CVTBIN, CATALOG NO. ; * ;* CONVERT ASCII TTY INPUT STRING TO BINARY INTEGER. * ;* * ;* PURPOSE. THIS SUBROUTINE WILL SERVE AS A UTILITY FOR * ;* THE OPERATOR INPUT PROCESSORS. IT WILL CONVERT THE * ;* NUMBER OF ASCII BYTES SPECIFIED (MAX. 5 + SIGN) TO A * ;* BINARY INTEGER VIA ASCBIN. D BUMP POINTER MOV (R4)+,-(SP) ; EDIT STRING ADDRESS TO STACK JSR PC,BINASC ; CONVERT ERROR NO. TO ASCII ; ; BYTE STRING ERRB20: MOV (R5)+,R3 ; BINARY NO. MOV (R4)+,R2 ; DESTINATION END ADDRESS JSR PC,BIN2OC ; BINARY TO OCTAL FOR ARGS. TST (R4) ; BUMP EDIT POINTER BNE ERRB20 ; NO - AGAIN MOVB #SPACE,EDIT1 ; WIPE OUT SIISTERS ON STACK .IFNZ $KT11C MOV $KPAR5,-(SP) ; SAVE .ENDC MOV 16.+2*$KT11C(SP),R1 ; ADDRESS OF STRING TO POSITION POINTER MOV 14.+2*$KT11C(SP),12.+2*$KT11C(SP) ; ; SET STACK UP FOR RETURN AND 2 PARAM. PASS .IFNZ $KT11C MOV $CTASK,-(SP) ; TASK NO. OF CALLER MOV R1,-(SP) ; TASK VIRTUAL ADDRESS JSR PC,TVSV5 MOV (SP)+,R1 ; SVA 0 .WORD AC0011 .WORD AC0012 .WORD AC0013 .WORD AC0014 .WORD AC0015 .WORD AC0016 .WORD AC0017 .WORD AC0018 .WORD AC0019 .WORD AC0020 ; .= AUTCOD+ACTSIZ+ACTSIZ ; USE ONLY AMOUNT NEEDED .WORD -1. ; END OF TABLE .PAGE ; ; OPERATOR COMMAND TABLE - EITHER CONTAINS ADDRESSES OF ; COMMAND PROCESSORS OR SEGMENT NUMBERS DEPENDING ON ; WHETHER * ;* * ;* PROGRAM USAGE. CVTBIN IS CALLED VIA: * ;* * ;* JSR PC, CVTBIN * ;* WHERE: * ;* R5 = ADDRESS OF FIRST CHARACTER IN * ;* INPUT STRING TO CGN IN ERRNUM; SUB #12.,R5 ; R5 = THREAD WORD ADDRESS .LOCK MOV #1.,(R5) ; SET THREADABLE MOV SYSTEM(R5),R1 ; TASK NO. BEQ ERRB24 DECB IOSTAT(R1) ; RESET .IFNZ OVRLAY BNE ERRB24 MOV (SP),@#PSR ; RESET PRIORITY LOCKOUT MOV R1,-(SP) ; TASK NO. TO STACK JSR PC,RELTSK .ENDC ERRB24 = . MOVB (SP)+,@#PSR ; M .ENDC TSTB (R1)+ ;BUMP TO 10,000 POSITION MOV #5,R0 ;SET POSITION INDEX FOR LOOP CLR R5 ; CLEAR BINARY INTEGER ACCUM. ATB010: MOVB (R1)+,R4 ; GET ASCII BYTE AND BUMP BEQ ATB020 ;IF BINARY ZERO-SUPPRESS CMPB #SPACE,R4 ;IF ASCII SPACE-SUPPRESS BNE ATB105 ;SIGNIFICANT-START CALCULATION ATB020: DEC R0 ; FINISHED WITH STRING BNE AOR NOT INPUT IS AN OVERLAY TASK ; OPCOMM = . .ASCII /EN/ .WORD ENABLE-RELOC ; ADDRESS OF ENABLE .ASCII /DS/ .WORD DSABLE-RELOC ; ADDRESS OF DSABLE .ASCII /QU/ .WORD QTASK-RELOC ; ADDRESS OF QTASK .ASCII /XX/ .WORD TABORT-RELOC ; ADDRESS OF TABORT .ASCII /TM/ .WORD TIME-RELOC ; ADDRESS OF TIME .ASCII /DT/ .WORD DATE-RELOC ; ADDRESS OF DATE ONVERT. * ;* R4 = NUMBER OF CHARACTERS TO CONVERT. * ;* * ;* UPON RETURN R4 = BINARY INTEGER * ;* * ;* HOWEVER IF R5 = 0, AN ERROR OCCURRED DURING THE * ;* CONVERSION. REGISTERS R0-R3 WILL NOT BE DESTROYED * ;* AKE SURE RESET MOV #IOLIST,-(SP) ; I/O LIST ADDRESS ON STACK FOR TTYOUT JSR PC,TTYOUT ; TYPE ERROR MESSAGE ERRB25: TST EXITSW ; CALLED FROM I/O COMPLETE? BEQ ERRA20 ; NO - RETURN TO CALLER RTS PC ; YES-RETURN TO TTYOUT ; ; I/O COMPLETE SUBROUTINE FROM TTYOUT - EXIT TYPE 3 ; TTYNXT = . INC EXITSW ; SET EXIT SWITCH FROM I/O COMPLETE MOV @#PSR,-(SP) ; SAVE TB010 ;NO-TRY AGAIN BR ATB110 ;YES-FINISHED ; ; PERFORM CONVERSION BY MULTIPLYING AN INITIALLY ; CLEARED ACCUMULATOR BY 10(MULTIPLYING ITS CONTENTS ; BY 5 AND THEN DOUBLING) AND ADDING THE ; ASCII EQUIVALENT BCD VALUE. THIS WILL BE DONE ; FOR EACH SIGNIFICANT POSITION LEFT TO RIGHT. ; EACH DIGIT'S RESULT IS STORED BACK IN THE ; ACCUMULATOR TO USE FOR THE NEXT CALCULATION. ; ATB100: MOVB (R1)+,R4 ;GET NEXT ASCII B .ASCII /RE/ .WORD RESET-RELOC ; ADDRESS OF RESET .IFNZ NDISCS .ASCII /CM/ .WORD QCMPRS-RELOC ; QUEUE COMPRS .ASCII /AS/ .WORD QRASM-RELOC ; QUEUE ROS ASSEMBLER .ASCII /LD/ .WORD QROSLD-RELOC ; QUEUE ROSLOD .ASCII /DI/ .WORD QDINIT-RELOC ; QUEUE DISC INIT. .ASCII /FL/ .WORD QFLST-RELOC ; QUEUE FILE LIST .IFNZ OVRLAY .ASCII /TI/ * ;* THE FOLLOWING NO.S WILL ALL BE CONVERTED TO 9. * ;* 00009 R4=5 * ;* 0009 R4=4 * ;* 009 R4=3 * ;* 09 R4=2 * ;* 9 R4=1 * ;* +PROCESSOR PRIORITY .LOCK BR ERRB10 ; SEE IF ANY OTHER REQUESTS AND ; ; PROCESS THEM ACCORDINGLY ; ERRB30: MOV #-1.,IOLUSE ; RESET I/O LIST IN USE SWITCH MOVB (SP)+,@#PSR ; RESTORE CPU PRIORITY RTS PC ; RETURN TO TTYOUT ; ; SUBROUTINE BINARY TO OCTAL ASCII CONVERSION. ; INPUT: ; R3 = BINARY NUMBER ; R2 = DESTINATION END ADYTE AND BUMP ATB105: SUB #ZERO,R4 ;ASCII NUMERIC TO BCD BMI ATB200 ;ERROR IF LESS THAN ZERO CMPB R4,#NINE BHI ATB200 ;ERROR IF GREATER THAN NINE MOV R5,R3 ; ACCUM. TO SHIFT 2 MOV R3,R2 ;DUPLICATE IN SHIFT 1 ACCUM. ASL R3 ; MULTIPLY ASL R3 ; BY 4 ADD R3,R2 ; SAME AS N*5 ADD R2,R2 ; SAME AS N*1 .WORD TSKINI-RELOC ; TASK INIT. .ENDC .ASCII /UT/ .WORD QUTIL-RELOC ; QUEUE UTILITY .ASCII /TC/ .WORD QTC-RELOC ; QUEU TASK C??? .IFNZ $BATCH .ASCII /BR/ ; BATCH FILE RESET .WORD BFINIT-RELOC ; BATCH FILE INIT. .ENDC .ENDC .ASCII /EX/ .WORD 0 ; EXIT FROM INPUT TASK .WORD 0 ; END OF TABLE ; .PAGE ; ; 00009 R4=6 * ;* * ;*********************************************************************** .DEF CVTBIN ; .CSECT ; ; ; CVTBIN = . MOV R3,-(SP) ; SAVE R3 ON STACK CLR ASCIIS ; INITIALIZE CLR ASCII2 ; SIX BYTE CONVERSION CLR ASCII4 ; STRING ADD R4,R5 ; ADDRESS OF DIDRESS ; R0 = ITERATION LENGTH IF B2ONTA ENTERED ; BIN2OC = . MOV #6,R0 ; SET UP ITERATION LENGTH B2ONTA: INC R2 B2LOOP: MOVB R3,-(R2) BICB #370,(R2) BISB #060,(R2) ; CHANGE TO ASCII CODE ASR R3 ; BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R3 ; PREVENT SIGN PROPAGATION ASR R3 ASR R3 DEC R0 ; MORE TO GO ? 0 ADD R4,R2 ;COMBINE WITH BCD VALUE MOV R2,R5 ; SET IN BINARY INT. ACCUM DEC R0 ;FINISHED WITH STRING? BNE ATB100 ;NO ATB110: CMPB #MINUS,-6(R1) ;YES-STRING SIGN NEGATIVE BNE ATB120 ;NO NEG R5 ; YES-NEGATE BINARY INTEGER ATB120: CLR 16.+2*$KT11C(SP) ; SET NO ERROR INDICATOR ATB130: MOV R5,14.+2*$KT11C(SP) ; SET BINARY INTEG. IN STACK EQUATES FOR ASCII STRING ; ASCIIS = ASCII ; ASCII SIGN POSITION ASCII1 = ASCII+1. ; 10,000 POSITION ASCII2 = ASCII+2. ; 1,000 POSITION ASCII3 = ASCII+3. ; 100 POSITION ASCII4 = ASCII+4. ; 10 POSITION ASCII5 = ASCII+5. ; DIGIT POSITION ASCII6 = ASCII+6. ; ADDRESS OF DIGITS POSITION + 1 .PAGE ; ; INPUT = . .IFNZ OVRLAY EMT NOCKPT ; SET INPUT GITS POSITION +1 TO CONVERT MOV #ASCII6-RELOC,R3 ; ADDRESS OF DIGITS POSITION +1 CTBA10: MOVB -(R5),-(R3) ; RIGHT JUSTIFY STRING DEC R4 ; FOR GIVEN NO. OF BYTES BNE CTBA10 MOV #ASCII-RELOC,-(SP) ; CONVERT THIS STRING EMT ASCBIN MOV (SP)+,R4 ; GET CONVERTED INTEGER IN R4 TST (SP)+ ; ERROR OCCUR? BEQ CTBA20 ; NO CLR R5 BGT B2LOOP ; YES RTS PC ; NO- FINISHED ; ; .END .IFNZ $KT11C MOV (SP)+,$KPAR5 ; RESTORE .ENDC JSR R5,POPR ; RESTORE REGISTERS RTS PC ; RETURN TO CALLER ; ; ERROR IN STRING ; ATB200 = . MOV R4,16.+2*$KT11C(SP) ; SET ERROR INDICATOR BR ATB130 ; ; .END NOT CHECKPOINTABLE .ENDC .IFNZ $KT11C EMT ROSGET ; GET INPUT'S ASR 4,5&6 TO POINT TO ROS .ENDC MOV #ACMSG-RELOC,DATADR ; AUTHORIZATION CODE REQUEST MOV #TTYLST-RELOC,-(SP) ; I/O LIST ADDRESS TO STACK EMT TTYOUT ; TYPE "AC:" - EXIT TYPE 2 MOV #100004,INBUF ; INPUT FOUR CHARACTER AUTHORIZATION MOV #INBUF-RELOC,DATADR ; CODE - NO ECHO MOV #TTYLST-RELOC,-( ; YES -SET ERROR INDICATOR CTBA20: MOV (SP)+,R3 ; RESTORE R3 RTS PC ; RETURN TO CALLER ; ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. ENABLE,DSABLE,QTASK AND TABORT, * ;* CATALOG NUMBERS RESPECTIVELY; PERFORM * ;* TASK ORIENTED OPERATOR COMMUNICATION FUNCTIONS. * ;* * ;*********************************************************************** .DEF IPL,SSTACK .DEF DYNSIZ ; # BYTES IN DYNAMIC POOL .DEF BEGDYN,ENDDYN,DYSINI .REF TIMER,IOTXIT,SCHED .REF CLINIT .REF RQUEST,SAVE,DSPTCH,TPRTY,HEADER .REF PFSIPL,PSTIPL .REF TSTAT,SYSINI,DINT .REF EMTRAP .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOARD ; UPDATE TIMERS.005 09.20.72 ; UPDATE TIMERS.004 08.29.72 .TITLE TIMERS .ENABL CDR ;*********************************************************************** ;* ** ;* Q T I M E ** ;* ** ;* PROGRAM IDENTIFICATION. QTIME - QUEUE HIGH SPEED TIMER ** ;* RESP) EMT TTYIN ; GET AUTHORIZATION CODE TST INERR ; ERROR OR TIMEOUT OCCUR? BNE IPTA20 ; YES CMP #4.,NOCHAR ; 4 CHARACTERS INPUT? BNE IPTA20 ; NO-EXIT CLR ASCII ; CLEAR SIGN & 10,000 POSITION MOV BUFST,ASCII2 ; SET UP 1,000 & 100 POSITION MOV BUFST+2,ASCII4 ; SET UP 10 & DIGIT POSITION MOV #ASCII-RELOC,-(SP) ; ASCII STRING ADDRES * ;* PURPOSE. THIS SUBROUTINE (SEGMENT) INTERPRETS THE * ;* TASK NUMBER, PASSED BY INPUT FROM THE OPERATOR, AND PROCESSES * ;* THAT TASK BASED ON THE OPERATOR INPUT COMMAND. GIVEN A * ;* 1-3 DIGIT ASCII TASK NUMBER, THIS SUBROUTINE (SEGMENT) * ;* CAN: * ;* ENABLE THE TASK ;INTERRUPT ROUTINES .REF TTINIT ;TTYIO INITIALIZATION SUBROUTINE .IFG NLP ; ONLY IF HAVE LINE PRINTERS .REF LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READERS .REF CRINIT .ENDC .IFNZ $DTAPE .REF DTINT .ENDC ; ; ; .CSECT ; .IFZ OVRLAY SSTACK = . ; BEGIN SYSTEM STACK HERE FOR ROS I .ENDC PSR QUESTS. ** ;* ** ;* PURPOSE. THIS SUBROUTINE ACCEPTS THE TIMER DELAY REQUESTS ** ;* AND PLACES THEN IN THE TIMER QUEUE. QTIME PROVIDES FOR ** ;* THE FOLLOWING TIMER OPTIONS: ** ;* ** ;* 1. PERIODIC TASK QUEUEING ** ;*S EMT ASCBIN ; CONVERT ASCII TO BINARY MOV (SP)+,R1 ; GET CONVERTED A.C. TST (SP)+ ; CONVERSION ERROR OCCUR? BNE IPTA20 ; YES - EXIT MOV #AUTCOD-RELOC,R0 ; SEARCH AUTCOD TABLE FOR MATCH IPTA10: CMP (R0)+,R1 ; MATCH? BEQ IPTB00 ; YES - CONTINUE TST (R0) ; END OF TABLE? BPL IPTA10 ; NO- KEEP-A- SEARCHIN' IPTA20: EMT * ;* DISABLE THE TASK IF NOT ACTIVE OR QUEUED * ;* QUEUE THE TASK * ;* ABORT THE TASK IF SUSPENDED OR QUEUED * ;* * ;* PROGRAM USAGE. THE TASK ORIENTED INPUT PROCESSOR IS * ;* CALLED BY INPUT VIA * ;* = 177776 ; PROCESSOR STATUS REGISTER EQUATE PSBENB = 165400 ; DEVICE ADDRESS AT WHICH TO ENABLE ; ; MANUAL PUSHBUTTON ; ; INTERRUPT VECTOR EQUATES ; MPSHBT = 244 ; MANUAL PUSHBUTTON MPSHLV = 340 ; LEVEL 7 .CSECT .CRINT .CSECT .LPINT .CSECT .SYSIN .CSECT .DYSIN .CSECT .QUEUE .CSECT .EMTIN .CSECT .CLINT .CSE 2. ONE-SHOT TASK QUEUEING ON A TIMED DELAY BASIS ** ;* 3. TIMED PROGRAM SUSPENSION ** ;* 4. ONE SHOT OR PERIODIC FLAG SETTING ** ;* 5. EXECUTION OF USER SUBROUTINE UPON TIMEOUT ** ;* ** ;* WITH THE 11/45 VERSION, ITEM 5 IS NOT AVAILABLE TO TASKS. ** ;* EXIT ; EXIT FROM TASK ; ; MESSAGE INTERPRETER ; IPTB00 = . MOV #TTRLST-RELOC,-(SP) ; TTY I/O LIST FOR READY MSG EMT TTYOUT ; TYPE "? " WITH EXIT TYPE 1 MOV #MXCHIN,INBUF ; SET TO INPUT OPERATOR COMMAND MOV #INBUF-RELOC,DATADR ; SET BUFFER ADDRESS IN LIST CLR BUFST+2 ; RESET DELIMITER POSITION MOV #TTYLST-RELOC,-(SP) ; TTY I/O LIST TO STACK EMT TTYIN * ;* JSR PC, ROUT * ;* * ;* WHERE ROUT = ENABLE * ;* = DSABLE * ;* = QTASK * ;* = TABORT * ;* CT .TTYIN .CSECT .MAIN. ; START OF CODE. MUST BE AFTER OTHER NAMED ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES .LOCK MOV #SSTACK,SP ; SET UP SYSTEM STACK .IFNZ OVRLAY CMP SP,#3000 ; MAKE SURE ROOM IN THIS SYSTEM FOR BGE IPLA10 ; SPECIFIED DYNAMIC CORE POOL SIZE. HALT ; NOT ENOUGH. BAD BAD BAD IPLA10: .ENDC ; JSR ** ;* USAGE. ALL TIMER FUNCTIONS ARE ASSOCIATED WITH A 'MODULE' ** ;* OF PARAMETERS. THIS MODULE MUST BE SET UP PRIOR TO CALLING ** ;* QTIME, AND IS FORMATTED AS FOLLOWS ** ;* ** ;* .WORD 1 ; MUST BE 1 ** ;* .WORD 0,0,0 ;RESERVED FOR USE BY QTIME ** ;* .BYTE RES ;TIMER RESOLUTION (SEE BELOW ; WAIT FOR COMMAND TST INERR ; TIME-OUT OCCUR BNE IPTA20 ; YES- CANCEL THIS TASK MOV #NOCHAR-RELOC,R5 ; SIZE OF INPUT MESSAGE ADDRESS MOV (R5)+,R4 ; GET NO. CHARACTERS INPUT BEQ IPTA20 ; CARRIAGE RETURN-EXIT SUB #2.,R4 ; MUST BE AT LEAST TWO BMI IPTB20 ; CHARACTERS OR ERROR DEC R4 ; R4= # CHARS. IN PARAMETER MOV * ;* OR THROUGH A SEGMENT LOAD CALL (OVERLAY SYSTEM) WITH * ;* RETURN POINTS 1,2,3 OR 4 RESPECTIVELY. * ;* * ;* AND R5= ADDRESS OF COMMAND STRING DELIMITER POSITION * ;* R4= NUMBER OF POSITIONS IN PARAMETER NOT INCUDING * ;* DELIMITER OR EOM. * ;* PC,PSTIPL ; SET UP THE TRAP HANDLER ; .IIF NZ $KT11C JSR PC,KERNEL ; GO SET KT11C ASRS ; JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT ; SET UP HANDLER FOR MANUAL PUSHBUTTON MOV #MPSHLV,MPSHBT+2 .IFGE NTTYS-1 MOV #340,R1 ; INIT. INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV R1,62 MOV #PRT) ** ;* .BYTE OPTION ;TIMER OPTIONS SELECTED (SEE BELOW) ** ;* .WORD 0 ;RESERVED ** ;* .WORD ARG ;OPTIONAL (A = 1) ** ;* .WORD FLAG ;OPTIONAL (F = 1) ** ;* .WORD MASK ;OPTIONAL (F = 1) ** ;* .WORD JSTARG ;OPTIONAL (J = 1) ** ;* .WORD TASKNO ;OPTIONAL (T = 1) #OPCOMM-RELOC,R3 ; ADDRESS OF OPCOMM TO R3 FOR IPTB10: CMP (R5),(R3)+ ; OPERATOR COMMAND CODE SEARCH BEQ IPTC00 ; FOUND IT TST (R3)+ ; BUMP TO NEXT POSSIBLE COMMAND TST (R3) ; END OF TABLE? BNE IPTB10 ; NO- KEEP LOOKING IPTB20: MOV #ER1MSG-RELOC,DATADR ; YES-REPORT ERROR IPTB21: MOV #TTYLST-RELOC,-(SP) ; TTY I/O LIST TO STACK EMT TTYOUT ; TYPE "ILL CMD! * ;* UPON RETURN FROM THIS SUBROUTINE, IF R5=0, THEN AN * ;* ERROR OCCURRED AND INPUT WILL TYPE THE APPROPRIATE * ;* ERROR MSG. "ILL PAR!" * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION INT,64 MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV #DINT,204 ; SET UP FOR ** ;* ** ;* WHERE: RES = RESOLUTION INDEX (0-15) ** ;* OPTION = BIT 7 - S, SUSPEND CALLING TASK ** ;* BIT 6 - A, ARGUMENT PRESENT ** ;* BIT 5 - F, FLAG AND MASK PRESENT ** ;* BIT 4 - J, SUBROUTINE ADDRESS PROVIDED ** ;* BIT 3 - T, TASK NUM" BR IPTB00 ; REQUEST AGAIN ; ; TRANSFER TO APPROPRIATE PROCESSOR. ; CALLING SEQUENCE: ; JSR PC, PROCES ; WHERE R5 = ADDRESS OF COMMAND STRING ; DELIMITER POSITION ; R4 = NO. OF CHARACTERS IN PARAMETER ; IF LESS THAN 0-NONE ; IPTC00 = . TST (R3) ; IF ZERO- EX..IT COMMAND BEQ IPTA2 * ;* * ;*********************************************************************** .DEF ENABLE,DSABLE,QTASK,TABORT ; .CSECT ; ; FCN: .WORD 0 ; TASK FUNCTION SWITCH ; ; MXTSKL = 3. ; MAXIMUM TASK NO. LENGTH ; ; PROCESS TABLE ; PROCSS = . .WORD TOFB00-RELOC ; ENABLE THE TASK .WORD TOFC00-RELOC ; DIS DISC 0 MOV #340,206 ; AT INTERRUPT LEVEL 7 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,530 ; DISC 0 MOV #340,532 ; AT LEVEL 7 .ENDC .ENDC .IFNZ $DTAPE MOV #DTINT,214 ; SET UP VECTOR FOR MOV #340,216 ; THE DECTAPE .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; MOV #EMTRAP,30 ; SET OF TBER PRESENT ** ;* ARG = ARGUMENT TO BE PASSED TO QUEUED TASK ** ;* FLAG, = MASKED IS TO BE OR'ED INTO FLAG ** ;* MASK ** ;* JSTARG = ADDRESS OF SUBROUTINE TO LINK TO ** ;* TASKNO = NUMBER OF TASK TO BE QUEUED ** ;* THE LINKAGE TO QTIME IS: ** ;* 0 ; YES, GOOD-BY TST (R5)+ ; R5 = ADDRESS OF DELIMITER POSITION JSR PC,@(R3)+ ; PERFORM COMMAND PROCESS - INC. TO SAVE WORD ; ; RETURN FROM OPERATOR COMMAND PROCESSORS HERE ; OPCOMR = . TST R5 ; DID AN ERROR OCCUR BNE IPTB00 ; NO-SEND READY FOR ANOTHER REQUEST MOV #ER2MSG-RELOC,DATADR ; TYPE 'ILL PAR!' BR IPTB21 ; ; ;***************************************ABLE THE TASK .WORD TOFD00-RELOC ; QUEUE THE TASK .WORD TOFE00-RELOC ; ABORT THE TASK ; PLOCK = 340 ; CPU PRIORITY LOCKOUT MASK PSR = 177776 ; ; TASK STATUS EQUATES ; QUISNT = 0. ; QUIESCENT OVYACT = 1. ; RPOM WORKING ON TASK QINROS = 2. ; QUEUED IN ROS THREAD TACTVE = 3. ; TASK ACTIVE VOLSUS = 4. ; VOLUNTARILY SUSPENDED INVSUSRAP VECTOR FOR MOV #340,32 ; EMT HANDLER MOV #TIMER,TIMINT ;INITIALIZE TIMER INTERRUPT VECTOR MOV #340,TIMINT+2 .IFNZ $CLOCK MOV #SCHED,TODINT ;INITIALIZE TIME OF DAY INT. VECTOR MOV #340,TODINT+2 .ENDC ;DO WE NEED TO INITIALIZE STALL ALARM VECTOR? .IFNZ $KT11C MOV #IOTXIT,20 ;INITIALIZE IOT TRAP VECTOR MOV #30340,22 ;(SHOU ** ;* MOV #MODULE,-(SP) ** ;* MOV TDELAY,-(SP) ** ;* EMT QTIME ** ;* TST (SP)+ ** ;* WHERE: ** ;* MODULE IS DEFINED ABOVE ** ;* TDELAY CONTA******************************** ;* * ;* RESET LOGICAL DEVICE AVAILABLE IN ROS PHYSICAL DEVICE TABLE. * ;* TO BE FUTHER DOCUMENTED AFTER ROS 1 DEMO. * ;* * ;*********************************************************************** .DEF RESET .REF LOGMAX,PHYDEV,CVTBIN ; ; COMMA = 54 ; AS = 5. ; INVOLUNTARILY SUSPENDED TDSABL = 6. ; DISABLED TABRTD = 7. ; ABORTED .PAGE ; ENABLE = . CLR R1 ; FUNCTION SWITCH FOR ENABLE BR TOFA00 ; DSABLE = . MOV #2.,R1 ; FUNCTION SWITCH FOR DSABLE BR TOFA00 ; QTASK = . MOV #4.,R1 ; FUNCTION SWITCH FOR QTASK BR TOFA00 ; TABORT = . LD ONLY HAVE TO BE 340) .ENDC JSR PC,TTINIT ;INITIALIZE TTYIO TABLES .IFNZ OVRLAY JSR PC,DYSINI ; INIT. DYNAMIC STORAGE ALLOCATOR .ENDC .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC .IFNZ NDISCS .REF AUFCN,AULIST,DISCIO,INIDSC .REF AUBUF,TKFLBF ; INS THE TIMEOUT VALUE IN MULTIPLES OF THE ** ;* SELECTED RESOLUTION (LOW BYTE); AND THE RESET ** ;* VALUE (HIGH BYTE) - ZERO FOR ONE SHOT. ** ;* ** ;* PROGRAMMER: 55 ** ;* DATE 06.30.71 ** ;* ** ;* CII COMMA ; RESET = . JSR PC,RES010 ; GET LOGICAL UNIT CMP R4,@#LOGMAX+$ROSM ; VALID LOGICAL DEVICE? BGT RESERR ; NO-ERROR ASL R4 ; COMPUTE WORD INDEX BIC #120000,PHYDEV+$ROSM(R4) ; SET DEVICE NOT AVAILABLE ; ; ALTERNATE NOT IN USE RTS PC ; RETURN TO CALLER ; ; RES010: CMPB (R5)+,#COMMA ; DELIMETER A COMMA? BNE MOV #6.,R1 ; FUNCTION SWITCH FOR TABORT ; TOFA00 = . ; TASK ORIENTED FUNCTION PROCESSOR CMPB (R5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE TOFC05 ; NO-ERROR TST R4 BEQ TOFC05 ; PARAMETER MUST BE 1-3 CHARACTERS CMP R4,#MXTSKL ; MAX. TASK CHAR. LENGTH =3 BHI TOFC05 ; ERROR - TOO MANY POSITIONS JSR PC,CVTBIN ; CONVERT TO BINARY INTEGER  .REF CDIFCN,CDILST .REF TASKS,$TKFLS,$TKFLF CLR PSR ; RESET LOCKOUT SO DISC INTERRUPT ; ; MAY BE RECEIVED CLRB AUFCN ; SET TO READ ALLOCATION FILE TYPE DIR. MOV #AULIST,-(SP) .IIF NZ $KT11C MOV #AUBUF,AULIST+20 JSR PC,DISCIO ; READ FILE TYPE DIRECTORY IPLX20: CMP #1.,AULIST ; I/O COMPLETE? BNE IPLX20 ; NO-KEEP CHEC .TITLE PUSHR ;*********************************************************************** ; * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ;  RSERR ; NO-ERROR TST R4 ; PARAM. MUST BE 1-3 CHARS. BEQ RSERR CMP R4,#3. BHI RSERR JSR PC,CVTBIN ; CONVERT TO BINARY INTEGER TST R5 BEQ RSERR ; CONVERSION ERROR RTS PC ; ; ERROR OCCURED ; RSERR = . TST (SP)+ ; POP STACK RESERR = . CLR R5 ; SET ERROR GUY RTS PC  TST R5 ; CONVERSION ERROR OCCUR? BEQ TOFC05 ; YES CMP R4,#$INPNO ; TRYING TO SCREW AROUND WITH INPUT? BEQ TOFC05 ; YES TOFA10: CMP R4,@#TASKS+$ROSM ; IS TASK VALID? BGT TOFC05 ; NO ASL R4 ; TASK NO. WORD INDEX CMP #1.,HEADER+$ROSM(R4) ; TASK LOADED IN SYSTEM? BEQ TOFC05 ; NO-ERROR ASR R4 JMP @PROCSS-RKING MOVB #1.,AUFCN ; PUT BACK FCN AS WRITE IN LIST CLRB CDIFCN ; SET TO READ CORE DIRECTORY IMAGE MOV #CDILST,-(SP) JSR PC,DISCIO ; READ CORE DIRECTORY IMAGE INTO CORE DIR. IPLX30: CMP #1.,CDILST ; I/O COMPLETE? BNE IPLX30 ; NO-KEEP CHECKING MOVB #1.,CDIFCN ; RESET FCN IN LIST BACK TO WRITE CLRB $TKFLF ; SET UP TO READ TASK TABLE .IIF NZ $KT11C MOV  * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*******************************  ; RETURN ; .IFNZ NDISCS ; ; ; THE FOLLOWING ARE USED TO QUEUE ROS SYSTEM TASKS ; QCMPRS = . ; QUEUE COMPRS JSR PC,RES010 ; GET FILE TYPE MOV #$CPTNO,-(SP) ; COMPRESS TASK NO. TO STACK QCMP20 = . CLR -(SP) ; USE PRIORITY IN TASK TABLE MOV R4,-(SP) ; PASS FILE TYPE AS ARGUMENT CLR -(SP) ; IMMEDIATE RETURN REQUESTED EMT QUEUE ELOC(R1) ; PERFORM PROCESS ; ; ENABLE THE TASK SPECIFIED BY R4 ; TOFB00 = . MOVB #PLOCK,@#PSR ; SET PRIORITY LOCKOUT CMPB #TDSABL,TSTAT+$ROSM(R4) ; IS TASK DISABLED? BNE TOFB10 ; NO-IGNORE REQUEST CLRB TSTAT+$ROSM(R4) ; YES-ENABLE AND SET QUIESCENT CLRB @#PSR ; RESET CPU LEVEL TOFB10: RTS PC ; RETURN ; ; DISABLE THE TASK SPECIFIED BY R4 ; TOFC00 = . MOVB ( #TKFLBF,$TKFLST+20 MOV #$TKFLS,-(SP) JSR PC,DISCIO ; READ TASK TABLE IPLX40: CMP #1.,$TKFLS ; I/O COMPLETE? BNE IPLX40 MOVB #3.,$TKFLF ; SET BACK AS WRITE WITH WRITE CHECK IPLX60 = . .ENDC JSR PC,SYSINI ; INIT. CORE TASK TABLES AND TASKS ; ; .IFNZ $KT11C ; ; SET UP KERNEL I SPACE, QUEUES AND ANYTHING ELSE ; NECESSARY FOR ROS WITH MEMORY MANAGEMENT ; **************************************** .DEF PUSHR ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-  TST (SP)+ ; POP ERROR WORD BGT RESERR ; ERROR EMT EXIT ; EXIT FROM INPUT ; ; QRASM = . ; QUEUE RASM MOV #$RASNO,-(SP) BR QCMP20 ; ; QROSLD = . ; QUEUE ROS LOADER MOV #$RLDNO,-(SP) BR QCMP20 ; ; QUTIL = . MOV #$UTLNO,-(SP) BR QCMP20 ; ; QTC = . MOV #$TKCNO,-(SP #PLOCK,@#PSR ; SET PRIORITY LOCKOUT TSTB TSTAT+$ROSM(R4) ; IS TASK QUIESCENT? BEQ TOFC10 ; YES- OK THEN CMPB TSTAT+$ROSM(R4),#TDSABL ; NON-QUIESCENT BGE TOFC10 ; NO - OK CLRB @#PSR ; RESET CPU LEVEL TOFC02: MOV #ER3MSG-RELOC,DATADR ; SET UP TO TYPE TOFC03: MOV #TTYLST-RELOC,-(SP) ; APPROPRIATE EMT TTYOUT ; ERROR MESSAGE TOFC05: CLR R5 ; SET  .TITLE POPR ;*********************************************************************** ; * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; (SP) JMP (R5) ;RETURN .END ) BR QCMP20 ; ; QDINIT = . ; QUEUE DISC INITIALIZER MOV #$INITD,R0 ; GET TASK NUMBER CLRB TSTAT+$ROSM(R0) ; SET TASK QUIESCENT MOV R0,-(SP) ; TASK NUMBER TO STACK BR QCMP20 ; ; QFLST = . CMPB (R5)+,#COMMA ; DELIM A COMMA BNE QFLST1 ; NO-LIST ALL FILE TYPES .IFNZ $BATCH CMPB (R5),#'B ; BATCH LIST? BEQ QFLST3 ERROR INDICATOR FOR INPUT TOFC08: RTS PC ; RETURN ; TOFC10 = . MOVB #TDSABL,TSTAT+$ROSM(R4) ; DISABLE TASK CLRB @#PSR ; RESET CPU LEVEL RTS PC ; RETURN ; ; QUEUE THE TASK SPECIFIED BY R4 ; TOFD00 = . MOV R4,-(SP) ; TASK NO. TO STACK FOR CALL CLR -(SP) ; USE PRIORITY IN TASK TABLE CLR -(SP) ; NO ARGUMENT CLR -(SP)  * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;******************************** ; YES DEC R5 ; BUMP BACK .ENDC JSR PC,RES010 ; GET FILE TYPE TST R4 BEQ RESERR ; TYPE 0 ILLEGAL FOR FLMGMT CMP R4,#$FTMAX BGT RESERR ; NOT VALID FOR THIS SYSTEM QFLST2: MOV #$FLTNO,-(SP) ; FILE LIST TASK NO. TO STACK BR QCMP20 ; QUEUE FLIST QFLST1: CLR R4 ; LIST ALL BR QFLST2 .IFNZ $BATCH QFLST; IMMEDIATE RETURN REQUESTED EMT QUEUE ; QUEUE THE TASK TST (SP)+ ; ERROR OCCUR BLE TOFC08 ; NO-RETURN BR TOFC02 ; YES - REPORT NON-QUIESCENT MESSAGE ; ; ABORT THE TASK SPECIFIED BY R4 ; TOFE00 = . MOV R4,-(SP) ; TASK NO. TO STACK EMT ABORT ; ABORT TASK RTS PC ; RETURN TO INPUT ; ;*************************************************************************************** .DEF POPR ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3 ; UPDATE 8/16/72 SYSINI.S07 ; UPDATE 8/15/72 SYSINI.S06 ; UPDATE 8/7/72 SYSINI.S05 ; UPDATE 8/4/72 SYSINI.S04 ; UPDATE 8/1/72 SYSINI.S03 ; UPDATE 5/2/72 SYSINI.S02 ; UPDATE 4/14/72 SYSINI.S01 .TITLE SYSINI ;*********************************************************************** ;* * ;* SET UP SYSTEM TASKS IN3: MOV #-1.,R4 ; LIST BATCH ELEMENTS BR QFLST2 .ENDC ; ; .IFNZ $BATCH ; ; BATCH FILE INITIALIZER ; BFINIT = . MOV #BFBLCK-RELOC,-(SP) ; COMM. BLOCK ADDRESS EMT 30. ; INITIALIZE DIRECTORY FOR BFUP TST BFBLCK ; ERROR? BNE RESERR ; YES RTS PC ; .ENDC ; .IFNZ OVRLAY ; ; RESET ALL OVERLAY TASK TABLES TO UN*********************** ;* * ;* PROGRAM IDENTIFICATION. TIME AND DATE, CATALOG NUMBERS * ;* ; RESPECTIVELY, SET TIME OF DAY, TYPE TIME OF DAY, * ;* SET DATE AND TYPE DATE. * ;* * ;* PURPOSE. THIS SUBROUTINE WILL TAKE THE OPERATOR INPUT FROM A * ;* 'TM,HH:MM' OR 'DT,MM/DD/YY' COMMA MOV (SP)+,R4 RTS R5 ;RETURN .END  TASK TABLE IF THEY ARE CORE * ;* RESIDENT TASKS-CALLED BY IPL. * ;* * ;*********************************************************************** .DEF SYSINI .REF CMPRHD,FLSTHD,RASHED,LODHED .REF HEADER,TSTAT,TPRTY,TASKS .REF QIPL,INPTHD .REF INIDSC .DEF TIMERQ .DEF HED4,HED5,HED6,HED7,HED8,HED9 USED CONDITION ; TSKINI = . MOV #OVTMIN,R0 ; SET BYTE BASE INDEX INTO TASK TABLES MOV #OVTMIN+OVTMIN,R1 ; SET WORD INDEX TIA10: MOVB #6.,TSTAT+$ROSM(R0) ; DISABLE TASK CLRB IOSTAT+$ROSM(R0) ; CLEAR THE I/O STATUS CLRB TPRTY+$ROSM(R0) ; CLEAR THE PRIORITY MOV #1,HEADER+$ROSM(R0) ; SET HEADER TO NON-EXISTENT TST (R1)+ ; BUMP TO NEXT WORD INC R0 ; AND TO 2ND AND USE IT TO SET THE * ;* ROS SYSTEM TIME-OF-DAY OR DATE, RESPECTIVELY. IF THE COMMAND * ;* TO TYPE THE TIME-OF-DAY 'TM' OR TYPE THE DATE 'DT' IS GIVEN, * ;* IT WILL DO SO. * ;* * ;* PROGRAM USAGE. INPUT CALLS TIME OR DATE VIA * ;* JSR PC,TIME OR * ;* J  .DEF HED10,HED11 .CSECT .SYSIN ; HDRTBL = . .WORD CMPRHD .WORD FLSTHD .WORD RASHED .WORD LODHED .WORD INPTHD .WORD INIDSC .WORD TIMERQ .WORD HED4 .WORD HED5 .WORD HED6 .WORD HED7 .WORD HED8 .WORD HED9 .WORD HED10 .WORD HED11 ; ; TNOTBL = . .WORD $CPTNO .WORD $FLTNO .WORD !NEXT BYTE CMP R0,#TASMAX ; DONE? BLE TIA10 ; NO .REF $TKFLS MOV #$TKFLS+$ROSM,-(SP) EMT PFRITE RTS PC .ENDC .ENDC ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. CVTBIN, CATALOG NO. ; * ;* CONVERT ASCII TTY INPUT STRING TO BINARY INTEGER. "; UPDATE 8/23/72 BINASC.S05 ; UPDATE 8/10/72 BINASC.S04 ; UPDATE 8/8/72 BINASC.S03 ; UPDATE 11/8/71 BINASC.S02 ; UPDATE 10/8/71 BINASC.S01 .TITLE BINASC ;*********************************************************************** ; ; BINASC, CATALOG NUMBER ;BINARY TO ; ASCII CONVERSION SUBROUTINE. ; ; THIS SUBROUTINE CONVERTS A SIGNED 15-BIT BINARY ; INTEGER TO STANDARD 8-BIT U.S. AS# COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* DIGITAL DATA SYSTEMS ** ;* SAN DIEGO, CALIF ** ;* ** ;*********************************************************************** .DEF QTIME,RES0.B,RES0.E,$RES0,TIMBSY .DEF TQFRST,TQLAST,PKTQFR$ $RASNO .WORD $RLDNO .WORD $INPNO .WORD $INITD .WORD $TMRNO .WORD 4. .WORD 5. .WORD 6. .WORD 7. .WORD 8. .WORD 9. .WORD 10. .WORD 11. ; ; NOSYST = 15. ; NO. OF TASKS IN TABLE TO INITIALIZE NOSYSI = NOSYST+NOSYST ; INDEX OF ABOVE PRIOR = 5. ; TASK PRIORITY IN HEADER ; ; SYSINI = . JSR % * ;* * ;* PURPOSE. THIS SUBROUTINE WILL SERVE AS A UTILITY FOR * ;* THE OPERATOR INPUT PROCESSORS. IT WILL CONVERT THE * ;* NUMBER OF ASCII BYTES SPECIFIED (MAX. 5 + SIGN) TO A * ;* BINARY INTEGER VIA ASCBIN. * ;* * ;* PROGRAM USAGE. CVTBIN IS CALLED VIA: &CII CODE. THE ; CONVERTED ASCII IS PACKED ONE CHARACTER PER BYTE, ; WHICH IS STORED IN A SIX BYTE ARRAY SPECIFIED BY ; THE CALLING PROGRAM. ; CALLING SEQUENCE: ; ; MOV INTEGR,-(SP) ; MOV # STRING,-(SP) ; EMT BINASC ; ; WHERE: INTEGR = SIGNED BINARY INTEGER ; # STRING = ADDRESS OF ASCII BYTE STRING ; ; REGISTERS R0 THRU R5 ARE SAVED IN THE STACK ; AREA (SP) AND RESTORED UPON EXIT. ' .IIF NE $KT11C .DEF TQVIRT,TQPAR .REF IOSTAT,STACK,QSAVEI,DSPTCH,SCHED .IIF NE OVRLAY .REF RELTSK .IFNZ $KT11C .REF PPASV5,PPASV6,SVPPA,TSK.PC,ADDRCK .REF TVSV6,PKTMQ .ENDC .REF SAVE,RESTOR,$CTASK,TIMERQ,LAST .PAGE ;* ;* FIRST, WE'LL PROVIDE SPACE FOR THE QUEUE POINTERS (FIRST ;* AND LAST). THERE ARE NRES SUCH PAIRS (16 MAXIMUM). ;* RES0.B = . RES0.E = PC,QIPL ; INIT. TASK TABLE MOV #-NOSYSI,R0 ; LOOP CONTROL AND INDEX SYSI00: MOV HDRTBL+NOSYSI(R0),R1 ; GET A HEADER ADDRESS BEQ SYSI20 ; NOT IN CORE-FORGET MOV TNOTBL+NOSYSI(R0),R2 ; GET TASK'S NUMBER CLRB TSTAT(R2) ; SET TASK QUIESCENT MOVB PRIOR(R1),TPRTY(R2) ; SET PRIORITY DEFAULT CMP R2,TASKS BLE SYSI10 MOV R2,TASKS SYSI10: ASL R2 ; TASK NO.) * ;* * ;* JSR PC, CVTBIN * ;* WHERE: * ;* R5 = ADDRESS OF FIRST CHARACTER IN * ;* INPUT STRING TO CONVERT. * ;* R4 = NUMBER OF CHARACTERS TO CONVERT. * ;* *; ; ; PROGRAMMER 54 ; DATE ; REVISION ; ;*********************************************************************** .DEF BINASC .REF PUSHR,POPR ; .CSECT ; ; PLUS=53 MINUS=55 SPACE=40 ZERO=60 ; DIVTAB: .WORD 10000. ;DECIMAL DIVISION TABLE .WORD 1000. .WORD 100. .WORD 10. .WORD 0 ; ; BINASC = . JSR R5,PUSHR ; SAVE REGISTERS + .+2 .BOUND .REPT $NRES .WORD 0 ;POINTER TO FIRST ENTRY .IIF NE $KT11C .PACK .-2 ;POINTER TO LAST ENTRY (H/W MAPPING) .IIF EQ $KT11C .WORD .-2 ;POINTER TO LAST ENTRY (STANDARD) .ENDR ;* ;* BACKWARD QUEUE POINTERS ;* BACK.B = . BACK.E = .+2 .BLKW $NRES+$NRES ;RESERVE MEMORY FOR BACKWARD QUEUES ;* ;* ;* AND NOW FOR THE RESOLUTION COUNTERS. ;* ;* $RES0: .W,.REF $INSTK,TMRQST .REF $STK03 .REF STK04,STK05,STK06,STK07,STK08,STK09 .REF STK10,STK11 ; BR IPLX70 ; ; ; CTSKTB: .WORD $INSTK .WORD $STK03 .WORD STK04 .WORD TMRQST .WORD STK05 .WORD STK06 .WORD STK07 .WORD STK08 .WORD STK09 .WORD STK10 .WORD STK11 .WORD 0 ; KERNEL = . KERN20 = . - * ;* UPON RETURN R4 = BINARY INTEGER * ;* * ;* HOWEVER IF R5 = 0, AN ERROR OCCURRED DURING THE * ;* CONVERSION. REGISTERS R0-R3 WILL NOT BE DESTROYED * ;* * ;* THE FOLLOWING NO.S WILL ALL BE CONVERTED TO 9. * ;* 000. MOV 16.(SP),R4 ; R4 = INTEGER MOV 14.(SP),R5 ; RK = ADDRESS OF STRING MOV #DIVTAB,R0 ;R0=DIVISION TABLE ADDRESS TST R4 ;IS INTEGER NEGATIVE? BMI BTA050 ;YES MOVB #PLUS,(R5)+ ;NO-SET PLUS SIGN AND BUMP BTA010: MOVB #SPACE,R1 ;R1=ZERO SUPPRESS BYTE REGISTER BTA020: CLR R2 ;INITIALIZE SUBTRACTION COUNTER BTA030: SUB (R0),R4 ;SUBTRACT DIVISOR FROM INTEGE/ORD RES0,RES1,RES2,RES3 .WORD RES4,RES5,RES6,RES7 .WORD RES8,RES9,RES10,RES11 .WORD RES12,RES13,RES14,RES15 . = $RES0+$NRES+$NRES ; RESTAB: .WORD RES0,RES1,RES2,RES3 .WORD RES4,RES5,RES6,RES7 .WORD RES8,RES9,RES10,RES11 .WORD RES12,RES13,RES14,RES15 . = RESTAB+$NRES+$NRES ;* ;* MISCELLANEOUS TIMER PARAMETERS ;* ; TMTEMP: .BLKW 7 ;TEMPORARY SAVE AREA FOR TMSAVE ; 0 MOV #CTSKTB,R0 KERN25: MOV (R0)+,R1 ; ADDRESS TO DIVIDE BY 64. BEQ KERN30 ; FINISHED CLR R2 MOV (R1),R3 DIV #64.,R2 ; DIVIDE MOV R2,(R1) BR KERN25 KERN30 = . MOV #077406,R0 ; PDR-4K, READ/WRITE ACESS MOV #$KPDR0,R1 MOV #8.,R2 ; THRU LOOP EIGHT TIMES KERN35: MOV R0,(R1)+ SOB R2,KERN35 ; SET UP KERNEL PD109 R4=5 * ;* 0009 R4=4 * ;* 009 R4=3 * ;* 09 R4=2 * ;* 9 R4=1 * ;* +00009 R4=6 * ;* * ;**************************5R BPL BTA060 ADD (R0)+,R4 ;ADD BACK & BUMP DIVISOR POINTER TST R2 BEQ BTA040 MOV #ZERO,R1 ;STOP ZERO SUPPRESSION BTA040: ADD R1,R2 ;CALCULATE ASCII BYTE MOVB R2,(R5)+ ;SET IN STRING AND BUMP TST (R0) BNE BTA020 ;NOT FINISHED ADD #ZERO,R4 ;MAKE SURE UNITS SIGNIFICANT MOVB R4,(R5) ;PUT IN UNITS POSITION MOV 123 PKTQFR: .IIF NE $KT11C .PACK TQFRST ;ADDRESS OF TIMERQ QUEUE WHICH .IIF EQ $KT11C .WORD TQFRST ;POINTS TO THE FIRST IN THE QUEUE ; .IFZ $CLOCK TMFLAG: .WORD 0 .ENDC .BOUND TQFRST: .WORD 0 ;QUEUE POINTERS FOR TIMERQ THREAD OF .IFZ $KT11C ;TIMER MODULES THAT NEED TQLAST: .WORD TQFRST ;PROCESSING .ENDC .IFNZ $KT11C ;11/45 VERSION WITH H/W MAPPING TQLAST: .PACK 4R'S MOV #$KPAR0,R1 ; R2 INITIALLY HAS 0 NOW MOV #4.,R0 ; THRU LOOP 4 TIMES KERN40: MOV R2,(R1)+ ; SET UP KERNEL PAR'S ADD #200,R2 ; INCREMENT NEXT PAR BY 4K SOB R0,KERN40 MOV #077406,$KPDR7 ; SET UP MOV #7600,$KPAR7 ; DEVICE PAGE INC @#177572 ; TURN ON KT11C RTS PC .ENDC IPLX70: CLR R0 CLR R1 CLR 7********************************************* .DEF CVTBIN ; .CSECT ; ; ; CVTBIN = . MOV R3,-(SP) ; SAVE R3 ON STACK CLR ASCIIS ; INITIALIZE CLR ASCII2 ; SIX BYTE CONVERSION CLR ASCII4 ; STRING ADD R4,R5 ; ADDRESS OF DIGITS POSITION +1 TO CONVERT MOV #ASCII6-RELOC,R3 ; ADDRESS OF DIGITS POSITION +1 CTBA10: MOVB -(R5),-(R3) ; RIGHT6SR PC,DATE * ;* WHERE: R5 = ADDRESS OF COMMAND STRING DELIMITER POSITION * ;* R4 = NUMBER OF POSITIONS IN PARAMETER NOT INCLUDING * ;* DELIMITER OR EOM. * ;* UPON RETURN FROM THIS SUBROUTINE, IF R5 = 0, THEN AN ERROR * ;* OCCURED AND INPUT WILL TYPE THE APPROPRIATE ERROR MESSAGE. * ;* * ;* PROGRAMMER 8 TQFRST ;NEEDS PACKED PHYSICAL TQVIRT: .WORD TQFRST ;AND VIRTUAL ADDRES OF THE CURRENT TQPAR: .WORD 0 ;VALUE OF TQLAST .ENDC ;* ;* Q T I M E / D Q T I M E E Q U A T E S ;* RSVRD1 = 2. ;THREAD WORD RSVRD2 = 4. ;BACKWARD THREAD RSVRD3 = 6. ;TIMERQ THREAD RES = 8. ;RESOLUTION OPTION = 9. ;OPTION BYTE RSVRD5 = 10. ;MULTPL R2 CLR R3 CLR R4 CLR R5 MOVB #200,PSBENB ; ENABLE MANUAL PUSHBUTTON INTERRUPT JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; ; .IFNZ OVRLAY ; ; ; ; ENDDYN = . - 2 ; TOP ADDRESS OF DYNAMIC CORE POOL ; SSTACK = ENDDYN - $DYNSZ ; TOP STACK ADDRESS FOR ROS II & III ; BEGDYN = SSTACK ; LOWEST ADD. OF DYNAMIC CORE POOL. ; ; ; THIS IS FOR ROS II/45 ONLY .(SP),16.(SP) ; SET UP STACK FOR RETURN JSR R5,POPR ; RESTORE REGISTERS CMP (SP)+,(SP)+ ; STACK OK NOW RTS PC ; RETURN TO CALLER ; ; BTA050: MOVB #MINUS,(R5)+ ; SET MINUS SIGN AND BUMP NEG R4 ;SET INTEGER POSITIVE BR BTA010 ; BTA060: TSTB (R2)+ ;BUMP SUBTRACTION COUNTER BR BTA030 ; ; .END e 54 * ;* DATE * ;* REVISION * ;* * ;*********************************************************************** .DEF TIME,DATE GTIME = 25 GDATE = 26 SDATE = 60 STIME = 61 ; .CSECT ; ; TPARLN = 5. ; JUSTIFY STRING DEC R4 ; FOR GIVEN NO. OF BYTES BNE CTBA10 MOV #ASCII-RELOC,-(SP) ; CONVERT THIS STRING EMT ASCBIN MOV (SP)+,R4 ; GET CONVERTED INTEGER IN R4 TST (SP)+ ; ERROR OCCUR? BEQ CTBA20 ; NO CLR R5 ; YES -SET ERROR INDICATOR CTBA20: MOV (SP)+,R3 ; RESTORE R3 RTS PC ; RETURN TO CALLER ; ;******<(BYTE 0) AND RESET (BYTE 1) MULTPL = 10. ;TIMER MODULE MULTIPLE OF RESOLUTION RESET = 11. ;RESET VALUE FOR MULTPL ARG = 12. ;ARGUMENT FOR TASK TO BE QUEUED *EACH OF THESE FLAG = 12. ;BITS TO BE OR'ED *IS SET AS IF MASK = 14. ; INTO THIS ADDRESS *THE PREVIOUS JSTARG = 12. ;ADDRESS OF TIMEOUT SUBROUTINE *OPTIONAL TASKNO = 12. ;N=; UPDATE 8/23/72 ROSGET.S01 .TITLE ROSGET .IFNZ $KT11C ;*********************************************************************** ;* * ;* ROSGET WILL TRANSFER KERNEL ASR 0,1 AND 2 INFORMATION * ;* TO THE USER'S ASR 4,5 AND 6 AND THE USER TASK HEADER. * ;* THUS SYSTEIM TASKS WILL BE ABLE TO REFERENCE ROS LOCATIONS * ;* VIA LOC+100000 OPERAND. > .TITLE ROSGET .IFNZ $KT11C ;*********************************************************************** ;* * ;* ROSGET WILL TRANSFER KERNEL ASR 0,1 AND 2 INFORMATION * ;* TO THE USER'S ASR 4,5 AND 6 AND THE USER TASK HEADER. * ;* THUS SYSTEIM TASKS WILL BE ABLE TO REFERENCE ROS LOCATIONS * ;* VIA LOC+100000 OPERAND. * ;* ?***************************************************************** ;* * ;* PROGRAM IDENTIFICATION. ENABLE,DSABLE,QTASK AND TABORT, * ;* CATALOG NUMBERS RESPECTIVELY; PERFORM * ;* TASK ORIENTED OPERATOR COMMUNICATION FUNCTIONS. * ;* * ;* PURPOSE. THIS SUBROUTINE (SEGMENT) INTERPRETS THE * @UMBER OF TASK TO BE QUEUED *ARGUMENT ; *IS OMITTED S = 200 ;OPTION *SUSPEND CALLER A = 100 ; BITS *ARGUMENT PRESENT F = 040 ; IN *FLAG AND MASK PRESENT J = 020 ; THE *SUBROUTINE ADDRESS PRESENT T = 010 ; OPTION *TASK TO BE QUEUED D = 004 ; A * ;* * ;* THIS SUBROUTINE IS AVAILABLE ONLY TO SYSTEM TASKS VIA: * ; EMT ROSGET * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION B * ;* THIS SUBROUTINE IS AVAILABLE ONLY TO SYSTEM TASKS VIA: * ; EMT ROSGET * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* C ;* TASK NUMBER, PASSED BY INPUT FROM THE OPERATOR, AND PROCESSES * ;* THAT TASK BASED ON THE OPERATOR INPUT COMMAND. GIVEN A * ;* 1-3 DIGIT ASCII TASK NUMBER, THIS SUBROUTINE (SEGMENT) * ;* CAN: * ;* ENABLE THE TASK * ;* DISABLE THE TASK IF NOT ACTIVE OR QUEUED * ;* QUEUE THE TASK DBYTE *DEQUEUE MODULE PENDING Q = 002 ; OF THE *TASK QUEUE REQUEST PENDING B = 001 ; MODULE *MODULE BUSY .IIF NE $KT11C MODULE = 12.+4. ;POSITION OF THE TIMER MODULE .IIF EQ $KT11C MODULE = 12. ;ON THE STACK (DQTIME IS 2 LESS) TDELAY = MODULE-2. ;POSITION OF TDELAY ON STACK RET.PC = MODULE-4. ;POSITION OF RETURN PC .MACRO SAV.56 ;THIS E * ;* * ;*********************************************************************** ; .DEF ROSGET .REF $CTASK,ACTIVE,PPASV5 ; ; TPDR3 = 26. TPDR4 = 28. TPDR5 = 30. TPDR6 = 32. TPAR3 = 42. TPAR4 = 44. TPAR5 = 46. TPAR6 = 48. ; ; ROSGET = . TST $CTASK ; CALLER A TASK? F * ;*********************************************************************** ; .DEF ROSGET .REF $CTASK,ACTIVE,PPASV5 ; ; TPDR4 = 28. TPDR5 = 30. TPDR6 = 32. TPAR4 = 44. TPAR5 = 46. TPAR6 = 48. ; ; ROSGET = . TST $CTASK ; CALLER A TASK? BEQ RETRN ; NO-RETURN MOV R0,-(SP) ; SAVE G * ;* ABORT THE TASK IF SUSPENDED OR QUEUED * ;* * ;* PROGRAM USAGE. THE TASK ORIENTED INPUT PROCESSOR IS * ;* CALLED BY INPUT VIA * ;* * ;* JSR PC, ROUT * ;* H .IFNZ $KT11C ; MACRO MOV @#$KPAR5,-(SP) ; SAVES MOV @#$KPAR6,-(SP) ; KERNEL .ENDC ; PAR'S .ENDM ; 5 AND 6 .MACRO RST.56 ;AND THIS .IFNZ $KT11C ; MACRO MOV (SP)+,@#$KPAR6 ; RESTORES MOV (SP)+,@#$KPAR5 ; KERNEL .ENDC ; PAR'S .ENDM ; 5 AI BEQ RETRN ; NO-RETURN MOV R0,-(SP) ; SAVE MOV R2,-(SP) ; FOR WORK .LOCK MOV ACTIVE,-(SP) ; TASK PPA TO STACK JSR PC,PPASV5 ; CONVERT TO MOV (SP)+,R0 ; SYSTEM VIRTUAL ADDRESS MOV #$KPDR0,R2 ; ADDRESS OF KERNEL PDR 0 MOV (R2)+,TPDR4(R0) ; SET UP MOV (R2)+,TPDR5(R0) ; PDR'S IN MOV (R2)+,TPDR6(R0) ; J MOV R2,-(SP) ; FOR WORK .LOCK MOV ACTIVE,-(SP) ; TASK PPA TO STACK JSR PC,PPASV5 ; CONVERT TO MOV (SP)+,R0 ; SYSTEM VIRTUAL ADDRESS MOV #$KPDR0,R2 ; ADDRESS OF KERNEL PDR 0 MOV (R2)+,TPDR4(R0) ; SET UP MOV (R2)+,TPDR5(R0) ; PDR'S IN MOV (R2)+,TPDR6(R0) ; TASK HEADER ; ; SET UP APPROPRIATE BITS IN TPDR4-6 SO WILL BE TREATED AS K * ;* WHERE ROUT = ENABLE * ;* = DSABLE * ;* = QTASK * ;* = TABORT * ;* * ;* OR THROUGH A SEGMENT LOAD CALL (OVERLAY SYSTEM) WITH * ;* RETURN POINTS 1,2,3 OR 4 RESPECTIVELY. LND 6 .PAGE ;*********************************************************************** ;* ;* Q T I M E ENTRY POINT ;* ;* ; ; ; ; ; QTIME = . MOV R3,-(SP) ;SAVE REGISTERS THAT WE USE MOV R2,-(SP) ; MOV R1,-(SP) ; MOV R0,-(SP) ; SAV.56 ;SAVE KERNEL PAR 5 AND 6 ON STACK MOV @#PS,R3 ;SAVE PS MOV MODULE(SP),R0 ;GET ADDRESS OF M TASK HEADER ; ; SET UP APPROPRIATE BITS IN TPDR4-6 SO WILL BE TREATED AS ; COMMON AREA BY RPOM IN CASE TASK CHECKPOINTED AND ROLL-IN ; OCCURS WHERE RPOM ATTEMPTS TO RESOLVE ASR'S ; BIS #100000,TPDR4(R0) BIS #100000,TPDR5(R0) BIS #100000,TPDR6(R0) MOV -(R2),$UPDR6 ; SET UP MOV -(R2),$UPDR5 ; USER MODE MOV -(R2),$UPDR4 ; PDR'S 4,5 AND 6 MOV #$KPAR0,R2 N; COMMON AREA BY RPOM IN CASE TASK CHECKPOINTED AND ROLL-IN ; OCCURS WHERE RPOM ATTEMPTS TO RESOLVE ASR'S ; BIS #100000,TPDR4(R0) BIS #100000,TPDR5(R0) BIS #100000,TPDR6(R0) MOV -(R2),$UPDR6 ; SET UP MOV -(R2),$UPDR5 ; USER MODE MOV -(R2),$UPDR4 ; PDR'S 4,5 AND 6 MOV #$KPAR0,R2 ; ADDRESS OF KERNEL PAR 0 MOV (R2)+,TPAR4(R0) ; SET UP MOV (RO * ;* * ;* AND R5= ADDRESS OF COMMAND STRING DELIMITER POSITION * ;* R4= NUMBER OF POSITIONS IN PARAMETER NOT INCUDING * ;* DELIMITER OR EOM. * ;* * ;* UPON RETURN FROM THIS SUBROUTINE, IF R5=0, THEN AN * ;* ERROR OCCURRED AND INPUT WILL TYPPTIMER MODULE DEC (R0) ;SEE IF REQUEST IS VALID BNE QTMX01 ;BRANCH IF ILLEGAL THREAD WORD .IFNZ $KT11C MOV R0,-(SP) ;CONVERT THE ADDRESS TO PACKED JSR PC,SVPPA ;PHYSICAL (REQUIRED FOR THREADS) MOV (SP)+,R1 ;GET PACKED PHYSICAL RESULT .ENDC CMP #TSK.PC,RET.PC(SP) ;SEE IF THIS IS ROS CALLING BNE QTMA10 ;BRANCH IF YES MOV Q; ADDRESS OF KERNEL PAR 0 MOV (R2)+,TPAR4(R0) ; SET UP MOV (R2)+,TPAR5(R0) ; PAR'S IN MOV (R2)+,TPAR6(R0) ; TASK HEADER MOV -(R2),$UPAR6 ; AND MOV -(R2),$UPAR5 ; USER MODE MOV -(R2),$UPAR4 ; PAR'S 4,5 AND 6 SPL 0 ; CAN DO SINCE CALLED BY TASK MOV (SP)+,R2 ; RESTORE MOV (SP)+,R0 RETRN: RTS PC ; RETURN TO 2)+,TPAR5(R0) ; PAR'S IN MOV (R2)+,TPAR6(R0) ; TASK HEADER MOV -(R2),$UPAR6 ; AND MOV -(R2),$UPAR5 ; USER MODE MOV -(R2),$UPAR4 ; PAR'S 4,5 AND 6 SPL 0 ; CAN DO SINCE CALLED BY TASK MOV (SP)+,R2 ; RESTORE MOV (SP)+,R0 RETRN: RTS PC ; RETURN TO TASK ; .ENDC .END SE THE APPROPRIATE * ;* ERROR MSG. "ILL PAR!" * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;********************************T$CTASK,RSVRD2(R0) ;SAVE TASK NUMBER IN MODULE BEQ QTMA20 ;BRANCH IF NOT A TASK BITB #J,OPTION(R0) ;SEE IF TASK IS TRYING BEQ QTMA20 ;TO JSR TO A SUBROUTINE; BR IF NO BR QTMX02 ;OTHERWISE, GO SET ERROR CONDITION ; QTMA10: CLR RSVRD2(R0) ;CLEAR TASK NO. (ROS IS THE CALLER - ;NOT A TASK) ; QTMA20: MOVB RES(R0),R2 ;GET REQUTASK ; ;*********************************************************************** ;* * ;* GETHDR WILL ENABLE A TASK TO ADDRESS ITS OWN TASK HEADER USING * ;* ITS USER ASR 3-FOR SYSTEM TASKS ONLY. * ;* CALLING SEQUENCE: * ;* * ;* EMT GETHDR V; UPDATE EMTRAP.015 09.20.72 ; UPDATE EMTRAP.014 08.26.72 ; UPDATE EMTRAP.013 08.21.72 ; EMTRAP.012 08.04.72 ; UPDATE EMTRAP.011 07921972 ; UPDATE EMTRAP.010 07.20.72 11/45 VERSION, FIRST ASSEMBLY ; UPDATE 3/MAY/72 EMT.S34 ; UPDATE 4/13/72 EMTRAP ; ******************************************************************** ; * PROGRAM IDENTIFICATION: "EMTRAP" W*************************************** .DEF ENABLE,DSABLE,QTASK,TABORT ; .CSECT ; ; FCN: .WORD 0 ; TASK FUNCTION SWITCH ; ; MXTSKL = 3. ; MAXIMUM TASK NO. LENGTH ; ; PROCESS TABLE ; PROCSS = . .WORD TOFB00-RELOC ; ENABLE THE TASK .WORD TOFC00-RELOC ; DISABLE THE TASK .WORD TOFD00-RELOC ; QUEUE THE TASK .WORD TOFE00-RELOC ; ABORT THE TASK ; PLOCK = 340 XUESTED RESOLUTION BLT QTMX03 ;BRANCH IF ILLEGAL (< 0) CMP R2,#$NRES ;TEST FOR EXCEEDING MAX VALUE ($NRES) BGE QTMX03 ;AND BRANCH IF IT DOES .IFZ $1145 ;INHIBIT INTERRUPTS MOVB #340,@#PS .ENDC .IFNZ $1145 SPL 7 .ENDC ASL R2 ASL R2 ;CONVERT TO DOUBLEWORD INDEX ;* ;* CODE TO PLACE THE TIMER MODULE IN THE FORWARD AND BAY * ;* MOV (SP)+,HVA * ;* * ;* WHERE HVA IS THE VIRTUAL ADDRESS OF THE TASK'S HEADER * ;* USER ASR3 WILL BE SET AS WILL TPAR3 AND * ;* TPDR3 IN THE TASK'S HEADER. * ;* * ;* PROGRAMMER 54 Z * ; * EMULATOR TRAP SERVICE ROUTINE * ; * * ; * PURPOSE: DECODES ALL EMT CALLS AND TRANSFERS CONTROL TO PROPER* ; * SUBROUTINE, AFTER ALTERING STACK TO LOOK IDENTICAL TO A * ; * "JSR PC,SBRTNE". * ; * * ; * USAGE: ALL EXTERNAL LINKS TO MONITOR SUBROUTINES AR[ ; CPU PRIORITY LOCKOUT MASK PSR = 177776 ; ; TASK STATUS EQUATES ; QUISNT = 0. ; QUIESCENT OVYACT = 1. ; RPOM WORKING ON TASK QINROS = 2. ; QUEUED IN ROS THREAD TACTVE = 3. ; TASK ACTIVE VOLSUS = 4. ; VOLUNTARILY SUSPENDED INVSUS = 5. ; INVOLUNTARILY SUSPENDED TDSABL = 6. ; DISABLED TABRTD = 7. ; ABORTED \CKWARD ;* THREADS.......NO SEGMENTATION ;* .IFZ $KT11C MOV R0,@RES0.E(R2) ;FORWARD MOV BACK.B(R2),RSVRD1(R0) ;AND THEN BNE QTMB10 ; THE MOV R0,BACK.E(R2) ; BACKWARD ; QTMB10: ; MOV R0,BACK.B(R2) ; .ENDC ;* ;* AND THIS LOGIC DOES THE SAME THING (FORWARD/BACKWARD THREADING) ;* BUT FOR SYSTEMS WITH MEMORY SEGMENTATION. ;* .IFNZ ] * ;* DATE * ;* REVISION * ;* * ;*********************************************************************** .DEF GETHDR ; GETHDR = . MOV (SP),-(SP) ; FOR PROPER RETURN MOV R0,-(SP) ; SAVE WORK MOV $KPAR5,-(SP) ; ^E MADE VIA * ; * CALLS OF THE FORM: "EMT SNUMBER", WHERE "SNUMBER" IS A * ; * PRE-ASSIGNED INDEX TO THE TABLE OF MONITOR SUBROUTINES. ANY * ; * ARGUMENTS REQUIRED BY THE SUBROUTINE MUST BE PUSHED ONTO THE * ; * STACK PRIOR TO THE CALL. UPON ENTRY TO THE SUBROUTINE THE STACK* ; * WILL LOOK THE SAME AS IF A "JSR PC,SBRTNE" HAD BEEN THE CALL. * ; * THIS ALLOWS CALLS OF THE JSR-TYPE TO BE COMPATIBLE WITH THE * ; * EMT-TYPE CALLS. ALTHOUGH PROCESSOR STATUS IS_ .PAGE ; ENABLE = . CLR R1 ; FUNCTION SWITCH FOR ENABLE BR TOFA00 ; DSABLE = . MOV #2.,R1 ; FUNCTION SWITCH FOR DSABLE BR TOFA00 ; QTASK = . MOV #4.,R1 ; FUNCTION SWITCH FOR QTASK BR TOFA00 ; TABORT = . MOV #6.,R1 ; FUNCTION SWITCH FOR TABORT ; TOFA00 = . ; TASK ORIENTED FUNCTION PROCESSOR CMPB (`$KT11C MOV RES0.E(R2),-(SP) ;PUSH ADDR OF LAST QUEUED MODULE JSR PC,PPASV6 ;(PACKED PHYSICAL) - CONVERT TO MOV R1,@(SP)+ ;SYSTEM VIRTUAL AND QUEUE IT MOV R1,RES0.E(R2) ;IN FORWARD THREAD MOV BACK.B(R2),RSVRD1(R0) ;AND THEN, PUT IT IN THE BNE QTMB10 ;THE BACKWARD THREAD MOV R1,BACK.E(R2) ; QTMB10: MOV R1,BACK.B(R2) .ENDC aREGISTERS .LOCK MOV ACTIVE,-(SP) ; CURRENT TASK HEADER PPA JSR PC,PPASV5 MOV (SP)+,R0 ; HEADER SVA MOV #077406,$UPDR3 ; SER UP USER'S MOV #077406,TPDR3(R0) ; PDRS MOV $KPAR5,$UPAR3 ; SET UP USER'S MOV $KPAR5,TPAR3(R0) ; PARS SPL 0 ; CAN DO SINCE RETURNING TO TASK SUB #040000,R0 ; SET UP FOR ASR3 IN VIRTUAL ADDRESS MOV b RAISED TO LEVEL * ; * SEVEN DURING THE TRAP ROUTINE, IT IS RETURNED TO ITS STATE * ; * AT THE TIME OF CALL WHEN THE CALLED SUBROUTINE IS ENTERED. * ; * * ; * STACK ON ENTRY: * ; * 2(SP): (PS) AT TIME OF TRAP * ; * (SP): (PC) CALLER RETURN ADDRESS * ; * cR5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE TOFC05 ; NO-ERROR TST R4 BEQ TOFC05 ; PARAMETER MUST BE 1-3 CHARACTERS CMP R4,#MXTSKL ; MAX. TASK CHAR. LENGTH =3 BHI TOFC05 ; ERROR - TOO MANY POSITIONS JSR PC,CVTBIN ; CONVERT TO BINARY INTEGER TST R5 ; CONVERSION ERROR OCCUR? BEQ TOFC05 ; YES CMP R4,#$INPNO ; TRYING TO SCREWd MOV TDELAY(SP),RSVRD5(R0) ;STORE TIMEOUT COUNTERS BICB #D!Q!B,OPTION(R0) ;CLEAR BITS USED BY TIMER ROUTINES MOV RSVRD2(R0),R1 ;SEE IF CALLER IS A TASK BEQ QTMC00 ;BRANCH IF NO INCB IOSTAT(R1) ;YES - INCREMENT I/O IN STATUS FLAG .IFNZ $KT11C CLRB RESET(R0) ;CLEAR THE RESET BYTE .ENDC ;(TASK CAN'T BE UNSUSPENDED ;PERIODICALLY - TAINR0,6.(SP) ; RETURN ON STACK MOV (SP)+,$KPAR5 MOV (SP)+,R0 RTS PC ; RETURN ; .ENDC .END f * ; * STACK ON EXIT: * ; * (SP): (PC) CALLER RETURN ADDRESS * ; * * ; * ERROR RETURNS: IF AN EMT CODE IS USED WHICH IS INVALID * ; * ---EITHER OUTSIDE THE LIMITS OF THE EMT TABLE, OR AN INVALID * ; * CODE WITHIN THE TABLE--- A RETURN IS MADE IMMEDIATELY TO THE * ; * CALLER WITH NO ACTION TAKEN.g AROUND WITH INPUT? BEQ TOFC05 ; YES TOFA10: CMP R4,@#TASKS+$ROSM ; IS TASK VALID? BGT TOFC05 ; NO ASL R4 ; TASK NO. WORD INDEX CMP #1.,HEADER+$ROSM(R4) ; TASK LOADED IN SYSTEM? BEQ TOFC05 ; NO-ERROR ASR R4 JMP @PROCSS-RELOC(R1) ; PERFORM PROCESS ; ; ENABLE THE TASK SPECIFIED BY R4 ; TOFB00 = . MOVB #PLOCK,@#PSR ; SET PRIh'T ETHICAL) .IFZ $KT11C BITB #S,OPTION(R0) ;THEN SEE IF WE'RE SUPPOSED TO SUSPEND HIM BEQ QTMC00 ;BRANCH IF NO .ENDC BISB #B,OPTION(R0) ;OTHERWISE, SET 'BUSY' BIT IN MODULE SUB #2,STACK ;PUSH MODULE ADDRESS ONTO SYSTEM STACK MOV R0,@STACK ;(NOT TASK STACK) ;THIS IS BECAUSE QSAVEI SWITCHES TO ;THE SYSTEM STACK MOVB i ; TIME PARAMETER LENGTH HH:MM DPARLN = 8. ; DATE PARAMETER LENGTH MM/DD/YY ; SAVSTK: .WORD 0 ; LOCATION IN WHICH TO SAVE STACK POINTER ; ; ; TIME-OF-DAY TTY MESSAGE ; TIMMSG = . .WORD 10. .WORD 0 .BYTE 15 ; CARRIAGE RETURN HOUR: .ASCII 'HH:' ; HOUR-HOUR MINUTE: .ASCII 'MM:' ; MINUTE-MINUTE SECOND: .ASCII 'SS' ; SECOND-SECOND .BYTE 15 j * ; * THE CALLER SHOULD NOTE THAT HE MAY BE INTERRUPTED BETWEEN HIS * ; * EMT CALL AND THE EVENTUAL RETURN, EVEN IN THE CASE OF AN ERROR.* ; * * ; * PROGRAMMER: 52 * ; * VERSION:003.003 * ; * DATE: 13-APR-72 * ; * kORITY LOCKOUT CMPB #TDSABL,TSTAT+$ROSM(R4) ; IS TASK DISABLED? BNE TOFB10 ; NO-IGNORE REQUEST CLRB TSTAT+$ROSM(R4) ; YES-ENABLE AND SET QUIESCENT CLRB @#PSR ; RESET CPU LEVEL TOFB10: RTS PC ; RETURN ; ; DISABLE THE TASK SPECIFIED BY R4 ; TOFC00 = . MOVB #PLOCK,@#PSR ; SET PRIORITY LOCKOUT TSTB TSTAT+$ROSM(R4) ; IS TASK QUIESCENT? BEQ TOFC10 ; YES- OK THElR3,@#PS ;ENABLE INTERRUPTS CLR MODULE(SP) ;NOW, SET UP STACK FOR QSAVEI: 0 = NO ERRORS MOV R3,TDELAY(SP) ;PUT TASK'S PS VALUE ON STACK .IIF NE $KT11C ADD #4,SP ;DON'T NEED KERNEL PAR 5/6 SINCE ;THE CALLER IS A TASK MOV (SP)+,R0 ;RESTORE MOV (SP)+,R1 ; THE MOV (SP)+,R2 ; GENERAL MOV (SP),R3 ; REGISTERS CLR m ; CARRIAGE RETURN .EVEN ; ; DATE TTY MESSAGE ; DATMSG = . .WORD 10. .WORD 0 .BYTE 15 ; CARRIAGE RETURN MONTH: .ASCII 'MM/' ; MONTH-MONTH DAY: .ASCII 'DD/' ; DAY-DAY YEAR: .ASCII 'YY' ; YEAR-YEAR .BYTE 15 ; CARRIAGE RETURN .EVEN ; ; TIME-OF-DAY EDIT TABLE ; TIMEDT = . .WORD HOUR-RELOC .WORD MINn * ; * G U L F E L E C T R O N I C S Y S T E M S * ; * * ; ******************************************************************** .TITLE EMTRAP .DEF TSK.PC .REF QUEUE,SUSPND,UNSPND,EXIT,FRETSK,ABORT,QTIME,DQTIME .REF QSKED,DQSKED,TTYOUT,TTYIN,BINASC,ASCBIN .REF MASK,UNMASK,ERRTYP,GTIME,GDATE .REF CRoN CMPB TSTAT+$ROSM(R4),#TDSABL ; NON-QUIESCENT BGE TOFC10 ; NO - OK CLRB @#PSR ; RESET CPU LEVEL TOFC02: MOV #ER3MSG-RELOC,DATADR ; SET UP TO TYPE TOFC03: MOV #TTYLST-RELOC,-(SP) ; APPROPRIATE EMT TTYOUT ; ERROR MESSAGE TOFC05: CLR R5 ; SET ERROR INDICATOR FOR INPUT TOFC08: RTS PC ; RETURN ; TOFC10 = . MOVB #TDSABL,TSTAT+$ROSM(R4) ; DISABLE Tp (SP) ;SET FLAG FOR VOLUNTARY SUSPENSION JSR PC,QSAVEI ;AND SUSPEND THE CALLING TASK ;NOW WE'RE ON THE SYSTEM STACK ADD #OPTION,(SP) ;CLEAR MODULE BUSY FLAG BICB #B,@(SP)+ ;(WE'RE NOW ON SYSTEM STACK) MOV #TIMBIT!TODBIT!STLBIT,@#CLKENB ;START TIMERS INC ONOFF ;SET 'TIMER IN PROGRESS' FLAG JMP DSPTCH ;AND EXIT ;* rUTE-RELOC .WORD SECOND-RELOC ; ; DATE EDIT TABLE ; DATEDT = . .WORD YEAR-RELOC .WORD DAY-RELOC .WORD MONTH-RELOC ; ; ; THE FOLLOWING SUBROUTINE IS USED BY TIME AND DATE ; TO CONVERT THE 'HH:MM' OR 'HH/DD/YY' STRING TO ; BINARY AND PUT IT ON THE STACK FOR STIME OR SDATE. ; R0 = NUMBER OF TWO CHARACTER FIELDS TO CONVERT ; R5 = FIRST CHARACTER POSITION TO CONVERT ; CVT2CH = . uEAD,LPRNTR,DISCIO,SGLOAD,DECTAP .REF GOBACK,CKPT,NOCKPT,SCAN,NUMFLD,NPARAM .REF BFINIT,BFENTR,BFOPEN,BFCLOS,BFDELT,BFPACK,BFWRIT,BFREAD .REF BFWAIT,R50PAK,R50UNP,DEFINE,DELETE,PRTCT,UNPRCT .REF CORLOD,STACK,ROSGET,PFRITE,SDATE,STIME,PSTRAP .REF GETHDR .DEF EMTRAP,EMTABL,MAXEMT,EMTINIT .PAGE .IFZ $DEBUG .ASECT .=30 .WORD EMTRAP,340 ;INIT TRAP LOCATION: RUNS AT LEVEL 7. .CSEsASK CLRB @#PSR ; RESET CPU LEVEL RTS PC ; RETURN ; ; QUEUE THE TASK SPECIFIED BY R4 ; TOFD00 = . MOV R4,-(SP) ; TASK NO. TO STACK FOR CALL CLR -(SP) ; USE PRIORITY IN TASK TABLE CLR -(SP) ; NO ARGUMENT CLR -(SP) ; IMMEDIATE RETURN REQUESTED EMT QUEUE ; QUEUE THE TASK TST (SP)+ ; ERROR OCCUR BLE t;* THE CALLING PROGRAM IS NOT A TASK. START UP TIMERS AND EXIT ;* QTMC00: MOV #TIMBIT!TODBIT!STLBIT,@#CLKENB ;START TIMERS INC ONOFF ;INCREMENT 'TIMER IN PROGRESS' FLAG CLR MODULE(SP) ;SET 'NO ERROR' FLAG ; QTMC10: MOVB R3,@#PS ;ENABLE INTERRUPTS RST.56 ;RESTORE KERNEL PAR 5 AND 6 MOV (SP)+,R0 ;RESTORE REGISTERS MOV (SP)+,R1 MOV (SP)+,R2 ; UPDATE 9/21/72 EMTRAP.S16 ; UPDATE EMTRAP.015 09.20.72 ; UPDATE EMTRAP.014 08.26.72 ; UPDATE EMTRAP.013 08.21.72 ; EMTRAP.012 08.04.72 ; UPDATE EMTRAP.011 07921972 ; UPDATE EMTRAP.010 07.20.72 11/45 VERSION, FIRST ASSEMBLY ; UPDATE 3/MAY/72 EMT.S34 ; UPDATE 4/13/72 EMTRAP ; ******************************************************************** ; * PROGRAM IDENTIFIv MOV (SP)+,R1 ; SAVE RETURN PC CVT210: MOV #2.,R4 ; CONVERT NEXT TWO CHARACTERS JSR PC,CVTBIN ; TO BINARY TST R5 ; ERROR OCCUR DURING CONVERSION? BEQ TDERR ; YES-ERROR MOV R4,-(SP) ; NO-SAVE ON STACK FOR STIME/SDATE ADD #3.,R5 ; BUMP TO NEXT TWO CHARACTER NUMBER DEC R0 ; FINISHED? BNE CVT210 ; NO Jw TOFC08 ; NO-RETURN BR TOFC02 ; YES - REPORT NON-QUIESCENT MESSAGE ; ; ABORT THE TASK SPECIFIED BY R4 ; TOFE00 = . MOV R4,-(SP) ; TASK NO. TO STACK EMT ABORT ; ABORT TASK RTS PC ; RETURN TO INPUT ; ;*********************************************************************** ;* * ;* PROGRAM IDENTIFICATION. TIME AND DAx MOV (SP)+,R3 MOV (SP)+,(SP) ;MOVE RETURN PC INTO POSITION RTS PC ;AND RETURN TO CALLER ;* ;* ERROR CONDITIONS ;* QTMX01: MOV #1,MODULE(SP) ;ILLEGAL THREAD WORD INC (R0) BR QTMC10 ; QTMX02: MOV #2,MODULE(SP) ;TASK CAN'T HAVE JSR ADDRESS IN MODULE INC (R0) ;RESET THREAD BR QTMC10 ; QTMX03: MOV #3,MODULE(SP) ;ILLEGAL THREAD WORD yCT .ENDC .IFZ $KT11C EMTRAP = . ;ENTRY TO EMT SERVICE ROUTINE ;TIMING: 64 MICROSECONDS TST -(SP) ;PUSH STACK TO MAKE ROOM FOR SBRTNE ADDR MOV R0,-(SP) ;SAVE IT MOV 4(SP),R0 ;CALLER RETURN ADDR MOV 6(SP),4(SP) ;MOVE CALLER'S PS FOR RTI EXIT MOV R0,6(SP) ;WILL LEAVE CALLER'S PC ON STACK @ EXIT DEC R0 ;BACK POINTER ONE BYTEzMP (R1) ; YES ; ; ERROR RETURN TO INPUT ; TDERR = . CLR R5 ; SET ERROR INDICATOR MOV SAVSTK,SP ; RESTORE STACK INCASE ERROR OCCURED ; ; WHILE IN CVT2CH RTS PC ; RETURN ; TIME = . MOV SP,SAVSTK ; SAVE STACK POINTER INCASE ERROR RETURN CMPB (R5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE TIMB00 {TE, CATALOG NUMBERS * ;* ; RESPECTIVELY, SET TIME OF DAY, TYPE TIME OF DAY, * ;* SET DATE AND TYPE DATE. * ;* * ;* PURPOSE. THIS SUBROUTINE WILL TAKE THE OPERATOR INPUT FROM A * ;* 'TM,HH:MM' OR 'DT,MM/DD/YY' COMMAND AND USE IT TO SET THE * ;* ROS SYSTEM TIME-OF-DAY OR DATE, RESPECTIVELY. IF THE COMMAND * ;* TO TYPE THE TIME-OF-DAY 'TM| INC (R0) ;RESET THREAD BR QTMC10 .PAGE ;*********************************************************************** ;* ** ;* D Q T I M E ** ;* ** ;* PROGRAM IDENTIFICATION. DQTIME - DEQUEUE TIMER REQUESTS. ** ;* } MOVB -(R0),R0 ;BACK POINTER TO EMT INSTR&GET EMT CODE ASL R0 ;NEED TO INDEX WORDS IN TABLE CMP R0,#MAXEMT*2 ;SEE IF CODE IS VALID BHI EMTA20 ;INVALID: OUTSIDE TABLE RANGE EMTA10: MOV EMTABL(R0),2(SP) ;LOAD STACK WITH SUBROUTINE ADDR ; IF AN INVALID CODE IS USED, THE TABLE ENTRY WILL POINT TO "EMTERR". MOV (SP)+,R0 ;RESTORE USER'S RTI ;POP SUBRTNE ADDRESS A~ ; NO- TYPE TIME-OF-DAY CMP R4,#TPARLN ; CORRECT NO. OF CHRACTERS TO SET TIME? BNE TDERR ; NO-ERROR MOV #2.,R0 ; GO THRU CONVERT LOOP TWICE JSR PC,CVT2CH ; CONVERT TO BINARY AND SET ON STACK EMT STIME ; SET TIME OF DAY IN ROS TIMA10: TST (SP)+ ; ERROR OCCUR? BNE TDERR ; YES-ERROR RTS PC ; NO-RETURN TO INPUT ; ; NO DELIMITER-ASSU' OR TYPE THE DATE 'DT' IS GIVEN, * ;* IT WILL DO SO. * ;* * ;* PROGRAM USAGE. INPUT CALLS TIME OR DATE VIA * ;* JSR PC,TIME OR * ;* JSR PC,DATE * ;* WHERE: R5 = ADDRESS OF COMMAND STRING DELIMITER POSITION * ;* R4 = NUMBER ** ;* PURPOSE. THIS SUBROUTINE REMOVES THE SPECIFIED TIMER ** ;* MODULE FROM THE TIME QUEUE. IF THE ORIGINAL REQUEST WAS ** ;* FROM A TASK, THEN ITS I/O IN PROGRESS FLAG WILL BE ** ;* DECREMENTED. ** ;* ** ;* USAGE. THE ASSEMBLER LINKAGE TO DQTIME IS: ** ;* ND OLD STATUS ;TO EFFECT TRANSFER, LEAVING RTN TO ;CALLER ON TOP. EMTA20: CLR R0 ;RANGE ERROR: USE ENTRY 0... BR EMTA10 ;...AND FORCE EXIT VIA "EMTERR" .IFNZ $DEBUG EMTERR: HALT ;DURING DEBUG, BAD CALL CAUSES HALT .ENDC .IFZ $DEBUG EMTERR: RTS PC ;ERROR RETURN USED FOR INVALID CODES .ENDC .ENDC .PAGE ME TYPE TIME REQUESTED ; TIMB00 = . MOV #GTIME,R0 ; EMT # OF GET TIME SUBROUTINE MOV #TIMEDT-RELOC,R1 ; ADDRESS OF TIME EDIT TABLE MOV #TIMMSG-RELOC,R2 ; ADDRESS OF TIME MESSAGE JMP TYPTOD ; TYPE TIME-OF-DAY ; DATE = . MOV SP,SAVSTK ; SAVE STACK POINTER INCASE ERROR RETURN CMPB (R5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE DATB00 ; NO-TY OF POSITIONS IN PARAMETER NOT INCLUDING * ;* DELIMITER OR EOM. * ;* UPON RETURN FROM THIS SUBROUTINE, IF R5 = 0, THEN AN ERROR * ;* OCCURED AND INPUT WILL TYPE THE APPROPRIATE ERROR MESSAGE. * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION  ** ;* MOV #MODULE,-(SP) ** ;* EMT DQTIME ** ;* TST (SP)+ ** ;* BNE ERROR ** ;* ** ;* PROGRAMMER: 55 ** ;* DATE: 08.15.72  EMTABL = . ;TOP OF EMT LINK TABLE .IFZ $KT11C .WORD EMTERR ;#0 ALWAYS AN ERROR .ENDC .IFNZ $KT11C .WORD 0 .ENDC .WORD QUEUE ;#1 .WORD SUSPND ;#2 .WORD UNSPND ;#3 .WORD EXIT ;#4 .WORD FRETSK ;#5 .WORD ABORT ;#6 .WORD QTIME ;#7 .WORD DQTIME PE DATE CMP R4,#DPARLN ; CORRECT NO. OF CHARACTERS TO SET DATE BNE TDERR ; NO-ERROR MOV #3.,R0 ; GO THRU CONVERT LOOP THREE TIMES JSR PC,CVT2CH ; CONVERT TO BINARY AND SET ON STACK EMT SDATE BR TIMA10 ; CHECK FOR ERROR & RETURN ; ; NO DELIMITER-ASSUME TYPE DATE REQUESTED ; DATB00 = . MOV #GDATE,R0 ; EMT # OF GET DATE SUBROUTINE MOV #DA * ;* * ;*********************************************************************** .DEF TIME,DATE GTIME = 25 GDATE = 26 SDATE = 60 STIME = 61 ; .CSECT ; ; TPARLN = 5. ; TIME PARAMETER LENGTH HH:MM DPARLN = 8. ; DATE PARAMETER LENGTH MM/DD/YY ; SAVSTK: .WORD 0 ; LOC ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* DIGITAL DATA SYSTEMS ** ;* SAN DIEGO, CALIF ** ;* ** ;***************************;#10 .WORD QSKED ;#11 .WORD DQSKED ;#12 .WORD TTYOUT ;#13 .WORD TTYIN ;#14 .WORD DECTAP ;#15 .WORD BINASC ;#16 .WORD ASCBIN ;#17 .WORD MASK ;#20 .WORD UNMASK ;#21 .WORD ERRTYP ;#22 .WORD DISCIO ;#23 .WORD CREAD ;#24 .WORD LPRNTR ;#25 .WTEDT-RELOC,R1 ; ADDRESS OF DATE EDIT TABLE MOV #DATMSG-RELOC,R2 ; ADDRESS OF DATE MESSAGE ; ; TYPTOD IS USED BY TIME AND DATE TO TYPE THE TIME-OF-DAY ; OR TO TYPE THE DATE. ; UPON ENTRY: R0 = ADDRESS OF GTIME OR GDATE ; R1 = APPROPRIATE EDIT TABLE ADDRESS ; R2 = ADDRESS OF MESSAGE ; TYPTOD = . BIC #377,EMT BIS R0,EMT ; SET CORRECT EMTATION IN WHICH TO SAVE STACK POINTER ; ; ; TIME-OF-DAY TTY MESSAGE ; TIMMSG = . .WORD 10. .WORD 0 .BYTE 15 ; CARRIAGE RETURN HOUR: .ASCII 'HH:' ; HOUR-HOUR MINUTE: .ASCII 'MM:' ; MINUTE-MINUTE SECOND: .ASCII 'SS' ; SECOND-SECOND .BYTE 15 ; CARRIAGE RETURN .EVEN ; ; DATE TTY MESSAGE ; DATMSG = . .WORD 10. .WORD 0******************************************** .DEF DQTIME ; ; DQTIME = . MOV R0,-(SP) ;SAVE REGISTERS MOV R1,-(SP) ; MOV R2,-(SP) ; MOV R3,-(SP) ; SAV.56 ;SAVE KERNEL PAR 5 AND 6 MOV MODULE-2(SP),R0 ;PUT TIMER MODULE ADDRESS IN R0 ; DQTA10: CMP #1,(R0) ;SEE IF MODULE IS REALLY IN A THREAD BEQ DQTX00 ;BRANCH IF IT ORD GOBACK ;#26 .WORD CKPT ;#27 .WORD NOCKPT ;#30 .WORD GTIME ;#31 .WORD GDATE ;#32 .WORD SCAN ;#33 .WORD NUMFLD ;#34 .WORD NPARAM ;#35 .WORD BFINIT ;#36 .WORD BFENTR ;#37 .WORD BFOPEN ;#40 .WORD BFCLOS ;#41 .WORD BFDELT ;#42 .WORD BFPACK  # ; ; NOTE: CAN DO SINCE A TASK AND NOT RE-ENTERENT. ; MOV #3.,R5 ; GO THRU LOOP THREE TIMES EMT: EMT 0 ; GET TIME OR GET DATE TYPT10: MOV #ASCII-RELOC,-(SP) ; ADDRESS OF CONVERSION WORK STRING EMT BINASC ; CONVERT NO. ON STACK TO ASCII MOV (R1)+,R4 ; ADDR. AT WHICH TO STORE 2 CHAR. ASCII MOVB ASCII+4,(R4)+ ; SET IN APPROPRIATE PLACE MOVB ASCII+5,(R4)+ ; IN MESS .BYTE 15 ; CARRIAGE RETURN MONTH: .ASCII 'MM/' ; MONTH-MONTH DAY: .ASCII 'DD/' ; DAY-DAY YEAR: .ASCII 'YY' ; YEAR-YEAR .BYTE 15 ; CARRIAGE RETURN .EVEN ; ; TIME-OF-DAY EDIT TABLE ; TIMEDT = . .WORD HOUR-RELOC .WORD MINUTE-RELOC .WORD SECOND-RELOC ; ; DATE EDIT TABLE ; DATEDT = . .WORD YEAR-RELOC .WORD DAYIS NOT THREADED MOVB RES(R0),R2 ;GET RESOLUTION, AND ASL R2 ;CONVERT TO DOUBLEWORD INDEX ASL R2 ; MOV @#PS,-(SP) ;SAVE CALLER'S PROCESSOR PRIORITY LEVEL .IFZ $1145 ;THEN, MOVB #340,@#PS ; INHIBIT .ENDC ; THE .IFNZ $1145 ; BLINKIN' SPL 7 ; INTERRUPTS .ENDC ;  ;#43 .WORD BFWRIT ;#44 .WORD BFREAD ;#45 .WORD R50PAK ;#46 .WORD R50UNP ;#47 .WORD BFWAIT ;#50 .WORD DEFINE ;#51 .WORD DELETE ;#52 .WORD PRTCT ;#53 .WORD UNPRCT ;#54 .WORD SGLOAD ;#55 .WORD ROSGET ; 56 .WORD PFRITE ;57 .WORD SDATE ; 60 AGE DEC R5 ; FINISHED? BNE TYPT10 ; NO DEC R5 ; SET R5 NON-ZERO FOR NO ERROR MOV R2,DATADR ; SET MESSAGE ADDRESS IN I/O LIST MOV #TTYLST-RELOC,-(SP) ; I/O LIST TO STACK EMT TTYOUT ; OUTPUT TIME OR DATE MESSAGE RTS PC ; RETURN TO INPUT ; .END -RELOC .WORD MONTH-RELOC ; ; ; THE FOLLOWING SUBROUTINE IS USED BY TIME AND DATE ; TO CONVERT THE 'HH:MM' OR 'HH/DD/YY' STRING TO ; BINARY AND PUT IT ON THE STACK FOR STIME OR SDATE. ; R0 = NUMBER OF TWO CHARACTER FIELDS TO CONVERT ; R5 = FIRST CHARACTER POSITION TO CONVERT ; CVT2CH = . MOV (SP)+,R1 ; SAVE RETURN PC CVT210: MOV #2.,R4 ; CONVERT NEXT TWO CHARACTERS JSR PC,CVTBIN  ;NOW, WE CAN BREATH EASILY AND ;DEQUEUE IN PEACE. BITB #B,OPTION(R0) ;ASSUMING, THAT IS TO SAY, THE MODULE BNE DQTC00 ;ISN'T BUSY. BRANCH IF IT IS (TSK, TSK) DEC ONOFF ;DECREMENT NO. MODULES IN QUEUE .IFZ $KT11C ;ALL'S CLEAR TO DEQUE MODULE. MOV (R0)+,R1 ;GET FORWARD THREAD VALUE BEQ DQTA40 ;BRANCH IF THIS IS LAST RE .WORD STIME ; 61 .WORD KERNEL ; 62 .WORD GETHDR ; 63 MAXEMT = .-EMTABL/2-1 .PAGE .IFNZ $KT11C ;*********************************************************************** ;* ** ;* E M T R A P ** ;* ** ;* 1 1 /  ; TO BINARY TST R5 ; ERROR OCCUR DURING CONVERSION? BEQ TDERR ; YES-ERROR MOV R4,-(SP) ; NO-SAVE ON STACK FOR STIME/SDATE ADD #3.,R5 ; BUMP TO NEXT TWO CHARACTER NUMBER DEC R0 ; FINISHED? BNE CVT210 ; NO JMP (R1) ; YES ; ; ERROR RETURN TO INPUT ; TDERR = . CLR R5 ; SET ERROR INDICATQUEST IN THREAD TST (R0) ;SEE IF THIS IS THE LAST REQUEST BEQ DQTA30 ;IN THE THREAD... BRANCH IF IT IS MOV R1,@(R0) ;DEQUEUE IN FORWARD THREAD ; ; DQTA20: ; MOV (R0),RSVRD1(R2) ;DEQUEUE IN BACKWARD THREAD BR DQTB00 ;THEN BRANCH OVER OTHER DEQUEUE LOGIC ; DQTA30: MOV R1,RES0.B(R2) ;INITIALIZE 'FIRST' FOR THIS RESOLUTION 4 5 V E R S I O N ** ;* ** ;* PROGRAM IDENTIFICATION. EMTRAP - EMT TRAP PROCESSOR ** ;* ** ;* PURPOSE. THIS PROGRAM SERVES AS THE LINK BETWEEN TASKS AND ** ;* ROS IN THE 11/45. THE EMT WILL BE TREATED AS AN ERROR TRAP ** ;* IF THE TASK IS NOT ALLOWED ACCESS TO THE REQUESTED ** ;* SUBROUTINE. OCATION: "EMTRAP" * ; * EMULATOR TRAP SERVICE ROUTINE * ; * * ; * PURPOSE: DECODES ALL EMT CALLS AND TRANSFERS CONTROL TO PROPER* ; * SUBROUTINE, AFTER ALTERING STACK TO LOOK IDENTICAL TO A * ; * "JSR PC,SBRTNE". * ; * * ; * USAGE: OR MOV SAVSTK,SP ; RESTORE STACK INCASE ERROR OCCURED ; ; WHILE IN CVT2CH RTS PC ; RETURN ; TIME = . MOV SP,SAVSTK ; SAVE STACK POINTER INCASE ERROR RETURN CMPB (R5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE TIMB00 ; NO- TYPE TIME-OF-DAY CMP R4,#TPARLN ; CORRECT NO. OF CHRACTERS TO SET TIME? BNE TDERR ; NO-ERROR  MOV R1,BACK.E(R2) ;AND 'LAST' FOR BACKWARD THREAD BR DQTA20 ;GO FINISH DEQUEUE LOGIC ; DQTA40: MOV (R0),BACK.B(R2) ;DEQUEUE BACKWARD THREAD BEQ DQTA50 ;BRANCH IF QUEUE IS NOW EMPTY MOV (R0),RES0.E(R2) ;RESET 'LAST' VALUE CLR @(R0) ;CLEAR END OF BACKWARD THREAD BR DQTBB00 ; DQTA50: CLR RES0.B(R2) ;AT THIS POINT, THERE ARE NO MOV R2,R3 THERWISE, EMTRAP WILL SWITCH STACK VALUES ** ;* FROM USER MODE SP TO KERNAL MODE SP AND JSR TO THE REQUESTED ** ;* SUBROUTINE. ** ;* ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* ALL EXTERNAL LINKS TO MONITOR SUBROUTINES ARE MADE VIA * ; * CALLS OF THE FORM: "EMT SNUMBER", WHERE "SNUMBER" IS A * ; * PRE-ASSIGNED INDEX TO THE TABLE OF MONITOR SUBROUTINES. ANY * ; * ARGUMENTS REQUIRED BY THE SUBROUTINE MUST BE PUSHED ONTO THE * ; * STACK PRIOR TO THE CALL. UPON ENTRY TO THE SUBROUTINE THE STACK* ; * WILL LOOK THE SAME AS IF A "JSR PC,SBRTNE" HAD BEEN THE CALL. * ; * THIS ALLOWS CALLS OF THE JSR-TYPE TO BE COMPATIBLE WITH THE * ; *  MOV #2.,R0 ; GO THRU CONVERT LOOP TWICE JSR PC,CVT2CH ; CONVERT TO BINARY AND SET ON STACK EMT STIME ; SET TIME OF DAY IN ROS TIMA10: TST (SP)+ ; ERROR OCCUR? BNE TDERR ; YES-ERROR RTS PC ; NO-RETURN TO INPUT ; ; NO DELIMITER-ASSUME TYPE TIME REQUESTED ; TIMB00 = . MOV #GTIME,R0 ; EMT # OF GET TIME SUBROUTINE MOV #TIMEDT-RELOC ;ENTRIES LEFT IN THE QUEUE. ADD #RES0.B,R3 ;RESET QUEUES AS FOLLOW: MOV R3,RES0.E(R2) ;SET .ENDC ;* ;* AND NOW FOR THE 11/45 DEQUEUE VERSION WHEN SEGMENTATION IS USED. ;* .IFNZ $KT11C MOV (R0)+,R1 ;GET ADDRESS OF NEXT MODULE IN FWD THREAD BEQ DQTA40 ;BRANCH IF LAST REQUEST IN THREAD TST (R0) ;SEE IF IT'S THE FIRST REQUEST IN THREAD BEQ  DIGITAL DATA SYSTEMS ** ;* SAN DIEGO, CALIF ** ;* ** ;*********************************************************************** .REF $CTASK,$BATCH,$ACESS,PSTRAP .REF TVSV5 ;* ;* SUBROUTINE STATUS TABLE. THIS TABLE DEFINES THE TASK ACCESS ;* RIGHTS TO EACH SUBROUTINE. EACH BIT IS ASSIGNED AS FOLLOWS: ;* ;* BIEMT-TYPE CALLS. ALTHOUGH PROCESSOR STATUS IS RAISED TO LEVEL * ; * SEVEN DURING THE TRAP ROUTINE, IT IS RETURNED TO ITS STATE * ; * AT THE TIME OF CALL WHEN THE CALLED SUBROUTINE IS ENTERED. * ; * * ; * STACK ON ENTRY: * ; * 2(SP): (PS) AT TIME OF TRAP * ; * (SP): (PC) CALLER RETURN ADDRESS * ,R1 ; ADDRESS OF TIME EDIT TABLE MOV #TIMMSG-RELOC,R2 ; ADDRESS OF TIME MESSAGE JMP TYPTOD ; TYPE TIME-OF-DAY ; DATE = . MOV SP,SAVSTK ; SAVE STACK POINTER INCASE ERROR RETURN CMPB (R5)+,#COMMA ; DELIMITER POSITION A COMMA? BNE DATB00 ; NO-TYPE DATE CMP R4,#DPARLN ; CORRECT NO. OF CHARACTERS TO SET DATE BNE TDERR ; NO-ERROR MOV  DQTA30 ;(OR, THE LAST IN THE BKWD THREAD) BR IF YES MOV (R0),-(SP) ;CONVERT FORWARD THREAD VALUE TO JSR PC,PPASV6 ;SYSTEM VIRTUAL MOV (SP)+,R2 MOV R1,@(R2) ;THEN DEQUEUE IN FORWARD THREAD ; DQTA20: MOV R1,-(SP) ;CONVERT PACKED PHYSICAL BACKWARD THREAD JSR PC,PPASV6 ;POINTER TO SYSTEM VIRTUAL, SO'S WE ADD #RSVRD1,(SP) ;CAN DEQUEUE IN BACKWARD THREAD MOV T 0 = AVAILABLE TO BATCH PROGRAMS (1) ;* 1 = AVAILABLE TO BACKGROUND PROGRAMS (2) ;* 2 = AVAILABLE TO FOREGROUND PROGRAMS (4) ;* 4 = AVAILABLE TO SYSTEM PROGRAMS (16.) ;* ;* ;* SUBRST: .BYTE 0 ;ILLEGAL INDEX .BYTE 26 ;QUEUE .BYTE 27 ;SUSPND .BYTE 26 ;UNSPND .BYTE 27 ;EXIT .BYTE 24 ;FRE; * * ; * STACK ON EXIT: * ; * (SP): (PC) CALLER RETURN ADDRESS * ; * * ; * ERROR RETURNS: IF AN EMT CODE IS USED WHICH IS INVALID * ; * ---EITHER OUTSIDE THE LIMITS OF THE EMT TABLE, OR AN INVALID * ; * CODE WITHIN THE TABLE--- A RETURN IS MADE IMMEDIATELY TO T #3.,R0 ; GO THRU CONVERT LOOP THREE TIMES JSR PC,CVT2CH ; CONVERT TO BINARY AND SET ON STACK EMT SDATE BR TIMA10 ; CHECK FOR ERROR & RETURN ; ; NO DELIMITER-ASSUME TYPE DATE REQUESTED ; DATB00 = . MOV #GDATE,R0 ; EMT # OF GET DATE SUBROUTINE MOV #DATEDT-RELOC,R1 ; ADDRESS OF DATE EDIT TABLE MOV #DATMSG-RELOC,R2 ; ADDRESS OF DATE MESSAGE ; ; TYPTOD IS U (R0),@(SP)+ ; BR DQTB00 ; DQTA30: MOV R1,RES0.B(R2) ;INITIALIZE 'FIRST' FOR THIS RESOLUTION MOV R1,BACK.E(R2) ;AND 'LAST' FOR BACKWARD THREAD BR DQTA20 ;THEN GO FINISH THE DEQUEUEING ; DQTA40: MOV (R0),BACK.B(R2) ;DEQUEUE BACKWARD THREAD BEQ DQTA50 ;BRANCH IF QUEUE IS NOW EMPTY MOV (R0),RES0.E(R2) ;RESET 'LAST' FOR THIS RESOLUTION MOV (R0),-(SP) ;CONVERT FTSK .BYTE 24 ;ABORT .BYTE 26 ;QTIME .BYTE 24 ;DQTIME .BYTE 24 ;QSKED .BYTE 24 ;DQSKED .BYTE 27 ;TTYOUT .BYTE 27 ;TTYIN .BYTE 21 ;DECTAP .BYTE 27 ;BINASC .BYTE 27 ;ASCBIN .BYTE 0 ;MASK .BYTE 0 ;UNMASK .BHE * ; * CALLER WITH NO ACTION TAKEN. * ; * THE CALLER SHOULD NOTE THAT HE MAY BE INTERRUPTED BETWEEN HIS * ; * EMT CALL AND THE EVENTUAL RETURN, EVEN IN THE CASE OF AN ERROR.* ; * * ; * PROGRAMMER: 52 * ; * VERSION:003.003 * ; * DATE: 13-APR-72 SED BY TIME AND DATE TO TYPE THE TIME-OF-DAY ; OR TO TYPE THE DATE. ; UPON ENTRY: R0 = ADDRESS OF GTIME OR GDATE ; R1 = APPROPRIATE EDIT TABLE ADDRESS ; R2 = ADDRESS OF MESSAGE ; TYPTOD = . BIC #377,EMT BIS R0,EMT ; SET CORRECT EMT # ; ; NOTE: CAN DO SINCE A TASK AND NOT RE-ENTERENT. ; MOV #3.,R5 ; GO THRU LOOP THREE TIMES EMT: EMT ORWARD THREAD VALUE FROM JSR PC,PPASV6 ;PACKED PHYSICAL TO SYSTEM VIRTUAL CLR @(SP)+ ;AND CLEAR THE END OF THE FOREWARD THREAD BR DQTB00 ; DQTA50: CLR RES0.B(R2) ;AT THIS POINT, THERE ARE NO MORE MOV R2,R3 ;ENTRIES LEFT IN THE QUEUE. ADD #RES0.B,R3 ;RESET THE QUEUES AS FOLLOWS: CLC ; ROR R3 ; ROR R3 ; YTE 0 ;ERRTYP .IFNZ NDISCS ; .BYTE 27 ;DISCIO .ENDC ; .IFZ NDISCS ;NO DISC IN SYSTEM .BYTE 0 ; .ENDC .IFNZ NCR ; .BYTE 21 ;CREAD .ENDC ;NO C/R IN SYSTEM .IFZ NCR ; .BYTE 0 ; .ENDC ; .IFNZ NLP  * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; * * ; ******************************************************************** .TITLE EMTRAP .DEF TSK.PC .REF QUEUE,SUSPND,UNSPND,EXIT,FRETSK,ABORT,QTIME,DQTIME .REF QSKED,DQSKED,TTYOUT,TTYIN,BINASC,ASCBIN .REF MASK,U 0 ; GET TIME OR GET DATE TYPT10: MOV #ASCII-RELOC,-(SP) ; ADDRESS OF CONVERSION WORK STRING EMT BINASC ; CONVERT NO. ON STACK TO ASCII MOV (R1)+,R4 ; ADDR. AT WHICH TO STORE 2 CHAR. ASCII MOVB ASCII+4,(R4)+ ; SET IN APPROPRIATE PLACE MOVB ASCII+5,(R4)+ ; IN MESSAGE DEC R5 ; FINISHED? BNE TYPT10 ; NO DEC R5 ; SET R5 NON-ZERO FOR 'FIRST' = 0 MOV R3,RES0.E(R2) ; 'LAST' = ADDR(FIRST) .ENDC ;* ;* NOW THE MODULE IS JUST ABOUT DEQUEUED. WE ONLY HAVE TO ADD ;* THE FINISHING TOUCHES. ;* DQTB00: MOV #1,-(R0) ;RESET THREAD WORD TO ONE. BICB #D!Q!B,OPTION(R0) ;RESET OPTION BITS MOV RSVRD2(R0),R3 ;WAS THIS MODULE PART OF A TASK? BEQ DQTB10 ;BRANCH IF NO DECB IOSTAT(R3) ;OTHERQISE, DECREMENT THE  ; .BYTE 21 ;LPRNTR .ENDC ; .IFZ NLP ; .BYTE 0 ;NO L/P IN SYSTEM .ENDC ; .IFNZ OVRLAY ; .BYTE 27 ;GOBACK .BYTE 27 ;CKPT .BYTE 27 ;NOCKPT .ENDC ; .IFZ OVRLAY ; .BYTE 0 ;NO .BYTE 0 NMASK,ERRTYP,GTIME,GDATE .REF CREAD,LPRNTR,DISCIO,SGLOAD,DECTAP .REF GOBACK,CKPT,NOCKPT,SCAN,NUMFLD,NPARAM .REF BFINIT,BFENTR,BFOPEN,BFCLOS,BFDELT,BFPACK,BFWRIT,BFREAD .REF BFWAIT,R50PAK,R50UNP,DEFINE,DELETE,PRTCT,UNPRCT .REF CORLOD,STACK,ROSGET,PFRITE,SDATE,STIME,PSTRAP .REF GETHDR .REF DIOA65,FLMB00 .DEF EMTRAP,EMTABL,MAXEMT,EMTINIT .PAGE .IFZ $DEBUG .ASECT .=30 .W NO ERROR MOV R2,DATADR ; SET MESSAGE ADDRESS IN I/O LIST MOV #TTYLST-RELOC,-(SP) ; I/O LIST TO STACK EMT TTYOUT ; OUTPUT TIME OR DATE MESSAGE RTS PC ; RETURN TO INPUT ; .END I/O IN ;PROGRESS FLAG .IFNZ OVRLAY ;.....OVERLAY CODE..... BNE DQTB10 ;BRANCH IF OTHER I/O STILL IN PROGRESS MOV R3,-(SP) ;OTHERWISE, PUSH TASK NUMBER JSR PC,RELTSK ;AND TELL THE OVERLAY MONITOR I/O IS DONE .ENDC ; DQTB10: MOVB (SP)+,@#PS ;ENABLE INTERRUPTS CLR MODULE-2(SP) ;SET 'MODULE DEQUEUED' STATUS (NO ERRORS) ; DQTB20: RST.56 ; OVERLAY .BYTE 0 ; IN SYSTEM .ENDC .BYTE 27 ;GTIME .BYTE 27 ;GDATE .IFNZ $BATCH ; .BYTE 27 ;SCAN .BYTE 27 ;NUMFLD .BYTE 27 ;NPARAM .BYTE 27 ;BFINIT .BYTE 27 ;BFENTR .BYTE 27 ;BFOPEN .BYTE 27 ;BFCLOS .BYTE 27 ORD EMTRAP,340 ;INIT TRAP LOCATION: RUNS AT LEVEL 7. .CSECT .ENDC .IFZ $KT11C EMTRAP = . ;ENTRY TO EMT SERVICE ROUTINE ;TIMING: 64 MICROSECONDS TST -(SP) ;PUSH STACK TO MAKE ROOM FOR SBRTNE ADDR MOV R0,-(SP) ;SAVE IT MOV 4(SP),R0 ;CALLER RETURN ADDR MOV 6(SP),4(SP) ;MOVE CALLER'S PS FOR RTI EXIT MOV R0,6(SP) ;WILL LEAVE CALLER'SNAMIC POOL ENDDYN = BEGDYN+$DYNSZ ; END OF DYNAMIC POOL SSTACK = 10000 ; TOP OF SYSTEM STACK ; DYNSIZ: .WORD $DYNSZ ; NUMBER OF BYTES IN CORE POOL .ENDC ; ; DUMMY ENTRY POINTS FOR CHECKOUT ; .DEF PSTIPL .DEF PFSIPL ; .DEF QTIME,DQTIME PFSIPL = . PSTIPL = . ; RTS PC ; LEAVE STACK SAME ; ; MOV (SP)+,(SP) RTS PC ; ADJU ;RESTORE THE KERNEL PAR 5 AND 6 VALUES MOV (SP)+,R3 ;RESTORE MOV (SP)+,R2 ; THE MOV (SP)+,R1 ; GENERAL MOV (SP)+,R0 ; REGISTERS RTS PC ;AND RETURN TO CALLER ;* ;* ;* TIMER MODULE IS BUSY, SO WE CAN'T DEQUEUE IT RIGHT NOW. ;* ;* DQTC00: BISB #D,OPTION(R0) ;SET 'DEQUEUE' BIT IN TIMER MODULE BR DQTB10 ;THEN GO EXIT ; DQTX00 ;BFDELT .BYTE 27 ;BFPACK .BYTE 27 ;BFWRIT .BYTE 27 ;BFREAD .ENDC ; .IFZ $BATCH ; .BYTE 0 ;ALL .BYTE 0 ; ILLEGAL .BYTE 0 ; IF .BYTE 0 ; NO .BYTE 0 ; BATCH .BYTE 0 ; IN .BYTE 0 ; SYS PC ON STACK @ EXIT DEC R0 ;BACK POINTER ONE BYTE MOVB -(R0),R0 ;BACK POINTER TO EMT INSTR&GET EMT CODE ASL R0 ;NEED TO INDEX WORDS IN TABLE CMP R0,#MAXEMT*2 ;SEE IF CODE IS VALID BHI EMTA20 ;INVALID: OUTSIDE TABLE RANGE EMTA10: MOV EMTABL(R0),2(SP) ;LOAD STACK WITH SUBROUTINE ADDR ; IF AN INVALID CODE IS USED, THE TABLE ENTRY WILL POINT TO "EMTERR". MOV (SP)+,R0  WORD INDEX .IFNZ $KT11C CLC ROR R1 ; MAKE CLC ROR R1 ; PPA .ENDC MOV R1,HEADER(R2) ; HEADER ADDRESS SYSI20: ADD #2.,R0 ; BUMP INDEX BLT SYSI00 ; DO FOR ALL .IFNZ NDISCS .REF $TKFLS,PFRITE MOV #$TKFLS,-(SP) ; WRITE TASK TABLE ON DISC JSR PC,PFRITE .ENDC RTS PC ; RETURN: MOV #1,MODULE-2(SP) ;SET ERROR FLAG (LIST NOT IS THREAD) BR DQTB20 ;GO EXIT .PAGE ;*********************************************************************** ;* ** ;* T I M E R ** ;* ** ;* PROGRAM IDENTIFICATION. TIMER - HIGH SPEED TIMER ** ;* TEM .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .ENDC ; .BYTE 27 ;R50PAK .BYTE 27 ;R50UNP .IFNZ $BATCH ; .BYTE 7 ;BFWAIT .ENDC ; .IFZ $BATCH ; .BYTE 0 ; .ENDC ; .IFNZ ND ;RESTORE USER'S RTI ;POP SUBRTNE ADDRESS AND OLD STATUS ;TO EFFECT TRANSFER, LEAVING RTN TO ;CALLER ON TOP. EMTA20: CLR R0 ;RANGE ERROR: USE ENTRY 0... BR EMTA10 ;...AND FORCE EXIT VIA "EMTERR" .IFNZ $DEBUG EMTERR: HALT ;DURING DEBUG, BAD CALL CAUSES HALT .ENDC .IFZ $DEBUG EMTERR: RTS PC ;ERROR TO IPL ; ; .END INTERRUPT ROUTINE. ** ;* ** ;* PURPOSE. THE PURPOSE OF THIS ROUTINE IS TO PROCESS ALL ** ;* CURRENTLY ACTIVE HIGH SPEED TIMER REQUESTS AND PERFORM ANY ** ;* REQUIRED ACTIONS. THIS ROUTINE RUNS IN CONJUNCTION WITH ** ;* SUBROUTINES QTIME AND DQTIME. ** ;* ** ISCS ; .BYTE 4 ;DEFINE .BYTE 4 ;DELETE .BYTE 4 ;PRTCT .BYTE 4 ;UNPRCT .BYTE 4 ;SGLOAD .ENDC ; .IFZ NDISCS ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .ENDC  RETURN USED FOR INVALID CODES .ENDC .ENDC .PAGE EMTABL = . ;TOP OF EMT LINK TABLE .IFZ $KT11C .WORD EMTERR ;#0 ALWAYS AN ERROR .ENDC .IFNZ $KT11C .WORD 0 .ENDC .WORD QUEUE ;#1 .WORD SUSPND ;#2 .WORD UNSPND ;#3 .WORD EXIT ;#4 .WORD FRETSK ;#5 .WORD ABORT BEGDYN = 160000 ; BEG. OF DYNAMIC POOL ENDDYN = BEGDYN+$DYNSZ ; END OF DYNAMIC POOL SSTACK = 10000 ; TOP OF SYSTEM STACK ; DYNSIZ: .WORD $DYNSZ ; NUMBER OF BYTES IN CORE POOL .ENDC ; ; DUMMY ENTRY POINTS FOR CHECKOUT ; .DEF PSTIPL .DEF PFSIPL .DEF QTIME,DQTIME ; .DEF QTIME,DQTIME PFSIPL = . PSTIPL = . DQTIME = . ; RTS PC ;* USAGE. TIMER IS AN INTERRUPT ROUTINE WHICH RESPONDS TO ** ;* THE CRYSTAL OR LINE FREQUENCY TIMERS. THROUGH SYSGEN AND ** ;* HARDWARE OPTIONS, TIMER CAN BE EXECUTED AT THE FOLLOWING ** ;* FREQUENCIES: 10 US, 100 US, 1 MS, 10MS, 100 MS, AND ** ;* 1 SEC. THE ESTIMATED CPU USAGE WHEN THE TIMER IS RUNNING ** ;* IS (ALL TIMES ARE APPROXIMATE AVERAGE): ** ;* ; .BYTE 20 ;ROSGET .BYTE 20 ;PFRITE .BYTE 20 ;SDATE .BYTE 20 ;STIME .BYTE 20 ;KERNEL .BYTE 20 ;GETHDR .EVEN .PAGE ;* ;* THIS TABLE CONTAINS THE NUMBER OF ARGUMENTS TRANSMITTED TO ;* AND FROM EACH SUBROUTINE. THE FORMAT OF SUBARG IS: ;* ;* BITS 0-3 = NUMBER OF ARGUMENTS ON STACK INPUT TO SUBROUTINE ;* ;#6 .WORD QTIME ;#7 .WORD DQTIME ;#10 .WORD QSKED ;#11 .WORD DQSKED ;#12 .WORD TTYOUT ;#13 .WORD TTYIN ;#14 .WORD DECTAP ;#15 .WORD BINASC ;#16 .WORD ASCBIN ;#17 .WORD MASK ;#20 .WORD UNMASK ;#21 .WORD ERRTYP ;#22 .WORD DISCIO ;#23 .W; LEAVE STACK SAME ; ; QTIME = . MOV (SP)+,(SP) RTS PC ; ADJUST STACK .END  ** ;* FREQUENCY PDP-11/20 PDP-11/45 ** ;* ** ;* 10 US 100% 100% ** ;* 100 US 100% 60% ** ;* 1 MS 11% 6% ** ;* 10 MS 1.1% 0.6% ** ;* 100 MS .11% .06%  (PUSHED BY CALLER) ;* BITS 4-7 = NUMBER OF ARGUMENTS ON STACK RETURNED TO THE ;* CALLING PROGRAM FROM SUBROUTINE ;* SUBARG: .BYTE 0 ;ILLEGAL .BYTE 1*20+4 ;QUEUE .BYTE 0 ;SUSPND .BYTE 1*20+2 ;UNSPND .BYTE 0 ;EXIT .BYTE 0 ;FRETSK .BYTE 1 ;ABORT .BYTE 1*20+2 ;QTIME .BYTE 1 ORD CREAD ;#24 .WORD LPRNTR ;#25 .WORD GOBACK ;#26 .WORD CKPT ;#27 .WORD NOCKPT ;#30 .WORD GTIME ;#31 .WORD GDATE ;#32 .WORD SCAN ;#33 .WORD NUMFLD ;#34 .WORD NPARAM ;#35 .WORD BFINIT ;#36 .WORD BFENTR ;#37 .WORD BFOPEN ;#40 .WORD BFCLOS ST STACK .END  ** ;* 1 SEC .01% .01% ** ;* ** ;* NOTE: THE TIMERS DO NOT RUN IF A REQUEST ISN'T QUEUED. ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* DIGITAL DATA SYSTEMS  ;DQTIME .BYTE 1*20+1 ;QSKED .BYTE 1 ;DQSKED .BYTE 1 ;TTYOUT .BYTE 1 ;TTYIN .BYTE 1 ;DECTAP .BYTE 2 ;BINASC .BYTE 2*20+1 ;ASCBIN .BYTE 0 ;MASK .BYTE 0 ;UNMASK .BYTE 1 ;ERRTYP .BYTE 1 ;DISCIO .BYTE 1  ;#41 .WORD BFDELT ;#42 .WORD BFPACK ;#43 .WORD BFWRIT ;#44 .WORD BFREAD ;#45 .WORD R50PAK ;#46 .WORD R50UNP ;#47 .WORD BFWAIT ;#50 .WORD DEFINE ;#51 .WORD DELETE ;#52 .WORD PRTCT ;#53 .WORD UNPRCT ;#54 .WORD SGLOAD ;#55 .WORD ROSGET ; 56 EN THE CALLED SUBROUTINE IS ENTERED. * ; * * ; * STACK ON ENTRY: * ; * 2(SP): (PS) AT TIME OF TRAP * ; * (SP): (PC) CALLER RETURN ADDRESS * ; * * ; * STACK ON EXIT: * ; * (SP): (PC)  ** ;* SAN DIEGO, CALIF ** ;* ** ;*********************************************************************** .DEF TIMER .REF QUEUE ;* ;* T I M E R P A R A M E T E R S ;* TIMBSY: .WORD -1 ;TIMBSY > -1 MEANS TIMER IS EXECUTING BASCNT: .WORD $TMBAS ;BASE VALUE TO DECREMENT BEFORE ;CREAD .BYTE 1 ;LPRNTR .BYTE 0 ;GOBACK .BYTE 0 ;CKPT .BYTE 0 ;NOCKPT .BYTE 3*20+0 ;GTIME .BYTE 3*20+0 ;GDATE .BYTE 3*20+3 ;SCAN .BYTE 3*20+3 ;NUMFLD .BYTE 1*20+2 ;NPARAM .BYTE 1 ;BFINIT .BYTE 1 ;BFENTR .BYTE 1 ;BFOPEN  .WORD PFRITE ;57 .WORD SDATE ; 60 .WORD STIME ; 61 .WORD KERNEL ; 62 .WORD GETHDR ; 63 .WORD DIOA65 ; 64 .WORD FLMB00 ; 65 MAXEMT = .-EMTABL/2-1 .PAGE .IFNZ $KT11C ;*********************************************************************** ;* ** ;* CALLER RETURN ADDRESS * ; * * ; * ERROR RETURNS: IF AN EMT CODE IS USED WHICH IS INVALID * ; * ---EITHER OUTSIDE THE LIMITS OF THE EMT TABLE, OR AN INVALID * ; * CODE WITHIN THE TABLE--- A RETURN IS MADE IMMEDIATELY TO THE * ; * CALLER WITH NO ACTION TAKEN. * ; * THE CALLER SHOULD NOTE THAT HE MAY BE INTERRUPTED BETWEEN HIS * ; * EMT CA ;EXECUTING TIMER ROUTINE (NORMALLY SET ;TO ENTER EVERY MILLISECOND IF FREQUENCY ;IS GREATER THAN ONE MILLISECOND). ONOFF: .WORD 0 ;0 = TIMERS SHOULD BE OFF REPEAT: .WORD 0 ;NO. TIMES TIMERQ MUST REPEAT EXECUTION .PAGE ;* ;* INTERRUPT ENTRY POINT.....ENTERED AT LEVEL 7..... ;* TIMER = . TST ONOFF ;SEE IF TIMERS SHOULD BE ON BNE TIMB00  .BYTE 1 ;BFCLOS .BYTE 1 ;BFDELT .BYTE 1 ;BFPACK .BYTE 1 ;BFWRIT .BYTE 1 ;BFREAD .BYTE 2 ;R50PAK .BYTE 2 ;R50UNP .BYTE 1 ;BFWAIT .BYTE 1 ;DEFINE .BYTE 1 ;DELETE .BYTE 1 ;PRTCT .BYTE 1 ;UNPRCT .BYTE  E M T R A P ** ;* ** ;* 1 1 / 4 5 V E R S I O N ** ;* ** ;* PROGRAM IDENTIFICATION. EMTRAP - EMT TRAP PROCESSOR ** ;* ** ;* PURPOSE. THIS PROGRAM SERVES AS THE LINK BETWEEN TASKS AND ** ;* ROS IN THELL AND THE EVENTUAL RETURN, EVEN IN THE CASE OF AN ERROR.* ; * * ; * PROGRAMMER: 52 * ; * VERSION:003.003 * ; * DATE: 13-APR-72 * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; *  ;BRANCH IF YES ; ;RESET ALL TIMER INDICATORS TIMA00: BIC #TIMBIT,@#CLKENB ;1. DISABLE CLOCK INTERRUPT MOV R0,-(SP) ;2. RESET ALL RESOLUTION MOV R1,-(SP) ; COUNTERS MOV R2,-(SP) MOV #$RES0,R0 ; R0 = COUNT DOWN'ERS MOV #RESTAB,R1 ; R1 = ORIGINAL VALUES MOV #$NRES,R2 ; R2 = NO. RESOLUTIO 2 ;SGLOAD .BYTE 0 ;ROSGET .BYTE 1 ;PFRITE .BYTE 1*20+3 ;SDATE .BYTE 1*20+2 ;STIME .BYTE 0 ;KERNEL .BYTE 1*20+0 ;GETHDR .EVEN .PAGE ;* ;* THIS TABLE DEFINES WHICH ADDRESS (IF ANY) ON THE STACK IS ;* TO BE CONVERTED FROM TASK VIRTUAL TO SYSTEM VIRTUAL. IT ;* ALSO INDICATES IF THE ADDRESS IS AN I/O LIST ADDRESS, IN 11/45. THE EMT WILL BE TREATED AS AN ERROR TRAP ** ;* IF THE TASK IS NOT ALLOWED ACCESS TO THE REQUESTED ** ;* SUBROUTINE. OTHERWISE, EMTRAP WILL SWITCH STACK VALUES ** ;* FROM USER MODE SP TO KERNAL MODE SP AND JSR TO THE REQUESTED ** ;* SUBROUTINE. ** ;* ** ;* ** ;*  * ; ******************************************************************** .TITLE EMTRAP .REF QUEUE,SUSPND,UNSPND,EXIT,FRETSK,ABORT,QTIME,DQTIME .REF QSKED,DQSKED,TTYOUT,TTYIN,BINASC,ASCBIN .REF MASK,UNMASK,ERRTYP,GTIME,GDATE .REF CREAD,LPRNTR,DISCIO,SGLOAD,DECTAP .REF GOBACK,CKPT,NOCKPT,SCAN,NUMFLD,NPARAM .REF BFINIT,BFENTR,BFOPEN,BFCLOS,BFDELT,BFPACK,BFNS ; TIMA10: MOV (R1)+,(R0)+ .IFZ $1145 DEC R2 BNE TIMA10 .ENDC .IFNZ $1145 SOB R2,TIMA10 .ENDC CLR BASCNT ;3. RESET TIMBSY, BASCNT CLR ONOFF ;AND ONOFF MOV #-1,TIMBSY ; ; TIMA20: MOV (SP)+,R2 ;RESTORE MOV (SP)+,R1 ; GENERAL MOV (SP)+,R0 ; REGISTERS TIMA30: RT ;* WHICH CASE THE DATA BUFFER ADDRESS IS ALSO CONVERTED. THE ;* FORMAT OF THE TABLE IS: ;* ;* BITS 0-6 = POSITION OF ADDRESS ON STACK (SEE BELOW) ;* BIT 7 = 1 FOR I/O LIST ADDRESSES; 0 FOR OTHERS ;* ;* THE STACK IS ASSUMED TO LOOK LIKE: ;* BOTTOM ======> ARG 1 2N + 6 ;* . . ;* . . ;* . .  COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* DIGITAL DATA SYSTEMS ** ;* SAN DIEGO, CALIF ** ;* ** ;*********************************************************************** .REF $CTASK,$BATCH,$ACESS,PSTRAP .REF TVSV5 ;* ;* ND.E C ND.E E ON DLL;A PC S RT 2 ,340#3 V MO ORCTVET EMT NI;I 30P,RAMT#E V MO G INGOP EE K -ET YOT;N 10TIEM OSBL ? ET YORCTVEF OND EEDCHEAI ;AND EXIT .PAGE ;* ;* THIS INTERRUPT WAS EXPECTED, SO CONTINUE WITH THE INTERRUPT ;* PROCESSING. ;* TIMB00: INC TIMBSY ;INCREMENT 'TIMER BUSY' FLAG BNE TIMA30 ;AND EXIT IF TIMER IS ALREADY EXECUTING .IFNZ $TMBAS DEC BASCNT ;DECREMENT BASE COUNTER BEQ TIMC00 ;AND BRANCH IF IT WENT TO ZERO DEC TIMBSY ;OTHERWISE, PUT TIMBSY BACK WHERE ;* ARG N 8 ;* PC 6 ;* R2 4 ;* R3 2 ;* TOP =========> TABLE VALUE 0 ;* IOLIST: .BYTE 0. ;ILLEGAL INDEX .BYTE 0. ;QUEUE .BYTE 0. ;SUSPND .BYTE 0. ;UNSPND .BYTE 0. ;EXIT .BYTE 0.  SUBROUTINE STATUS TABLE. THIS TABLE DEFINES THE TASK ACCESS ;* RIGHTS TO EACH SUBROUTINE. EACH BIT IS ASSIGNED AS FOLLOWS: ;* ;* BIT 0 = AVAILABLE TO BATCH PROGRAMS (1) ;* 1 = AVAILABLE TO BACKGROUND PROGRAMS (2) ;* 2 = AVAILABLE TO FOREGROUND PROGRAMS (4) ;* 4 = AVAILABLE TO SYSTEM PROGRAMS (16.) ;* ;* ;* SUBRST: .BYTE 0 ;ILLEGAL INDEX .BYTE 26 ;QUEUE ;R L ABMT+E*2MTXEMA,#R0 P CM: 20TIEM INGA AITE NCVAADD AN..;. + 0)(R T TS T IINN URET RORRR EUT P -ES;Y ) R0-(R,ERMT#E V MO O ;N 20TIEM E BN D?NEFIDEUNT ENEMELR TOEC VISTHS ;I + 0)(R T TS: 10TIEM R0L,ABMT#E V MO .)ONSIER VUGEB DIN" TSAL"H (S.RNTUREE ATDIMEIMH IT;W TSENEMELR TOEC VEDINEFND UCELAEP RTOE INUTROUB;S T:NITIEM ] D.LEAL CRE AEYTHE AS CIN" RRTEEM "TOS IETRENE ESTHE IZALTINI ITO; % BR TIMA30 ;IT BELONGS AND EXIT .ENDC ;* ;* THE TIME HAS COME TO GO THROUGH THE RESOLUTION COUNTERS ;* AND SEARCH FOR ACTIVE REQUESTS. ;* TIMC00: MOV R5,-(SP) ;FIRST, SAVE SOME REGISTERS MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) SAV.56 ;SAVE KERNEL PAR 5 AND 6 CLR -(SP) ;CLEAR 'SAVE CALLED' FLAG  ;FRETSK .BYTE 0. ;ABORT .BYTE 10. ;QTIME .BYTE 8. ;DQTIME .BYTE 8. ;QSKED .BYTE 8. ;DQSKED .BYTE 8.+200 ;TTYOUT .BYTE 8.+200 ;TTYIN .BYTE 8.+200 ;DECTAP .BYTE 8. ;BINASC .BYTE 8. ;ASCBIN .BYTE 0. ;MASK .BYTE 0. ;UNMASK .BYTE 27 ;SUSPND .BYTE 26 ;UNSPND .BYTE 27 ;EXIT .BYTE 24 ;FRETSK .BYTE 24 ;ABORT .BYTE 26 ;QTIME .BYTE 24 ;DQTIME .BYTE 24 ;QSKED .BYTE 24 ;DQSKED .BYTE 27 ;TTYOUT .BYTE 27 ;TTYIN .BYTE 21 ;DECTAP .BYTE 27 L"IP "BYD LEAL CBEL IL WNETIOUBRSUG INOWLLFOE TH. ERADLOE THY BROZEA ; THWID DEOA LBEL IL WEDATEREN GNGEI BORITON MHE TIND DELUNC IOT NREWE; EYTHE USCABEE IM TNKLIT AEDINEFND UINMAREH ICWHS CEENEREF RALOBGL;[ P OUGRL IPO NT ICEOR;F INMT.E CTSE.C 1CT1$K FZ.I E AG.P C ND.E E.OD MELRNKEE THN ;I K AS THE TTON URET RAN CWEN HE;T )+SP@( P JM SSREDD AALTUIR VEMSTSYA O TSSREDD;A ! CLR -(SP) ;CLEAR 'NO TASK QUEUED' FLAG ; TIMC05: MOV #$RES0,R0 ;SET UP FOR CLR R1 ; RESOLUTION QUEUE SCAN ; TIMC10: DEC (R0)+ ;DECREMENT THIS RESOLUTION'S COUNTER BNE TIMC30 ;BRANCH IF NON-ZERO ----- WE'RE THROUGH MOV RES0.B(R1),R2 ;SEE IF ANYTHING IS QUEUED FOR THIS RES. BNE TIMD00 ;BRANCH IF YES ; TIMC15: MOV RESTAB-$RES0-2(R0),-2(R0 .BYTE 8. ;ERRTYP .BYTE 8.+200 ;DISCIO .BYTE 8.+200 ;CREAD .BYTE 8.+200 ;LPRNTR .BYTE 0. ;GOBACK .BYTE 0. ;CKPT .BYTE 0. ;NOCKPT .BYTE 0. ;GTIME .BYTE 0. ;GDATE .BYTE 10. ;SCAN .BYTE 0 ;NUMFLD .BYTE 0. ;NPARAM .BYTE  ;BINASC .BYTE 27 ;ASCBIN .BYTE 0 ;MASK .BYTE 0 ;UNMASK .BYTE 0 ;ERRTYP .IFNZ NDISCS ; .BYTE 27 ;DISCIO .ENDC ; .IFZ NDISCS ;NO DISC IN SYSTEM .BYTE 0 ; .ENDC .IFNZ NCR ; .BYTE 21 ;CREAD .ENDC ALTUIR VHE TRTVEON CAN CWES O';S V5VS,TPC R JS K AS TNGLIAL CHE TOFC ;P P)(S,-P)(S8. V MO D ANR BEUM NSKTAE THH US;P P)(S,-SKTA$C V MO : ELRNKE ;* ;* -- -ORPTEMT EAAV C-- - E.OD MELRNKE ;* HE TIN) DEMOR SE UINS IHO(WK AS TNGLIAL CHE TESACPL ;* E INUTROUB SISTH Y.OREM M6K 1INTHWIE ART HA TKSAS TEMSTSY ;* Y BEDERNT EBEY NL OAN CNETIOUBRSUG INSSCERO PMT ERTHO SISTH ;* ;* L E N R E K ;* ;* ) ;RESET THE COUNTER ; TIMC20: ADD #4,R1 ;INCREMENT INDEX CMP R1,#4*$NRES ;ALL RESOLUTIONS PROCESSED? BLT TIMC10 ;BRANCH IF NO ; TIMC30: JMP TIMX00 ;GO TO THE EXIT SEQUENCE ;* ;* THIS RESOLUTION HAS TIMER MODULES QUEUED, SO NOW WE'RE GOING ;* TO PROCESS ALL ENTRIES IN THIS QUEUE. ;* TIMD00: .IFNZ $KT11C MOV R2,-(SP) ;CONVERT THE PACKED PHYSICAL MODULE  8. ;BFINIT .BYTE 8. ;BFENTR .BYTE 8. ;BFOPEN .BYTE 8. ;BFCLOS .BYTE 8. ;BFDELT .BYTE 8. ;BFPACK .BYTE 8. ;BFWRIT .BYTE 8. ;BFREAD .BYTE 0. ;R50PAK .BYTE 0. ;R50UNP .BYTE 8. ;BFWAIT .BYTE 8. ;DEFINE .BYTE 8. ;NO C/R IN SYSTEM .IFZ NCR ; .BYTE 0 ; .ENDC ; .IFNZ NLP ; .BYTE 21 ;LPRNTR .ENDC ; .IFZ NLP ; .BYTE 0 ;NO L/P IN SYSTEM .ENDC ; .IFNZ OVRLAY ; .BYTE 27 ;GOBACK .BYTE 27 ;CKPT .BYTE 27 **********************************************************************;* E AG.P NETIOUBRSUE THO TNKLIO GND;A 20TBEM BR K ACSTF OFE OD COP;P + P)(S T TS : 00TDEM ; NETIOU RAPTRR ROERS ROO TGON HE;T APTRPS P JM : 20TXEM ; CKTA S ; R2+,P)(S V MO M TEYS S ; R1+,P)(S V MO P U; R0+,P)(S V MO ANLE;C + P)(S T TS : 00TXEM ;* P RA TORRR ENY AAST  JSR PC,PPASV5 ;ADDRESS TO SYSTEM VIRTUAL MOV (SP)+,R2 .ENDC BITB #D,OPTION(R2) ;SHOULD THIS MODULE BE DEQUEUED? BNE TIMD40 ;BRANCH IF YES ; TIMD10: DECB MULTPL(R2) ;DECREMENT THIS MODULE'S TIMER COUNTER BEQ TIME00 ;BRANCH IF IT WENT TO ZERO ; TIMD20: MOV (R2),R2 ;GET NEXT MODULE IN THREAD ; TIMD30: BNE TIMD00 ;AND GO PROCESS IT (IF THERE IS ON ;DELETE .BYTE 8. ;PRTCT .BYTE 8. ;UNPRCT .BYTE 0. ;SGLOAD .BYTE 0. ;ROSGET .BYTE 8.+200 ;PFRITE .BYTE 0. ;SDATE .BYTE 0. ;STIME .BYTE 0. ;KERNEL .BYTE 0. ;GETHDR .EVEN ;* ;* MISCELLANEOUS EMTRAP PARAMETERS ;* R0SAVE: ;TEMPORARY STORAGE ;NOCKPT .ENDC ; .IFZ OVRLAY ; .BYTE 0 ;NO .BYTE 0 ; OVERLAY .BYTE 0 ; IN SYSTEM .ENDC .BYTE 27 ;GTIME .BYTE 27 ;GDATE .IFNZ $BATCH ; .BYTE 27 ;SCAN .BYTE 27 ;NUMFLD .BYTE 27 ;NPARAM .BYTE 27 ;BFIEATR- R ROERT EM ;* ;* R SE UTON URET;R I RT E LUVAP SDEMOR SE UETES;R SP PIMT R SE U =DEMOS OUVIRE PET;S S #P,@ERUS#P S BI RSTEISEG R; 1 ,RVESAR1 V MO S K'AS TRETOES;R 0 ,RVESAR0 V MO CKTA SONE LUVAK ACSTR SE UUT;P P)(S,-R0 V MO ) DEMOR SE(U0 R ASO TSEBAK ACST0 RNTOI;P R00,0060#1 C BI UEAL VCKTA SSKTAT USDJ;A R0.,#8 D AD : 10TCEM ; CKE). BR TIMC15 ;OTHERWISE, GO TRY NEXT RESOLUTION ; ; TIMD40: BITB #B,OPTION(R2) ;CAN'T DEQUEUE IT YET IF IT'S BUSY BNE TIMD20 ;BRANCH IF BUSY (TRY AGAIN NEXT TIME) ;NOTE: MODULE IS BUSY IF QTIME IS ; STILL TRYING TO SUSPEND THE TASK MOV R2,-(SP) ;ALL'S CLEAR TO DEQUEUE THE MODULE MOV (R2),R3 ;BUT FIRST, GET NEXT GUY IN THE QUEU FOR R0 R2SAVE: .WORD 0 ;TEMPORARY STORAGE FOR R2 R1SAVE: ;TEMPORARY STORAGE FOR R1 EMTSBR:.WORD 0 ;TEMPORARARY STORAGE FOR SAVING ADDRESS ;OF THE CALLED SUBROUTINE EMLIST: .WORD 0 ;TEMPORARY SAVE AREA FOR VALUE RETRIEVED ;FROM IOLIST TABLE USER = 140000 ;BITS IN PS WHICH MEAN CURRENT ;MODE = USER PUSER = NIT .BYTE 27 ;BFENTR .BYTE 27 ;BFOPEN .BYTE 27 ;BFCLOS .BYTE 27 ;BFDELT .BYTE 27 ;BFPACK .BYTE 27 ;BFWRIT .BYTE 27 ;BFREAD .ENDC ; .IFZ $BATCH ; .BYTE 0 ;ALL .BYTE 0 ; ILLEGAL .BYTE 0 ; IF .BYTE TA SHE TONP ;U 0 C0MT,ER1 B SO C PND APS, TSENUMRG ANETIOUBRSUE OV;M 0)(R8.),R0-( V MO : 00TCEM ; NOF IBR- E INUTROUB SOMFRD NEURET;R 10TCEM Q BE S NTMEGUARY ANE ARE ERTHF IEE;S R1 T TS E ILWHA R FOE LS;E VESAR0),R0-( V MO E ERWHMESO1 RND AR0D OLE AV;S VESAR1),R0-( V MO I RTR FOK ACSTM TEYS SONC PND;A ) SP-(),R0-( V MO PSN URET RUT;P ) SP-(),R0-( V MO E LUVAK ACE JSR PC,TIMD50 ;THEN DEQUEUE IT TST (SP)+ ;POP OFF ERROR MOV R3,R2 ;SET R2 = NEXT MODULE IN THREAD BR TIMD30 ;AND GO PROCESS IT. ;* ;* THIS CLOSED SUBROUTINE PROVIDES FOR INTERMEDIATE LINKAGE ;* TO SUBROUTINE DQTIME. ;* TIMD50: MOV R0,-(SP) ;SAVE MOV R1,-(SP) ; REGISTERS MOV R2,-(SP) ; FOR MOV R3,-(SP) ; DQTIM 030000 ;BITS IN PS WHICH MEAN ;PREVIOUS MODE = USER DATA = 12. ;DATA BUFFER ADDRESS IN ALL I/O LISTS DTPAR = 14. ;KPAR 6 BASE VALUE FOR DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDR .PAGE ; EMTY00: JMP EMTX00 ;INTERMEDIATE LINKAGE TO EMTX00 EMTY20: JMP EMTX20 ;INTERMEDIATE LINKAGE TO EMTX20 ;* ;* ENTER HERE WHENE0 ; NO .BYTE 0 ; BATCH .BYTE 0 ; IN .BYTE 0 ; SYSTEM .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .ENDC ; .BYTE 27 ;R50PAK .BYTE 27 ;R50UNP .IFNZ $BATCH ; .BYTE 7 ;BFWAIT .ESTM TEYS SHE TRETOES;R SPK,ACST V MO S PTRUERNT IITIBNH;I K OC.L : PCK.TS ;* ;* E.OVABD NEFIDES AET SBEL ILSTD ULHO SR1D AN0 R. IM HTO ;* N URET RAN CWES O' SCKTA SSKTAE THE IZANRGEO RTOD EE NWEW NO ;* G.INTHS ITG INDOD HEISIN FAS HNETIOUBRSUR TEAFE ER HRNTURE ;* ;* ;* E INUTROUB SEDSTUEEQ RTOK IN;L + P)(S,@PC R JS S ERSTGIRE ; R2+,P)(S V MO RETOES;R R3+,P)(S V MO : 20TBEM ; ST E .IFNZ $KT11C ;DQTIME SAVES KPAR5/6, SO WE SUB #4,SP ;NEED TO MAKE ROOM ON STACK .ENDC ;EVEN THOUGH WE DON'T NEED THOSE REGS MOV R2,R0 ;PUT MODULE ADDRESS IN R0 JMP DQTA10 ;THEN GO TO DQTIME LOGIC .PAGE ;* ;* A TIMER MODULE COUNTER HAS JUST BEEN DECREMENTED TO ZERO. ;* NOW WE'LL DO ALL THE NECESSARY CHECKING. ;* ;* TIME00: MOVBVER A PROGRAM EXECUTES AN EMT INSTRUCTION. ;* EMTRAP IS ENTERED IN THE KERNEL MODE WITH INTERRUPTS INHIBITED. ;* THE KERNEL (ROS) AND THE USER (TASK) STACKS LOOK LIKE: ;* ;* KERNEL USER ;* ;* USER PS INPUT ARGUMENT TO SUBROUTINE ;* USER PC ;* ;* EMTRAP: TST $CTASK ;FIRST CHECK FOR LEGAL TRAP BEQ EMTY20 ;CALLER MUST BE A TASK. BRANCH IF NOT. BIT #USER,2(SP) ;AND ALSNDC ; .IFZ $BATCH ; .BYTE 0 ; .ENDC ; .IFNZ NDISCS ; .BYTE 4 ;DEFINE .BYTE 4 ;DELETE .BYTE 4 ;PRTCT .BYTE 4 ;UNPRCT .BYTE 4 ;SGLOAD .ENDC ; .IFZ NDISCS ; .BYTE 0 ; .BYTE 0 LIO I/E THN ITHBOE AV SND;A ) R2T(IRTV,DR3 V MO 6 R PA KTO ; R30,0040#1 S BI T INTOI PND;A R30,7077#1 C BI L UARTVIL NEER KTOS ESDRADE THE NGHA CN,HE;T 3 ,R2)(RTADA V MO 6AR PELRNKEP UET;S R6PA$K@#),R2R(PADT V MO ; 2)(RARTP,DR3 D AD ; R36,#- H AS Y ARNDOU BRDWO2- 3STREEA;N R30,0060#1 C BI E THO TAR PHE TUT PT,EX;N 3 ,R2)(RTADA V  RESET(R2),MULTPL(R2) ;FIRST, RESET THE TIMER MOVB OPTION(R2),R3 ;THEN GET THE OPTION BYTE MOV R2,R4 BIT #S,R3 ;WAS A TASK SUSPENDED? BEQ TIME20 ;BRANCH IF NO ; TIME10: BISB #Q,OPTION(R2) ;SET 'QUEUE REQUEST PENDING' FLAG INC (SP) ;SET 'TASK QUEUED' FLAG ;* ;* NOW WE'LL PLACE THIS MODULE IN A QUEUE SO THAT IT CAN ;* BE PROCESSED BY TIMERQ AT A O MUST BE IN USER MODE BEQ EMTY20 ;BRANCH IF PREVIOUS MODE = KERNEL MOV R2,-(SP) ;SAVE R0 MOV R1,-(SP) ; ...R1 MOV R0,-(SP) ; ...R2 MFPI SP ;GET USER'S SP VALUE MOV (SP)+,R2 ;AND PUT IT IN REGISTER R2 BIS #100000,R2 ;CONVERT IT TO USE ROS KERNEL ASR-4 MOV @#$UPAR0,@#$KPAR4 ;AND SET UP KERNEL PAR 4  ; .BYTE 0 ; .BYTE 0 ; .BYTE 0 ; .ENDC ; .BYTE 20 ;ROSGET .BYTE 20 ;PFRITE .BYTE 20 ;SDATE .BYTE 20 ;STIME .BYTE 20 ;KERNEL .BYTE 20 ;GETHDR .BYTE 20 ; DIOA65 .BYTE 20 ; FLMB00 .EVEN MO AR PELRNKEO TAR PERUSR FENSRA;T 2)(RARTP,D3)(RR0PA$U V MO X DEINR PA= 0 ;R R31,7677#1 C BI R BEUM NAR PHE TET;G R34,#- H AS ; 3 ,R2)(R+1TADA VBMO SSREDD AALTUIR VSKTAE THT GE, SEWIERTH;O 2 ,R2)(R V MO O NIFH NCRA;B 20TBEM L BP ? SSREDD AERFFBUA AT D AREHE TIS, OW;N + P)(S TBTS 5.R PA KNGSI;U 2)(R0,0020#1 S BI L UARTVIO TSSREDD ASTLIE THT SE, LOWER PRIORITY LEVEL ;* MOV TQPAR,@#$KPAR6 ;SET UP KPAR FOR PREVIOUS LAST VALUE CLR RSVRD3(R2) ;THIS WILL BE THE LAST ENTRY IN THE TIMERQ THRD MOV R2,-(SP) ;CONVERT THE SYSTEM VIRTUAL ADDRESS JSR PC,SVPPA ;TO PACKED PHYSICAL MOV (SP),@TQVIRT ;THEN, PLACE THIS MODULE IN MOV (SP)+,TQLAST ;THE TIMERQ THREAD MOV R2,TQVIRT ;SAVE THE VIRTUAL ADDRESS OF THE ADD #020000,TQVI;NOTE: ALL TASK SP VALUES ARE RELATIVE ; TO USER MODE ASR 0 ; MOV 6(SP),R1 ;GET CALLER'S PC MFPI -(R1) ;GET EMT INSTRUCTION CLR R0 BISB (SP)+,R0 ;AND EXTRACT THE EMT NUMBER BEQ EMTY00 ;SEE IF THE EMT NUMBER IS VALID CMP R0,#MAXEMT ;CAN'T BE ZERO OR GREATER THAN MAXEMT BGT EMTY00 ;BRANCH IF OUT OF  .PAGE ;* ;* THIS TABLE CONTAINS THE NUMBER OF ARGUMENTS TRANSMITTED TO ;* AND FROM EACH SUBROUTINE. THE FORMAT OF SUBARG IS: ;* ;* BITS 0-3 = NUMBER OF ARGUMENTS ON STACK INPUT TO SUBROUTINE ;* (PUSHED BY CALLER) ;* BITS 4-7 = NUMBER OF ARGUMENTS ON STACK RETURNED TO THE ;* CALLING PROGRAM FROM SUBROUTINE ;* SUBARG: .BYTE 0 ;ILLEGAL .BYTE 1*20+4 ;QUEUE .BYTE 0 OW;N 2)(R0,7077#1 C BI 5 R PA KOF2 -1;0 S IT BTOG INDD AND AALTUIR;V 5 ARKP#$,@R3 D AD SKTAF O126-S IT BNGKITAY ;B R36,#- H AS Y ARNDOU BRDWO2- 3STREEA;N R30,0060#1 C BI HE TTOR PAE THT PU, OW;N 3 ,R2)(R V MO AR PELRNKEO TAR PERUSR FENSRA;T 5 ARKP#$,@3)(RR0PA$U V MO G INEXND IOR F2 )* #AR(P= 0 ;R R31,7677#1 C BI RT ;CURRENT 'LAST' ENTRY MOV @#$KPAR5,TQPAR BR TIMD20 ;AND GO GET NEXT MODULE ; TIME20: BIT #T,R3 ;CHECK FOR A TASK TO QUEUE BNE TIME10 ;AND GO SET INDICATORS IF THERE IS ONE BIT #F,R3 ;FLAG AND MASK OPTION SELECTED? BEQ TIME40 ;BRANCH IF NO BIT #A,R3 ;OTHERWISE, PROCESS FLAG/MASK REQUEST BEQ TIME30 TST (R4)+ ;BUM RANGE MOV $ACESS,R1 ;NOW, DOES CALLER HAVE ACCESS TO THIS SUBR? BIC #177740,R1 ;(IT ALL DEPENDS ON HIS MODE) BITB SUBRST(R0),R1 ; BEQ EMTY00 ;BRANCH IF ILLEGLA ACCESS ATTEMPT MOVB SUBARG(R0),R1 ;GET NUMBER OF ARGUMENTS FOR THIS SUBR MOVB IOLIST(R0),EMLIST ;SAVE TASK VIRTUAL ADDRESS INFO ASL R0 ;SHIFT TO A WORD INDEX MOV EMTABLE(R0),EMTSBR ;AND GET THE R  ;SUSPND .BYTE 1*20+2 ;UNSPND .BYTE 0 ;EXIT .BYTE 0 ;FRETSK .BYTE 1 ;ABORT .BYTE 1*20+2 ;QTIME .BYTE 1 ;DQTIME .BYTE 1*20+1 ;QSKED .BYTE 1 ;DQSKED .BYTE 1 ;TTYOUT .BYTE 1 ;TTYIN .BYTE 1 ;DECTAP .BYTE 2 ;BINASC ERMBNUR PAE THD EE NWE, STIR;F R34,#- H AS SEAU'C, TEBYP TOS ESDRADT IS LET;G R3),R21( VBMO S ESDRADT IS LHE;T NSAINTCOT HA TCKTA SONS ESDRAD= 2 ;R 2 ,RSP D AD S IT BUSEOANTREXR EACL, SEWIERTH;O R20,6077#1 C BI EDIRQURES IONSIERNVCOO NIFH NCRA;B 00TDEM Q BE SSREDD ASTLIF OONTISIPOF OEXND IET;G 2 ,RP)(S VBMO TSUPRRTEINE BLNA;E S #P,@0)(R-2 VB P MODULE ADDRESS 'CAUSE ARG IS PRESENT ; TIME30: .IFNZ $KT11C TST RSVRD2(R2) ;SEE IF THE OWNER OF THIS MODULE BEQ TIME35 ;IS A TASK. BRANCH IF HE'S NOT MOV RSVRD2(R2),-(SP) ;SINCE HE'S A TASK, WE CAN'T MOV FLAG(R4),-(SP) ;TRUST HIS FLAG ADDRESS JSR PC,ADDRCK ;SO WE'LL CHECK IT BNE TIME38 ;AND BRANCH IF IT ISN'T IN HIS DOMAIN JSR PC,TVSV6 ;AT THIS POINT, EQUESTED SUBR. ADDR. BEQ EMTX00 ;BRANCH IF SUBR IS NOT IN ROS MOV R1,R0 ;SET --- R0 = NO. INPUT ARGUMENTS .IFZ $1145 ASR R1 ;SHIFT ASR R1 ; NUMBER OF ASR R1 ; OUTPUT ARGUMENTS ASR R1 ; INTO POSITION .ENDC .IFNZ $1145 ASH #-4,R1 .ENDC BIC #177760,R0 ; BI .BYTE 2*20+1 ;ASCBIN .BYTE 0 ;MASK .BYTE 0 ;UNMASK .BYTE 1 ;ERRTYP .BYTE 1 ;DISCIO .BYTE 1 ;CREAD .BYTE 1 ;LPRNTR .BYTE 0 ;GOBACK .BYTE 0 ;CKPT .BYTE 0 ;NOCKPT .BYTE 3*20+0 ;GTIME .BYTE 3*20+0 ;GDATE .BYTE 3*20MO CKTA SINS SEESDRADL UARTVIN OOPCO SET;G P)(S,-STLIEM VBMO E ILWHA R FON AIAG ; P)(S,-R3 V MO S ERSTGIREE AV;S P)(S,-R2 V MO ; P)(S,-BRTSEM V MO N G AR* NETIOUBRSU ; .* Y BUTTPOU ; .* S NTMEGUAR ; .* F OERMBNU= 1 R ; IT'S VALID. SO CONVERT ;IT TO SYSTEM VIRTUAL BIS MASK(R4),@(SP)+ ;THEN 'OR' MASK INTO FLAG BR TIME40 .ENDC ; TIME35: BIS MASK(R4),@FLAG(R4) ;'OR' MASK INTO FLAG ; TIME38: ADD #4,R4 ;BYPASS FLAG AND MASK ; TIME40: BIT #J,R3 ;IS A JSR-SUBROUTINE SPECIFIED? BNE TIME70 ;BRANCH IF YES ; TIME50: TSTB RESET(R2) ;OC #177760,R1 ; SUB #8.,R2 ;MOVE USER STACK DOWN FOUR WORDS MOV R2,R2SAVE ;SAVE STACK VALUE TST R0 ;THEN MOVE DOWN THE STACK ARGUMENTS BEQ EMTB10 ; EMTB00: MOV 8.(R2),(R2)+ ;MOVE ARGUMENTS DOWN SOB R0,EMTB00 ; DOWN, DOWN! ; EMTB10: MOV R2,R0 MOV (SP)+,(R0)+ ;MOVE EMT REQUIRED ARGUMENTS ONTO USER MOV (SP)+,(R0)+ +3 ;SCAN .BYTE 3*20+3 ;NUMFLD .BYTE 1*20+2 ;NPARAM .BYTE 1 ;BFINIT .BYTE 1 ;BFENTR .BYTE 1 ;BFOPEN .BYTE 1 ;BFCLOS .BYTE 1 ;BFDELT .BYTE 1 ;BFPACK .BYTE 1 ;BFWRIT .BYTE 1 ;BFREAD .BYTE 2 ;R50PAK .BYTE 2 1 G AR* K ACSTR SE UON ; 0 R* S PTOR TEINPO= 0 R ; 1 R* ; C P* : INTAON COW NRSTEISEG;R S P> == =KELIS OKLOW NOK ACSTK AS TND;A P ,SVESAR2 V MO UEAL VHE TVESAO ;S CKTA,SSP V MO ANLE COW NISK ACSTM TEYS;S + 0)(R+,P)(S V MO ; + 0)(R+,P)THERWISE, WE SHOULD DEQUEUE THIS MODULE BNE TIMD20 ;UNLESS, OF COURSE, IT EXECUTES PERIODICALLY ; TIME60: MOV (R2),R3 ;GET ADDRESS OF NEXT MODULE IN QUEUE MOV R2,-(SP) JSR PC,TIMD50 ;DEQUEUE THE TIMER MODULE TST (SP)+ ;POP OFF THE ERROR FLAG MOV R3,R2 BR TIMD30 ;GO PROCESS NEXT MODULE ; TIME70: BISB #B,OPTION(R2) ;FIRST, SET THE MODULE BUSY  ;STACK AHEAD OF SUBROUTINE ARGUMENTS MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,(R0)+ ; MOV (SP)+,(R0)+ ;SYSTEM STACK IS NOW CLEAN MOV SP,STACK ;SO SAVE THE VALUE MOV R2SAVE,SP ;AND TASK STACK NOW LOOKS LIKE ===> PS ;REGISTERS NOW CONTAIN: * PC ; * R1 ; R0 = PO ;R50UNP .BYTE 1 ;BFWAIT .BYTE 1 ;DEFINE .BYTE 1 ;DELETE .BYTE 1 ;PRTCT .BYTE 1 ;UNPRCT .BYTE 2 ;SGLOAD .BYTE 0 ;ROSGET .BYTE 1 ;PFRITE .BYTE 1*20+3 ;SDATE .BYTE 1*20+2 ;STIME .BYTE 0 ;KERNEL .BYTE 1*20+0 ;GETHDR (S V MO 2 RRETOES;R R2+,P)(S V MO TSENUMRG ANETIOUBRSUF OADHE ACKTA;S + 0)(R+,P)(S V MO ERUSO NT OTSENUMRG AEDIRQURET EME OV;M + 0)(R+,P)(S V MO 0 ,RR2 V MO : 10TBEM ; N!OW DN,OW D ; 0 B0MT,ER0 B SO WNDOS NTMEGUARE OV;M )+R2,(2)(R8. V MO : 00TBEM ; 10TBEM Q BE S NTMEGUARK ACSTE THN OW DVEMON HE;T R0 T TS E LUVAK ACSTE AV;S E AV2S,RR2  JSR PC,TMSAVE ;THEN DO A 'SAVE' FOR THE INTERRUPTED PROGRAM MOVB R4,@#PS ;THEN LOWER THE INTERRUPT LEVEL MOV R0,-(SP) ;SAVE MOV R1,-(SP) ; CRITICAL MOV R2,-(SP) ; REGISTERS .IIF NE $KT11C MOV @#$KPAR5,-(SP) ;SAVE KERNEL KPAR 5 JSR PC,@JSTARG(R4) ;THEN CALL THE SUBROUTINE .IIF NE $KT11C MOV (SP)+,@#$KPAR5 ;RESTORE KERNEL PAR 5 MOV INTER TO PS * R0 ; ON USER STACK * ARG 1 ; R1 = NUMBER OF * . ; ARGUMENTS * . ; OUTPUT BY * . ; SUBROUTINE * ARG N MOV EMTSBR,-(SP) ; MOV R2,-(SP) ;SAVE REGISTERS MOV R3,-(SP) ;  .BYTE 0 ; DIOA65 .BYTE 0 ; FLMB00 .EVEN .PAGE ;* ;* THIS TABLE DEFINES WHICH ADDRESS (IF ANY) ON THE STACK IS ;* TO BE CONVERTED FROM TASK VIRTUAL TO SYSTEM VIRTUAL. IT ;* ALSO INDICATES IF THE ADDRESS IS AN I/O LIST ADDRESS, IN ;* WHICH CASE THE DATA BUFFER ADDRESS IS ALSO CONVERTED. THE ;* FORMAT OF THE TABLE IS: ;* ;* BITS 0-6 = POSITION OF ADDRESS ON STACK (SEE BELOW) ;* V MO DSOR WURFON OW DCKTA SERUSE OV;M R2.,#8 B SU ; R10,7677#1 C BI ; R00,7677#1 C BI C ND.E R14,#- H AS 5 14$1 Z FN.I C ND.E ONTISIPOO NT I ; R1 R AS S NTMEGUART PUUT O ; R1 R AS F OERMBNU ; R1 R AS FTHI;S R1 R AS 5 14$1 FZ.I S NTMEGUART PUIN. NO= 0 R-- -ET;S 0 ,RR1 (SP)+,R2 ;RESTORE REGISTERS MOV (SP)+,R1 ; MOV (SP)+,R0 ; BICB #B,OPTION(R2) ;CLEAR 'BUSY' BIT .LOCK ;INHIBIT INTERRUPTS BITB #D,OPTION(R2) ;DID WE GET A DEQUEUE REQUEST? BNE TIME60 ;BRANCH IF YES BR TIME50 ;OTHERWISE, GO SEE IF REQUEST IS ONE-SHOT .PAGE ;******* ;* ;* T I M E R E X I T S E Q U E N C E ;* ;* TIMX00: DE AGAIN FOR A WHILE MOVB EMLIST,-(SP) ;GET SCOOP ON VIRTUAL ADDRESSES IN STACK MOVB -2(R0),@#PS ;ENABLE INTERRUPTS MOVB (SP),R2 ;GET INDEX OF POSITION OF LIST ADDRESS BEQ EMTD00 ;BRANCH IF NO CONVERSION IS REQUIRED BIC #177600,R2 ;OTHERWISE, CLEAR EXTRANEOUS BITS ADD SP,R2 ;R2 = ADDRESS ON STACK THAT CONTAINS ;THE LIST ADDRESS MOVB 1(R2),R3  BIT 7 = 1 FOR I/O LIST ADDRESSES; 0 FOR OTHERS ;* ;* THE STACK IS ASSUMED TO LOOK LIKE: ;* BOTTOM ======> ARG 1 2N + 6 ;* . . ;* . . ;* . . ;* ARG N 8 ;* PC 6 ;* R2 4 ;* R3V MO S RON IOT NISR UB SIFH NCRA;B 00TXEM Q BE R.DD AR.UB SEDSTUEEQ RHE TET GND;A BRTSEM),R0E(BLTAEM V MO EXND IRDWOA O TFTHI;S R0 L AS O NF ISSREDD AALTUIR VSKTAE AV;S T ISML,E0)(RSTLIIO VBMO BRSUS HI TOR FTSENUMRG AOFR BEUM NET;G 1 ,R0)(RRGBASU VBMO T MPTEATS ESCC ALAEGLL IIFH NCRA;B 00TYEM Q BE ; 1 ,R0)(RSTBRSU TBBI ) DEMOS HIN ODSENEP DLL AIT;( R10,74 C TIMBSY ;SEE IF WE RE-ENTERED OURSELVES BLT TIMX10 ;BRANCH IF NO JSR PC,TMSAVE ;OTHERWISE, GO CALL 'SAVE' MOVB R4,@#PS ;LOWER INTERRUPTS TEMPORARILY .LOCK ;THEN INHIBIT AGAIN ; .IFNZ $TMBAS ; DEC BASCNT ;DECREMENT TIMER BASE AND GO BNE TIMX00 ;THROUGH EXIT SEQUENCE IF NOT ZERO .ENDC ! ;GET LIST ADDRESS TOP BYTE, 'CAUSE ASH #-4,R3 ;FIRST, WE NEED THE PAR NUMBER BIC #177761,R3 ;R0 = (PAR #)*2 FOR INDEXING MOV $UPAR0(R3),@#$KPAR5 ;TRANSFER USER PAR TO KERNEL PAR MOV (R2),R3 ;NOW, PUT THE PAR TO THE BIC #160000,R3 ;NEAREST 32-WORD BOUNDARY ASH #-6,R3 ;BY TAKING BITS 6-12 OF TASK ADD R3,@#$KPAR5 ;VIRTUAL AND ADDIN" 2 ;* TOP =========> TABLE VALUE 0 ;* IOLIST: .BYTE 0. ;ILLEGAL INDEX .BYTE 0. ;QUEUE .BYTE 0. ;SUSPND .BYTE 0. ;UNSPND .BYTE 0. ;EXIT .BYTE 0. ;FRETSK .BYTE 0. ;ABORT .BYTE 10. ;QTIME .BYTE 8. ;DQTIME .BYTE 8. ;QSKED .B77#1 C BI ? BRSUS HI TTOS ESCC AVEHAR LEAL CESDO, OW;N 1 ,RSSCE$A V MO E NGRAF OUT OIFH NCRA;B 00TYEM T BG T EMAX MANTHR TEEAGRR OROZEE B'TAN;C MTXEMA,#R0 P CM D LIVAS IERMBNUT EME THF IEE;S 00TYEM Q BE R BEUM NMT EHE TCTRAXT END;A R0+,P)(S SBBI R0 R CL ONTIUCTRNS IMT EET;G ) R1-( PIMF PCS R'LEAL CET;G R1),SP6( V MO ; $ ; ; JMP TIMC05 ;NOW, WE'RE GONNA GO PROCESS THE INTERRUPT ;THAT WE COULDN'T PROCESS BEFORE ;(DOES THAT MAKE SENSE?) ; TIMX10: TST (SP)+ ;SEE IF WE NEED TO QUEUE TIMERQ BEQ TIMX20 ;BRANCH IF NO MOV #TIMERQ,R2 ;OTHERWISE, IS TIMERQ ALREADY THREADED? DEC (R2) ;DECREMENT THREAD WORD %G TO BITS ;0-12 OF KPAR 5 BIC #177700,(R2) ;NOW, SET THE LIST ADDRESS TO VIRTUAL BIS #120000,(R2) ;USING KPAR 5. TSTB (SP)+ ;NOW, IS THERE A DATA BUFFER ADDRESS? BPL EMTB20 ;BRANCH IF NO MOV (R2),R2 ;OTHERWISE, GET THE TASK VIRTUAL ADDRESS MOVB DATA+1(R2),R3 ; ASH #-4,R3 ;GET THE PAR NUMBER BIC #177761,R3 &YTE 8. ;DQSKED .BYTE 8.+200 ;TTYOUT .BYTE 8.+200 ;TTYIN .BYTE 8.+200 ;DECTAP .BYTE 8. ;BINASC .BYTE 8. ;ASCBIN .BYTE 0. ;MASK .BYTE 0. ;UNMASK .BYTE 8. ;ERRTYP .BYTE 8.+200 ;DISCIO .BYTE 8.+200 ;CREAD .BYTE 8.+200 ;LPRNTR .BYTE 0. 0 R ASE OD MERUSO T ; VETILAREE ARS UEAL VSPK AS TLL AE:OT;N 4AR PELRNKEP UET SND;A 4 ARKP#$,@R0PA$U@# V MO 4 R-ASL NEER KOS RSE UTOT IRTVEON;C R20,0000#1 S BI R2R TEISEG RINT IUT PND;A R2+,P)(S V MO UEAL VSPS R'SE UET;G SP PIMF R2.. . ; P)(S,-R0 V MO 1 .R.. ; P)(S,-R1 V MO R0E AV;S P)(S,-R2 ( BNE TIMX40 ;AND BRANCH IF NOT THREADABLE .IFZ $KT11C MOV R2,@LAST+4 ;PLACE TIMERQ IN TOP PRIORITY MOV R2,LAST+4 ;QUEUE THREAD .ENDC .IFNZ $KT11C MOV LAST+4,-(SP) ;PLACE TIMERQ IN JSR PC,PPASV5 ;TOP PRIORITY ROS MOV PKTMQ,@(SP)+ ;QUEUEING THREAD USING MOV PKTMQ,LAST+4 ;11/45 PACKED PHYSICAL FORM .ENDC ; TIMX20: TST (SP)+ ) ;R0 = PAR INDEX MOV $UPAR0(R3),DTPAR(R2) ;TRANSFER USER PAR TO KERNEL PAR MOV DATA(R2),R3 ;NEXT, PUT THE PAR TO THE BIC #160000,R3 ;NEAREST 32-WORD BOUNDARY ASH #-6,R3 ; ADD R3,DTPAR(R2) ; MOV DTPAR(R2),@#$KPAR6 ;SET UP KERNEL PAR 6 MOV DATA(R2),R3 ;THEN, CHANGE THE ADDRESS TO KERNEL VIRTUAL BIC #177700,R3 ;AND POINT IT + ;GOBACK .BYTE 0. ;CKPT .BYTE 0. ;NOCKPT .BYTE 0. ;GTIME .BYTE 0. ;GDATE .BYTE 10. ;SCAN .BYTE 0 ;NUMFLD .BYTE 0. ;NPARAM .BYTE 8. ;BFINIT .BYTE 8. ;BFENTR .BYTE 8. ;BFOPEN .BYTE 8. ;BFCLOS .BYTE 8. ;BFD V MO L NEER K =DEMOS OUVIRE PIFH NCRA;B 20TYEM Q BE DEMOR SE UINE BSTMUO LS AND;A ) SP2(R,SE#U T BI . OT NIFH NCRA B. SKTAA E BSTMUR LEAL;C 20TYEM Q BE P RA TALEG LOR FCKHE CSTIR;F SKTA$C T TS : APTREM ;* ;* C PERUS ;* NETIOUBRSUO TNTMEGUART PUIN S PERUS ;* ;* ERUS ELRNKE ;* ;* E:IK LOKLOS CKTA SK)AS(TR SE UHE TND AS)RO (ELRNKEE TH ;* . EDITIBNH, ;SEE IF SAVE WAS EVER CALLED BNE TIMX30 ;BRANCH IF IT WAS RST.56 ;RESTORE KERNEL PAR'S MOV (SP)+,R0 ;OTHERWISE, RESTORE REGISTERS MOV (SP)+,R1 ; MOV (SP)+,R2 ; MOV (SP)+,R3 ; MOV (SP)+,R4 ; MOV (SP)+,R5 ;CLEAN UP STACK ; .IFZ $CLOCK CLR TMFL- BIS #140000,R3 ; TO KPAR 6 MOV R3,DTVIRT(R2) ;AND SAVE BOTH IN THE I/O LIST ; EMTB20: MOV (SP)+,R3 ;RESTORE MOV (SP)+,R2 ; REGISTERS JSR PC,@(SP)+ ;LINK TO REQUESTED SUBROUTINE ;* ;* ;* RETURN HERE AFTER SUBROUTINE HAS FINISHED DOING ITS THING. ;* NOW WE NEED TO REORGANIZE THE TASK STACK SO'S WE CAN RETURN ;* TO HIM. R0 AND R1 SHOULD STILL BE SET AS DEFINED ABOVE. ;* ;* TSK.PC: ND.E PC S RT R4+,3)(R V MO SSREDD ALEDUMO /ELT .BYTE 8. ;BFPACK .BYTE 8. ;BFWRIT .BYTE 8. ;BFREAD .BYTE 0. ;R50PAK .BYTE 0. ;R50UNP .BYTE 8. ;BFWAIT .BYTE 8. ;DEFINE .BYTE 8. ;DELETE .BYTE 8. ;PRTCT .BYTE 8. ;UNPRCT .BYTE 0. ;SGLOAD .BYTE 0. ;ROSGET 0AG ;SET 'SAVE NOT CALLED' FLAG JMP SCHED ;AND GO TO THE SCHEDULER .ENDC ;(BECAUSE WE DON'T HAVE TQO CLOCKS) ; RTI ;AND EXIT ; TIMX30: .IFZ $CLOCK INC TMFLAG ;SET 'SAVE CALLED' FLAG JMP SCHED ;THEN GO TO THE SCHEDULER .ENDC ;CLEAN UP STACK JMP RESTOR ;AND E1 .LOCK ;INHIBIT INTERRUPTS MOV STACK,SP ;RESTORE THE SYSTEM STACK VALUE MOV -(R0),-(SP) ;PUT RETURN PS MOV -(R0),-(SP) ;AND PC ON SYSTEM STACK FOR RTI MOV -(R0),R1SAVE ;SAVE OLD R0 AND R1 SOMEWHERE MOV -(R0),R0SAVE ;ELSE FOR A WHILE TST R1 ;SEE IF THERE ARE ANY ARGUMENTS BEQ EMTC10 ;RETURNED FROM SUBROUTINE - BR IF NO ; EMTC00: MOV ; R2+,3)(R V MO EXND IONTILUSORE ; R1+,3)(R V MO R TEUNCON IOUTOLES RNTREUR COFS ESDRAD ; R0+,3)(R V MO S ESDRADE ULOD MHE;T R FO5 R PA KRETOES;R R5PA$K@#+,3)(R V MO 1CT1$KE NIF.I C PRNTURE ; ) SP-(+,3)(R V MO AGFL' EDEUQUK AS'T ; ) SP-(+,3)(R V MO EDAV SWEF UFSTE THL ALT GEN HE;T R3P,EMMT#T V MO G LA FD'LEAL CVESA 'ET;S P)3 .BYTE 8.+200 ;PFRITE .BYTE 0. ;SDATE .BYTE 0. ;STIME .BYTE 0. ;KERNEL .BYTE 0. ;GETHDR .BYTE 0 ; DIOA65 .BYTE 0 ; FLMB00 .EVEN ;* ;* MISCELLANEOUS EMTRAP PARAMETERS ;* R0SAVE: ;TEMPORARY STORAGE FOR R0 R2SAVE: .WORD 0 ;TEMPORARY STORAGE FOR R2 R1SAVE: ;TEM4XIT THROUGH RESTOR ; TIMX40: INC (R2) ;TIMERQ ALREADY ACTIVE, PUT THREAD ;WORD BACK THE WAY IT WAS AND INCREMENT INC REPEAT ;THEN INCREMENT THE 'REPEAT' FLAG BR TIMX20 ;FOR TIMERQ AND EXIT .PAGE ;*********************************************************************** ;* ** ;* T M S A V E 5 -(R0),8.(R0) ;MOVE SUBROUTINE ARGUMENTS, PS AND PC SOB R1,EMTC00 ;UP ON THE STACK ; EMTC10: ADD #8.,R0 ;ADJUST TASK STACK VALUE BIC #160000,R0 ;POINT R0 STACK BASE TO ASR 0 (USER MODE) MOV R0,-(SP) ;PUT USER STACK VALUE ON STACK MOV R0SAVE,R0 ;RESTORE TASK'S MOV R1SAVE,R1 ; REGISTERS BIS #PUSER,@#PS ;SET PREVIOUS MODE = USER MTPI SP (S,-PC V MO D TEUPRRTEINS WAR VEMEHO;W F ONTMEONIRNV EHE TVESAO TVESAL AL;C E AV,SR5 R JS RSTEISEG R ; R5+,P)(S V MO ALEREN G ; R4+,P)(S V MO HE T ; R3+,P)(S V MO F O ; R2+,P)(S V MO LL A; R1+,P)(S V MO RETOES;R R0+,P)(S V MO 6 D AN5 R PAL NEER KRETOES;R 56T.RS AGFL' EDLLCAE AV'SD >PORARY STORAGE FOR R1 EMTSBR:.WORD 0 ;TEMPORARARY STORAGE FOR SAVING ADDRESS ;OF THE CALLED SUBROUTINE EMLIST: .WORD 0 ;TEMPORARY SAVE AREA FOR VALUE RETRIEVED ;FROM IOLIST TABLE USER = 140000 ;BITS IN PS WHICH MEAN CURRENT ;MODE = USER PUSER = 030000 ;BITS IN PS WHICH MEAN ;PREVIOUS MODE = USER DATA8 ** ;* ** ;* THIS SUBROUTINE SETS UP TO CALL 'SAVE' SO THAT TIMER CAN ** ;* LOWER THE INTERRUPT LEVEL. THE ONLY TRICKY PART COMES IN ** ;* IF A TASK WAS INTERRUPTED. IF SO, THEN WE'RE ON THE TASK ** ;* STACK. BUT WHEN SAVE RETURNS, WE'LL BE ON THE SYSTEM STACK. ** ;* ** ;* USAGE IS : 9;RESET USER MODE SP VALUE RTI ;RETURN TO USER ;* ;* EMT ERROR - TREAT AS ANY ERROR TRAP ;* EMTX00: TST (SP)+ ;CLEAN MOV (SP)+,R0 ; UP MOV (SP)+,R1 ; SYSTEM MOV (SP)+,R2 ; STACK ; EMTX20: JMP PSTRAP ;THEN GO TO ROS ERROR TRAP ROUTINE ; EMTD00: TST (SP)+ ;POP CODE OFF STACK BR EMTB20 ;AND GO LINK TEE N'TON;D + P)(S T TS G LA FD'UEUE QSKTA ' ; ) R3-(+,P)(S V MO PCN URET R ; ) R3-(+,P)(S V MO 3)(R,-R5PA$K@# V MO 1CT1$KE NIF.I ONTILUSORET ENRRCUF OSSREDD A ; 3)(R,-R0 V MO R TEUNCON IOUTOLES R ; 3)(R,-R1 V MO S ESDRADE ULOD M: VESAN HE;T 3)(R,-R2 V MO 3)(R,-R4 V MO A RE AVESAY ARORMPTEF OSSREDD AET;G R3.,14P+EMMT#T V MO ND.E C ND.E E ON DLL;A PC S RT 2 ,340#3 V MO ORCTVET EMT NI;I 30P,RAMT#E V MO G INGOP EE K -ET YOT;N 10TIEM OSBL ? ET YORCTVEF OND EEDCHEA;R L ABMT+E*2MTXEMA,#R0 P CM: 20TIEM INGA AITE NCVAADD AN..;. + 0)(R T TS T I< ** ;* ** ;* JSR PC,TMSAVE ** ;* ** ;* WHERE THE STACK ON ENTRY TO TMSAVE LOOKS LIKE: PS ** ;* PC ** ;* R5 ** ;* =O THE SUBROUTINE .PAGE ;*********************************************************************** ;* ;* K E R N E L ;* ;* THIS SHORT EMT PROCESSING SUBROUTINE CAN ONLY BE ENTERED BY ;* SYSTEM TASKS THAT ARE WITHIN 16K MEMORY. THIS SUBROUTINE ;* PLACES THE CALLING TASK (WHO IS IN USER MODE) IN THE ;* KERNEL MODE. --- CAVEAT EMPTOR --- ;* ;* KERNEL: MOV $CTASK,-(SP) ;PUSH THE TASK NUMBER AND MOV 8.(SP),- : VESATM ; **********************************************************************;* * ;* * 1 = C 11KT $IFK ACSTE THF ORTPAY NL ORE A 6ND A 5ARKP : TENO ;* ** ;* ** PCN URET R ;* **AGFL' EDEUQUK AS'T ;* **AGFL' EDLLCAE AV'S INN URET RORRR EUT P -ES;Y ) R0-(R,ERMT#E V MO O ;N 20TIEM E BN D?NEFIDEUNT ENEMELR TOEC VISTHS ;I + 0)(R T TS: 10TIEM R0L,ABMT#E V MO .)ONSIER VUGEB DIN" TSAL"H (S.RNTUREE ATDIMEIMH IT;W TSENEMELR TOEC VEDINEFND UCELAEP RTOE INUTROUB;S T:NITIEM ] D.LEAL CRE AEYTHE AS CIN" RRTEEM "TOS IETRENE ESTHE IZALTINI ITO; L"IP "BYD LEAL CBEL IL WNETIOUBRSUG INOWLLFOE TH. ERADLOE THY BROZEA ; THWID DEOA LBEL IL WEDATEREN GNG R4 ** ;* R3 ** ;* R2 ** ;* R1 ** ;* R0 ** ;* KPAR 5 * ;* KPAR 6 * ;* (SP) ;PC OF THE CALLING TASK JSR PC,TVSV5 ;SO'S WE CAN CONVERT THE VIRTUAL ;ADDRESS TO A SYSTEM VIRTUAL ADDRESS JMP @(SP)+ ;THEN WE CAN RETURN TO THE TASK ;IN THE KERNEL MODE. .ENDC .PAGE .IFZ $KT11C .CSECT .EMTIN ;FORCE INTO IPL GROUP ;[GLOBAL REFERENCES WHICH REMAIN UNDEFINED AT LINK TIME BECAUSE THEY ; WERE NOT INCLUDED IN THE MONITOR BEI = 12. ;DATA BUFFER ADDRESS IN ALL I/O LISTS DTPAR = 14. ;KPAR 6 BASE VALUE FOR DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDR .PAGE ; EMTY00: JMP EMTX00 ;INTERMEDIATE LINKAGE TO EMTX00 EMTY20: JMP EMTX20 ;INTERMEDIATE LINKAGE TO EMTX20 ;* ;* ENTER HERE WHENEVER A PROGRAM EXECUTES AN EMT INSTRUCTION. ;* EMTRAP IS ENTERED IN THE KERNEL MODE WITH INTERRUPTS I .EVEN ;* ;* MISCELLANEOUS EMTRAP PARAMETERS ;* R0SAVE: ;TEMPORARY STORAGE FOR R0 R2SAVE: .WORD 0 ;TEMPORARY STORAGE FOR R2 R1SAVE: ;TEMPORARY STORAGE FOR R1 EMTSBR:.WORD 0 ;TEMPORARARY STORAGE FOR SAVING ADDRESS ;OF THE CALLED SUBROUTINE USER = 140000 ;BITS IN PS WHICH MEAN CURRENT .REF TVSV5 ;MODE = USER