, vGAjmmre8'PYeY{ TK+}FnTqTЈ?Hr0M J$?roi?%thsth<ߔ ėy뀁fWVZ/ 5a[迱Ğ3[e6%+{00iWmH1qV XN2.?ezL$ԇ~.ULs,nI\|n7Sɤ{r%?ִm%- .])LQ o2D=+xYtaԙ̵mp#x1rd*B=ĥyO2-FKo4 20uuQ 8LtFZ1fkkOԥ`|KTr&YD!>rDjIʚPzK xO_ʤwh'A]X2#{(<ۙ6dL O!4(bD_٥\ .TITLE RSX11C ; ; RSX11C V005A ; JULY 10,1972 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; ; STANDARD REGISTER DEFINITIONS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 .GLOBL PS ;ADDRESS OF PROCESSOR STATUS REGISTER. PS=177776 .GLOBL S.STAT ;PROCESSOR STATUS WORD. S.STAT=-2 ; ; REAL TIME HEADER SYMBOLIC DEFINITIONS ; .GLOBL CN ;RTH-CALL NUMBER. .GLOBL SN ;RTH-SYMBOLIC NAME(CHARS 1-3) .GLOBL SS ;RTH-SYMBOLIC NAME (CHARS 4-6) .GLOBL SA ;RTH-; ; EXECUTIVE TABLES AND DATA AREAS - PART 1 ; ; THE EXEC TABLES EXIST IN TWO PARTS TO ; FACILITATE PAPER TAPE HANDLING ; ; VERSION V005A ; 001 ; ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; ; GLOBAL DEFINITIONS ; .GLOBL BACKGD ;BACKGROUND ACTIVE FLAG .GLOBL CTICK ;TIME OUT AND CLOCK SCAN FLAGS .GLOBL COUNT ;TICKS COUNT .GLOBL CTOD ;SAME AS COUNT; CURRENT TICKS COUNT. .GLOBL ERMSGB ;ERROR MESSAGE TASK BUFFER .GLOBL ERMSGE ;END OF ERMSGB .GLOBL HASU ;;DEVICE DRIVER LIST ; VERSION V005A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; RESIDENT TABLE SHOWING AVAILABILITY OF ; DEVICE DRIVERS AND THEIR CURRENT ; LOCATION ;FORMAT:- ; 4 WORDS PER ENTRY (POSITION IMMATERIAL EXCEPT ; THAT THE DUMMY ENTRY MUST BE FIRST) ; GENERAL FORM: ; ; WORD 1: DEVICE NAME (PACKED RADIX 50) ; WORD 2: CORE LOAD ADDRESS OR 0 ; WORD 3: INTERRUPT VECTOR ADDRESS ; WORD 4: ADR OF DDB ; ; DUMMY ENTRY: ; WORDS 1 - 3: 0; ; ALTERNATE DEVICE TABLES FOR INIT ; ; VERSION V004A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD,MASS.01754 ; ; THESE THREE TABLES ARE ACCESSES BY A COMMON INDEX ; ; GLOBAL DEFINITIONS ; .GLOBL ALTD ;ALTERNATE DEVICE LIST .GLOBL ALTA ;ALTERNATE NAME DEVICES .GLOBL ALTU ;ALTERNATE DEVICE UNITS ; ; TABLE "ALTD" HOLDS A LIST OF DEVICES IN RAD50 FORM. ; THE TABLE IS TERMINATED BY A ZERO ENTRY. ; ALTD: 0 ;TABLE TERMINATOR ; ; TABLE "ALTA" HOLDS A LIST OF ALTE SUSPENDED STACK ADDRESS .GLOBL NP ;RTH-NUMBER PASSED IN CALL .GLOBL WL ;RTA-WAITING LIST HEAD(LOW BYTE)&TAIL(HIGH BYTE) .GLOBL SC ;RTH-START OF CODE(TRANSFER ADDRESS) .GLOBL IS ;RTH-INITIAL STACK SETTING. .GLOBL TR ;RTH-TRAP VECTOR SETTING. 0 IF NONE. .GLOBL MS ;RTH-MAXIMUM STACK ADDRESS (STACK LIMIT) .GLOBL IP ;RTH-INITIAL PRIORITY (LOW BYTE),#OF SHARED RESO .GLOBL SL ;MINUTES AT START(HI BYTE),SECONDS AT LAST UPDAT .GLOBL SM ;MAXIMUM LEVEL 1 RUN TIME(SECONDS) .GLOBL SR ;SECONDS SINCE HIGHEST ADDRESS SYSTEM USES .GLOBL HATU ;HIGHEST SLOT TIMER USE .GLOBL HOUR ;CURRENT TIME (HOUR) .GLOBL ISAD ;BOTTOM WORD OF SYSTEM STACK .GLOBL LAPU ;LOWEST SLOT TASKS USE .GLOBL LEV ;HEAD OF THE LINK LISTS .GLOBL LTDT ;LAST TIME IN TIMER .GLOBL MIN ;CURRENT TIME (MINUTES) .GLOBL NEWSA ;NEW PROGRAM ACTIVE FLAG .GLOBL PAN$ ;PANIC DUMP ADDRESS. .GLOBL PRIOR ;PRIORITY CONVERSION TABLE .GLOBL PRWT ;COUNT OF TASKS WAITING FOR PROCESSOR .GLOBL PSTB ;PRIORITY STATUS .GLOBL PTBK ;BACKWA ; WORD 4: ADDRESS OF LOCATION AFTER TABLE END ; (USED FOR SEARCH CONTROL) ;GENERATED AT SYSTEM BUILD TIME ;USED BY:- ; 1) .INIT ROUTINE TO FIND THE DDB & DRIVER ADDRESS. ; 2) CSI TO GET SYSTEM DEVICE. ; 3) INITIALIZATION CODE TO FIND DRIVER INT VECTORS. ; .GLOBL DDL. ;DEVICE DRIVER LIST ; ;SYSTEM DUMMY: DDL.: .WORD 0 ;NAME - DUMMY' .WORD 0 ;CORE ADDRESS .WORD 0 ;I.V. ADDRESS .WORD DDL.ND ;END OF TABLE .IFNZ DC.DSC .GLOBL DDL.DC ;DDL-RC11 .GLOBL DC ;RC11 DRIVER .GLOBLRNATES FOR THE ; NAMES IN TABLE "ALTD". THESE ENTRIES POINT TO THE ; PROPER DDL ENTRY. ; ALTA: ; ; ; TABLE "ALTU" HOLDS A LIST OF UNIT NUMBERS FOR TABLES ; "ALTD" AND "ALTA". LOW BYTE = UNIT NUMBER FOR ALTD, ; HIGH BYTE = UNIT NUMBER FOR ALTA. ; ALTU: ; .EVEN ; .END BEGINNING OF THIS RUN. .GLOBL WTCH ;WATCH DOG TIMER(LOW BYTE) .GLOBL FLBF ;DISPLACEMENT TO BUFFER ADDRESS ;STORAGE IN TASK RTH .GLOBL FLTB ;DISPLACEMENT TO FILE ENTRY ADDRESS ;STORAGE IN TASK RTH .GLOBL OTSV ;POINTER TO $OTSV (FORTRAN OTS IMPURE AREA VECTO CN=0 ;DISK CALL NUMBER REAL TIME LIBRARY SN=-2 ;SYMBOLIC NAME SS=-4 ;SECOND WORD OF 6 CHARACTER SYMBOLIC NAME SA=-6 ;SUSPENDED STACK ADDRESS NP=-8. ;NUMBER PASSED TO PROGRAM ACTIVATED WL=-10. ;LEFT BYTE LAST WAITRD POINTER LIST .GLOBL PTFW ;FORWARD POINTER LIST .GLOBL PWFLF ;POWER FAILURE FLAG( (COUNT OF FAILURES) .GLOBL QUTM ;QUANTUMS FOR LEVELS 1,2,3,4 .GLOBL SEC ;CURRENT TIME (SECONDS) .GLOBL SUTB ;SUSPEND STATUS .GLOBL SYAUA ;SYSTEM,USER ACTIVE FLAG .GLOBL TIC ;TIME IN COUNTER TO NEXT EVENT .GLOBL TSPW ;DELAYED CONSOLE WAIT FLAG .GLOBL UPSTK ;USER STACK AT ENTRY TO EXEC .GLOBL WDTB ;HEADER ADDRESS TABLE .GLOBL WTCHD ;WATCH DOG TIMER POINTER .GLOBL WTTS ;HEAD OF TIMER SLOT WAITING LIST  DCDDB ;RC11 DDB ;RC11 DDL.DC: .RAD50 'DC' ;NAME .WORD DC ;CORE ADDRESS .WORD 210 ;I.V. ADDRESS .WORD DCDDB ;DDB ADDRESS .ENDC .IFNZ DF.DSC .GLOBL DDL.DF ;DDL-RF11 .GLOBL DF ;RF11 DRIVER .GLOBL DFDDB ;RF11 DDB ;RF11 DDL.DF: .RAD50 'DF' ;NAME .WORD DF ;CORE ADDRESS .WORD 204 ;I.V. ADDRESS .WORD DFDDB ;DDB ADDRESS .ENDC .IFNZ DK.DSC .GLOBL DDL.DK ;DDL-RK11 .GLOBL DK ;RK11 DRIVER .GLOBL DKDDB ;RK11 DDB ;RK11 DDL.DK: .RAD50 'DK' ;NAME .WORD DK ;CORE ADDRESS .WORD 220  .TITLE KB ; ; VERSION V004A ; 001 ; ; KEYBOARD AND TELEPRINTER DRIVER - PART 1 ; ; THE KB DRIVER IS IN THREE PARTS TO FACILITATE ; PAPER TAPE HANDLING. ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; ; GLOBAL DEFINITIONS ; .GLOBL CMDST ;KB KEYBOARD TYPE-AHEAD BUFFER. .GLOBL KB ;KB DRIVER. .GLOBL KBDDB ;KB KEYBOARD DDB. .GLOBL K.ENFL ;KEYBOARD END-OF-FILE FLAG(BYTE). .GLOBL TPDDB ;KB TELEPRINTER DDB. ; ; GLOBAL REFERENCES ; .GLOBL DV.A2 ;CREATE A002 ING, RIGHT FIRST WAITING CALL SC=-12. ;INITIAL START OF CODE IS=-14. ;INITIAL STACK ADDRESS TR=-16. ;LEFT BYTE EMT TRAP STARTS RIGHT TRAP STATUS MS=-18. ;MAXIMUM STACK ADDRESS IP=-20. ;LEFT SHARED DEVICE COUNTS, RIGHT INITAL PRIORITY SL=-22. ;HIGH BYTE MINUTES AT START, LOW BYTE SECONDS LAST UPDATE SM=-24. ;MAXIMUM SECONDS BEFORE ERROR REPORT SR=-26. ;SECOND SINCE BEGINING OF THIS RUN WTCH=-28. ;WATCH DOG TIMER LOW BYTE FLBF=-30. ;FILE BUFFER STORAGE FLTB=-32. ;FIL(FREE SLOTS) ; ; GLOBAL REFERENCES ; .GLOBL CLOCK ;CLOCK SCAN ROUTINE .GLOBL ENDM ;END OF MONITOR .GLOBL ROBIN ;ROUND ROBIN SCHEDULER .GLOBL SPARTH ;SPARTA HEADER ; ; THIS FILE MUST BE ASSEMBLED FOLLOWING THE USER ; PARAMETER DEFINITIONS AND FOLLOWING THE EXECUTIVE ; DEFINITIONS. IT IS FURTHER ASSUMED THAT NO CODE ; OF ANY KIND IS GENERATED IN THE PREVIOUS FILES ; AND THAT RELOCATABLE 0 OF THIS MODULE WILL ; BE FORCED TO ABSOLUTE 0 WITH A "/B:0" LINKER ; SWITCH. ; ; SET ORIGIN FOR BA;I.V. ADDRESS .WORD DKDDB ;DDB ADDRESS .ENDC ; ; TC11 DECTAPE ; .IFNZ DT.DSC ; .GLOBL DDL.DT .GLOBL DT ;DRIVER ADDRESS .GLOBL DTDDB ;DECTAPE DDB ; DDL.DT: .RAD50 'DT' ;DRIVER NAME DT ;DRIVER ADDRESS 214 ;INTERRUPT VECTOR ADDRESS DTDDB ;DRIVER DDB ADDRESS ; .ENDC ; .IFNZ TPSZ+KBFSZ .GLOBL DDL.KO ;DDL-KB OUTPUT SIDE .GLOBL KB ;KB DRIVER. .GLOBL TPDDB ;KB TELEPRINTER DDB. ;TELEPRINTER: DDL.KO: .RAD50 'KB' ;NAME - PACKED 'KB' .WORD KB+16 ;CORE ADDRESS MESSAGE SUBROUTINE. .GLOBL HSASI ;HIGH SPEED ACTIVATE SUBROUTINE. .GLOBL KBBUF ;ADDRESS OF KB KEYBOARD EXEC BUFFER. .GLOBL OPERT ;OPERR TASK AND SLOT NUMBER. .GLOBL PAN$ ;PANIC DUMP ADDRESS. .GLOBL SRTI ;COMMON SYSTEM EXIT. .GLOBL STRG ;COMMON SYSTEM ENTRY SUBROUTINE. .GLOBL SY.DFL ;DDB-FLAG BYTE. .GLOBL SY.DPR ;DDB-PERMANENT DDB BIT. .GLOBL SY.DWN ;DDB-DEVICE IS DOWN FLAG (NOT READY). .GLOBL SY.MUD ;DRIVER MULTI-ACCESS BIT. .GLOBL SY.RES ;DDB-RESERVED FLAG. .GLOBL SY.RTN ;DDB-TAE TABLE SLOT STORAGE OTSV=-34. ;POINTER TO OTS ; ; PRIORITY LEVEL DEFINITIONS FOR PS ; .GLOBL PL7 ;PRIORITY LEVEL 7 .GLOBL PL6 ;PRIORITY LEVEL 6 .GLOBL PL5 ;PRIORITY LEVEL 5 .GLOBL PL4 ;PRIORITY LEVEL 4 .GLOBL PL3 ;PRIORITY LEVEL 3 .GLOBL SY.PLE ;PRIORITY LEVEL 4 .GLOBL SY.PLH ;PRIORITY LEVEL 7 PL7=340 ;PRIORITY LEVELS PL6=300 PL5=240 PL4=200 PL3=140 SY.PLE=200 SY.PLH=340 ; LINE FREQUENCY (50./60.CYCLE) .GLOBL CYCSEC ;LINE FREQUENCY IN TICKS PER SECOND. .GLOBL MCYC ;MINSE OF SYSTEM STACK AND FOR ; EXECUTIVE SCHEDULING TABLES. ; .WORD 100 ;EXECUTES AN ILLEGAL INSTRUCTION ;ON JUMPS TO 0 .=.+774 ISAD: .WORD 0 ;SYSTEM STACK TABORG=. .IFNDF NO.TIM .BYTE -N+2,-N+2 ;POINTERS FORWARD AND BACKWARD .BYTE -N,-N ; .BYTE 0,-N ;ONLY POINTER BACK .BYTE 0,-N+2 ; .ENDC .=TABORG+N PTFW: .BYTE 0 ;ZERO LOCATION IN FORWARD POINTER TABLE PTBK: .BYTE 0 ;ZERO LOCATION IN BACK POINTER BYTE TABLE .=TABORG+N+N ;START OF TIMER SLOT SUTB AND PSTB TABLES .IFNDF .WORD 64 ;I.V. ADDRESS .WORD TPDDB .ENDC .IFNZ TPSZ+KBFSZ .GLOBL DDL.KB ;DDL-KB INPUT SIDE .GLOBL KB ;KB DRIVER. .GLOBL KBDDB ;KB KEYBOARD DDB. ;KEYBOARD DDL.KB: 0 ;ILLEGAL NAME .WORD KB ;CORE ADDRESS .WORD 60 ;I.V. ADDRESS .WORD KBDDB .ENDC .IFNZ TK.NOU .GLOBL DDL.TO ;DDL-TT OUTPUT SIDE .GLOBL DDL.TT ;DDL-TT INPUT SIDE .GLOBL TODDB ;TT TELEPRINTER DDB. .GLOBL TT ;TT DRIVER. .GLOBL TTDDB ;TT KEYBOARD DDB. ;NON-CONSOLE TELEPRINTER DDL.TO: .RAD50 'TT' ;NAME .WOSK DDB RESERVED FOR (BYTE) .GLOBL SY.TO ;DDB-TIME OUT COUNT (0=NOT ACTIVE) .GLOBL TKI.CS ;ADDRESS OF LIST OF KB&TT INPUT STATUS REGISTERS .GLOBL TKO.CS ;ADDRESS OF LIST OF KB&TT OUTPUT STATUS REGISTER .GLOBL TPBUF ;ADDRESS OF KB OUTPUT EXEC BUFFER. .GLOBL TTOPT ;TT OPERATOR TASK SLOT NUMBER. .GLOBL UTILT ;UTILITY TASK SLOT. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; KEYBOARD PREAMBLE ; KB: .WORD 0 ;DDB PTR .BYTE KB.BP ;FACILITIES .BYTE 1 ;TERMINAL DEVICE .BYTE US LINE FREQUENCY .IFNDF CYCSEC CYCSEC=60. .ENDC MCYC=-CYCSEC ; TIME-OUTS FOR LEVELS 3,2,1 (TICKS) ; .GLOBL TIMLV1 ;TIME-OUT FOR LEVEL1(TICKS). .GLOBL TIMLV2 ;TIME-OUT FOR LEVEL 2(TICKS). .GLOBL TIMLV3 ;TIME-OUT FOR LEVEL 3(TICKS). .IFNDF TIMLV3 ; .IFEQ CYCSEC-60. ; TIMLV3=6. .ENDC ; .IFEQ CYCSEC-50. ; TIMLV3=5. .ENDC .ENDC .IFNDF TIMLV2 ; .IFEQ CYCSEC-60. ; TIMLV2=30. .ENDC ; .IFEQ CYCSEC-50. ; TIMLV2=25. .ENDC .ENDC .IFNDF TIMLV1 ; .IFEQ CYCSEC-60 NO.TIM .BYTE 0,-N+4 ;POINTER TO "CLOCK" EXTENSION .BYTE 0,-N+6 ;POINTER TO "ROBIN" EXTENSION .WORD CLOCK ;CLOCK ACTIVATES TASKS ON TIME .WORD ROBIN ;L1 TIME SLICE ROUND ROBIN FOR BACKGROUND .ENDC .=TABORG+N+N+N SUTB: .BYTE 0 PSTB: .BYTE 0 ;PROGRAM STATUS TABLE ZERO WORD .=SUTB+N ;START OF TIMER SLOT WDTB TABLE CYCSEC ;CURRENT DELAY FOR CLOCK TASK TIMLV1 ;CURRENT DELAY FOR ROUND ROBIN CYCSEC ;REPEAT DELAY FOR CLOCK TASK TIMLV1 ;REPEAT DELAY FOR ROUND ROBIN .=SUTB+N+N RD TT+16 ;CORE ADDRESS .WORD 304 ;I.V. ADDRESS .WORD TODDB ;NON-CONSOLE KEYBOARD DDL.TT: .WORD 0 ;NO NAME .WORD TT ;CORE ADDRESS .WORD 300 ;I.V.ADDRESS .WORD TTDDB .ENDC .IFNZ PRSZ .GLOBL DDL.PR ;DDL-PR .GLOBL PR ;PR DRIVER. .GLOBL PRDDB ;ADDRESS OF PR DDB. ;P/T READER: DDL.PR: .RAD50 'PR' ;NAME PACKED 'PR' .WORD PR ;CORE ADDRESS .WORD 70 ;I.V. ADDRESS .WORD PRDDB .ENDC .IFNZ PPSZ .GLOBL DDL.PP ;DDL-PP .GLOBL PP ;PP DRIVER. .GLOBL PPDDB ;ADDRESS OF PP DDB. 4 ;BUFF SIZE/16 .BYTE KB.INT-KB ;INTERRUPT ENTRY .BYTE 200 ;PRIORITY=4 .BYTE KB.OP-KB ;OPEN .BYTE KB.TF-KB ;TRANSFER .BYTE KB.CL-KB ;CLOSE .BYTE 0 ;SPECIAL FCN .BYTE KB.TB-KB ;MISCELLANEOUS ENTRY KB.NM: .RAD50 /KB/ ;NAME ; ; TELEPRINTER PREAMBLE ; KBO: .WORD 0 ;DDB PTR .BYTE KBO.BP+SY.MUD ;FACILITIES .BYTE 1 ;TERMINAL DEVICE .BYTE 4 ;BUFF SIZE/16 .BYTE KBO.IN-KBO ;INTERRUPT ENTRY .BYTE 200 ;PRIORITY=4 .BYTE KBO.OP-KBO ;OPEN .BYTE KBO.TF-KBO ;TRANSFER .BYTE KBO.CL. ; TIMLV1=60. .ENDC ; .IFEQ CYCSEC-50. ; TIMLV1=50. .ENDC .ENDC ; ; SIZE OF SHEDULING TABLE ; .GLOBL N ;SCHEDULING TABLE SIZE .GLOBL MN ;-N .IFNDF N N=128. .ENDC MN=-N ;SET TO -N. ; ; EAE PARAMETERS ; .GLOBL EAEAC ;EAE AC REGISTER. .GLOBL EAEMQ ;EAE MQ REGISTER. .GLOBL EAESC ;EAE SC&SR. EAEAC=177302 ;AC EAEMQ=177304 ;MQ EAESC=177310 ;SC&SR ; ; THE FOLLOWING DEFINE THE SLOTS RESERVED FOR SYSTEM ; TASKS. THESE TASKS MUST BE LOADED INTO THE SLOTS ; INDICATE ;SUSPEND STATUS 0=WAITING FOR COMPUTER WDTB: .WORD SPARTH ;NULL TASK HEADER .=.+N LEV: ;LEVEL LIST START TABLE .IFNDF NO.TIM .BYTE -N ;START OF TIMER LIST .ENDC .IFDF NO.TIM .BYTE 0 ;START OF TIMER LIST .ENDC .BYTE 0 ;START OF LEVEL 1 LIST .BYTE 0 ;START OF LEVEL 2 LIST .BYTE 0 ;START OF LEVEL 3 LIST .BYTE 0 ;START OF LEVEL 4 LIST .BYTE 0 ;START OF TIME OF DAY LIST HASU: .WORD ENDM ;HIGHEST ADDRESS SYSTEM USES L UPSTK: .WORD 0 ;USER STACK SETTING FOR USER PROGRA;P/T PUNCH: DDL.PP: .RAD50 'PP' ;NAME - PACKED 'PP ' .WORD PP ;CORE ADDRESS .WORD 74 ;I.V. ADDRESS .WORD PPDDB .ENDC .IFNZ LPSZ .GLOBL DDL.LP ;DDL- LP .GLOBL LP ;LP DRIVER. .GLOBL LPDDB ;ADDRESS OF LP DDB. ;LINE PRINTER DDL.LP: .RAD50 'LP' ;NAME - PACKED 'LP ' .WORD LP ;CORE ADDRESS .WORD 200 ;I.V. ADDRESS .WORD LPDDB .ENDC .IFNE AF.CHN .GLOBL DDL.AF ;DDL-AFC .GLOBL AF ;AFC DRIVER .GLOBL AFDDB ;AFC DDB ;AFC DDL.AF: .RAD50 'AF' ;NAME .WORD AF ;CORE ADDRESS. .W -KBO ;CLOSE .BYTE 0 ;SPECIAL FCN .BYTE KBO.TB-KBO ;MISCELLANEOUS ENTRY KBO.NM: .RAD50 /KB/ ;MISCELLANEOUS ENTRY DISPATCH TABLE FOR KEYBOARD KB.TB: 0 0 0 KB.S ;CANCEL ;MISCELLANEOUS ENTRY DISPATCH TABLE FOR PRINTER KBO.TB: 0 KBO.TO ;TIME OUT 0 0 .IFNDF TK.NOU TK.NOU=0 .ENDC .IFNZ TK.NOU ; ; MULTI-KEYBOARD/TELEPRINTER DRIVER ; ; GLOBAL DEFINITIONS ; .GLOBL TODDB ;TT TELEPRINTER DDB. .GLOBL TT ;TT DRIVER. .GLOBL TTDDB ;TT KEYBOARD DDB. ; ; GLOBAL REFERENCES ; .GLO!D. THE SLOTS ARE DEFINED RELATIVE TO ; THE HIGHEST SLOT (N). ; .GLOBL POWFT ;POWER FAIL TASK SLOT. .GLOBL UDCT ;UDC TASK SLOT. .GLOBL TTOPT ;TT OPERATOR TASK SLOT NUMBER. .GLOBL ERMST ;ERROR MESSAGE TASK SLOT. .GLOBL OPERT ;OPERR TASK AND SLOT NUMBER. .GLOBL UTILT ;UTILITY TASK SLOT. .GLOBL GETT ;ON LINE LOADER TASK SLOT # .GLOBL SYSRT ;SYSTEM REPORT TASK CALL NUMBER POWFT=N-2 ;POWER FAIL TASK SLOT #. UDCT=N-4 ;UDC TASK SLOT # TTOPT=N-6 ;TT OPERATOR TASK SLOT #. ERMST=N-8. ;"M RUNNING SYAUA: .WORD 0 ;HIGH BYTE-=SYSTEM ACTIVE, LOW BYTE=USER ACTIV NEWSA: .WORD 0 ;NEW PROGRAM ACTIVE FLAG .IFNDF NO.TIM HATU: -N+6 ;HIGHEST TIMER SLOT USED .ENDC .IFDF NO.TIM HATU: .WORD -N .ENDC LAPU: .WORD 0 ;LOWEST TASK SLOT -SET BY INITIALIZATION LTDT: .WORD 1 ;LAST TIME IN TIMER TIC: .WORD 1 ;TIME IN COUNTER PRWT: .WORD 0,0 ;ERROR MESSAGE TASK ERROR BUFFER ERMSGB: .=.+ERRBSZ+ERRBSZ+ERRBSZ+ERRBSZ+ERRBSZ+ERRBSZ ERMSGE: WTCHD: .WORD QUTM ;WATCH DOG TIMER POINTER QUTM: ORD 134 ;I.V. ADDRESS. .WORD AFDDB ;DDB ADDRESS. .ENDC .IFNE AD.CHN .GLOBL DDL.AD ;DDL-ADC .GLOBL AD ;AD01 DRIVER .GLOBL ADDDB ;ADC DDB ;AD01 DDL.AD: .RAD50 'AD' ;NAME .WORD AD ;CORE ADDRESS. .WORD 130 ;I.V. ADDRESS. .WORD ADDDB ;DDB ADDRESS. .ENDC .IFNE UD.CHN .GLOBL DDL.UD ;DDL-UDC .GLOBL UD ;UDC DRIVER .GLOBL UDDDB ;UDC DDB ;UDC DDL.UD: .RAD50 'UD' ;NAME .WORD UD ;CORE ADDRESS. .WORD 234 ;I.V. ADDRESS. .WORD UDDDB ;DDB ADDRESS. .ENDC DDL.ND: .EOT $BL TKBUF ;ADDRESS OF TT KEYBOARD EXEC BUFFER. .GLOBL TOBUF ;ADDRESS OF TT OUTPUT EXEC BUFFER. ; ;PARAMETER TK.NOU DEFINES THE NUMBER OF UNITS ; ; ; KEYBOARD PREAMBLE TT:TK: .WORD 0 ;DDB POINTER ON ENTRY .BYTE TK.BP ;FACILITIES .BYTE 1 ;TERMINAL DEVICE .BYTE 4 ;STD BUFF SIZE .BYTE TK.INT-TK ;INTERRUPT ENTRY .BYTE 200+TK.NOU-1 ;PRIORITY 4 PLUS MAX UNIT NUMBER. .BYTE TK.OP-TK ;OPEN .BYTE TK.TF-TK ;TRANSFER .BYTE TK.CL-TK ;CLOSE .BYTE 0 ;SPECIAL FCN .BYTE TK.TB-TK ;MISCELLANEO%ERROR MESSAGE TASK OPERT=N-10. ;OPERATORS CONSOLE TASK UTILT=N-12. ;UTILITY TASK GETT=N-14. ;ON LINE LOADER TASK SLOT #. SYSRT=-1 ;REPORT TASK CALL NUMBER ; ; NUMBER OF ITEMS FOR ERROR MESSAGE BUFFER ; .GLOBL ERRBSZ ;ERROR MESSAGE BUFFER SIZE (# OF ITEMS) .IFNDF ERRBSZ ERRBSZ=10. .ENDC ; ; SYMBOLIC ERROR MESSAGE NUMBERS AND CLASSES. ; .GLOBL SHORT ;SHORT CALL SEQUENCE ERROR. .GLOBL ABSENT ;TASK CALLED BY NUMBER NOT PRESENT. .GLOBL UNITS ;ILLEGAL TIME UNITS. .GLOBL SIZE ;IL&.BYTE 0 ;TIME QUANTUM LEVEL 1 .BYTE TIMLV2 ;TIME QUANTUM LEVEL 2 .BYTE TIMLV3 ;TIME QUANTUM LEVEL 3 .BYTE 0 ;TIME QUANTUM LEVEL 4 SEC: .BYTE 0 ;PRESENT TIME OF DAY SECONDS MIN: .BYTE 0 ;MINUTES HOUR: .BYTE 0 ;HOURS WTTS: .BYTE 0 ;WAITING LIST OF TIMER SLOTS COUNT: .WORD 0,0 ;INCREMENTED 60/SECOND FOR TICKS TRAP CTOD=COUNT TSPW: .BYTE 0 ;FLAG SET TO BACKGROUND TASK # ; ON A CONSOLE WAIT. BACKGD: .BYTE 0 ;NUMBER OF BACKGROUND TASK 0=NONE K PWFLF: .BYTE 0 ;POWER FAIL MESSA' .TITLE OFF ; VERSION V005A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; ; STANDARD REGISTER DEFINITIONS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; THIS FILE IS CONDITIONALLY ASSEMBLED ON THE FOLLOWING ; SWITCHES: ; IF IO.XTH=0, MUST REASSEMBLE ; IF NO.TIM IS DEFINED, MUST REASSEMBLE. .IFNDF IO.XTH IO.XTH=7 ;DEFAULT VALUE .ENDC ; ; GLOBAL DEFINITIONS ; .GLOBL EOFF ;OFF HANDLER .GLOBL ESTART ;START HANDLER .GLOBL EXRUN ;EXI(US ENTRY TK.NM: .RAD50 /TT/ ;NAME ; TELEPRINTER PREAMBLE TKO.TF=TT.TF ;TRANSFER TKO.INT=TT.INT ;INTERRUPT TKO: .WORD 0 ;DDB PTR .BYTE TKO.BP+SY.MUD ;FACILITIES .BYTE 1 ;TERMINAL DEVICE .BYTE 4 ;STD BUFF SIZE .BYTE TKO.INT-TKO ;INTERRUPT ENTRY .BYTE 200+TK.NOU-1 ;PRIORITY 4 PLUS MAX UNIT # .BYTE TKO.OP-TKO ;OPEN .BYTE TKO.TF-TKO ;TRANSFER .BYTE TKO.CL-TKO ;CLOSE .BYTE 0 ;SPECIAL FCN .BYTE TKOTB-TKO ;MISCELLANEOUS ENTRY TKO.NM: .RAD50 /TT/ ;NAME ;MISCELLANEOUS ENTRY D)LEGAL TIME VALUE .GLOBL SLOT ;NO SLOT AVAILABLE. .GLOBL TIMER ;MAX RUN TIME EXCEEDED. .GLOBL COMMAN ;ILLEGAL OR UNRECOGNIZED COMMAND. .GLOBL REPORT ;ILLEGAL SYSTEM REPORT NUMBER. .GLOBL BUSY ;BACKGROUND BUSY. .GLOBL SYMBLE ;SYMBOLIC TASK NAME NOT FOUND. .GLOBL SYNTAX ;COMMAND SYNTAX ERROR. .GLOBL TURN.O ;ILLEGAL TURNON TIME. SHORT=1500 ;SHORT CALL SEQUENCE ABSENT=1101 ;TASK CALLED NOT PRESENT UNITS=1102 ;ILLEGAL TIME UNITS SIZE=1103 ;ILLEGAL TIME VALUE SLOT=1104 ;NO SLOTS AV*GE REQUEST FLAG .BYTE 0 ;ZERO PRIORITY PRIOR: .BYTE 40,100,140,200 ;PRIORITY CONVERSION CTICK: .WORD 0 ;TIME OUT,CLOCK FLAGS ; SYSTEM VECTOR TABLE (SVT) ; THIS TABLE CONTAINS SYSTEM CONSTANTS ; AND POINTERS TO VARIOUS MAJOR SYSTEM AREAS, ; ALL NAMES OF SVT ELEMENTS WILL BE ; EXTERNALLY DEFINED. ; ; ; GLOBAL DEFINITIONS ; .GLOBL SVT. ;SYSTEM VECTOR TABLE .GLOBL CSA ;TOP OF CORE .GLOBL BAT ;POINTER TO ASSIGNMENT TABLE .GLOBL DCO ;HEAD OF DDB CHAIN .GLOBL RSA ;BACKGROUND TASK RE+T .GLOBL OFFCL ;DELETE HANDLER .GLOBL XIT ;EXIT ; ; GLOBAL REFERENCES ; .GLOBL BACKGD ;BACKGROUND ACTIVE FLAG ; .IFDF RSX11B .GLOBL BFTAB$ ;BUFFER ADDRESS FOR RSX11B .ENDC ; .GLOBL BUSY ;BACKGROUND BUSY. .IFNE IO.XTH .GLOBL CL.SER ;SEARCH FOR NEXT USER OF A DEVICE .ENDC .GLOBL COMMAN ;ILLEGAL OR UNRECOGNIZED COMMAND. .IFNDF NO.TIM .GLOBL CONV ;ROUTINE TO CONVERT MILLISECONDS TO TICKS .ENDC .GLOBL CUTI ;CUT A SLOT(ALT ENTRY TO CUTSL) .GLOBL CUTSL ;CUT A SLOT .GLOBL DC,ISPATCH TABLE FOR TT KEYBOARD TK.TB: 0 0 0 TT.S ;CANCEL ;MISCELLANEOUS ENTRY DISPATCH TABLE FOR TT PRINTER TKOTB: 0 TKO.TO ;TIME OUT 0 0 .ENDC ; TRANSFERS TO KB KB.INT: JMP KB.INA ;INTERRUPT KB.OP: JMP KB.OPA ;OPEN KB.CL=KB.OP ;CLOSE KB.TF: JMP KB.TFA ;TRANSFER .IFNZ TK.NOU ; TRANSFERS TO TT KEYBOARD TK.INT: JMP TK.INA ;INTERRUPT TK.OP: JMP TK.OPA ;OPEN TK.CL: JMP TK.CLA ;CLOSE TK.TF: JMP TK.TFA ;TRANSFER .ENDC ; ; PARAMETERS ; .IFNDF KBSZ KBSZ=80. ;KEYBOARD-AILABLE TIMER=1105 ;EXCEEDED MAXIMUM RUN TIME COMMAN=1106 ;ILLEGAL OPERATOR COMMAND REPORT=1107 ;ILLEGAL REPORT NUMBER BUSY=1110 ;BACKGROUND ALREADY BUSY SYMBLE=1111 ;SYMBOLIC TASK NAME NOT FOUND SYNTAX=1113 ;SYNTAX ERROR TURN.O=1114 ;ILLEGAL TUNRON TIME ;DISTANCE FROM USERS PC, ON HIS STACK, TO THE ; TOP OF HIS STACK .GLOBL SY.DTS ;DISTANCE FROM USER PC TO STACK TOP. SY.DTS=-16 ;SIZE OF DDB (IN BYTES) .GLOBL SY.DDS ;SIZE OF DDB (BYTES). SY.DDS=56. ;28 WORDS ;OFFSE.START ADDRESS. .GLOBL DATE ;JULIAN DATE WORD ; SVT.: CSA: .WORD 77470 ; LAST ADDRESS IN AVAILABLE CORE BAT: .WORD LAT ; POINTS TO DYNAMIC ASSIGNMENT TABLE DCO: .WORD 0 ; CHAIN OF INITED DDBS RSA: .WORD 0 ; RESTART ADDRESS DATE: .WORD 0 ; DATE IN JULIAN - 70,000 ; .IFNDF NO.TIM ; .GLOBL SCALE ;SCALE MULTIPLIER TABLE DEFINITION ; ; SCALE MULTIPLIER TABLE FOR 50/60 CYCLE POWER. ; CONVERTS TIME VALUE TO TICKS IN "CONV" ROUTINE ; SCALE: .IFEQ CYCSEC-60. ; 1 ;TICKS 7534 ;MIL/O ;HEAD OF DDB CHAIN .GLOBL DV.STS ;ROUTINE TO FAKE AN INTERRUPT .GLOBL FLBF ;DISPLACEMENT TO FILE BUFFER ADDRESS ;STORAGE IN TASK RTH .GLOBL FLTB ;DISPLACEMENT TO FILE TABLE ADDRESS ;STORAGE IN TASK RTH .IFNE IO.XTH .GLOBL FREEI ;ROUTINE TO FREE A DDB (ALT ENTRY TO FREE) .ENDC .GLOBL HSASI ;HIGH SPEED ACTIVATE SUBROUTINE. .GLOBL IENT ;LINK LIST ENTER ROUTINE .GLOBL INITLS ;INITIALIZE STACK ROUTINE .GLOBL IP ;RTH-INITIAL PRIORITY (LOW BYTE),#OF SHARED RESO .GLOBL ISAD ;BOTTOM0 TYPE AHEAD BUFFER SIZE .ENDC .IFNDF EBSZ EBSZ=10. ;ECHO BUFFER SIZE .ENDC S.STAT=-2 ;ADDRESS OF STATUS REGISTER KBO.BP=322 ;FACILITIES=OUTPUT, ASCII, OPEN, CLOSE TKO.BP=322 KB.BP=324 ;FACILITIES=INPUT, ASCII, OPEN, CLOSE TK.BP=324 ; ; CONSOLE OUTPUT OPEN ENTRY ; KBO.OP: ;USE CLOSE ENTRY. ; ; CONSOLE OUTPUT CLOSE ENTRY KBO.CL: MOV #-2,R5 ;UNIT # .IFNZ TK.NOU BR TKO.CA ; ; NON-CONSOLE OUTPUT CLOSE AND OPEN. TKO.OP: TKO.CL: CLR TKO ;NOT BUSY JSR PC,TT.GU ;GET UNIT #1TS FROM BASE OF DDB TO PARTICULAR ELEMENT ; .GLOBL SY.DVL ;DDB-SUSPEND LEVEL COUNTS. .GLOBL SY.SPN ;DDB-SUSPEND NUMBER (BYTE) .GLOBL SY.BFS ;DDB-BUFFER SIZE .GLOBL SY.PTB ;DDB-POINTER TO TOP OF BUFFER. .GLOBL SY.PTI ;DDB-BUFFER INPUT POINTER. .GLOBL SY.PTO ;DDB-BUFFER OUTPUT POINTER. .GLOBL SY.PIC ;DDB-CURRENT INPUT CHANGE BLOCK POINTER. .GLOBL SY.RTN ;DDB-TASK DDB RESERVED FOR (BYTE) .GLOBL SY.DFL ;DDB-FLAG BYTE. .GLOBL SY.SCB ;DDB-STORE FOR CURRENT CHANGE BLOCK. .GLOBL SY.TO ;DDB-2LISECONDS 60. ;SECONDS 3600. ;MINUTES ; .ENDC ; .IFEQ CYCSEC-50. ; 1 ;TICKS 6314 ;MILLISECONDS 50. ;SECONDS 3000. ;MINUTES ; .ENDC .ENDC ; ; ; LOGICAL ASSIGNMENT TABLE ; ; ; THIS TABLE IS POINTED TO BY BAT IN THE SVT. ; ; ITS SIZE (IN WORDS) IS DEFINED BY LATSZ. ; ; ; .IFNDF LATSZ LATSZ=12. ;DEFAULT SIZE = 4 SLOTS .ENDC ; LAT: .WORD LATEN ;PTR TO END OF TABLE .WORD 0 ;FIRST ENTRY IS 0 (END OF LIST) .=.+LATSZ+LATSZ-2 ;AREA FOR TABLE LATEN: .WOR3 WORD OF SYSTEM STACK .GLOBL LAPU ;LOWEST SLOT TASKS USE .GLOBL LEV ;HEAD OF THE LINK LISTS .GLOBL LEVEX ;SHIFT TASK TO ORIGINAL PRIORITY .GLOBL LEVEXA ;ALTERNATE ENTRY TO LEVEX .GLOBL MN ;-N .GLOBL NEWSA ;NEW PROGRAM ACTIVE FLAG .GLOBL NP ;RTH-NUMBER PASSED IN CALL .GLOBL OFFS ;INITIALIZE ROUTINE FOR EOFF AND OFFCL .IFNE IO.XTH .GLOBL OP.GB ;ALT ENTRY TO OP.GB .ENDC .GLOBL PL4 ;PRIORITY LEVEL 4 .GLOBL PL7 ;PRIORITY LEVEL 7 .GLOBL PRWT ;COUNT OF TASKS WAITING FOR PROCESSOR .G4 .ENDC TKO.CA: MOV #-2,R4 ;PREPARE TO OUTPUT CR,LF. MOV #KBO.CR,TKO.BF(R5) ;SET DATA POINTER BR TKO.A ;CONTINUE AS NORMAL TRANSFER. ; ; CONSOLE OUTPUT TRANSFER ENTRY ; KBO.TF: MOV #-2,R5 ;UNIT # .IFNZ TK.NOU BR TT.TFA ;JOIN NON-CONSOLE ENTRY. ; NON-CONSOLE OUTPUT TRANSFER ENTRY ; TT.TF: CLR TKO ;NOT BUSY JSR PC,TT.GU ;GET UNIT # .ENDC TT.TFA: MOV 6(R0),TKO.BF(R5) ;SET INTERNAL DATA POINTER. MOV 10(R0),R4 ;GET WORD COUNT. ASL R4 ;CHANGE TO BYTE COUNT TKO.A: MOV R4,TKO.CT(5TIME OUT COUNT (0=NOT ACTIVE) .GLOBL SY.INH ;DDB-TIME OUT MESSAGE INHIBIT COUNT .GLOBL SY.QLK ;Q LINK TO ACTIVE DDB'S ; SY.DVL=-6 ;SUSPEND LEVEL CTRS. SY.SPN=31 ;SUSPEND # (BYTE) SY.BFS=32 ;BUFFER SIZE (WORD) SY.PTB=34 ;POINTER TO TOP OF BUFFER (WORD) SY.PTI=36 ;INPUT PTR TO BUFFER (WORD) SY.PTO=40 ;OUTPUT PTR FROM BUFFER (WORD) SY.PIC=42 ;PTR TO CURRENT INPUT CHANGE BLOCK (WORD SY.RTN=44 ;RESERVED TASK # (BYTE) SY.DFL=45 ;DDB FLAGS (BYTE) SY.SCB=46 ;STORAGE FOR CURRENT 6D 0 ;END OF TABLE ; ; ADDRESSES OF CLOCK AND KEYBOARD STATUS REGISTERS ; ; THIS TABLE IS USED BY THE CONSOLE AND NON-CONSOLE DRIVERS TO ; ACCESS THE DEVICE REGISTERS AND IS REFERENCED BY LABEL TKI.CS. ; ; POWER FAIL AND SYSTEM INITIALIZE USE IT TO ENABLE INTERRUPTS ON ; THE CLOCK AND KEYBOARDS ; .IFNDF TK.NOU TK.NOU=0 ;DEFAULT # OF TT UNITS =0 .ENDC .GLOBL TKI.CS ;ADDRESS OF LIST OF KB&TT INPUT STATUS REGISTERS .GLOBL TKO.CS ;ADDRESS OF LIST OF KB&TT OUTPUT STATUS REGISTER ; .WORD 17LOBL PS ;ADDRESS OF PROCESSOR STATUS REGISTER. .GLOBL PSTB ;PRIORITY STATUS .GLOBL PTBK ;BACKWARD POINTER LIST .GLOBL PTFW ;FORWARD POINTER LIST .GLOBL REACTA ;ALTERNATE ENTRY TO REACT .GLOBL RSA ;BACKGROUND TASK RESTART ADDRESS. .GLOBL SA ;RTH-SUSPENDED STACK ADDRESS .GLOBL SHORT ;SHORT CALL SEQUENCE ERROR. .GLOBL SL ;MINUTES AT START(HI BYTE),SECONDS AT LAST UPDAT .GLOBL SLOT ;NO SLOT AVAILABLE. .GLOBL SM ;MAXIMUM LEVEL 1 RUN TIME(SECONDS) .GLOBL SRTI ;COMMON SYSTEM EXIT. .IFNDFGR5) ;SET INTERNAL COUNT. MOV R0,TKO.TS(R5) ;SAVE THE DDB POINTER. MOVB #-2,SY.TO(R0) ;ENABLE TIME OUT BIS #100,@TKO.CS(R5) ;ENABLE INTERRUPT RTS PC ; ;CONSOLE OUTPUT TIME OUT KBO.TO: MOV #-2,R5 ;UNIT # .IFNZ TK.NOU BR TT.INC ;NON CONSOLE TIME OUT TKO.TO: JSR PC,TT.GU ;GET UNIT # .ENDC BR TT.INC ;TRY AGAIN ; ; CONSOLE OUTPUT INTERRUPT ENTRY ; KBO.IN: JSR R5,STRG ;SAVE REGISTERS SUB PC,R5 ;SET CONSOLE UNIT NUMBER .IFNZ TK.NOU BR TT.INB ;JOIN NON-CONSOLE ENTRY ; ; NON-CEOUTPUT CHANGE BLOCK SY.TO=52 ;TIME OUT COUNT (0=NOT ACTIVE) SY.INH=53 ;TIME OUT MESSAGE INHIBIT COUNT SY.QLK=-12 ;Q LINK TO ACTIVE DDB'S ;FLAGS IN DDB POSITION SY.DFL .GLOBL SY.LOC ;DDB-LOCKED FLAG. .GLOBL SY.RES ;DDB-RESERVED FLAG. .GLOBL SY.WDC ;DDB-WAITING FOR DEVICE COMPLETION FLAG .GLOBL SY.DPR ;DDB-PERMANENT DDB BIT. .GLOBL SY.TWR ;DDB-THE OWNER IS WAITING. .GLOBL SY.WIW ;DDB-.WRITE OR .READ IS WAITING FOR ROOM OR DATA .GLOBL SY.DWN ;DDB-DEVICE IS DOWN FLAG (NOT READY). ; F77546 ;CLOCK STATUS REGISTER .WORD 177560 ;CONSOLE GOES HERE TKI.CS: ;NON CONSOLE UNITS 0-N GO HERE .IFNDF TTCS TTCS=176500 .ENDC .IFGE TK.NOU-1 .WORD TTCS .IFGE TK.NOU-2 .WORD TTCS+10 .IFGE TK.NOU-3 .WORD TTCS+20 .IFGE TK.NOU-4 .WORD TTCS+30 .IFGE TK.NOU-5 .WORD TTCS+40 .IFGE TK.NOU-6 .WORD TTCS+50 .IFGE TK.NOU-7 .WORD TTCS+60 .IFGE TK.NOU-8. .WORD TTCS+70 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .WORD 0 ;END OF TABLE. ; ; ADDRESSESH NO.TIM .GLOBL STCT ;ROUTINE TO START A COUNTER .ENDC .GLOBL SUTB ;SUSPEND STATUS .GLOBL SYAUA ;SYSTEM,USER ACTIVE FLAG .GLOBL SY.DFL ;DDB-FLAG BYTE. .GLOBL SY.DPR ;DDB-PERMANENT DDB BIT. .GLOBL SY.DVL ;DDB-SUSPEND LEVEL COUNTS. .GLOBL SY.RES ;DDB-RESERVED FLAG. .GLOBL SY.RTN ;DDB-TASK DDB RESERVED FOR (BYTE) .GLOBL SY.SPN ;DDB-SUSPEND NUMBER (BYTE) .GLOBL SY.TWR ;DDB-THE OWNER IS WAITING. .IFNE IO.XTH .GLOBL S.ED ;ROUTINE TO ENTER A DRIVER AT MISCELLANEOUS ENTR .ENDC .GLOBL """"""" """DDDDDDD@DDDDDDDDD """ """"""""""DDDDDDDDDDDDDDDDDDDD """"""""""""DDDD ""DDDDDDDD """"""""""""""DDDDDDDDDDD """"ADDB B B Cs4d~ a# 4d~ !4d~ 44d~ !E4d~  @^4d~ #!$"s4d~ eO !4d~  4d~ 4d~ irX^{ir^~ c.ir^~ Air^~ lir^~  Kir ^~ 2NXq`^~ EYsRK~ O"^~ R4dz^~ ]e4d^~ si;MR^~ p;MRK~ Et^^~  4dz4d~ $Dﮪ{B˼8a ͋,L  Bw&B ` % & }&*C$$Βe E%>k  aʋaՀ$ & * P$ ΋Ί   ΋   d Ί  ( 1'u  Q$f $5@ U C΋ Cb M΋U@ U &  B" .&0 M I SY.LOC=200 ;LOCKED SY.RES=100 ;RESERVED SY.WDC=40 ;WAITING FOR DEVICE COMPLETION SY.DPR=20 ;THIS IS A PERMANENT DDB SY.TWR=10 ;AN OWNER IS WAITING SY.WIW=4 ;.WRITE IS WAITING FOR ROOM. SY.DWN=2 ;DEVICE IS DOWN ; ;SUSPEND REASONS ; ;THESE ARE PUT ON THE TOP OF THE USER STACK AND ;INDICATE WHY THE TASK IS SUSPENDED. ; .GLOBL SY.WL ;SUSPEND-WAIT, LOCKED .GLOBL SY.OR ;SUSPEND-OPEN, RESERVED .GLOBL SY.OL ;SUSPEND-OPEN, LOCKED FOR ANOTHER TASK .GLOBL SY.OF ;SUSPEND-OPEN, BUFJ OF TELEPRINTER STATUS REGISTERS ; .WORD 177564 ;CONSOLE TKO.CS: ;NON-CONSOLE UNITS 0-N GO HERE. .IFGE TK.NOU-1 .WORD TTCS+4 .IFGE TK.NOU-2 .WORD TTCS+14 .IFGE TK.NOU-3 .WORD TTCS+24 .IFGE TK.NOU-4 .WORD TTCS+34 .IFGE TK.NOU-5 .WORD TTCS+44 .IFGE TK.NOU-6 .WORD TTCS+54 .IFGE TK.NOU-7 .WORD TTCS+64 .IFGE TK.NOU-8. .WORD TTCS+74 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ;DOES NOT REQUIRE A 0 TABLE TERMINATOR ; ; STORAGE AREA FOR POWER DOWNKONSOLE OUTPUT INTERRUPT ENTRY ; TT.INT: MOV S.STAT,TT.TMP ;SAVE CURRENT STATUS TO GET UNIT #. JSR R5,STRG ;SAVE REGISTERS. MOV (PC)+,R5 ;GET UNIT # TT.TMP: 0 JSR PC,TT.GUA ;GO SAVE UNIT # .ENDC TT.INB: MOV #SRTI,-(SP) ;DRIVER EXIT ADDRESS MOV TKO.TS(R5),R0 ;DDB ADDRESS CLR SY.TO(R0) ;NO TIME OUT TT.INC: MOVB #200,S.STAT ;DROP PRIORITY CLR @TKO.CS(R5) ;DISABLE INTS. MOV TKO.TS(R5),R0 ;GET PROPER DDB POINTER. TKO.J: TSTB TKO.FF(R5) ;FF OUTPUT IN PROGRESS? BNE TKO.K ;YES- TSTB TKOLS.RRES ;SYSTEM REGISTER RESTORE ROUTINE/ .GLOBL S.RSAV ;SYSTEM REGISTER SAVE ROUTINE/ .GLOBL S.STAT ;PROCESSOR STATUS WORD. .GLOBL TACKW ;TACK A SLOT TO WAITING LIST .GLOBL TFILE ;ROUTINE TO FILE AWAY A TASK .GLOBL TR ;RTH-TRAP VECTOR SETTING. 0 IF NONE. .GLOBL TSLOT ;ROUTINE TO FIND A TIMER SLOT .IFNDF NO.TIM .GLOBL UNCLK ;ROUTINE TO UNCLOCK A TASK .ENDC .GLOBL UPSTK ;USER STACK AT ENTRY TO EXEC .GLOBL WDTB ;HEADER ADDRESS TABLE .GLOBL WL ;RTA-WAITING LIST HEAD(LOW BYTE)&TAIL(HIGHMFER FULL. .GLOBL SY.OLT ;SUSPEND-OPEN,LOCKED FOR THIS TASK .GLOBL SY.CR ;SUSPEND-CLOSE, RESERVED. .GLOBL SY.CL ;SUSPEND-CLOSE, LOCKED FOR ANOTHER TASK. .GLOBL SY.CF ;SUSPEND-CLOSE, BUFFER FULL .GLOBL SY.CLT ;SUSPEND-CLOSE, LOCKED FOR THIS TASK .GLOBL SY.WRR ;SUSPEND-WRITE, LOCKED FOR ANOTHER TASK .GLOBL SY.WRL ;SUSPEND-WRITE, LOCKED FOR ANOTHER TASK .GLOBL SY.WLT ;SUSPEND-WRITE, LOCKED FOR THIS TASK .GLOBL SY.RLT ;SUSPEND-RELEASE, LOCKED FOR THIS TASK .GLOBL SY.SPL ;SUSPEND-SPECIAL FCNN SEQUENCE. ; .GLOBL PF.S ;POWERFAIL SAVE AREA. .GLOBL PF.SA ;POWERFAIL SAVE AREA. .WORD 0 ;EXTRA WORD FOR REG RESTORE CALL. PF.SA: .=.+14 ;STORE FOR R0-R5 PF.S: .=.+2 ;STORE FOR R6 ;*-; .END ; ; DATA AREAS FOR UDC DRIVER. ; .GLOBL UD.CHN ;UDC-NUMBER OF CHANNELS .IFNDF UD.CHN UD.CHN=0 .ENDC .IFNE UD.CHN .GLOBL UD.NIM ;UDC-NUMBER OF INTERRUPTING MODULES. .IFNDF UD.NIM UD.NIM=0 .ENDC .GLOBL UDNIM2 ;UDC-UD.NIM*2 UDNIM2=UD.NIM+UD.NIM .GLOBL UD.GEN ;UDC-GENERIC CODES TABLEO.TP(R5) ;TAB OUTPUT IN PROGRESS. BEQ .+6 JMP TKO.T ;YES- MOVB @K.MPTR(R5),R2 ;SOMETHING IN SPECIAL OUTPUT STRING? BNE TKO.JI ;YES- MOVB CCTMP(R5),R2 ;CONTROL CHARACTER TO OUTPUT? BNE TKO.JJ ;YES- TKO.JA: TSTB EF(R5) ;ECHO IN PROGRESS? BMI TKO.JB ;YES- TKO.JH: INC TKO.CT(R5) ;COUNT THIS CHARACTER BGT TKO.B ;DONE- MOVB @TKO.BF(R5),R2 ;GET CHARACTER FOR OUTPUT. INC TKO.BF(R5) ;ADVANCE DATA POINTER. TKO.JG: MOV #KO.MA,R4 ;GET POINTER TO CHECK STRING CMPB R2,(R4)+ ;CR? BEQ TKO.P BYTE) .GLOBL WTCH ;WATCH DOG TIMER(LOW BYTE) .GLOBL WTCHD ;WATCH DOG TIMER POINTER ; ; DELETE REQUESTS FOR A TASK FROM BOTH THE TASK ; REQUEST QUEUE AND THE TIMER LIST. IF A DATA ; WORD IS SPECIFIED, THEN ONLY THOSE ENTRIES ; THAT MATCH ARE DELETED. OTHERWISE ALL ENTRIES ; THAT REFERENCE THE DESIGNATED TASK ARE DELETED. ; THIS ROUTINE CORRESPONDS TO THE FORTRAN ; CALL "CALL DELETE(PRG,...)". ; OFFCL: JSR PC,OFFS ;OFF INITIALIZE SUBROUTINE 06 BGE CLRSC ;BRANCH IF DATA 07 CLR R4 ;IQ, LOCKED FOR ANOTHER TASK .GLOBL SY.SPR ;SUSPEND-SPECIAL FCN, RESERVED .GLOBL SY.SPT ;SUSPEND-SPECIAL FCN, LOCKED FOR THIS TASK .GLOBL SY.TRL ;SUSPEND-XFR FCN, LOCKED FOR ANOTHER TASK .GLOBL SY.TRR ;SUSPEND-XFR FCN, RESERVED .GLOBL SY.TRT ;SUSPEND-XFR FCN, LOCKED FOR THIS TASK SY.WL=1 ;WAIT, LOCKED SY.OR=2 ;OPEN, RESERVED SY.OL=3 ;OPEN, LOCKED FOR ANOTHER TASK SY.OF=4 ;OPEN, FULL SY.OLT=5 ;OPEN, LOCKED FOR THIS TASK. SY.CR=6 ;CLOSE, RESERVED SY.CL=7 ;CLOSE, LOCKED R .GLOBL UD.PRV ;UDC-PREVIOUS STATUS TABLE UD.PRV: .=.+UD.CHN+UD.CHN UD.GEN: .=.+UD.CHN .EVEN .GLOBL UD.COS ;UDC-CHANGE OF STATE TABLE .GLOBL UD.IMD ;UDC-INT MODULE DATA UD.COS: .=.+UD.NIM+UD.NIM UD.IMD: .=.+UD.NIM .EVEN .ENDC ; ; SET DUMMIES FOR AD, AF ; .GLOBL AD.CHN ;NUMBER OF AD01 CHANNELS .IFNDF AD.CHN AD.CHN=0 .ENDC .GLOBL AD.PRI ;ALTERNATE PRIORITY FOR AD01 .IFNDF AD.PRI AD.PRI=240 .ENDC .GLOBL AF.CHN ;NUMBER OF AFC CHANNELS .IFNDF AF.CHN AF.CHN=0 .ENDC .IFNSD ; CMPB R2,(R4)+ ;LF? BEQ TKO.H ; CMPB R2,(R4)+ ;NULL? BEQ TKO.JA ;YES-IGNORE CMPB R2,#177 ;R/O? BEQ TKO.JA ; YES-IGNORE. CMPB R2,(R4)+ ;OVER 40 (PRINTING?) BHIS TKO.C ;YES-GO PRINT CMPB R2,(R4)+ ;TAB? BEQ TKO.T CMPB R2,(R4)+ ;VT? BEQ TKO.FB ;YES- CMPB R2,(R4)+ ;FF? BEQ TKO.KA ;YES CMPB R2,(R4)+ ;BELL? BEQ TKO.F ;YES- PRINT IT CMPB R2,(R4)+ ;BACKSPACE? BEQ TKO.F ;YES-PRINT IT ;CONTROL CHARACTER FOUND-PRINT ^ CHAR. ;PUT ASSOCIATED CHARACTER INTO CCTMP FOR OTNDICATE NO DATA 07 CLRSC: MOV R1,-(SP) ;HEADER ADDRESS 08 MOV R0,-(SP) ;TASK NO 08 .IFNDF NO.TIM ;CONDITIONAL TIME DEPENDENT SCHEDULING RESLS: MOVB LEV,R1 ;START OF TIMER LIST 09 BEQ WLEND ;IF EQ NO MORE ENTRIES TBSLP: CMPB (SP),SUTB(R1) ;IS THIS REFERENCE TO TASK BEING CLEARED 010 BNE WLSTP ;IN NE SKIP OVER ENTRY CMPB PSTB(R1),#MN ;CHECK FOR WAIT. BEQ WLSTP ;OFF CODE WILL TAKE CARE OF WAIT TST R4 ;DATA TO TEST? BEQ CUTHR ;IF EQ NONE TO CHECK MOVB PSTB(R1),R2 ;GET EUFOR ANOTHER TASK SY.CF=10 ;CLOSE, FULL SY.CLT=11 ;CLOSE, LOCKED FOR THIS TASK. SY.WRR=12 ;WRITE, RESERVED SY.WRL=13 ;WRITE, LOCKED FOR ANOTHER TASK SY.WLT=14 ;WRITE, LOCKED FOR THIS TASK SY.RLT=15 ;RELEASE, LOCKED FOR THIS TASK. SY.SPR=16 ;SPECIAL FCN-RESERVED SY.SPL=17 ;SPECIAL FCN-LOCKED FOR ANOTHER TASK SY.SPT=20 ;SPECIAL FCN-LOCKED FOR THIS TASK SY.TRR=21 ;XFR FCN, RESERVED SY.TRL=22 ;XFR FCN, LOCKED FOR ANOTHER TASK SY.TRT=23 ;XFR FCN, LOCKED FOR THIS TASK ; ; ERVDF DC.DSC DC.DSC=0 .ENDC .IFNDF DF.DSC DF.DSC=0 .ENDC .IFNDF DK.DSC DK.DSC=0 .ENDC .IFNDF DT.DSC DT.DSC=0 ;NUMBER OF DECTAPE UNITS .ENDC ; ; DEFAULT LINE PRINTER WIDTH .GLOBL PRSIZE ;COLUMN WIDTH OF LINE PRINTER. .IFNDF PRSIZE PRSIZE=80. .ENDC ; ; DEVICE BUFFERS ; .GLOBL KBBUF ;ADDRESS OF KB KEYBOARD EXEC BUFFER. .GLOBL LPBUF ;ADDRESS OF LP BUFFER. .GLOBL PPBUF ;ADDRESS OF PP BUFFER. .GLOBL PRBUF ;ADDRESS OF PR BUFFER. .GLOBL TPBUF ;ADDRESS OF KB OUTPUT EXEC BUFFEWUTPUT NEXT. ; ADD #100,R2 ;CONVERT CONTROL CHARACTER TO REAL CHARACTER MOVB R2,CCTMP(R5) ;AND SET IT FOR OUTPUT NEXT. MOVB #'^,R2 ;GET AN UP ARROW BR TKO.C ;GO PRINT. TKO.KA: INCB TKO.FF(R5) ;SET FF FLAG. TKO.K: MOVB #12,R2 ;GET A LINE FEED DECB TKO.FC(R5) ;REDUCE FF COUNT. BIT #7,TKO.FC(R5) ;AT A FF STOP? BNE TKO.FA ;NO-GO PRINT LF. CLR TKO.FC(R5) ;YES-RESET FLAG AND COUNT. BR TKO.FA ;GO PRINT. ;OUTPUT NEXT ECHO CHARACTER TKO.JB: DECB EC(R5) ;ANY CHARACTER TO OUTPUT? BMI TXXTENSION INDEX BNE OFFCLA ;GO CHECK EXTENSIONS ; NO EXTENSION MEANS THE DATA IS 0. TST @(R5) ;CONDITIONAL ON 0? BR OFFCLB OFFCLA: CMP @(R5),SUTB(R2) ;DATA MATCH? OFFCLB: BNE WLSTP ;NO-DON'T CUT. CUTHR: MOVB PSTB(R1),-(SP) ;GET EXTENSION INDEX JSR PC,CUTSL ;CUT TIMER SLOT MOVB (SP)+,R1 ;GET EXTENSION INDEX BEQ RESLS ;IF EQ NO EXTENSION JSR PC,TACKW ;RELEASE EXTENSION SLOT BR RESLS ;GO AGAIN FROM START WLSTP: MOVB PTFW(R1),R1 ;NEXT IS TIMER LIST 011 CMPB R1,LEV ;IS THIS THE ENYROR CLASSES *(2^8) ; .GLOBL S.EINF ;INFORMATIONAL CLASS MESSAGE .GLOBL S.EACT ;ACTION CLASS MESSAGE .GLOBL S.EWAR ;WARNING CLASS MESSAGE .GLOBL S.EFAT ;FATAL CLASS MESSAGE .GLOBL S.ESYS ;SYSTEM PROGRAM CLASS MESSAGE .GLOBL S.EREL ;REAL TIME ERROR(ILLEGAL ACTION) ; S.EINF=0 ;INFORMATIONAL S.EINF=0 ;INFORMATIONAL S.EACT=400 ;ACTION S.EWAR=1000 ;WARNING S.EFAT=1400 ;FATAL S.ESYS=2000 ;SYSTEM PROGRAM S.EREL=2400 ;REAL-TIME ONLY (ACTION FATAL) ; ;COMMANDS FOR OUTPUT CIRCUZR. ; ; SET DUMMY BUFF SIZES FOR KB,PR,PP,LP ; .GLOBL KBFSZ ;KB&TT KEYBOARD EXEC BUFFER SIZE. .IFNDF KBFSZ KBFSZ=0 .ENDC .GLOBL TPSZ ;SIZE (BYTES) OF KB&TT OUTPUT EXEC BUFFER. .IFNDF TPSZ TPSZ=0 .ENDC .GLOBL PRSZ ;SIZE(BYTES) OF PR EXEC. BUFFER. .IFNDF PRSZ PRSZ=0 .ENDC .GLOBL PPSZ ;SIZE (BYTES) OF PP EXEC BUFFER. .IFNDF PPSZ PPSZ=0 .ENDC .GLOBL LPSZ ;SIZE (BYTES) OF LP EXEC BUFFER. .IFNDF LPSZ LPSZ=0 .ENDC .EOT ; EXECUTIVE TABLES AND DATA AREAS - PART 2 ; ; VERSI[KO.JC ;NO-DONE WITH ECHO MOV EPO(R5),R1 ;GET A CHARACTER FROM THE BUFFER MOVB (R1)+,R2 BMI TKO.JD ;BRANCH TO OUTPUT A BACKSLASH CMPB R2,#15 ;IS IT A CARRIAGE RETURN? BEQ TKO.JE ;YES- JSR PC,K.CWR ;CHECK PTR FOR WRAP AROUND TO MOV R1,EPO(R5) ;AND PUT BACK. BR TKO.JG ;CONTINUE AS NORMAL CHARACTER. ; ;ECHO DONE-SEE IF TRANSFER IN PROGRESS. TKO.JC: CLR EF(R5) ;NO ECHO NOW. ALSO CLEAR ECHO COUNT TST TKO.CT(R5) ;ANY NORMAL OUTPUT TO DO? BLE TKO.JH ;YES-GO DO IT. RTS PC ;NO-EX\D OF LIST? BNE TBSLP ; 012 .ENDC WLEND: MOV #WL,R3 ;DISPLACEMENT OF TASK LINKED LIST 014 ADD 2(SP),R3 ;ADDRESS OF LINKED LIST WAITING 014 ; ; THE FOLLOWING SCAN OF THE WAITING QUEUE OF REQUESTS ; FOR A TASK MUST BE EXECUTED WITH INTERRUPTS OFF ; SO THAT NO REQUESTS MAY BE MADE VIA "HSASI" THAT ; REFERENCE THE SAME SLOT WHILE THE SCAN IS IN PROGRESS. ; MOV #PL7,PS ;LOCK OUT INTS DURING SCAN MOVB (R3),R1 ;INDEX OF FIRST WAITING CALL BEQ OFCLX ;IF EQ NONE TO WORRY ABOUT MOV R3,]LAR BUFFER ; .GLOBL SY.OPN ;CMD-OPEN .GLOBL SY.CLS ;CMD-CLOSE .GLOBL SY.TRA ;CMD-TRANS .GLOBL SY.WR ;CMD-WRITE .GLOBL SY.CLI ;CMD-INPUT CLOSE .GLOBL SY.WAP ;CMD-WRAP AROUND SY.OPN=2 ;OPEN SY.CLS=4 ;CLOSE SY.TRA=6 ;TRANS SY.WR=10 ;WRITE SY.CLI=12 ;SPECIAL INPUT CLOSE. SY.WAP=14 ;WRAP AROUND ; ;FLAG IN USER LINE BUFFER TO CONTROL ATTACH/DETACH ;STAY ATTACHED UNLESS=1 ; .GLOBL SY.DET ;FREE BIT SY.DET=40 ;BIT 5 OF MODE BYTE ; .GLOBL SY.MUD ;DRIVER MULTI-ACCESS BI^ON V005A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD, MASS.01754 ; KBBUF: .=.+KBFSZ TPBUF: .=.+TPSZ ;TELEPRINTER PRBUF: .=.+PRSZ ;PAPER READER PPBUF: .=.+PPSZ ;PAPER PUNCH LPBUF: .=.+LPSZ ;LINE PRINTER .IFGE TK.NOU-1 .GLOBL TKBUF ;ADDRESS OF TT KEYBOARD EXEC BUFFER. TKBUF: .=.+KBFSZ .IFGE TK.NOU-2 .=.+KBFSZ .IFGE TK.NOU-3 .=.+KBFSZ .IFGE TK.NOU-4 .=.+KBFSZ .IFGE TK.NOU-5 .=.+KBFSZ .IFGE TK.NOU-6 .=.+KBFSZ .IFGE TK.NOU-7 .=.+KBFSZ .IFGE TK.NOU-_IT ; ;OUTPUT A "\" FOR RUBOUT ECHO. PUT OUT CURRENT CHARACTER NEXT TIME. TKO.JD: BIC #-177-1,R2 ;SAVE LOW 7 BITS OF CHARACTER. MOVB R2,-(R1) ;PUT BACK INTO ECHO BUFFER. MOVB #'\,R2 ;GET A BACKSLASH. TKO.JF: INCB EC(R5) ;FUDGE COUNT BACK. BR TKO.JG ;NORMAL FROM HERE. ; ; FOUND A CR TO ECHO. CHANGE CHARACTER IN ECHO BUFF TO A LF. TKO.JE: MOVB #12,-(R1) BR TKO.JF ;GO FUDGE COUNT. ; ; OUTPUT CHARACTERS FROM SPECIAL STRING FOR CNTRL-U AND ; CNTRL-C ; ; TKO.JI: INC K.MPTR(R5) ;ADVANCE `R0 ;SAVE LIST HEADER ADDRESS CLR -(SP) ;CLEAR LST SLOT INDEX WLLRT: MOVB PTFW(R1),R2 ;GET INDEX OF NEXT SLOT TST R4 ;ANY DATA TO CHECK? BEQ WLTAC ;IF EQ NO-GO CUT SLOT CMP @(R5),WDTB(R1) ;COMPARE DATA ENTRIES BEQ WLTAC ;IF EQ CUT IT OUT MOV R1,(SP) ;SAVE LAST SLOT INDEX ADD #PTFW,R1 ;MAKE REAL ADDRESS MOV R1,R0 ;LAST HEADER ADDRESS BR WLENR ;GO TO END TO CHECK FOR MORE WLTAC: JSR PC,TACKW ;ADD SLOT TOMWAITING LIST MOVB R2,(R0) ;STORE NEW FORWARD POINTER CMPB 1(R3),R1 ;IS TaT. SY.MUD=1 ; INDEXES INTO DDB USED BY AD/AF/UDC DRIVERS ; AND SUBROUTINES. ; .GLOBL PI.FCN ;DDB-SPECIAL FCN CODE STORE .GLOBL PI.ADR ;DDB-ADDRESS OF MUX ARRAY .GLOBL PI.NUM ;DDB-NUMBER OF POINTS .GLOBL PI.DAT ;DDB-ADDRESS OF DATA ARRAY .GLOBL PI.ERR ;DDB-ADDRESS OF FINAL STATUS .GLOBL PI.FST ;DDB-FIRST CHANNEL NUMBER FOR SEQUENTIAL OPS. .GLOBL PI.FAD ;DDB-ADDRESS OF # OF POINTS PI.FCN=20 ;STORAGE FOR FUNCTION CODE. PI.ADR=4 ;STORE FOR ADDRESS OF CONNECTION DATA ARRAY PI.NUM=6 b8. .=.+KBFSZ .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .IFGE TK.NOU-1 .GLOBL TOBUF ;ADDRESS OF TT OUTPUT EXEC BUFFER. TOBUF: .=.+TPSZ ;NON-CONSOLE PRINTER .IFGE TK.NOU-2 .=.+TPSZ .IFGE TK.NOU-3 .=.+TPSZ .IFGE TK.NOU-4 .=.+TPSZ .IFGE TK.NOU-5 .=.+TPSZ .IFGE TK.NOU-6 .=.+TPSZ .IFGE TK.NOU-7 .=.+TPSZ .IFGE TK.NOU-8. .=.+TPSZ .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; ; IF NO IO REQUESTED, TURN OFF FILE ROUTINES AND DEVICE ; cTHE POINTER BR TKO.JG ;GO PROCESS FOR OUTPUT. ; OUTPUT SECOND CHAR OF CNTRL-CHAR. CLEAR CURRENT CHARACTER. ; ; TKO.JJ: CLRB CCTMP(R5) ;CLEAR THE CHARACTER STORAGE. TSTB EF(R5) ;IS ECHO IN PROGRESS? BPL TKO.JG ;NO - GO PRINT JUST THE CHARACTER. CMPB R2,#125 ;YES - CHECK FOR CNTRL-U. BEQ TKO.JK CMPB R2,#103 ;MAYBE A CNTRL-C? BNE TKO.JG ;NO - GO PRINT .IFNZ TK.NOU TST R5 ;MUST ALSO BE CONSOLE. BPL TKO.JG ;NOT CONSOLE- .ENDC MOV #KO.MB,K.MPTR(R5) ;SET PTR TO SPECIAL STRINGdHIS LAST SLOT? BNE WLENR ;IF NE DON'T STORE NEW LAST MOVB (SP),1(R3) ;STORE NEW LAST INDEX WLENR: MOV R2,R1 ;NEXT TO R1 BNE WLLRT ;IF NE MORE TO SCAN TST (SP)+ ;POP OFF LAST INDEX OFCLX: MOV #PL4,PS ;LOWER PRIORITY CMP (SP)+,(SP)+ ;ADD 4 TO STACK POINTER CMP -(R5),-(R5) ;SUBTRACT 4 FROM R5 ; ; OFF REAL TIME EMT ; EOFF: JSR PC,OFFS ;OFF INITIALIZE SUBROUTINE 031 BLT OFFA ;IS DATA SPECIFIED BRANCH IF NONE 032 CMP NP(R1),@(R5)+ ;IS DATA IN HEADER EQUAL TO DATA 033 BNE EXRUNB ;STORE FOR NUMBER OF POINTS. PI.DAT=10 ;STORE FOR ADDRESS OF DATA ARRAY PI.ERR=24 ;STORE FOR ADDRESS OF TRANSFER STATUS. PI.FST=22 ;STORE FOR FIRST CHANNEL NUMBER. PI.FAD=34 ;STORE FOR ADDR OF # OF POINTS. .EOT f TIME OUT AND STATUS REQUEST. ; .IFDF IO.XTH ;MUST BE DEFINED .IFEQ IO.XTH ; AND 0. NO.FIL=1 ;NO FILE ROUTINES NO.DTO=1 ;NO DEVICE TIME-OUT NO.STT=1 ;NO STATUS REQUEST. .ENDC .IFLE IO.XTH-3 ;IF PROCESS AND/OR XFR ONLY NO.FIL=0 ;SUPPRESS FILE ROUTINES .ENDC .ENDC ; ; THE FOLLOWING GENERATES DUMMY ROUTINES ; AND OR 0 GLOBAL VALUES TO CONTROL ; LINKING OF NON-DESIRED ROUTINES. ; ; ; DUMMY ROUTINES FOLLOW ; .IFDF NO.DTO ;NO DEVICE TIME-OUT .GLOBL TIMOUT ;DEVICE TIMOUT Cg. BR TKO.JG ;FOR CNTRL-C ; TKO.JK: MOV #KO.MA,K.MPTR(R5) ;SPECIAL STRING FOR CNTRL-U. BR TKO.JG ; ; TKO.C: DECB TKO.TB(R5) ;REDUCE TAB COUNT. TKO.F: MOV TKO.CS(R5),R1 ;GET ADR OF TELEPRINTER STATUS REGISTER MOVB #-2,SY.TO(R0) ;ENABLE TIME OUT BIS #100,(R1)+ ;ENABLE INTERRUPT MOVB R2,(R1) ;OUTPUT CHARACTER. TKO.EX: RTS PC ; ; OPERATION DONE. ; TKO.B: CLR @TKO.CS(R5) ;DISABLE INTERRUPTS. JMP @14(R0) ;COMPLETION EXIT ; ; CONVERT TAB TO MOD -8 SPACES. ; TKO.T: INCB TKO.TP(R5) ;SEh;IF NE NO MATCH OFFA: MOVB PSTB(R0),R3 ;IS TASK ACTIVE 034 BPL STATCK ;BRANCH IF ACTIVE 034 BIC #177700,R3 ;CLEAR ALL BUT PRIORITY 035 MOV R0,R2 ;TASK NUMBER FOR KILL CHECK 035 MOV WDTB(R0),R0 ;HEADER ADDRESS TO R0 035 OFFX: JMP KILLT ; 035 STATCK: INCB NEWSA ;CAUSE SCAN AFTER TASK TURNED OFF MOVB SUTB(R0),R3 ;STATUS OF SUSPEND 036 BLE OF.SA ;SKIP SCAP OF DDB'S IF 0 OR NEGATIVE STATE. .IFNE IO.XTH ;CHECK IF ANY IO AT ALL. ; ; SCAN THE DDB'S FOR THIS SUSPEND NUMBER.i .TITLE ERTRP ; VERSION V005A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD MASS. 01754 ; ; ; STANDARD REGISTER DEFINITIONS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ;ERROR TRAP AND ; UNINITIALIZED VECTORS SERVICE ROUTINE ; ALL SUCH ARE SET TO TRAP TO THIS ROUTINE WITH A CODE IN ; BITS 1,2,3 OF THE STATUS WORD AS FOLLOWS: ; ; 1 -- ERROR TRAP 4 ; 2 -- RESERVED INSTRUCTION TRAP 10 ; 3 -- TRACE TRAP 14 ; 4 -- POWER FAIL TRAP 24 ; 5 -- TRAP INSTRUCTION TRAjODE TIMOUT: ;FALL INTO RTS PC .ENDC .GLOBL TDS ;TIME DEPENDENT SCHEDULER .IFDF NO.TIM ;NO TIME DEPENDENT SCHEDULING TDS: ;FALL INTO RTS PC .ENDC .GLOBL PAND ;PANIC DUMP SWITCH-DEFINE=DEVICE CSR FOR DUMP .IFNDF PAND ;NO PANIC DUMP PAND=0 .ENDC .IFEQ PAND ;NO PANIC DUMP PDMP$: ;FALL INTO RTS PC .ENDC ; DUMMY RTS PC RTS PC ;ALWAYS GENERATED. .GLOBL PAN$ ;PANIC DUMP ADDRESS. .IFEQ PAND ;NO PANIC DUMP PAN$: HALT ;SYSTEM HALT .ENDC ; ; CREATE REQUIRED GLOBALS =0 ; kT TAB IN PROGRESS FLAG MOVB #40,R2 ;GET A SPACE. DECB TKO.TB(R5) ;REDUCE MOD -8 COUNT. BIT #7,TKO.TB(R5) ;AT A STOP? BNE TKO.F ;NO- TKO.D: CLR TKO.TB(R5) ;RESET COUNT AND FLAG. BR TKO.F ;GO PRINT. ; ; LF COUNT FOR FF EMULATION. ; TKO.H: DECB TKO.FC(R5) ;REDUCE FF COUNT. ; LF,FF COME HERE. SET ECHO GOING IF SOME TO DO. TKO.FA: NEGB EF(R5) ;IF 0, STAYS 0. IF +1, TURNS TO -1. BGT .-4 ;IF -1, STAYS -1. BR TKO.F ;GO PRINT. ; ; VT COMES HERE TKO.FB: NEGB EF(R5) ;SET ECHO FLAG. l ; IF FOUND, DECREMENT THE PROPER LEVEL COUNTER. ; ; MOV DCO,R5 ;GET PTR TO HEAD OF DDB CHAIN OF.SC: BEQ OF.SA ;DONE - CMPB R3,SY.SPN(R5) ;IS THIS THE DESIRED SUSPEND #? BEQ OF.SB ;YES - GO DECREMENT COUNTER MOV -10(R5),R5 ;NO - CONTINUE SCAN BR OF.SC OF.SB: MOVB PSTB(R0),R4 ;GET PRIORITY LEVEL ADD R5,R4 ;ADD TO DDB ADDRESS. DECB SY.DVL-1(R4) .ENDC OF.SA: .IFNDF NO.TIM ;TIME DEPENDENT SCHEDULING. CMPB R3,#376 ;IS IT WAIT SUSPEND 037 BNE ACTOF ;BRANCH IF NOT WAIT 042mP 34 ; ; GLOBAL DEFINITIONS ; .GLOBL PF.CL ;INSTUCTION TOBE MODIFIED IF NO ;NO CLOCK IN THE SYSTEM .GLOBL RM.SOV ;EXEC ERROR-SYSTEM STACK OVERFLOW HALT .GLOBL RM.T ;EXEC ERROR TRAP ROUTINE FOR TRAP TRAP .GLOBL RM.TRP ;EXEC ERROR TRAP ROUTINE ; ; GLOBAL REFERENCES ; .GLOBL PAN$ ;PANIC DUMP ADDRESS. .GLOBL PF.S ;POWERFAIL SAVE AREA. .GLOBL PF.SA ;POWERFAIL SAVE AREA. .GLOBL PL7 ;PRIORITY LEVEL 7 .GLOBL PS ;PROCESSOR STATUS WORD .GLOBL PWFLF ;POWER FAILURE FLAG( (COUNT OF FAILn.IFDF NO.FIL ;NO FILE MANAGEMENT .GLOBL ALO ;ALLOCATE HANDLER .GLOBL APP ;APPEND HANDLER .GLOBL DEL ;DELETE HANDLER .GLOBL DIR ;DIRECT HANDLER .GLOBL PRO ;PROTECT HANDLER .GLOBL REN ;RENAME HANDLER ALO=0 APP=0 DEL=0 DIR=0 PRO=0 REN=0 .ENDC .IFDF NO.STT ;NO STATUS EMT .GLOBL STT ;STATUS HANDLER STT=0 .ENDC .IFDF NO.CSI ;NO CSI .GLOBL CSM ;SI-SEMANTI .GLOBL CSX ;CSI-SYNTAX CHECKER CSM=0 CSX=0 .ENDC .IFDF NO.GUT ;NO GENERAL UTILITIES .GLOBL GUT ;GENERAL UTILITIES o BGT .-4 JMP TKO.JA ;IGNORE VT .IFNZ TK.NOU ; ; COME HERE ON CNTRL-X FROM NON CONSOLE KEYBOARD. ; ; HALT ANY TASK INITER TO THE KEYBOARD ; AND CLEAR INPUT BUFFER. ; KB.CX: TST R0 ;ANY DDB POINTER? BEQ KB.CXA ;NO-CAN'T BE INITED. BITB #SY.RES,SY.DFL(R0);ANYONE INITED? BEQ KB.CXA ;NO-SKIP TASK HALTING. MOVB SY.RTN(R0),R2 ;GET TASK # SWAB R2 ;PUT IN HIGH BYTE CLRB R2 INCB R2 ;OFF REQUEST IN LOW BYTE. MOVB #UTILT,R0 ;TASK INSEX TO R0 JSR R5,HSASI ;ACTIVATE TASK BR KB.Cp MOVB LEV,R4 ;START OF WAIT LIST 038 OFFL: CMPB SUTB(R4),R0 ;IS THIS TIMER SLOT USED FOR 039 BEQ WTTST ;BRANCH IF SLOT USED BY THIS TASK 039 NWSLT: MOVB PTFW(R4),R4 ;NEXT ON LIST 040 CMPB R4,LEV ;IS THIS END OF LIST 041 BEQ ACTOF ;BRANCH NO TIMER SLOT 042 BR OFFL ;RETURN FOR CHECK 039 WTTST: CMPB PSTB(R4),#MN ;IS THIS A WAIT? BNE NWSLT ; 040 MOV R0,-(SP) ;SAVE TASK NUMBER 043 MOV R4,R1 ;INDICATE SLOT TO CUT 043 JSR PC,CUTSL ;REMOVE SLOT 043 MOV (SP)+,R0qURES) .GLOBL STRG ;COMMON SYSTEM ENTRY SUBROUTINE. .GLOBL SYAUA ;SYSTEM,USER ACTIVE FLAG .GLOBL S.EFAT ;FATAL CLASS MESSAGE .GLOBL S.RRES ;SYSTEM REGISTER RESTORE ROUTINE/ .GLOBL S.RSAV ;SYSTEM REGISTER SAVE ROUTINE/ .GLOBL S.STAT ;PROCESSOR STATUS WORD. .GLOBL TKI.CS ;ADDRESS OF LIST OF KB&TT INPUT STATUS REGISTERS .GLOBL TKO.CS ;ADDRESS OF LIST OF KB&TT OUTPUT STATUS REGISTER .GLOBL UPSTK ;USER STACK AT ENTRY TO EXEC ; RM.TRP: BR RM.ER ; BUS ERROR, SP OVERFLOW. BR RM.RE ; RESERVrHANDLER GUT=0 .ENDC ; .IFNDF RSX11B ; .GLOBL FPMT FPMT=0 ;FILE PROCESSOR EMT'S ; .ENDC .IFDF NO.TIM ;NO TIME DEPENDENT SCHEDULING .GLOBL CLOCK ;CLOCK SCAN ROUTINE .GLOBL ETRNON ;TURNON HANDLER .GLOBL EWAIT ;WAIT HANDLER(RSX WAIT) .GLOBL ROBIN ;ROUND ROBIN SCHEDULER .GLOBL TOD ;TIME OF DAY HANDLER .GLOBL UNCLOC ;UNCLOCK HANDLER CLOCK=0 ETRNON=0 EWAIT=0 ROBIN=0 TOD=0 UNCLOC=0 .ENDC .IFDF NO.OPR ;NO OPERATOR TASK OPHED=0 .ENDC .IFDF NO.GET ;NO ON-LINE LOADER sXB ;ERROR KB.CXA: JSR PC,KB.RES ;RESTORE INPUT POINTERS,FLAGS. MOVB #30,R2 ;PUT CNTRL/X IN R2 BR KB.INI ;GO ECHO CNTRL-X KB.CXB: JSR PC,PAN$ ;SYSTEM ERROR .EOT ; KEYBOARD AND TELEPRINTER DRIVER - PART 2 ; ; VERSION V004A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD, MASS.01754 ; ; NON-CONSOLE INPUT INTERRUPT ; TK.INA: MOV S.STAT,#0 ;SAVE CURRENT STATUS TK.INB=.-2 JSR R5,STRG ;SAVE REGISTERS MOV TK.INB,R5 ;GET STATUS JSR PC,TT.GUA ;SAVE UNIT # BR TK.INC t ;READ TASK NAME 043 MOV WDTB(R0),R1 ;RECALL HEADER ADDRESS. .ENDC ACTOF: MOVB SYAUA,R4 ;ACTIVE PROGRAM USER LEVEL 042 MOV WDTB(R4),R4 ;HEADER OF PROGRAM 042 JSR PC,TFILE ;FILE AWAY THE TASK 042 ACTOFA: MOVB R0,SYAUA ;MAKE TASK TO TURN OFF ACTIVE TASK 042 ;FOR EXIT ROUTINE WHICH FOLLOWS 042 MOV SA(R1),UPSTK ;MAKE SAVED USER STACK CORRESPOND 042 ADD #WTCH,R1 ;CALCULATE WATCHDOG ADDRESS MOV R1,WTCHD ;SET NEW ADDRESS ;PROGRAM AT USER LEVEL GET TO HERE WHEN DONE BY TRAP XIT: uED INST BR RM.TT ; TRACE TRAP BR RM.PW ; POWER FAIL RM.T: ; TRAP TRAP RM.RE: RM.TT: MOVB S.STAT,RM.TMP ; SAVE CURRENT STATUS RM.TTA: JSR R5,STRG ; STORE REGS AND FIX STACKS TST (SP) ; WHERE DID WE COME FROM? BLT RM.XE ;IF LT BAD NEWS FELLOW MOV UPSTK,R0 ; USER ERROR. GET USER'S STACK. MOV 16(R0),-(SP) ; PUSH ERROR PC MOV #S.EFAT,-(SP) ;PUSH ERROR CLASS MOVB RM.TMP,(SP) ;INCLUDE ERROR # MOVB SYAUA,-(SP) ; TASK # IOT ; GO PRINT ; ;BUS ERROR OR SP OVERFLOW ; RM.ER: MOVv LODHED=0 .ENDC ; ; I/O CONTROL REFERENCES. ; ; THE FOLLOWING SELECTS A SET OF GLOBALS DEPENDENT ON ; THE VALUE OF THE SWITCH IO.XTH AS ; FOLLOWS (SET BY THE USER). ; ; IO.XTH =0 NO I/O. ; =1 PROCESS I/O ONLY. ; =2 XFR I/O ONLY. ; =3 PROCESS AND XFR I/O. ; =4 CHARACTER I/O ONLY. ; =5 PROCESS AND CHARACTER I/O. ; =6 XFR AND CHARACTER I/O. ; =7 ALL TYPES OF I/O. ; ; ; IF THE USER DOES NOT DEFINE IO.XTH, THE ASSUMED ; VALUE IS 7. ; ; .IFNDF IO.XTH IO.XTH=7 ;DEFAULT VALUE w;JOIN CONSOLE .ENDC ; ; CONSOLE INPUT INTERRUPT ENTRY ; KB.INA: JSR R5,STRG ;SAVE REGISTERS SUB PC,R5 ;#-2 TO R5 TK.INC: MOVB #200,S.STAT ;DROP PRIORITY MOV #SRTI,-(SP) ;DRIVE EXIT ADDRESS MOV TKI.TS(R5),R0 ;GET DDB POINTER MOV TKI.CS(R5),R2 ; GET ADDRESS OF STATUS REQ MOVB 2(R2),R2 ;GET CHARACTER FROM KEYBOARD CMPB EC(R5),#EBSZ ;ECHO BUFF FULL? BGE TKO.EX ;YES-DROP THE CHARACTER BIC #-177-1,R2 ;SAVE LOW 7 BITS + IGNORE NULLS. BEQ TKO.EX ;IGNORE NULLS. MOV #KO.MA-1,R1 ;SETxEXRUN: MOVB SYAUA,R2 ;TASK # MOV WDTB(R2),R0 ;HEADER ADDRESS .IFNE IO.XTH ;IO SWITCH. TSTB IP+1(R0) ;SHARED RESOURCES IN USE? BNE EXRUNC ;YES,GO RELEASE THESE .ENDC TSTB SUTB(R2) ;TASK RUNNING NOW? BEQ EXRUNA ;YES - JSR PC,REACTA ;NO - GO TALLY PRWT EXRUNA: CLR R4 ;INDICATE ZERO SUSPEND STATE FOR LEVEX X1 CLR R5 ;INDICATE NO TABLE MARKED BY LEVEL X X1 JSR PC,LEVEX ;SHIFT TO ORIGINAL PRIORITY IF CHANGE TOOK PLACE X1 MOV R1,R2 ; X1 MOV WDTB(R2),R0 ;ADDRESS OF HEADER X1 yB S.STAT,RM.TMP ; SAVE CURRENT STATUS CMP SP,#400 ; SP OVERFLOW? BHIS RM.TTA ; NO - TREAT AS NORMAL ERROR. RM.SOV: HALT ;HALT ON SYSTEM STACK OVERFLOW. RM.XE: MOV RM.TMP,R0 ; EXEC ERROR! TROUBLE! MOV #RM.EMA+3,R2 ; PTR TO ERR MSG. BR RM.XEA RM.XEB: ASR R0 ASR R0 ASR R0 RM.XEA: MOV R0,R1 BIC #-7-1,R1 ; SAVE LOW 3 BITS ADD #60,R1 ; CONVERT TO ASCII MOVB R1,(R2) ; PUT INTO MESSAGE TSTB -(R2) ; DONE? BPL RM.XEB ; NO- MOV #RM.EM,R2 ; PTR TO MESSAGE MOV TKO.CS-2,R3 ;ADDRESSz.ENDC ; ; GLOBALS OF INTEREST ; .GLOBL CLS ;CLOSE HANDLER .GLOBL CL.E ;CLOSE-ACTIVATE AFTER BUFFER FULL .GLOBL CL.F ;CLOSE-ACTIVATE AFTER DDB LOCKED .GLOBL CL.G ;CLOSE-ACTIVATE AFTER DDB RESERVED .GLOBL CL.M ;CLOSE-ACTIVATE AFTER DDB LOCKED(THIS TASK) .GLOBL INR ;INIT HANDLER .GLOBL OPN ;OPEN HANDLER .GLOBL OP.H ;OPEN-ACTIVATE AFTER DDB RESERVED .GLOBL OP.J ;OPEN-ACTIVATE AFTER BUFFER FULL .GLOBL OP.K ;OPEN-ACTIVATE AFTER DDB LOCKED .GLOBL OP.M ;OPEN-ACTIVATE AFTER DDB LOCKED(THIS{ ADR OF CHECK STRING .IFNZ TK.NOU TST R5 ;CONSOLE? BMI KB.INN ; YES- CMPB R2,#30 ;CNTRL-X? BEQ KB.CX ;YES-GO TURN OFF CURRENT TASK CMPB R2,#32 ;CNTRL-Z? BNE KB.INC ; NO- INCB K.ENFL(R5) ;YES, SET END OF DATA FLAG. BR KB.INI ; AND GO ECHO. KB.INN: .ENDC CMPB R2,(R1) ;CNTRL-C? BNE .+6 JMP KB.INB ;YES- TSTB (PC)+ ;COMMAND MODE? K.CCF: .WORD 0 BEQ KB.INS ;NO- ; COME HERE IF IN CNTRL-CMODE MOV #-4,R5 ;SWITCH TO UNIT -2 BR KB.INC KB.INS: BITB #SY.RES,SY.DFL(R0);IN| CLR TR(R0) ;INDICATE NO "TRAP" DESIRED X1 BR EXRES EXRUNB: BR SHSRT ;EXIT TO SRTI EXRUNC: JMP SCHLR ;AUX JUMP TO RELEASE DEVICES EXRES: MOV #PL7,PS ;LOCK OUT INTS ; .IFDF RSX11B ; TST FLTB(R0) ;FILE TABLE SLOT TO BE RELEASED? BEQ KILLT2 ;BRANCH IF NOT CLR @FLTB(R0) ;YES, CLEAR SLOT ENTRY... CLR FLTB(R0) ;... AND ADDRESS IN TASK RTH KILLT2: MOV FLBF(R0),R5 ;FILE BUFFER BEING USED? BEQ KILLT3 ;BRANCH IF NOT CLR FLBF(R0) ;CLEAR ADDRESS IN TASK RTH MOV BFTAB$,(R5) ;ADDRESS OF} OF CONSOLE TELEPRINTER RM.XEC: TSTB (R3) ; TTY DONE? BPL .-2 ; NO - WAIT. MOVB (R2)+,2(R3) ; OUTPUT TSTB (R2) ; END OF MESSAGE? BNE RM.XEC ; NO MOVB #7,-(R2) ; GET A BELL. ; COUNT # OF BELLS USING # IN R1 DECB R1 ; DONE? BPL RM.XEC ; NO - GO PRINT THE BELL MOV 20(SP),R0 ; ELSE, GET ERROR ADDRESS MOV RM.TMP,R1 ; ERROR # TO R1 RM.SER: JSR PC,PAN$ ;SYSTEM ERROR BR RM.XE ; IF CONTINUE, PRINT AGAIN. RM.EM: .BYTE 15,12 .ASCII /?F/ RM.EMA: .BYTE 200,1,1,1,0 ; ROOM FOR ERROR # ~ TASK) .GLOBL RLS ;RELEASE HANDLER .GLOBL RWN ;READ-WRITE HANDLER .GLOBL RW.K ;RWN-ACTIVATE AFTER DDB LOCKED(THIS TASK) .GLOBL RW.M ;RWN-ACTIVATE AFTER DDB LOCKED .GLOBL RW.N ;RWN-ACTIVATE AFTER DDB RESERVED .GLOBL SPC ;SPECIAL FCN HANDLER .GLOBL SP.G ;SPC-ACTIVATE AFTER DDB LOCKED .GLOBL SP.H ;SPC-ACTIVATE AFTER DDB RESERVED .GLOBL SP.I ;SPC-ACTIVATE AFTER DDB LOCKED(THIS TASK) .GLOBL STT ;STATUS HANDLER .GLOBL TR.G ;XFR-ACTIVATE AFTER DDB LOCKED .GLOBL TR.H ;XFR-ACTIVATE AFTER DDITED? BEQ KB.EX ;NO-EXIT KB.INC: JSR PC,KB.CRP ;GET POINTERS TSTB K.TRM(R5) ;HAVE A TERMINATOR IN THE BUFFER? BNE KB.EX ;YES-DROP THE CHARACTER CMPB R2,-(R1) ;CNTRL-U? BEQ KB.INH CMPB R2,-(R1) ;RUBOUT? BEQ KB.ING MOV #KBSZ-1,-(SP) ;CREATE POINTER TO END OF BUFFER. ADD K.BUF(R5),(SP) CMP (R4),(SP)+ ;ROOM FOR ONE CHARACTER? BHI KB.EX ;NO-DROP CURRENT CHARACTER. MOVB R2,@(R4)+ ;PUT CHARACTER INTO BUFFER INC -(R4) ;UPDATE POINTER. ; ECHO THE CHARACTER KB.INI: TSTB K.ESF(R5) ;E NEXT TO CURRENT BUFFER MOV R5,BFTAB$ ;STORE CURRENT BUFFER AS FIRST KILLT3: ; .ENDC ; MOVB WL(R0),R1 ;FIRST WAITING X3 BEQ TRNFF ;BRANCH IF NONE X3 MOV WDTB(R1),NP(R0) ;PASS DATA TO PROGRAM CALLED X3 MOVB PTFW(R1),WL(R0) ;MOVE NEXT INDEX TO HEADER BNE ADTLT ;IF NE MORE IN LIST CLR WL(R0) ;INDICATE NONE WAITING X5 ADTLT: MOV #PL4,PS ;DROP LEVEL MOVB SUTB(R1),-(SP) ;SAVE INDEX OF TASK IN STACK JSR PC,TACKW ;RELEASE QUEUE SLOT JSR PC,INITLS ;INITIALIZE STACK MOVB (SPAND NULL TERMINATOR. .EVEN RM.TMP: .WORD 0 ; TEMP STORAGE ; ;POWER FAILURE ; ; POWER DOWN SEQUENCE RM.PW: MOV SP,PF.S ;SAVE CURRENT SP MOV #PF.S,SP ;SET NEW SP JSR R5,S.RSAV ;SAVE R0-R5 MOV #PF.B,24 ;CHANGE VECTOR TO POWER-UP SEQUENCE. RM.PWA: HALT ;WAIT FOR POWER TO FAIL. BR RM.PWA ;DON'T CONTINUE! ; ; POWER-UP SEQUENCE PF.B: INCB PWFLF ;TALLY THE FAILURE. MOV #PL7,PS ;LOCK OUT INTERRUPTS PF.CL: MOV #TKI.CS-2,R1 ;ADDRESS OF CLOCK AND TTY CSR'S PF.BB: MOV (R1)+,R2 ;ADR OB RESERVED .GLOBL TR.I ;XFR-ACTIVATE AFTER DDB LOCKED(THIS TASK) .GLOBL XFR ;XFR FUNCTION HANDLER .GLOBL WAI ;WAIT HANDLER .GLOBL WAR ;WAITR HANDLER ;**NEW** ; ; DEFINE, AS 0, THOSE ROUTINES NOT NEEDED. ; .IFEQ IO.XTH ;IF NO IO CLS=0 CL.E=0 CL.F=0 CL.G=0 CL.M=0 INR=0 MS.HED=0 LODHED=0 OPHED=0 OPN=0 OP.H=0 OP.J=0 OP.K=0 OP.M=0 RLS=0 RWN=0 RW.K=0 RW.M=0 RW.N=0 SPC=0 SP.G=0 SP.H=0 SP.I=0 TR.G=0 TR.CHO SUPPRESS? BNE KB.INM ;YES- MOVB K.ROM(R5),R1 ;ADD RUBOUT MODE INTO CHARACTER FOR ADD R1,R2 ;PROPER ECHO. CLR R3 ;SET RUBOUT MODE PROPERLY ADD R2,R1 ;DEPENDING ON ORIGINAL MODE, TSTB R1 ;AND CURRENT CHARACTER. BPL .+6 MOV #200,R3 MOVB R3,K.ROM(R5) MOV R5,-(SP) ;SAVE CURRENT R5 BPL .+6 ;SKIP IF POSITIVE MOV #-2,R5 ;ELSE, CHANGE -4 TO -2. MOV EPI(R5),R1 ;PUT CHARACTER INTO ECHO BUFFER MOVB R2,(R1)+ ;-ADVANCE POINTER. JSR PC,K.CWR ;CHECK FOR WRAP AROUND. MOV R1,EPI(R)+,R1 ;RETRIEVE TASK INDEX .IFNDF NO.TIM BEQ SHSRT ;IF EQ NONE MOVB PSTB(R1),R4 ;GET EXTENSION INDEX MOV WDTB(R4),R0 ;GET CYCLE TO R0 JSR PC,STCT ;START COUNTER COUNTING X8 .ENDC SHSRT: BR CSCAN1 ;RETURN TRNFF: CMPB R2,BACKGD ;BACKGROUND TASK? BNE KILLT0 ;NO, CONTINUE EXIT PROCESSING BITB #100,SL+1(R0) ;YES, IS RESTART BIT SET? BEQ KILLT1 ;NO, CONTINUE EXIT PROCESSING BICB #100,SL+1(R0) ;YES, RESET THE BIT MOV #PL4,PS ;SET EXEC LEVEL JSR PC,INITLS ;REACTIVATE THE BACKGROUF STATUS REG. BEQ PF.BA ;DONE - BISB #100,(R2) ;ENABLE INTERRUPTS. BR PF.BB ;DO NEXT ONE PF.BA: ;REFERENCE LABEL .IFDF UD.CHN .IFGT UD.CHN MOV #36,171776 ;ENABLE UDC INTERRUPTS .ENDC .ENDC MOV #RM.PW,24 ;RESET VECTOR ADDRESS MOV #PF.SA,SP ;GET TEMPORARY SP JSR R5,S.RRES ;RESTORE REGISTERS 0-5 MOV PF.S,SP ;RESTORE ORIGINAL SP RTI ;RETURN TO INTERRUPTED PROGRAM. ; .END B$$BB$$BB$$BH=0 TR.I=0 XFR=0 WAI=0 WAR=0 .ENDC .IFNE IO.XTH .IFLE IO.XTH-3 CLS=0 ;NO CLOSE CL.E=0 CL.F=0 CL.G=0 CL.M=0 LODHED=0 MS.HED=0 OPHED=0 OPN=0 ;NO OPEN OP.H=0 OP.J=0 OP.K=0 OP.M=0 RWN=0 ;NO READ/WRITE RW.K=0 RW.M=0 RW.N=0 .IFEQ IO.XTH-1 TR.H=0 TR.G=0 TR.I=0 XFR=0 .ENDC .IFEQ IO.XTH-2 SPC=0 SP.G=0 SP.H=0 SP.I=0 .ENDC .ENDC .ENDC .IFEQ IO.XTH-4 SPC=0 ;NO SPECIAL FUNCTION SP.G=0 SP.H=0 SP.I=0 TR.G=0 TR.H=0 TR.I=0 XFR=0 .ENDC .IFEQ IO.XTH-5 5) INCB EC(R5) ;COUNT THE CHARACTER. CMPB EC(R5),#EBSZ ;ECHO BUFFER FULL? BGE KB.INV ;YES-FORCE ECHO OUT TSTB EF(R5) ;ECHO FLAG SET? BNE .+6 ;YES- INCB EF(R5) ;NO-SET IT TO +1. TSTB TKO.CT(R5) ;XFER INPROGRESS? BLE KB.INJ ;YES-- KB.INV: MOVB #-1,EF(R5) ;NO-START ECHO OUT MOVB #100,@TKO.CS(R5) ;AND START PRINTER. KB.INJ: BIC #-177-1,R2 ;GET ORIGINAL CHARACTER. MOV (SP)+,R5 ;GET ORIGINAL R5 KB.INM: TSTB K.OPF(R5) ;OPEN CALL? BNE KB.INR ;YES- CMPB R2,#15 ;NOW CHECK FOR LND TASK BR CSCAN1 ;GO TO COMMON SYSTEM EXIT KILLT1: CLRB BACKGD ;CLEAR BACKGD SLOT # CLR RSA ;CLEAR THE RESTART ADDRESS KILLT0: DECB PRWT-1(R3) ;ONE LESS TASK ON THIS LEVEL BIS #100377,SUTB(R2) ;SET TASK INACTIVE KILLT: MOV #PL7,PS ;LOCK OUT INTS TSTB SL+1(R0) ;TEST FOR KILL BPL CSCAN ;NO- BICB #200,SL+1(R0) ;REMOVE KILL MARK CLR SUTB(R2) ;CLEAR TASK DEFINITION CLR WDTB(R2) ; MOV #PL4,PS ;ALLOW INTS MOV R3,-(SP) ;SAVE LEVEL INDEX MOV R2,-(SP) ;SAVE TASK SLOT INDEX .IFNDF N .TITLE BEGENT ; ; VERSION V004A ; 001 ; ; LIST OF TASKS TO ENTER INTO THE SCHEDULING TABLE. ; ; THE TASKS IN THIS LIST ARE THE TASKS LINKED ; DIRECTLY TO THE EXEC AT SYSTEM GENERATION TIME. ; ; FORMAT OF AN ITEM IN THE LIST: ; ; .BYTE SLOT #,PRIORITY ; .WORD REAL TIME HEADER ADDRESS ; ; THE LIST IS TERMINATED BY A WORD 126.(DECIMAL) ; ; NEW ENTRIES IN THE LIST SHOULD BE INSERTED BEFORE ; THE TERMINATOR. THE SLOT NUMBER CHOSEN MUST BE ; AN EVEN NUMBER IN THE RANGE "2 THRU N-4" WHERE TR.G=0 TR.H=0 TR.I=0 XFR=0 .ENDC .IFEQ IO.XTH-6 SPC=0 SP.G=0 SP.H=0 SP.I=0 .ENDC .IFEQ IO.XTH-7 ; KEEP EVERYTHING .ENDC ; ; IF KB OR TT NOT PRESENT, CREATE DUMMY GLOBAL VALUES ; TO KEEP READ/WRITE AND OPEN HAPPY. ; .IFEQ TK.NOU ;NO TT? .GLOBL DDL.TO ;DDL-TT OUTPUT SIDE .GLOBL DDL.TT ;DDL-TT INPUT SIDE .GLOBL TT ;TT DRIVER. DDL.TO=0 DDL.TT=0 TT=0 .ENDC .IFEQ TPSZ+KBFSZ ;NO KB? .GLOBL DDL.KB ;DDL-KB INPUT SIDE .GLOBL DDL.KO ;DDL-KB OUTPUT SIDE .GLOBL KB ;KB DRIINE TERMINATORS BHI KB.EX ;NO- CMPB R2,#12 BLO KB.EX ;NO- INCB K.TRM(R5) ;SET TERMINATOR INDICATOR .IFNZ TK.NOU TST R5 ;CONSOLE? BPL KB.INW ;NO-SKIP CNTRL-C TEST. .ENDC TSTB K.CCF ;COMMAND MODE? BNE KB.INK ;YES-GO START OPERATOR TASK KB.INW: TST K.BC(R5) ;ELSE-CHECK IF A TRANSFER IS REQUESTED. BLE KB.TFB ;GO DO TRANSFER ; IF A NON-CONSOLE UNIT,CHECK IF INITED. ; IF NOT,SCHEDULE A TASK(USER SUPPLIED) .IFNZ TK.NOU TST R5 ;CONSOLE? BPL KB.INU ; NO-GO CHECK. .ENDC O.TIM MOV R2,R0 ;TASK SLOT TO R0 CLR R4 ;SPECIFY NO TIME ARRAY JSR PC,UNCLK ;REMOVE TIME OF DAY ENTRIES .ENDC MOV (SP)+,R1 ;TASK SLOT TO R1 MOV (SP)+,R0 ;LEVEL INDEX TO R0 JSR R5,CUTI ;REMOVE SLOT X4 CMP R1,LAPU ;IS THIS HIGHEST SLOT? X4 BNE CSCAN ;NO - X4 KILLTA: ADD #2,R1 ;CALCULATE NEW LOWEST TASK BEQ KILLTA ;SLOT INDEX TST WDTB(R1) ;THIS SLOT EMPTY? BEQ KILLTA ;IF EQ YES MOV R1,LAPU ;STORE NEW LOWEST SLOT INDEX CSCAN: INCB NEWSA ;CAUSE EXECUTIVE SCAN X4 "N" ; IS THE SIZE OF THE SCHEDULING TABLE. IT MUST NOT ; CONFLICT WITH SLOT NUMBERS CHOSEN FOR OTHER TASKS ; IN THE LIST. IF THE SLOT NUMBER IS 0, THE INITIAL- ; IZATION CODE WILL FIND AN APPROPRIATE SLOT. ; ; THE PRIORITY LEVEL MUST BE IN THE RANGE 1-3. ; ; THE REAL TIME HEADER ADDRESS MUST BE A GLOBAL DEFINITION ; IN THE USER TASK. ; ; GENERAL REGISTER DEFINITIONS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; GLOBAL DEFINITIONS ; .GLOBL ENTERL ; ; GLOBAL REFERENCES VER. DDL.KB=0 DDL.KO=0 KB=0 .ENDC ; DDL INITIALIZATION LOADS ONLY IF IO.XTH NOT ZERO. .IFNE IO.XTH .GLOBL BEGDDL ;DDL INITIALIZATION CODE .ENDC ; ; FORCE DISK DUMP/RESTORE ROUTINE TO LINK ; .GLOBL D.READ ;DISK DUMP/RESTORE ROUTINE ; ; ; FORCE EMT HANDLER AND MRT TABLE TO LINK ; .GLOBL EMT. ;EMT HANDLER .GLOBL MRT. ;MONITOR RESIDENCE TABLE ; FORCE SYSTEM TASKS TO LINK(UNLESS ALREADY SUPPRESSED) .GLOBL LODHED ;ON-LINE LOADER HEADER .GLOBL MS.HED ;ERROR MESSAGE TASK HEADER .GLKB.EX: RTS PC ; KB.INH: MOV K.BUF(R5),(R4) ;CNTRL-U SEEN - RESET BR KB.INI ;INPUT PTR. ; KB.ING: DEC (R4)+ ;RUB OUT SEEN - BACK UP INPUT POINTER MOVB @-(R4),R2 ;AND GET CHARACTER FOR ECHO. BEQ KB.INL ;IF NULL, THIS IS BEGINNING OF BUFF - IGNORE R/O. BIS #200,R2 ;ELSE, SET HIGH BIT FOR "\" ECHO. BR KB.INI ; KB.INL: INC (R4) ;RESTORE INPUT PTR. RTS PC ; KB.INK: CLRB K.CCF ;EXIT FROM COMMAND MODE. DEC (R4)+ ;BACK UP INPUT PTR CLRB @-(R4) ;TERMINATE COMMAND LINE WITH NULL. JS CSCAN1: JMP SRTI ;RETURN TO SYSTEM .IFNE IO.XTH ;IO SWITCH ; ;THIS ROUTINE SCANS THE DDB CHAIN TO FIND ALL DEVICES THIS ;TASK IS INVOLVED WITH. ; IT SUSPENDS THE TASK AS OWNER OF DDB IF A DATA ; XFER IS IN PROGRESS. ; FOR RESERVED DDB'S, IT FREES THE DDB AND ; REMOVES IT FROM THE CHAIN IF NECESSARY. ; ON ENTRY, R2=TASK#; HEADER ADR IN R0 SCHLR: MOV R0,R1 ;HEADER TO R1 MOV #DCO,R5 ;GET PTR TO FIRST POINTER SCHLG: MOV (R5),R0 ;GET PTR. BEQ SCHLA ;DONE IF PTR=0. CMPB R2,SY.RTN(R0) ; ; .GLOBL UTILT ;UTILITY TASK .GLOBL UTILHD .GLOBL ERMST ;ERROR MESSAGE TASK .GLOBL MS.HED .GLOBL OPERT ;OPERATOR TASK .GLOBL OPHED .GLOBL GETT ;ON LINE LOADER .GLOBL LODHED ; ENTERL: .BYTE UTILT,4 ;UTILITY TASK .WORD UTILHD ; .BYTE ERMST,4 ;ERROR MESSAGE TASK .WORD MS.HED ; .BYTE OPERT,4 ;OPERATOR TASK .WORD OPHED ; .BYTE GETT,3 ;ON LINE LOADER .WORD LODHED ; .WORD 126. ;LIST TERMINATOR ; .END B$$BB$$BB$$BL_OBL OPHED ;OPERATOR TASK HEADER .GLOBL UTILHD ;UTILITY TASK HEADER ; FORCE BEGIN CODE TO LINK .GLOBL ENTERL ;INITIALIZATION LIST OF TASKS TO ENTER .GLOBL BEGB1 ;INITIALIZATION CODE-PART 1 .EOT R PC,KB.RES ;RESET INPUT POINTERS CLR R2 ;NO DATA TO PASS MOVB #OPERT,R0 ;TASK INDEX TO R0 KB.IND: JSR R5,HSASI ;ACTIVATE TASK. RTS PC RTS PC ; DATA FOR OPERATOR START CALL & NON CONSOLE OPERATOR TASK ; KB.INB: MOVB #-1,K.CCF ;CNTRL-C SEEN-SWITCH TO MOV #-4,R5 ;COMMAND MODE. JSR PC,KB.RES BR KB.INI ; OPEN CALL KB.INR: CLRB K.OPF(R5) BR KB.TFI .IFNZ TK.NOU ; KB.INU: BITB #SY.RES,SY.DFL(R0);INITED? BNE KB.EX ;YES-EXIT TO WAIT FOR A READ. ASR R5 MOV R5,R2 ;DATA TO R2 THIS TASK? BNE SCHLC ;NO - MOVB SY.DFL(R0),R3 ;GET DDB FLAGS. BPL SCHLB ;NOT LOCKED - ;CALL DRIVER TO CANCEL OPERATION. ON ; RETURN, IF STILL LOCKED, SUSPEND. ELSE ; GO ON TO NEXT PART OF SCAN (AT SCHLB) ; JSR R5,S.RSAV ;SAVE REGS MOV #6,R1 ;FUNCTION IS CANCEL JSR PC,S.ED ;CALL DRIVER MOV #PL4,PS ;DROP PRIORITY LEVEL JSR R5,S.RRES ;RESTORE REGS MOVB SY.DFL(R0),R3 ;GET DDB FLAGS AGAIN BPL SCHLB ;NOT LOCKED MOVB #-3,R4 ;SET EXIT INDICATOR INCB NEWSA ;CAUSE A NEW SCAN JM .TITLE DT ; ; VERSION V001A ; 001 ; ; COPYRIGHT 1971,DIGITAL EQUIPMENT CORP. ; MAYNARD,MASS.01754 ; ; DECTAPE DRIVER ; ; GLOBL DEFINITIONS ; .GLOBL DT .GLOBL DTDDB ;DDL ENTRY ; .IFNDF DT.DSC DT.DSC=2 .ENDC ; ; ; ; GLOBL REFERENCES ; .GLOBL DV.A2 ;ROUTINE TO GENERATE A002 MESSAGE .GLOBL SY.QLK ;QUEUE LINK TO ACTIVE DDB'S .GLOBL SRTI ;COMMON EXIT TO SCHEDULER .GLOBL STRG ;COMMON REGISTER STORE ROUTINE .GLOBL SY.DFL ;DDB FLAG BYTE .GLOBL SY.DWN ;DEVICE DOWN BI .TITLE DK ; ; VERSION V005A ; 001 ; COPYRIGHT 1971 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ; ; RK11 DISC DRIVER ; ; GLOBL DEFINITIONS ; .GLOBL DK .GLOBL DKDDB ; ; GLOBAL REFERENCES ; .GLOBL DV.STS ;ENTRY TO FAKE INTERRUPT .GLOBL SRTI ;COMMON SYSTEM EXIT .GLOBL STRG ;COMMON SYSTEM ENTRY .GLOBL SY.DPR ;DDB-PERMANENT DDB BIT .GLOBL SY.TO ;DDB-TIME OUT COUNT (0=NOT ACTIVE) ; ; STANDARD REGISTER DEFINITIONS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 R6=%6 PC=%7 .IFNDF DK.DMOVB #TTOPT,R0 ;TASK INDEX TO R0 BR KB.IND ;GO START THE TASK ; ; NON-CONSOLE INPUT TRANSFER ; TK.TFA: CLR TK ;NOT BUSY JSR PC,TT.GU ;GET UNIT # BR TK.TFB ;JOIN CONSOLE .ENDC ; ; CONSOLE INPUT TRANSFER ENTRY ; KB.TFA: MOV #-2,R5 ;UNIT # TK.TFB: MOV R0,TKI.TS(R5) ;SAVE DDB POINTER MOVB 12(R0),R4 ;GET ECHO SUPPRESS BIT BIC #-10-1,R4 MOVB R4,K.ESF(R5) ;PUT INTO FLAG. MOV 10(R0),R4 ;SET BYTE COUNT ASL R4 MOV R4,K.BC(R5) MOV 6(R0),K.DP(R5) ;SET DATA POINTER TSTB K.TRM(R5)P OP.GB ;FINISH IN OPEN SCHLB: BITB #SY.RES,R3 ;DDB RESERVED? BEQ SCHLD ;NO- JSR PC,FREEI ;YES-FREE THE DDB. BICB #SY.TWR,SY.DFL(R0) ;TASK IS NOT WAITING NOW. MOV #SCHLD,-(SP) ; FROM SCHLD JSR R5,DV.STS ;FAKE AN INTERRUPT MOV -2(R0),R2 ;DEVICE ADR MOVB 6(R2),S.STAT ;DROP TO DEVICE PRIORITY JMP CL.SER ;GO SEARCH FOR SOMEONE TO USE DDB. ; ; COMES BACK HERE AFTER TRYING TO START SOMEONE ELSE. ; SCHLD: BITB #SY.DPR,R3 ;PERMANENT DDB? BEQ SCHLF ;NO - TSTB IP+1(R1) ;YES - ANY MORET .GLOBL SY.DPR ;PERMANENT DDB BIT .GLOBL SY.LOC ;LOCK BIT IN DDB FLAG .GLOBL SY.RTN ;TASK # DDB RESERVED FOR .GLOBL SY.SCB ;TASK # DDB RESERVED FOR .GLOBL SY.TO ;DDB TIMEOUT COUNT .GLOBL S.CDB ;ENTRY ADDRESS TO DDB QUEUER .GLOBL S.CDQ ;ENTRY ADDRESS TO DDB DEQUEUER ; ; STANDARD DRIVER TABLE: ; DT: .WORD 0 ;BUSY FLAG (DDB ADDR WHEN BUSY) .BYTE 37,300 ;FACILITY INDICATOR .BYTE 16. ;STD BUFF SIZE/16. .BYTE DT.INT-DT ;POINTER TO INT SVCE .BYTE 340+DT.DSC-1 ;INT SVCE PRIORISC DK.DSC=1 .ENDC ; ; PROLOGUE ; DK: .WORD 0 ;0 IF IDLE, DDB PTR OTHERWISE .BYTE 37 ;STANDARD FACILITY INDICATOR .BYTE 200 ;(NORMAL & FILE BASED) .BYTE 20 ;STD BUFFER SIZE IS 256. WORDS .BYTE DKINT-DK ;OFFSET TO INTERRUPT HANDLER .BYTE 240+DK.DSC-1 ;LEVEL & MAX # OF RK DRIVES .BYTE 0 ;NO OPEN ROUTINE .BYTE DKSTRT-DK ;OFFSET TO TRANSFER HANDLER .BYTE 0 ;NO CLOSE ROUTINE .BYTE 0 ;NO SPECIAL FUNCTIONS .BYTE DK.TB-DK ;MISC ENTRY DKNAM: .RAD50 /DK/ ;DEVICE NAME .WORD RKDIR ;LINE AVAILABLE FOR TRANSFER? BNE KB.TFB ;YES-GO TO IT. TSTB K.ENFL(R5) ;CHECK FOR END OF DATA. BNE KB.SC ;YES- RTS PC KB.TFB: MOV #K.OUT,R4 ;YES-SET POINTERS MOV #K.BC,R3 MOV #K.DP,R1 ADD R5,R4 ;ADJUST FOR UNIT #. ADD R5,R3 ADD R5,R1 KB.TFH: MOVB @(R4)+,R2 ;GET A CHARACTER INC -(R4) ;ADVANCE POINTER CMPB R2,#15 ;CR? BNE KB.TFC ;NO- DEC (R4)+ ;YES-BACK UP THE POINTER AND MOVB #12,@-(R4) ;CHANGE IT TO A LF. KB.TFC: MOVB R2,@(R1)+ ;GIVE CHARACTER TO REQUESTOR. INC -( SHARED RESOURCES? BEQ SCHLA ;NO-DONE SCHLC: SUB #10,R0 ;MOVE R0 TO NEXT POINTER. MOV R0,R5 ; BR SCHLG ;TRY NEXT DDB. SCHLF: MOV -10(R0),(R5) ;REMOVE THIS DDB FROM CHAIN. TSTB IP+1(R1) ;ANY MORE SHARED RESOURCES. BNE SCHLG ;YES - KEEP GOING. SCHLA: JMP EXRUN ;GO CONTINUE EXIT .ENDC ; ; ERROR DESIGNATION ENTRY POINTS ; COMDER: MOV #COMMAN,R1 ;COMMAND ERROR BR ERXIT ; SHRTM: MOV #SHORT,R1 ;SHORT CALL SEQUENCE BR ERXIT ; NSLOT: MOV #SLOT,R1 ;NO SLOTS AVAILABLE BR ERXIT ; TY AND MAX UNITS .BYTE 0 ;DESPATCH TABLE .... .BYTE DT.TFR-DT ;...FOR TRANSFER ONLY! .BYTE 0 .BYTE 0 .BYTE DT.TB-DT ;MISCELLANEOUS TABLE ENTRY DT.NAM: .RAD50 'DT' .WORD DT.DIR ;FIXED MFD BLOCK ; ; MISCELLANEOUS ENTRY TABLE ; DT.TB: 0 ;POWER FAIL DT.TO ;TIMEOUT ENTRY DT.CO ;CONTINUE ENTRY DT.CA ; CANCEL ENTRY ; ; REGISTER ASSIGNMENTS: ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; SYMBOL DEFINITIONS ; DTUFD=102 ;STARTING UFD BLOCK DT.DIR=100 ;ST ;FIRST MFD BLOCK .WORD 0 ;BIT MAP POINTER ; ; MISC ENTRY TABLE ; DK.TB: .WORD 0 ;NO POWER FAIL .WORD DK.TO ;TIME OUT .WORD 0 ;NO CONTINUE .WORD 0 ;NO CANCEL ; ; TRANSFER INITIATE ; DKSTRT: MOV @PC,DKREPT ;CLEAR RETRY INDICATOR DKRTRY: MOVB #-10,SY.TO(R0) ;SET TIME OUT COUNT CLR R1 ;UNIT IS ZERO CMP (R0)+,(R0)+ ;POINTER DDB+BLOCK MOV (R0)+,R2 .IFDF LOWDEN ASL R2 .ENDC CMP R2,#4800. ;IS BLOCK WITHIN BOUNDS? BLO DKIN20 ;YES - BRANCH SUB #6,R0 ;POINT TO DDB MOV #R1) ;ADVANCE POINTER CMP (R4),K.IN(R5) ;ALL CHARS GONE? BHIS KB.TFE ; YES- KB.TFD: INC (R3) ;NO - IS REQUEST DONE? BLT KB.TFH ;NO - GO GET ANOTHER CHARACTER. BR KB.TFI ;YES - TAKE COMPLETION EXIT. KB.TFF: CLRB @(R1)+ ;GIVE A NULL TO REQUESTOR INC -(R1) ;ADVANCE POINTER KB.TFE: TSTB K.ENFL(R5) ;END OF DATA FROM KEYBOARD? BNE KB.SC ;YES-GO TERMINATE NOW. INC (R3) ;COUNT THE CHARACTER. BLT KB.TFF ;NOT DONE YET - KB.TFG: MOV #1,K.BC(R5) ;DON'T LEAVE A 0 COUNT JSR PC,KB.RES KBKBUSY: MOV #BUSY,R1 ;BACKGROUND BUSY ERXIT: MOV #ISAD,SP ;CLEAN ALL GARBAGE OFF STACK MOV R5,-(SP) ;OPTIONAL INFO IS R5 ADDRESS MOV R1,-(SP) ;CLASS,NUMBER MOVB SYAUA,-(SP) ;TASK INDEX IOT ;OUTPUT ERROR MESSAGE GSTRT: JMP SRTI ;RETURN TO SYSTEM ; ; START TASK REAL TIME EMT ; ESTART: CMP (R5),#404 ;CHECK FOR ENOUGH PARAMETERS STRT1: BLT SHRTM ;IF LT ERROR MOV #2,@10(R5) ;ASSUME BAD CALL JSR PC,OFFS ;GET HEADER ADDRESS AND TASK INDEX MOV R0,-(SP) ;TASK INDEX TO STACK MOV SM(R1),-ARTING MFD BLOCK DT.TST=177340 ;DECTAPE UPPER PAGE REGISTERS DT.CCM=177342 DT.CBA=177346 DT.CDT=177350 ; ; CONTINUE ENTRY ; DT.CO: MOVB SY.QLK-1(R0),R1 ;SET ENTRY TO PROLOGUE TABLE JMP S.CDB ;GO QUEUE THE REQUEST ; ; SET UP INITIAL TRANSFER ; DT.TFR: MOV @PC,DT.RTC ;SET RETRY COUNT DT.PR1: MOVB #-2,SY.TO(R0) ;ENABLE TIMEOUT MOV #DT.CBA,R1 ;... & OF HWR BLOCK CLR @R1 CMP (R0)+,(R0)+ ;SKIP USER LINE IN DDB MOV (R0)+,DT.BRQ ;SAVE BLOCK NO FOR LATER MOV (R0)+,@R1 ;SET READY MERKCS+2,R5 ;GET ADDR OF WC REGISTER MOV 10(R0),(R5) ;SET WORD COUNT REGISTER CLR SY.TO(R0) ;DISABLE TIME OUT JSR R5,DV.STS ;FAKE AN INTERRUPT TO AVOID POSSIBLE... ;...PROBLEM IF CALLED FROM DEQUEUE BR DKHR06 ; DKIN10: ADD R2,R1 ;ADD IN VALID QUOTIENT ASR R2 ;ADJ REMAINDER FOR DIV BY 12 ASR R2 ADD R4,R2 DKIN20: MOV R2,R4 ;DIVIDE BY 16 - SAVE REMAINDER BIC #177760,R4 BIC R4,R2 ;EXTRACT QUOTIENT ... BNE DKIN10 ;... IF ANY BUILD RESULT CMP R4,#12. ;CHECK REMAINDER BLT .+6 B.TFI: JMP @14(R0) ;COMPLETION EXIT. .IFNZ TK.NOU ; ;NON CONSOLE INPUT OPEN ; TK.OPA: CLR TK ;NOT BUSY JSR PC,TT.GU ;GET UNIT # BR TK.OPC ;JOIN NORMAL OPEN/CLOSE ; ; NON-CONSOLE INPUT CLOSE ; TK.CLA: CLR TK ;NOT BUSY JSR PC,TT.GU ;GET UNIT # BR TK.OPB ;JOIN CONSOLE .ENDC ; ; CONSOLE INPUT OPEN/CLOSE ; KB.OPA: MOV #-2,R5 ;UNIT # TK.OPB: JSR PC,KB.RES CLR K.TRM(R5) ;NO TERMINATOR & CLEAR RUBOUT MODE. TK.OPC: MOV #1,K.OPF(R5) ;SET OPEN FLAG AND CLEAR ECHO SUPPRESS FLAG. (SP) ;BACKGROUND FLAG TO STACK BGE STRT3 ;IF GE NOT BACKGROUND TSTB BACKGD ;TEST IF BACKGROUND BUSY BNE BKBUSY ;IF NE BUSY STRT3: MOV @(R5)+,R1 ;GET DELAY MOV @(R5)+,R4 ;GET DELAY UNITS .IFNDF NO.TIM JSR R5,CONV ;CONVERT DELAY BR ERXIT ;BAD TIME UNIT OR VALUE MOV R0,-(SP) ;MOVE DELAY TO STACK .ENDC CLR -(SP) ;CLEAR DATA WORD CMP -10(R5),#405 ;DATA SPECIFIED? BLT STRT5 ;IF LT NO MOV @2(R5),(SP) ;MOVE DATA TO STACK STRT5: .IFNDF NO.TIM CLR -(SP) ;CLEAR CYCLE WORD CMP MORY ADDR ... MOV (R0)+,-(R1) ;... & WORD COUNT DT.PR2: CLRB DT.INT ;SET INT'RUPT SW. TO SRCH MOV DT.BRQ,DT.BCK ;SET BLK CTRL FOR SRCH MOV #100,R3 ;USED IN NEXT SEQUENCE MOV R3,DT.TAC ;SET TURN AROUND COUNT MOV @R0,-(SP) ;GET UNIT, DIRECTION & FUNC BIC #170341,@SP ;CLEAR POSS. GARBAGE BIS R3,@SP ;ADD IN INT ENB BIT BITB @SP,@PC ;WRITE REQD? BEQ .+6 ;(READ O.K. ALRDY)***** ADD #12,@SP ;IF SO GET DECTAPE EQUIV. MOVB @SP,DT.FRQ ;SAVE FUNC FOR LATER MOVB @PC,@SP ;RESET FUNC TO ;IF BETWEEN 12 & 15 ... ADD #4,R4 ;... CAUSE SURFACE INCR. ADD R4,R1 ;PUT SECTOR INTO REST MOV #RKDA,R4 MOV R1,@R4 ;SET UP DISK ADDRESS MOV (R0)+,-(R4) ;SET UP MEMORY ADDRESS MOV (R0)+,-(R4) ;SET UP WORD COUNT MOV (R0)+,R1 ;PUT IN THE FUNCTION MOV R1,R2 ;GET DRIVE UNIT NUMBER ASL R2 ;SHIFT DRIVE NUMBER... ASL R2 ;...TO HIGH ORDER BITS ASL R2 ASL R2 ASL R2 BIC #17777,R2 ;CLEAR EXTRANEOUS BITS BIS R2,4(R4) ;SET UNIT # IN DISK ADDRESS BISB @PC,R1 ;SET I.D.E. AND GO BITCLRB K.ENFL(R5) ;NO END OF DATA MOV #15,R2 ;GET A CR TO PUT INTO ECHO BUFF. .IFNZ TK.NOU CMPB EC(R5),#EBSZ ;ECHO BUFF FULL? BLT TK.OPD ;NO- JMP KB.INR ;YES-SKIP OUTPUT OF CR,LF .ENDC TK.OPD: JMP KB.INI ;GO ECHO CR,LF ; COME HERE IF END OF DATA SEEN. KB.SC: MOV K.BC(R5),R1 ;GET REMAINING BC CLRB K.ENFL(R5) ;CLEAR END OF DATA FLAG. BR KB.SB .IFNZ TK.NOU ;NON CONSOLE CANCEL TT.S: JSR PC,TT.GU ;GET UNIT # BR KB.SA .ENDC ;CONSOLE CANCEL KB.S: MOV #-2,R5 ;UNIT # KB.SA: MOV K-10(R5),#406 ;CYCLE SPECIFIED? BLT STRT7 ;IF LT NO MOV @4(R5),R1 ;GET CYCLE JSR R5,CONV ;CONVERT CYCLE TO TICKS STRT6: BR ERXIT ;BAD UNITS OR VALUE MOV R0,(SP) ;MOVE CYCLE TO STACK STRT7: MOV (SP)+,R4 ;CYCLE TO R4 .ENDC MOV (SP)+,R2 ;DATA TO R2 .IFNDF NO.TIM MOV (SP)+,R3 ;DELAY TO R3 .ENDC MOV (SP)+,R1 ;BACKGROUND ERROR .IFNDF NO.TIM MOV R4,R0 ;TEST FOR CYCLE OR DELAY BIS R3,R0 ;OR WORDS TOGETHER BNE STRT9 ;IF NE CYCLE OR DELAY SPECIFIED .ENDC MOVB (SP),R0 ;TASK ISRCH (INT ENB) ASL R3 ;(NOW CONTAINS 200)***** BIT @SP,#4000 ;TRAVEL FORWARD? BNE .+4 INC R3 ;IF SO R3 NOW 201 & SO ... MOVB R3,DT.SSW ;MAKING BPL OR BMI AS REQD MOV (SP)+,-(R1) ;SET DECTAPE CONTROL DT.RTS: RTS PC ;RETURN TO CALLER FOR NOW ;***** CARE USED AS LITERAL BY PREVIOUS INSTRUCTION!!! ; ; TIMEOUT ENTRY ; DT.TO: CLR SY.TO(R0) ;DISABLE TIMEOUT COUNT BICB #40,177776 ;DROP PRIORITY LEVEL MOV #DT.CCM,R1 ;ADDRESS OF WORD COUNT REGISTER BR DT.STE ;GO TO COMMON EXIT ; ; INS BIC #177460,R1 ;CLEAR GARBAGE -*****- MOV R1,-(R4) ;SEND FUNCTION TO CONTROL DK.RTS: RTS PC ;RETURN ; ; TIME OUT ENTRY ; DK.TO: CLR SY.TO(R0) ;DISABLE TIME OUT MOVB DK+6,177776 ;LOWER TO DEVICE LEVEL MOV #RKCS+2,R5 ;GET ADDRESS OF WC REGISTER CLR R1 ;CLEAR STATUS INDICATION BR DKHER ;CLAIM HARD ERROR ; ; INTERRUPT ENTRY ; DKINT: JSR R5,STRG ;SAVE REGS MOV #SRTI,-(R6) ;SAVE REGS MOV DK,R0 ;GET DDB ADDRESS BEQ DK.RTS ;IF EQ IGNOR UNSOLICITED INTERRUPTS MOVB DK+6,177776 ;.BC(R5),R1 ;TRANSFER IN PROGRESS? BGT KBO.SX ;NO - RETURN KB.SB: SUB #6,R1 ;INSURE A NON-ZERO VALUE ASR R1 ;CONVERT REMAINING BC TO WORD COUNT MOV R1,16(R0) ;RETURN RESULT TO CALLER BR KB.TFG ;EXIT. ; PUT POINTERS TO IN AND OUT POINTERS INTO R4 AND R3 KB.CRP: MOV R5,R4 ;CREATE POINTERS TO BUFFER POINTERS MOV R5,R3 ADD #K.IN,R4 ADD #K.OUT,R3 KBO.SX: RTS PC ;SUBROUTINE TO GET PTRS TO BUFF PTRS ; AND TO RESET BUFF POINTERS, ; TERMINATOR FLAG AND ECHO SUPPRESS FLAG ; KB.RES: JSR PCNDEX TO R0(LEAVE ON STACK) MOV R1,-(SP) ;SAVE BACKGROUND FLAG. JSR R5,HSASI ;ACTIVATE TASK BR NSLOT ;MAKE LIKE NO SLOTS AVAILABLE TST (SP)+ ;BACKGROUND? BGE STRT8A ;NO- MOVB (SP),BACKGD ;SET BACKGROUND BUSY. STRT8A: TST (SP)+ ;DISCARD TASK INDEX. STRT8: DEC @(R5)+ ;SET SUCESSFUL STATUS BR GSTRT ;RETURN .IFNDF NO.TIM STRT9: TST R1 ;TEST FOR BACKGROUND BMI COMDER ;IF NEG ERROR JSR R5,TSLOT ;GET A SLOT STRT10: BR NSLOT ;NO SLOT AVAILABLE MOV (SP)+,SUTB(R1) ;SET TASK INDEX ITERRUPT SERVICE (A) - SEARCH IN PROGRESS ; DT.SIP: MOV R0,-(SP) ;STORE R0 MOV DT,R0 ;GET CURRENT DDB MOVB #-2,SY.TO(R0) ;ENABLE TIMEOUT DURING SEARCH MOV (SP)+,R0 ;RESTORE R0 TST @#DT.CCM ;CHECK STATUS BMI DT.SER ;IF ERROR GO INVESTIGATE CMP @#DT.CDT,DT.BRQ ;CHECK BLOCK FOUND BEQ DT.BFD ;IF ONE REQD, GO ACTION BMI DT.SXT ;GET TO BLOCK THIS WAY? DT.SSW=.-1 ;(BPL IF TRAVEL BACKWARD) DT.TA1: BICB #40,@#177776 ;DROP PRIORITY ASRB #0 ;HOW MANY TURNS? DT.TAC=.-2 BCS DT.BER ;IFLOWER TO DEVICE LEVEL CLR SY.TO(R0) ;DISABLE TIME OUT MOV #RKDS,R5 MOV (R5)+,R1 ;SAVE RKDS AND RKER FOR LATER MOV (R5)+,R2 MOV (R5)+,R4 ;SAVE RKCS BMI DKERP ;YES - BRANCH BIT #10,R4 ;WAS LAST FCN A DRIVE RESET? BNE DKER00 ;YES - BRANCH DKXIT: CLR -(R5) ;DISABLE DEVICE INTERRUPTS JMP @14(R0) ;TAKE COMPLETION EXIT ; ;ERROR PROCESSOR: ; DKERP: ASL R4 ;HARD ERROR? BMI DKHER ;YES - BRANCH DKER00: ROL (PC)+ ;TRIED 8 TIMES? DKREPT: .WORD 0 BCC DKRTRY ;IF CC TRY AGAIN BIS #,KB.CRP ;GET PTRS TO POINTERS. MOV K.BUF(R5),(R3);RESET BUFF POINTERS. MOV (R3),(R4) CLRB K.TRM(R5) ;NO TERMINATOR CLRB K.ESF(R5) ;NO ECHO SUPPRESS RTS PC ; ; CHECK FOR WRAP AROUND OF ECHO POINTER ; CALL WITH ;R5=UNIT # ; JSR PC,K.CWR ;R1=PTR OF INTEREST ; ;BLOWS R3 ; K.CWR: MOV R1,R3 ;FORM DIFFERENCE BETWEEN CURRENT SUB EBP(R5),R3 ;PTR AND BEGINNING OF BUFF. CMP R3,#EBSZ ;GONE TOO FAR? BLT .+4 ;NO - SUB R3,R1 ;YES - BACK UP THE POINTER RTS PC ; ; ROUTINE TO FETCH UNIN SLOT CLRB PSTB(R1) ;CLEAR EXTENSION INDEX MOV R4,R0 ;TEST FOR CYCLE OR DATA BIS R2,R0 ;OR WORDS TOGETHER BEQ STRT12 ;IF EQ NONE MOV R1,-(SP) ;SAVE TIMER SLOT INDEX JSR R5,TSLOT ;GET A SLOT BR STRT13 ;NO SLOTS AVAILABLE MOV R4,WDTB(R1) ;SET CYCLE BEQ STRT11 ;IF NO CYCLE GO NOW TST R3 ;MUST BE A DELAY BNE STRT11 ;IF NE OKAY INC R3 ;MAKE DELAY 1 TICK STRT11: MOV R2,SUTB(R1) ;STORE DATA IN EXTENSION SLOT MOV (SP)+,R0 ;GET TIMER SLOT INDEX MOVB R0,PTBK(R1) ;SET BACKWARD P 6 CAN'T FIND BLOCK MOV #4000,-(SP) ;OTHERWISE MUST TURN AROUND MOV #2,-(SP) ;ASSUME TRAVEL NOW FWD RORB DT.SSW ;CHECK DIRECTION BCS DT.TA2 ;IF FWD OMIT NEXT NEG 2(SP) ;IF BWD, REVERSE EVERYTHING NEG @SP DT.TA2: SUB (SP)+,DT.BRQ ;ALLOW 2 BLKS FOR 2ND TURN ADD (SP)+,@#DT.CCM ;SWITCH STATUS ROLB DT.SSW ;RESET DIR SW (C BIT REVERSES) DT.SXT: INCB @#DT.CCM ;CONTINUE SEARCH RTI ;WAIT NEXT BLOCK ;BLOCK FOUND - CHECK TRAVEL CORRECT: DT.BFD: CMP #0,#0 ;TRAVEL AS ORIGINALLY STORED? D100000,12(R0) ;SET PARITY ERROR BR DKHR07 ; DKHER: MOV #1,-(R5) ;CLEAR THE CONTROL DKHR00: TSTB @R5 ;DONE YET? BPL DKHR00 ;NO - LOOP BIT #1000,R1 ;IS IT SEEK INCOMPLETE? BEQ DKHR05 ;NO - BRANCH MOV R1,4(R5) ;REPLACE DRIVE # MOV #115,@R5 ;SET UP FOR DRIVE RESET RTS PC ;RETURN DKHR05: TST (R5)+ ;ADJUST R5 DKHR06: BIS #10000,12(R0) ;SET UNRECOVERABLE ERROR DKHR07: MOV (R5),16(R0) ;SET UNTRANSFERED WORD COUNT BR DKXIT ;TAKE COMPLETION RETURN ; DKNT=0 ;RK DRIVE UNIT # DKSPN=40T #*2 FROM DDB ; ; ALTERNATE ENTRY AT TT.GUA WILL FETCH ; UNIT #*2 FROM R5 ; ; CALL JSR PC,TT.GU ;R0=DDB ADDR. ; ; OR CALL JSR PC,TT.GUA ;R5=UNIT # ; TT.GU: MOVB 13(R0),R5 ;GET UNIT # FROM DDB TT.GUA: BIC #-7-1,R5 ;SAVE LOW 3 BITS ASL R5 ;CONVERT TO UNIT #*2 RTS PC ; ; ; ; ; DATA AREAS FOR CONSOLE AND NON-CONSOLE TELEPRINTERS ; ; INTERNAL BYTE COUNT .WORD 1 ;CONSOLE COUNT TKO.CT: .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNOINTER OF EXTENSION SLOT CLRB PTFW(R1) ;CLEAR FORWARD POINTER MOVB R1,PSTB(R0) ;SET EXTENSION POINTER IN TIMER SLOT MOV R0,R1 ;SET TO CORRECT SLOT STRT12: MOV R3,R0 ;DELAY TO R0 JSR PC,STCT ;SET COUNTER UP PROPERLY CLR R2 ;SET TIMER LIST INDEX JSR R5,IENT ;ENTER TIMER SLOT IN LIST BR STRT8 ;EXIT STRT13: MOV (SP)+,R1 ;TIMER SLOT TO R1 JSR PC,TACKW ;RELEASE SLOT BR STRT10 ;RETURN .ENDC .END B$$BB$$BB$$BLT.BRQ=.-4 DT.BCK=.-2 BNE DT.TA1 ;IF NOT MUST TURN AGAIN INCB DT.INT ;RESET INT'RUPT SW FOR TFR MOVB #0,@#DT.CCM ;MOVE IN CORRECT FUNC DT.FRQ=.-4 BR DT.SXT ;... & GO SET UNDERWAY ;INTERRUPT SERVICE (B) - TRANSFER COMPLETE (?): DT.INT: BR .+2 ;INTERRUPT SWITCH .... BR DT.SIP ;FOR SRCH COMES HERE! JSR R5,STRG ;SAVE REGISTERS MOV #SRTI,-(SP) ;SET RETURN ADDRESS MOV DT,R0 ;GET DDB ADDR BEQ DT.RTS ;IGNORE UNSOLICITED INTERRUPT BICB #40,177776 ;DROP PRIORITY LEVEL CLR SY.TO(R0) ;RK UNIT SUSPEND NUMBER ; ; RK11 DDB ; 0,0 ;ACTIVE DDB CHAIN .WORD 0 ;CHAIN LINK .WORD 0,0 ;LEVEL COUNTS .WORD DK ;DRIVER ADDRESS DKDDB: .WORD 0,0,0,0,0,0,0,0,0,0,0,0; .BYTE 0 ; .BYTE DKSPN .WORD 0,0,0,0,0 ; .BYTE 0 ;TASK RESERVED FOR .BYTE SY.DPR ;FLAGS(PERMANENT DDB) .WORD 0,0 ;SCB .WORD 0 ;TIME OUT COUNTS ; .IFGE DK.DSC-2 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ITS. .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNITS. .WORD 1 ;OTHER UNITS. .=TKO.CT+TK.NOU+TK.NOU ; INTERNAL BUFFER POINTER .WORD 0 ;CONSOLE TKO.BF: .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .=TKO.BF+TK.NOU+TK.NOU ; TAB COUNTERS AND FLAGS .WORD 0 ;CONSOLE TKO.TB: TKO.TP=.+1 .WORD 0 ;OTHER UNITS .WORD 0 ;OTHE $TUQH_U_H($Th|@@@@s[M@\@y@Cy@&t@sr@Vq@f@N`@^@:@/@~ (}@"`;@r"Y@i"@L"$ @!%@(}@z@@D@@@@@/@+Ays(Aysh Aysh6{~ph2㒠2@k~@zh@y+@y@8@ g @f@f@_Xv@+FD@x@-Z@Y;DISABLE TIMEOUT COUNT MOV #DT.CCM,R1 ;GET STATUS ADDR MOV #10,R3 ;SET MAGIC CONSTANT TST @R1 ;ERROR CAUSE INT'RUPT? BMI DT.TER ;IF SO GO & SEE WHY MOVB R3,@R1 ;OTHERWISE STOP TAPE ... DT.TXT: JMP @14(R0) ;... & TAKE COMPLETION RETURN ; ; ENTER HERE FOR REQUEST TO DOWN DEVICE. THIS CAN ONLY ; HAPPEN WHEN INITIATING IO RUNDOWN. ORIGINAL TRANSFER ; REQUEST CAUSED AN "A002" AND INSTEAD OF OPERATOR ; TYPING "CONTINUE", THE OPERATOR HALTS THE TASK ; DT.CA: BITB #SY.DWN,SY.DFL(R0) ; ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-3 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 R UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .=TKO.TB+TK.NOU+TK.NOU ; FF COUNTER AND FLAG .WORD 0 ;CONSOLE TKO.FC: TKO.FF=.+1 .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .=TKO.FC+TK.NOU+TK.NOU ; STORE FOR DDB POINTERS .WORD 0 ;CONSOLE TK^(!%hL"$ h#ph:^h|h:㒠2@2@@t @Ӆ~@sL@`@@}K@+}XH@3{<}@2{v@2{[q@%{@z@zNy@zs@z[q@z|@z@z@zh@z @y}@y@8@x@x}@x@xs@v@ys@Iq@&g@"gD@ g @f@f}@|f@f@\`,@^v@Z@_Xv@pS@K#@K#@K@8K@@9;@:@y:~@9}@IS DOWN BIT SET? BEQ DTCX ;BRANCH IF NOT BICB #SY.LOC+42,SY.DFL(R0) ;CLEAR LOCK AND DOWN DTCX: RTS PC ;EXIT ; ; SEARCH ERROR - DETERMINE CAUSE ; DT.SER: TST @#DT.TST ;IN END ZONE? BMI DT.TA1 ;O.K. MEANS TURN AROUND JSR R5,STRG ;SAVE REGISTERS MOV #SRTI,-(SP) ;SET ADDRESS RETURN BICB #40,@#177776 ;DROP PRIORITY MOV DT,R0 ;GET DDB ADDRESS CLR SY.TO(R0) ;DISABLE TIMEOUT COUNT MOV #DT.TST,R1 ;GET DECTAPE STATUS DT.EXT: BIT #14000,(R1)+ ;.... ASSUMING H-W FAILURE BEQ DT.STE ; ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-4 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBERO.TS: .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .WORD 0 ;OTHER UNITS .=TKO.TS+TK.NOU+TK.NOU ; ; KEYBOARD DATA AREAS ; ; ; STORE FOR DDB POINTERS .WORD 0 TKI.TS: .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .=TKI.TS+TK.NOU+TK.NOU ; ECHO FLAG/ECHO COUNT .WORD 0 ;CONSOLE EF: EC=.+1 .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE 4(x@U( @t' @b'%@y@@x@@8@O.&@%vQ@w@@@ E@.drlH([>6d(<6dh d8hhf6d@~s}(6(}h("`;h$i"hxh t @zh@y@8@xs@Z@9;@-Z@0@w(y@8hy@=hy=h㒠2@2@t @Ӆ~@@m}@}K@}@.... IF SEL OR ILO MOVB #10,(R1) ;STOP TAPE MOVB SY.RTN(R0),SY.SCB+1(R0) ;MOVE TASK # FOR DV.A2 ROUTINE JSR R5,DV.A2 ;SET UP A002 MESSAGE NOP ;EXIT TO DEQUEUER WHETHER... JMP S.CDQ ;...BACKGROUND OR NOT DT.STE: BIS #10000,12(R0) ;SET UNRECOVERABLE ERROR DT.STP: MOVB #10,@R1 ;STOP TAPE IN CASE MOV 2(R1),16(R0) ;STORE UNTRANSFERRED WORD COUNT BR DT.TXT ;AND TAKE COMPLETION EXIT ; ; BLOCK NOT FOUND IN SEARCH ; DT.BER: JSR R5,STRG ;STORE REGISTERS MOV DT,R0 ;GET DDB ADDRESS 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-5 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .=EF+TK.NOU+TK.NOU .EOT ; KEYBOARD AND TELEPRINTER DRIVER - PART 3 ; ; VERSION V005A ; 001 ; ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORP. MAYNARD, MASS.01754 ; ECHO BUFFER INPUT POINTER .WORD EB ;CONSOLE EPI: LOC=EB LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+%{%@zh@y+@v@r}@m@Q@f@f}@^f`@f@f@_Xv@8T@:@:@@m8w@mS@m@x@$}v(xhrp:hx}ht @@u~"@k~@+}XH@2{v@2{[q@z @y@x@x@w@&g@"gD@ g @f}@n_Xv@W@pS@R@$N}@K@4(x@m4p@w@x@x@-Z@ E@eu~\!CLR SY.TO(R0) ;DISABLE TIMEOUT COUNT BICB #40,177776 ;DROP PRIORITY MOV #SRTI,-(SP) ;SET ADDRESS RETURN MOV #DT.CCM,R1 ;GET CONTROL ADDRESS BR DT.STE ;TRANSFER ERROR: DT.TER: BIT #34000,-(R1) ;TAPE FAILURE/OPERATOR FAULT? BNE DT.EXT ;IF SO PRINT & WAIT RECOVERY BIT #100400,(R1)+ ;END ZONE/N.E.M? BNE DT.STE ;IF SO, TREAT AS UNRECOVERABLE ;RECOVERABLE ERRORS (TIMING OR PARITY): ASL #0 ;RETRIED 8-9 TIMES ALRDY? DT.RTC=.-2 BCC DT.RXT ;IF NOT TRY AGAIN .... BIS #100000,12(R0) ;OTHE .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-6 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON CONSOLE .=EPI+TK.NOU+TK.NOU ; ECHO BUFFER OUTPUT POINTER .WORD EB ;CONSOLE EPO: LOC=EB LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD L(r"Yh"`;h*\hs[Mht @sL@Z[@`@zh@z @y}@y@8@x@x}@xs@ g @f}@^v@_Xv@NW@pS@K#@9;@9}@m4p@&@%vQ@@@qVm}($m}hu~a@%{@gK@of(@4(x@fu~a(Fu~ah%{@%{@zX@z:w@zx:@f@@r.$T/@@RWISE SIGNAL ERROR BR DT.STP ;GO TO COMMON ERROR EXIT DT.RXT: JMP DT.PR1 ;RETRY TRANSFER AFTER ERROR MESSAGE ; ; DECTAPE DDB'S ; UNITD=0 ;UNIT NUMBER DTSPN=50 ;DECTAPE SUSPEND NUMBER ; ; DECTAPE UNIT 0 DDB ; 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS DTDDB: 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IF0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-7 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,OC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC ;NON-CONSOLE .=EPO+TK.NOU+TK.NOU ; TYPE AHEAD BUFFER INPUT POINTERS .WORD KC.BUF ;COMMAND .WORD KI.BUF ;CONSOLE K.IN: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LO@Z.&t &t:.sr Cy yz/.N`Vq  ,(f/ D,L|,p`J.\(}i"GE DT.DSC-2 ; ; DECTAPE UNIT 1 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IFGE DT.DSC-3 ; ; ; DECTAPE UNIT 2 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIV0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 0 ;TIMEOUT COUNT ; .IFGE DK.DSC-8 ; ; RK11 DDB ; DKNT=DKNT+1 ;UNIT NUMBER DKSPN=DKSPN+1 ;SUSPEND NUMBER ; 0,0 ;ACTIVE DDB QUEUE 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DK ;DRIVER ADDRESS 0 0 ;TRAN BLOCK ADDRESS 0 ;DEVICE BLOCK NUMBER 0 ;CORE TRANSFER ADDRESS 0 ;WORD COUNT .BYTE 0,DKNT ;UNIT #,TRANSFER FUNCTION 0,0,0,0,0,0 .BYTE 0,DKSPN ;SUSPEND NUMBER 0,0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0 C ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE .=K.IN+TK.NOU+TK.NOU ; TYPE AHEAD BUFFER OUTPUT POINTER .WORD KC.BUF ;COMMAND .WORD KI.BUF ;CONSOLE K.OUT: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 ."`;L"$ u@.r"Ys[M^ !% T4 (}2.Ays-Z@x@+FD@   "  w *    y+f(: f @.f㒠2㒠2_Xv zh:,Zl&   weH 56" g l+FD-Zt~ wER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IFGE DT.DSC-4 ; ; DECTAPE UNIT 3 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT 0 ;TIMEOUT COUNT .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; ; DEFINITIONS ; RKDS=177400 RKCS=177404 RKDA=177412 RKDIR=1 .END B$$BB$$BB$$BLWORD LOC ;NON-CONSOLE .=K.OUT+TK.NOU+TK.NOU ; TERMINATOR FLAG/RUBOUT MODE .WORD 0 ;COMMAND .WORD 0 ;CONSOLE K.TRM: K.ROM=.+1 .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .=K.TRM+TK.NOU+TK.NOU ; INTERNAL BYTE COUNT .WORD 1 ;CONSOLE K.BC: .WORD 1 ;NON-CONSOLE .WORD 1 ;NON-CONSOLE .WORD 1 ;NON-CONSOLE .WORD 1 ;NON-CONSOLE .WORD 1 ;&xk~xy@8.^ E@@@w@,  f&!W ).^vKz  g  pS,$B r/ f  . g z  g x&+}XH,HAwm& B.&g KffW,l q/Ne@ z&&gt &g+}XH,  DDB 0,0,0 ; .IFGE DT.DSC-5 ; ; ; DECTAPE UNIT 4 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IFGE DT.DSC-6 ; ; DECTAPE UNIT 5 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVE # (D@8hxh6xh8yhB4(xh9}hZy:~h:@h+FDhtK#h`K#hdT}hW@h^vhIqh(IqhDy+hxzgh2{[qh^2{vhl+}XHh}Kh}Kh`hv@2@@t @Ӆ~@@zh@z @y@8@y@x@x@w@8w@v@ys@m@Q@&g@y"gD@ g @f@f}@f`@f@Z@_Xv@W@pS@K@8K@@9;@8;NON-CONSOLE .WORD 1 ;NON-CONSOLE .WORD 1 ;NON-CONSOLE .WORD 1 ;NON-CONSOLE .=K.BC+TK.NOU+TK.NOU ; INTERNAL DATA POINTER .WORD 0 ;CONSOLE K.DP: .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .WORD 0 ;NON-CONSOLE .=K.DP+TK.NOU+TK.NOU ; BUFFER POINTERS .WORD KC.BUF ;COMMAND .WORD KI.BUF ;CONSOLE K.BUF: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC%e) ],[.ff^v Z& g ,Ew .t _Xvz  &zNy,EDaנĝ& g z|K"z @&7 & E.&gK g pSxWĝ 7w.t zh t }Kzh.ew .vӅ~ 2㒠2zh&@L COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IFGE DT.DSC-7 ; ; ; DECTAPE UNIT 6 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .@:@<2@@("`;@m8w@mS@m@!@Lu~ z(&hy}h4sLh`t @y@k~@z @Bx@@9wK@&g@ g @f@f@f@T}@Q@$N}@K@x@9(h@h%h+h@Qh%p@3{<}@z@zs@z[q@ze@z3@z@z@z@z@z@z@z@evzh@y@8@[q&"@Iq@f@=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC ;NON-CONSOLE .=K.BUF+TK.NOU+TK.NOU ; PTR TO SPECIAL OUTPUT STRING .WORD KO.MA+2 ;CONSOLE K.MPTR: .WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .   Bz.t :z IqK#$^0 "wp.t ffzp0 .t Z &g Zf DP.ff z +}XHy:~)& @@ @. g t  y} Ex 077 .xf fy:~ EUCBYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .IFGE DT.DSC-8 ; ; DECTAPE UNIT 7 DDB ; UNITD=UNITD+1 DTSPN=DTSPN+1 0,0 ;QUEUE OF ACTIVE DDB'S 0 ;MONITOR CHAIN LINK 0,0 ;LEVEL COUNTS DT ;DRIVER ADDRESS 0,0,0,0,0 .BYTE 0,UNITD ;UNIT NUMBER 0,0,0,0,0,0 .BYTE 0,DTSPN ;SUSPEND NUMBER DTUFD ;RSX UFD POINTER 0,0,0,0 .BYTE 0,SY.DPR ;PERMANENT DDB 0,0,0 ; .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; .END w 'f@\`z@\`D@\`>@\`+@U(@@o" @w@>@}F(hhy@8@@6ND(Dh%{%@z3@zh@y@8@\\!(T\!ht @Ӆ~@3{<}@%{%@ze@z3@zh@y+@v@UQ@$T@p}(dhh,!h%p@3{<}@z@zs@z[q@ze@ze@WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .WORD KO.MA+2 ;NON-CONSOLE .=K.MPTR+TK.NOU+TK.NOU ; ECHO BUFFER POINTERS .WORD EB ;CONSOLE EBP: LOC=EB LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NON CONSOLE LOC=EB+EBSZ .WORD LOC ;NO.ysf}z ffŀ2 2 .x xz t f, w w e &fsL@88K@+$"ww@<.t  8K@_Xvy@8K">0w  .zs z2{v%{fl"Xw ĕwõV.f2{[q z_Xv\`,1r w *z[q &t(&th&tбh4tDh4t@Qh4tWh%p@Ӆ~@ @3{<}@%{%@z@z@z@z?@z@zs@z[q@ze@z[M@z3@z@z@zh@z @y@8@@wN@yq @[q&"@Iq@6d@\`z@\`q@\`D@\`>@\`+@E@U(@@o" @o" @4@/@ǰ@@w@>@vCy(Cyh\y+h\y2h\y@8h%z3@z@zh@y@8@Iq@\`>@\`+@w@Hn&@(z/hh(hzh:fh.Vqh(%p@z3@y@8@@/(/ht @Ӆ~@@%{%@z3@zh@y@8@ys@f`@`@8T@:@<@@@ E@~:(:h%{Tq@%{@z3@zh@zg@y@8@:@@ @ E@2N CONSOLE .=EBP+TK.NOU+TK.NOU ; OPEN CLOSE FLAG/ECHO SUPPRESS FLAG .WORD 0 ;ALWAYS 0 .WORD 0 K.OPF: K.ESF=.+1 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .=K.OPF+TK.NOU+TK.NOU ; STORE FOR CONTROL CHARACTERS/EOD FLAG .WORD 0 CCTMP: K.ENFL=.+1 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .=CCTMP+TK.NOU+TK.NOU ; COMMAND BUFFER .WORD 0 ;CMDST MUST START ON EVEN BOUNDRY . CMDST: KC.BUF: .=.+KBSZ ; NORMAL BUFFER . U( zz,wõ .y3{<}wz:, wb. :%vQxs x}&@6,ffwW# &x&9;zhy@8$^v,fADw && W-Nwx E&H,& W-Aw P&,: fw    w  4(x p@#{@#{P@zc@z@zTy@zRy@zLy@zs@z[q@ze@z[M@z3@z@zh@vz @y@8@@wN@[q&"@Iq@f@e&@\`z@\`D@\`>@\`+@U(@@w@>@(>+h(2h2@8h8h%p@#{@#{P@zc@z@z@z@z@zs@z[q@ze@z[M@z3@z@zh@nz @y@8@@wN@[q&"@Iq@f@\`z@\`D@N`(LN`h\`2h2\`>h,\`Dh8\`@Qh&%p@ @3{<}@%{%@z@zs@z[q@ze@z`@zN`@z_@z_@z^@z3@z@zh@y@8@[q&"@Iq@f@f@\`z@\`q@\`D@\`>@\`+@E@o" @4@/@ǰ@@>@Esr(xsrh|r@hj%p@3{<}@zs@ztr@z[q@z3@z@z@zh@y@8@Iq@f@BYTE 0 KI.BUF: .=.+KBSZ .IFGE TK.NOU-1 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-2 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-3 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-4 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-5 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-6 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-7 .BYTE 0 .=.+KBSZ ;NON CONSOLE .IFGE TK.NOU-8. .BYTE 0 .=.+KBSZ ;NON CONSOLE .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; EE$`,^1Pfw 1  &z  g `t $11p  w .z  "gD&g g y} 9} +}XH.drlH([ ,"815($ȋ 068.6d6d@(<6dh \`>@\`+@U(@@w@>@uNy(:yh%p@Ӆ~@z3@y@8@: z,gH((>hwh@ h6U(@h`U( hh:h\`+h\`,h\`>h\`Dh\`qh\`zh|[q&"hz ghpz8gh#{Ph#{h0%{hJ%phz!@t @@8@2@+@%{%@%{@z@zNy@z:w@zs@z[q@z+l@z"g@z@z|@z3@z@z@z@zh@\`>@\`+@U( @@w@.# !@m@mS@pp.f f fK&gD"B@20".K&g"gD"gD&gq,. w Kf"fRw.fffff frqqœs+.K K&gCHO BUFFER EB: .=.+EBSZ ;CONSOLE .IFGE TK.NOU-1 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-2 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-3 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-4 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-5 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-6 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-7 .=.+EBSZ ;NON-CONSOLE .IFGE TK.NOU-8. .=.+EBSZ ;NON-CONSOLE .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; CHARACTER CHECK STRING .BYTE 177,25,3 KO.MA:KBO.CR: .BYTE 15,12,0,40  , 7PP $ ,Dxx E  x x,ht& @  d3, `    >  4 g, J v r 8 d ` ,   J B B ,B   B  B B B e(0   b6d 6d7.s}-Z@9;@Z@zg@Sy@8@\y@8@\y2@\y+@v@4tW@4t@Q@4tD@|r@@f@f@6d@\`@Q@\`D@\`>@\`2@:@:@@y@@@Q@+@%@.@@ E@4@@4@4@@~yq (yq h3{<}@#{@#{P@zc@z)g@z@z @y@8@&tб@y@'o" (o" ho" ho" ht @3{<}@2{v@2{[q@#{@#{P@z"gD"gD& ~r" ."gD&g &g"gD8;1J0 "c.:f` wxy1, @,e.8wvzht Ӆ~#,   gKz &ge E.f f f g z &p. g f} t m@Q2,11,13,14,7,10 KO.MB: .BYTE 15,12,'.,0 .EVEN ; DDB'S ; KB (KEYBOARD) 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN AND LEVEL COUNTS. +KB ;DVR ADR. KBDDB: +0,0,0,0,0,0,0,0,0,0,0,0 ;STANDARD DDB .BYTE 0 ;TEMP FOR .READ/.WRITE .BYTE 1 ;SUSPEND # +KBFSZ ;BUFFER SIZE IN BYTES. +KBBUF ;PTR TO BUFFER. +KBBUF,KBBUF ;IN,OUT CIRCULAR PTRS +0 ;PTR TO INPUT CHANGE BLOCK .BYTE 0 ;RESERVED TASK # .BYTE 0 ;FLAGS +0,+0 ;ROOM FOR CURRENT CHANGE BLOCK .WORD 0 ;TIME OUT ,W% ĝW% . zht Z -Z&xsn$ffw9;zhy@8t.@wx@m@mS@="i &.ffxffH"7  .x xm}x}/ 4N&7 w ._Xv _Xvfff}"L@z?@zc@z@z@z:w@zs@z/g@z)g@z"g@zke@zN`@z^@z[M@z@z@z@z@z @z @z,g@z g@y+@y@8@@wN@v@&tб@f@6d@y@>@$"s( ehr.yh8r}hrhӅ~@~@~@3{<}@2{v@2{[q@%{%@zh@y+@gK@f@f@ ev@ ev@6d@^(hPh, n w 1 y.Z_Xvf"t &&g ">1 rrp0.z  t #Xr@B.&gzh g t ,n w w 1U.: f}f} g $z ,B `  A `Bt  m@Q 2,A  C B 5@x8K@W,.COUNT/INHIBIT ; ; KB (TELEPRINTER) 0,0 ;ACTIVE DDB CHAIN +0,0,0 +KB+16 TPDDB: +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE 2 +TPSZ +TPBUF,TPBUF,TPBUF +0 .BYTE 0 .BYTE SY.DPR +0,0 +0 ;NON CONSOLE DDB'S ; KEYBOARD .IFGE TK.NOU-1 LOC=20 LOCA=0 TTDDB=.+14 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES. +TKBUF+LOCA ;BUFFER POIN  < .:@ zht 8T8Tfw & H*f ffy+$z& ww&.%{% }Kt vmSw 7B*mm8w:f` ef* r}2 7w77.zh m@Q㒠2Ӆ~zh*ea %%FzX@z@y+@y@8@f@eFy@eZ@e,@e(@e&@e%@e""@e<@e@f@@0(0h4PhzX@z@y+@y@8@f@eFy@eZ@e,@e(@e&@e%@e""@e<@e@L@W.&t>@w@@p,@wEA z3%pzhV,$Ê! . e W-t t ,WAw DW-Ewt $!$"w  2=.("`;x z z \$>&7n.z _Xv g f}z K,Z &f&M& ,~f&& M. zhӅ~9;zh zh, 2 @a A.TER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ ;**NEW** +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-2 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES. +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER L2Ӆ~U.}v E@-Z@x@*ÝnVMw .K "gD&g$N}t O$"ĜĜ Ĝo.2{vz  g z  g ,>!w . &  3 A. g  pSz 4(xt " b3! 7.t z t t "z7 0r. E z %w =. /Eǰ"\`qQ,H!%w .f.  4E\`q[,lõ%  e eg( c7. Ӆ~z33{<}z z "w%5(.zs z z3\`+%{% w .z[q zsz\`z[q&"; .z[Mz  z  g " g &f}Bww ._Xv y@8fff"w.<2@ v &gv<2@ t .f Ӆ~vm8wm w.mS fffv&" ew w .&gv <2@8K@<2@( @(f.u~ zOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-3 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-4 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL Cz  g p&  w .f}_Xv+}XHx2{[q|(w s!朩.t 2{[qt t t ,%wwaɥ<X&&g $N}k~w"77 7 ŝ3C.m4p m4p-Z-ZK$Ewŝ%f. g  g &gKK.,fw w>."gD&gz ze 3{<}Iq,peeH Aa(pz3Z,å  z& 9=5Tyq U,> Eĥ5få  ;,b  R## =, %a U% 65q-I8 ,@ .CË  ,q- D!_, ! 1!Ë ,1w6 :åeD,:5E& /<x@K@$N}@,!  %@%& y9wKT}&Q,$ ` .Bx@ffk~ $N}*H   . $N}t ff K,j B@%  b3z  g $1  Aw&t x&gKv.>@OUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-5 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF g m4pt *@w @ w A .R t wz 4(x,bvf%wEEE l&x&gK$&g $wBW. g K g _Xvw,2e<e `"ׇ.t xxx y_ f  u~".u~\!@@%vQ@&@- %a U% o" ,^jËE  3uv,&   %*K BS o" n,C 4CU "  3,    r6do" p,I-נf  o" , ËED  b,6$5& 1o" $Zw 5 .z?z z @wNzw@o" @U,@ww . %pz3zh3{<}"zE $ 15O.zzszz3z[q<w B.zs z\`z[q&"zeR,Pŀ & $523{<}z z0(t  % w%<. o" U(@Iqw"zw% w.z3+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-6 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 ,  wW%5E&^vsLy@8m4p,$ :W%(ADw ) - w &H  w .` pS g zhz &^   .9}y}K#f}_Xv&|ff{.%vQ xsx}@9;,wW# B.zh y@8^vx$Z[,!xvw.U(@z z>z[qIww *z wy@8\`D, fAQ$e&z \`>&zsM,נ W-eWz?zlw z? zy@8.Cy>@w@U(@@,@w7  . %pz\`+zzIq"w    #.y@8> \`>\`D\`D\`>z.@y@8@(,f& & ACB$2  Ae,$ ! ! ! ! ! `0 . H1,H , Ѥ 1ӥ, ˥,D,l˥<˥  ˥.˥[ H,˥*MD`%  ,% %2 w &  .IFGE TK.NOU-7 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-8. 0,0 ;ACTIVE DDB CHAIN +0,0,0 ;MONITOR CHAIN & LEVEL COUNTS +TT ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 傃 ;႗";ނbw  1 `,1% ek&z t  g m4pVw wz 9}y@8#.m}4(x@of(@gK@, 7w w,gK gK%{of( 4(x&u~a.u~a@f@zx:@J,w .f 3zhf"zN$ w5g.zLyzszTyz3\`+ 8w .z[q zszRy\`z[q&",Pp5p0e0Iqe&"e&*t5   Հ w*e&zcz"#{P ŀS.y@8 #{zczzs w .z  @wNe&U(@z Β y@88, ˥: ˥.˥f,$D U    F`,  T˥:  X  R1 ,D4K : Ӌc 2w v,hӥ*@ & Β0 e,&f˥*  Ŕ@,Ŕ@a   @a6,fC  e  e& Y, L̥ ̥ ̥̥̋ ,̥ L  w H ˥*m ,@& 0 .BYTE LOC ;SUSPEND # LOC=LOC+1 +KBFSZ ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0 ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; TELEPRINTER .IFGE TK.NOU-1 LOC=30 LOCA=0 TODDB=.+14 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +zXzX"zx:.*$f & &zx:%{z:w%{ "ww .z >z[qzwQ  &\`Dz\`D\`>.>@w@U(@@,@w7  . %pz3zhf"zN$ w5g.zzszz3\`+ 8w .z[q zsz\`z[q&",P$j  . ˥,  [ W,d%w˥* ˥]K I G Hy@8J, C B&     ,  ˥:0< ˥,U% "˥,*  ˥. ˥[ ˥/', ˥< ˥  ˥ ˥ ,aeAbEɋA%! z,<  4 .˥: "˥.,`˥$    & ˥0 ,˥Z˥9˥A #  0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-2 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-3 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-4 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 Vx(xh|PhzX@z@y+@y@8@QV(hPhzX@z@y+@y@8@^(@hPhzX@z@y+@y@8@y@X ( h$Ph#{@#{P@zX@z:w@zs@z+l@z[M@z@z@z@y+@y@8@@ @E(d SSSK1 .EEIq4,tEL1'!EST    $&Հ w :. zcz#{Py@8#{R,wEU e.zcz zsz @wN1, EP  U@5*5  w.U(@zz >$z[q" w   .z w\`Dz\`D ".Dy@8@zh@z3@,EECDe> `5 $z3:,$`$\nYw@   ,H  e M,l f  E , `#' W'͋ WU,We ee e T[,'  W#%{% zh9,e1$ 'd , d0  +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-5 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-6 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+Lyh8EhEPh%I|Xh7Ph8i N@/ g@0@~@~@zX@zs@z[q@zT@z@z@z@y+@y@8@.6d@E`s@E0@4(x@@ @M(@MhMPhzX@zT@z@z@z@y+@y@8@fU<@M@M0@@ @f(fhfPhzX@zT@z@z@z@y+@y@8@f@f0@@ @G:\`>.yy@8@z3@Ӆ~@,@weB( R   %pz3"Ӆ~$RRC w4y@8:.: 4@@4@4@@a,&ew Ü .zNy z|:@t vq,$( {p w fv  6dpy@8"H& .@c  W3 Z,De % E0 @c `,h V% w @ y@8D s.\!$T@UQ@v@"w  Ý6.y+ ze 3{<}Ӆ~zh,sCB ! ! &&t v z3"UQ>eL$T%{%zh.}w@\`+@\`OCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-7 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-8. 0,0 ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .ENDC .ENDC .ENvf(fhfPhzX@z@z@y+@y@8@f@f0@@ @DHHJwH(|hPhPf@X@L:@,@+@@h:@}@z@z@z@y+@y@8@f@ff@eFy@eZ@e(@e&@e%@e""@e<@e@4(x@@ @O @f:(e,hneFyh%{%@z:w@y+@u.%{z:wzz Eb .zz z[qzt Q&vsewĕ.: z3zNyz|zgC S.zzzszz*3̊fl.t vz3zh zss, f& E e& z,[@ETW= L)o >@1" ,w .z3zz3zh\`+ w.\`>Iq z[qzw&0T@*z3T3{<}z zhNKw  wzsy@8%p.&@y@8@z3@%p@d,ŕs@wD$ťD$z3%p|,$wŕDC .ENDC .ENDC .ENDC .ENDC .ENDC ; VECTOR SET UP FOR UNITS 1-N OF NON-CONSOLE ; TELETYPE ; ; .IFNZ TK.NOU .ASECT .IFNDF TT1VCT TT1VCT=310 ;DEFAULT .ENDC .=TT1VCT TK.VCT: .WORD TK.INT,341,TKO.INT,341 ;TT01 .WORD TK.INT,342,TKO.INT,342 ;TT02 .WORD TK.INT,343,TKO.INT,343 ;TT03 .WORD TK.INT,344,TKO.INT,344 ;TT04 .WORD TK.INT,345,TKO.INT,345 ;TT05 .WORD TK.INT,346,TKO.INT,346 ;TT06 .WORD TK.INT,347,TKO.INT,347 ;TT07 .ENDC .CSECT .END f@f@eZ@e(@e&@e%@e""@e<@e@:(t!@Qh@wNh%{Pshi N@Ӆ~@3{<}@z@ze@z3@z@zh@zg@y+@y@8@f@f@6d@4(x@#p@Q&"y@"w@"w@ E@5.xy@8@y+@z@A,RxBdQB&zXN,$$"  e "E8b0 ',f EDE>&   ,6e@a . 0E&zzz EK,Z  eMU  ^lzzz"g,~E @!E7&z:w &,e  f- N4"4@Q,v  C.4@ 4@zs z[q"z& '.DՀE@BBsy@8L,H"  $A U  lU U/./ E@@<@@, D !| !! |B $&B$j~k*j~   :Q$wr~*%{%zhzht )Rsw*: f`z3]$h ^"w(ZTT2hXt @Z@W@pS@m4p@"y@#FiK(~iDLh|t @i N@f@E`Ps(H`ht @i N@Z[@@k~@%{@z@z@zs@z@}@ze@z @y@x@x@xs@w@ys@Xq`@ g @f@f}@f@f@E`s@W@@W@T}@pS@$N}@K#@8K@@%I \$zX,H( w 0 &y+y@8 $zXW,l$CցB! x ̆ U \,U p` * z^.y@8@y+@z@,\Llߓ1 L,$$:Ó C"""E8jzX,Hb0 2w !t :fff,p `DaKe t&fz+lz+l$f,, 0   z+lz+lz+l,P `D` w \I*yfy@8$&!tt.\`2\`D\`> \`@Q +\~j.%@@Q 4tW 4t@Q`.4tD|r@\y2 \y+ \y@8"w~.y@8zh Eyszh$ee.t `zht 8T[,eB   &<@ z3   U&Ӆ~zht `.: E@ @@,A ! 1#z3 o,$e& f#|X@4(x@"y@@w@-Z@%vQ@y@ @q E@,(h\M2hfv@t @z @8w@&g@ g @f@f@f@W@8T@pS@8K@@8;@:@9}@<2@@;2@@,}@@M."w"y@m4p@pS@.  4,4B  70& 0,X&" R$x" zXy+y@8w,l0 0B! x 5 ȆU zX, U p  , #zZ .y@y@8@y+@,&zX,$ $  0 w [`zX"yq,H aEA! ea L$,% .2+@8 6d%{%* Fzh.yq y@&tб@y@8@n,w AweM% v eey3{<}z)gW,$wյ@@ e A y@8z)g,H N  A  pM ,lMp  &zcz#{P"2, e @ D .& %{Tq$zh ,H6U3 ĕw E%{z3,lBf  e! 6zg wzh :y@8.N`>@@ǰ@,@w BA" %pz3,$!   %^9%{% zh%{% `,H!!w  .'W3$,|Ef"f" t  ,  "0 ,`&& &"SSS &m4p%   ?        |qof""E & ( (: + +: .,. IAWFSR44R 4"4 Rw"  (l$B EPE0d0 ,p !w TT&zX y+y@8&a,0 ABD5% x W zX,U ͋5uM ,U p (  z`. @ @y@8@y+@,  @twx4"tz+l"#{P)&tб#{ zczz D AeAeM.o" >@y@6d@, w w  {& zy3{<}$6d$$&26626  *å<*&26 6 266d7,@'8e5 @zz)g,df (1A 0@,eweMU  z"g,$נ*  4E\`q[,l!!w  .  /Eǰ\`qo,E%7-.3{<}zhz$z[q&z w l.zsz`\`z[q&"ze,WE U & 43{<}$zN`_,  % w. o" Iqy@8z_"zs8%w +"yF.iKf@i N@t @#  ,R0 7<>Xtt  >&t<,B0(" f(fX fKi i N.E`Ps E@ @y@g  *,*% !HA y4,,,$ $7 !7@-zX,H^&EPe Γ 3 ,l10 n&v-zX&zXe, G'8 b^,76  ew%,ߕw y+y@8, 0  ?ɐx " zX z"z, " w  0 .z[M"zy+y@8- Q0eUe zN`!zc w ŀ .#{P y@8zcz#{h ww.zsz @wNzzl,w&e& N *ɥɥO&>y@8zke"zN`f,"$5 T z,F @ ( 58 ,j  Hѐѕ[,pw & EC..z_z3z^z3\`+$(   %A.\`> \`>\`D\`DzDwQz >.srw@@U( @,@w) w!=. %pz3zh 3{<}$zs1 $w .z ztrz3\`+z[q,<w B ~.U( zw/Nɋ 0 (   & f0  %vQ,r`Z BrAC”', , fWAJ& " " ,B-7 %.Wt x8K@ze,w W!@-xW@t,07`z7 |*Xq`zs&*D,&T0N-N  #"  y,J 0$zX,D5 ɕ0w wU ɕ&zsz:w@ #{,hpw 0 M"y+zX"y@8a,585 U wx,(B  , zM,)Bk!z\.E@ @4(x@E0@,,04012{vz)gz/g,6!#6  z  z)g, v w  lCm2{[q z"g$z g,  # 0 hz z"g"z)g,N pwW  . z)gzczy@8z:wsByHV@@.6dH V @@["X,p,.z/gz)gz:wz:wz/gz ` w  t& y@8\`>zIq3"!  < ,,n T w &&xs Et $, X- @.%vQ Eys t &x, w *t  W@ %vQ$"y,ՀW ! ]&i N t x"&,KKT0 & 1,"w 0w Q4Ef*:*EzT&,$nwwVw On"$ 4,H5  55U@"  zX&~,l w @0 = .y+y@8zX"&~,@5 wB.XB6X  . 6&,2 pB  vws  ,Tar NLe@6•4 $6,^C5r0e0.zke zkez:wzkez"g,0   *z/gz:w"zc$z[N .#{P #{zczz,$5@    t"z:w"#{&zc ,¥,eE z z:wz/g,&e,0  *z:w&z:wzke zke:"*6 nO !(!"hi N@iDL@H`@E`s@TT2@\M2@,}@"y@O X(O Xh ht @~@{~p@}K@%{Ps@z @y=@y@=@r@ g @f@ e@W@TT2@pS@8K@@9;@v9}@4(x@<2@@"w@"w@!"@\!@m@@@ f@O (@O @O @^O (NO h 9qh:z7bw Vw "y4(x,FJW  w 6w "j&".f ff-Z-Zee *t pS t pS3,  0V!&wk~$N}f6,Uw w#  Z[,;);) D w T}v,S` `c ɋw8• 5W5 T  $, AB  u5  "',DE•\  .56`."6&,hUC.. A..$ ,U@= x • &~ zX~ & (,5 5 55wD   ,w @BW *y+y@89ee.#{zc zz/gz:w Dw.z"g zsz?z&tб \wp.zz y@8t v;t zz^ zz gE.$"s6d@ ev@ ev@w,Dw &ΝY&3{<}y+Ӆ~$%{%,$h\!P :@zh@f@f@@O (O hJw@f@X@L:@,@@+@@@r@L@ f@gnO (@O hO (h fh"(<~@~@Ays@f@ 9q@ @*.O !"y@,}@\M2@#.i NiDL"y TT2 E`s: ~aH`,};Zw |W,d,*f& "Z A "@,N $0w ez@},rCw CG,  0W,$fCנ9נ0,נA& " ",W:ы & E f"f&z z& ĕ A0w=.f fK# g f}{" 0 w<~",Ew׋L $z[q&z:,R $MLMONm,#C  $,i,@5-A%B` `%fk5 %%+,dA |uW 7 &,@E4/ a~4, $R &=L, < $&,$,U 7. ,  w 3E`s"4(x,=zh3{<} ,H Ee0Jˋʋ2~)l  ?F6d3&w . ev ev2{vgK&B@w .ff ~ ev=2{[q ev.@f@e@|,! D w " f>\M2.O XO @O @O (@,69;\!6,$@W  e ww " $TT2&",H^ fj v.^ eO (j"m&l ew.}K y=y@=y@=,  $$~r,?. Ez ff:79. ff\P e.zz zz%{$f01A.ffz  g f},00$ &%I|X  &$T,.T  ,,CO REENWAHAKITIDESCUNCLSYAS|@ 54>5 E4 g,55 5&5($775&($"7z,< &(DaCaAa    &(N,` 5#   7 & <7$&,Px  D5 $457 w$47,A&57A&  pDC& 7&3,ee  K,5$55CC0e ,$5&0L,  E AD eFy&y+`&$%0 e*f y@8zXe<,B@  BE 5@*e< eZe, E,f EUEwzX"e""M,x e""$$zd.0L@e@e<@,! 0D w B$Q$$@ %{Ps {~p"@ B  ĕ7*B"w"w!"WX,4 4 7!C.8K@t  z <2@ 8K@,w $ ȋBЋw w:&<2@t 8K@"8K@,21UEw 5 @ &t  g z 9},Vw hw ILLEGAL SLOT NUMBE4(xh fm,zR ENCOUNTERED WHILE ENTERINGC***PsE`0**$E`si.,@,}@;2@@  *,* +f5"bw ,f ],Nfa(0f &w ,rT,`E e x  5,N N Ê %0,w cq  *&x,C7!&!nm m&D             ).   ) ).   )8+|o#.8 + |o D eFy&y+8&$0 zeg*f y@8zXze<,B7 x  BE U@xw.e<x eZe,L$x,f|x J"| zXe""e"",? : ztF TASKS-FyATAL .O @f@f@J$e7 7. zhff,w, DD` RSX-zh@11C V005A  N.O  f@L@r@, %w ILLEGAL *  f,$NUMBER OF UDC-11 MODULES SPECIFIED G8K@,&` % ;&5TQ,Jѐ X7` P7X7RR H,n1 T fW& ff8K@ W,. 1 1 @ [ & <2@8K@t z F,W    &t  Wt &<2@X(= ^ . v<2@&gf f, e 2.H8+|o.8 + |o    $$ && ((8+|o.8 + |o ,,f.  ...  00 44I.Xq` @@m4p@.8K@@K@pS@8T@W@. g @&g@Xq`@z @zs@j.z@z|@z@z[q@zs@.zNy@z@t @(Xq2h  *,*E!&07 ,7 7Xq`,N & E \Yaat :,r# wwwt V N w w,  (  ) J H J,J    ,n@ U , U 1&"JwU,E w UDC-11 SCAN REGIST  fER ERROR  ,Ep 0   E & ,f ,, %&W 1B 2 4S"XL:+&4,.w K8K@t 8K@ &g"&g|, w  *&W;2@8K@"t *Bw, 0 0 . &gv<2@8K@"t ,d7Bcw 72Pz  ff,2w(&  8K@, P wje,a cccc; nœi.8w8T8;8T&:,L 6 6 ] g     . , ,"E0 E0 E0"Z,<P=&00 0%z `d}.M@ @M0@M@c,<*MNDgM) E,w r&%:":@f&&"t 6,EҕAҕIw8& f g "z ,Q$f& w"w <8Tm4p,&  70EZ8K@W$ g g,JU0Ґҕ ҕ w XqE TnVP  ",efff2cd,.ww tŗ!ŗK, @ @!NINSUFFICIENT UDC-11 INTERRUPT  f,RTABLE SPACE  ̇W BX$L:,v 2 7 w UDC _*+L fNOT PRESENT r>.O  @ 9q@f@~,w @7 w. 9q~Ays f$Aysc$$w w ˋw~ Uw 7 Twa . g  z t 9}& ,!! e ,&;2@8K@t 8T,< *.W *".H`, ,}PzTND,$77 _ Iy+"y@8,HE0 ߝL = 88ezXzz,,l͋'>-89,4ӕ ˕ ˋ(ˊffU<,˕ ͋ wPNU@w "zX, x ˋ   ˋˊ㊼˕@ ,   ( Qa"E$.Kz z t &&gp,2!_ 0w0_4KKX,VNONE e0 7 Pw w ,z 2 D R %:A,& W& Bf <9 g pSz ,f8Af.f^.t  g pSt $ g e,6& &w : :: , w@& N& N & N g t &tS77s1@0@<<<<P b+* @`8rfpt&>Er#4(d#0`(f)28j*f(<z)<,@  f&m& B*f q/PNe@ &( f%e) 0],B1*EPw0 $E1DaĝP 7zwrewwT.MM0M0M0zM.f@ @f0@f@,@fRN77zTRN,$ U@l_  zX"y+&y@8j,H0 ߝ l  zXzz,,l ߟn U@lw "zX, l0 x 7rp`h@ zX,U Z,. uR C"Pa`v,R`Ca!R  +"W&t /,v s   5EJz zNy,wv  ZE5I&z[qz$zs *eZAA @ҕS1. z[qzzst $z,-w B9 ;:B  Dz,T%ÕI5ÕO5ÕBҐҕ ÕU,(ÕDҐw V&( (,@p 7B7@@747 ,$7 7 7 :7 7 4*7 $7 .H7 f&nT:D &n":(DJ,n:D!w :D.w @ e )7 w . ::":(:.-.I ѕ?ѕ ѕ v(,wDDWhPl0 "  BP0 N4pPpF0 f0 L,Z >]@ @~" ,797 DwU0\ŀ2 0s 2 PBw w 8&e Pww~(@<$0%w D @ w $%ĕNwHõ@j$( %Jw *Fwõ  w"jF@DH|*ffX   .ff0f0 f0z/.f@ @f0@f@(,8fJ77KJ,$ UAh_ 0 zXy+y@8,Hߝ hj GzX&zX,lUAhh0  px zX( hw hY&  ; = Hzzz,LW  wE5& $ ,p & E&e "zNy z|,& #   ee wK,& &-J > z,wE7 ,7 }% w:8K@W, L F De ,Bw :  eZ7 67 <PZ DD"P&ZK,w J^hw >lvw 2z ^hlv"z&,&w &7 7 7 7 7 7 7 &7 ;,J7  PXm P&X.n/  3&  & &&0zX/%& z X(,^X/ V3 & ^ X, 0dl`X/% 0l"X,[wW# ,&fX,AD& W-Nfw   H4, ^* lU*, *P~t.BN@nP w z&" f zt@w*1 &   w@eH 5 Rw6=\*h @ zz"z, ^ zr(&ff0f0f0>.O @@ @4(x@,!wF? P & feFy z"zs,$S GCE B Dp& eZe$e,H 5E ED Da!,ffw&   &,w wtP"**`Xq **zs^& w --TDk,( -N>-H8--.,L -( -$--,p- - -,- --X,-Xn-- - O, ~  -U,B& w T--)E,$-(4%-".!-(-" "0Hj ^ 5^^*^,p^_*"81:&$ȋ 068*.W% ĝ4PW%v @Rffw dl \& ~N7I > ~Q&7V xw   P < `2(w v& $&  Pwww " 7"e, >7w.7+(D $ea %%F&f ^ 7X`,l)5A$D@A  s@$e<&f],3Qe3  DL&f fe<f,$8xx 1"$e<e""$e%6, R b$W 2U1 [*e< +h: &+, AECDP8 E&L:,e&e%,  RR CE&fee< eZY,a.4dz; 9@= @|@@.@t!@t!@!@"W@>.-`@49%@79@79@@<9@l.<9@@>9@>9@J9@uL`;@.pp@|~K@*@(zR}hzd}h , q)~ѱ鰼Rn& *|~Kpp"uL`;,$n[nHXn&Xn N{.J9>9>9>9&<9,HnKnKn.n,b P  ^P v.&z& 0l0U&z&0$l(0,7 -^ gw 7 B!e@.|!7j7h7h^,d&,, w p:a,(:'a9E EL,Lx,pT #  ;,EDIT-11 V004A LSP OFcw @w] h* Hwf**+ ( +f &' & ,&pbpJ bB@20* b w  w(4 brbqqœsX L rf" [f Jb70 *~ "  e#*   b0  601E0 1wPpB*  ddD ќ w 5.,fy+ f,hPw S5 AUAE_ P@ ,   EEB XL:&,|,E  BDA@+f f+,PA 5`5@@ @3QA ED+ , $ w 7  E@}4(x,wyen& <9@<979"79@,l+n!n$^ޯp!.79J949%-`&"WI,ׯ}֯x֯i$& !t!t!",};;1} f|@= ; 9Y,d`Yz  z ww,ww;ww $, s0sr r@ [q,D`"YOX S!A[,hP@@:fF?    *   ( ,,pv| lv h h .pv|   lv h h @  : R . x .    :  R  . x =TR   , D:".R     , D:,hWHPMXROF0BEMRIFVUHGTNSPCDWLAKXJ012342'56789/+@-  8/   RRg p w Pq 1 1 0Prr* pr0@1B*B P ww zw w11*f 0BP `  A * `A  C B 5* @.P .P e Ws* WAw PDW-EF AwVwN00 w$ 20R&1w*. 07 &f&M&-*R f&& M*v 0 20 1@a h@8N,@  dnzh.f:e@e<@e""@E,BEW  1!p$pppp.e%eZ ee<e""Z:0& .e""e e(ff,Pw &v&x eu.fy+%{%vz:w$e(ts: 42}\!],` %@   0,! ,;@@P_,@ @@@t@o,v@o@e@ 0! P ,@! @! v@ @ @ ,d@Y @ @ @J "D ` @ fj f},f7 n, &z&&  w &z&,    @ ,7 ~@` -tnmB,   7 LF e,  -4. e ,>00 && 00& &,b w  T7 w ,w 7 >w ` "H,kA1K wwT Nw w 0t A  $ w lew dwH \ x* @w>w% @ $  15@X $w N*l ŀ & $5 ~&  | %  Zw0%G w%% 9h.>9hJ9huL`;hpph|~Kh*h(L,H^7 H^,$fN&S f^N,H'wX@. Qɕ ? @,lHNnDD::w DD:":P00&  w  $*k, rw  d1 \P!P"E,2h.d `&\ " .>5PP^" P$P(^,d D w 7 : Dww D_,lD- w 7  D0f7 $ 7! w#X ӕ    o! ! `0 . H1*0 , Ѥ 1ӥ, ˥,S*T˥<˥  ˥.˥[ H%*x˥*MD`%  *% %2 w & Β * ˥: ˥.˥u*$D U    F`* T˥:  X  R1 *,4K : Ӌc 2w *Pӥ*@ & Β0 e*t&f˥*  Ŕ@*Ŕ@a   @ag"i N&4(x~(eww . y@8#p6dzz* e  ."wf ff"w( ufq^7 r7A!7   N,7 7 7Y8\2 7jwhw`. 8, @\ & q @,wjwNV \7V   ,7:7^+ & w0$  & , \ w(\7 0p(&0U,D\7 & wF,h?:6{ "~" &~,"7  f(pfl" r$* I,DD DDw D D DD,, 7 77 7 , w-  & zr%,@ lԔ 7OWww  ,d LH׭( &w &  , *#1/D  7# #, w B! B #@, D #K` -#ztn, #dw mZT m7Jd0 7&} .sE*fC  eB  e& * L̥ ̥ ̥̥̋ *̥ L  w H ˥*m *(&j  . ˥,  [ W*L%w˥* ˥]K I G H*p C B&     *  ˥:0< ˥,U% "˥**  ˥. ˥[ ˥/'* ˥< ˥  ˥ ˥ *aeAbEɋA%! *$  4 .˥: "˥.*H˥$  t&vLI('(& !#(!! !! (! K &!!7 !" !!! !8 8K <,<!!! !-!  C !!,`-!!!!!,!!!m!",# \!!! !w!,w!!!7x!B$! f,!',u(p,7 wrB!eV7Y7V:,8 E ! ! ! ! w&w$,w,7 *w wTw7 `-,d&7 \7 @-D 7 <f/6,@5& w B  E-,d u  ,e "$" ,"PA"TA  ĭ7,"37  ^"^F L ""F.fff2^Z^^N 2Z"v&vn& &(*,@ b &w^fw w ,d 2w 5@- w  & ˥0 *l˥Z˥9˥A ! *EECDe> `5 M*`$\nYw@   E*  e * f  E :*< `#' W'͋ WU*`We ee e T[*'  W#*e1$ 'd *d0 .@c  W3 *e x5 ee, e " wr7l  BV,8&e, " 7l ,\ ee " 7 w  6!,- nw  &!0!&!$0!. :! & &!N:!(!,{ &!& &m !!&!, !7 7* 7: 7G 73 7  !-,!7, 77 77 7 7 7 7,6 7 7 7 7 7f 7c 777y((^w2@F^@2 N@Zz@. @ F@2@Z"@,: p4d@"~4d PAL11R V005A v p @ "~^ # / j|,j7 7 l  f ', I w$7 7 Õd < ., < 7& w~-D  -$F,6 < X  7 P 7 F $  , % P   {,5   7 7 7 /,B z&,  n  w > w S , 8&  wD  -W , T g-Lfw  w , ( w  w l% g . w  G0 <=0&Y,: w w l-dw 5@b37!e,^ N P R5@: , .7 0-r000l00 0&l, 00&  wE{% E0 @c `a* V% wD @ 8 :w  Ý*TPsCB ! !_ CxeL  ,w  R@%w $@,%$Kw|  wL s*ŕs@w6 D$ťD$*wJŕDՀE@BB4*:"  $A U  ^U U.*l D !|!!|,Z77& 7$ 777777 ,~lh777`,7777 `777 ,7 7 7 7 7 "7p7p7,m7j7&!!&!0!&!! &!&0!.!0!!xG!0!"x(,4w B!pnRf!/  "!,X6R%X #F0!/  ! ,|%X $!/  !,}  d Hw^,f7    5 r 7, 0 b 7 t 74 ,f, r  w,w\  w ,@6  (  , 6w@f    6,> -D    wj  Q-",b JH wJ  @,2 r, 29,: Fb~0 0q. ww w 7 D (D, DT "RR-HZD, w @ 4 4` 7~(,8 w (7 mh - -d,\ <mNw M, Z!R#!67, Д "Ԕ - 7, -+w rn, jl  V 7J,@7@7!D&  & & V,4&  |# 448kPQ$w`r+Tswp"w~"PepPeY* eB   08 0Ph*HA~ ! 1# *le& f췣l*56U3 ĕw*Bf  e!  w|*@wN BA"m* !%X Z7,7? !/ h   ! ,ThwN 8 ! !PHR!"!, w @!ew !b7,077 E UH0 ,T0 e -w !,x7 ei,|mtenZ7de 7 N,Dµ $,80l0µ 0 ,0  C `f F ,. Fx v   Hd,H   @Xʵ ds,Z   C!$@4,:A(CH׭ )NF   &,^ ̕`XZ  , l j H EH$,NV FNL F   H,N&@ACBEH,׭ )NF` 8 "  ],%   w& \& פ l,X HԔע ԕ (G ,|%w"& & &  ,w z:&  3 w &,  w 5@ ,$נ Ґ b נ +נ ,  D#w B& w 6&  ,0w6w $ & :: :"&:l0TF77 :-^X V  *,|::* :ß"   J %^*0!!r#&w L *T!!d#w ( C*xE%7r%-@%I$w *HWE U & * 2 % wt$%wZ "d ^ t n%,%wu*4@w) $w谠$!6X% w@ h*pw^ B   w % V-P,,`7 ,Pm7mE,t7mu,ew-tz:, #(7##&#/,.J70#4L7mG#.#$#/,J7#4L7m~j##&j#_,(),}# }#6.L7m #w<Ub#<g#&#,  7 ,6@   ?!%,Z 5 ?   $ͭ $",~ͭ2 f^ͭ2 .` FNF ^Hy F(s0 ͭ 7_ Zwͭz WZ*,b7n"^w ,    pP  pP,8wP  w  END? ,\@: :e,  hnß :hn,::- ::U,  ׯ ׯ  , 7     ,087 2whj7 h b" ZׯV  ,T ׯN FH7 P <8:ׯ,x0 $ׯ( ҟ  ,7 87$w w,נ R׭ I wj& y,& & I7 71*@wEA *Ê!%d#w =*!%r#&w .f*õ%  e e&< &c7% c \$ w%5Dv@$ w *%f d$*peeH Aa(pE*å  z& j9=5'* Eĥ5få  }*  R## =*2 %a U% 6,r#D!@Aɥ w ɥR# D!,:<@/B¥K:,¥8w  ;,w w"| X3A,¥@t%p,&$ `%XPj7 L7,J@De N zn &nU,nxP27.,",xP 2 ;,,& -jj7>,_ @ɥw &7e f,D!Bͽ%( wn,jpwy d Z`QW Zh,wDw@w>7\& z ,f"e  ͵ R/, ͵%͵ɕ= C͵͵ ,4 @G**D`,X $ D!!e $͵@,| G*ehw(wE $,  e8 hfQ$H e,  R jq@+,p7 n 7 lX7Z,7 w }w  &1,,!T"w fw- T.PҐ ^& 7 r$(,v 27!* Xӕ?ӕ ӕ e.Dw 67 p  h& k ph(kI, $ % h $  n hq,  h 77} Xw0& h X, & & 5q-I8 E*V@ .CË  M*zq- D!* ! 1!ËM*1w6 :åeD*5E& /< %a U% '* jËE  3u*.&   %*K B*RC 4CU "  t*v   z *I-נf X * ËED  *,  &,F_6,VLK72-4;7!,"*t( #   # ,F7#  #,j7֋5w,T* l-Z\r,^v7V7"!7,-4,47#7--,.rfm&f&=m&"f&, ^&& &j*0     , 8*w R  *   , a^Q e ,0     qL % L |,T  " s7 " ,x & w w7, P L7   ERRORS   , -(@DXTf>d-T%, ßå U ʐdï}ït $& w<0,Ґ&  7 |7`j  q%"q*,T%$%52%%%)"Q,x 8%- (  E,w5 &E f 0ee !׭ f  p*pw,W!W!    w,    7 7wn 7V,0} *kh7_w ^0Yn*,T-P* J HׯB *$5&  1"%0wF 5  C"%w@4%ww$t J_*J% $tfAQ$e$9*n%נ W-eo%w*@weB( R  RRC w*&ew PÜ *( { wT fv   "&'% <% @%P$Psewĕ  ^&b,B fVZFeE!,f e ewBe, EeEE!e e(:, ePEeE (7&,  7 , (:!.  :!u  "  " xQ & ,& !:! !& !:!  &,J  P#e  &  P#$&,n N  y @ 82 ,2 :e<w:,V l O +. &Jf,z &| nJ, VTHT*3c, -% RJP a& ", w Eßנ0נ9,. å$ å.å  ",R נAנZ נaנz  E6.v   :ׯ4 .xׯ, w  7  &,wwpwwP @z fofJ J  n% $%(P3̊f尠$f*% f& E e& *[@ETW= L)*f EDE>&  0*e4@a% . 0E*4  %eMU  ^**X'E n@!E^7X*|e  f>- @N}*@vA  $@%A*P `DaK 0*  `D` w 췜{ -.&v&& v&&&, 75e 7 f&ѕP "&, ѕ &&]e  &.. 7 2݇!97R:!:!G ":!(:!,  R z z | "v&MODU  R  z z | v&,$ LEѕ Xѕ ѕ &,  &$ & ,H 'ѕ<ѕ>ѕ ѕ _ ',l @ѕ ѕ , F&]d -D."-(.$. xr7lB v2z(2, (d ? (7 7 &*,  $ 0 },  D:@77 7 ,. w7 7 &S7i,R  wJ\,v nf Q_|, ε98zt%q, ,0Xwwaɵy, ELHA'%lW60IZgvLD$lW !#W!x !!KWK.$W\yx7 !" !!WK*W!\yx !-!  *W-!!!!!*W!!!m!"*X# \!!! !w!@*8Xw!!!7x!B$! *\X!',5 ee*X e " wr7l  B*X&e, " 7l *X ee " 7 w d\:  $ X@N.8 $*Jw Awe M% v ee*nwյ@@ e A* N  A  pM*Mp %  N!*^  %e @ D D AeAeM$*  w w  {!"02>BB> B  *å3*L '8e5 *pf (1A 0@z  , 7Z7h, @:xr, ht"(5b"w 7'  t"P, wj"wZ G,D H7!&!0!!&!$0!U,h wg7 @wRɥd, :<| $!"7&F, B@%C%n% j%!, J)w_D! [! D!s, @7Gɥ"4S,/ZR,* Vq,N@@@ :  :$ ,rxxF  S̕:&x  F ,} #(#,׭$O׭KH  , >6EP ,)&˕ ,& S, ,J˕  6!*X- nw  xxC,Y x & &x *6Y{ &\y& &m y*ZY y7 7* 7: 7G 73 7 '*~Y!7, 77 77 7 7 7 7 *Y 7 7 7 7 7f 7c 777*Y77& 7$ 777777b*Ylh777*Z7777 `777 =*2Z7 7 7 7 7 "7p7p75*VZm7j7x$yxx,zZ*eweMU  *$נ Q0eUeA w Š% 4$0w\ %w * wT&e"& N *ɥɥ*. $5 T s*R  @ ( 58 *v   Hѐѕ5* pw &  EC* 6!#6  *  v w B lC*!  #  0 **!wwA, p'h'& zD!p'h'"D!#,@ "   ",d R7&B@%<%2, % %/wre, e ZVa+, G  dpw<w6o, $ $]C,eՔ &f/=-9 ,<$77,`77,7 j7 dNSXwX,n#%" )  ","~hw"~ , X  4 7mw:Tw,LPQARDMBINTU,@,EEGx,"Hx\MMU,FfxM,j&W4d&W4d&,W &W N&WzJ,%p: 2yxg!uu*Zw B!pnRfy/ *Z6R%X #F0y/!*Z%X $y/ * [%X Z7*0[7? y/ h  O*T[ThwN 8 \y NyPH *x[w @!ew !b7*[77 E UH0 *[0 e -w c*[7 e*\|mtenZ7de N p %w"&W  GN!yT!b!!!L!!L!! d! ,p&( ,~!"0"e&"0*! 0 &!  % !N $ %%*!&$5@ !   *!%(¥,e E {*")2"e&,"0 " " 6" %e (ecP"$%wvh"%wP" z*"Db݀w &Ν4*"h杠7t"(5 t"<,"jw 7lwj%b ,N z H o6BC:  H   >.4meE N z< (4BRZn~.4B R Zn~,*BZn~DDm DQ$(D BZ n ~,N  Dd 7DQ$(DD(,rDQ$Dd 7DQ$(DDdD[,Q$4H7DDd7PAGE  , P,Nz zR}zd}N8* BB" rH(." r H (JVJ ` !T^F &C.J  `  !T^F & j 8"lb* b#. 8"  lb* b#~NZf"~"N#".NZ  f"~"N#7 N*,\Dµ e*P\80l0µ 0 4*t\0  C `-P*\`7  *\m7m*\7m*]ew-tz{*(]  {(7{<*L].J70 {4L7mG{.*p]J7{4L7m~z*]),z,]7m >\!P# *" Ee0J# ˋʋ'"  ?F&# w 8#$>#B@ #w \#D*d#,040Ef*:*E'*##wwVwJ(n'7*#5n' 5l'5t'*U@T*# w td@t'0 *= *#@t's'5q'wB'XB'Xx'*$2 l'pBn' n'J(vw*<$Tar NLej ,ɥɥFV b~ w,7 47 N7 @7 7 7O7>7;,?&&  $,6!wNd- V\,ZeTP . "  ,~ ? "&e ", w P,xwhwb".w,G ", Ba? L!/ @""~ z:D,."~   z:D,&           ' 1 = >> F L M S T @ @ NN PAL11R.OVR  T 0 &      zw<Ub{<"*]{x@Aɥ w ɥ *^:<@/B¥K{*&^¥8w  |*J^w w"| X3*n^¥@t%p*^$ `%XPj7 L7*^@De N z^-*^^@_^__7.,","*^,& -jj7>G*"__ @ɥw*'*F_  &,F_w@'•**`$^Cs'• r'5r'W5 r'Ty' a*$A|'B  u|'5 x' l' *$E•\y'  '5'x'*$UCS('J('p'A*$*U@= x q'• p'*%5p'5 p'r'5x'5x'w*8%w d@v'BWy' X*\%EI(w׋@%*%R 'MLMONm'#C *%'-A'B` `'fT*%Az' |uz'y'Wy' x'x'*%l'R ! , R!/  d !,2 T7 4,z' &z'),VZw%X77 %f,zL! ~\  f e L!~,777 BwZwp,P$ Y TK,p7j < 75 7/ w, 60:w$  ,.77L! J\ X f L!J,Re  ^w 5 6,6eBw7  B.Z7 7 7 7 7 7 H!65H(6,& !wt׭4,Lw$|vwx7 7a7\7,77N777U&m,S 2@wf,ĕ Q$BB`@ K wI ,4ʥ e<ʕ 222@,X   yter,|wO w&&*j_VLK72-4;7!*_*t( { *_7{ !*_7֋5w*_T* l-Z\*`^v7V7"!7,-4*B`47#7--*f`.rf}}*`}& &j*0k*`fVZFeE!+*` e ewBe<*`EeEE!x'@E'/ J*& 'R '=L' $*4&U 7. ,  w pV*X& 5'>5v' EK*|&5' 5'5'''7*&'''DaCaAa  l*& 5#'   ' ' %*&Px  D5 ''5' w* 'A'5'A'  pDC*0'e'e' K'5'5'CC'*T'  E  x'Tl'Twd@ ,v<wTB LLOD8TRTACC" L8"&,RT&p"Xɥ ɥ &, rb#fV  S ," ff`,".7+" X f N` BEV.*W!N }8rbFd"b <.8rbF"d"&b,.Pz   f"rzh"Sf"r(h",vzj"z % ,4:֋w, 4:@,-\8 ׭,/t'  , V׭ ɵ$,0ɵ-w8,Te / ?0xw--"*, zw30 ,wwwwwT@wvw,Q$Q$Q$Q$Q$wQ$wwdwww, we e(|*aePEeE (7g*>a 7 *ba(x.5a YaxQ?*a@yxzb!^~:*aFxze  } *aN {pb-.&}B~*a75e 7 f}ѕ*"b ѕ &}]e f,Fb7 2݇g!97Rxx?*lbbbbbb"}MODUV*bLEѕ n'Rp'Pr'Nt'Lv'Jx'=(G(Q([(e(o(y(((Sz'=(G(Q([(e(o(y(((Q|'''>(((1)))$*u*X'''>(((1)))$*u*T':'/'6'''>(((1)))$*u*H'L(L(L(L(L(L(L(L(L('=(G(G(G(G(G(G(G(G(Q'*'('6'G(  .8*X(d#.j", x  wl":  l"q,f"" { ,  F!%X b$xz,K 7CQ$ ff,*"7 Xwwd,N wNdJ D! x O D!o rp  rc r^ v_0vd !D!ab##D!D!Z !D!# #$D!*D![2 7 e%$ #D!#!6@7wH5@ : ,07&$H*0T͟ׯ` ?^$*p,| 2 Z j2Z,@ @fEwB,y K <& ,&$&` 7 `n. m 7 ff< &<w,2ff3 f&-w  -,V 76 7 Xѕ ѕ },pbb*bp~ѕ<ѕ>ѕ ѕ *b@ѕ ѕ >*bF&z  E* c7Z7*Dc@:xrT*hchy(5b"w 7*cwj"wZ *c H7xxx*cwg7 @wRɥ*c:<| $!"7&*dB@%C%n% j%b*|(r#i&(P"""@*(@f))77*( U@l*_ P d7*)0 *ߝ% l *,) ߟn U@l*w z*P) l0 *x 7r(p`hk*t)(P7)*)8f)D*R*77*) *UAh_ P d0 *)*ߝ hj$ #$D!*#,$D!$D!$j7 $ D!$D!q,7 %,%e7 ׭ 7,| 7x t h er 7~  ,4 r 7 n ` d ww4 ^,X7. , .  7  G0| ( " ;w  ~D!  *D!a < 4  & ^ ".( !D!#D!D!# j !D!#D! D!&#m, $j7 7 %7 7 7N 6,zf0 f  O0 0,>%0%’ 3K0 0$0 0*r-0 * 7 ZFv*FY,7Od  7 ,.ׯ  &-"-&e.2 ɋ 5  ,0,n ,(,),X ɋD T wc V ,|Uĝ E7* ,*@dJ)w_x [!*dd@7Gɥww*d~~& zx*d.z  z*dR7&B@%<%2=*d% %/wre *ee ZVal*w6͕Bw "PW,** ͥPHW*+(w D 9*&+ ĝ ew> w z1&J+eww %(j+| e  ^ +pԅu+<7$ 7$ Ћ,7 ׭ $ww , f N` [,  7 #x #D!D!e## D!&D!.Dd $j %#D!#H D!i#D!"#(D!,j> e7' @! @ P %, $$Ћ7 ׭ w+,c d ff"e b wHwF,W"(f4 WAf" ," ? " f" ,X     ,Bd EUX$ pnT   wå,  @ w(w&׽R@׽#,J&0.  B`E  ^0.G,   eeW!3`&f 3,0v  *&,Tw  7B! R,xwj  p7j7 *,L 7 7 tC,& E - 1- 7Z8,7L 70!ׂ {,&  7 7*e7y(5 *f"jw 7lwj%b *8fN z@fdded o6BC:,\f4meE N zffzfffffffgg4g*ffzffffDDm DQ$(D *f  Dd 7DQ$(DD(3*fDQ$Dd 7DQ$(DDdD*gQ$4H7DDd7j *&gɥɥFV b~TJg w8*Zg7 47 N7 @7 7 7O7>7;*+B  7,&@*+&" ,RW,* ,EPf,"f,"*0, ,",,0*T,`,& &"SSS x,%,  ?@, , , |qof""E p,:,:*, IAWFSR+++k,w"M,*-R0 7P<(-X^-A*,-0-ҾBP-,--Kih-d&f -yX$k,f  w &@w&d &, wwwu m ,  P# `0 !  P#"!j. &   y &!!7  g   4! ! y , !!  .  !!,e &e %ze % R,B" wLe % ܃ ?,& עV ,,. W._ 0w,Pw2y<  @0,tw2_DWW,W µ 5 h \,ba7P0. M,2. 6,W"µ@6µwµwµ,(i ͵&#,L 7P-׭5,p3 /0747Z, 7*~g?&p& |*g!wNd- V\P*geTP v. "*g ? $z&e'*h w P*2hxwhwb"z.w,Gx*Vh Ba? Ly/ @RL*zh Ry/  *h T7 4,~*hZw%X77 %f*hx i\  f e G* i777 Bwb*-2 2% !HD2'Ay*-ɋ 0 (  &2 F& f0  ,*-02`1Z BrAC”l*- , B2fWAJ& " "*".PB-7 :I%*F.w J W!@-*j.G07`z7 |.*.T022/22N-N  #@*. "! 2  *. 62T@ wP 2'*. X-F P@*/P2 f" w,!7 7 !$B, l 7 wbv " Ps  "*e@$ !.@$ " $!tN. @L.N.  @LGV .V  e(2PZt.(2 P Ztj   <8.    t%m$o,aDJH2*.JHt ĝ& (,e 4 5  ,&0׭* l,J .77 7 wEՇ,nעעע & ע^,ע Š Հ ݴ7, ^ 7 hm. P &7I7r :>>$:(>, 7 7Zwp"*.iP$ Y TK*Rip7j < 75 7/ w3*vi60:w$  *i77x n\ X f *ie  ^wwd@L*i<wTbjBkLkODnTRBnTA&nCCn*jRTjp"Xɥ ɥh**j rb#fV  S 2*Nj" ff*rj".7+" X f N` BE,jW!N }jkHkkjjjjyj w ` F*B/PՀ2W !2 a*f/1KKv/T022/222 W*/w 4۠02w Qbw Vw o*/JW  w 6w g /& &"a/PePe 2 *0  bZҷ0V!*&02U12w Lw#j*J0;);) D<  *n02S` `c ɋwZ2w |W,*0f& "Z&2 #*0 $0K< Vrxn , 6 B N @.Vrx n  , 6 B N ,4X n x b D!@X n x   b D!b,X( "    @` ,|  F`w`~w`|w`zw`zw`tw`z,w`dw`l  %,7 7 n,"yD!q D!${  t^   ^e ,!D!7 79B!e !D!g,$d" 7.  ,$oVfSe,e3e,H e&e 6 d ,l̞ dd7 *6, 55 6dB_,j%WP*cP,]T* D<,U'U, @ 06&,D xLT*  L T,h!@I=\,jz   yjzyL*jjzyjz %'*k x x wy: D**kf"" { *Nk  F!%X b$x*rkK 7CQ$ ff*k"7 Xww*k wNdJ x x  kp /k^6.kd Nyxab{{xx0 l 7 e%{ {x{T*4l{x{x$w e*0Cw C*0  0W,$fCנ9נ09*"1נA& " "H*F1W:ы i0X$j1 ĕ A1w0w, 1<070 ^w1"7N <1%% {"1,010A1w*102222 201T2-/1Z1.*//V/n/ 0/*"2,0B.|0CO REENWAHAKITIDESCUNCLSYAS*(F2h---ZTVH@Fww,Hwwwww $  ,lW"W"X&EPs,@P# D! , #D!"^,t^$ $n   ^ ,!D!7 7o#D!  !D!#"D!,%7 7 $, e $#D!E{$#D!,6PD!7 R%7 $D! R%.ZT2,L:  4@. c,$@# e/,LF7  SJ  ,*Aw L C*w U2,#@% ()"'+-!&; ,:=87s0a &0{,@p 8 ̋נ0נ9 å.,dՀ& EEEE , ` e ` EM&EUq,p̵w~V/),8 נ,0נ98 å$ å.,נAנZ נaj7 *Xl7 %,%e7 ׭ 7 *|l| 7x t h er 7~  &*l r 7 n ` d ww4 *l7. , .  7  G.l ( " ;w  ~xm < 4 Em^,m( Nyx{xx{ *Dm $j7 7 %7$ 7$ Ћ"*hm7 ׭ $ww , f N` *m 7 {x {xx,md $j %{x{H x*m> e7' PsE`h2]*2 +f5"bw ,f *2fa(0f &w 5*2T4*2`E e x  *"3N N Ê %*F3w cq  *&x*j3rC7!&!nm m&*3` % ;&5T*3ѐ X7` P7X7RR H*31 Tr fu*3. pr1 P1 0@ [ *4P  0!!!&!M, 7 R%  % R%%K,r  R% ZŘTe\ R%i,7  %Ãɥww f   %,e P" f&f&~o,   NΕS,4 w Cå å$,X נA   q.|e`  v (,  Ëננz EM, *7&&NR/"N&R,< ß#0 E   ,` &wU%f w~D  @ &,  D! `TNQ , eCd ~($ &, eCE? 2$ j, N( ˕ e ˕ T,! ˕ F z3 ,8!2bW ՋM u 2@! @ P %#*m $$Ћ7 ׭ wm*nc d ff"e b wHwF(*BnW"(f4 WAf" *fn" ? " f" *nX     *nd EnUnjd&f -r*n  w B~@w&d *n wwwu m *o Fxz `Ro0 y 6>o. & Doy$Hojyy7  g   boy*fo jyW  P  pS&B4= ^ p*b4r Per 2*4h w  r*P (4w,p r0 P0 *407`&Bcw 728*42w(& r y*5 P wj*85a cccc; nœ**\51U0Pw 7 Twa *5!hrP! e z*5 h222e ee ,e ѐ  v@( , Bm!,  -67 e,2e #0-6P,V]7 #0-,z 6ee *,e*e&P,e B22e *e, &2e 7! q,  #2-7!e ,.e  !!!!0\! e ͕'2-82*z,!$ 7 27h7 zLL2,!dĝ\770 , T i"&T( ,w.& 20@p D20 p, A  &DCc  w 2w p,4 w  ' 7  ',X&w \w wXw w  0|fw |xEs*rPx7 |7 $,r  0yxE*r 7 |  D} *sr  | ZŘTe*4s7  D}Ãɥww f |*Xse P" f&f&~*|s   NΕ*s w Cå å$]*s נA   ,se`  vNt`*t  Ëנe ee  .TITLE PALSYM ;THE PERMANENT SYMBOL TABLE (PST) ; ; VERSION LEVEL 2 ; PATCH LEVEL A ; ; COPYRIGHT 1971, DIGITAL EQUIPMENT CORP. ; MAYNARD, MASSACHUSETTS ; ;THE PST IS A SEPERATE OBJECT MODULE WHICH ;IS LOADED TO RESIDE IMMEDIATELY BELOW THE ;ASSEMBLER IN CORE MEMORY. ONCE ASSEMBLED, IT ;IS FIXED IN SIZE; HOWEVER, IT MAY BE ;EDITED, ASSEMBLED, AND LINKED TO SUIT THE ;SPECIFIC NEEDS OF CUSTOMERS. ;THE PST IS BOUNDED BY THE INTERNAL GLOBAL ;SYMBOLS SYMTBB AND SYMTBT, WHERE THE ;0!:!:!=, !$@P&&!&!EE&!&!3&.!EExQM^fi !@,!\Mfyf!!:!!D!!! :!"!&D!,!!!!,!! !,!,!,"0?',<"r  `"o d"c,d"t w 7 wtwhw O  *O l, %_ E e whH ; _ "H ,6  =w F6 / w :( w %  ,2! w * w "w * 7 w ,7w 77  J  ,4w7  ww (b ww ,Xw A B` r%D,| w| 7twrj,whg E 74pwhP Z 4,E t4P 4*2te ѐ  v@( T*Vt Bmb*zt  -67 eS*te #0-6*t]7 #0-G*t 6ee ** ue*e&PS*.ue B22e *e*Ru &2e 7! *vu #2-7!e  *ue  !!!!!*u @` 7 BFORMER IS THE HIGHEST ADDRESS OF THE ;PST AND THE LATTER IS THE ADDRESS OF ;THE 1ST WORD BELOW THE PST. ;THE PST IS ORDERED (TO PERMIT BINARY ;SEARCHING) WITH THE SMALLEST SYMBOL (IN ;MOD40 PACKED NOTATION) HIGH IN CORE AND ;THE LARGEST SYMBOL (IN MOD40 PACKED NOTATION) ;LOW IN CORE. ;MOD40 CHARACTER REPRESENTATION ;A THRU Z : 1 THRU 26 RESPECTIVELY ; $ : 27 ; . : 28 ;0 THRU 9 : 30 THRU 39 RESPECTIVELY ;MOD40 PACKED NOTATION ;1ST PACKED TRIAD = CHAR1*40*40+CHAR2*40+CHAR3,0zӫy,"&""qQ[ F#,F#/E CC TRANSFER ADDRESS: R p#Vp# LOW LIMIT: R #C# HIGH LIMIT:  #/ # ! #, #" ##< ## LINK11.OVR  $5$_ P%tP% %%p ^&e^& / l&W l&,5 s&P s&Iw Y4 4Q,-% w  =w H, 7 4=w e0 4,0w ,w %@w ~k&,Te=w @w Xww,xw=w  w  d,w *Ae0w v,w nHBF),w 6- .274,  4,( B:8w ?j,w 7 w 777     w y,,%0 %7E `  13  & <1*u LINK-11 V007A PA*vSS 1 PASS 2 # **vZ~~~Vhw2b,NvhNy~7  z*tv7 8 z~~w*vh~~j& d,*vZh H&Bo*v6hwl*hw`hwT*whwphwdhwX/*(w&Ew7xw6*Lwhw*hwhw*pw ;2ND PACKED TRIAD = CHAR4*40*40+CHAR5*40+CHAR6 ; ;EACH ENTRY IS 4 WORDS WITH THE LOWEST WORD ;CONTAINING THE 1ST PACKED TRIAD, THE NEXT ;LOWEST CONTAINING THE 2ND PACKED TRIAD, THE ;NEXT LOWEST CONTAINING THE VALUE (WHICH FOR ;ASSEMBLER DIRECTIVES IS AN EXTERNAL GLOBAL ;TO BE LINKED TO THE APPROPRIATE PROCESSOR IN ;PAL-11R) AND THE HIGHEST WORD CONTAINING ;THE FLAGS IN THE LOW BYTE AND THE CONTROL ;SECTION ID (WHICH IS ALWAYS 0 FOR PST ;ENTRIES) IN THE HIGH BYTE. ; ;INTERNAL G B v&M v& ********** H% &,&UNDEFINED REFERENCES ,&LOAD MAP SECTION ENTRY ADDRES'S SIZE   4' 4',l ;' ;' y >'*>' ?LOAD MODULE EOM  f'\f'  z'Hz'  '2 ': '+ '. '$ '  $3 .P W ֆ m7 yv6 (vNv*D&.  *D&Z@<V^}.@ < V^l,Nz Z7U<&Nz   ~,D 2 7.7(%  ,w %=w o, w  w w ww @,.  7mw ,Rhwhwwh\*ww~hthwhhw*w\hRhHhw|*w<h: | f'*x" 33 /RT:NAME:PRIORIT'$xY:CALL NO:MAX TIME:STACK SIZE/E FxRTH !*Rx&xx&xx@*vx$@P&xxEE$xEExQM^f*x\Mfyfx\yx@yxU*yNyyjy!* e7' @! @ P %, $$Ћ7 ׭ w+,c d ff"e b wHwF,W"(,v  Cå å$ נA 0  e`  J * ,   Ëנe ee ! e ѐ  @(  , ODT-11R V00q$ 2ABE , ,, *;/\ $G _<^,OWEBP@>SRC-FI!XAS<P PMCFRB ` ~ `  ,: V h zo 7 *|l| 7x t h er 7~  &*l r 7 n ` d ww4 *l7. , .  7  G.l ( " ;w  ~xm < 4 Em^,m( Nyx{xx{ *Dm $j7 7 %7$ 7$ Ћ"*hm7 ׭ $ww , f N` *m 7 {x {xx,md $j %{x{ECT .WORD ASMDIR ; .WORD 127551 ; .BYTE .WORD 076710 .WORD BYTE .WORD ASMDIR ; .WORD 127473 ; .ASECT .WORD 017714 .WORD ASECT .WORD ASMDIR ; .WORD 127473 ; .ASCII .WORD 012061 .WORD ASCII .WORD ASMDIR ; ; ; .WORD 107761 ;WAIT .WORD 076400 .WORD 000001 .WORD SCLAS0 ; .WORD 100014 ;TST .WORD 0 .WORD 005700 .WORD SCLAS1+BYTFLG ; .WORD 077721 ;TRAP .WORD 062000 .WORD 104400 .WORD SCLAS6 ; .WORD 075131 ;SWAB .WORD 006200 .WORD 000300 .f4 WAf" ," ? " f" ,X     ,Bd EUX$d&f -yX$k,f  w &@w&d &, wwwu m ,  P# `0 !  P#"!j. &   y  cq  *&x*j3rC7!&!nm m&*3` % ;&5T*3ѐ X7` P7X7RR H*31 Tr fu*3. pr1 P1 0@ [ *4PW  P  pS&B4= ^ p*b4r Per 2*4h w  r*P (4w,H x*m> e7' @! @ P %#*m $$Ћ7 ׭ wm*nc d ff"e b wHwF(*BnW"(f4 WAf" *fn" ? " f" *nX     *nd EnUnjd&f -r*n  w B~@w&d *n wwwu m *o Fxz `Ro0 y 6WORD SCLAS1 ; .WORD 075012 ;SUB .WORD 0 .WORD 160000 .WORD SCLAS2 ; .WORD 073642 ;SEZ .WORD 0 .WORD 000264 .WORD SCLAS0 ; .WORD 073636 ;SEV .WORD 0 .WORD 000262 .WORD SCLAS0 ; .WORD 073626 ;SEN .WORD 0 .WORD 000270 .WORD SCLAS0 ; .WORD 073613 ;SEC .WORD 0 .WORD 000261 .WORD SCLAS0 ; .WORD 073473 ;SCC .WORD 0 .WORD 000277 .WORD SCLAS0 ; .WORD 073423 ;SBC .WORD 0 .WORD 005600 .WORD SCLAS1+BYTFLG ; .WORD 071663 ;RTS .WORD 0 .WORD 0&!!7  g   4! ! y , !!  .  !!,e &e %ze % R,B" wLe % ܃ ?,f" w,!7 7 !$B, l 7 wbv " Ps  "*e@$ !.@$p r0 P0 *407`&Bcw 728*42w(& r y*5 P wj*85a cccc; nœ**\51U0Pw 7 Twa *5!hrP! e z*5 h222j5,*5f-,%5f25~*5:6>o. & Doy$Hojyy7  g   boy*fo jyy  . *oe &e %ze % *o" wLe % ܃ *o" w,y7 7  v*o l 7 wbv  z P(pe*sssns~sTtptRxx[ĝ\770 , T i"&T( ,w.& 20@p D20 p, A  &DCc  w 2w p,4 w  'Te*4s7  D}Ãɥww f |*Xse P" f&f&~*|s   NΕ*s w Cå å$]*s נA   ,se`  vNt`*t  Ëנe ee *2te ѐ  v@( T*Vt Bmb*zt  -67 e .WORD 0 .WORD 000257 .WORD SCLAS0 ; .WORD 010003 ;BVS .WORD 0 .WORD 102400 .WORD SCLAS4 ; .WORD 007763 ;BVC .WORD 0 .WORD 102000 .WORD SCLAS4 ; .WORD 007520 ;BR .WORD 0 .WORD 000400 .WORD SCLAS4 ; .WORD 007414 ;BPL .WORD 0 .WORD 100000 .WORD SCLAS4 ; .WORD 007265 ;BNE .WORD 0 .WORD 001000 .WORD SCLAS4 ; .WORD 007221 ;BMI .WORD 0 .WORD 100400 .WORD SCLAS4 ; .WORD 007164 ;BLT .WORD 0 .WORD 002400 .WORD SCLAS4 ; .WORD 007157 ;BLO,6PD!7 R%7 $D! R%.Z  0!!!&!M, 7 R%  % R%%K,r  R% ZŘTe\ R%i,7  %Ãɥww f   %,e P" f&f&~o,   NΕS,4 w 7  ',X&w \w wXw w  0|fw |t w 7 wtwhw O  *O l, %_ E e whH ; _ "H ,6  =w F6 / w :( w %  ,2! w * w "w * 7 w ,7w 77  J  ,4w7  ww (b ww ,Xw A B`S*te #0-6*t]7 #0-G*t 6ee ** ue*e&PS*.ue B22e *e*Ru &2e 7! *vu #2-7!e  *ue  !!!!!*u @` 7 B & <1*u LINK-11 V007A PAS .WORD 073300 .WORD 101400 .WORD SCLAS4 ; .WORD 007157 ;BLO .WORD 0 .WORD 103400 .WORD SCLAS4 ; .WORD 007145 ;BLE .WORD 0 .WORD 003400 .WORD SCLAS4 ; .WORD 006774 ;BIT .WORD 0 .WORD 030000 .WORD SCLAS2+BYTFLG ; .WORD 006773 ;BIS .WORD 0 .WORD 050000 .WORD SCLAS2+BYTFLG ; .WORD 006753 ;BIC .WORD 0 .WORD 040000 .WORD SCLAS2+BYTFLG ; .WORD 006711 ;BHIS .WORD 073300 .WORD 103000 .WORD SCLAS4 ; .WORD 006711 ;BHI .WORD 0 .WORD 101000  Cå å$,X נA   q.|e`  v (,  Ëנe ee ,e ѐ  v@( , Bm!,  -67 e,2e #0-6P,V]7 #0-,z 6ee * r%D,| w| 7twrj,whg E 74pwhP Z 4,E t4P 4Iw Y4 4Q,-% w  =w H, 7 4=w e0 4,0w ,w %@w ~k&,Te=w @w Xww,xw=w  w  d,w *vSS 1 PASS 2 # **vZ~~~Vhw2b,NvhNy~7  z*tv7 8 z~~w*vh~~j& d,*vZh H&Bo*v6hwl*hw`hwT*whwphwdhwX/*(w&Ew7xw6*Lwhw*hwhw* .WORD SCLAS4 ; .WORD 006654 ;BGT .WORD 0 .WORD 003000 .WORD SCLAS4 ; .WORD 006635 ;BGE .WORD 0 .WORD 002000 .WORD SCLAS4 ; .WORD 006531 ;BEQ .WORD 0 .WORD 001400 .WORD SCLAS4 ; .WORD 006413 ;BCS .WORD 0 .WORD 103400 .WORD SCLAS4 ; .WORD 006373 ;BCC .WORD 0 .WORD 103000 .WORD SCLAS4 ; .WORD 004512 ;ASR .WORD 0 .WORD 006200 .WORD SCLAS1+BYTFLG ; .WORD 004504 ;ASL .WORD 0 .WORD 006300 .WORD SCLAS1+BYTFLG ; .WORD 003344 ;ADD .WORD ,e*e&P,e B22e *e, &2e 7! q,  #2-7!e ,.e  !!!!!,R @` 7 B & <,v LINK-11 V007A PA|,SS 1 PASS 2 # ,Z.'5'&'Vhw2j.'5'&'.*Ae0w v,w nHBF),w 6- .274,  4,( B:8w ?j,w 7 w 777     w y,,%0 %7E `  13  $3 .P W ֆ m7 yv6 (vNv*D&.  *D&Z@<V^}.pwhwhwwh\*ww~hthwhhw*w\hRhHhw|*w<h: | f'*x" 33 /RT:NAME:PRIORIT'$xY:CALL NO:MAX TIME:STACK SIZE/E FxRTH !*Rx&xx&xx@*vx$@P&xxEE$xEExQM^f*x\Mfyfx\yx@yx0 .WORD 060000 .WORD SCLAS2 ; .WORD 003343 ;ADC .WORD 0 .WORD 005500 .WORD SCLAS1+BYTFLG ; ; ; SYMTBB=.-2 ;HIGHEST ADDRESS OF PST. .END h!'7 "'!'$"('5,7 8"''w"'',,h`'X'j& dp`'X',PZh H&B-,t6hwl*hw`hwT,hwphwdhwX,&Ew7xw6,hw*hwhwJ, @ < V^l,Nz Z7U<&Nz   ~,D 2 7.7(%  ,w %=w o, w  w w ww @,.  7mw ,Rw %/w ,v\ z \pp`  "` c, L eD  !RB !R=U*yNyyjy!*'*>' ?LOAD MODULE EOM  f'\f'  z'Hz'  '2 ': '+ '. '$ ' 1?1 2 p"1 (2 (, 0 w N%w 77 0 ,. w Z e0w ,w ,R w p ,v  Cå å$ נA 0  e`  J * ,   Ëנe ee ! e ѐ  @(  , ODT-11R V00q ND.E  T.PSF OSSREDD ASTHEIG;H   -2=.BBMTSY ;; ;G FLYT+BS1LASC RDWO. 0 50050D OR.W  0D OR.W  DC;A  433300 RDWO. ; S2LASC RDWO. 0 00600D OR.W  0D OR.W  DD;A  443300 RDWO. ; LGTFBY1+ASCLSD OR.W  006300 RDWO. 0 RDWO. L AS; 4 50040D OR.W  ;G FLYT+BS1LASC RDWO. 0 20060D OR.W3R ; .WORD 127473  ; .ASECT .WORD 017714 .WORD ASECT .WORD ASMDIR ; .WORD 127473  ; .ASCII .WORD 012061 .WORD ASCII .WORD ASMDIR ; ; ; .WORD 107761  ;WAIT .WORD 076400 .WORD 000001 .WORD SCLAS0 ; .WORD 100014  ;TST .WORD 0 .WORD 005700 .WORD SCLAS1+BYTFLG ; .WORD 077721  ;TRAP .WORD 062000 .WORD 104400 .WORD SCLAS6 ; .WORD 075131  ;SWAB .WORD 006200 .WORD 000300 .WORD4 ;LINE AVAILABLE FOR TRANSFER? BNE KB.TFB ;YES-GO TO IT. TSTB K.ENFL(R5) ;CHECK FOR END OF DATA. BNE KB.SC ;YES- RTS PC KB.TFB: MOV #K.OUT,R4 ;YES-SET POINTERS MOV #K.BC,R3 MOV #K.DP,R1 ADD R5,R4 ;ADJUST FOR UNIT #. ADD R5,R3 ADD R5,R1 KB.TFH: MOVB @(R4)+,R2 ;GET A CHARACTER INC -(R4) ;ADVANCE POINTER CMPB R2,#15 ;CR? BNE KB.TFC ;NO- DEC (R4)+ ;YES-BACK UP THE POINTER AND MOVB #12,@-(R4) ;CHANGE IT TO A LF. KB.TFC: MOVB R2,@(R1)+ ;GIVE CHARACTER TO REQUESTOR. INC -($ 2ABE , ,, *;/\ $G _<^,OWEBP@>SRC-FI!XAS<P PMCFRB ` ~ `  ,: V h zo  0D OR.W  SR;A  124500 RDWO. ; S4LASC RDWO. 0 00031D OR.W  0D OR.W  CC;B  736300 RDWO. ; S4LASC RDWO. 0 40031D OR.W  0D OR.W  CS;B  136400 RDWO. ; S4LASC RDWO. 0 40010D OR.W  0D OR.W  EQ;B  316500 RDWO. ; S4LASC RDWO. 0 00020D OR.W  0D OR.W  GE;B  356600 RDWO. ; S4LASC RDWO. 0 00030D OR.W  0D OR.W  GT;B  546600 RDWO. ; S4LASC RDWO. 0 00011D OR.W  0D OR.W  HI;B  116700 RDWO. 7 SCLAS1 ; .WORD 075012  ;SUB .WORD 0 .WORD 160000 .WORD SCLAS2 ; .WORD 073642  ;SEZ .WORD 0 .WORD 000264 .WORD SCLAS0 ; .WORD 073636  ;SEV .WORD 0 .WORD 000262 .WORD SCLAS0 ; .WORD 073626  ;SEN .WORD 0 .WORD 000270 .WORD SCLAS0 ; .WORD 073613  ;SEC .WORD 0 .WORD 000261 .WORD SCLAS0 ; .WORD 073473  ;SCC .WORD 0 .WORD 000277 .WORD SCLAS0 ; .WORD 073423  ;SBC .WORD 0 .WORD 0056008R1) ;ADVANCE POINTER CMP (R4),K.IN(R5) ;ALL CHARS GONE? BHIS KB.TFE ; YES- KB.TFD: INC (R3) ;NO - IS REQUEST DONE? BLT KB.TFH ;NO - GO GET ANOTHER CHARACTER. BR KB.TFI ;YES - TAKE COMPLETION EXIT. KB.TFF: CLRB @(R1)+ ;GIVE A NULL TO REQUESTOR INC -(R1) ;ADVANCE POINTER KB.TFE: TSTB K.ENFL(R5) ;END OF DATA FROM KEYBOARD? BNE KB.SC ;YES-GO TERMINATE NOW. INC (R3) ;COUNT THE CHARACTER. BLT KB.TFF ;NOT DONE YET - KB.TFG: MOV #1,K.BC(R5) ;DON'T LEAVE A 0 COUNT JSR PC,KB.RES KNI UCHET FTOE INUTRO; ;C PTS R ERNTOI PHE TUPK AC B -ES;Y R13, RUB S -NO ;4 .+T BL ? AR FOO TNEGO ;SZEB,#R3P CM . FFBUF ONGNIINEG BND ATR;P3 ,R5)(RBP EUB S NTREUR CENWEET BCEENERFFDIM OR;F R31, ROV MR:CWK. ;3 RWSLO;B ;T ESERNT IOFR PT1=;RR CWK.C, PSR J ;# T NI=UR5 ;H IT WLLCA; ERNTOI PHOECF ONDOUARP RA WOR FCKHE C ;; PCS RT S ESPRUP SHOECO ;N) R5F(ESK.B LR C ORATINRMTEO ;N) R5M(TRK.B LR C 4)(R),R3 (OV M S.ERNTOI PFFBUT SERE);R3,(5)(RUF.B KOV M S.ERNTOI PTOS TR PET;GP CRB.,K^; S4LASC RDWO. 0 00031D OR.W  003307 RDWO. S HI;B  116700 RDWO. ; LGTFBY2+ASCLSD OR.W  000004 RDWO. 0 RDWO. C BI; 3 75060D OR.W  ;G FLYT+BS2LASC RDWO. 0 00500D OR.W  0D OR.W  IS;B  736700 RDWO. ; LGTFBY2+ASCLSD OR.W  000003 RDWO. 0 RDWO. T BI; 4 77060D OR.W  ;4 ASCLSD OR.W  003400 RDWO. 0 RDWO. E BL; 5 14070D OR.W  ; 4 ASCLSD OR.W  003410 RDWO. 0 RDWO. O BL; 7 15070D OR.W  ;4 ASCLSD ; .WORD SCLAS1+BYTFLG ; .WORD 071663  ;RTS .WORD 0 .WORD 000200 .WORD SCLAS3 ; .WORD 071651  ;RTI .WORD 0 .WORD 000002 .WORD SCLAS0 ; .WORD 071352  ;ROR .WORD 0 .WORD 006000 .WORD SCLAS1+BYTFLG ; .WORD 071344  ;ROL .WORD 0 .WORD 006100 .WORD SCLAS1+BYTFLG ; .WORD 070533  ;RESET .WORD 021140 .WORD 000005 .WORD SCLAS0 ; .WORD 054750  ;NOP .WORD 0 .WORD 000240<B.TFI: JMP @14(R0) ;COMPLETION EXIT. .IFNZ TK.NOU ; ;NON CONSOLE INPUT OPEN ; TK.OPA: CLR TK ;NOT BUSY JSR PC,TT.GU ;GET UNIT # BR TK.OPC ;JOIN NORMAL OPEN/CLOSE ; ; NON-CONSOLE INPUT CLOSE ; TK.CLA: CLR TK ;NOT BUSY JSR PC,TT.GU ;GET UNIT # BR TK.OPB ;JOIN CONSOLE .ENDC ; ; CONSOLE INPUT OPEN/CLOSE ; KB.OPA: MOV #-2,R5 ;UNIT # TK.OPB: JSR PC,KB.RES CLR K.TRM(R5) ;NO TERMINATOR & CLEAR RUBOUT MODE. TK.OPC: MOV #1,K.OPF(R5) ;SET OPEN FLAG AND CLEAR ECHO SUPPRESS FLAG. PCR JS: ES.RKB ;G LA FSSREPPSUO CH END AAGFLR TONAMIER T ;, RSTEINPOF UF BETES RTOD AN; RSPTF UF BTOS TR PET GTOE INUTROUB;S PCS RT: SXO.KB R3T,OUK. #DD A R4N,.I#KD AD 3 ,RR5V MO S ERNTOI PERFFBUO TRSTEINPOE ATRE;C R45, ROV MP:CRB. K3 RND AR4O NT IRSTEINPOT OUD ANN ITOS ERNTOI PUT P ;. ITEX ;G TFB. KBR R LEAL CTOT ULES RRNTURE ;0)(R161, ROV M NTOU CRDWOO TBCG ININMARET ERNVCO ;1 RSR A UEAL VROZEN-NOA E URNS;I R16, #UB SB:.SKB RNTURE- O ;N SXO.KBT BG ? SSREOGPRN IERSFANTR ;R1),R5C(.BOR.W  001410 RDWO. 0 30730D OR.W  OSBL; 7 15070D OR.W  ;4 ASCLSD OR.W  002400 RDWO. 0 RDWO. T BL; 4 16070D OR.W  ;4 ASCLSD OR.W  000410 RDWO. 0 RDWO. I BM; 1 22070D OR.W  ;4 ASCLSD OR.W  001000 RDWO. 0 RDWO. E BN; 5 26070D OR.W  ;4 ASCLSD OR.W  000010 RDWO. 0 RDWO. L BP; 4 41070D OR.W  ;4 ASCLSD OR.W  000400 RDWO. 0 RDWO. R ;B  207500 RDWO. ; S4LASC RDWO. 0 00021D OR.W  0D OR.W  VC;B  637700 RDWO. ? .WORD SCLAS0 ; .WORD 054117  ;NEG .WORD 0 .WORD 005400 .WORD SCLAS1+BYTFLG ; .WORD 051656  ;MOV .WORD 0 .WORD 010000 .WORD SCLAS2+BYTFLG ; .WORD 040612  ;JSR .WORD 0 .WORD 004000 .WORD SCLAS5 ; .WORD 040230  ;JMP .WORD 0 .WORD 000100 .WORD SCLAS1 ; .WORD 035254  ;IOT .WORD 0 .WORD 000004 .WORD SCLAS0 ; .WORD 035163  ;INC .WORD 0 .WORD 005200 .WORD SCLAS1+BYTFLG CLRB K.ENFL(R5) ;NO END OF DATA MOV #15,R2 ;GET A CR TO PUT INTO ECHO BUFF. .IFNZ TK.NOU CMPB EC(R5),#EBSZ ;ECHO BUFF FULL? BLT TK.OPD ;NO- JMP KB.INR ;YES-SKIP OUTPUT OF CR,LF .ENDC TK.OPD: JMP KB.INI ;GO ECHO CR,LF ; COME HERE IF END OF DATA SEEN. KB.SC: MOV K.BC(R5),R1 ;GET REMAINING BC CLRB K.ENFL(R5) ;CLEAR END OF DATA FLAG. BR KB.SB .IFNZ TK.NOU ;NON CONSOLE CANCEL TT.S: JSR PC,TT.GU ;GET UNIT # BR KB.SA .ENDC ;CONSOLE CANCEL KB.S: MOV #-2,R5 ;UNIT # KB.SA: MOV K>% {"1,010A1w*102222 201T; S4LASC RDWO. 0 40021D OR.W  0D OR.W  VS;B  030001 RDWO. ; S0LASC RDWO. 7 25000D OR.W  0D OR.W  CC;C  731401 RDWO. ; S0LASC RDWO. 1 24000D OR.W  0D OR.W  LC;C  432201 RDWO. ; S0LASC RDWO. 0 25000D OR.W  0D OR.W  LN;C  562201 RDWO. ; LGTFBY1+ASCLSD OR.W  005000 RDWO. 0 RDWO. R CL; 2 26120D OR.W  ;0 ASCLSD OR.W  420200 RDWO. 0 RDWO. V CL; 6 26120D OR.W  ;0 ASCLSD OR.W  440200 RDWO; .WORD 031064  ;HALT .WORD 076400 .WORD 0 .WORD SCLAS0 ; .WORD 020534  ;EMT .WORD 0 .WORD 104000 .WORD SCLAS6 ; .WORD 014713  ;DEC .WORD 0 .WORD 005300 .WORD SCLAS1+BYTFLG ; .WORD 012445  ;COM .WORD 0 .WORD 005100 .WORD SCLAS1+BYTFLG ; .WORD 012412  ;CNZ .WORD 0 .WORD 000254 .WORD SCLAS0 ; .WORD 012330  ;CMP .WORD 0 .WORD 020000 .WORD SCLAS2+BYTFLG ; .WORD 012272  ;CLZ .WORD 0 . QAMvaAFp~Duj?8 ~`d(wHOQ߭_ dYhp&(UrM`Çl ,XM48SЦ7}eDbPTYpˣt=0Q`s|$@5 KPDFyKXY:MOIL78{D{2;O<P|"Y[\ <^c3)LJ^]`{5=t\CTYK!9p M|Cnex[&?0YR]vm'gi$d0iaxؘn\5wMvLdO@`p;$8LFnG@#6e)?,Zm*9 6(ȳ'=1)>ӹP