(B ; UPDATE 13-MAR-73 QUEUE.W03 .ENABLE CDR ; 3/12/73 ; UPDATE 2/16/73 QUEUE.W02 ; UPDATE 2/15/73 QUEUE.W01 OFF .V28 ; UPDATE 27 27 JUN 1972 RETURN TO TSTACK CLEAR ; UPDATE 26 22 JUN 1972 FIX FIXES ; UPDATE 25 21 JUN 1972 FIX OVERLAY DISK FILE ; UPDATE 24 1 MAY 1972 CHANGE QIPL FOR ROSII ; UPDATE 23 25 APR 1972 FIX ADDRESS OF IFD TABLE ; UPDATE.m-Z@K@w  K7H . U2> [g4$.:.v? 8 *6?B  ? ?C. +C %UW"  |&.r  ` L2 1 0{    8 3/12/73 .DEF LOGMAX,PHYDEV,ALTDEV .CSECT .IFT ; 3/12/73 ; ; ; ; RQUEST = . $SAVE ; SAVE ENVIRONMENT-GET SYS. STACK MOV #$INPNO,-(SP) ; PUSH .IFNZ DPRTY CLR -(SP) ; ARGUMENTS FOR QUEUE .ENDC .IFNZ ARG TST -(SP) ; ONTO .ENDC CLR  * ; * ---------------- * ; * MOV NEWMTH,-(SP) ;PUSH NEW MONTH * .IF DF FUTURE ; 3/12/73 ; * MOV NEWDAY,-(SP) ;PUSH NEW DAY * ; * MOV NEWYR,-(SP) ;PUSH NEW YEAR * ; * JSR PC,SDATE ;CALL "SET DATE" * ; * TST (SP)+ ;POP ERRORING ELEMENTS: ; QTABLE ; QUEUE ; QSAVE & QSAVEI ; SUSPND ; EXIT ; FRETSK ; ABORT ; DSPTCH ; UNSPND ; QIPL .PAGE .?vw f&×& T?hfp. 17.U?)? ?$?/.4.   ?ߐ .  ?.Z  w 6 . 7 pn kf  = F& fB 2F 6 v -Zd t" 7 7 7 7  0 a. * 0` 0Gk.   DEVICE PHY. UNIT NUMBER ******** ; BITS 8-11: DEVICE TYPE ******** ; BIT 14: ALT. DEVICE EXIST IF=1. ******** ; BIT 15: UNIT NOT AVAIL IF=1. ******** .IFT ; 3/12/73 .WORD 000000 ; UNIT 0. TTY 0. NO ALT. ******** .WORD 000400 ; UNIT 1. DISC 0. NO ALT., * .ENDC ; 3/12/73 ; * JSR PC,GTIME ;CALL "GET TIME" * ; * MOV (SP)+,CURHR ;POP CURRENT HOUR * ; * MOV (SP)+,CURMIN ;POP CURRENT MINUTE * ; * MOV (SP)+,CURSEC ;POP CURRENT SECOND * ; * * ; * PROGRAMMER: 52 !ND * ; SYSTEM EQUATE CARDS REQUIRED FOR THE SOFTWARE QUEUEING AND * ; TASK CONTROL SUBROUTINES. EACH PARAMETER IS DEFINED IN THE * ; COMMENTS FIELD. * ; * ; USAGE. EACH TABLE, QUEUE AND DATA ITEM IS DEFINED IN A .DEF * ; ASSEMBLER DIRECTIVE. OTHER PROGRAMS MAY REFER TO THESE * ; ITEMS BY INCLUDING THEM IN A .REF ASSEMBLER DIRE G,:.?0O J & . ? O J`# ******** .WORD 100000 ; UNIT 2. NOT AVAIL. ******** .WORD 100000 ; UNIT 3. NOT AVAIL. ******** .WORD 140000 ; UNIT 4. TTY1 NOT AVAIL. ALT. AVAIL. ******** .IFZ $DTAPE ; ******** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******$ * ; * DATE: 12-DEC-71 * ; * VERSION:001.004 * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; ******************************************************************** .TITLE SETGET .DEF STIME,SDATE,GTIME,GDATE .IF DF FUTURE %CTIVE. THE * ; EQUATE PARAMETERS, HOWEVER, ARE NOT ACCESSIBLE TO OTHER * ; PROGRAMS. * ; * ; PROGRAMMER 55 * ; DATE 07.21.71 * ; REVISION * ; .w,m4p@Re@S@~@.aw}@w_@k~[@(~a,}h:.Rh@yRh<.& <-U7,  .&6 & &f{Re m4pk~[r.Le  UH H ) w_S@~rH '** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******** .WORD 100000 ; NO DECTAPES ******** .ENDC ( ; 3/12/73 .REF MONTH,MDAY,YEAR,JDATE,SECOND,MINUTE,HOUR .REF TICTOC,DAYTAB,PUSHR,POPR,MXDAYS,JANARY,FEBARY .REF THDTAB,CURTHD .ENDC ; 3/12/73 .DEF STIME,GTIME ; 3/12/73 .REF SECOND,MINUTE,HOUR,TICTOC ; 3/12/73 .PAGE STIME: ;SUB) * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;*********************************************************************** ; .PAGE .DEF ACTIVE,TASKS,LEVELS,FIRST,LAST ; QUEU .DEF HEADER,TSTAT,IOSTAT,TPRTY,STACK ; QUEU .DEF PPTAB,$CTASK,$PRIOR ; QTAB *; UPDATE 13-MAR-73 SYSINI.W02 ; UPDATE 2/24/73 SYSINI.W01 OFF C01 ; UPDATE 10/18/72 SYSINI.C01 ; 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 * ;* RESIDENT TASKS-CALLED BY IPL+ ; ******** .IFNZ $DTAPE ; ******** ; FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 .ENDC ; ******** ; ALTERNATE DEVICE TABLE ; ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER .ENDC ; ,ROUTINE TO SET NEW TIME MOV R0,-(SP) ;SAVE USER'S MOV 4(SP),R0 ;PULL NEW MINUTE OFF STACK MOV PS,4(SP) ;REPLACE WITH CURRENT STATUS FOR RTI USE CMP R0,#60. ;SEE IF MINUTE WITHIN RANGE BHIS STIM10 ;NO: EXIT IN ERROR CMP 6(SP),#24. ;SEE IF NEW HOUR WITHIN RANGE BLO STIM20 ;YES: PROCEED STIM10: ;ROUTINE EXIT POINT: FOR GOOD AND BAD -.IFNZ OVRLAY ; QTAB .DEF BSIZE,IFD ; QTAB .ENDC QTAB ; ; $CTASK AND $PRIOR CONTAIN THE TASK NUMBER AND PRIOITY LEVEL OF THE ; CURRENTLY ACTIVE TASK (WHOSE PROGRAM HEADER BEGINS AT THE ADDRESS ; IN ACTIVE).IF NO TASK IS ACTIVE, $CTASK AND $PRIOR WILL CONTAIN THE ; TASK NUMBER AND PRIORITY LEVEL OF THE LAST TASK ACTIVE, IF ANY. .. * ;* * ;*********************************************************************** .DEF SYSINI .DEF TNOTBL ; 3/12/73 .REF INPTHD,WOBLHD,DSPLHD,MSGHD .REF HEADER,TSTAT,TPRTY,TASKS .REF QIPL .REF TSCHED ; ******** .CSECT .SYSIN ; 3/12/73 LOGMAX: .WORD 1 ; 1 DEVICE 3/12/73 PHYDEV: .WORD 0 ; UNIT 0 - TTY - NO ALTERNATE 3/12/73 ALTDEV: .WORD 0 ; NO ALT UNIT 0 3/12/73 ; .END 0 MOV (SP)+,R0 ;RESTORE USER'S RTI ;RETURN AND RESTORE OLD CPU STATUS STIM20: ;HERE WHEN PARAMTERS ARE WITHIN RANGE .LOCK TOPPS ;LOCK OUT INTERFERENCE FROM CLOCK MOVB R0,MINUTE ;UPDATE CURRENT MINUTE MOVB 6(SP),HOUR ;UPDATE CURRENT HOUR MOV #1,TICTOC ;RESET [TICS] AND [SECOND] COUNTERS CLR 6(SP) ;CLEAR ERROR CODE BR STIM10 1; QUEU $CTASK: .WORD 0 ; CURRENTLY ACTIVE TASK'S NUMBER. QUEU $PRIOR: .WORD 0 ; SAME TASK'S PRIORITY. QUEU ACTIVE: .WORD 0 ;CONTAINS PROGRAM HEADER ADDRESS OF THE ; ;CURRENTLY EXECUTING TASK; 0=NONE ACTIV LEVELS: .WORD NPRIOR ;NUMBER OF PRIORITY LEVELS IN SYSTEM ; 2HDRTBL = . .WORD INPTHD .WORD WOBLHD .WORD 0 ; DUMMY - SYSINI SKIPS OVER 3/12/73 .WORD DSPLHD .WORD MSGHD ; ; TNOTBL = . .WORD $INPNO .WORD $WOBNO .WORD 0 ; BUT IPL STOPS AUTO QUEUE HERE. 3/12/73 .WORD $DSPNO .WORD $MSGNO ; ; NOSYST = /2 NOSYSI = NOSYST+NOSYST ; INDEX OF ABOVE PRIOR = .zy:DL@2@:D~@.?T2@kK@;}G@@2@. ` @DL@(6x(Lzy:h?\}h |6xu.  (:D~DL DL ?T2kK" !.&2r  re( ` ;}G;}G 2x4 ;GO EXIT .PAGE .IF DF FUTURE ; 3/12/73 SDATE: ;SUBROUTINE TO UPDATE CURRENT MONTH,DAY, AND YEAR JSR R5,PUSHR ;SAVE ALL REGISTERS MOV SP,R0 ;UTILIZE AS SECONDARY STACK POINTER ADD #16,R0 ;POINT TO NEW "YEAR" ON STACK MOV (R0)+,R1 ;REMOVE YEAR MOV (R0)+,R2 ;AND NEW DAY MOV (R0),R3 ;GET MONTH F5 QUEU STACK: .WORD 0 ; ADDRESS OF SYSTEM STACK POINTER QUEU ; QUEU ; QTAB ; QTAB ; THE TABLES 'PPTAB' (BYTE), 'LAST' (WORD), AND 'FIRST' (WORD) ALL HAVE QTAB ; A MAXIMUM NUMBER OF SYSGENABLE ENTRIES ABOVE WHICH ADDITIONAL CODE QTAB ; MUST BE ADDED BEFORE THE6 9. ; TASK PRIORITY IN HEADER ; ; SYSINI = . JSR 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 #1,(R1) ; INITIALIZE TASK THREAD WORDS. 3/12/73 MOV TNOTBL+NOSYSI(R0),R2 ; GET TASK'S NUMBER CLRB TSTAT(R2) ; SET TASK QUIESCENT M7; UPDATE 3/21/73 TTYIO.W02 ; UPDATE 2/15/73 TTYIO.W01 OFF .P24 ; UPDATE 6/27/72 TTYIO.P24 ; UPDATE 6/22/72 TTYIO.P23 ; UPDATE 3/10/72 TTYIO.P22 ; UPDATE 3/3/72 TTYIO.P21 ; UPDATE 2/17/72 TTYIO.P20 ; UPDATE 2/14/72 TTYIO.P19 ; UPDATE 1/11/72 TTYIO.P18 ; UPDATE 12/15/71 TTYIO.P17 ; UPDATE 12/13/71 TTYIO.P16 ; UPDATE 12FROM STACK MOV PS,-(R0) ;LOAD CURRENT PSW ON STACK FOR RTI USE MOV -4(R0),-(R0) ;AND MOVE RTN ADDR INTO PROPER PLACE,TOO TST R1 ; CHECK YEAR VALUE 1/30/73 BLE SDAT30 ; ERROR 1/30/73 TST R2 ; CHECK DAY VALUE 1/30/73 BLE SDAT30 ; ERROR 1/30/73 TST R3 EY WILL PROPERLY ASSEMBLY. TO INSURE THIS, QTAB ; THE FOLLOWING CHECK IS PROVIDED. THE NUMBER SUBTRACTED FROM 'NPRIOR' QTAB ; IS THE VALUE ABOVE WHICH NEW CODE MUST BE ADDED. QTAB ; QTAB .IFG NPRIOR-16. ; CURRENT MAXIMUM NUMBER OF PRIORITIES QTAB XXXXXX QTAB .ENDC GOVB PRIOR(R1),TPRTY(R2) ; SET PRIORITY DEFAULT CMP R2,TASKS BLE SYSI10 MOV R2,TASKS SYSI10: ASL R2 ; TASK NO. WORD INDEX 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 H/10/71 TTYIO.P15 ; UPDATE 12/7/71 TTYIO.P14 ; UPDATE 12/3/71 TTYIO.P13 ; UPDATE 12/1/71 TTYIO.P12 ; UPDATE 11/23/71 TTYIO.P11 ; UPDATE 11/16/71 TTYIO.P10 ; UPDATE 11/10/71 TTYIO.P09 ; UPDATE 11/8/71 TTYIO.P08 ; UPDATE 11/3/71 TTYIO.P07 ; UPDATE 10/31/71 TTYIO.P06 ; UPDATE 10/26/71 TTYIO.P05 ; UPDATE 10/14/71 TTYIO.P04 ADDB C$DI QTAB .IF NZ OVRLAY ; 3/12/73 ; QTAB ; THE FOLLOWING TABLE, PPTAB, IS USED TO CONTAIN THE QTAB ; DESCRIPTORS OF EACH SOFTWARE PRIORITY LEVEL. PPTAB IS A QTAB ; BYTE TABLE AND CONTAINS 1 ENTRY FOR EACH LEVEL. QTAB ; THE PROPERTY OF EACH LEVEL IS: QTAB ; +1 = TIME SLJ ; CHECK MONTH VALUE 1/30/73 BLE SDAT30 ; ERROR 1/30/73 CMP R3,#12. ;SEE IF MONTH IS WITHIN RANGE BHI SDAT30 ;ERROR: EXIT MOVB #28.,FEBARY ;RESET FEBRUARY IN PREP FOR NEW YEAR MOV #365.,MXDAYS ;RESET MAX DAYS COUNT BIT #3,R1 ;IS NEW YEAR A LEAP? BNE SDAT40 ;NO: NO EXTRA DAY INCB FEBARY ; RETURN TO IPL ; ; .END L; UPDATE 10/7/71 TTYIO.P03 ; UPDATE 9/22/71 TTYIO.P02 .IFG NTTYS ;ASSEMBLE TTYIO IF NTTYS .GT. 0 .TITLE TTYIO ;*********************************************************************** ; * ; T T Y O U T * ; * ; PROGRAM IDENTIFICATION. TTYOUT MICE PRIORITY (CORE OR OVERLAY) QTAB ; 0 = FIXED TASKS (CORE OR OVERLAY) QTAB ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) QTAB ; QTAB PPTAB = .-1 ; TAKE CARE OF LEVEL 0 QTAB .BYTE PRIP01,PRIP02 ; ADD MORE CODE IF NPRIOR > 16 QTAB .BYTE PRIP03,PRIP04 ; N ;YES: ADD FEB 29 INC MXDAYS ;EXTRA DAY IN LEAP YEAR SDAT40: CMPB R2,DAYTAB(R3) ;CHECK DATE FOR PROPER RANGE THIS MONTH BLO SDAT50 ;O.K.: WITHIN RANGE MOVB DAYTAB(R3),R2 ;ERROR: USE LAST DAY RATHER THAN ERR OUT SDAT50: MOV R3,-(SP) ;SAVE MONTH ON STACK FOR USE BELOW MOV #JANARY,R0 ;PREPARE TO CALC JULIAN DAY CLR R4 ;WILL ACCUM TOTAL DAYS SDAT10: DEC R3 ;COUNT DOWO.9:;@4@M:@.}@""@:g'@:<}@_MQ@<.Ye@hfp@[g4@9mQ@imR@.m@[qj@4f@(E:hV.f:h)h)bh9p:h9ahb4(p)XhFp- t  r P- TELETYPE OUTPUT SUBROUTINE: * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE TTYOUT PROCESSES TELETYPE OUTPUT REQUESTS.* ; IT PROVIDES CONCURRENT OUTPUT TO MULTIPLE TELETYPE DEVICES. * ; TWO VERSIONS OF THE SUBROUTINE ARE INCLUDED; A "CORE ONLY" AND * ; A "DISK BUFFERED" VERSION. THE NUMBER OF TELETYPE DEVICES AND * ; SUBROUTINE VERSION MAY BQ QTAB .BYTE PRIP05,PRIP06 ; QTAB .BYTE PRIP07,PRIP08 ; QTAB .BYTE PRIP09,PRIP10 ; QTAB .BYTE PRIP11,PRIP12 ; QTAB .BYTE PRIP13,PRIP14 ; QTAB .BYTE PRIP15,PRIP16 ; QTAB .=PPTAB+1+NPRIOR ; RN MONTHS BLE SDAT20 ;DONE: EXIT LOOP MOVB (R0)+,R5 ;CAN'T ADD BYTES ADD R5,R4 ;ACCUM DAYS FROM DAY TABLE BR SDAT10 ;LOOP BACK FOR MORE .PAGE SDAT20: ADD R2,R4 ;ADD TODAY'S DATE MOV #JDATE,R3 ;WILL USE AS POINTER TO DATE BYTES .LOCK TOPPS ;LOCK OUT INTERFERENCE FROM CLOCK MOV R4,(R3)+ ;LOAD JULIAN DATE MOV (SP)+,(R3) Sv $&2>JVbn*&2>JVbn&2>JVbnzN*&2> J Vbnz2>JVbnz*2>J V bnzo.5>5>5> >>">&V.@5>5>5>5> > >$bTE SPECIFIED AS CONDITIONAL ASSEMBLY * ; PARAMETERS DURING SYSTEM GENERATION. TELETYPE MOTORS ARE * ; TURNED OFF WHEN THEIR RESPECTIVE QUEUES BECOME EMPTY. SHOULD * ; A DETECTABLE TELETYPE MALFUNCTION OCCUR AND AN ALTERNATE * ; TELETYPE DEVICE IS DEFINED, OUTPUT IS ROUTED TO THE ALTERNATE * ; DEVICE. * ; * ; USAGE. THE ASSEUGET RID OF ENTRIES NOT NEEDED QTAB .EVEN QTAB .ENDC ; 3/12/73 ; QTAB ; ; THE FOLLOWING TABLES (FIRST AND LAST) CONTAIN THE PRIORITY ; QUEUE THREAD INFORMATION. WORD 1 CORRESPONDS TO PRIORITY ; LEVEL 1 (HIGHEST PRIORITY); WORD 2 CORRESPONDS TO PRIORITY ; LEVEL 2 (SECV ;LOAD NEW MONTH MOV #THDTAB,CURTHD ;INIT CURRENT THREAD POINTER BITB #1,(R3)+ ;IS MONTH ODD OR EVEN? BNE SDAT25 ;ODD: LEAVE AT THREAD #1 ADD #2,CURTHD ;EVEN: ADVANCE TO THREAD #2 SDAT25: MOVB R2,(R3)+ ;LOAD DAY OF MONTH MOVB R1,(R3) ;LOAD CURRENT YEAR CLR 22(SP) ;CLEAR ERROR WORD FOR GOOD RETURN SDAT30: JSR R5,POPR ;RESTORE ALL REGISTERS TST Wf>5>A> >&.&0?b0?b0?b ?b?b"?&bR.L0?b0?b0?b0? b?b ?$b^r?b0?b? b?b2.25@5@5@K @@"@&.X5@5@5@5@ @ @$XMBLER LINKAGE TO SUBROUTINE * ; TTYOUT IS: * ; * ; MOV #LIST,-(SP) ;PUSH LIST ADDR ONTO STACK * ; EMT TTYOUT ;CALL TTYOUT * ; * ; THE FORTRAN EQUIVALENT CALL IS: * ; YOND HIGHEST PRIORITY); ETC. THE FIRST WORD OF EACH ; TABLE IS A DUMMY TO ALLOW FOR THE NONEXISTENT PRIORITY LEVEL 0. ; ; FIRST POINTS TO THE PROGRAM HEADER OF THE FIRST TASK IN THE ; ASSOCIATED PRIORITY LEVEL THREAD; THE FIRST WORD OF THAT ; PROGRAM HEADER POINTS TO THE NEXT TASK IN THE THREAD; AND ; SO ON. A ZERO INDICATES THE END OF THE QUEUE, AND THE 'LAST' ; TABLE CONTAINS THIS ADDRESS. ; LAST=. .WORD 0 ; BUMP LOCATION COUNZ (SP)+ ;POP THIRD ARGUMENT SINCE RTI NEEDS TWO RTI ;STACK SET TO RETURN AND RESTORE .PAGE .IFF ; 3/12/73 ; NOTE: SUBROUTINES "GTIME" AND "GDATE" SHARE THE SAME CODE. ; THE CARRY BIT IS USED AS A SWITCH TO DETERMINE WHETHER TO LOAD TIME ; OR DATE. BY USING THE PSW TO STORE THIS SWTICH, AND BY RUNNING THE ; ROUTINE UNDER LOCKOUT AFTER THE CARRY BIT IS SET/CLEARED, RE-ENTRANCY [~@5@@ @>> BB CC DD EE FF GG HH II JJ KK\ * ; CALL TTYOUT (LIST) * ; * ; LIST IS THE ADDRESS OF A TABLE OF I/O INFORMATION * ; ASSOCIATED WITH THE REQUEST * ; * ; * ; ]TER OVER LAST(0) QTAB .WORD FIRST+2. ; INSERT MORE VALUES IF NPRIOR > 16. QUEU .WORD FIRST+4 .WORD FIRST+6 .WORD FIRST+8. .WORD FIRST+10. .WORD FIRST+12. .WORD FIRST+14. .WORD FIRST+16. .WORD FIRST+18. .WORD FIRST+20. .WORD FIRST+22. .WORD FIRST+24. .WORD FIRST+26. .WORD FIRST+28. .WORD FIRST+30. .WORD FIRS^; IS MAINTAINED, AND THE POSSIBILITY OF CLOCK ALIASING IS ELIMINATED. .IFT ; 3/12/73 GDATE: ;SUBROUTINE TO GET DATE CLC ;MARK TO GET DATE (BELOW) BR GETSB1 ;SHARE ROUTINE GTIME: ;SUBROUTINE TO GET TIME SEC ;MARK TO GET TIME (BELOW) .ENDC ; 3/12/7P GTIME: _ LL MM NN PP R.R|"xb ZZRTVXZ\^`bd.RTV X Z\^`bdnfhjlnprtvx.fhj l nprtvx`PROGRAMMER: 51 * ; DATE: * ; REVISION: * ; * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;*********************************************************************** aT+32. .=LAST+NPRIOR+NPRIOR+2 ;GET RID OF ZEROES XE DON'T ; NEED FIRST=. .WORD 0 ; BUMP LOCATION COUNTER OVER FIRST(0). .WORD 0,0,0,0,0,0,0,0 ;ADD MORE ZEROES IF NPRIOR > 16 .WORD 0,0,0,0,0,0,0,0 .=FIRST+NPRIOR+NPRIOR+2 ;GET RID OF ZEROES WE DON'T ; ;NEED ; ; THE FOLLOWING TABLE IS THE SYSTEM TASK TABLE. THIS TABLE IS ; BROKb ; 3/12/73 GETSB1: ;COMMON ENTRY TO "GET" ROUTINE MOV PS,-(SP) ;SAVE CURRENT PSW .LOCK TOPPS ;LOCK OUT INTERFERENCE FROM CLOCK SUB #12,SP ;NEED FIVE STACK CELLS MOV R0,(SP)+ ;SAVE USER'S SO WE CAN USE IT MOV R1,(SP)+ ;ALSO TST (SP)+ ;PREPARE FOR MOVING PS AND PC MOV SP,R0 ;USE Acz|~@.z|~  # <bU.bw 6  lB([g4B .w &&& , dhfpm{.w & wB5N$hfp9mQ }$B(N-.AрA w  eAA[g4S(d CCd; * ; T T Y I N * ; * ; PROGRAM IDENTIFICATION. TTYIN - TELETYPE INPUT SUBROUTINE: * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE TTYIN PROCESSES TELETYPE INPUT REQUESeEN DOWN INTO 6 SUB-TABLES. THAT WAY THE TASK NUMBER CAN ; BE USED AS AN INDEX INTO THE APPROPRIATE SUB-TABLE. THESE ; TABLES ARE: ; ; 1. HEADER - CONTAINS THE ADDRESS OF PROGRAM HEADER FOR ; EACH TASK (WORD TABLE) ; 2. TSTAT - CONTAINS THE TASK STATUS (BYTE TABLE) ; -3= ABORT REQUESTED - PENDING I/O COMPLETION-OVERLAY QTAB ; -2= FREE REQUESTED - PENDING I/O COMPLETION-OVERLAY QTAB ; -1= EXIT REQUESfS SECOND STACK POINTER CMP (R0)+,(R0)+ ;ZIP UP TO POINT TO WHERE PS WAS STORED MOV (R0)+,(SP) ;MOVE PS TO NEW PLACE IN PREP FOR RTI BEQ GETSB2 ;WAS DATE: LEAVE AS IS MOV #SECOND,R1 ;WAS TIME: RE-INIT FOR TIME GETSB2: ;R1 NOW POINTING TO PROPER PARAMTER LIST MOV (R0),-(SP) ;ALSO TRANSFER PC CLR (R0) ;ALL UPPER BYTES WILL BE CLEARED... ;...BEFOREg5PA1A&" CCPA A4,w   wHe  ,[g4  R,$>A ZA B Q. > A Z A B&HDMP NZRP W . D M N Z RfZw  Z hfp.EE JDJhTS. * ; IT PROVIDES FOR CONCURRENT INPUT FROM MULTIPLE TELETYPE UNITS. * ; THE INPUT STREAM FROM A UNIT IS TERMINATED WHEN THE END OF * ; MESSAGE CHARACTER (EOMCH) IS DEPRESSED. THE TELETYPE WILL * ; CARRIAGE RETURN AND LINE FEED WHEN THE END OF LINE CHARACTER * ; (EOLCH) IS DEPRESSED. NEITHER OF THESE CHARACTERS IS INCLUDED * ; IN THE DATA BUFFER CHARACTER COUNT. THE NUMBER OF TELETYPE * ; UNITS AND THE CHARACTERS USED FOR EOMCH AND EOLCH iTED - PENDING I/O COMPLETION-OVERLAY QTAB ; 0 = QUIESCENT (INACTIVE) ; 1 = QUEUING IN PROGRESS. ; 2 = QUEUED ; 3 = ACTIVE ; 4 = SUSPENDED - VOLUNTARY ; 5 = SUSPENDED - INVOLUNTARY ; 6 = DISABLED ; 7 = ABORTED ; 8 = REQUEST PENDING WITH DQOVLY (RPOM) QTAB ; 9 = QUEUED IN RPOM BUT NOT IN ROS. j DATA LOADED ONTO STACK MOVB (R1)+,(R0) ;LOAD MONTH [OR] SECOND CLR -(R0) ;NEXT STACK CELL MOVB (R1)+,(R0) ;LOAD DAY [OR] MINUTE CLR -(R0) MOVB (R1)+,(R0) ;LOAD YEAR [OR] HOUR CMP -(SP),-(SP) ;MOVE TO POINT AT SAVED REGISTERS MOV (SP)+,R0 ;RESTORE USER'S MOV (SP)+,R1 ;ALSO RTI ;ZAP! RETURN TO CALLER WITH HIS STATUS ; k(,@DDI |X1Jw&t.D IXJt "$&&d $2>EWEH@.  $2>EE4.N  -m= rNw.  Iwf ==& IM::g'$(. && Am&A. | Hw lARE SPECIFIED* ; DURING SYSTEM GENERATION. THE ROUTINE ALLOWS THE OPERATOR TO * ; DELETE THE LAST CHARACTER INPUT BY DEPRESSING THE RUBOUT KEY; * ; ALSO, HE MAY RESTART INPUT BY DEPRESSING THE MESSAGE RESTART * ; KEY (CONTROL U). * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; TTYIN IS: m QTAB ; 3. IOSTAT - CONTAINS THE TASK'S I/O STATUS (BYTE TABLE): ; 0 = NO I/O PENDING ; N = I/O IN PROGRESS (N = 1,2,...) ; 4. TPRTY - TASK SOFTWARE PRIORITY LEVEL (BYTE TABLE). ; 5. BSIZE - NUMBER OF CORE SEGMENTS REQUESTED (BYTE) QTAB ; 6. IFD - CONTAINS INDEX INTO FILE DIRECTORY IF BIT 15=0; ; OTHERWISE THE FILE ID. USED BY THE OVERLAY MONITOR. ; (WORD TABLE). ; ; SIn ...AND THREE PARAMETERS ON STACK. .PAGE ; ******** .IF DF FUTURE ; 3/12/73 ; CITGO'S JULIAN DATE EMT IS HERE - RETURNS 1 WORD ON STACK ; ******** .REF JDATE ; ******** .DEF JULDAT ; o w d[g4&hfp.   v1A R %R :<}A R(R.@RA5N 1B%R= RAN B&R.f5P @w1CAEf( P[qjCA$E(*. I1E IL M:IE"I(L. I1LUIE_ IL$I(Ep * ; * ; MOV #LIST,-(SP) :PUSH I/O LIST ADDRESS ON STACK * ; EMT TTYIN ;CALL TTYIN * ; * ; THE FORTRAN EQUIVALENT CALL IS: * ; * ; CALL TTYIN (LIST) qNCE TASK 0 DOES NOT EXIST, ALL TASK TABLES ARE OFFSET QTAB ; BACKWARDS TO AVOID ANY WASTED MEMORY. SIMILARLY, SINCE THE TWO QTAB ; OVERLAY TASK TABLES CONTAIN INFORMATION ONLY FOR OVERLAY TASKS QTAB ; (TASKS WITH A TASK NUMBER > MXTASK) THEY ARE ALSO OFFSET QTAB ; BACKWARDS BY MXTASK. QTAB ; QTAB ; THE FOLLOWING I/O LIST IS USED IFF WHEN OVER ******** JULDAT = . ; ******** MOV (SP),-(SP) ; MAKE ROOM FOR RETURNED ARG. ******** MOV JDATE,2(SP) ; PUT JULIAN DATE ON STACK FOR CALLER ******** RTS PC ; DONE - BACK TO CALLER ******** .ENDC ; 3/12/73 .END s.^I}GIE IGI$E#.  I1Iwn 1E I II E&I%.$  I1E@PwxMw&IEP MI.JMwEE D@5 M 7.pP f D+ŀPimR.| n *-el.t * ; * ; LIST IS THE ADDRESS OF A TABLE OF I/O INFORMATION * ; ASSOCIATED WITH THE REQUEST. * ; * ; * ; PROGRAMMER: 51 * ; DATE: uLAY TASKS EXISTS. QTAB ; IT PROVIDES FOR THE MAINTENANCE OF A DISK COPY OF THE TASK QTAB ; TABLES, THEREBY PERMITTING RECOVERY AFTER A SHUTDOWN. THE QTAB ; FUNCTION CAN BE ASSUMED TO BE A WRITE(1) ' ANY USER USING A QTAB ; READ(0) WILL RESET THE FUNCTION TO A WRITE. QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS QTAB .DEF v; UPDATE 29-MAR-73 SETGET.W03 03-29-73 ; UPDATE 13-MAR-73 SETGET.W02 ; UPDATE 2/15/73 SETGET.W01 OFF .C02 ; UPDATE 1/30/73 SETGET.C02 ; UPDATE 11/6/72 SETGET.C01 ADD JULIAN DATE .ENABL CDR ;03-29-73 ; ******************************************************************** ; * w.FBE,I  5@ = F.C5@@wĕ I^[qj"I~.I2    ށ F  I$F..Fĕ\IGĒ1F  1GĕNFIGF&G.T\IHHf A  IHHM:&.z= If ĕ=I  IM: &IFx * ; REVISION: * ; * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;*********************************************************************** ; ; ; EXTERNAL REFERENCES AND PROGRAM ENTRY POINTS ; .REF QUEUE,QSAVEI,UNSPND,Ry$TKFLS,$TKFLF ; EXTERNAL LABELS FOR OTHERS QTAB .REF $TKFLN ; EXTERNAL REFERENCE FOR ME. QTAB $TKFLS: .WORD 1 ; THREAD WORD QTAB .BYTE 1,1 ; DEVICE CODE, EXIT TYPE QTAB .WORD 0 ; NO EXIT ROUTINE QTAB .BYTE 0 ; NO ERROR TASK QTAB .BYTE 1 ; DISK PRIORITY z * ; * PROGRAM IDENTIFICATION: "SETGET" * ; * SET TIME SET DATE GET TIME GET DATE * ; * * ; * ROUTINES TO SET AND GET CURRENT TIME AND DATE * ; * * ; * USAGE: * ; * USED BY GENERAL ROUTINES TO FETCH CURRENT {. : 4w 4 W<359_MQ"Ye_.;Ap +' Ye Yei.&0  0 C `0  ;:<}[. 2  .85@A&  & Ye4&4f.^ > z<Z4Z& & bRZZ(Rx|ESTOR,QTIME,DQTIME,DSPTCH .REF ACTIVE,IOSTAT,PUSHR,POPR,ERRTYP .REF LOGMAX,PHYDEV,ALTDEV .IFG NDISCS .REF DISCIO,PFRITE .ENDC .IFNZ OVRLAY .REF RELTSK .ENDC .DEF TTYOUT,TTYIN,TTINIT .DEF PRTINT,KBDINT .DEF TTICSR,TTIDBR ;USED BY POWER FAIL ROUTINE ; .CSECT ; ; ; TTYIO PARAMETERS AND SYMBOLS ; .IFG NTTYS-8. XXXXXX ;CRE} QTAB .WORD 0,0 ; ERROR WORD, RESERVED FOR DISCIO QTAB .WORD TKFLBF ; ADDRESS OF BUFFER FOR TRANSFER QTAB TKFLBF: .WORD NDISCS+4 ; FILE ID NUMBER QTAB .BYTE 0 ; USE SPECIFIED SECTOR AND WORD COUNT QTAB $TKFLF: .BYTE 3 ; I/O FUNCTION-WRITE WITH WRITE CHECK QTAB .WORD 0,0,0 ; RESERVED QTAB .WORD 0 ~TIME * ; * AND/OR DATE. USED BY OPERATOR INPUT PROGRAM TO SET * ; * TIME AND/OR DATE FROM TTY KEYBOARD. * ; * * ; * CALLING SEQUENCES: * ; * MOV NEWHR,-(SP) ;PUSH NEW HOUR * ; * MOV NEWMIN,-(SP) ;PUSH NEW MINUTE * ; * JSR PC,STIME ;CALL "SET.R4ReR4Zf `R RRZ1.D` DMCD1KDM&K.A1I@N 4   I=gA IN&I~.f@ J@P 3 1imRP.H1FIDA5@ =f!HFI"&t.BM IfÝ ATE ASSY ERROR IF NTTYS GT 8. .ENDC .IFZ NDISCS ;IF THERE ARE ZERO DISCS IN SYSTEM, ;DISALLOW MESSAGE BUFFERING MSGBUF = 0 .ENDC .IFL 1-MSGBUF XXXXXX ;CREATE ASSY ERROR IF MSGBUF NOT 0 OR 1 .ENDC TFOPTN = 40 ;TIMER MODULE FLAG OPTION TJOPTN = 20 ;TIMER MODULE JSR TO TIMEOUT COMPLETE ;ROUTINE OPTION SAVE ; RELATIVE START SECTOR QTAB .WORD $TKFLN ; NUMBER OF WORDS TO TRANSFER QTAB .ENDC QTAB ; QTAB ; QTAB TASKS: .WORD NLTASK ; LARGEST TASK NUMBER CURRENTLY IN SYSTEQTAB ; TIME" * ; * TST (SP)+ ;POP ERROR WORD * ; * BNE ERROR ;CALL PARAMETERS IN ERROR * ; * ---------------- * ; * MOV NEWMTH,-(SP) ;PUSH NEW MONTH * .IF DF FUTURE ; 3/12/73 ; * MOV NEWDAY,-(SP) ;PUSH NEW DAY * ; * MOV NEWYR,-(SP MI.hJ A7DwA@N@J DA$NS.Pnl7 j 5@qP$Ye. 5j5f5 U$4 YeYeYe(Ye^.==p w B eZ  Ye&Z. @eReZ :J  k RZ'.& A!AABBCC = $SAVE ;INSTRUCTION FOR CALL TO SAVE ROUTINE .IFL 1-ARG XXXXXX ;CREATE ASSY ERROR IF ARG NOT 0 OR 1 .ENDC TASKNO = 13.+ARG+ARG ;LOCN OF TASK NO IN A TASK HEADER .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ; DEFINITION OF FILE ID'S FOR DISC BUFFERED MESSAGES ; FIDN0 = 20. ;FILE FOR NORMAL MESSAGES, UNIT 0 FIDP0 = 21. ;FILE FOR PRIORITY MESSAGES, UNI QTAB ; QTAB HEADER =.-2 ; TASK HEADER ADDRESS (THREAD WORDS). QTAB .=.+TASMAX+TASMAX ; TABLE QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAY TASKS QTAB IFD =.-2-MXTASK-MXTASK ; TASK FILE DIRECTORY NUMBER QTAB .=.+MAXOVR+MAXOVR ) ;PUSH NEW YEAR * ; * JSR PC,SDATE ;CALL "SET DATE" * ; * TST (SP)+ ;POP ERROR WORD * ; * BNE ERROR ;CALL PARAMETERS IN ERROR * ; * ---------------- * ; * JSR PC,GDATE ;CALL "GET DATE" * ; * MOV (SP)+,CURYR ;POP CURRENT YEAR (-1900) * ; * MOV (S E&AAABB C"CK.L NNPP NA3B3&"N NPP"A&B.rC }f 3JK$C imR"J(K.K -` E K"".=L7t@P^I LP$I,Uf&F M MyT 0 FIDN1 = 22. ;FILE FOR NORMAL MESSAGES, UNIT 1 FIDP1 = 23. ;FILE FOR PRIORITY MESSAGES, UNIT 1 FIDN2 = 24. ;FILE FOR NORMAL MESSAGES, UNIT 2 FIDP2 = 25. ;FILE FOR PRIORITY MESSAGES, UNIT 2 FIDN3 = 26. ;FILE FOR NORMAL MESSAGES, UNIT 3 FIDP3 = 27. ;FILE FOR PRIORITY MESSAGES, UNIT 3 FIDN4 = 28. ;FILE FOR NORMAL MESSAGES, UNIT 4 FIDP4 = 29. ; HERE SINCE IT IS A FULL WORD TABLE QTAB ; QTAB .ENDC ; QTAB TSTAT =.-1 ; TASK STATUS TABLE QTAB .=.+TASMAX ; QTAB ; QTAB IOSTAT =.-1 ; TASK I/O STATUS TABLE P)+,CURDAY ;POP CURRENT DATE * ; * MOV (SP)+,CURMTH ;POP CURRENT MONTH * ; * ---------------- * .ENDC ; 3/12/73 ; * JSR PC,GTIME ;CALL "GET TIME" * ; * MOV (SP)+,CURHR ;POP CURRENT HOUR * ; * MOV (SP)+,CURMIN ;POP CURRENT MINUTE * ; * ;FILE FOR PRIORITY MESSAGES, UNIT 4 FIDN5 = 30. ;FILE FOR NORMAL MESSAGES, UNIT 5 FIDP5 = 31. ;FILE FOR PRIORITY MESSAGES, UNIT 5 FIDN6 = 32. ;FILE FOR NORMAL MESSAGES, UNIT 6 FIDP6 = 33. ;FILE FOR PRIORITY MESSAGES, UNIT 6 FIDN7 = 34. ;FILE FOR NORMAL MESSAGES, UNIT 7 FIDP7 = 35. ;FILE FOR PRIORITY MESSAGES, UNIT 7 ; ; ; OUTPUT BUFFER SIZE DEFINITION FOR MESSAGE BUFFERE QTAB .=.+TASMAX ; QTAB ; QTAB TPRTY =.-1 ; TASK PRIORITY TABLE QTAB .=.+TASMAX ; QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAY TASKS QTAB BSIZE =.-1-MXTASK ; MOV (SP)+,CURSEC ;POP CURRENT SECOND * ; * * ; * PROGRAMMER: 52 * ; * DATE: 12-DEC-71 * ; * VERSION:001.004 * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; 7:iT].2  iT]zy&zy.Xwpp7S7N zyzy.~ @w |w.pNiT]zy.7 77 wn* iT].w D V2P~0DM  w4 DV&0.( 6ww@D DISC SYSTEM ; OBUFSZ = 128. ;MINIMUM SIZE OUTPUT BUFFER(1 SECT/MSG) DNWRDS = 64. ;NO. OF WORDS IN DISK TRANSFERS .IFGE DBUFSZ-2 ;IS SECTOR COUNT 2? OBUFSZ = OBUFSZ+128. ;YES, ADD 64 WORDS DNWRDS = DNWRDS+64. .ENDC .IFGE DBUFSZ-3 ;IS SECTOR COUNT 3? OBUFSZ = OBUFSZ+128. ;YES, ADD 64 WORDS DNWRDS = DNWRDS+64. .ENDC .IFG DBUFSZ-3 ;IS SECTOR COUNT GT 3? NUMBER OF CORE SEGMENTS QTAB .=.+MAXOVR ; QTAB ; QTAB ; QTAB .=.+2 ; MAKE SURE WORD AVAIL. FOR ROUND UP. QTAB ; QTAB .ENDC .EVEN ;TAKE CARE OF ODD BYTES ******************************************************************** .TITLE SETGET .DEF STIME,SDATE,GTIME,GDATE .IF DF FUTURE ; 3/12/73 .REF MONTH,MDAY,YEAR,JDATE,SECOND,MINUTE,HOUR .REF TICTOC,DAYTAB,PUSHR,POPR,MXDAYS,JANARY,FEBARY .REF THDTAB,CURTHD .ENDC ; 3/12/73 .DEF STIME,GTIME ; XXXXXX ;YES, CREATE ASSY ERROR, DBUFSZ GT 3!! .ENDC OMSGSZ = OBUFSZ-16. ;OUTPUT MSG SIZE -- MAXIMUM NO OF CHAR ; ALLOWED IN OUTPUT ; MESSAGE (MSG BUFFER ; SYSTEM ONLY) .ENDC ; ; ; MISCELLANEOUS SYMBOLS ; CR = 15 ;CARRIAGE RETURN LF = 12 ;LINE .PAGE ;*********************************************************************** ; * ; Q U E U E * ; * ; PROGRAM IDENTIFICATION. QUEUE - QUEUE A SOFTWARE TASK; * ; CATALOG NUMBER * ; 3/12/73 .REF SECOND,MINUTE,HOUR,TICTOC ; 3/12/73 .REF MONTH 03-29-73 .PAGE STIME: ;SUBROUTINE TO SET NEW TIME MOV R0,-(SP) ;SAVE USER'S MOV 4(SP),R0 ;PULL NEW MINUTE OFF STACK MOV PS,4(SP) ;REPLACE WITH CURRENT STATUS FOR RTI USE CMP R0,#60. ;SEE IF MINUTE WITHIN RANG. w w    "  .- - w m w m.:Z:ZS:Z":Z&:Z& w   w ,:Z  :Z,KS@ }.w 3fU0E@*  > S@ W.DwU@NE w 7 |>S@ "7.jpkFEED RO = 177 ;RUBOUT ; ; ; ERROR CODES ; ERRQL = 21. ;LIST NOT QUEUEABLE, THREAD WORD .NE. 1 ERRLDN = 22. ;INVALID LOGICAL DEVICE NUMBER IN LIST ERRPDT = 23. ;INVALID PHYSICAL DEVICE TYPE IN LIST ERRET = 24. ;INVALID EXIT TYPE IN LIST ERRLEV = 25. ;INVALID PRIORITY LEVEL IN LIST ERRMSZ = 26. ;MESSAGE SIZE TOO LARGE ERROTO = 27. * ; PURPOSE. SUBROUTINE QUEUE IS RESPONSIBLE FOR PLACING A * ; TASK IN THE SPECIFIED PRIORITY THREAD. A TASK CANNOT BE * ; THREADED VIA QUEUE UNLESS IT IS INACTIVE AND THE THREAD WORD * ; IN THE PROGRAM HEADER IS EMPTY (NOMINAL VALUE OF 1). THE * ; PROGRAM REQUESTING THE QUEUEING CAN SELECT WHETHER QUEUE * ; RETURNS TO IT OR TO THE TASK DISPATCHER (DSPTCH). THE * ; CALLING PROGRAM MAY ALSO TRANSMIT A E BHIS STIM10 ;NO: EXIT IN ERROR CMP 6(SP),#24. ;SEE IF NEW HOUR WITHIN RANGE BLO STIM20 ;YES: PROCEED STIM10: ;ROUTINE EXIT POINT: FOR GOOD AND BAD MOV (SP)+,R0 ;RESTORE USER'S RTI ;RETURN AND RESTORE OLD CPU STATUS STIM20: ;HERE WHEN PARAMTERS ARE WITHIN RANGE .LOCK TOPPS ;LOCK OUT INTERFERENCE FROM CLOCK MO.8  8. .D .j ,  >"!!! HUB01 1 .3A ~ _.~ .NA TULSA   B  1. .3A??? HUB01 .4A&&& ;OUTPUT/ECHO TIMEOUT; ALTERNATE DEVICE ;SELECTED IF AVAILABLE ERRITO = 28. ;INPUT/OPERATOR RESPONSE TIMEOUT; ;ALTERNATE OPERATOR SHOULD BE SELECTED, ;REQUEST IS DEQUEUED ; ; ; SYSGEN TTY INTERRUPT VECTOR ADDRESSES, CONTROL STATUS REGISTER ; ADDRESSES AND DATA BUFFER ADDRESSES ; TT0IIV = 60 ;PHYSICAL UNIT 0 INTPUT INTERRUPT VECTOR TT0ICS = 17ONE WORD ARGUMENT TO * ; THE QUEUED PROGRAM. * ; * ; PROGRAM USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; QUEUE IS: * ; * ; MOV ITASK,-(SP) PUSH * ; MOV IPRTY,-(SP) VB R0,MINUTE ;UPDATE CURRENT MINUTE MOVB 6(SP),HOUR ;UPDATE CURRENT HOUR MOV #1,TICTOC ;RESET [TICS] AND [SECOND] COUNTERS CLR 6(SP) ;CLEAR ERROR CODE BR STIM10 ;GO EXIT .PAGE .IF DF FUTURE ; 3/12/73 SDATE: ;SUBROUTINE TO UPDATE CURRENT MONTH,DAY, AND YEAR JSR R5,PUSHR ;SAVE ALL REGISTERS MOV SP,R0 2:A >&>&&& HUB01 TULSA \\l$lzPz(I Z |$@    D .D TERM CUST CUSTOMER ST INVEN FR _.j TERMS TYPE RG R EXTRA NO. 7560 ;PHYSICAL UNIT 0 INPUT CNTRL STATUS REG TT0IDB = 177562 ;PHYSICAL UNIT 0 INPUT DATA BUFFER REG TT0OIV = 64 ;PHYSICAL UNIT 0 OUTPUT INTERRUPT VECTOR TT0OCS = 177564 ;PHYSICAL UNIT 0 OUTPUT CNTRL STATUS REG TT0ODB = 177566 ;PHYSICAL UNIT 0 OUTPUT DATA BUFFER ; TT1IIV = 340 ;UNIT 1 ADDRESSES TT1ICS = 160200 TT1IDB = 160202 TT1OIV = 344 TT1OCS = 160204 TT1ODB = 1ARGUMENTS ; MOV IARG,-(SP) ONTO ; MOV IRTRN,-(SP) STACK ; EMT QUEUE THEN CALL QUEUE * ; TST (SP)+ TEST ERROR CODE * ; BNE XXX BRANCH IF ERROR WAS ENCOUTNERED * ; * ; THE FORTRAN EQUIVALENT CALL IS: * ; ;UTILIZE AS SECONDARY STACK POINTER ADD #16,R0 ;POINT TO NEW "YEAR" ON STACK MOV (R0)+,R1 ;REMOVE YEAR MOV (R0)+,R2 ;AND NEW DAY MOV (R0),R3 ;GET MONTH FROM STACK MOV PS,-(R0) ;LOAD CURRENT PSW ON STACK FOR RTI USE MOV -4(R0),-(R0) ;AND MOVE RTN ADDR INTO PROPER PLACE,TOO TST R1 ; CHECK YEAR VALUE 1/30/73 BLE SDAT30 Dw4w.  www d'}?.0 ww >U0H R  S@ >&R.V wbw^wZwVw 9T}.| w \%wL1w \w S \ S@"$\. d1w sw 0,S@dS@Sm.  wwTw 60206 ; TT2IIV = 350 ;UNIT 2 ADDRESSES TT2ICS = 160210 TT2IDB = 160212 TT2OIV = 354 TT2OCS = 160214 TT2ODB = 160216 ; TT3IIV = 360 ;UNIT 3 ADDRESSES TT3ICS = 160220 TT3IDB = 160222 TT3OIV = 364 TT3OCS = 160224 TT3ODB = 160226 ; TT4IIV = 370 ;UNIT 4 ADDRESSES TT4ICS = 160230 TT4IDB = 160232 TT4OIV = 374 TT4OCS = 160234 TT4ODB * ; CALL QUEUE( ITASK, IPRTY, IARG, IRTRN, IERR) *QUEU ; * ; ITASK IS THE NUMBER OF THE TASK TO BE QUEUED * ; IPRTYIS THE PRIORITY LEVEL AT WHICH THE TASK EXECUTES * ; = 0, QUEUE WILL GET THE ASSIGNED PRIORITY FROM THE * ; TASK TABLE * ; > 0, ; ERROR 1/30/73 TST R2 ; CHECK DAY VALUE 1/30/73 BLE SDAT30 ; ERROR 1/30/73 TST R3 ; CHECK MONTH VALUE 1/30/73 BLE SDAT30 ; ERROR 1/30/73 CMP R3,#12. ;SEE IF MONTH IS WITHIN RANGE BHI SDAT30 ;ERROR: EXIT MOVB Hw \w tw *  S@\S@t.( % gb SS@.NR wjww ww R 9T}y.t  Vs'Z.w*w&www P "w kS@ P "(S@.\w `  w \ S@`.ww = 160236 ; TT5IIV = 400 ;UNIT 5 ADDRESSES TT5ICS = 160240 TT5IDB = 160242 TT5OIV = 404 TT5OCS = 160244 TT5ODB = 160246 ; TT6IIV = 410 ;UNIT 6 ADDRESSES TT6ICS = 160250 TT6IDB = 160252 TT6OIV = 414 TT6OCS = 160254 TT6ODB = 160256 ; TT7IIV = 420 ;UNIT 7 ADDRESSES TT7ICS = 160260 TT7IDB = 160262 TT7OIV = 424 TT7OCS = 16 PRIORITY LEVEL SPECIFIED BY CALLING PROGRAM * ; < 0, ILLEGAL * ; IRTRN IS ZERO IF THE CALLING PROGRAM WANTS CONTROL RETURNED * ; TO IT; ONE IF THE DISPATCHER SHOULD EXECUTE THE * ; HIGHEST PRIORITY TASK. * ; IARG IS A WORD THAT WILL BE TRANSMITTED TO THE QUEUED TASK * ; IERR IS AN ERROR INDICATOR * ; #28.,FEBARY ;RESET FEBRUARY IN PREP FOR NEW YEAR MOV #365.,MXDAYS ;RESET MAX DAYS COUNT BIT #3,R1 ;IS NEW YEAR A LEAP? BNE SDAT40 ;NO: NO EXTRA DAY INCB FEBARY ;YES: ADD FEB 29 INC MXDAYS ;EXTRA DAY IN LEAP YEAR SDAT40: CMPB R2,DAYTAB(R3) ;CHECK DATE FOR PROPER RANGE THIS MONTH BLO SDAT50 ;O.K.: WITHIN RANGE MOVB DAYTAB(R3),R2 ;ERROR: USE LAST DAY RAT.f,@@ @v. @ @s@s@s'Z@.w'p@S@@S@9T}@.&,hT&-hF&@.h8&0h&0h\.&1hR+hR,h R-h R@.h %.R0h R0h< R0h R1h>>2!I}0264 TT7ODB = 160266 ; ; ; SYMBOLIC TABLE AND BUFFER OFFSETS ; ; ; OFFSETS IN I/O REQUEST LIST ; DEVICE = 2 ;LOGICAL DEVICE NO. TYPE = 3 ;EXIT TYPE EXIT = 4 ;I/O COMPLETE ROUTINE (EXIT 3 ONLY) ERRTSK = 6 ;TASK NO. OF ERROR PROGRAM LEVEL = 7 ;PRIORITY LEVEL OF I/O REQUEST ERROR = 10 ;ERROR CODE WORD SYSTEM = 12 ;BYTE 0 CONTA -1 = TASK QUEUED BUT HAD BEEN ABORTED *QUEU ; 0 = QUEUE SUCCESSFUL * ; 1 = ILLEGAL TASK THREAD WORD (NOT 1) *QUEU ; 2 = TASK STATUS NOT 0 OR 7(QUIESCENT OR ABORTED *QUEU ; 3 = TASK WAS ABORTED DURING LAST EXECUTION PERIOD, AND * ; I/O IS STILL IN PROGRESS (TASK NOT QUEUED) * ; 4 = TASK DISABLED HER THAN ERR OUT SDAT50: MOV R3,-(SP) ;SAVE MONTH ON STACK FOR USE BELOW MOV #JANARY,R0 ;PREPARE TO CALC JULIAN DAY CLR R4 ;WILL ACCUM TOTAL DAYS SDAT10: DEC R3 ;COUNT DOWN MONTHS BLE SDAT20 ;DONE: EXIT LOOP MOVB (R0)+,R5 ;CAN'T ADD BYTES ADD R5,R4 ;ACCUM DAYS FROM DAY TABLE BR SDAT10 ;LOOP BACK FOR MORE .PAGE SDAT20: ADD R2,R4  9T}4,wVw < w V j .w 8,S@< S@V j $S@&r.V .ZUh wwaV h9T}., ¬eF~¥ <.Reœl V (y,x   <.< PRODUCT TOTALS FO_.bR TODAY INS TASK NO. ACTIVE WHEN ;CALLED. BYTE 1 CONTAINS TTY PHYSICAL ;UNIT NO. DATA = 14 ;ADDRESS OF USER BUFFER ; .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ; OFFSETS IN DISC WRITE BUFFER AND OUTPUT BUFFERS ; SCFLAG = 2 ;SECTOR FLAG INOUT = 3 ;READ/WRITE FLAG RLSECT = 12 ;RELATIVE SECTOR ADDRESS NWORD = 14 * ; 5 = ILLEGAL TASK NUMBER * ; 6 = NOT QUEUED SINCE SPECIFIED PRIORITY LEVEL WILL NOT *QUEU ; SUPPORT OVERLAY TASKS *QUEU ; 7 = NOT QUEUED SINCE RPOM'S QPART TABLE IS FULL *QUEU ; * ; IF THE PRIORITY LEVEL SPECIFIED IS ILLEGAL, THEN THE PROGRAM * ; IS QUEUED AT THE LOWEST PRIORITY LEV ;ADD TODAY'S DATE MOV #JDATE,R3 ;WILL USE AS POINTER TO DATE BYTES .LOCK TOPPS ;LOCK OUT INTERFERENCE FROM CLOCK MOV R4,(R3)+ ;LOAD JULIAN DATE MOV (SP)+,(R3) ;LOAD NEW MONTH MOV #THDTAB,CURTHD ;INIT CURRENT THREAD POINTER BITB #1,(R3)+ ;IS MONTH ODD OR EVEN? BNE SDAT25 ;ODD: LEAVE AT THREAD #1 ADD #2,CURTHD ;EVEN: ADVANCE TO THREAD #2 SDAT ;NO. OF WORDS TO TRANSFER TTRLST = 16 ;1ST WORD OF TTY REQUEST LIST .ENDC ; ; ; OFFSETS IN USER BUFFERS ; CHCNT = 2 ;CHAR COUNT MSGDAT = 4 ;BEGINNING OF DATA ; ; ; OFFSETS IN TIMER MODULES ; TCNTR = 4 ;TIMER COUNTER ; ; .IFDF CHKOUT ;****** DELETE ASECT FOR CHECKOUT ****** .ASECT ; ; ; INTERRUPT VECTORS ; .IFGE NTTYS-1 EL. * ; * ; REGISTERS R1 - R4 ARE USED BY QUEUE AND ARE NOT SAVED UNLESS * ; THE RGSAVE EQUATE PARAMETER IS SET TO 1. * ; ; NOTE: IARG AND/OR IPRTY MUST BE OMITTED IF THE CORRESPONDING * ; FUNCTION IS OMITTED AT SYSGEN TIME. REFER TO DPRTY AND * ; ARG EQUATE PARAMETERS BELOW. * ; 25: MOVB R2,(R3)+ ;LOAD DAY OF MONTH MOVB R1,(R3) ;LOAD CURRENT YEAR CLR 22(SP) ;CLEAR ERROR WORD FOR GOOD RETURN SDAT30: JSR R5,POPR ;RESTORE ALL REGISTERS TST (SP)+ ;POP THIRD ARGUMENT SINCE RTI NEEDS TWO RTI ;STACK SET TO RETURN AND RESTORE .PAGE .IFTF 03-29-73 ; NOTE: SUBROUTINES "GTIME" AND "GD.x|<w Հ b ] YW VQW ~NID GW  A7b=W  70 0 ?L7H :0沊  */@d .WORD TT4OCS,TT5OCS .WORD TT6OCS,TT7OCS .=TTOCSR+NTTYS+NTTYS ;DELETE UNUSED WORDS ; ; ; TABLE OF DATA BUFFER REGISTER ADDRESSES ORDERED BY UNIT NO. ; TTIDBR: .WORD TT0IDB,TT1IDB ;INPUT DBR'S .WORD TT2IDB,TT3IDB .WORD TT4IDB,TT5IDB .WORD TT6IDB,TT7IDB .=TTIDBR+NTTYS+NTTYS ; TTODBR: .WORD TT0ODB,TT1ODB ;OUTPUT DBR'S .WORD TT2ODB,TT3ODB .WORD TT4ODB,TT5ODB .WORD TT6ODB,TT7ODB ; NUMBER OF REG SAVED IF RGSAVE=0 QUEU .IFNZ RGSAVE .IFZ OVRLAY ; SAVE STACK SPACE QUEU MOV R1,-(SP) ;SAVE MOV R2,-(SP) ; REGISTERS MOV R3,-(SP) ; FOR THE MOV R4,-(SP) ; CALLER SAVE =8. ; SIZE OF STACK (REG). QUEU .ENDC QUEU .IFNZ 03-29-73 MOVB (R1)+,(R0) ; 'MINUTE' [OR] 'DAY' 03-29-73 CLR -(R0) 03-29-73 MOV (R1),(R0) ; 'HOUR' [OR] 'YEAR' 03-29-73 MOV (SP)+,PS ;RESTORE QUICKLY 03-29-73 MOV (SP)+,R1 03-29-73 MOV (SP)+,R0 ~d~, 7x  0bw :Ԏ f  w & Nw;~O   80b7jxf  & &  6, Ԁz~T ~,  f w7x 0w  d'b 7x~   & & R w ҇    χ   f.=TTODBR+NTTYS+NTTYS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ; TABLE OF FILE ID'S FOR MESSAGE BUFFERING ; FILEID: .WORD FIDN0,FIDP0 .WORD FIDN1,FIDP1 .WORD FIDN2,FIDP2 .WORD FIDN3,FIDP3 .WORD FIDN4,FIDP4 .WORD FIDN5,FIDP5 .WORD FIDN6,FIDP6 .WORD FIDN7,FIDP7 . = FILEID+NTTYS+NTTYS+NTTYS+NTTYS ;DELETE UNUSED WORDS ; ; ; TABLE OF OUTPUT BUFFER ADDRESSES ORDERED BY OVRLAY ; QUEU JSR R5,PUSHR ; QUEU SAVE =12. ; SIZE OF SATCK QUEU .ENDC QUEU .ENDC MOVB @#PS,R3 ; SAVE PS FOR LATER QUEU CLR -(SP) ;/ = NO ERRORS; 3 = Q'ED BUT ABORTED CLR R4 ; CLEAR REG FOR 03-29-73 RTS PC 03-29-73 .ENDC 03-29-73 .PAGE ; ******** .IF DF FUTURE ; 3/12/73 ; CITGO'S JULIAN DATE EMT IS HERE - RETURNS 1 WORD ON STACK ; ******** .REF JD`Ud F~D bt`   Ud  b   f`EUU7~d  bt 0`b   &Ud   b  Ud c~4 bt   Ud Ud  b    U@  UG~d      b  F   U UNIT NO. ; TTOBUF: .WORD TTOBF0,TTOBF1 .WORD TTOBF2,TTOBF3 .WORD TTOBF4,TTOBF5 .WORD TTOBF6,TTOBF7 . = TTOBUF+NTTYS+NTTYS ; ; ; TABLE OF DISC READ I/O LIST ADDRESSES ORDERED BY UNIT NO. ; DRLIST: .WORD DRLST0,DRLST1 .WORD DRLST2,DRLST3 .WORD DRLST4,DRLST5 .WORD DRLST6,DRLST7 . = DRLIST+NTTYS+NTTYS ; ; ; DISC WRITE I/O LISTS ; DWLIST: .WORD 1 ;THREAD WORD .BYTE BYTE LOAD QUEU BISB ITASK(SP),R4 ; GET TASK NUMBER OFF STACK QUEU CLR IERR(SP) ; CLEAR ERROR STATUS FOR RETURN QUEU TST R4 ; RESET STATUS BITS QUEU BEQ QUEE50 ; BRANCH IF TASK #=0. ILLEGAL QUEU CMPB R4,TASKS ; IS TASK#> LARGEST LEGAL TASK NUMBER QUEU BHI QUEE50 ; BRANCH IF YES. ILLEGAL. QUEU ; QUE000 ATE ; ******** .DEF JULDAT ; ******** JULDAT = . ; ******** MOV (SP),-(SP) ; MAKE ROOM FOR RETURNED ARG. ******** MOV JDATE,2(SP) ; PUT JULIAN DATE ON STACK FOR CALLER ******** RTS PC ; DONE - BACK TO CALLER ******** .ENDC ;  U d     ~$@dt dU0 ,b ptrvnzĆ505L~ĨĪĬw  <  r)*;w ώ&& && , w ~:& w籊5Ѐķ: w  h ĺ5ij1:EE DjĶ~h:D |1w*"4DISCUN ;LOGICAL DEVICE NO FOR DISC .BYTE 3 ;EXIT TYPE -- 3 .WORD TTYDW1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1 ;PRIORITY OF REQUEST .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD DSCBUF ;DATA BUFFER ADDRESS ; DWLST2: .WORD 1 ;THREAD WORD .BYTE DISCUN = . .LOCK TOPPS ; TSTB TSTAT(R4) ;NOW, MAKE SURE THE TASK IS INACTIVE BEQ QUEA00 ;BRANCH IF IT IS. CMPB TSTAT(R4),#7 ; QUIESCENT. WAS IT ABORTED. IF SO, QUEU BNE QUEE20 ; QUEU TSTB IOSTAT(R4) ;WE'LL GIVE THE CALLER A REPRIEVE IF BNE QUEE30 ; IF THE TASK'S I/O ISN'T INPROGRESS QUEU MOV #-1,IERR(SP) ; HO 3/12/73 .END BPdl~njǘDZWH@  -m=Z  ZC~ wfj x =T=V && &   Pw h w j & @~|  v1  %T95 1%:95 @w1ķ"9fj ~1 Z Z1UZı^Z}Z Z 1wj~l Z1 ;LOGICAL DEVICE NO. FOR DISC .BYTE 3 ;EXIT TYPE -- 3 .WORD TTYDW1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1 ;PRIORITY OF REQUEST .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD DSCBF2 ;DATA BUFFER ADDRESS ; ; ; DISC WRITE BUFFERS ; DSCBUF: .WORD 0 ;FILE ID RRAY - HE CAN STILL QUEUE IT. QUEU ; ; ; NOW, LET'S SEE IF WE CAN QUEUE THE TASK ; ; QUEA00=. ASL R4 ; MULT. R4 BY 2 TO MAKE INTO WRD INDEX MOV HEADER(R4),R2 ;FIRST, GET PROGRAM HEADER ADDRESS ASR R4 ; DIV. R4 BY 2 TO RESTORE INTO BYTE INDX CMP R2,#1 ; DOES TASK EXIST? QUEU BEQ QUEE50 ; NO - (HEADER)=1 IFF NONEXISTANT QUEU QUEA10 =. ,* !j T 52hU,P5 /5 fנw(נw&,v,ᆲ 5E!>,   :2נ5u,— (E ]E@U E ,E    w2-,2נw U E5T,45E E@ 8 ,Zw$U%U5fW,UE  Z Ġ1@wtw&ZwH8EE Dh@ fj 2 D ~X+ŀ| n *-el.BE,I  5@ =ZCh5@@w ĕ Ĕ~\^Z2    ށ ĕ\Ē1IJ  1ĕ\fj TĽ%~=Z fh ĕ=Z : 46w 4 W<35;Ap +' &0 .BYTE 0 ;SECTOR FLAG .BYTE 1 ;READ/WRITE FLAG .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST & DATA ; DSCBF2: .WORD 0 ;FILE ID .BYTE ; QUEU MOVB #1,TSTAT(R4) ; SET STATUS TO QUEUING IN PROGRESS. QUEU MOVB R3,@#PS ; ALLOW INTERRUPTS QUEU .IFNZ DPRTY ;DON'T ASSEMBLE THIS PART IF DPRTY=0 * MOVB IPRTY(SP),R1 ; GET DYNAMIC PRIORITY (ALWAYS POSITIVE)QUEU BGT QUEB10 ;USE THE PRIORITY IF .GT. 0 * BEQ QUEB00 ;BRANCH IF WE HAVE TO GET PRIORITY * wU U@ w^,5 E E@  5,̘ "  wVנU E^,נU 5lfE =, 5.] &l,>_5 E!>'ע,d0ע9  wEAF,5   l UP ,= @ U $,֙`U@   ~,~L  0 C `0  65@A&  & > z<g~ɮ4ķ06& & b4e4ķ6f `D` CDl11@ 4 ~<  =Zfj@V J@ 3 11DXA5@ =Tfh Zf~lÝ AZ7w@@hf7 d 5@q 5 0 ;SECTOR FLAG .BYTE 1 ;READ/WRITE FLAG .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST & DATA ; ; ; DISC READ I/O LISTS ORDERED BY UNIT NO. ; DRLST0: .WO BR QUEB20 ;FROM TASK TABLE. OTHERWISE, USE * .ENDC ;LOWEST PRIORITY * ; QUEB00 = . MOVB TPRTY(R4),R1 ;GET PRIORITY FROM TASK TABLE BLE QUEB20 ;BRANCH IF ILLEGAL (.LE. 0) ; QUEB10 = . CMPB R1,#NPRIOR ; IS PRIORITY GT HIGEST LEGAL LEVEL QUEU BLE QUEB30 ;BRANCH IF NO (PRIORITY IS VALID) ; QUEB20 = . MOVB  EAU@E@E@C," h    0 5,H5eE@E@,n  U  5dE@E@,! ! ! ,4eE rrrX, " j  , ,jWt Wtee*peb, & & & b x-N[-+&"++ +/+~j5f5  ~,U=V=Tāp w B e @ee :J  z4 !ĕĖė ~E ĢĵĤķF4 N33 *4}Zfj , 3ć -Z\ ه~E =T%~̱7n@^Zć33f&@ Ą~RD 1 ;THREAD WORD .BYTE DISCUN ;LOGICAL DEVICE NO. FOR DISC .BYTE 3 ;EXIT TYPE -- 3 .WORD TTYDR1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1-1 ;PRIORITY OF REQUEST (1 GT WRITE REQ'S) .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD TTOBF0 ;DATA BUFFER ADDRESS DRL#NPRIOR,R1 ; ILLEGAL LEVEL, USE LOWEST LEVEL QUEU ; QUEB30 = . .IFNZ OVRLAY CMPB R4,#OVTMIN ; OVERLAY OR CORE TASK? QUEU BHIS QUEH00 ; GO DO OVERLAY STUFF QUEU .ENDC MOVB R1,HPRIOR(R2) ;SAVE PRIORITY IN PROGRAM HEADER ; ; ; THE TIME HAS COME TO PLACE THE TASK IN THE SPECIFIED THREAD. ; THE INDIVIDUAL PRIORITY THREADS ARE MAINTAINED IN 'FIRST' ; AND 'LAS/+,Ҥ++ +> E?[6  +M,e@+Z5?-@-,U>++ +Z@,DD0X) ERROR XXXXX S3!jXXXXX SXXXXX SXXXXX SXXXXX ,bipw~w & ,w FZ@Z w| z,ҥ*Zw  7 \+wVDPe,Zf& C >  J ,J  f ^YY#~ ~0~~tST1: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF1 DRLST2: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF2 DRLST3: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF3 DRLST4: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF4 DRLST5: .T'. ; ; .LOCK TOPPS ; DEC (R2) ;INSERT TASK HEADER ADDRESS IN QUEUE BNE QUEE99 ; ERROR - TASK NO LONGER QUEUABLE 3/12/73 ASL R1 ; MAKE R1 INTO WORD INDEX. DON'T NEEDLAT MOV R2,@LAST(R1) MOV R2,LAST(R1) ; QUEC10 = . MOVB #2,TSTAT(R4) ; SET STATUS TO QUEUED CLRB IOSTAT(R4) ;CLEAR I/O STATUS CLR TSTACK(R2) ; CLEAR TA,DY`0 E j` lz($,w ×&  6  d7aߕN,(S SZV  J,NSߐW,t?r ߕ 2 zzS4,2  ߐw G~~dTULSA 2u~222@2@dd2~TWORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF5 DRLST6: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF6 DRLST7: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF7 DRLSSZ = DRLST1-DRLST0 ;DELETE UNUSED IO LISTS . = DRLSSZ*NTTYS+DRLST0 ; ; ; TTY OUTPUT BUFFERS ORDERED BY UNISK STACK POINT (USED BY DSPT QUEU ; AS A FLAG). QUEU ; CLRB CPUST(R2) QUEU ; CLR CTIMER(R2) QUEU ; MAY NEED CPUST AND CTIMER LATER. QUEU .IFNZ ARG ;DON'T ASSEMBLE IF ARGUMENT ISN'T USED* MOV IARG(SP),TARG(R2) ;MOVE ARGUMENT TO PROGRAM HEADER * .ENDC &  e,e Dw ,樎 6 &f 8 , ߕ D[7 >,26fv$  6 ,X6 Õߕ& ",~7 f  2 7  S,Sߐ& 0S ,ʩ<0z0ߐq,& wߕh 1,S7 T7 ~Ҿ~~DT~w< 2222KT NO. ; TTOBF0: .WORD 0 ;FILE ID .BYTE 0 ;SECTOR FLAG .BYTE 0 ;READ/WRITE FLAG .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST AND DATA TTOB ; ; ; ALL IS NOW DONE - RESTORE THE REGISTERS, THEN SEE WHO ; GETS CPU CONTROL (TEST IRTRN) ; ; QUEC15 =. ; HERE TO GO BACK QUEU TST (SP)+ ; POP OF TOP OF STACT (TEMP ERROR STAT) QUEU QUEC16 =. ; HERE TO GO HOME FROM ERROR CONDITION QUEU MOVB R3,@#PS ; ALLOW INTERRUPTS QUEU .IFG RGSAVE ; QUEU, 7 v0 HW  S,<f wSw t p7Jm*bߕS y|88888ުx,ު888ު& ߕ J"2 ,w A7 7 7 effff,ҪffffffSSO,&& dߕS2 P%,W"1f `w m,DcDՀ6w f ,jj 70c  ߕS~4}~~$~F1: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF2: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF3: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF4: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF5: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF6: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF7: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBSZ = TTOBF1-TTOBF0 ;DELETE UNUSED BUFFERS . = TTOBSZ*N .IFZ OVRLAY ; QUEU MOV (SP)+,R4 ; RESTORE QUEU MOV (SP)+,R3 ; THE QUEU MOV (SP)+,R2 ; CALLER'S QUEU MOV (SP)+,R1 ; REGISTERS QUEU .ENDC QUEU .IFNZ OVRLAY ; ,  S / -2LSB , AC ;ߕW"5 ,ܫr z`zL2z E,1 S&& F ߕ,(0Svw  S3,Nw t×&  =7D:ߕS,t5S ߐ&  # , zzSߐw ,  Fw 6 ,7 xn k~~!~~|TTYS+TTOBF0 .IFG NTTYS-8. ;IF NTTYS .GT. 8? XXXXXX ;CREATE ASSY ERROR, NTTYS GT 8!! .ENDC .ENDC ; ; ; ERROR MODULE USED TO TYPE OUT ERROR CODE ; ERRMOD: .WORD 1 ; THREAD WORD .WORD 0 ; ERROR NO. .WORD 0,0,0,0 ; ARG 1-4 ; ; ; TABLE OF INPUT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; ITIMER: .WORD ITIME0,ITIME1 .WORD ITIME2,ITIME3 .WORD IT QUEU JSR R5,POPR ; RESTORE ALL 6 QUEU .ENDC QUEU .ENDC QUEU TST MFLAG ; IS MFLAG SET? IF SO MUST RETURN TO BNE QUEC20 ; TO THE CALLER. TST IRTRN-SAVE-2(SP); SEE WHAT KIND OF RETURN IS REQUESTED? QUEU BNE QUED00 ;BRANCn  , ` !!ߕ 5,2W Lw.rzez E,XWS7 wS t,~ @E @`eBF,& fB 2F 6 v sʭy<7 i7 i7 i7 Bpi 0 ,<z0`z,X0?,<S0 7jjP @ <6,ڭ  0~~l?~~\IME4,ITIME5 .WORD ITIME6,ITIME7 . = ITIMER+NTTYS+NTTYS ; ; ; TABLE OF OUTPUT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; OTIMER: .WORD OTIME0,OTIME1 .WORD OTIME2,OTIME3 .WORD OTIME4,OTIME5 .WORD OTIME6,OTIME7 . = OTIMER+NTTYS+NTTYS ; ; ; TABLE OF WAIT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; WTIMER: .WORD WTIME0,WTIME1 .WORD WTIME2,WTIME3 .WORD WTIME4,WTIME5 .WORD WTIME6,WTH IF WE ARE SUPPOSED TO CALL DSPTC ; QUEU QUEC20 =. ; HERE TO RETURN TO THE CALLER QUEU ; QUEU MOV (SP),NARG-SAVE-4(SP) ; RESET PC FOR RTS P QUEU ADD #NARG-SAVE-4,SP ; MOVE SP ITSELF QUEU RTS PC ;OTHERWISE, RETURN TO CALLER ; QUED00 =. 7 7d7,lvEpjd ^ PT,&B "b"n"& $ҝ ,L.( 8wZZr, ,Ԯvߋtߋtvߋt,ή THIS IS COLOSSUS. ROS IS DEA$D. YOU MUST R E B O O T !T,PP&-&r e?A,8 6  eN~~L]~~<IME7 . =WTIMER+NTTYS+NTTYS ; ; ; INPUT TIMER MODULES (OPERATOR RESPONSE TIMER) ; ITIME0: .WORD 1 ;THREAD WORD .BYTE 0 ;TASK NO. (N/A) .BYTE SECR!TJOPTN!TFOPTN ;OPTION FLAGS (R,J,F) .BYTE 0 ;TIMER COUNTER .BYTE 0 ;RESET COUNT .WORD ITIMFB ;FLAG BYTE ADDRESS .WORD 0 ;FLAG MASK(UNIT NO.) .WORD TTYIT ; HERE TO CALL THE DISPATCHER QUEU ; QUEU MOV @#PS,IERR-SAVE-4(SP) ; FIX STACK SO THAT ONLY THE QUEU MOV (SP),IERR-SAVE-6(SP) ; STATUS IS LEFT. FASTEST TO QUEU ADD #IERR-SAVE-6,SP ; USE 'QSAVEI' SO FIX STACK FOR QUEU MOV #1,-(SP) ; THAT CALL. SUSPENSION IS QUEU JSR PC,QSAVEI ; INVOLUNTARY. STAC,^[SG,& lPdPw *%,%E Cw  et],ЯBA  J6 w 0n,ű "$:2,EW  91 7O,B ű ft`O7vBAB,hWCEqJ6,7jOœ& ‹ & 5@u,& B Œ Œl~~,{~O ;TIMEOUT ROUTINE ADDRESS ITIME1: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,1,TTYITO ITIME2: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,2,TTYITO ITIME3: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,3,TTYITO ITIME4: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,4,TTYITO ITIME5: .WORD 1 .B K LOOKS LIKEQUEU ; QUEU ; PS QUEU ; PC (FOR RETURN OF CONTROL) QUEU ; ARG (=1) QUEU ; PC (OF THIS CALL) QUEU ; QUEU JMP DSPTCH $Œ&,ڰ&f A t`BA,WJ t,&N   wwJ+,t,g4ڱl,ܱ7 jb  V  Pj, J& 7&fЕ<},(<9<2- ",NPP ~~~ ~YTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,5,TTYITO ITIME6: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,6,TTYITO ITIME7: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,7,TTYITO ITIMSZ = ITIME1-ITIME0 ;DELETE UNUSED MODULES . = ITIMSZ*NTTYS+ITIME0 .IFG NTTYS-8. ;IF NTTYS .GT. 8? XXXXXX ;CREATE ASSY ERROR, NTTYS GT 8  ;THEN LET DSPTCH DO ITS THING ; ; ; THE FOLLOWING ARE ERROR PROCESSING FUNCTIONS; SET IERR ; ACCORDING TO THE ERROR, THEN RETURN TO CALLER. ; ; QUEE99: INC (R2) ; RESTORE THREAD WORD 3/12/73 BR QUEE10 ; 3/12/73 QUEE70: INC (SP) ; QPART FULL QUEU QUEE60: INC (SP) ; OVERLAY FOR NON-OVERLAY PRIORITY LEVELQUEU QUEE50: INC P)mȵ ,t @p ɕRe,%!G7,0 = OUTPUT HAS PRIORITY . = TTYPRT+NTTYS TTO1ST+h W G $.$.J#p2 X.w 2222 Q .   ; PLQI * : ERMBNUE GULOTACA ; PLQI * : ONSIVIRE ; PLQI * 1 97 1OV N10 : TEDA ; PLQI $ 53: ERMMRAOGPR ; PLQI * ; PLQI * L IP,QPC SR J E:AGUS ; - QUEU .PAGE ;*********************************************************************** ; * ; Q S A V E & Q S A V E I * ; * ; PROGRAM IDENTIFICATION: QSAVE & QSAVEI * ; QSAVE - SAVE A TASKS ENVIROMENT * ; .: .BYTE 0,0,0,0,0,0,0,0 ;FIRST OUTPUT REQUEST FLAG ; 0 = FIRST REQUEST ; 1 = SUBSEQUENT REQUEST . = TTO1ST+NTTYS TTI1ST: .BYTE 0,0,0,0,0,0,0,0 ;FIRST INPUT REQUEST FLAG ; 0 = FIRST REQUEST ; 1 = SUBSEQUEST REQUEST . = TTI1ST+NTTYS TTORPT: .BYTE 0,0,0,0,0,0,0,0 ;REPEAT COUNT FOR OUTPUT TRYS . = TTORPT+NTTYS TTCURS: .BY/ \ \ G P     \ \ F O     \ \ E N       \  \   D  M PLQI * ; PLQI * . PL IBYD LEAL C. ESINOU RNGUIUE Q ; PLQI * HE TINS LEAB TND AESBLIAAR VLL AOFN IOATIZALTINI IE:OSRPPU ; PLQI * ; PLQIE*EUQUR FOE INUTRON IOATIZALTINI I -PLQI: ONTICAFITIENIDM RAOGPR ; PLQI * ; PLQI * L P 1QSAVEI - SAVE A TASKS ENVIROMENT AFTER * ; AN INTERUPT * ; QSAVES - 'SAVE' ENTRY POINT-AVOIDS *QSVE ; ACTIVE CHECK AND CLEAR WHICH *QSVE ; IS DONE BY 'SAVE'. THIS *QSVE ; PERMITS CALLS AT LEVEL 7. *QSVE ; * ; 2TE 0,0,0,0,0,0,0,0 ;CURSOR FOR CURRENT PRINT POSN OF DEVICE . = TTCURS+NTTYS FRSTRO: .BYTE 0,0,0,0,0,0,0,0 ;FIRST RUBOUT SWITCH ; SET TO 1 WHEN 1ST RO IS INPUT ; RESET TO 0 WHEN 1ST NON-RO CHAR ; IS INPUT . = FRSTRO+NTTYS SLSHCH: .BYTE 0,0,0,0,0,0,0,0 ;CHAR TO BE ECHOED AFTER "\" . = SLSHCH+NTTYS MAXCH: .BYTE 0,0,0,0,0,0,0,0 ;SET TO 1 WHEN MAX CHARS EX3         \  \   C  L         \  \   B  K         \  \   A  J         I Q ; PLQI * ; PLQI**********************************************************************;* E AG.P E NUTION C ATHWIY WA AET GITT LET N'DO; RRPEDS BR ; LTHA: RRPEDS ; G.INTHD BAY ER V A -ORRR EOR FREHE; ; PC& S PTHBOS ET STI R. SKTAO TRNTURE; I RT ; R5+,P)(S V MO ; R4+,P)(S V MO 5 * ; PURPOSE: THIS ROUTINE IS USED TO SAVE A TASKS ENVIRONMENT * ; WHENEVER IT IS SUSPENDED. IF THE SUSPENSION IS * ; INVOLUNTARY, THE ROUTINE UNSPND MAY BE CALLED TO * ; REQUEUE THE TASK. THE ARGUMENT ARG WHICH IS PASSED * ; ON THE TASK STACK WILL DETERMINE THIS FUNCTION. IF * ; AN OVERLAY TASK IS VOLUNTARILY SUSPENDED, THE * 6CEEDED ; ON INPUT . = MAXCH+NTTYS CHTYPE: .BYTE 0,0,0,0,0,0,0,0 ;CHARACTER TYPE: USED IN TTY PRINTER ; INTERRUPT ROUTINE TO IDENTIFY ; TYPE OF CHAR LAST OUTPUT ; ; 0 = CHAR FROM OUTPUT MSG ; 1 = ECHO OF INPUT CHAR ; 2 = ECHO OF LF 7\  \   @  I       \ \ ? H     \~ \ > G     \} \ = F  ; R3+,P)(S V MO ; R2+,P)(S V MO ; R1+,P)(S V MO N IOCTRUSTIN1 RT);SP.(12),R1T(USCP VBMO OR FPCD OL HTOK ACSTF OOMTTBOE US; ) SP.(12 R CL RSTEISEG RORSTRE; R0),SP.(12 V MO ERNTOI PCKTA SSKTAT SE; P ,S1)(RCKTATS V MO PTDS E.AVQSR FOT IVESAD AN; E IM,TR2 V MO PTDS ; R NTOU,CR2 V MO PTDS 9; SUBROUTINE QSOVLY WILL BE CALLED TO CONTROL THE USE * ; OF THE PARATION. * ; * ; USAGE: BOTH ENTRY POINTS ARE USED WITH A 'JSR PC'. THE * ; ENTRY POINT 'QSAVE' IS USED UNLESS THE CALL IS THE * ; RESULT OF AN INTERRUPT IN WHICH CASE 'QSAVEI' IS USED.* ; : ; 3 = ECHO OF CR ; 4 = ECHO OF "U" ; 5 = ECHO OF "^" ; 6 = ECHO OF 1ST "^" ; 7 = ECHO OF "\" ; 8. = ECHO OF EOM CHAR ; 9. = INTERRUPT FROM OUTPUT OF ; LF IN OUTPUT MODE ; 10. = INTERRUPT FRO D EN . C ND.E ERIM TRTBO A'SSKTAT SE; 2 ,R1)(RERIMCT V MO ; =. 10PRDS ; NTMEONIRNV ERETOES R -SKTAD DEENSPSUG INRTTAES ROR FREHE; ; PTDS . SKTAW NEE THO TGO; I RT PTDS I RTR FOK ACSTN OUEAL VPCT PU; ) SP-(),R1Y(TREN V MO PTDS I RTR FOK ACSTN O0) (UEAL VPST PU; ) SP-( R CL PTDS E.AVQSR FOT IVESAD AN; E IM,TR2 V MO PTDS = * ; AT THE CALL THE TASK STACK IS ASSUMMED TO LOOK AS * ; FOLLOWS: * ; * ; QSAVE QSAVEI * ; PC FROM TASK PS *QSVE ; PS FROM TASK PC *QSVE ; ARG ARGUMENT >M OUTPUT OF ; CR IN OUTPUT MODE ; 11. = INTERRUPT FROM ECHO OF ; CR AFTER EOM ; 12. = INTERRUPT FROM ECHO OF ; LF AFTER EOM ; 13. = INTERRUPT FROM OUTPUT OF ; A RUBOUT TO TURN ON TTY ; FOR INPUT N URET;R PC S RT R1+,P)(S V MO RSTEISEG RRETOES;R R4+,P)(S V MO F OFO TUSATSTT NI UET;S ) R1N(YOTT CBIN R1 R AS ESBLTAD OR WTOX DEINT NI UET;G R1 L AS E YT BAGFLR METIM RO FNOT NI UET;G 1 ,RFBIMWT VBMO P)(S,-R4 V MO S ERSTGIREE AV;S P)(S,-R1 V MO . = ONYOTT ; ; EDEUQUDES IERIM TITWA ; FF OTOT SES IG)LA FFF/O ; R NTOU,CR2 V MO PTDS ERIM TRTBO A'SSKTAT SE; 2 ,R1)(RXTMA V MO . EAARK ACSTE THF OGEEDW LO; E THO TERADHEE THM RO FETFSOFE TH; PTDS D AN, EAAR; P ,SR0 V MO PTDS K ACSTE THF OZESIE TH; 0 ,RSVEG#R D AD PTDS , SSREDD AERADHEM RAOGPR; 0 ,RR1 D AD PTDS AARG * ; PC FROM JSR PC PC <== STACK POINTER* ; * ; AFTER THE CALL THE TASK STACK IS AS FOLLOWS: * ; * ; R0 * ; PC * ; R5 B . = CHTYPE+NTTYS TOFLAG: .BYTE 0,0,0,0,0,0,0,0 ;OUTPUT TIMEOUT FLAG WHERE ; 1 = TIMEOUT OCCURRED ; 0 = NO TIMEOUT OCCURRED . = TOFLAG+NTTYS FRSTTO: .BYTE 0,0,0,0,0,0,0,0 ;FIRST TIMEOUT FLAG ; 1 = TIMEOUT ERROR MSG TYPEOUT ; PREVIOUSLY REQUESTED ; 0 = 1ST TIMEOUT HAS NOT OCCURED . = FRSTTO+NTTYONT NI(UN YOTT ; ; - -ITEXN PO UNSIOITNDCO ; ; E YT BAGFLR METIT AI WIND NEAINTCOS IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ; N OOTY,TPC R JS ; ; - -CEENQUSEG INLLCA ; ; NETIOU RUTEOIM TERIM TITWAY TT- -ONYOTT ; ; ; E AG.P RNTURE ; C P TS R ; PSOP T CKLO . S ESDRADN URET RVEBO APST ERNS;I P)(S,2PS VBMO RDWOE ONN OW DSSREDD ARNTURE S)TEBYO TFTHI(S ; R0 L AS PTDS E THG INDD ABYR TEINPO; R00,4077#1 C BI PTDS K ACSTL IAITINE UTMPCO; 0 ,R1)(RZESI VBMO ; =. 10PNDS ; K AS TEW NOR FREHE; ; . ITO DGO D.DEENSPSUS WA; 10PRDS E BN O ERNZNO; EW=NROZE. ERNTOI PCKTA SSTTE; 1)(RCKTATS T TS PTDS E BLUAUE QTOD OR WADRETHE THT SERE; ) R1,(#1 V MO PTDS E * ; R4 * ; R3 * ; R2 * ; R1 <=TOP OF STACK * ; * ; THE PROGRAM HEADER WILL MODIFIED AS SHOWN: * ; FS TOIFLG: .BYTE 0,0,0,0,0,0,0,0 ;INPUT TIMEOUT FLAG WHERE ; 1 = TIMEOUT OCCURRED ; 0 = NO TIMEOUT OCCURRED . = TOIFLG+NTTYS TTYON: .BYTE 1,1,1,1,1,1,1,1 ;TELETYPE MOTOR ON/OFF FLAG ; 0 = ON ; 1 = OFF . = TTYON+NTTYS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM NXTSEC: .BYTE 0,0,0,0,0,0,0,0 ;NEXT SECTOR AVAILABLH US;P P)(S,-P)(S V MO . =T OUOC L; UTCOLOC, P SR J ;; --E NCUEEQ SNGLIAL C ;; 7)O TRI PPU CTSSE (TSUPRRTEINT OUCKLOO TNETIOUBRSU- -UTCOLO ; ;; GEPA . C ND.E 47TAPR P JM VESA ) SP-(6,R5TD#T V MO NETIOU;R T UPRRTEINR TEINPRO TCEANTRENE AK;M P)(S,-PS VBMO ESBLTAD OR WTOX DEINT NI UASD SE U; R5 L AS ITUN2*= X DEIN R TEINPOK ACSTM TEYS SVESA; CKTA,SSP V MO PTDS . ORRI$PT SE; R IOPR,$R2 VBMO PTDS ELEV LTYRIIOPRE RU TTOINT IFSH; R2 R AS PTDS VETIACO TUSATSTT SE; ) R5T(TATS CBIN PTDS SKTA$CT SE; K ASCT,$R5 VBMO: 30PLDS PTDS L.VELES HI TINY TRENT EX NCKHE CGO; 25PADS BR PTDS D ANS PTRUERNT IOWLL A. EDEUQUT NO; I * ; WORD 7, BYTE 0 - TASK PS (FROM STACK IF QSAVEI * ; OR ON ENTRY IF QSAVE)* ; WORD 5 - CURRENT TIMER * ; WORD 8 - TOP OF TASK STACK AFTER ALL * ; PUSHES TO SAVE * ; REGISTERS * ; JE(RELATIVE TO 1ST .BYTE 0,0,0,0,0,0,0,0 ;SECTOR OF FILE) FOR DISC MSG BUFFER . = NXTSEC+NTTYS+NTTYS NXTMSG: .BYTE 0,0,0,0,0,0,0,0 ;NEXT MESSAGE SECTOR ADDRESS (RELATIVE .BYTE 0,0,0,0,0,0,0,0 ;TO 1ST SECTOR OF FILE) IN DISC MSG ;BUFFER . = NXTMSG+NTTYS+NTTYS DAVAIL: .BYTE 1,1,1,1,1,1,1,1 ;DISC FILE AVAILABLE .BYTE 1,1,1,1,1,1,1,1 ; 1 = AVAIL 0 = NOT AVAIL . = DAVAIL+NTTYS+NTTYS DBFULL: .BYTE T GE ; R51, R OV M . NOT NI UET;G R1 R AS LEABILVANA ULEFIT SE ; ) R1L(AIAV D B LR C L VELE+ T NI*U 2= X DEINT GE ; 1 R SR A D REURCC OCHAT MREHE WEXND ILEAB TET GS,YE ; 1 ,R+2IDLEFI # UB S O ;N 70DRTT E BN E?BLTAD ILEFIN IRYNT ECHAT MMENAS OE;D )+R1,(R3 P CM . =0 R7TD TR TEINPOE BLTAD EIIL FITIN ; 1 ,RIDLEFI # OV M R FEUF BADREM RO FIDE IL FET;G R3),R1A( PS@# RBCL PTDS E.ATSTE IVCTNA ITOT SERE; VETIAC R CL PTDS T. IDOO G. EDEUQUS IT; 30PLDS Q BE PTDS USATSTK ECCH; #2),R5T(TATS PBCM PTDS R.BEUM NSKTAT GE; 5 ,R1)(RNOSKTA SBBI PTDS . ADLOE YT BOR FR5R EACL; R5 R CL PTDS E.OND UNFO; =. 20PLDS PTDS M * ; THE TASK TABLE WILL HAVE THE TASK STATUS SET AS SHOWN:* ; * ; 2 - TASK INVOLUNTARILY SUSPENDED - RE-QUEUED *QSVE ; 4 - TASK VOLUNTARILY SUSPENDED *QSVE ; 5 - TASK INVOLUNTARILY SUSPENDED *QSVE ; * ; N0,0,0,0,0,0,0,0 ;DISC BUFFER FILE FULL FLAG .BYTE 0,0,0,0,0,0,0,0 ; 1 = FULL 0 = NOT FULL . = DBFULL+NTTYS+NTTYS DWLIU: .BYTE 0 ;DISC WRITE I/O LIST IN USE FLAG ; 1 = IN USE 0 = AVAIL .ENDC ; ; .EVEN ; OLSTAD: .WORD 0,0,0,0,0,0,0,0 ;CURRENT OUTPUT LIST ADDRESS ;BIT 0 IS SET WHEN LIST ;RESIDES IN WORKING OUTPUT BUFFER . = AT@D V MO . =0 R6TD T; TYRIIOPRT/NI UOR F QRECOO TRTVEON CR,ROERD EA RSCDI ; ;N URET;R PC S RT . = 56DRTT UTTPOUR OUTNP IZELIIAITIN ; ITINTOC, P SR J . =0 R5TD TT OUCKLOE ASLERE ; S ,P)+SP ( B OV M RDWOD EAHR TROZE ; ) R0 ( EC D C IS DONT PUT US JSTLIE EUQUDE ; STLIDQC, P SR J TSUPRRTEINT OUCKLO ; UTCOLOC, P SR J T ISQL DUTTPOUR FOG RET SE ; STIR FTO; ) R2T(AS,LSTIR#F D AD PTDS T INPOO TSTLAT SERE T.EF LNENO; ) R2T(AS,LR2 V MO . TSISEXR HEOTANE UR SKEMA E.EUQU; 20PLDS E BN PTDS INT EX NTOT INPOO TT'RSFI 'VEMO; 2)(RSTIR,F1)(R V MO VETIACT SE; E IVCT,AR1 V MO PTDS !!AD BAD BAD B; RRPEDS OSBL PTDS RECON IISD ANS STXI ESKTAE UR SKEMA; 1 ,#R1 P CM R DEEA HOFS ESDRADT Q THE TYPE OF CALL ON QSAVE & QSAVEI IS DETERMINED BY * ; THE VALUE OF THE ARGUMENT ARG ON THE STACK. ITS VALUES* ; ARE: * ; * ; NEGATIVE - INVOLUNTARY SUSPENSION NO-REQUEUE* ; POSITIVE - INVOLUNTARY SUSPENSION RE-QUEUE * ; EQUAL ZERO - VOLUNTARY SUSPENSION *R OLSTAD+NTTYS+NTTYS ILSTAD: .WORD 0,0,0,0,0,0,0,0 ;CURRENT INPUT LIST ADDRESS . = ILSTAD+NTTYS+NTTYS QFIRST: .WORD 0,0,0,0,0,0,0,0 ;ADDRESS OF 1ST LIST IN CORE QUEUE .WORD 0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 . = QFIRST+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS QLAST: .WORD QFIRST,QFIRST+2 ;ADDRESS OF LAST LIST IN CORE QUEUE .WORD QFIRST+4,QFIRST+6 .WORD QFIRST+8.,QFIRST+10. 4 R LR C . =0 R4TD T NO ; 0 R5TD T NE B G?INRNWAE IZ SSG M AORRR EIS ; Z MSRR#E4, R MP C NO ; 0 R4TD T EQ B ? ORRR ESTUEEQ RSCDIA E ERTHS WA ; 4 ,R0)(RORRR E OV M E INUTROE ITWRC IS DLLCA ; WTSCDIC, P SR J S ESDRADT IS L/O ISCDIT GE ; 4 ,RT2LSDW # OV M R32, R DD A ESBLTAE IL FSCDIO TEXND IKEMA ; R35, R OV M S YE ; 0 R5TD T NE B Y?US BSTLIE ITWRGE; R1),R2T(RSFI V MO PTDS H.RCEA SRTTAES RGO S.YE; CHPTDS E BN PTDS T?SEG LA FHE TIS; NASYSB T TS ; S PPTO K OC.L ; =. 10PLDS ; SKTAD UEUE Q AADLOO TREHE; ; PTDS . CHARSEE EUQUA G INSHNIFI; CHPTDS BR ; ; =. 69PWDS D BAD BAD BA; LTHA . NO; 69PWDS Q BE ? NGPIEECRK ACSTM TEU ; * ; NOTE: IF UNSPND IS CALLED TO RE-QUEUE THE SUSPENDED * ; TASK, THE PRIORITY LEVEL WILL BE TAKEN FROM * ; THE PROGRAM HEADER. * ; * ; PROGRAMMER: 53 * ; DATE: 20-AUG-71 V .WORD QFIRST+12.,QFIRST+14. .WORD QFIRST+16.,QFIRST+18. .WORD QFIRST+20.,QFIRST+22. .WORD QFIRST+24.,QFIRST+26. .WORD QFIRST+28.,QFIRST+30. .WORD QFIRST+32.,QFIRST+34. .WORD QFIRST+36.,QFIRST+38. .WORD QFIRST+40.,QFIRST+42. .WORD QFIRST+44.,QFIRST+46. .WORD QFIRST+48.,QFIRST+50. .WORD QFIRST+52.,QFIRST+54. .WORD QFIRST+56.,QFIRST+58. .WORD QFIRST+60.,QFIRST+62C IS DIS ; #12,STWL D MP C . =0 R3TD TL MAOR NTOL VELET SE ; 2 R LR C NO ; 0 R5TD T EQ B Q?T PUUT OALRMNON INGHIYTAN ; R0),R4T(RSFI Q OV M UTTPOUL MAOR NTOR TEINPOQ T SE ; 4)(R - ST T S YE ; 0 R3TD T NE B E?EUQUI PRN INGTIAI WTSESQUREY AN ; R0),R4T(RSFI Q OV M 4 RTOR TEINPOE BLTAQ T GE ; X TQGEC, P SR J Y ITORRI PTOL VELET SE ; R21, # OV M YS SHE TIS; CKTASS,#SP P CM CKTASS EF.R ; UT OCKHE COR FLYON; ; . ITO DGO S.YE; 20PADS T BG PTDS K?ECCHO TLSVELEE OR MNY A. NO; 2 ,RR4 P CM . ITD OA LGO S.YE; 10PLDS E BN PTDS ? ELEV LISTHN INGHIYTAN; ) R2T(RSFI T TS: 25PADS PTDS 2)L=VELET RSFIX(DEINL VELET ENEMCRIN; 2 ,RR3 D AD PTDS S.YE; CHPTDS E BN Y * ; VERSION: V001A * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF QSAVE,QSAVEI,QSAVES ; QSVE .REF STACK ; QSVE .IFNZ OVRLAY Z. . = QLAST+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS .PAGE ; ; ; TELETYPE OUTPUT REQUEST PROCESSOR ; ; CALLING SEQUENCE -- ; ; MOV #LIST,-(SP) ;PUSH I/O LIST ADDRESS ON STACK ; EMT TTYOUT ;CALL TTYOUT ; TTYOUT = . JSR R5,PUSHR ;SAVE R0-R5 ON CURRENT STACK JSR PC,REQPP ;CALL REQUEST LIST PREPROCESSOR BNE TTOR20 ;BRANCH ON LIST ERROR ESEUQUT PUUT OOR FAGFLT SE ; 4 R LR C G LA FLLFUE IL FERFFBUC IS DARLE;C 3)(RLLFUDB RBCL . =0 R2TD TE IL FOFR TOEC SST 1TOR TEINPOT SE ; ) R3G(MSXT N B LR C . = 10DRTT 20DRTT BR 3)(RSGTMNX4, R B OV M 4 ,RSZUFDB # DD A E IZ SSG MNE OBYR TEINPOP UM BO,;N 4 ,R3)(RSGTMNX VBMO ES;Y 10DRTT ISBH D?SE;U ENBEE IL FOFR TOEC SOP TAS;H -1SZLEFI PTDS ? CHARSET ARSTRE; NASYSB T TS: 20PADS 3. RTOINT ENEMCRINX DEINL VELET PU; 3 ,R#2 V MO ERNTOU CELEV LASE USO TR2R EACL; R2 R CL PTDS X DEIND OR W ATOT IFSHN HE T4, RTOIN; R4 L AS PTDSS ELEV LTYRIIOPRF OERMBNUT ENRRCUT PU; 4 ,RLSVELE V MO D.BAS ASTJU S.YE; RRPEDS E BN ? UTKOOC LSKTAR DEUNG INNNRU; G LAMF T TS D BA, AD BD,]; QSVE .REF QSOVLY ; QSVE .ENDC QSVE ; QSVE ; QSAVE ENTRY POINT QSVE ; QSVE QSAVE =. ; QS^ .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION CLR R4 ;SET QLIST FOR OUTPUT QUEUING JSR PC,QLIST ;Q LIST TO PROPER UNIT/LEVEL QUEUE .ENDC JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TSTB TTO1ST(R1) ;IS THIS 1ST OUTPUT REQUEST FOR UNIT? BEQ TTOR45 ;YES, GO INITIATE OUTPUT .IFG MSGBUF TTOR02 = . TSTB DAVAIL(R3) ;IS DISC FILE FOR THIS DEV/LEVEL A,#3)(RSGTMNX PBCM ET SSB;L ) R5D(TALS,OR0 V MO THWIS ESDRADT IS LUTTPOUT ENRRCUE AV;S R0 C IN R32, R DD A T NI*U 2= 5 R; ESBLTAT NI URDWOO TEXND IKEMA ; R53, R OV M ) ELEV L +ITUN2* ( =R3 ; 3 R SL A E BLTAE IL FSCDIO TEXND IKEMA ; R31, R OV M L VELET GE ; 2 ,R0)(RELEV L B OV M O. NITUNT GE ;R1),R01(M+TEYS S B OV M SSREDD ASTLIT BA S.YE; RRPEDS E BN ? NGNIUN RNGHIYTAN; VETIAC T TS PTDS . E)OVABE SE (AGFLR EACL; NASYSB R CL PTDS TSUPRRTEINL ALW LOAL; PS@# RBCL T INPOY TREN; =. CHPTDS PTDS . H)IT WINEG BTOO ER ZAS WIT; PTDS SSLEUN( R'NTOU'CN IUEAL VHE TANTH; PTDS S ES LNE OBEL IL WR'METI'CN IEDORST; aVE MOV 6.(SP),-(SP) ; REVERSE ORDER OF PC & PS ON STACK QSVE MOV 6.(SP),8.(SP) ; TO CONFORM TO QSAVEI CALL - THE QSVE MOV (SP)+,4.(SP) ; MOST COMMON QSVE ; * ; QSAVEI ENTRY POINT - ONLY IF INTERRUPT CAUSED CALL QSAVEI =. MOVB @#PS,-(SP) ; SAVE PS QSVE .LOCK TOPPS ; TST ACbVAIL BEQ TTOR30 ;NO, GO QUEUE REQUEST TSTB DBFULL(R3) ;IS THIS DISC BUFFER FULL? BGT TTOR30 ;YES, GO Q LIST TSTB DWLIU ;IS DISC WRITE I/O LIST IN USE? BGT TTOR30 ;YES, GO Q LIST INCB DWLIU ;NO, SET DISC WRITE I/O LIST IN USE FLAG MOVB (SP)+,PS ;YES,RELEASE LOCKOUT MOV #DWLIST,R4 ;GET DISC I/O WRITE LIST ADDRESS JSR PC,DISCWT GE ; 0 ,RSTRLTT # DD A S ESDRADR FEUF BTADAT PUUT OET;G 0 ,R1)(RTADA V MO ES;Y 60DRTT E BN R?ROERC IS D AREHE TAS;W ) R1R(ROER T TS . =1 DRTY T; ;- -ITEXN PO UNSIOITNDCO ; ;T IS LSTUEEQ R/O ISCDIF OSSREDD ANSAINTCO1 R ;; --Y TRENN PO UNSIOITNDCO ; ;1 DRTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTRON IOETPLOM C/O IADREC IS D--1 DRTY T ;; ;E AG.P PTDS UEAL VHE T=,F I. R'NTOU'CO TE'IM'T; PTDS ESARMPCOE AVQS N.IOUTECEXS HI TOF; PTDS T ARSTT AUEAL VERIMCTS K'AS TVETIAC; 0 D OR.W : METI PTDS H.TCSP DOFG INNNGIBE; PTDSHE TATD REEACLS IAGFLE TH T.UPRRTEIN; PTDST RSFIE THN OVETIACE ARS SKTAO NENWH; PTDSE AV SBYT SEeTIVE ; IS A JOB ACTIVE? QSVE BEQ QSI300 ; NO. RETURN QSVE CLR ACTIVE ; PREVENT DOUBLE SUSPENSION QSVE ; MOVB (SP)+,@#PS ; OLD WAY - DDS DISK TO FAST QSVE MOVB (SP)+,QSVPS ; LEAVE IN LOCKOUT AND SAVE PS QSVE ; ; THE TASK STACK NOW LOOKS THIS WAY: ; PS ; PC (TASK PC) ; ARG ; PC (FROMf ;CALL DISC WRITE ROUTINE MOV ERROR(R0),R4 ;WAS THERE A DISK REQUEST ERROR? BEQ TTOR10 ;NO CMP R4,#ERRMSZ ;YES, IS ERROR A MSG SIZE WARNING BEQ TTOR10 ;YES JSR PC,LOCOUT ;LOCKOUT INTERRUPTS BR TTOR30 .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION TTOR05 = . MOVB (SP)+,PS ;RELEASE LOCKOUT .ENDC ; ; EXIT PROCESSING EMSTSYF BUG MSR FOG INOWLLFOM SEAS ; F BUSG M G IF . C ND.E 47TAPR P JM VESA NETIOU;R T UPRRTEINR TEINPRO TCEANTRINE AK;M ) SP-(0,D7TY#T V MO K ACSTN OPSE AVLE, UTKOOC LSEEAEL;R S ,PP)(S VBMO SYBUT NI UET;S 5)(RRTYPTT RBCL . = 85YDTT RNTUREO ;G 60YDTT BR RECON ISTLIE EUQU ; T ISQLC, P SR J G MST PUUT OOFG INEUQUR FOG ART SE ; S IAGFLE TH ).EDCHATSPDI; PTDS S IITE OREF BUT(BD UNFOS ISKTA; PTDS A N HE WORD HERCEA SISL VELEW NEA ; PTDSR HEIT EENWHN PEAP HLLWIS HI T. CHARSE; PTDSE EUQUS ITT ARSTRET US MERCHATSPDIE TH; PTDS ND AONS IITE ONO TALQU EIST IENWH; PTDS . FF OIST IROZEO TALQU EIST IENWH; i JSR PC) <=== TASK STACK POINTER QSVE ; ; COMMON CODE -- QSAVE, QSAVEI, AND QSAVES QSVE ; QSVE ; QSAVES ENTRY POINT - ONLY FROM 'SAVE' WHICH CHECKED AND CLEARED ACTIVEQSVE QSAVES =. ; QSVE MOV R3,-(SP) ; SAVE R3 ON TASK STACK QSVE MOV R2,-(SP) ; SAVE R2 ON TASK STACK j FOR REQUEST ; TTOR10 = . CMPB TYPE(R0),#3 ;IS EXIT TYPE 3? BNE TTOR35 ;NO, MUST BE TYPE 1 OR 2 TTOR15 = . JSR R5,POPR ;POP REGISTERS OFF STACK MOV (SP)+,(SP) ;SWAP PC & LIST ADDR; POP STACK RTS PC ;RETURN ; ; PROCESSING FOR INVALID REQUEST ; TTOR20 = . MOVB ERRTSK(R0),R4 ;IS THERE AN ERROR TASK TO BE QUEUED? BEQ TTOR25 ;NO 4 R LR C . =0 D8TY TE OR CIND UEUE QBEL IL WELEV;L ND AITUNS HI TOR FTSESQUREE URUT;F SOG LA FILVA ALEFIC IS DETES;R 3)(RILVADA RBCL D OR WORRR ETOE OD CORRR ESCDIE OV;M 0)(RORRR,ER4 V MO . = 75YDTT ;N URET;R PC S RT . = 72YDTT AGFLE USN ISTLIO I/E ITWRC IS DETES;R U LIDW RBCL O ;N 72YDTT E BN PTDS . CHARSES R'HETCPAIS DHE TRTTAES RTO; PTDS ENWHE INRMTEDEO TRETOES/RVESAD AN; PTDSR HETCPAIS DHE TBYE USR FOG LA FNEFIDE; 0 D OR.W: NASYSB PTDS ; K ACST EF.R PTDS ; NASYSB EF.D NTOI PRYNT ENEFIDE; CHPTDS EF.D E AG.P ******************************m MOV R1,-(SP) ; SAVE R1 ON TASK STACK MOV +8.(SP),R1 ; GET ARG FROM STACK MOV R5,+8.(SP) ; SAVE R5 ON TASK STACK MOV $CTASK,R2 ; PUT ADDRESS OF PROGRAM HEADER QSVE ASL R2 ; MAKE R2 INTO WORD INDEX QSVE MOV HEADER(R2),R2 ; INTO R2. DON'T HAVE TASK NUMBER QSVE MOVB 12.(SP),CPUST(R2) ; SAVE PS IN TASK HEADER QSVE MOV R0,+12.(SP) n MOV R4,-(SP) ;YES, PUSH TASK NO. ON STACK .IFG DPRTY CLR -(SP) ;PUSH IPRTY ONTO STACK .ENDC .IFG ARG MOV ERROR(R0),-(SP) ;PUSH ERROR CODE AS ARG .ENDC CLR -(SP) ;PUSH IRTRN ONTO STACK JSR PC,QUEUE ;QUEUE ERROR TASK TST (SP)+ ;POP ERROR CODE OFF STACK TTOR25 = . CMP ERROR(R0),#ERRQL ;WAS THERE A QUEUEING ERROR? BEQ T?ESQUREC IS DRYMARI POR FMPCOO I/S ;I + P)(ST,ISWL#D P CM . = 70YDTT UTKOOC LSEEAEL RES;Y PS+,P)(S VBMO O ;N 85YDTT I BM Y?US BITUNS ;I 5)(RRTYPTT TBTS S PTRUERNT IUTKOOC;L T OUOC,LPC R JS . = 60YDTT . = 25YDTT SKTAG INLLCAD ENSPSUUN, ES;Y N SPUN,TPC R JS O ;N 25YDTT E BN 2?E YP TITEXS ;I 2 ,#0)(RPETY PBCM . = 20YDTT C ND.E ****************************************;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S29 : TEDA ; * 53: ERMMRAOGPR ; * ; * . q; SAVE R0 ON TASK STACK MOV SP,TSTACK(R2) ; SAVE TASK STACK POINTER IN HEADER MOV +6(SP),R0 ; SAVE PC VALUE TO RETURN MOV R4,+6(SP) ; SAVE R4 ON STACK CLR R4 ; CLEAR R4 FOR BYTE LOAD QSVE BISB TASKNO(R2),R4 ; GET TASK NUMBER FORM TASK HEADER QSVE ; MOVB @#PS,R3 ; OLD WAY - DDS DISK TO FAST QSVE MOVB (PC)+,R3 ; SAVE PS NOW IN R3 FOR RESTORE LATErTTOR27 ;YES, THREAD WORD WAS ALLREADY RESTORED INC (R0) ;INCR LIST THREAD WORD TO ORIGINAL STATE TTOR27 = . BR TTOR15 ;GO RETURN .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; CORE QUEUING WHEN REQUIRED IN A MESSAGE BUFFERRED SYSTEM ; TTOR30 = . CLR R4 JSR PC,QLIST ;Q LIST TO PROPER UNIT/LEVEL Q BR TTOR70 ;GO RELEASE LOCKOUT .ENDC K AS TSEEAEL;R K TSEL,RPC R JS CKTA STO. NOK AS TO,;N P)(S,-R4 V MO S?ESGRRO PINO I/S ;I 20YDTT E BN AYRLOV Z FN.I USATSTO I/K AS TCRDE, ES;Y 4)(RATSTIO CBDE EMSTSYY BO,;N 20YDTT Q BE K?AS T ABYE AD MSTUEEQ RAS WO,;N 4 ,R0)(REMSTSY VBMO ES;Y 25YDTT Q BE 3?E YP TITEXS ;I 3 ,#0)(RPETY PBCM RDWOD EAHR TSTLIY TTR NC;I 0)(R C IN . TSISEXN IOITNDCOR ROERN AH,TCSP D ; *O TRYNT EONO ERNZNOS IG'LAMF 'OR' VETIAC 'ERTHEIF I ; * ; * S.ROY BEDEVCIRES IPTRUERNT I ; * N AERFT AFTLEE BLYONL IL WCHHI WOPLOT AI W AERNT E ; L*IL WIT, EDEUQUY TLENRRCUE ARS SKTAO NATTHS NEMIERET D ; * CHPTDSF I. ERLLCAE THO TEDRNTURER VENES IOLTRON C ; * uR QSVE QSVPS: .WORD 0 ; PS STORAGE QSVE MOVB #340,@#PS ; LOCK OUT ALL INTERUPTS QSVE MOV STACK,SP ; SWITCH TO SYSTEM STACK MOV R0,-(SP) ; PUT RETURN PC ONTO SYSTEM STACK MOV COUNTR,R0 ; GET CURRENT ABORT TIMER.(R0 FASTER QSVE BEQ QSI030 ; THAN @R0). ZERO? ALREADY TAKEN CARE QSVE CMP R0,TIME ; OF. NOT ZERO. HAS IT CHANGv TTOR35 = . CMPB TYPE(R0),#1 ;IS EXIT TYPE 1? BEQ TTOR15 ;YES, RETURN TO CALLER .IFG MSGBUF TSTB SYSTEM+1(R0) ;TYPE 2, IS THIS 1ST OUTPUT REQUEST? BMI TTOR15 ;YES, TASK NEED NOT BE SUSPENDED .ENDC JSR R5,POPR ;RESTORE REGISTERS MOVB PS,2(SP) ;REPLACE LIST ADDR WITH PS CLR -(SP) ;PUSH ZERO ON STACK TO INDICATE JSR PC,QSAVEI =5 D1TY TG LA FLLFUR FEUF BET SS,YE ; ) R3L(ULBF D B NC I O ;N 15YDTT E BN LLFUE IL FERFFBUC IS DIS ;3)(RSGTMNX),R3C(SEXT N B MP C . = 10YDTT LEFIF OORCTSET 1SO TERNTOI PET;S 3)(RECTSNX RBCL . =5 D0TY T0 D1TY T R B ) R3C(SEXT,NR4 VBMO R4Z,FSBU#D D AD ZESIG MSE ONY BERNTOI PMPBU ; R4),R3C(SEXT N B OV M S YE ; 5 D0TY T S HI B D SE UENBEE IL FOFR TOEC SOP TAS;H1 Z-ESIL#F ; * H TCSP DP JM ; * ; * : ONTIUCTRNS I ; * G INOWLLFOE THY BCHPTDSO TEDSSPAS IOLTRON C E:AGUS ; * ; * . EDORSTRET ENOMIRNV EIRHE T ; *VEHAyED FROM QSVE BNE QSI030 ; DISPATCHING? YES. OK THEN. QSVE DEC R0 ; HASN'T CHANGED. WE WILL DECREMENT IT.QSVE BGT QSI030 ; IF GREATER THAN ZERO WE ARE DONE. QSVE DEC R0 ; IF ZERO MUST MAKE NEG. FOR THE TIMER. QSVE QSI030: MOV R0,CTIMER(R2) ; SAVE VALUE IN HEADER FOR NEXT DSPT. QSVE CLR COUNTR ; CLEAR TIMER FOR THIS TASK. MOV #1,(R2) ; SET THREz ;VOL SUSPENSION, SUSPEND CALLING TASK JMP DSPTCH ;EXIT TO DISPATCHER ; ; PROCESS 1ST OUTPUT REQUEST FOR A UNIT ; TTOR45 = . INCB TTO1ST(R1) ;RESET 1ST REQUEST FLAG FOR THIS UNIT .IFG MSGBUF ;ASSEM FOLLOWING FOR A MSG BUF SYSTEM MOVB (SP)+,PS ;RELEASE LOCKOUT MOV TTOBUF(R5),R4 ;GET ADDR OF WORKING OUTBUF FOR UNIT ADD #TTRLST,R4 ;MOVE INDEX TO WHERE TTY LIST WILL GO ),R3C(SEXT N B MP C S YE ; 0 D8TY T EQ B ? DEMAS WAT ESQURE ; ISTHE NCSID LEAI FSCDIS HA ; ) R3L(AIAV D B ST T S YE ; 5 D7TY T NE B ? ORRR ETERI WSCDIA E ERTHS WA ; 4 ,R4)(RORRR E OV M S ESDRADT IS L/O ISCDIT GE ; R4),SP ( OV M L VELE+ T NI*U 2 =EXND;I 3 ,RR2 D AD ELEV LET;G R2),R0L(VELE VBMO 3 ,RR5 V MO 5 Y BO. NITUNT UL;M R5 L S SKTAD DEENSPSU S.SKTAD TECUXENE UND AEDNDPEUS S ; * THBOS LEAD HCHPTDS K.AS TEDEUQUY ITORRI PSTHEIG H ; *HE TTETA SVETIACE THN ICELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * K.AS TEDEUQUT ESGHHIE ATIVCT-ACHPTDS: ONTICAFITIENIDM RAOGPR ; * ; * H C T P S D ; }AD WORD TO 1 (QUEUEABLE) QSVE TST R1 ; VOLUNTARY OR INVOLUNTARY? BNE QSI100 ; BRANCH IF INVOLUNTARY MOVB #4,TSTAT(R4) ; SET STATUS TO VOLUNTARY SUSPENSION. QSVE .IFNZ OVRLAY ; ROS 2 OR ROS 1? ONLY PUT IN CALL IF 2. CMPB R4,#OVTMIN ; IS THIS ANY OVERLAY TASK? QSVE BLO QSI200 ; NO. GO ALLOW INTERRUPTS AND RETURN. QSVE MOVB #1,TSTAT(R4) ; YES. SET RP~ JSR PC,MOVLST ;MOVE LIST AND MSG DATA TO OUTPUT BUFFER INC R4 ;SAVE CURRENT LIST ADDRESS, SET MOV R4,OLSTAD(R5) ;LSB TO INDICATE WORKING BUFFER .ENDC .IFZ MSGBUF MOV R0,OLSTAD(R5) ;SAVE CURRENT OUTPUT LIST ADDRESS .ENDC .IFG MSGBUF ;ASSEM FOLLOWING FOR A MSG BUF SYSTEM JSR PC,LOCOUT ;LOCKOUT INTERRUPTS .ENDC TSTB TTYPRT(R1) ;IS UNIT BUSAS 5 ,RR1 V MO . NOT NI UTY TET;G1 ,R0)(R+1EMSTSY VBMO 0 ,R0)(R V MO S ESDRADT IS LSTUEEQ RTY TET;G R0T,LSTR#T D AD S ESDRADR DEEA HERFFBUC IS DET;G 0 ,R1)(RTADA V MO K ACSTO NT ODRADT IS L/O ISCDIH US;P P)(S,-R1 V MO . =1 DWTY T; ;T IS LSTUEEQ RTERI WSCDIF OSSREDD ANSAINTCO1 R ;; --Y TRENN PO UNSIOITNDCO ; ;1 DWTY,TPC R JS ; ;- -CEENQUSEG INLLCA **********************************************************************;* E AG.P SPUN ; 00SDUN BR SPUN ERUSO TRNTUREE RCFO; ) SPN(TRUR R CL SPUN USATSTL GALEIL; P)(S C IN: 10SEUN SPUN OMRP; P)(S C IN: 20SEUN SPUN R BEUM NSKTAL GALEIL; P)(S C IN: 30SEUN ; S ORRR EOR FREHE; ; OM'S STATUS QSVE MOVB R3,@#PS ; ALLOW INTERRUPTS BEFORE RPOM CALL QSVE MOV R4,-(SP) ; AND PUSH TASK NUMBER QSVE JSR PC,QSOVLY ; LET RPOM HANDLE THE PARTITION ASSIGN. .ENDC .IFZ OVRLAY ; NEED THIS CODE ONLY QSVE MOVB R3,@#PS ; FOR ROS 1. ROS 2 USES QSI200. QSVE .ENDC QSVEY .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BPL TTOR02 ;YES, GO PUT MSG IN DISC Q INC (R0) ;INCR USER LIST THREAD WORD TO ONE COMB SYSTEM(R4) ;SET FLAG TO NOT SUSPEND TASK ;BY COMP BYTE 1 OF SYSTEM WORD .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BPL TTOR05 ;YES, GO EXIT .ENDC MOVB #1,TTYPRT(R1) ; ;E ITWRC IS DOR FNETIOU RONTILEMPCOO I/- -W1YDTT ; ;; GEPA . F BUSG M G IF . C ND.E RNTURE ; C P TS R S ERSTGIREE ORSTRE ; PRPO5, R SR J NO ; 5 L1OV M LO B ? EDOV MLL;A 2 ,RR4 P CM ERFFBUO TSG MOFR HA C 2OV;M + 4)(R+,0)(R V MO . =5 L1OV MR FEUF BTOE OV MSG MOR FITIM LET;S 2 ,RR4 D AD ERFFBUO TRDWOX DEINE OV;M + 4)(R+,0)(R V MO . NGHI T'SITO DERCHATSPDIE THT LE; CHPTDS P JM SPUN NDPEUS SGO; I VESA,QPC R JS SPUN ONSIENSPSUY ARNTLUVOINR FOT SE; P)(S,-#1 V MO SPUN 1 VESA QOR FCKTA SONS PVEMO; P)(S-2VESA-URNRT,UPS@# VBMO SPUN ERCHATSPDIE THN OLLCA; =. 30SDUN ; P S== < PC ; USATST ; ; : RNTUREN OAY WISTHS OKLOK ACST; ;  QSI050: RTS PC ; DONE WITH VOLUNTARY SUSPENSION. ; RETURN TO CALLER. QSI100 =. ; HERE FOR INVOLUNTARY SUSPENSIONS BLT QSI200 ; INVOLUNTARY BUT DON'T RE-QUEUE QSVE ; DO OWN REQUEUING HERE ON FRONT OF QUEUE TO SAVE TIME MOVB #2,TSTAT(R4) ; SET STATUS FOR QUEUED QSVE MOVB HPRIOR(R2),R0 ; GET PRIORITY LEVEL TO REQUEUE AT ASL R0 ; MAKE;SET UNIT PRIORITY TO OUTPUT TTOR60 = . MOVB (SP)+,PS ;RELEASE LOCKOUT JSR PC,TOINIT ;INITIALIZE OUTPUT OF A MESSAGE BR TTOR10 ;GO EXIT .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM TTOR70 = . MOVB (SP)+,PS ;RELEASE LOCKOUT BR TTOR10 ;GO EXIT .ENDC .PAGE ; ; TELETYPE INPUT REQUEST PROCESSOR ; ; CALLING SEQUENCE -- ; ; RDWOX DEINO TERNTOI PET;S + 0)(R T TS R FEUF BTO) NTOU CARCH (ZESIG MSE OV;M )+R4,(R2 V MO . = 12VLMO EXND ITOE IZ SSG MET;G 2 ,R0)(R V MO . =0 L1OV M2 L1OV M R B ) R04(,-SZRMER # OV M STLIF ORDWO" ORRR"EN IDECOR ROERT SE ;) R44(,-SZRMER # OV M EDOWLL AAX MTOG MSE ATNCRU TS,YE ; 2 ,RSZSGOM # OV M NO ; 0 L1OV M S LO B Z SIG MSX MA. GT .SG MINR HA COF. NOE AR ; Z RNTURE; PC S RT SPUN . RG ARNTUREO NT OPCE OV M. RNTURE; P)(S+,P)(S V MO H.TCSP DSE U. =1; 30SDUN T BG SPUN DECON URET RSTTE; ) SP2(E-AVUSN-TRUR T TS C ND.E SPUN C ND.E SPUN . GSREL ALE ORSTRE; R OP,PR5 R JS SPUN N IORSVEY LAEROVF ILYON; AYRLOV Z FN.I SPUN  RO AND R4 INTO WORD INDEX QSVE ASL R4 ; DON'T NEED TO RESTORE QSVE MOV FIRST(R0),@HEADER(R4) ; MAKE TASK'S HEADER POINT TO QSVE ; OLD HEAD OF QUEUE (IF ANY). QSVE BNE QSI175 ; AVOID NEXT INST. IF NON-EMPTY QSVE ; QUEUE QSVE MOV HEADER(R4),LAST(R0) ; SET LAST POINTER TO HEADER QSVE QS MOV #LIST,-(SP) ;PUSH I/O LIST ADDRESS ON STACK ; EMT TTYIN ;CALL TTYIN ; TTYIN = . JSR R5,PUSHR ;SAVE R0-R5 ON CURRENT STACK JSR PC,REQPP ;CALL REQUEST LIST PREPROCESSOR BNE TTOR20 ;BRANCH ON LIST ERROR MOV #2,R4 ;SET ARG FOR QUEUING OF INPUT LIST JSR PC,QLIST ;NO, QUEUE REQUEST LIST JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TGSMS#O),R0 ( MP C S ESDRADA AT DET;G 0 ,R0)(R V MO O ;N 05VLMO O BL D?VEMOT IS LOFL AL ; R24, R MP C R FEUF BTOT IS LOFD OR W AOV;M + 4)(R+,0)(R V MO . =5 L0OV MD OR WXTNEO TERNTOI PET S. STLIF ORDWO ; )+R0 ( ST T D EAHR TINS ESDRADT IS LALINIGORE AV;S )+R4,(R0 V MO R2.,12 # DD A E OV MSTLIR FOT MILIT SE ; R24, R OV M S ERSTGIREE AV;S HRUS,P} C ND.E ; R1+,P)(S V MO ; R2+,P)(S V MO ; R3+,P)(S V MO ; R4+,P)(S V MO SPUN S SKTAY LAEROVN-NOF ILYON; AYRLOV FZ.I Y.ANF IS,ERSTGIRED VESAL ALE ORSTRE; VESARG Z FN.I SPUN N URET ROR FUSATSTR ROERT SE; P)(S-2RRUE+,P)(S V MO . TSUPRRTEINW LOAL; S #P,@R3 VBMO SPUN |I175 =. ; QSVE MOV HEADER(R4),FIRST(R0) ; SET OR RESET FIRST POINTER QSVE QSI200 =. MOVB R3,@#PS ; ALLOW INTERRUPTS QS1250: RTS PC ; RETURN TO CALLER QSVE QSI300: MOVB (SP)+,@#PS ; ALLOW INTERRUPTS QSVE MOV (SP)+,(SP) ; RESET STACK FOR RETURN FROM ERROR QSVE MOV (SP)+,(SP) ; STB TTI1ST(R1) ;IS THIS 1ST INPUT REQUEST FOR UNIT? .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BGT TTOR70 ;NO, GO EXIT .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BGT TTOR05 ;NO, GO EXIT .ENDC ; ; PROCESS 1ST INPUT REQUEST FOR A UNIT ; INCB TTI1ST(R1) ;RESET 1ST REQUEST FLAG MOV R0,ILSTAD(R5) ;SAVE CURRENT INPUT LIST ADDRESS TR5 R JS . =T LSOV M; EDATNCRU TIST I ;, Z)GSMS(OE IZ SSG MAX MANTHR GEON LAS WSG MIF ; ;- -ITEXN PO UNSIOITNDCO ; ;D VEMOE BTOE ARA AT DGESAES MND ASTLI ;H ICWHO NT IERFFBUF OSSREDD AHE TNSAINTCO4 R ;T IS LSTUEEQ RTY TOFS ESDRADE THS INTAON CR0 ; ;- -RYNT EONUPS ONTIDION C ;; STVLMOC, P SR J ;; --E NCUEEQ SNGLIAL C ;; STLIF O y P. USHNIFIO TREHE; =. 00SDUN ) =2 (. EDEUQUO TUSATSTT SE; ) R4T(TATS CBIN . T'AS'LW NEO TNTOI PTO' STLA 'TEDAUP; ) R1T(AS,LR2 V MO N HE TK.AS TEW NTOT INPOL AI TLD OKEMA; 1)(RSTLA,@R2 V MO SPUNERAT LEDNET N'DO. EXND IRDWOO NT IKEMA; R1 L AS SPUN Y ITORRI PEDAV S'SSKTAT GE; 1 ,R2)(RORRIHP VBMO EUQUF OND(E O.ER ZTOD OR WADRETHT SE; 2)(R C DE SPUN x QSVE MOV (SP)+,(SP) ; QSVE RTS PC ; RETURN QSVE .PAGE ;*********************************************************************** ; * ; S U S P N D * ; * ; PROGRAM IDENTISTB TTYPRT(R1) ;IS UNIT BUSY? .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BPL TTOR70 ;YES, GO EXIT .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BPL TTOR05 ;YES, GO EXIT .ENDC CLRB TTYPRT(R1) ;SET INPUT/OUTPUT PRIORITY TO INPUT BR TTOR60 ;GO INITIALIZE INPUT FOR UNIT .PAGE .CSECT .TTYIN ; ; ; TTINIT -- TTYIO ; RDWO" EMSTSY "WSLOOL FTADAG MSE ERWHR FEUF B ;A O TTADAD ANT IS LTY TVEMOO TNETIOUBRSU- -STVLMO ; ;; GEPA . F BUSG M G IF . C ND.E RNTUREO ;G 05CWDS BR ELEV/LEV DISTH ; R FOG LA FILVA ALEFIC IS DETES;R 3)(RILVADA RBCL D OR WORRR ETOE OD CORRR ESCDIE OV;M 0)(RORRR,ER4 V MO . =0 W1SC DN URET;R PC S RT . =5 W0SC DS YE ; 0 u EXND ITEBYA O NT ICKBA4 RGEANCH; R4 R AS . SSREDD AERADHEM RAOGPRT GE; 2 ,R4)(RERADHE V MO SPUN X DEIND OR W ATOIN4 RKEMA; R4 L AS ; =. 00SCUN C ND.E SPUN . USATSTR ROER; 20SEUN BR SPUNUSATSTG INTTSER TEAFN URET RK. OUSATST; 00SDUN Q BE SPUN S TUTA SSTTE; R2 T TS SPUN tFICATION: SUSPND * ; * ; PURPOSE: THIS ROUTINE IS USED TO SUSPEND THE CURRENTLY ACTIVE * ; TASK, PRESERVING ITS ENVIRONMENT, AND THEN CALL ON *SUSP ; THE DISPATCHER TO SCHEDULE THE NEXT TASK (IF AN * ; APPLICATIONS ROUTINE). THE SUSPENSION IS VOLUNTARY * ; AND THEREFORE OF AN INDEFINATE DURATION. * ; INITIALIZATION ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,TTINIT ; TTINIT = . JSR R5,PUSHR ;SAVE REGISTERS MOV #TTICSR,R0 ;CLEAR TTY CONTROL STATUS REGISTERS TTIN10 = . CLR @(R0)+ CMP R0,#TTIDBR BLO TTIN10 MOV #1,R1 .IFG MSGBUF MOV #DRLIST,R0 ;INIT THREAD WORD OF DISC REQUESTS TTIN15 = . MOV R1,@(R0)+ W1SC D NE B ? ORRR ESTUEEQ RSCDIA E ERTHS WA ; 4 ,R4)(RORRR E OV M T ESQUREE ITWRC IS DKEMA ; TERIPFC, P SR J S ESDRADT IS L/O ITERI WSCDIT GE ; R4),SP ( OV M R FEUF BTOA AT DGESAES MND ASTLIV MOO ;G T LSOV,MPC R JS STLIT ESQUREY TTO TERNTOI PET;S R4T,LSTR#T D AD DREA HERFFBUN IDRADT EC SEL RUT;P) R4T(ECLS,R3)(RECTSNX VBMO LEAB TORCTSET EX NTOX DEINT SE ; 3 R SR A ERADHER FEUF BIND q R)TEISEG RPS (R3E ORSTRE; R3+,P)(S VBMO SPUN USATSTR ROERT GE; R2+,P)(S V MO SKTAY LAEROV (. FFTU S'SITO DOMRPT LE; Y OVNS,UPC R JS SPUN ERMBNUK AS TSHPU; P)(S,-R4 V MO SPUN M PO RERFT ATO3 RVESA; P)(S,-R3 VBMO SPUN TSUPRRTEINW LOAL; S #P,@R3 VBMO SPUN . ITO D I. RECO; 00p * ; USAGE: EMT SUSPND OR CALL SUSPND * ; * ; NOTE: THIS ROUTINE SWITCHES THE CURRENT STACK POINTER * ; FROM THE TASK STACK TO THE SYSTEM STACK. * ; * ; PROGRAMMER: 53 * ;  CMP R0,#DWLIST BLO TTIN15 MOV R1,DWLIST .ENDC MOV R1,ERRMOD ;INIT THREAD WORD OF ERROR MODULE MOV #ITIME0,R0 ;INIT THREAD WORD OF TIMERS TTIN20 = . MOV R1,(R0) ADD #ITIMSZ,R0 CMP R0,#ITIMFB BLO TTIN20 MOV #TTYPRT,R0 ;CLEAR BLOCK OF VARIABLES TTIN25 = . CLRB (R0)+ CMP R0,#QLAST BLO TTIN25 MOV ILEFIT PU ;4)(R),R3D(EIIL F OV M E BLTAD ILEFIO TEXND IET;S R3 L AS SSREDD AERFFBUA AT DET;G 4 ,R4)(RTADA V MO T IS L/O ITERI WSCDIH US;P P)(S,-R4 V MO . =T CWIS D; D RETOES ROT NND AEDUSS IR4 ; ; - -ITEXN PO UNSIOITNDCO ; ; S ESDRADT IS L/O ITERI WSCDIS INTAON CR4 ; V)LE+ T NI U *(2E BLTAO TEXND IELEV/LITUNS INTAON CR3 ; RYNT EONT IS LOFS ESDRADS INTAON CR0 mSCUN O BL SPUNK)OR WESDOO WH( ? SKTAE OR CORY LAEROV; INTMOV,#R4 PBCM SPUN 1.S ROR FOK OCBLT EX NEDNET N'DO; AYRLOV FG.I SPUN S ESGRRO PING INEUQUS AUSATSTT SE; 4)(RATST,T#1 VBMO SPUN ; =. 20SAUN SPUN R.ROER. NO; 10SEUN E BN SPUN D?DEENSPSU- 4 S=TUTA SHE TIS; #4),R4T(TATS PBCM ; S PPTO l DATE: 25 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF SUSPND .REF STACK ; SUSP ; SUSPND =.  #TTYPRT,R0 ;SET UNIT STATUS FLAGS TO NOT BUSY MOV #-1,R2 TTIN30 = . MOVB R2,(R0)+ CMP R0,#TTO1ST BLO TTIN30 TTIN35 = . CLRB (R0)+ ;SET FIRST REQUEST FLAGS CMP R0,#TTORPT BLO TTIN35 MOV #TTYON,R0 ;SET TTY ON/OFF FLAG TO OFF TTIN40 = . MOVB R1,(R0)+ .IFZ MSGBUF CMP R0,#OLSTAD .ENDC .IFG MSGBUF ; ;- -RYNT EONUPS ONTIDION C ;; WTSCDIC, P SR J ;; --E NCUEEQ SNGLIAL C ;; STUEEQ RTERI WSKDIE AK M ;, ENTH; ERFFBUE ITWRC IS DTOA AT DSG M ;D ANT IS LSTUEEQ RTY TVEMOO TNETIOUBRSU- -WTSCDI ; ;; GEPA . M TEYS SUF BSG MOR FNGWILOOL FEMSS;A UFGBMS FG.I RNTURE ; C P TS R S ARCH" "^O TWF OST 1OR FPETYR HA CET;S 1)(RPETYCH.,#6 VBMO ^" " AUTTPOU ;5)iK OC.L SPUN L.GALEIL S.YE; 30SEUN I BH SPUN ERMBNUK AS TALEG LOP T >K#AS TIS; KSAS,TR4 PBCM SPUN ALEGLL I. =0 #SKTA; 30SEUN Q BE SPUN D ENSPSUUNO TSKTAF OERMBNUT GE; R4),SPK(ASUT SBBI SPUN ADLOE YT BOR FR4R EACL; R4 R CL SPUN ERSTGIRER ROERR EACL; ) SP-( R CL SPUN h ; ENTRY POINT MOVB @#PS,-(SP) ; PUT PS ON SATCK FOR QSAVE CALL SUSP CLR -(SP) ; SET ARGUMENT FOR RETURN SUSP ; ; THE TASK STACK NOW LOOKS AS FOLLOWS FOR THE CALL TO QSAVE: SUSP ; PC SUSP ; PS SUSP ; ARG (=0) <== SP ; ; THE TOP OF THE SYSTEM CONTAINS THE RETU CMP R0,#NXTSEC .ENDC BLO TTIN40 .IFG MSGBUF MOV #DAVAIL,R0 ;SET DISC FILE AVAIL FLAGS TO AVAIL TTIN50 = . MOVB R1,(R0)+ CMP R0,#DBFULL BLO TTIN50 .ENDC MOV #QLAST,R0 ;SET QLAST TO QFIRST MOV #QFIRST,R1 TTIN60 = . MOV R1,(R0)+ TST (R1)+ CMP R1,#QLAST BLO TTIN60 JSR R5,POPR ;R(RBRODTT,@'^ # B OV M UTEOIM TUTNP IOR FDECOR ROERT SE ;0)(RORRR,ETORIER # OV M S ESDRADT IS LUTNP INTREUR CET;G 0 ,R5)(RADSTIL V MO ) O. NITUNN IRS OERIM(TE YT BAGFLO ER;Z FBIMIT RBCL G LA FUTEOIM TET;S 1)(RLGIFTO CBIN PTRUERNT IBD KLEABIS;D ) R5R(CSTI@T RBCL R5 L AS NGXIDEINE BLTAD OR WOR F*2ITUN ; R51, R OV M E YT BAGFLR METIM RO FO. NITUNT GE ; R1B,MFTI I B OV M . = e PS VESA; 3 ,RPS@# VBMO S TUTA SORRR ETOX DEIN; SKTA=U RRUE ERMBNUK AS TTOX DEIN; +2RNRT=U K ASUT SPUN . NTMEGUARN URET RTOX DEIN; +4VESA=U N TRUR SPUN C ND.E SPUN C ND.E SPUN E IZ SCKTASA; 2.=1 E AVUS SPUN . EGdRN ADDRESS TO USE ; IF THE CALL IS FROM A SYSTEM ROUTINE. ; JSR PC,QSAVE ; CALL ON QSAVE TO PRESERVE ENVIRONMENT JMP DSPTCH ; GO TO DISPATCHER TO GET NEXT TASK. .PAGE ;*********************************************************************** ; * ; E X I T * ; ESTORE REGISTERS RTS PC ;RETURN .PAGE .CSECT ; ; ; PRTINT -- TTY PRINTER INTERRUPT ROUTINE ; ; CONDITIONS UPON ENTRY -- ; ; TTY UNIT NO. IS CONTAINED IN BITS 0-3 OF PS ; AS PROVIDED BY INTERRUPT VECTOR FOR ; INTERRUPTING UNIT ; ; ROUTINE IS ENTERED AT PRIORITY LEVEL OF UNIT VECTOR ; ; PRTINT = . SAVE ;CALL SAVE ROUTINE MOVB PS,R1 TOYITT ; T ESQUREE TH ; F ORTBO AANT ECFF ATOT SES IPETYR TEACARCH ; - -ITEXN PO UNSIOITNDCO ; ; TEBYG LA FERIM TUTNP IIND NEAINTCOS IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ;O ITTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTROT OUMETIT PUIN- -TOYITT ; ;; GEPA . N URET R ; C P TS R . =5 O6TY T YPRTERC, P SR J STUEEQ RUTEOYP TDECOR ROa RLL AVESA; HRUS,PR5 R JS SPUN N IORSVEY LAEROVF ILYON; AYRLOV Z FN.I C ND.E ; . =8 E AVUS ; P)(S,-R4 V MO ; P)(S,-R3 V MO SPUN ; P)(S,-R2 V MO RSTEISEG REDIRQURE VESA; P)(S,-R1 V MO SPUN N IORSVEY LAEROVN-NOF ILYON; AYRLOV FZ.I VESARG Z FN.I D.VESAS ERSTGIREF OER` * ; PROGRAM IDENTIFICATION: EXIT * ; * ; PURPOSE: THIS ROUTINE IS USED TO TERMINATE THE CURRENTLY ACTIVE* ; TASK. ANY IIO IN PROGRESS WILL BE IGNORED. THE TASK * ; STATUS, ACTIVE, AND CURRENT TIMER VALUE ARE ALL SET * ; TO ZERO, AS IS MFLAG. THE TASK'S THREAD WORD IS *EXIT ; SET TO ONE TO PERMIT REQUEU ;GET PS PROVIDED BY INT VECTOR BIC #177760,R1 ;UNIT NO. IS IN BITS 0-3 OF PS MOV R1,R5 ;USE UNIT NO. AS INDEX TO ASL R5 ;WORD TABLES JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TSTB TOFLAG(R1) ;HAS TIMEOUT ALREADY OCCURRED? BNE PRTA05 ;YES, IGNORE THIS INTERRUPT MOV OTIMER(R5),R4 ;GET ADDRESS OF TIMER FOR THIS UNIT MOVB #TTOTIM,TCNTR(R4) ;PUT COUNT INTO TIMEERE AK M ; P)(S,-ODRMER # OV M 5 O6TY T NE B ? QYPRTERN ILEDUMOR ROERS I ; #1D,MORR E MP C . =0 O6TY T ; ;0 O4TY T R B STUEEQ RUTEOYP TDECOR ROERE AK M ; 60YOTTC, P SR J O N ; ) R3O(TTRS F B NC I ES Y ; 0 O4TY T NE B ? EDYP TLYUSIOEVPRN EE BSG MORRR EAS H ; ) R3O(TTRS F B ST T . =0 O5TY TN URET R ; C P TS R ) R3G(LAOF T B LR C . =5 O4TY T]MBNUT ULFADE; =0 E AVUS T INPOY TREN; =. NDSPUN ; R TEINPOK ACST= <= PC ; N TRUR ; K ASUT ; ; S:OWLLFOS AKSOO LCKTA SRYNT EON; ; SPUN C ND.E SPUN ; R OP,PHRUS,PVYSOUN EF.R SPUN ; AYRLOV Z FN.I NDSPUN EF.D E AG.P \ING. *EXIT ; * ; USAGE: EMT EXIT OR CALL EXIT * ; * ; NOTE: THIS ROUTINE SWITHES TO THE SYSTEM STACK AND * ; PASSES CONTROL TO THE DISPATCHER. * ; * ; PROGRAMMER: 53 R MOVB (SP)+,PS ;RELEASE LOCKOUT MOVB #NTRYS,TTORPT(R1) ;SET REPEAT COUNT TO NO. OF TRYS MOVB CHTYPE(R1),R4 ;GET CHARACTER TYPE ASL R4 ;MAKE INDEX FOR BRANCH TABLE = 2*CHTYPE JMP @PRTA10(R4) ;BRANCH ON CHAR TYPE PRTA05 = . CLRB TOFLAG(R1) ;CLEAR TIMEOUT FLAG JMP PRTA93 ;GO RETURN ; ; ; BRANCH ON CONTENTS OF CHTYPE ; PRTA10 = . .WORD PRTA15 K ACSTF OFE OD CORRR EOP P ; )+SP ( ST T E IMQTC, P SR J P)(S,-IMOTTT # OV M ERIM TUTTPOUE EUQU; ) SP-(),R5R(METI O OV M INGA AARCHT PUUT O ;) R5R(DBTO@T1, R B OV M . = 40YOTT 35YOTT BR T OUCKLOE ASLERE; PS+,P)(S VBMO . = 38YOTT 45YOTT BR 3)(RSTI1TT RBCL 3)(RSTO1TT RBCL SYBUT NOO TITUND OLT SE; 3)(RRTYPTT1,#- VBMO . = 35YOTT ERSTGIY **********************************************************************;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S27 : TEDA ; * 53: ERMMRAOGPR ; * X * ; DATE: 30 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF EXIT .REF COUNTR,MFLAG ;  ;INTERRUPT FROM CHAR OF OUTPUT MSG .WORD PRTB10 ;ECHO OF INPUT CHAR .WORD PRTB30 ;ECHO OF LF .WORD PRTB40 ;ECHO OF CR .WORD PRTB50 ;ECHO OF "U" .WORD PRTB60 ;ECHO OF "^" .WORD PRTB80 ;ECHO OF 1ST "^" .WORD PRTB90 ;ECHO OF "\" .WORD PRTC10 ;ECHO OF EOM CHAR .WORD PRTC20 ;INT FROM OUTPUT OF LF .WORD PRTC30 REE ORSTRE; R3+,P)(S V MO G INSSCERO PUTNP IORT PUUT OITIN; T NIOI,TPC R JS R TEISEG RVESA; P)(S,-R3 V MO T OUCKLOE ASLERE; PS+,P)(S VBMO ) R5D(TALS,I2)(RADSTIL V MO ) R5D(TALS,O2)(RADSTOL V MO R5 L AS 5 ,RR1 V MO R2 L AS 2 ,RR3 V MO ) R1T(1STI,T3)(RSTI1TT VBMO ) R1T(1STO,T3)(RSTO1TT VBMO ITUNW NEO TNTMEONIRNV EVEMO, NO; ) R1T(PRTY,TU ; *. ROZEN-NOS IVESARGR TEMERAPAN GEYS SHE TIFD RETOES R ; * BEL IL WEYTH D.PNNS UBYD SE URE AR41- RRSTEISEG R ; * E.INUTROT UPRRTEINR OETPLOM C ; */O IANR HEIT EISM RAOGPRG INLLCAE THF I=0T US MRNRT U S:TENO ; * ; SPUN * ERMBNUK AS TALEGLL I=3 ; SPUN *Y)LAEROVG(ON LTOD DEENSPSUD-LEELNCCAK AS T=2T EXIT .IFNZ OVRLAY ; EXIT .REF QOVNXT ; EXIT .ENDC EXIT ; EXIT =. ; ENTRY POINT .LOCK TOPPS ; MOV ACTIVE,R0 ; GET ADDRESS OF PROGRAM HEADER BEQ EXIT00 ; NOTHING ACTIVE. GO TO DISPATCHER. EXIT CLR R1  ;INT FROM OUTPUT OF CR .WORD PRTC40 ;ECHO OF CR AFTER EOM .WORD PRTC50 ;ECHO OF LF AFTER EOM,CR .WORD PRTC60 ;INT FROM OUTPUT OF RUBOUT TO TURNON TTY ; ; ; PROCESS INTERRUPT FROM CHAR OF OUTPUT MSG ; PRTA15 = . INCB TTCURS(R1) ;INCREMENT CURSOR CMPB TTCURS(R1),#LINELN ;END OF LINE? BHIS PRTA30 ;YES PRTA17 = . MOV OLSTAD(R5),R0 ;NO, GET CURRENT LIST ADDRES3)(RRTYPTT VBMO S YE; 38YOTT E BG ? SYBUT NI UEW NIS; 1)(RRTYPTT TBTS T OUOC,LPC R JS PTRUERNT IANR FOW DOIN WKEMA; PS+,P)(S VBMO 30YOTT T BG R4 C DE + 0)(R R CL S UEUE QITUND OLR EACL; )+R5,(R0 V MO + 2)(R T TS . = 32YOTT ) R2,(5)(R V MO 32YOTT Q BE ITUNW NEO TTSESQURED UEUE QVEMO; 2)(R,@0)(R V MO . Q ; SPUN * ) =4OT(NUSATSTK AS TALEGLL I=1 ; * EDORON HSTUEEQ R=0 ; * : USATSTD NEURET RHE TIS RRUE ; * K.AS T ; D*UEUE QTYORRI PSTHEIG HHE TTOL RONTCOS AS P=1 ; * R.LEAL CHE TTON URET R=0 ; * D:PNNS UOMFRN URET RP ; CLEAR R1 FOR BYTE LOAD EXIT BISB TASKNO(R0),R1 ; GET TASK NUMBER FORM TASK HEADER EXIT MOV #1,(R0) ; PUT A 1 IN THE THREAD WORD (QUEUABLE) EXIT CLRB TSTAT(R1) ; SET TASK STATUS TO INACTIVE (=0) CLR ACTIVE ; REMOVE ACTIVE TASK'S ADDRESS CLR COUNTR ; CLEAR CURRENT TIMER VALUE CLR MFLAG ; REMOVE ALL SOFTWARE LOCK OUTS, IF ANY. CLR TSTACK(R0) ; S .IFG MSGBUF BIT #000001,R0 ;IS DATA IN WORKING OUTPUT BUFFER? BEQ PRTA20 ;NO, DATA IS IN USERS BUFFER DEC R0 ;STRIP OFF LSB MOV R0,R4 ;TO GET LIST ADDRESS ADD #DATA,R4 ;SET POINTER TO MSG DATA IN OUTPUT BUF BR PRTA25 .ENDC PRTA20 = . MOV DATA(R0),R4 ;SET POINTER TO MSG DATA IN USERS BUF PRTA25 = . INC CHCNT(R4) = 30YOTT T OUOC,LPC R JS 4 ,R#4 V MO T NI ULD OOR FSTLA QTOX DEINT SE; 5 ,RSTLA#Q D AD ITUND OLR FOT RSFI QTOX DEINT SE; R0T,RSFI#Q D AD 0 ,RR5 V MO R5 L AS ITUND OL8*T GE; R5 L AS T NI UEW NOR FSTLA QTOX DEINT SE; 2 ,RSTLA#Q D AD R2 L AS R2 L AS R2 L AS ITUNW NE8*T GE; 2 ,RR1 V MO TY TEMSTSYN OSG MORRR EPETY; MHE TLSRONTCON TRUR ; * EDEUQUREE BTOK AS THE TOF# K AS THE TISK ASUT ; * REHE W ; * ; * ) ANTROR(F R)ER,URNRT,USKTA(UNDSPUN LLCA. 2) ; * ; * RRUE+,P)(S V MO ; * LCLEAR STACK POINTER FOR DISPATCHER EXIT MOV STACK,SP ; RETURN TO SYSTEM STACK EXIT .IFNZ OVRLAY ; EXIT CMPB R1,#OVTMIN ; IS THIS AN OVERLAY TASK? EXIT BLO EXIT00 ; NO - ALL DONE. EXIT TSTB IOSTAT(R1) ; YES - ANY I/O IN PROGRESS? EXIT BNE EXIT10 ; YES. CAN'T EXIT AN OVERLAY NOW. EXIT ;INCR CHAR COUNT CMP CHCNT(R4),(R4) ;HAVE ALL CHAR BEEN OUTPUT? BHIS PRTA40 ;YES ADD CHCNT(R4),R4 ;ADD CHAR COUNT TO POINTER MOVB MSGDAT(R4),@TTODBR(R5) ;OUTPUT NEXT CHAR CMPB MSGDAT(R4),#CR ;IS CHAR A CR? BEQ PRTA35 ;YES BR PRTA37 ;NO, GO RETURN PRTA30 = . MOVB #CR,@TTODBR(R5) ;OUTPUT A CR PRTA35 = . MOVB #10.,CHTYPE(R1) ;SET CHAR TYPE 0 O6TY,TPC R JS E ULOD MORRR EIN. NOT NI UEW NUT;P 6 D+MORR,ER1 V MO STLIT ENRRCUO NT IO. NITUNW NET PU; ) R01(M+TEYS,SR1 VBMO O. NITUNW NET GE; 1 ,R2)(REVYDPH VBMO ) R5R(CSTI@T RBCL ITUNT NCFUDEF OTSUPRRTEINE BLSADI; ) R5R(CSTO@T RBCL T BIL AIAVT NOE ICEV D ; ND AIT BSE UINE ICEV DTENAERLT AET S ;4)(REVYDPH0,0020#1 S BI . = 26YOTT 22YOTT BR . NOT NI UALICI NDSPUN T EM ; * ) SP-(N,TRUR V MO ; * ) LYMBSEAS ( ) SP-(K,ASUT V MO. 1) ; * ; * S: INETIOU RISTHO TGEKAIN LHE T E:AGUS ; * ; SPUN *. ONSIENSPSUS ITT ASKTAE THF OELEV LHE TASE AM SHE T ; SPUN *ISD SE UH INCB TSTAT(R1) ; SET RPOM'S STATUS EXIT CLRB @#PS ; ALLOW INTERRUPTS EXIT MOV R1,-(SP) ; PUT TASK NO. ON STACK FOR QOVNXT JSR PC,QOVNXT ; CALL ON RPOM FOR OVERLAY ASSIGN. .ENDC EXIT EXIT00 =. ; EXIT JMP DSPTCH ; CALL ON THE DISPATCHER TO TO OUTPUT MODE CR PRTA37 = . JMP PRTA85 ; ; DO POST PROCESSING FOR A REQUEST ; PRTA40 = . MOV OTIMER(R5),-(SP) ;DEQUEUE TIMER MODULE FOR THIS UNIT JSR PC,DQTIME TST (SP)+ .REF INPFLG ; FLAG FROM INPUT IF 0 ALLOW FOR BELL 3/21/73 TST INPFLG ; IF NONZERO SETUP FOR TTYIO'S PROC 3/21/73 BEQ WBL001 ; 3/21/73 CLOG LTENAERLT AET GS,YE; 4 ,RR2 V MO NO; 26YOTT Q BE ? SE UINY ADREALV DEE ATRNTEALS I ;4)(REVYDPH0,0020#0 T BI NO; 50YOTT E BN D?LIVAE YP TCEVIDES IS,YE; 2)(REVYDPH0,40#7 T BI NO; 50YOTT E BN E?BLLAAIAVV DET ALS I ;2)(REVYDPH0,0000#1 T BI CEVIDE2*= X DEIN; R2 L AS O. NCEVIDEL CAGILOT ALT GE; 2 ,R4)(REVTDAL V MO NO; 50YOTT Q BE EELEV LTYRIIOPRE TH E.EUQUY ITORRI P AINK AS T ; SPUN *EDNDPEUS SLYRITAUNOL V ACELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * UEUE QTYRIIOPRE ARTWOF S ; * AINK AS TEDNDPEUS S ACELA P -NDSPUN: ONTICAFITIENIDM RAOGPR ; * ; * D N P S N U ; DSCHEDULE ; NEXT TASK .IF DF FUTURE ; 3/12/73 EXIT10 =. ; THE NEXT TASK. EXIT DECB TSTAT(R1) ; SET STATUS FOR EXIT REQUESTED-OVERLAY EXIT BR EXIT00 ; GO FINISH UP. EXIT .ENDC ; 3/12/73 .PAGE RB @TTICSR(R5) ;DISABLE KBD INTERRUPT WBL001: ; 3/21/73 CLRB @TTOCSR(R5) ;DISABLE PRT INTERRUPT MOV ERROR(R0),R3 ;ANY ERROR FLAGS IN ERROR WORD? BEQ PRTA41 ;NO MOVB ERRTSK(R0),R4 ;IS THERE AN ERROR TASK IN LIST? BEQ PRTA41 ;NO MOV R4,-(SP) ;PUSH ERROR TASK NO. ON STACK .IFG DPRTY CLR -(SP) T?ISEXE ICEV DTENAERLT AESDO; ) R4V(DEHY,P000004 # IT B S LEAB TRDWOG INEXND IOR F*2O. NOG L ; 4 R SL A . =2 O2TY T. NOE ICEV DALICOG LET G ; R4),R0E(ICEV D B OV M 6 D+MORR E LR C E ULOD MORRR EIN. NOT NI UCTUNEF DUT P ; +4ODRMER3, R OV M E ULOD MORRR ETOE OD CORRR E2;D+MORR,ETOROER # OV M T IS LING LA FORRR EUTEOIM TET S ;0)(RORRR,ETOROER # OV M . = 20YOTT SSREDD ASTLIT PUINT ENRRCUT GE; 0 ,R5)A **********************************************************************;* E AG.P SKFT C ND.E SKFT UPH ISIN FGO; 00KEFT BR SKFTNGDIEN P/O I -EEFRR FOS TUTA SSKTAT SE; ) R0T(TATS2,#- VBMO SKFT S ESGRRO PINO I/; R5 C DE: M1KEFT SKFT. YSLA OTHWIG LA F/O IUTBO ARYOR WLYON; AYRLOV Z FN.I SKFT . @ EXIT ;*********************************************************************** ; A B O R T * ; * ; PROGRAM IDENTIFICATION: ABORT * ; * ; PURPOSE: TERMINATE THE EXECUTION OF A TASK, PRINT AN ERROR * ; MESSAGE, AND PLACE THE TASK ;PUSH IPRTY ONTO STACK .ENDC .IFG ARG MOV R3,-(SP) ;PUSH ERROR CODE ONTO STACK .ENDC CLR -(SP) ;PUSH IRTRN ONTO STACK JSR PC,QUEUE ;QUEUE ERROR TASK TST (SP)+ ;POP ERROR CODE OFF STACK PRTA41 = . MOVB LEVEL(R0),R2 ;GET LEVEL MOV #2,R4 ;SET REGISTER FOR INPUT DEQUEUING TSTB TTYPRT(R1) ;DID UNIT JUST FINISH INPUT? (RADSTIL V MO . =0 O1TY T0 O2TY T R B DCEN . SB LFF OIPTR S ; 0 ,R010000 # IC B F BUSG M G IF . S ESDRADT IS LUTTPOUT ENRRCUT GE; 0 ,R5)(RADSTOL V MO UTNP I ; 0 O1TY T EQ B T?PUINO CH EORT PUUT OOR FUT OMETIS I ; ) R3T(PRTY T B ST T . =5 O0TY T ROZET NOS IIT ; 0 O4TY T MP J ROZES IIT ; 5 O0TY T LE B NTOU CATPERER EC D ; ) R3T(RPTO T B EC D =ERUSO TRNTURE; 00KEFT BR SKFT R BEUM NSKTAL GALEIL; R5 C IN: 10KEFT SKFT S TUTA SSKTAL GALEIL; R5 C IN: 20KEFT SKFT K.AS TVETIAC; R5 C IN: 30KEFT SKFT ; SKFT S ONTIDION CORRR EOR FREHE; SKFT < STATUS IN THE ABORT * ; CONDITION. * ; * ; USAGE: THE USAGE OF THIS ROUTINE IS EITHER: * ; * ; 1). MOV ATASK,-(SP) (ASSEMBLY) * ; EMT ABORT * ;  BEQ PRTA42 ;YES .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BIT #000001,OLSTAD(R5) ;WAS DATA IN WORKING BUFFER? BNE PRTA43 ;YES, DEQUEUING NOT REQUIRED .ENDC CLR R4 ;NO, SET REGISTER FOR OUTPUT DEQUEUING PRTA42 = . JSR PC,DQLIST ;DEQUEUE LIST JUST PROCESSED PRTA43 = . CMPB TYPE(R0),#2 ;BRANCH ON EXIT TYPE BHI PRTA44 ; T) O. NITUNN IRS OERIM(TE YT BAGFLO ER Z ; B MFTI O B LR C T PUUT OSTLAR HA CET G ;1 ,R5)(RBRODTT @ B OV M 5 R SL A G INEXND ILEAB TRDWOR FO2 T*NI U ; R53, R OV M NETIOU RT.INR FOG LA FUTEOIM TET S ; ) R3G(LAOF T B NC I TEBYG LA FERIM TOMFR. NOT NI UET G ; R3B,MFTI O B OV M . = TOYOTT ; ITUNY TT ; EMSTSYE THN OEDEUQUS IUTTOINPRE OD CORRR EAN ; . EDCTLESES IE,BLLAAIAVF IE,ICEV D9 ; SKFT RNTURE; PC S RT SKFT C ND.E SKFT . EG RLL ARETOES RYSWAAL; R OP,PR5 R JS SKFT S ERSTGIREL RANEGEE ORSTRE; VESARG Z FN.I SKFT USATSTR ROERT SE; ) SP2(R-ER,FR5 V MO SKFT TSUPRRTEINW LOAL; PS@#+,P)(S VBMO SKFT T INPOY TR8 * ; * ; 2). CALL ABORT(ATASK) (FORTRAN) * ; * ; WHERE * ; ATASK IS THE NUMBER OF THE TASK TO BE ABORTED. * ; * ; SYSGEN: THE SYSGEN YPE 3 .IFG MSGBUF BLO PRTA47 ; TYPE 1 TSTB TTYPRT(R1) ;TYPE 2, DID UNIT JUST FINISH INPUT? BEQ PRTA4A ;YES, GO UNSUSPEND TASK BIT #000001,OLSTAD(R5) ;WAS DATA IN WORKING BUFFER? BNE PRTA47 ;YES, TASK ALREADY UNSUSPENDED .ENDC .IFZ MSGBUF BLO PRTA46 ;TYPE 1 .ENDC .IFG MSGBUF PRTA4A = . .ENDC JSR PC,TTY TTENAERLT AAN ; TSMPTEATS RYNTR TEAFD REURCC OOT NAS HPTRUERNT IIF ; ; - -ITEXN PO UNSIOITNDCO ; ; E YT BAGFLR METIT PUUT OIND NEAINTCOS IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ;O OTTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTROT OUMETIO CH EUTNP IORT PUUT OTY T--O OTTY T ;; ;E AG.P 45IOTO BR ) SP-(M,TITW#T V MO R METIT AI WE EUQU ;P)(S,-5)(RERIMWT 5ENR ROER; =. 00KEFT SKFT T.ENSCIEQUO TUSATSTS SKTAT SE; ) R0T(TATS RBCL SKFT P. USHNIFIO TREHE; =. 00KDFT SKFT C ND.E ; S PPTO K OC.L SKFT ERSTGIRER ROERT SERE; R5 R CL SKFT R BEUM NSKTAT GE; R0+,P)(S V MO SKFT M PO RLL4PARAMETER '$ABMES' IS USED BY ABORT TO * ; DETERMINE HOW MANY ABORT MESSAGES CAN BE PENDING AT * ; A GIVEN TIME. IF A TASK IS ABORTED AND NO MESSAGE * ; BUFFER IS AVAILABLE, THE TASK WILL STILL BE ABORTED * ; BUT NO MESSAGE WILL PRINTED. * ; * ; * ; UNSPN ; TYPE 2, UNSUSPEND CALLING TASK .IFG MSGBUF BR PRTA47 .ENDC .IFZ MSGBUF BR PRTA46 .ENDC PRTA44 = . JSR R5,PUSHR ;SAVE REGISTERS .IFG MSGBUF MOV R1,R4 ;MOVE UNIT NO. TO TEMP REG .ENDC MOV R0,R1 ;GET ASSUMED LIST ADDRESS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUG SYSTEM TSTB TTYPRT(R4) ;I V MO UTBORUT 1ST PUUT;O) R5R(DBTO@TO,#R VBMO PETYR HA CET;S) R1E(YPHT,C3.#1 VBMO RSHA CUPRMWA. NOT GE ;1)(RONTY,TCHWU#N VBMO C ND.E . = 20ITTO SB LFF OIPTR;S R01,0000#0 C BI S ESDRADT IS LET;G 0 ,R5)(RADSTOL V MO O ;N 20ITTO Q BE ? EDATTINI IBEO TUTTPOUS ;I 1)(RRTYPTT TBTS UFGBMS FG.I . = 10ITTO 45IOTO BR P)(S,-IMITTT # OV M R ME1CA; Y VLQO,DPC R JS SKFT ERMBNUK AS TSHPU; P)(S,-R0 V MO SKFT R TELAR FOK ACSTN OERMBNUK AS TVESA; P)(S,-R0 V MO SKFT TSUPRRTEINW LOAL; S #P,@P)(S VBMO SKFT . UEAL V'SOMRPO TUSATSTT SE; ) R0T(TATS.,#8 VBMO SKFT . -1O TUSATSTT SET BUD EEFR S.YE; M1KEFT E BN SKFT S?ESGRRO PINO I/Y AN; 0)(RATSTIO TBTS SKFT0 * ; REGISTERS: ABORT USES REGISTERS R0 AND R1. THE WILL BE SAVED IF* ; THE SYSGEN PARAMETER 'RGSAVE' IS NON-ZERO. * ; * ; PROGRAMMER: 53 * ; DATE: 20-SEP-71 * ; REVISION: 0 * ; CATAS INPUT BEING PROCESSED? BEQ PRTA45 ;YES ASL R4 ;SET INDEX TO 2*UNIT BIT #000001,OLSTAD(R4) ;NO, OUTPUT. IS LIST IN WORKING BUF? BEQ PRTA45 ;NO MOV (R0),R1 ;YES, ORIG LIST ADDRESS IS IN THREAD WRD .ENDC PRTA45 = . JSR PC,@EXIT(R0) ;CALL I/O COMPLETION ROUTINE ;WITH LIST ADDR IN R1 JSR R5,POPR PRTA46 = . TIE NSPOES RORATEROPE EUQU);SP-(),R5R(METI I OV M S TUTA SRDOAYBKEY TTT SE ;) R5R(CSTI@T4, R B OV M . =0 I2OI T IT BLEABENR DEEA RPTR EACL, NO ; 4 R EC D S YE ; 0 I2OI T NE B R?DEEA RPTY TTM RO FUTNP IIS ; ) R3,(000004 # IT B TSBIE BLNA EDR RPT& T IND ARBOEY KADLO ; R41,10 # OV M D REEACLR CSF OT"BIE ON"DT HA TRESUIN ;4 ,R5)(RBRIDTT @ B OV M O CH EALRMNOR FOE YP TARCHT SE ; 1)(RPETYCH1, # B OV M - ; AYRLOV Z FN.I SKFT OMRPL AL CTOY NL OREHE; =. 00KCFT SKFT E OM HGO; 00KDFT BR SKFT D.REEACLE ARR TEINPOK ACSTE THD AN; 1)(RCKTATS R CL SKFT ELEV LPU CNTREUR CR,METIT ENRRCU; ) R1T(USCP RBCL ; SKFT HE TS,SKTAT ENIDES RRECOR FO; 1)(RERIMCT R CL ; SKFT R TE,LOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF ABORT .REF MFLAG ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT .REF LERTYP ; ABRT .ENDC  MOVB SYSTEM(R0),R4 ;WAS REQUEST MADE BY TASK? BEQ PRTA47 ;NO, BY SYSTEM DECB IOSTAT(R4) ;YES, DECR TASK I/O STATUS IN TASK TABLE .IFNZ OVRLAY BNE PRTA47 MOV R4,-(SP) ;TASK NO. TO STACK JSR PC,RELTSK ;RELEASE TASK .ENDC ; ; SEARCH QUEUES FOR NEXT REQUEST TO BE PROCESSED ; PRTA47 = . CLR R4 ;SET Q POINTER FOR PRIORITY OUTPUT MOV #1 H TCWI SUTBORUT 1SR EACL ; ) R1O(TRRS F B LR C AGFLD DEEEXC EARCHX MAR EACL ; 1)(RCHAX M B LR C R TEUNCOR HA CZELIIAITIN ; 3)(RNTHC C LR C S ESDRADR FEUF BTADAS ERUST GE ; R3),R0A(AT D OV M SSREDD ASTLIT PUINT ENRRCUT GE ; R0),R5D(TALS I OV M . = 10IITO RNTURE ; ) R2 ( MP J . = 50IOTO K ACSTF OFE OD CORRR EOP;P + P)(S T TS METI,QPC R JS PTRUERNT IERNTRI PTY TLEABEN)LAR METI CND ASTPU CEDNEY MA; SKFT C ND.E SKFT K OR WDOM PO RET LGO; 00KCFT ISBH SKFT K?AS TAYRLVE OANS HI TIS; INTMOV,#R0 PBCM SKFT . IST IIFE OM HGO; 00KEFT I BM SKFT L AL COMRPDQA R FOK ECCH; R0 T TS SKFT ; AYRLOV Z FN.I SKFTK.AS T( ABRT .IFNZ OVRLAY ; ABRT .REF DQOVLY,PUSHR,POPR ; ABRT .ENDC ABRT ; ; ON ENTRY THE STACK LOOKS THIS WAY: ; ; TASK NUMBER ; PC <=== STACK POINTER ; ABORT =. ; ENTRY POINT ASAVE =0 ; DEFAULT NUMBER,R2 JSR PC,GETQX CLRB TTYPRT(R1) ;SET UNIT STATUS FLAG TO INPUT JSR PC,LOCOUT ;LOCKOUT INTERRUPTS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM PRTA49 = . MOV R5,R3 ;SET UNIT LEVEL INDEX TO PRIORITY INC R3 TSTB DAVAIL(R3) ;IS PRIORITY DISC FILE FOR UNIT AVAIL? BEQ PRTA50 ;NO, GO CHECK PRIORITY OUTPUT CORE Q CMPB NXTMSG(R3),NXTSEC(R3) ;A ;5)(RSROCTT,@00#1 SBBI . = 45IOTO P)(S,-IMOTTT # OV M T NI UOR FERIM TUTTPOUE EUQU; ) SP-(),R5R(METI O OV M SG MOFR HA CST 1UTTPOU ;) R5R(DBTO@T4, R B OV M . =2 O4OI TS YE ;1)(RPETYCH.,10 # B OV M NO ; 2 O4OI T NE B CRA T IIS ; R #C4, R B MP C G MSF OARCHT 1ST GE ; R4),R4T(DASG M B OV M R TEUNCOR HA CZELIIAITIN ; 4)(RNTHC C LR C . = 40IOTO SSREDD AERFFBUA AT DRSSE U%EDNDPEUS S AOFE AR CKETAO TREHE; =. 00KBFT SKFT E)BLUAUE(Q 1TOD OR WADRETHT SE; ) R1,(#1 V MO: 40KAFT SKFT Y.ARSSCENEF IT'AS'LT SERED AN; ) R2T(AS,LR4 V MO SKFT RDWOD EAHR TKSAS TUSIOEVPRO NT IRDWO; 40KAFT E BN SKFT D EAHR T'SSKTAS HI TOFS NTTEON CVEMO; ) R4,(1)(R V MO: 30KAFT SKFT D OR WADRETHT SEREO GENTH; 40KAFT BR SKFT STIR FTO; ) R2$ OF REGISTERS SAVED .IFNZ RGSAVE ; .IFZ OVRLAY ; ONLY IF NOT OVERLAY VERSION ABRT ASAVE =4 ; MOV R0,-(SP) ; SAVE R0 MOV R1,-(SP) ; SAVE R1 .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ASAVE =6 ; ABORT MESSAGES USE AN ADDITIONAL REG ABRT MOV R2,-(SP) ; SAVE R2 (ONLY FOR ABORT MESSAGES) ABRT .ENDC NY MESSAGES IN PRIORITY FILE? BNE PRTA95 ;YES, GO READ DISC TSTB DBFULL(R3) ;MAYBE, IS DISC FILE FULL? BGT PRTA95 ;YES, GO READ DISC BR PRTA55 ;NO, GO CHECK FOR PRIORITY INPUT .ENDC PRTA50 = . MOV QFIRST(R4),R0 ;ANYTHING IN PRIORITY OUTPUT Q? BNE PRTA65 ;YES PRTA55 = . CMP (R4)+,(R4)+ ;NO, SET Q POINTER FOR PRIORITY INPUT MOV ET;G 4 ,R0)(RTADA V MO . =0 O3OI TC ND.E 40IOTO BR STLIT AS PERNTOI PVEMO ; 4 ,RTADA # DD A T IS LOFG INNNGIBEO TERNTOI PET;G 4 ,RR0 V MO SB LFF OIPTR;S R0 C DE ERFFBUS ERUSN IISA AT DO,;N 30IOTO Q BE ? ERFFBUG INRKWON ISTLIS ;I R01,0000#0 T BI UFGBMS FG.I SSREDD ASTLIT PUUT ONTREUR CET;G 0 ,R5)(RADSTOL V MO UTTPOUR FOE YP TARCHT SE ; !T(AS,LR2 D AD SKFT T INPOO TSTLAT SERE, SEELG INTHNO; ) R2T(AS,LSTIR#F V MO SKFT . EUQUE THN IISE LS ENGHIYTAN; 40KAFT E BN SKFT IFE SEN HE TT,RSFIT SERE S.YE; 2)(RSTIR,F1)(R V MO SKFT T.NOF ICHANBR E.EUQU; 30KAFT E BN SKFTE THN I 1O. NSKTAR TEAFT GHOU SHE TIS; 2)(RSTIR,FR3 P CM SKFT R ROER. NO; 20KEFT Q BE SKFT ?  ABRT .ENDC ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION ABRT JSR R5,PUSHR ; SAVE ALL 6 ABRT ASAVE =12. ; SIZE OF SATCK. ABRT .ENDC ABRT .ENDC ATASK =ASAVE+2 ; STACK INQFIRST(R4),R0 ;ANYTHING IN PRIORITY INPUT Q? BNE PRTA75 ;YES .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM DEC R3 ;SET UNIT/LEVEL INDEX TO NORMAL TSTB DAVAIL(R3) ;IS NORMAL DISC FILE FOR UNIT AVAIL? BEQ PRTA60 ;NO, GO CHECK NORMAL OUTPUT CORE Q CMPB NXTMSG(R3),NXTSEC(R3) ;ANY MESSAGES IN NORMAL FILE? BNE PRTA95 ;YES, GO READ DISC TSTB DBFULL(R3) ) R1E(YPHT C B LR C . = 20IOTO ES;Y 10IITO Q BE D?TEIAITINE BTOT PUINS ;I 1)(RRTYPTT TBTS H TCWI SUTEOIM TST 1ARLE;C 1)(RTOSTFR RBCL ) R4R(NTTCM,TITW#T VBMO R METIT AI WETES;R 4 ,R5)(RERIMWT V MO O ;N 10ITTO E BN ? OND NEUR TITUNS ;I ) R1N(YOTT TBTS ITUNR FOT UNCOT EAEP RET;S) R1T(RPTO,TYSTR#N VBMO CKTA SOP PND ASSREDD ARNTURET GE ; 2 ,R)+SP ( OV M UEUE QHE TINL ILSTK AS TIS; 1 ,#1)(R P CM S PPTO K OC.L: 20KAFT SKFT . NDOU FOT NSKTA T.EF LNENO; 20KEFT BR SKFT . CKHE CGO, FTLEE OR MIF; 10KAFT E BN SKFT ADRETHE THN ISSREDD AXTNET GE; 3 ,R3)(R V MO SKFT 4 RINS ESDRADS HI TVESA; 4 ,RR3 V MO SKFT S.YE; 20KAFT Q BE SKFT ? EKSEE WSKTAE THDEX TO GET TASK NUMBER CLR R0 ; CLEAR R0 FOR BYTE LOAD ABRT BISB ATASK(SP),R0 ; GET NUMBER OF TASK TO ABORT ABRT BEQ ABRE10 ; TASK #=0 IS ILLEGAL ABRT CMPB R0,TASKS ; IS TASK#> LARGEST LEGAL TASK NUMBER ABRT BHI ABRE10 ; MOVB @#PS,-(SP) ; SAVE PS .LOCK TOPPS ; MOVB TSTAT(R0),R1 ; GET TASK STATUS  ;MAYBE, IS DISC FILE FULL? BGT PRTA95 ;YES, GO READ DISC SUB #6,R4 ;ADJUST Q POINTER BR PRTA70 ;GO CHECK FOR NORMAL INPUT .ENDC PRTA60 = . SUB #6,R4 ;SET Q POINTER TO NORMAL OUTPUT MOV QFIRST(R4),R0 ;ANYTHING IN NORMAL OUTPUT Q? BEQ PRTA70 ;NO, GO CHECK FOR NORMAL INPUT PRTA65 = . MOVB (SP)+,PS ;RELEASE LOCKOUT INCB . = ITINTO ;D RETOES ROT NND AEDUSE AR4 ,RR32, R ;. NOT NI*U 2NSAINTCO5 R ;. NOT NI UNSAINTCO1 R ;S ESDRADT IS LNSAINTCO0 R ;; --T XI EONUPS ONTIDION C ;; Y LLFUCTPEES RUTTPOUR OUTNP IOR F 1OR0 S INTAON CRTYPTT ; SSREDD ASTLIT PUINT ENRRCUS INTAON CADSTIL ; S ESDRADT IS LUTTPOUT ENRRCUS INTAON CADSTOL ; ITUN2*S INTAON CR5 ; O. NITUNE THS INTAONS HI TIS; 3 ,RR1 P CM: 10KAFT SKFT E EUQUN INDOU FOT NSKTA; 20KEFT Q BE SKFT E EUQUN IRYNT ESTIR FOFS ESDRADT GE; R3),R2T(RSFI V MO SKFT X DEIND OR WTOINT IFSH; R2 L AS: 30KZFT SKFT CHARSEO TELEV LTYRIIOPRT GE; 2 ,R1)(RORRIHP VBMO SKFT TSUPRRTEINW LOAL; S #P,@P)(S VBMO SKFT G INCHATSPDIT ENEVPRO TUSATSTT SE; ) R0T(TATS.,#8 VBMO  ASL R1 ; MAKE INTO WORD INDEX ABRT JMP @ABTAB(R1) ; JUMP VIA STATUS. ; THE TABLE 'ABTAB' REQUIRES ONE ENTRY PER STATUS. IT IS USED AS A JUMP ; TABLE WITH THE ENTRIES BEING THE ADDRESSES TO HANDLE THE DIFFERENT ; TYPES OF ABORTS. THE INDEX INTO THE TABLE IS THE TASK STATUS. .IFNZ OVRLAY ; ABRT .WORD ABRFIN ; STATUS -3 RETURN - NO ACTION. ABRT .WORD ABRF TTYPRT(R1) ;SET UNIT PRIORITY TO OUTPUT MOV R0,OLSTAD(R5) ;SAVE CURRENT OUTPUT LIST ADDRESS BR PRTA80 ;GO INIT OUTPUT PRTA70 = . CLRB TTO1ST(R1) ;CLEAR 1ST OUTPUT REQUEST FLAG CMP (R4)+,(R4)+ ;SET Q POINTER TO NORMAL INPUT MOV QFIRST(R4),R0 ;ANYTHING IN NORMAL INPUT Q? BEQ PRTA90 ;NO PRTA75 = . MOVB (SP)+,PS ;RELEASE LOCKOUT MOV R0,ILSTAD( CR1 ; CKTA SONC PVEBO AISS PND AUT OEDCKLOE ARS UPRRTEIN ; ;- -RYNT EONUPS ONTIDION C ;T NIOI,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;T PUUT OORT PUINE IZALTINI ITOE INUTROUB S--T NIOI T ;; ;E AG.P R4N IEXND ITHWIN URET;R PC S RT ERSTGIREE ORSTRE ; 1 ,R)+SP ( OV M 4 R SL A 4 ,RR1 D AD R12, R DD A ) X +ELEV L +ITUN4**( 2 ; 1 R  SKFT . SKTAA E EUQUDEO TREHE; =. 00KAFT SKFT L GALEILE ARS UEAL VUSATSTR HEOTL AL; 20KEFT BR SKFT C ND.E SKFT M PO RONL AL CGO; 00KCFT Q BE SKFT Y)NL OOMRPN IEDQU (9?T IIS; 2 ,R#4 B SU SKFT . YSLAEROV; 00KBFT Q BE SKFT VEHAF I 5OR FCKHE CLYIN ; -2 RETURN - NO ACTION. ABRT .WORD ABRFIN ; -1 RETURN - NO ACTION. ABRT .ENDC ABRT ABTAB: .WORD ABRFIN ; 0. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 1. RETURN - NO ACTION. ABRT .WORD ABRA10 ; 2. DQUEUE AND SET STATUS=7. ABRT .WORD ABRC10 ; 3. SHUT DOWN AND SET R5) ;SAVE CURRENT INPUT LIST ADDRESS PRTA80 = . JSR PC,TOINIT ;INIT NEXT INPUT OR OUTPUT FOR UNIT PRTA85 = . JMP RESTOR ;RESTORE REGS. & RETURN FROM INTERRUPT PRTA90 = . CLRB TTI1ST(R1) ;CLEAR 1ST INPUT REQUEST FLAG DECB TTYPRT(R1) ;SET UNIT TO NOT BUSY PRTA93 = . MOVB (SP)+,PS ;RELEASE LOCKOUT BR PRTA85 ;GO RETURN .IFG MSGBUF PRTA95 = SL A X DEINT UCTRNSCO ; 1 R SL A R TEISEG RVESA ; ) SP-(1, R OV M . = X TQGE ;S UEUE QUTNP IOR F 2 = ; ESEUQUT PUUT OOR F 0 = XREHE W ; X)+ L VELE+ T NI*U(42* (ESBLTAQ O TEXND INSAINTCO4 R ;; --T XI EONUPS ONTIDION C ;; LYVETIECSPRET PUINR OUTTPOUR FO2 R O 0NSAINTCO4 R ;L VELES INTAON CR2 ; O. NITUNS INTAON CR1 ; ;- -RYNTON; R2 C DE SKFT ; AYRLOV Z FN.I SKFT S YE; 00KBFT Q BE SKFT ? 4)(=D DEENSPSUK AS TIS; R2 C DE SKFT 3.R ROER S.YE; 30KEFT Q BE SKFT )?=3 (VETIACK AS TIS; R2 C DE SKFT S.YE; 00KAFT Q BE SKFTSTATUS=7. ABRT .WORD ABRD10 ; 4. SET STATUS=7. ABRT .WORD ABRD10 ; 5. SET STATUS=7. ABRT .WORD ABRFIN ; 6. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 7. RETURN - NO ACTION. ABRT .IFNZ OVRLAY ; ABRT .WORD ABRFIN ; 8. RETURN - NO ACTION. ABRT .WORD ABRD10  . MOVB (SP)+,PS ;RELEASE LOCKOUT INCB TTYPRT(R1) ;SET UNIT STATUS FLAG TO OUTPUT MOV TTOBUF(R5),R4 ;GET OUTPUT BUFFER ADDRESS FOR UNIT MOV DRLIST(R5),R0 ;GET DISC READ I/0 LIST ADDR FOR UNIT ASL R3 ;ADJUST INDEX FOR WORD TABLE USAGE MOV FILEID(R3),(R4) ;PUT FILE ID INTO BUFFER HEADER ASR R3 ;RESTORE INDEX TO BYTE TABLE USAGE MOVB NXTMSG(R3),RLSECT(R4) ;PUT EONUPS ONTIDION C ;; QXET,GPC R JS ; ;- -CEENQUSEG INLLCA ; ;S LEAB TSTLA QND ASTIRQF ;G INEXND IOR FERNTOI PCTRUSTON CTOE INUTROUB S--X TQGE ; ;; GEPA . N URET;R PC S RT R TEISEG RRETOES;R R0+,P)(S V MO UTKOOC LSEEAEL;R PS+,P)(S VBMO . = 10LIDQ 4)(RSTLA,QR0 V MO S ESDRADE BLTAT RSFI QET;G R0T,RSFI#Q D AD ES;Y 0 ,RR4 V MO ? D)UEUE(Q2 S=TUTA SIS; 2 ,R#2 B SU SKFT SKTAE THF OUSATSTE THT GE; R2),R0T(TATS VBMO ; S PPTO K OC.L SKFT R0T SERE; R0 R AS SKFT SSREDD AERADHET GE; 1 ,R0)(RERADHE V MO SKFT EXND IRDWOO NT IKEMA; R0 L AS SKFT S.YE; 10KEFT I BH SKFT R BE  ; 9. TELL RPOM AND SET STATUS=7. ABRT .ENDC ABRT ; ABRT ABRA10 =. ; DEQUEUE MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; PUT TASK NO. ON STACK JSR PC,FRETSK ; USE FRETSK TO DEQUEUE THE TASK ABRT MOVB #340,@#PS ; LOCK OUT AREL SECT ADDR IN BUFFER HDR MOV R0,-(SP) ;MAKE DISC READ REQUEST JSR PC,DISCIO TST ERROR(R0) ;ANY REQUEST ERRORS? BEQ PRTA85 ;NO CLRB DAVAIL(R3) ;YES, CONVERT TO CORE Q FOR UNIT/LEVEL BR PRTA47 ;GO EXAMINE Q'S .ENDC ; ; ; PROCESS INTERRUPT FROM ECHO OF INPUT CHAR ; PRTB10 = . INCB TTCURS(R1) ;INCR CURSOR FOR THIS TTY UNIT PRTB20 = . D EAHR THE TOFD ENE THT IAS;W 10LIDQ E BN ) R4T(RSFI,QR0 V MO 4)(RSTIRQF,@#1 V MO STIRQFY BTOD TEINPOT IS LUEUEEQ;D R0),R4T(RSFI@Q V MO TSUPRRTEINT OUCKLO ; UTCOLOC, P SR J 4 RTOR TEINPOE BLTAQ T GE ; X TQGEC, P SR J R TEISEG RVESA ; ) SP-(0, R OV M . = STLIDQ ;T PUINR FO2 = ;T PUUT OOR F 0 = XREHE W ; X)+ L VELE+ T NI*U(42*S INTAON C UM NALEG LSTGEAR L >K#AS THE TIS; KSAS,TR0 PBCM SKFT C ND.E: 20KZFT SKFT E ON DDYEALR A -KSECCHD UNRO AMPJU; 30KZFT BR SKFT T. IEDNEI S AELEV LTYRIIOPRT GE; 2 ,RR4 VBMO SKFTOMRPM RO FITD EE N IAS. DD AERADHET GE; 1 ,RR3 V MO SKFT . ONY RRCA L.AL COMRPDQA T NO; 20KZFT L BP SKFT ; LL INTERRUPTS ABRT TST (SP)+ ; CHECK RETURNED STATUS ABRT BGT ABRFIN ; NOT DEQUED, CAN'T ABORT, RETURN. ABRT .IFNZ OVRLAY ; ONLY WORRY ABOUT I/O FLAG WITH OLAYS. ABRT BLT ABRD13 ; DEQUEUED BUT I/O IN PROGRESS. ABRT .ENDC ABRT BR ABRD30 ; GO FINISH UP ABRT ; ;  MOV OTIMER(R5),-(SP) ;DEQUEUE ECHO TIMER JSR PC,DQTIME TST (SP)+ BR PRTA85 ; ; ; PROCESS INTERRUPT FROM ECHO OF FORMATTING LF ; PRTB30 = . MOVB #1,CHTYPE(R1) ;SET CHAR TYPE FOR NORMAL ECHO CLRB TTCURS(R1) ;SET CURSOR TO BEGINNING OF LINE BR PRTB20 ;GO DEQUEUE ECHO TIMER ; ; ; PROCESS INTERRUPT FROM ECHO OF FORMATTING CR ; PRTB40 = . MOVB #LF,@TTODBR(R5) ;OUR4 ; ;- -ITEXN PO UNSIOITNDCO ; ;Y ELIVCTPEES R ; S,STLIT ESQURET PUINR OUTTPOUR FO2 R O 0NSAINTCO4 R ;L VELES INTAON CR2 ; O. NITUNS INTAON CR1 ; ;- -RYNT EONUPS ONTIDION C ;; STLIDQC, P SR J ;; --E NCUEEQ SNGLIAL C ;; UEUE QELEV/LCEVIDE ; TEIAPRROPP AHE TOFP TON OLYNTREUR C ;T IS LSTUEEQ RTY THE TUEUEEQ DTOE INUTROUB S--T ISQL D AYRLOV Z FN.I SKFT . ALEGLL I. =0R BEUM NSKTA; 10KEFT Q BE SKFT C ND.E SKFT N)IG SEDNE- . ER VAYRLVE(O# SKTAT GE; R0),SPK(ASFT V MO SKFT ; AYRLOV Z FN.I SKFT C ND.E SKFT ) ONSIER VLYONE OR(CR BEUM NSKTAT GE; R0),SPK(ASFT SBBI SKFT ABRC10 =. ; HERE ONLY IF ABORTING THE ACTIVE TASK ABRT MOV R0,R2 ; PUT TASK NUMBER INTO R2 TO SAVE IT. ABRT ASL R2 ; MAKE INTO A WORD INDEX ABRT MOV HEADER(R2),R1 ; GET HEADER ADD. FROM TASK TABLE ABRT CMP R1,ACTIVE ; IS THIS TASK REALLY ACTIVE? ABRT BNE ABRFIN ; NO - THEN STOP ABORTING IT. ABRT ; TASK TABTPUT A FORMATTING LF MOVB #2,CHTYPE(R1) ;SET CHAR TYPE FOR FORMATTING LF BR PRTA85 ;GO RETURN ; ; ; PROCESS INTERRUPT FROM ECHO OF "U" ; PRTB50 = . TSTB TOIFLG(R1) ;DOES TIMEOUT FLAG INDICATE AN BNE PRTB55 ;ABORT OF INPUT REQUEST PROCESSING MOVB #CR,@TTODBR(R5) ;NO, OUTPUT A FORMATTING CR MOVB #3,CHTYPE(R1) ;SET CHAR TYPE FOR FORMATTING CR BR PRTA85 PRTB55 = . ;; ;E AG.P RNTURE ; C P TS R T OUCKLOE ASLERE ; S ,P)+SP ( B OV M ) R4T(ASQL0, R OV M 0 RBYO TEDNTOI PSTLIE EUQU ; 4)(RSTLA@Q0, R OV M S PTRUERNT IUTKOOC;L T OUOC,LPC R JS R4O TERNTOI PLEAB T QET;G QXET,GPC R JS . = STLI Q; UTNP IOR F 2 ; UTTPOUR FO0 = X E ERWH ;) X +ELEV L +ITUN4**( 2NSAINTCO4 R ;; --T XI EONUPS ON ADLOE YT BOR FR0R EACL; R0 R CL SKFT ; AYRLOV FZ.I SKFT ERSTGIRER ROERR EACL; R5 R CL SKFT K ACSTF OOP TONS PVESA; P)(S,-PS@# VBMO SKFT ; SKFT S TUTA SORRR ETOX DEINK ACST; 4 + VESA=F RRFE SKFT S),PPCR TEAF (K#AS TTOX DEINK ACST; LES SCREWED UP. ABRT CLR ACTIVE ; GET RID OF THE ACTIVE TASK ABRT CLR COUNTR ; AND THE TASK'S COUNTER ABRT CLR MFLAG ; CLEAR TASK LOCKOUT MOV SP,R1 ; HERE WE MUST TRANSFER , IN ORDER, THE ABRT ADD #ATASK+4,R1 ; CONTENTS OF THE TASK STACK TO THE SYS ABRT MOV STACK,SP ; STACK SO THAT THE RETURN (ABRFIN) WILLABRT MOV -(R1),-(SP)  CLRB TOIFLG(R1) ;RESET INPUT TIMEOUT FLAG BR PRTC15 ;GO CR, LF, AND DO END PROCESSING ; ; PROCESS INTERRUPT FROM ECHO OF "^" ; PRTB60 = . MOVB #'U,@TTODBR(R5) ;OUTPUT A "U" MOVB #4,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "U" PRTB70 = . INCB TTCURS(R1) ;INCR CURSOR BR PRTA85 ;GO RETURN ; ; ; PROCESS INTERRUPT FOR ECHO OF "^" ; PRTB80 = . MOVB #'^,@TTOTIDION C ;; TSIS LSTUEEQ RUTNP IOR F 2T,PUUT OOR F 0NSAINTCO4 R ;L VELES INTAON CR2 ; O. NITUNS INTAON CR1 ; EDEUQUE BTOT IS LOFS ESDRADS INTAON CR0 ; ;- -RYNT EONUPS ONTIDION C ;; STLI,QPC R JS ; ;- -CEENQUSEG INLLCA ; ;E EUQUL VELEE/ICEV DTEIAPRROPP AHE T ;O TSTLIT ESQUREY TTE EUQUO TNETIOUBRSU- -STLI Q ;; ; GEPA . RNTURE ; C P TS4 + VESA=F K ASFT SKFT S ERSTGIREL RANEGEE TH; C ND.E SKFT VESAO TEDUSS RDWOK ACSTF OERMBNU; 2.=1 E AVFS SKFT S AYLW AEG RLL AVESA; HRUS,PR5 R JS SKFT ; VESARG Z FN.I SKFT C ND.E: 10KZFT SKFTNTOI PRYNT ETECADIINO TIT BGNSIR EACL; P)(S+3 RBCL SKFT  ; WORK. (GLAD WE ONLY DO THIS ONCE!) ABRT MOV -(R1),-(SP) ; FIRST, THE TASK# AND THE PC. ABRT .IFNZ RGSAVE ; ABRT MOV -(R1),-(SP) ; THEN R0 & R1, IF SAVED. ABRT MOV -(R1),-(SP) ; ABRT .IFG $ABMES ; ABRT MOV -(R1),-(SP) ; NEXT R2 IF USING ABORT MESSAGES. DBR(R5) ;OUTPUT A 2ND "^" MOVB #5,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF 2ND "^" BR PRTB70 ; ; PROCESS INTERRUPT FOR ECHO OF "\" ; PRTB90 = . MOVB SLSHCH(R1),@TTODBR(R5) ;OUTPUT NEW OR DELETED ;CHAR AFTER BACKWARD SLASH MOVB #1,CHTYPE(R1) ;SET CHAR TYPE FOR NORMAL ECHO BR PRTB70 ; ; PROCESS INTERRUPT FOR ECHO OF EOM CHARACTER ; PRTC10 = . .IFZ EOMOPT R CKTA SFF ODECOR ROERP PO ; )+SP ( ST T NDPEUSNS ULLCA ; NDSPUNC, P SR J R)LLCAO TRNET(RK ACSTO NT ORNRT ISHPU ; P)(S - LR C RDWOK ACSTF OTEBY ;P)(S),R0M(TEYS S B OV M EROW LINO NSKTAD DEENSPSUT PU ; P)(S - LR C . =N SPUN T ; STLIF OSSREDD ANSAINTCO0 R ; ;- -RYNT EONUPS ONTIDION C ; ; PNNSTUC, P SR J ;J PNNSTUC, P SR J ; ; ; AYRLOV Z FN.I SKFT D VESAS ERSTGIREF OERMBNUT ULFADE; =0 E AVFS SKFT T INPOY TREN; =. SKETFR SKFT ; SKFT C ND.E SKFT NTOI PRYNT ESKETFRR VE OMPJU; 10KZFT BR SKFT. NTOI PRYNT ETECADIINO TIT BGNSIT SE; ) SP3(,+00#2 ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT MOV -(R1),-(SP) ; NOW R3 - R5 IF OVERLAY VERSION ABRT MOV -(R1),-(SP) ; ABRT MOV -(R1),-(SP) ; ABRT .ENDC ABRT .ENDC  INCB TTCURS(R1) ;INCR CURSOR BR PRTC55 ;CR, LF NOT OUTPUT AFTER EOM .ENDC PRTC15 = . MOVB #CR,@TTODBR(R5) ;OUTPUT A CR MOVB #11.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF A ;CR FOLLOWING AN EOM BR PRTB70 ; ; INTERRUPT FROM OUTPUT OF LF IN OUTPUT MODE ; PRTC20 = . CLRB CHTYPE(R1) ;SET CHAR TYPE TO OUTPUT MODE JMP PRTA17 ;GO CONTINU --E NCUEEQ SNGLIAL C ; ;K AS TNGLIAL CNDPEUSNS UTOE INUTROUB S--N SPUN T ; ;E AG.P CEVIDEE ATRNTEALT AOKLOO ;G 02QARE BR . NOE ICEV DTENAERLT AET;G 1 ,R1)(REVTDAL V MO O ;N 25QARE Q BE T?ISEXE ICEV DTENAERLT AESDO ;1)(REVYDPH0,0040#0 T BI . = 50QARE N URET;R PC S RT L VELED LIVAINR FOE OD CORRR EET;S) R0R(ROERV,LERR#E V MO . =0 A4EQ R RNTURE ; SBBI SKFT SKETFRO NT INTOI PRYNT E'SOMRP; =. OMRPDQ SKFT ; SKFT S.TUTA SORRR EALRMNOE THS RNTURE' OMRPDQ '. ITEXN OTSINPOY TREN; SKFT O TWE THE ATTIENERFFDIO TEDUSS IISTH T. IRSEACL' SKETFR '. ERMBNU; SKFT SKTAE THG ININTAON CRDWOK ACSTE THN IIT BGNSIE THS ET SM'POQR'D; SKFT L VELEY ITORRI P =R4 ; SKFT  ABRT MOV -(R1),-(SP) ; FINNALLY THE PS. THIS INLINE CODE IS,ABRT ; AT MOST, ONLY 4 WORDS LONGER THAN A ABRT ; LOOP. AT BEST IT IS 2 WORDS LESS. ABRT ; ABRD10 =. ; .IFNZ OVRLAY ; CMPB R0,#OVTMIN ; IS THIS AN OVERLAY TASK? ABRT BLO ABRD30 ; NO. ABRT E OUTPUT OF MSG ; ; PROCESS INTERRUPT FOR OUTPUT MODE CR ; PRTC30 = . MOVB #LF,@TTODBR(R5) ;OUTPUT A LF CLRB TTCURS(R1) ;RESET CURSOR TO BEGINNING OF LINE MOVB #9.,CHTYPE(R1) ;SET CHAR TYPE FOR OUTPUT MODE LF BR PRTA85 ;GO RETURN ; ; PROCESS INTERRUPT FOR ECHO OF CR FOLLOWING AN EOM ; PRTC40 = . MOVB #LF,@TTODBR(R5) ;OUTPUT A LF MOVB #12.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF LF C P TS R E YP TITEXD LIVAINR FOE OD CORRR EET;S) R0R(ROERT,REER # OV M . = 35QARE N URET;R PC S RT ORRR EPETYE ICEV;D ALICYSPHR FOE OD CORRR EET;S) R0R(ROERT,PDRR#E V MO . =0 A3EQ R RNTURE ; C P TS R R BEUM NCEVIDEL CAGILO ; IDALNV IOR FDECOR ROERT SE ;0)(RORRR,EDNRLER # OV M . = 25QARE N URET;R PC S RT S ESDRADR DEEA H =R3 ; SKFT . EDFIDIMOT NOS IT'TATS '. M)PO RBYT SES UEAL(VY TRENN OEDUS; SKFT RE ARSTEISEG RNGWILOOL FHE TENTH, EDAV SRE ARSTEISEG RLL ARYNT EON; SKFT D.SE UISM POQR DENWHD IEIFOD MOT NRE AERADHEM RAOGPRE TH; SKFTD ANS TUTA SSKTAE TH D.LEAL COT NISY VLQO D. ADRETHS ROE THM RO FSKTA; SKFTNGCILI SMETIA E OVEM RTOM PO RBYY NL OEDUSS IM'POQR'DT INPOY TRENE TH; SKFT  TSTB IOSTAT(R0) ; ANY I/O IN PROGRESS? ABRT BEQ ABRD15 ; NO. CAN ABORT NOW. ABRT ABRD13: MOVB #-3,TSTAT(R0) ; SET ABORT REQUESTED STATUS-OVERLAY. ABRT BR ABRD31 ; DON'T CALL RPOM. ABRT ABRD15: MOVB #8.,TSTAT(R0) ; SET STATUS TO 8 FOR RPOM. ABRT MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; SAVE TASK  ;FOLLOWING AN EOM BR PRTA85 ;GO RETURN ; ; PROCESS INTERRUPT FOR ECHO OF LF FOLLOWING AN EOM ; PRTC50 = . CLRB TTCURS(R1) ;RESET CURSOR TO BEGINNING OF LINE PRTC55 = . MOV ILSTAD(R5),R0 ;GET CURRENT INPUT LIST ADDRESS JMP PRTA40 ;GO DEQUEUE ECHO TIMER ; ; ; PROCESS INTERRUPT FOR ECHO OF RUBOUT FOR TTY TURNON ; PRTC60 = . TSTB TTYON(R1) ;IS T DECOR ROERE BLEAEUQUT NOT SE ;0)(RORRR,EQLRR#E V MO UTKOOC LSEEAEL;R PS+,P)(S VBMO RDWOD EAHR TRETOES;R 0)(R C IN . =5 A1EQ R2 T*NI U =R5 ; ELEV L +*2ITUN= 3 R ; T ESQUREF OELEV LTYRIIOPR= 2 R ; . NOT NI UTY T =R1 ; SSREDD ASTLI= 0 R ; H IT WRNTURE ; C P TS R ; SKFT ; AYRLOV Z FN.I SKFT ; SKFT R TEINPOK ACST= <= PC ; SKFT R BEUM NSKTA ; SKFT ; SKFT AY WISTHK OO LCKTA SHE TRYNT EON; SKFT NUMBER ABRT MOV R0,-(SP) ; PUSH TASK NUMBER FOR RPOM ABRT JSR PC,DQOVLY ; CALL ON RPOM. ABRT MOV (SP)+,R0 ; RESTORE R0 (TASK NUMBER) ABRT .LOCK TOPPS ; .ENDC ABRT ABRD30: MOVB #7,TSTAT(R0) ; SET ABORTED STATUS. CLR TSTACK(R2) ; CLEAR STACK POINTER FOR DSPTCH TY UNIT WARMUP COMPLETE BNE PRTC65 ;NO JMP PRTA80 ;YES PRTC65 = . MOVB #RO,@TTODBR(R5) ;OUTPUT ANOTHER RUBOUT DECB TTYON(R1) ;DECR COUNT JMP PRTA85 ;RETURN .PAGE ; ; KBDINT -- TELETYPE KEYBOARD/PT READER INTERRUPT ROUTINE ; ; CONDITIONS UPON ENTRY -- ; ; TTY UNIT NO. IS CONTAINED IN BITS 0-3 OF PS ; AS PROVIDED BY INTERRUPT VECTOR FOR ; S ORRR ENOR FOE OD;C TOD OR WORRR EITINO SS,ORRR ESTLIO ;N ) R0R(ROER R CL L VELE+ T NI*U 2 =R3 ; 3 ,RR2 D AD T NI*U 2 =R5 ; 5 ,RR3 V MO ELEV L +.)NOT NI U *(2= X DEIN; R3 L AS E.I.; ESBLTAO TEXND IELEV/LITUNA E AK;M 3 ,RR1 V MO . =0 A1EQ RE BLTAK AS TINS TUTA S/O ISKTAT ENEMCRIN ; ) R4T(TAOS I B NC I T IS LOFD OR WEMSTSY ; 0)(REMSTSY4, ; SKFT C ND.E SKFT ; OMRPDQ EF.D SKFT ; LYOVDQ EF.R SKFT ; AYRLOV Z FN.I SKFT ; PRPOR,SHPU EF.R SKFT ; SKETFR EF.D !ABRT ABRD31: .IFG $ABMES ; ONLY INCLUDED IF MESSAGES WANTED. ABRT AB2MES =$ABMES+$ABMES-2 ; NEED THIS VALUE FOR WORD INDEX VALUE ABRT MOV #AB2MES,R2 ; GET NUMBER OF MESSAGE BUFFERS *2 ABRT ABRM10: MOV ABMTAB(R2),R1 ; SEE IF THIS MODULE IS FREE BY CHECK ABRT CMP (R1),#1 ; OF THREAD WORD. =1 IF FREE. ABRT BEQ ABRM20 ; FREE. GO USE IT. ABRT SUB #2,R2 ; SE" INTERRUPTING UNIT ; ; ROUTINE IS ENTERED AT PRIORITY LEVEL OF UNIT VECTOR ; ; KBDINT = . SAVE ;CALL SAVE ROUTINE MOVB PS,R1 ;GET UNIT NO FROM BITS 0-3 OF PS BIC #177760,R1 MOV R1,R5 ASL R5 ;UNIT * 2 USED AS INDEX TO WORD TABLES MOV ITIMER(R5),R4 ;GET ADDRESS OF OPERATOR RESPONSE TIMER MOVB #TTITIM,TCNTR(R4) ;PUT COUNT INTO TIMER MOV R B OV M , 0TEBYN IO. NSKTAE IVCT AVESA ; R4),R3O(KNAS T B IS B 4 R LR C E IVCT AISK AS TNO, ROZES IVETIACN HE;W 10QARE Q BE SSREDD AERADHEK AS TVETIACT ENRRCUT GE ; R3E,IVCT A OV M R LEAL CISM TEYS SIF. NOK AS TROZE ; ) R0M(TEYS S B LR C . = 05QARE ELEV LIDALNV IO,;N 40QARE I BH L?VELED LIVAA T IIS; 1 ,#R2 P CM ESBLTAD ANS UEUE QNGXIDEIN ; R FO SKFT E AG.P SKFT**********************************************************************;* SKFT * ; SKFT * : ERMBNUE GULOTACA ; SKFT * 0 : ONSIVIRE ; SKFT * 1 -7OV-N18 : TEDA ; SKFT * %E IF ANY MORE BUFFERS ARE LEFT ABRT BGE ABRM10 ; YES. GO CHECK IT. ABRT BR ABRFIN ; NONE LEFT. RETURN WITHOUT MESSAGE. ABRT ABRM20: MOV R0,4(R1) ; PUT TASK NUMBER IN FIRST ARGUMENT ABRT MOV R1,-(SP) ; PUT ADDRESS OF BUFFER ON STACK FOR CALABRT JSR PC,LERTYP ; THE PS IS ALL READY ON STACK ABRT BR ABRE10 ; THEREFORE, NEED THIS BRANCH ABRT & ILSTAD(R5),R0 ;GET ADDRESS OF LIST CURRENTLY ;BEING PROCESSED MOV DATA(R0),R2 ;GET DATA BUFFER ADDRESS TST (R2) ;IS ECHO SPECIFIED BY USER BUFFER BPL KBDA10 ;NO MOV OTIMER(R5),-(SP);YES, QUEUE ECHO TIMER MOV #TTOTIM,-(SP) JSR PC,QTIME TST (SP)+ ;POP ERROR CODE OFF STACK KBDA10 = . MOVB @TTIDBR(R5),R4 ;GET CHAR WHICH WAS IL VELEY ITORRI PSTUEEQ RET;G R2),R0L(VELE VBMO O ;N 35QARE I BH BEAY;M 3 ,#0)(RPETY PBCM O ;N 35QARE O BL D?LIVAE YP TITEXS ;I 1 ,#0)(RPETY PBCM D OR WEMSTSYF O 1TEBYN IO. NITUNE AV;S) R01(M+TEYS,SR1 VBMO S LEAB TNGXIDEINR FO. NOT NI UTY TET;G 1 ,R1)(REVYDPH VBMO O ;N 50QARE E BN E?BLLAAIAVE ICEV DIS ;1)(REVYDPH0,0000#1 T BI NO ; 0 A3EQ R NE B 53: ERMMRAOGPR ; SKFT * ; SKFT * . UEAL VROZEN-NOA O T ; SKFT * T SES IE'AVGS'RR TEMERAPAN GEYS SHE TIFD RETOES R ; SKFT * E BLLWIE TH K.TSRE FBYD SE URE AR50- RRSTEISEG RS:ERSTGIRE ; SKFT * ; SKFT * E.IVCT ASKTA= 3 ; SKFT) .ENDC ABRFIN =. ; COMPLETION EXIT ABRT MOVB (SP)+,@#PS ; ALLOW INTERRUPTS ABRT ABRE10: .IFNZ RGSAVE ; ERROR RETURN .IFZ OVRLAY ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT MOV (SP)+,R2 ; RESTORE R2 (ONLY WITH ABORT MESSAGES) ABRT .ENDC *NPUT BEQ KBDA20 ;PUNCHED TAPE LEADER OR "HERE IS" KEY? BICB #200,R4 ;STRIP OFF CHANNEL 8 OF TTY INPUT CHAR CMPB R4,#EOMCH ;NO, IS IT THE EOM CHAR? BEQ KBDB70 ;YES CMPB R4,#CR ;IS IT AN EOM CR? BEQ KBDB50 ;YES CMPB R4,#EOLCH ;IS IT THE END OF LINE CHAR? BEQ KBDA50 ;YES CMPB R4,#MRCH ;NO, IS IT THE MSG RESTART CHAR? D?LIVAE YP TCEVIDES ;I0 40#7),R1V(DEHY P IT B ESBLTAD OR WOR FEXND IKEMA ; 1 R SL A S YE ; 5 A2EQ R HI B ? GEAR LOO TITS ;I X MAOG,LR1 P CM . = 02QARE . NOE ICEV DALICOG LET;G 1 ,R0)(RCEVIDE VBMO UTKOOC LSEEAEL RS,YE ; S ,P)+SP ( B OV M 1 . NE .RDWOD EAHR TO,;N 15QARE E BN LEABUEUE QSTLIS ;I 0)(R C DE RDWOD EAHR;T NGTIES TLEHI * S TUTA SSKTAL GALEIL= 2 ; SKFT * R.BEUM NSKTAL GALEIL= 1 ; SKFT * . NTCEESUI QET SSKTA= 0 ; SKFT * SSREOGPRN I/O IUT BEDEUQUDE= 1 - ; SKFT * E:AR ; SKFT *ESLUVAE TH K.TSRE FBYT SEE LUVAS TUTA S AIS RRFE ; SKFT * D.EEFRE BTOK AS THE TOFR BEUM NHE- ABRT MOV (SP)+,R1 ; RESTORE REGISTERS IF NEEDED. MOV (SP)+,R0 ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION. ABRT JSR R5,POPR ; ABRT .ENDC ABRT .ENDC .BEQ KBDA70 ;YES MOV R2,R3 ;GET POINTER TO CHAR SLOT IN DATA BUFFER ADD #MSGDAT,R3 ADD CHCNT(R2),R3 CMPB R4,#RO ;IS CHAR A RUBOUT (DELETE A CHAR)? BEQ KBDA80 ;YES TSTB FRSTRO(R1) ;IS IT 1ST CHAR AFTER SOME RUBOUTS? BNE KBDB20 ;YES KBDA13 = . MOV (R2),-(SP) ;STRIP OFF BITS 14,15 OF 1ST WORD OF BIC #140000,(SP) ;BUFFER TO GE WTSUPRRTEINT OUCKLO ; UTCOLOC, P SR J K ACSTM RO FSSREDD ASTLIT GE ; R0),SP0( 2 OV M . = P QPRE ;T NI*U 2NSAINTCO5 R ;) ELEV L +ITUN2* (NSAINTCO3 R ;L VELEY ITORRI PNSAINTCO2 R ;. NOT NI UTY TALICYSPHS INTAON CR1 ; SSREDD ASTLIS INTAON CRO ; ;O ER Z ;S INTAON CITE ISRWHEOT; DECOR ROERN ANSAINTCOT IS L ;F ORDWOR ROERE TH, ORRR EERETAMAR PAD HSTLIF TISK ASFT ; SKFT * REHE W ; SKFT * ; SKFT * ) ANTROR(F) RRFEK,ASFTK(TSRE FLLCA. 2) ; SKFT * ; SKFT * R ER,F)+SP (V MO ; SKFT * K TSRE FT EM ; SKFT * 1; FIX UP STACK SO THAT TASK NO. IS GONE MOV (SP)+,(SP) ; THEN WERE READY FOR RTS PC. ABRT RTS PC ; .PAGE ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ; THERE IS A LIMIT TO THE NUMBER OF SYSGENABLE ABORT MESSAGE ABRT ; BUFFERS THAT CAN BE ADDED TO THE SYSTEM WITHOUT ADDIONAL CODE ABRT ; BEING ALSO ADDED. THE CHECK BELOW2T NO. OF CHARS TO BE INPUT CMP CHCNT(R2),(SP)+ ;HAVE TOO MANY CHAR BEEN INPUT? BHIS KBDB30 ;YES INC CHCNT(R2) ;INCREMENT CHAR COUNT MOVB R4,(R3) ;MOVE CHAR TO USER'S BUFFER TST (R2) ;NO, IS ECHO SPECIFIED? BPL KBDA15 ;YES KBDA14 = . BIT #040000,(R2) ;IS INPUT ON PUNCHED TAPE? BNE KBDA20 ;YES MOV #ECHOCH,R4 ;NO, GET NON- I ; ;. NOT NI U ; ALICYSPHY TTS INTAON CSTLIF ORDWOM TEYS SOF1 E YT B ; ; ERLLCAS WAM TEYS SIFO ER ZISH ICWH. NOK AS T ;G INLLCAS INTAON CSTLIF ORDWOM TEYS SOF0 E YT B ; ; RYNT EON1 . NE .ENWHT EPXC E ;, 1BYD TEENEMCRDES ISTLIF ORDWOD EAHR T ;; --T XI EONUPS ONTIDION C ;; RSTEISEG REDAV SVEBO ACKTA SONS ISSREDD ASTLIT ESQURE ; ;- Y-TRENN PO UNSIOITND Y)BLEMSS(A P)(S,-SKTA FV MO. 1) ; SKFT * ; SKFT * : ISE INUTROS HI TOR FGEKAIN LHE T E:AGUS ; SKFT * ; SKFT * . TETA SNTCEESUI QHE TINK AS TEDNDPEUS SORD UEUE Q ; SKFT * AERTHEIE ACPLO TISE INUTROS HI TOFN IOCTUN FHE TE:OSRPPU ; SKFT * 5 PREVENTS AN EXCESIVE ABRT ; REQUEST FROM BEING MADE. ADDIONAL BUFFERS REQUIRE THE BUFFER ABRT ; AND AN ENTRY IN THE WORD TABLE ABMTAB. ABRT ; ABRT .IFG $ABMES-5 ; THE CURRENT MAXIMUM NUMBER OF ABORT ABRT XXXXXX ; MESSAGES BUFFERS IS 5. ABRT .ENDC ABRT ; 6PRINTING ECHO CHAR KBDA15 = . MOVB R4,@TTODBR(R5) ;YES, OUTPUT CHAR FOR ECHO KBDA20 = . MOV ITIMER(R5),R3 ;GET ADDRESS OF OPERATOR RESPONSE TIMER MOVB #TTITIM,TCNTR(R3) ;SET TIMER BIT #040000,(R2) ;IS INPUT ON PUNCHED TAPE BNE KBDB40 ;YES KBDA30 = . JMP RESTOR ;RETURN ; ; PROCESS END OF LINE CHARACTER ; KBDA50 = . MOVB #CR,R4 ;GET CR FOR OCO ; ;P QPREC, P SR J ;; --E NCUEEQ SNGLIAL C ;; TSIS LSTUEEQ RSSCEROEPPRO TNETIOUBRSU--P QPRE ; ;E AG.P ;0 B6BD K R B M EOF OHOECR FOE YP TARCHT SE ;) R1E(YPHT,C8. # B OV M HOECR FOR HA COM EUTTPOU ;) R5R(DBTO@T4, R B OV M DCEN . EDHOECT NOM EOF IUTBORUE US ; 4 ,RRO # B OV M T PROM E Z IF . . = 70DBKB RNTUREO ;G 30DAKB BR + P)(S T TS E IM ; SKFT * SKETFR: ONTICAFITIENIDM RAOGPR ; SKFT * ; SKFT * K S T E R F ; SKFT**********************************************************************;* SKFT E AG.P RTAB C ND.E RTAB 9 ABRT .IFGE $ABMES-1 ; ABRT ABMES1: .WORD 1 ; MESSAGE BUFFER 1. THREAD WORD. ABRT .WORD 99. ; ERROR CODE ABRT .WORD 0,0,0,0 ; ARGUMENTS FOR ERRTYPE. ABRT .IFGE $ABMES-2 ; ABRT ABMES2: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER:UTPUT MOVB #3,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF CR BR KBDA15 ;GO OUTPUT CR ; ; PROCESS MESSAGE RESTART CHARACTER ; KBDA70 = . MOVB #'^,@TTODBR(R5) ;OUTPUT A "^" MOVB #5,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "^" CLR CHCNT(R2) ;ZERO CHAR COUNT FOR RESTART OF INPUT BR KBDA30 ;GO RETURN ; ; PROCESS RUBOUT CHARACTER (CHARACTER DELETION) ; KBDA80 = . TSTQT,DPC R JS R METIE NSPOES RORATEROPE EUQUDE ;P)(S,-5)(RERIMIT V MO . =0 B6BD KR COFO CH EOR FPETYR HA CET;S) R1E(YPHT,C1.#1 VBMO O CH EOR FCRT PUUT;O 5)(RBRODTT,@R4 VBMO . =0 B5BD K ;R TEACARCH) OM(EE AGSSMEF OND ESSCERO P ; ;0 A3BD K R B PETAD HENCPUF OMERA F AADRE ; 5)(RSRICTT @ B NC I . = 40DBKB ; UTNP IPETAD HENCPU ; ; ERIM TUTNP IET SGO ; 0 A2BD K R B )+SP ( C ND.E RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB ; S5MEAB D OR.W RTAB ; -5ESBM= 2. ABRT .IFGE $ABMES-3 ; ABRT ABMES3: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 3. ABRT .IFGE $ABMES-4 ; ABRT ABMES4: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 4. ABRT .IFGE $ABMES-5 ; ABRT ABMES5: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 5. ABRT .END> CHCNT(R2) ;IS CHAR COUNT ZERO? BEQ KBDA20 ;YES, IGNORE RUBOUT DEC CHCNT(R2) ;DECR CHAR COUNT TST (R2) ;IS ECHO SPECIFIED BMI KBDA15 ;NO DEC R3 ;POINT TO LAST CHAR INPUT TO BUFFER TSTB FRSTRO(R1) ;IS THIS 1ST RUBOUT? BNE KBDB10 ;NO INCB FRSTRO(R1) ;YES, SET 1ST RUBOUT SWITCH MOVB #'\,R4 ;GET A "\" FOR OUTPUST T METIDQC, P SR J R METIO CH EUEUEEQ;D) SP-(),R5R(METI O OV M G LA FEDEDCEEXR HA CAX MET SO,;N ) R1H(XCMA CBIN ES;Y 20DAKB E BN D?DEEEXC ELYUSIOEVPRR HA CAX MAS;W ) R1H(XCMA TBTS . =0 B3BD K ;D DEEEXC ENTOU CERCTRAHA CUMIMAX M ; ;" "\T PUUT OGO ; 5 A1BD K R B " "\F OHOECR FOE YP TARCHT SE ; 1)(RPETYCH7, # B OV M UTTPOUR FO" "\A T GE ; 4 ,R'\ # B OV M ARCHT $A E FG.I RTAB ; S4MEAB D OR.W RTAB ; -4ESBM$A E FG.I RTAB ; S3MEAB D OR.W RTAB ; -3ESBM$A E FG.I RTAB ; S2MEAB D OR.W RTAB ; -2ESBM$A E FG.I RTABERFFBU. SSMET ORABC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .IFGE $ABMES-1 ; ABRT ABMTAB: .WORD ABMES1 ; TABLE OF ADDRESS OF T MOVB #7,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "\" MOVB (R3),SLSHCH(R1) ;SAVE 1ST CHAR DELETED BR KBDA15 ;GO OUTPUT "\" KBDB10 = . MOVB (R3),R4 ;GET CHAR BEING DELETED BR KBDA15 ;GO OUTPUT CHAR KBDB20 = . CLRB FRSTRO(R1) INC CHCNT(R2) ;INCR CHAR COUNT MOVB R4,(R3) ;MOVE CHAR TO USER'S BUFFER MOVB R4,SLSHCH(R1) ;SAVE 1ST NON-RUBOU