(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 æ—þÿ €ÝK7 ÄüH‚À .€ ßUÿ2> [gÐ4$.:.vÀþÿœ?Âå 8 *6ð•?Ÿ“þÿBœ ñ ? ?C.œ ƒ+C ÄÃû%ßUÀþÿW"ò  |&….Â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?hf€pÕ. „Ý17¡ü.‚ßUÀþÿ­?)ô•?Ä ˜?$?/.4.„ Ê �œ Á ¹ ± ´Š?ß�þÿ¶ „ƒ‚ë.  ?.Z�ö އö—þÿæ÷ âüwŽ Ž Ž 6 °.€ äŠþÿ7 ôÿ÷ pûn÷ kÄfûÄ  Ã= Fÿ& fB ··2ÿF€ 6 vœâ -²Z‰d �‚ƒ„…þt½±�"É 7 7 7 7 „ÀÀ 0 a. „­*ð 0` ÀåöÀÁ0ŠGñk.   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µ,:.ð•?0ŠOá À óÀÁ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œ,¯”m4€p@¶Re†@¦S@~@’.awÈ}@‹wô_@k~[@(~a,È}h:°é.Rh@éyRh¯”<÷æ.&€öþÿ <†—-‡€ßUÀþÿ7�,  þÿå.&·�÷6 ðæÿÿ& æ ¦&f{¶Re† m4€pk~[r.L€ÀeÁÐ Á æþÿßUÀþÿH” 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~@¢.?T 2@¸kK@;}¸G@’è€@ûÌ2@. €` @’DL@(²6x(L»zy:h ?\}h ¯”|÷²6xu.÷ Àöÿ Éà(€:D~’DL DL ?T 2¸kK" !.&2Šrœ · · rÀeé‡( €` ’è€;}¸G;}¸G É2Úxó4 ;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$DÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿI 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'@«:<}@_M€Q@<.YeÞ@hf€p@[gÐ4@9mQŠ@imR@’.�m„@[qj@ƒ…4f@(E„:hV.äf„:h)€Êh)€bh9€p:hê9€ahbü4²¶�(p)€üXh¯”F÷æpÿ€àˆà�à˜à à¨à°à- ç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 VbnzÑ2>JVbnz†ì*2>J V bnz†o.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@ò­@ ò@ò>í>ÿÿÿÿÿÿÿÿ³ B§Bª C¦C© D¥D¨ E¤E§ F£F¦ G¢G¥ H¡H¤ I I£ JŸJ¢ KžK\ * ; 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: _¡ L�L  MœM— N›N– P™P” R—.R|"xb Z�ZRTVXZ\^`bdø.RTV X Z\^`bd³nfhjlnprtvx.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 Ac‚z|~€‚„†ˆŠŒ@.z|~ € ‚„†ˆŠŒ# –Ž�<Ž�bU.bw ÷ 6 ÷ î÷ lñ‹B(·•þÿ¬[gÐ4B þÿš.ˆw އœ&&& ÷ Ö ,ˆ dhf€p�m„{.®ì¬èw ö�þÿ& ÷ w±ŠB5N¸$hf€pþÿ9mQŠ €}$B(N-.Ôñ‹AÑ€ñ•A·•þÿ÷ ÊËw ÷ ®ÎÄ÷ eAAþÿ[gÐ4S(úd÷ âñ‹C»±ŠCd; * ; 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... ;...BEFOREg5Pñ‹A´€1ŠAã&" CCPA A4²¶�Î,w À  ü‡ÁwÀHÀe  †,[gÐ4  R,$>ú‡ÀAŠ Zü‡ÀAÂÿÿ�� Bü‡Š Q. > A Z A BÜ&HDü‡ÀMP� Nü‡ÀZÁRPÑ W ³. D M N Z R³fZû‡w ‡¡ Z hf€p†.‰Á�þÿÁEðÿEÅ ÷ ¶ñ‹JDô•·•þÿÅþÿJhTS. * ; 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(þÿ,@ñ•DDœIÄ |X1ŠJw&t„” ®È¤.D IXJt„ ”" $®&Èä&dÚèö $2>±ŠEW¬EH†@î.Úèö  $2>EE4.‚N ´  -†m=�­ ý•rNw.¨ ñ• Iw¼f÷ Ö ÷ =Š=Šõ& I¼M:€:g'$(.Î œ&æ& ÷ Ö œÄñ‹Až�m„&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[gÐ4&hf€p. ôŠ Â÷ v1ŠA÷ ®R %Rõ «:<}A R(Rñ.@ÄåR·•þÿ±ŠA5N 1ŠB%R= RþÿAN B&RÏ.f·•þÿ5P÷ @w1ŠCñŠA·•þÿ÷±ŠEfº(þÿ P[qjCAþÿ$E(*.Œ÷ Ö ïñ•I1ŠEôý• ñ•Iâñ‹LŒ ¼M:IE"I(L».²ý• ñ•IØ1ŠLý•Uñ•I±ŠE_ 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ö}œGñ•IﱊEý• IGI$E#.þ ñ• Iå1ŠIwnþý• 1ŠEñ• I§ò II E&I%.$ý• ñ• I 1ŠE@Pwxþñ‹Mw&ÿý•ôIEP MI.JñŠMwÿ‰Á�þÿÁEðÿEÅ Dô•@5 Mþÿ 7.pP Ê €fæ÷ Ö DŸ+ÄÅ€¡PimRø.–|¡ n¡ *¡-ƒÃeƒl¡.ñ‹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.¼FB¦ÎEÀ–,I†²  ‘Ê €Ê5@Ä =‘§ F¦.âCó•Ê5@@wÄ• ñ•Iîý•^Å[qj"I~.ñ•I2 ïò äò Ê Þ�à ñ‹F ±ŠÌ I$F..FÄ•\ñ•Iñ’GÐÄ’Î1ŠF²  ‘1‘GÄ•NFIGF&G.T\ñ•IÁñ‹HÀ±ŠHf÷ Ö ¸½Š½A  IHH¼M:&÷.z=‘ñ• If÷ Ö ²Ä•=‘ñ•Iò  I¼M: &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 {. €÷ :È 4·•þÿœw 4‚Á W<3ñ59þÿ_M€Q"YeÞ_.Æ€;Aœp� ¬+‡¬'‚œ— YeÞ YeÞi.ì&‚0Š Ã ÄÜ0‘ ´ŠCà Ń`0 ¦ ̵;«:<}[.‡ˆ ·•þÿð‡ð‡ð‡ð2  þÿç.8‡ð‡ñ5@ìA²& œ & ÷ Ö YeÞ4Þ&ƒ…4f.^‡÷ >÷ z<Z4Z·•þÿ‡&÷ &÷ bRåZZþÿ(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.„üR4RÀeR4Z·•þÿ€‡fÁ Á �`ÈR RRZþÿ1.ªD`Ä �‡‚ñ•Dñ‹MCDô•ð1ŠKñ‹¤DM&Kƒ.ÐA1ŠI@N 4 �¡ ñ• I=‘gA IN&I~.öfæýÕ@÷ Ö J@P 3 1ŠimRPç.H1ŠFñ•IDŸÄAË5@Ä =‘fæ!HFI"&t.BÝñ•Mñ• Iý•fæðÏÃ�Ùù³Š €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ÅÅ AŸ7ŠÉùóŠDwüó‹A@N@úJ DA$NS.ŽPð÷nù÷lù7 jùœÄ ô5@q¶P$YeÞ».´ ò5€jò5fô5 „êôU ß$4Þ YeÞYeÞYeÞ(YeÞ^.Ú=Š=Š�œp� w ù÷ ²B   ÂeZÅ Ö YeÞ&Z‰.Å @ÀeRÅeZÄ÷ Î:JÒ  Ä ÷k RZ'.&·•þÿ÷ ´ñ‹A!ñœAAñœBBñœCC„ = $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Å µNNµPP·•þÿæ÷ Nþƒó•ÿÿA3ŠB3Š&"N NPPþÿ"A&Bˆ.rC ·•þÿõ}�fæ÷ Ö 3ŠJ‡ó‹KØ$C þÿimR"J(K.˜ñ³ŠK÷ ì×-`øæ÷ ‡Á�„øEÅ ØK""ø€’.¾=бŠL7Štø@Pðý•^ñ•I‡¦­ LP$I�,äö�þÿßUÀþÿ‡f&Á�FøÁ � ±ŠM„�‡úþÿ MyóˆT 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À]¬zày&¬zày›.Xwpÿ÷‹÷µÄ÷€pú7ŠSú7ŠNúæ ¬zày¬zày€ï.~È÷ Äó÷µ@w |ÿw.ÿ÷p¨ëNÈiTÀ]¬zàyƒ.¤7 ú7Šú7ŠúæÈ÷ ÅÀwn÷*úüù÷ øù‹ÈiTÀ]À.ÊÁÀw D Á ÀVÁÀÂ2P”‚~÷0DúM À ‹wø4 DVÀ&0·.ðæ( ˆ÷ 6úwÊþwŠÿ@ä�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†:ÕZ®SÀ†:ÕZ"†:ÕZ&†:ÕZ¥&’ w »÷ ·Œ Ö w ˆŠ,†:ÕZ ¬  †:ÕZ»Þ,K®S@ ˆ}.®w ”´÷•3f÷U€0÷E@*÷ À >® ®S@ ”´W.DwÜ÷U@÷¤N÷E€ w ¤„à7 |>¤®S@ ¤"„7.j÷•p÷•kæÞ˜FEED 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 = 17�ONE 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ü$lz—PzˆÎ(ˆ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 = 1¡ARGUMENTS ; 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€÷•†ú÷•�úÊ. æˆ÷ €À‹À¥À¥w¨w¤w ÿˆ d'}?.0 wœw >¨÷U0Hö÷• ô÷•ôæR÷ ó ®S@ >¨&R.V €À‹À¥À¥wbw^wZwVwÇ 9T}Ý.| þw \´÷%‚ûwL1w Â\w ·®SÀ \ ®S@"Â$\±.¢ Ìd1w ýšsw 0•÷•Æù÷•õ,®S@Ìd®S@ýš®SÀ•m.È Áùæˆ÷ €À‹wôwTÿw ¤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þ.(öŒ÷• %õ÷• gõ÷•bõ÷• ñ÷•ñS®S@öŒù.NæR÷ €À‹À¥wjww wûw ÇR 9T}y.tì÷ ÷÷•÷÷•÷æˆ÷ €À‹À¥Vˆs' Z‹.šÀ¥w*w&w°ww P Â"w k®S@ P "Â(®S@¢.À\åw `ê÷• ó÷• ó÷•ów ¦Ç\å ®S@`ê».æw¤úw ¨ = 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\­.ô&1hÔRÀ+hîR,h R -h R@.h %.R˜0h RÀ0h< Rè0h 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,âwVýˆw Ø< w V j .w ž8,®S@Ø< ®S@V j $®S@&žr.V .÷•Z÷•Uæh÷ €À‹wÂÿwýaV h9T}Ö.,ÀÁ ¬œ‡ÃeF~Â¥Ã€ó’ œ<.RœÎe‡Âœœ÷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 VÄœQW ~ì¿NÄID GW ÷ A€×7bï=W ð 70 0 æþÿŸ?Lÿ7Hÿ÷ :æÂ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À~¿,Ä æþÿŸ7üþ÷x¿øþ÷ öþŸþÿˆ 0ðbïw :ÔŽ‡æ®¿Á Á fž¿ˆÖ ð¥ëð èöþÿw Ô& ÷ Nèwì‰þÿÀ;~ÜÀšþO殿ˆÖ  Å Å ý Ž¿Å 80ðbïæþÿŸ7jþ÷x¿fþÈŸþÿ òЧ¦÷ ŽÐ¬& & ÷ ëÖ ÷ 6þ�À,þ÷ ÒÔ€z~TÁÁ Á ù ~¿,Ä æ®¿Á Á fž¿ˆÖ wÜÔæþÿŸ7ìý÷x¿èý÷ æýŸþÿÈ0Ïw Ó dïÀÈý'ðbïð æþÿŸ7°ý÷x¿~ÌÁ¬ýÈ÷ ¦ýŸþÿ òЧ¦÷ ÐϬ& & ÷ 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Ó`ïÃUßdï‡ F~D€÷ ØÿÂbï�—t�Âç`ï°Ä ð  ÷ ®€ð•€ÃU€ßdï… ‡÷ –€Ä Âbï‚ ‡  fï`ïÂEüÿÃUÃU7~¼Âßdï‡ €÷ ºÿÂbï—t �0ðç`ïðbïÄ ðŠ ÷ &€ð•€ÃU€ßdï… ‡÷  €Ä Âbï‚ ‡ ÃUßdï‡ c~4À÷ ÖÿÂbï—t€Ä ðŠ ÷ ΀ð•€ÃU€ßdï… ‡÷ ¶€ÃUßdï‡ ‡ ß bï�÷ š€ð �ð ° ÃU@° ð ÃU€G~¬Ãß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ï… ‡ð ° ð ÷ð ° òߤ~$Ä@dïœ×t ßdïÃU0Š ,Á—bï‡Ä üpÿtÿrÿvÿnÄzĆÄ5’ÄÌ0“ļÊ5”ÄLÌÿ»~œÄ¦Ä¨ÄªÄ¬Äw Ð÷ < ÷ ô÷ rñ‹–Ä)·•*;¬w ôÏŽ‡œ&& && ÷ ãÖ ,ˆ ë¬çw ÂÏö�¤~Åè:& ÷ äwÊ籊–Ä5¢Äñ‹•ÄЀñ••Ä·•Ä:÷ ÎÊw „Ï÷ ²ÍÄ÷ h÷ æñ‹—届—Ä5¤Äñ‹•ij€1Š•Äã‰Á�ˆ:ÁEðÿEÅ ÷ ºñ‹žÄDjĶ~ŒÅô•·•h:ñ•˜ÄDœ�ÄÄ |®Å1ŠžÄw*ÊÅÞÆîÆúÆÇ"Ç4ÇØDISCUN ;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 ÛBÇPÇdÇlÇ~ÇŒÇ˜Ç±Š™ÄW¬™ÄH†@¢Ä ´  -†m=�ZÄ­ ý• ZÄñ•C~Æ �ÄwÀfjÄ÷ xéÖ =ŠTÄ=ŠVÄ œ&& æ& ÷ ÌáÖ œÄñ‹•Ä ÷ „¬‚ ‡÷ Pw hÎø w jΜ ôЧ&÷ @Ë~|Æ Â÷ v1Š•Ä÷ ®¦Ä %¦ÄÄå¦Ä·•T9±Š•Ä5¢Ä 1Š–Ä%¦Ä·•:95¤Ä÷ @wŽÏ1Š—ÄñЕķ•"9÷±Š™ÄfjÄ÷ ¢èÖ ïñ•�ÄØ~ôÆ1Š™Äôý• ZÄñ•�Äâñ‹ Äý• ZÄñ•�ÄØ1Š Äý•UZÄñ•�ıЙÄÌý•^ZÄñ•�Äö}œ›ÄZÄñ•�Äﱊ™Äý• ZÄñ• �Äå1Š�Äwjþ—~lÇý• ZÄ1Š™Äñ• �ÄÜ ;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 ä÷5€2hòU,P—Ûò5 /ò5À f× w(× w&â,v——,ᆲ ò5¹„ÄEÀÿ!>†ú�,œ—² ­æ÷  „Ÿ:2ð× ò5u,— (ÃEðÿ× ]ÉE@ò•¯òU òE ¡,è—òE¦ æ ÷ Ö æ÷ ¨ „wàþ2-,˜2Å× w ÿòU òE¹ò5T,4˜ò5ÃEðÿ× ÉE@¦ ÷ 8Ö ò•˜,Z˜wÚþò�$òUšò�%òU”÷5€úfW,€˜òUßòE ß§ý• ZÄñ• �Ä 1Š™Ä@¤Äwtþñ‹¡Äw&ÿý•ZÄñŠ¡Äwÿ‰Á�H8ÁEðÿEÅ DhÄô•@¤Ä Ê €fjÄæ÷ 2çÖ DŸ ~äÇXÄ+ÄÅ€¡|¡ n¡ *¡-ƒÃeƒl¡.ñ‹šÄB¦ÎEÀ–,I†²  ‘Ê €Ê5@Ä =‘ZÄChÄó•Ê5@@w ÎÄ• ñ•�Ä”~\Èîý•^ZÄñ•�Ä2 ïò äò Ê Þ�à ñ‹šÄ ±ŠšÄÄ•\ñ•�Äñ’›ÄÐÄ’Î1ŠšÄ²  ‘1‘›ÄÄ•\ñ•�ÄÁñ‹œÄÀ±ŠœÄfjÄ÷ ÂæÖ ¸½ŠTĽ%~ÔÈ=‘ZÄñ• �ÄfhÄ÷ ¦æÖ ²Ä•=‘ZÄñ•�Äò€÷ :È 4·•ô6œw æË4‚Á W<ú”3ñ5€ú”;Aœú”p� ¬+‡¬'‚œ— &‚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 * âw¬þòU€ òU@ wÜþ^,¦˜ò5 ÃEðÿ× ÉE@¦ ÷ ÆÖ ò5,̘ ¦"÷ ´Ö ò• wVþ× òU òE^,ò˜¿× òU Å÷5€lfòE ¼=,™‰÷ ¦ò5€.ò‹]‚—¬ &‡ò¥l©,>™ò¥_ò5À ƒÄÄEÀÿ!>'†×¢ß,d™0×¢9ñ’À Ä Ä ü è² wØüñEAF,Š™ò5 žò•¦ æ ÷ lÖ ÉUPêË ´,°™=¦òò ÷ @ ÅòU€ ò•ò$�,Ö™²`ÇòU@ ó±žÀ Ä Ä ü èòŠ~,ü™ã~LÉÃ Ý ÄÜ0‘ ´Š§Cà Ń`0 ‡ˆ ·•Š6ð‡ð‡ð‡ð‡ð‡ñ5@ú”ìA•²& œ & ÷ šâÖ ‡÷ >÷ z<g~ÄÉ®Ä4®Ä·•06‡&÷ &÷ b¦Äü¦Ä4¦ÄÀe¦Ä4®Ä·•6€‡fÁ Á �`D`Ä �‡‚ñ•˜Äñ‹¡ÄCDlÄô•ð1ŠŸÄñ‹•Ä1Š�Ä@¢Ä 4 ‘~<Ê�¡ ñ• �Ä=‘ZÄfjÄæýÕ@VÄ÷ ®äÖ J@¤Ä 3 1ŠœÄ1ŠšÄñ•�ÄDŸXÄÄAË5@Ä =‘TÄfhÄæÝñ•¡Äñ• �Äý•ZÄf~´ÊlÄæðÏÃ�Óù³ŠžÄÅÅ AŸZÄ7ŠÃùóŠ˜Äwüó‹•Ä@¢Ä@¤Äð÷hù÷fù7 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 æ² ¿ñEAò•ÉU@¶ÉE@ñE@ò•C,"š÷ h «  †÷ 0 € ò5€öòµû,Hšòµí‡÷5€eÉE@ñE@¦»,nš ÷ Ö òU÷  ×÷5€ðdÉE@ñE@…,”š„œ! ! !åò• áò•È,ºšàò•Ù�À�4eÀEðÿ÷ ˜ rrrX,àš Ã"“““ × j¤†÷ ‡÷ ›, ›‡Í,j¤WtÁ WtÁeØÁeøÂ*€pÃebÌÂû,�¤‡æ & & & ÷ bÖ ÷Õx-‡æ�N[�÷-þ+&"¶¤þ+öö+ÿ ð+×/ê+~Ò‡çú”jò5ú”fô5 ú”„ ~,ËêôU ú”=ŠVÄ=ŠTÄ�œú”p� wù÷ ²B   Âe®ÄÅ Å @Àe¦ÄÅe®ÄÄ÷ Î:JÒ  Ä ÷·•z4÷ ´ñ‹•Ä!ñœ•Ä•Äñœ–Ä–Äñœ—Ä—Ä ©~¤ËEÅ µ¢Ä¢Äµ¤Ä¤Ä·•F4æ÷ Nþƒó•ÿÿ•Ä3Š–Ä3Š—Ä ·•*4õ}�ZÄfjÄæ÷ ,ãÖ 3ŠžÄ‡ó‹ŸÄñ³ŠŸÄ÷ ì×-Zøæ\Ä÷ žÙ‡Á�~øEÅ =ŠTÄ%~Ì±Š Ä7Šnø@¤Äðý•^ZÄñ•�ć¦ö�¼3÷Õà´3‡f&Á�@øÁ � ±Š¡Ä„�‡~”Ìè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@´+íæ�öZ�ö5?—-@Ò‡—-Ÿ,¥€Þ‚öU>¿ˆ+·‚+÷ €+·•ÂZއú@,D¥D¥ÿÿ0¦X¥) ERROR XXXXX S3!j¥XXXXX SXXXXX SXXXXX SXXXXX ‰,†¥b¥i¥p¥w¥~¥·øÿŽw &ï¦Åêÿ ”,¬¥w ï…æFZ÷à@ZÍ €ÿw|ÿ· zÿ·,Ò¥*Zw ü� ø7 ®ÿÅ\ÿ+wVÿ÷D¥Pÿ·e,ø¥ZĆ¥f&÷ šïC÷ >Ì ú÷• JÿÅå ͈,¦æJ¥÷ Ž÷ fÿÓ‡· ^ÿæÆY÷àÀYÒëÿÿ#~ Íÿÿª~„Í0~ü͸~tÎìST1: .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î÷ÿÿ’,D¦ÿ·´Y‡À`â�ÊÅøÊÕ0ƒ ÃE€ƒ ƒ À ôŠj¦‡` l¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙz¦†¦ˆ¦Š¦Œ¦Ž¦�¦’¦”¦–¦˜¦±�¦š¦œ¦ž¦ ¦¢¦¤¦(„¦­$ަœ¦¬¬,¨w Âì×þÿ&  „Ý6 Ä d7¡Œþa‚ß•àþÿô‹N,(¨S§ ­S§Zô‹§VöÿÿÄ ª¦„ — Jë,N¨ô•S§ß�þÿ���«§W Á•¡•,t¨?†r� ß•àþÿÊ 2Á ¹z¦±z¦ô•S§4Ч‰,š¨2 ² Ö ß�þÿw ïÿÿÿÿÿÿÿÿG~ìÎÿÿÿÿÿÿÿÿÿÿÑ~dÏÿÿTULSA ÿÿ2u~ÜÏ222@2@ ŠdŽŽd’’’2”¿~TÐÿÿðWORD 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 UNIñSK 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 >ýç,2©·•6æ¦f�vÂ$ý ‚ª¦²� 6 ¨,X©²€6 „ÜÕߕàþÿÆüü&ÀÎ ",~©7 fÀ À 2 7 ¸ ÊÁ ô•S§¡÷,¤©‡ô•S§ß�þÿ&÷ 0ç‡ô•S§€œ À Ä ¾,Ê©<„¦ª¦0ª¦z¦0ª¦„¦ß�þÿ‡Ÿ•þÿŽŽŽ‡q,ð©æ—þÿ& ÷ ÿwîß•àþÿÀhü ÜÈ1ŠÑ,ªS§7 Tü7 ó~Ò¾ÞÿÿœÖ~ÌÐÿÿ……Û~DÑ…………T~¼Ñÿÿÿw<Èÿÿ 2222ÿÿKôT 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 vì0 ÆHüW  ‡ñ‹§ ±ŠS§�,<ªŠþÿf÷ Âåw¢ñŠS§ûw tê €Ýp7 Jüm‚Ì*bªæ—þÿß•àþÿœS§Á y|ª8«8«8«8«8«�ª¨ªÞªx,†ªÞª8«8«8«ÞªŸ“þÿ&÷ Àß•àþÿÖ J"2 ,¬ª�ª¦w ¼ûA7 ¶û7 Ž 7 Øë�Áeƨûffff,Òªffffff ‡ð‹§ð•ýÿS§ð•S§O,øªŸ“þÿ&&÷ dæ€ß•àþÿð•S§2 Â�P«%,«W"Âåø1f÷ `úŸ•þÿw ”鎇m,D«cD«öÕ€6Šw féæ—þÿ €ˆ,j«j€Á‘ 7 0ûc‚À ª¦€ ß•àþÿœ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 / -Âå2Lð•S§Ÿ“þÿBœ £,¶«Â ƒ„¦AC ÄÃû;ß•àþÿW"5ò „¦ ,Ü«r„¦ ò„¦z¦²`z¦L2z¦ÉÀ � E,¬†1 ð‹§ð•S§Ÿ“þÿ&&÷ Få€ ß•,(¬àþÿ0ŠS§Ÿ•þÿvw ˜è‡… … … õÅ ð•þÿS§3,N¬ðw tè×þÿ&  „Ý=7¡Dú:‚ß•àþÿ­S§ß,t¬5ô•S§¡ ‡ß�þÿæ�&÷ ’䂃• #Ä ˜,š¬ª¦„ Ê �œ Á ¹z¦±z¦´ŠS§ß�þÿ¶w è,À¬ö އö—þÿæ÷ FüwŽ Ž Ž 6 É,æ¬æŠþÿ7 ôÿ÷ xùn÷ œé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 ;BRANCþnùÄ  ë, ­÷ ØÿíÂ`ò „¦!÷—!âß•àþÿ÷ ¶ÿ5,2­Ü�„¦W Lƒw.ùr„¦²z¦òe„¦z¦ EÜã,X­W­S§7 ùŠþÿÕw‘þøµŠS§‚ ·�öø·øøÉt,~­ñ @œÀEÿÀ @`ÀeB·¬·Fÿû,¤­& fB ·˜·2ÿF€ 6 vœ sÊ­�‚ƒ„…þy–<7 Òi7 Ði7 Îi7 BpÀÈiÀ 0 š,®<„¦ð„¦z¦0`z¦ÀåöÀ,ÁX0Ч ñ?,Ô<ª¦ð•S§0Š«§á À ð7ŠjjÀÁP«ÙÀ @ ú<ü‡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¾,®l‡÷þÿv÷Eàÿp·j·d· ^÷ PøþT,&®æBø÷ "üÂb®—"Ân®—"& ¦’$Ò� ø,L®ŠÒ.Ò(Ê ÷ 8÷wŠþZZr®É,‚®ß’®ßà‡· ìÿß ®ùß’®ÀÑ,¨®Ô®”vÿß‹tÿý€ùß‹tÿý€À¯”vÿß‹tÿý€,ήùò THIS IS COLOSSUS. ROS IS DEA²$ô®D. YOU MUST R E B O O T !T,¯æèP÷àâP&×-&r±‚€È ÷e?A,8¯ð �6 °È €¶Èeø¬ÿÿN~Ô×Ö~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,^¯ôîð�÷¶öð©÷•[¶üÿ÷ŠSûG,„¯& Æå Û¦ölP÷àdPw *å€È%ð•ä,ª¯ÿÿÈ%ÿÿœÁEðÿÁ Cw ·  Áet±],ЯBA  ûJ³”±É6 w æä0œ´±n,ö¯Å±€ ð‹´±"$·ŠÐô‰À:÷å2ȬŽ,°ÿÿôœÁEðÿW íÁ 9”±1”± æ7¼OÒ,B° ðŠÅ±ÔÀ À À fÁt±`÷à O7�vBABæ,h°W¬ÿùñŠöCEqœJ°”±É6,ް…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·,±¥W¬ÿúJ°”±É÷ Àñ—Àt±Á,&±÷àÒNÐ Á üÿ ÷Š˜wúþwåJ±+,t±®,š±gÀ±4Ú±l,ܱ7ŠÈ÷ j÷b÷ €ô ÷ V ÷ Pæjô,²÷ Jø& æì¬÷Š„7Š˜&fÀ”µÐ•<ˆŠ¢},(²<9·Š€ŠˆŠ¢<2ŠˆŠ¢-Šˆ "·,N²ÁPP� ~ÛŠ~”Û~ Ü™~„Ü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¢‡µ É•¡Š÷RµÀ÷µ÷eÀ,š²²�€·Š÷µ‰–%!À˜G7,À²0 = OUTPUT HAS PRIORITY . = TTYPRT+NTTYS TTO1ST+ô…h à…W Ð…G $À.$¥.J#pÿÿÿ2 Œ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 ITWRµþGE; 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 TE´þU ; * ; 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 SE¤þeTIVE ; 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 ; *VEHA�þyED 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 QSVE‚Y .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 IDENTI’STB 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 tþ•FICATION: 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 mþSCUN 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)iþK 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 . EGdþ¥RN 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; MþHE 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 ; * Lþ½CLEAR 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 EþELEV 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 ; DþÅSCHEDULE ; 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 5þENR 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 RLL4þÕPARAMETER '$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 ME1þCA; 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 * ; CATAÚS 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 INêQFIRST(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 THþíDEX 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 INTAONþS 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 CLYþõIN ; -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 ; ;- -RYNTþON; 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 SKFTþùSTATUS=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 AþREL 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 TSýý4 + 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 ORABÈýÄýC 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