; UPDATE 24 JUN 74 CEQU.S00 ; UPDATE 20 JUN 74 ROS3.DAP ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 1 ;1 = 11/45 0 = NOT 11/45 $1125 = 0 ;1 = 11/25 0 = NOT 11/25 $1140 = $1125 ; 6/15/73 $1120 = 0 ;1 = 11020 OR LESS (11/05, ETC.) $KT11C = 1 ;1 = KT11C SEGMENTATION ; UPDATE SYSMAC.S07 10-JUN-74 ; UPDATE SYSMAC.S06 09 JUN 74 .TITLE MACT ; PROGRAMMER 67 .MACRO ERPR LST,CLER .IF NB CLER JMP CLER ; GO TO ERROR PROCESSOR .IFF #; ERROR PROCESS MUST BE SPECIFIED .ENDC .ENDM ERPR .MACRO ERRM CLER .IF NB CLER JMP CLER .IFF #; ERROR LOCATION MUST BE SPECIFIED .ENDC .ENDM ERRM .MACRO SPM$ LST .LIST MEB .IF NB LST MOV #LST,-(SP) ; PLACE ON STACK .IFF #; PARAMETER IS REQUIRED .ENDC .ENDM SPM$  .TITLE MACT ; PROGRAMMER 67 ; E M T EQUATES QTME$ = 113 DQTE$ = QTME$ + 1 QSKE$ = DQTE$ + 1 DQSE$ = QSKE$ + 1 OPNE$ = 101 CLSE$ = OPNE$ + 1 INPE$ = CLSE$ + 1 OUTE$ = INPE$ + 1 REWE$ = OUTE$ + 1 FSRE$ = REWE$ + 1 BSRE$ = FSRE$ + 1 FSFE$ = BSRE$ + 1 BSFE$ = FSFE$ + 1 EOFE$ = BSFE$ + 1 ; I/O CONTROL LIST OFFSET EQUATES $LUN = 4 ; LOGICAL DEVICE NUMBER, FILE NUMBER OR NAME $BLU = $LUN >>lz z l1UUDPw whw w w w.1(&77 mE /47 ( |j, /|7 xe^%AX-R 7?7: ^ r //"1 H" 7 7A /Mv E`VE0]7C݄tb ~j/~rJer/nb5^PVT-FN5@e0E* 22/ , 3// 3/ zEA<4w@ 3/5 w  z2/e  F2/w \ 5 3/5 3//XTwNJwNFDH@DEN4* A `%e      ffw 64w 64 Eww<4 /w3+43+43+44+44+4 BLOCK NOT FOUND RETRY LIMIT DRIVE DROPPED BLOCK MISSED DATA LATE DT1 B148 00148  @ss @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA .NLIST MEB .WORD 0 ; CURR REC # .WORD 0 ; CURR REC LENGTH .WORD 0 ; PREV REC # .WORD 0 ; PREV REC LENGTH .WORD 0 ; NEXT REC # .WORD 0 ; NEXT REC LENGTH .ENDM DCLF$ .PAGE .MACRO DCM$ DCL,LUN,BLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA HDR$ DCL .WORD 0 ; CALLING TASK # WRD$ LUN .BYTE PRIP ; PRIORITY .BYTE EXTYP ; EXIT TYPE .WORD 0 ; ERROR WORD .WORD NRESL ; NORMAL RESUME .WORD ERESL ; ERROR RESUME .WORD BLUN ; BACKUP LUN .BYTE AC[ ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.0bLP$,ERPR .LIST MEB SLP$ NRES,IOCL,$NR SLP$ ERES,IOCL,$ER MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT CLSE$ ERPR IOCL,CLER .NLIST MEB .ENDM CLS$ .PAGE ; INPUT CALL MACRO FOR ROS3.1 .MACRO INP$ IOCL,CLER,LUN,BLUN,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .MCALL SLP$,SLH$,ERPR .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ BLUN,IOCL,$BLU SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLP$ NWD,IOCL,$NW SLP$ BUF,IOCL,$BUF SLH$ EXT,IOCL,$EX SLH$ MOD,IOCL,$MOD SLH$ PRI,IOCc.REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 1 ; 0 FOR PEC, 1 FOR DATUM MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERRjREC,IOCL,$REC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT OUTE$ ERPR IOCL,CLER .NLIST MEB .ENDM OUT$ .PAGE ; I/O MACRO CALL .MACRO IOM$ IOCL,CLER,LUN,ERES,NRES,FCT .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLH$ FCT,IOCL,$FCT MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT IOE$ ERPR IOCL,CLER .NLIST MEB .ENDM IOM$ .PAGE .MACRO REW$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NkR RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 rNDM FSF$ .PAGE ; BACK SPACE FILE CALL MACRO .MACRO BSF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,BSFE$ .ENDM BSF$ .PAGE ; WRITE END OF FILE CALL MACRO .MACRO EOF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,EOFE$ .ENDM EOF$ .PAGE ; CREATE FILE MACRO .MACRO CF$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT Q$ ERPR LST,CLER .NLIST MEB .ENDM CF$ .PAGE ; DELETE FILE MACRO s 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 z BINARY MACRO .MACRO ASCB$ ASCB,BVAL,ERES .MCALL SPM$,SRS$,ERRM SPM$ ASCB EMT ATBE$ SRS$ BVAL ERRM ERES .NLIST MEB .ENDM ASCB$ .PAGE ; CONVERT ASCII TO RAD50 .MACRO ASCR$ ASCB,RADB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT ASRE$ .NLIST MEB .ENDM ASCR$ .PAGE ; CONVERT RAD50 TO ASCII .MACRO RASC$ RADB,ASCB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT RACE$ .NLIST MEB .ENDM RASC$ .PAGE ; GET DATE .MACRO DATE$ YADR,MADR,DADR .MCALL SRS$ { .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS   INP$ CRIOCL,CRECAL ; DAP DIP: NOP ASDF: NOP CRERS: NOP CRECAL: HALT ; DAP .END ;CLOSE .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 LG ; AND TASK FLAG 2/8/73 MOV ARG,R0 ; PICK UP THE PASSED ARGUMENT. S21 MOVB R0,FLTYPE ; SAVE FILE TYPE (SIGN BIT NOT USED) 2/8/73 BPL FLIA10 ; GO LIST THE REQUIRED FILE TYPES.(FL,N)2/8/73 CLR FLTYPE ; SET FOR ALL FILE TYPES 2/8/73 BIC #177600,R0 ; CLEAR JUNK OUT 2/8/73 BNE 10$ ; BRANCH IT T OR .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (A=1) .WORD 0,0 ; OPTIONAL (F=1) .WORD MTTIM ; OPTIONAL (J=1) .WORD 0 ; OPTIONAL (T=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV  20$: DEC R0 ; IS IT A T? 2/8/73 BGT FLIEXT ; NO - THERE FORE ILLEGAL 2/8/73 INC TSKFLG ; IT'S A T 2/8/73 JMP FLTA00 ; GO DO IT. 2/8/73 FLIA10: ; 2/8/73 JSR PC,ROSHDR ; PRINT ROS FILE LIST HEADER MOV FLTYPE,R0 ; GET ARGUMENTMTERR ;RETURN IF NOT 4 ; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,#3 BGT MTERR ; BR IF .GT. 3 ; IS THE LOGICAL DEVICE NUMBER 0 OR1 MOV #5,R4 MOVB DEVNUM(R0),R1 ;PLACE DEVICE NUMBER IN R1 BLT MTERR ;RETURN IF NEGATIVE CMP R1,#MTDVLM ;IS THE DEVICE NUM CMP #9.,DERRWD ; FINISHED FILE? BEQ FLIB00 TST DERRWD ; DISC ERROR? BNE FLIB20 ; YES REPORT MOV #BUFFER,R2 ; START BUFFER ADDRESS MOV #120.,R3 ; LENGTH OF SCAN OR SEARCH .ENDC .IFZ DRESDI FLIA40: MOV FILE,R2 ; GET ADDRESS OF START OF CORE DIRECTORY MOV #NCRLOC-$ROSFW-$ROSFW,R3 ; LENGTH OF SCAN OR SEARCH .ENDC ADD R2,R3 MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT  FLIA50 ; NO .IFNZ DRESDI INC RLSECT ; READ NEXT SECTOR BR FLIA30 .ENDC .IFZ DRESDI BR FLIB10 ; DONE .ENDC ; ; .IFNZ DRESDI FLIB00 = . TST FLTYPE ; DO THEM ALL? BNE FLIB10 ; NO-FINISHED ADD #10.,R1 ; BUMP TO NEXT DOD CMP (R1),#NDISCS ; DONE ALL OF THEM? ; +4*$KT11C(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@RS ; ; SYMBOL DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 20. ; MAX NO. OF OBJECT MODULES TO BE ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. PHDSZE = 28.*$KT11C+30. ; NO. LOCATIONS OF PARTION HEADER 6/15/73 .ENDC ; FILE IDS FOR SYINTERS IN SYSTEM $DIVA = 1 ; TYPE OF LINE PRINTER(S) 4/8/73 ; = 0 IF PERDATA 4/8/73 ; = 1 IF DIVA 4/8/73 NLPRTY = 1 ; NUMBER OF LINE PRINTER PRIORITES LPBACK = 1 ; ALLOW LP BACKUP TO TTY IF = 1. LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS GE2/8/73 JSR PC,PRINT ; 2/8/73 MOV #NOBTCH,PRTBUF ; 2/8/73 JSR PC,PRINT ; 2/8/73 JMP FLIEXT ; AND EXIT 2/8/73 .IFT ; 2/8/73 ; ; PRINT BATCH ELEMENT HEADER AND SET UP PAGE CONTROL ; BTCHDR = . .IFNFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE COMMAND BR MWRI3 MWRI2: BIS #WEXXTASK + $RASNO ; 6/15/73 $TKCFL = $SYSFL + $RESFL - MXTASK + $TKCNO ; 6/15/73 $PCHFL = $SYSFL + $RESFL - MXTASK + $PCHNO ; 6/15/73 $BFPFL = $SYSFL + $RESFL - MXTASK + $BFPNO ; 6/15/73 ; .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ;NO. OF TELETYPES ;IN SYSTEM SYS ** ;* SEGMENT REGISTER ADDRESSES REQUIRED BY THE PROGRAMS WHEN ** ;* IMPLEMENTED ON AN 11/45 OR 11/25, EITHER WITH SEGMENTATION. ** ;* ** .IFNZ $KT11C .IRP ARG,<0,1,2,3,4,5,6,7> $KPDR'ARG = 172300 + $KPAR'ARG = 172340 + $UPDR'ARG = 177600 + $UPAR'ARG = 177640 + .ENDR .ENDC .PAGE ; ; ; ; MA RTS PC ; ; ; TWO DIGIT ASCII NO. TO BUFFER ; R1 = BINARY NUMBER ; R3 = TWO DIGIT ASCII ADDRESS ; TOBUFR = . MOV R1,-(SP) MOV #ASCII,-(SP) EMT BINASC MOVB ASCII+4,(R3)+ MOVB ASCII+5,(R3)+ RTS PC ; ; ; LIST BATCH FILE ELEMENTS ; FLBA00 = . JSR PC,BTCHDR ; PRINT BATCH FILE ELEMENT HEADER MOV #$BCHID,DODID ; ID TO USE FOR BATC ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE ; M A G N E T I C T A P E W R I T E F I L E M A R K ; MWEOF: JSR  ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS ; .IFZ $1145 BISB #340,@#PS .ENDC .IFNZ $1145 SPL 7 .ENDC .NLIST MEB .ENDM .LOCK ; ; MACRO TO SIMULATE A 'SOB' INSTRUCTION IF NOT ON A /40 OR A /45. ; .IF Z $1140!$1145 ; .MACRO SOB REG,ADD ; .LIST MEB ; 10/8/73 DEC REG ; BNE ADD ; .NLIST MEB ; BUMP TO ELEMENT DIRECTORY FLBA16: CMP R2,#BUFFER+128. ; DONE WITH THIS BUFFER? BLT FLBB00 ; NO INC RLSECT ; YES/BUMP RELATIVE SECTOR CMP #31.,RLSECT ; SEARCHED COMPLETE BFUP DIRECTORY BGE FLBA10 ; NO-KEEP GOING FLBA17: JMP FLIEXT ; YES - EXIT FROM FLIST 2/8/73 FLBA20: MOV #BCHERR,PRTBUF JSR PC,PRINT ; PRINT ERROR MESSAGE BR FLBA17 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#34600 BNE  ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 013 ; CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE ASR37 = 0 ; MOV (SP)+,@#$KPAR5 .ENDC .NLIST MEB .ENDM RST.56 ; ; ********************************************************************** ; ROS3.DAP ADDITIONS ; DRIVER KTASK NUMBERS $CONO = MXTASK+16 ;CONSOLE OUTPUT TSK NO $CINO = $CONO+1 ;CONSOLE INPUT TSK NO $DCNO = $CINO+1 ;DISC TASK NO $MTNO = $DCNO+1 ;MAG TAPE TSK NO $LPNO = $MTNO+1 $DGNO = $LPNO+1 $DANO = $DGNO+1 $CRNO S TWO ASL R1 ; TIMES FOUR ADD R1,R1 ; TIMES EIGHT MOV BETPTB(R1),BETYPE TST (R1)+ MOV BETPTB(R1),BETYPE+2 ; PUT IN ELEMENT TYHPE TST (R1)+ MOV BETPTB(R1),BETYPE+4 TST (R1)+ MOV BETPTB(R1),BETYPE+6 MOVB STATUS(R2),R1 ; GET STATUS BPL FLBB10 NEG R1 ; SET POSITIVE INC R1 ; BUMP TO MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2NTATION. ** ;* ** .IFNZ $KT11C ;* ;* K E R N E L S E G M E N T R E G I S T E R S ;* $KPAR0 = 772340 ; $KPAR1 = 772342 ; $KPAR2 = 772344 ;KERNEL $KPAR3 = 772346 ; PAGE $KPAR4 = 772350 ; ADDRESS $KPAR5 = 772352 ; REGISTERS $KPAR6 = 772354 ; $KPAR7 = 772356 ; $CTVPS = $CTVPC + 2 ; P S VALUE TO STORE INTO INTERRUPT VECTOR $CTEND = $CTVPS ; END OF BUFFER VALUE $CTREQ = $CTVPS + 2 ; COUNT OF REQUESTS PENDING $CTOPT = $CTREQ + 1 ; STATUS BYTE $CTUNA = $CTOPT + 1 ; FIRST CURRENT DEVICE ENTRY IN UNIT TABLE $CTSP0 = $CTUNA + 2 ; SPARE WORDS $CTSP1 = $CTSP0 + 2 ; SPARE WORDS $CTSP2 = $CTSP1 + 2 ; SPARE WORDS $CTSP3 = $CTSP2 + 2 ; SPARE WORDS  MOV R1,R3 ASL R1 ADD R3,R1 ; TIMES THREE MOVB MNTHTB(R1),DATE2 TSTB (R1)+ MOVB MNTHTB(R1),DATE2+1 ; PUT IN MONTH TSTB (R1)+ MOVB MNTHTB(R1),DATE2+2 MOVB BYEAR(R2),R1 ; GET BINARY YEAR MOV #DATE3,R3 JSR PC,TOBUFR MOVB BHOUR(R2),R1 ; GET BINARY HOUR MOV #TIM1,R3 JSR PC,TOBUFR MOVB BMIN(R2),R1  BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 ; OR IN SPACE COMMAND MSPRC1: MOV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER  777644 ;USER $UPAR3 = 777646 ; PAGE $UPAR4 = 777650 ; ADDRESS $UPAR5 = 777652 ; REGISTERS $UPAR6 = 777654 ; $UPAR7 = 777656 ; ; $UPDR0 = 777600 ; $UPDR1 = 777602 ; $UPDR2 = 777604 ;USER $UPDR3 = 777606 ; PAGE $UPDR4 = 777610 ; DESCRIPTOR $UPDR5 = 777612 ; $GTTSK = $GTCNO + 1 ; DRIVER TASK NUMBER $GTOPT = $GTTSK+2 $GTCN0 = $GTOPT+2 $GTSP0 = $GTCN0 $GTSP1 = $GTSP0 + 2 ; SPARE WORDS $GTSP2 = $GTSP1 + 2 ; SPARE WORDS $GTSP3 = $GTSP2 + 2 ; SPARE WORDS $GTSP4 = $GTSP3 + 2 ; SPARE WORDS $GTSP5 = $GTSP4 + 2 ; SPARE WORDS $GTSP6 = $GTSP5 + 2 ; SPARE WORDS ; UNITAB EQUATES $UNTLS = 0 ; THREADWORD OF THE TIMER LIST $UNRSO = $UNTLS + 1  ; .ENDC .PAGE ; 2/8/73 ; LIST THE TASK TABELS HERE (FL,T) 2/8/73 ; 2/8/73 FLTA00: ; 2/8/73 MOV #EJECT,PRTBUF ; TELL THE GUY THAT THIS ISN'T HERE YET.2/8/73 JSR PC,PRINT ; 2/8/73 M ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC D R E A D E R E Q U A T E S ** ;* ** ;********************************************************************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 0 ; SWITCH CR TO TTY IF =1 11/6/73 INEBC = 0 ICAL UNIT ASSIGNED $UNCTB = $UNBLU + 2 ; CONTAB POINTER $UNOWN = $UNCTB + 2 ; TASK NUMBER OF THE OWNER $UNFTN = $UNOWN + 2 ; FORTRAN PARAMETER $UNOPF = $UNFTN + 2 ; S V A POINTING TO THE NEXT OPEN REQUEST $UNOF5 = $UNOPF + 2 ; ASSOCIATED KPAR5 $UNOPL = $UNOF5 + 2 ; S V A POINTING TO THE LAST OPEN REQUEST $UNOL5 = $UNOPL + 2 ; ASSOCIATED KPAR5 $UNRSF = $UNOL5 + 2 ; S V A POINTING TO THE NEXT RESER ; 2/8/73 .PAGE ; S20 ; ; CDSRCH WILL PERFORM A CORE DIRECTORY SEARCH FOR ; THE FILE ID FOUND IN R0. IF R0=0, THEN IT WILL ; SEARCH FOR AN AVAILABLE ENTRY. ; R0= FILE ID ; R1 = DEVICE NO. ; UPON RETURN: ; R3= ADDRESS OF ENTRY IF FOUND ; = 0, ENTRY NOT FOUND ; R4 = IFD OF ENTRY IF FOUND ;  .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIST JSR PC,MTINIT BPL MURE2 BIC #100,R3 ONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; NCU+2 $UNSP1 = $UNSP0 + 2 ; SPARE WORDS $UNSP2 = $UNSP1 + 2 ; SPARE WORDS $UNSP3 = $UNSP2 + 2 ; SPARE WORDS $UNSP4 = $UNSP3 + 2 ; SPARE WORDS $UNSP5 = $UNSP4 + 2 ; SPARE WORDS $UNSP6 = $UNSP5 + 2 ; SPARE WORDS ; BIT POSITION EQUATES IN $UNOPT (WORD) $UNRAS = 1 $UNSHR = 2 $UNAVL = 4 $UNASN = 10 $UNTIM = 20 $UNRES = 40 $UNBSY = 100 $UNREW = 200 $UNDS1 = 400 $UNDS2 = 1000 $UNINT = 2000 $UNRSV =  BNE CDSR10 ; TRY AGAIN CLR R3 ; SET NOT FOUND RTS PC ; RETURN CDSR30: TST R0 ; SEARCHING FOR AVAILABLE ENTRY? BEQ CDSR40 ; YES MOVB PDVCE(R3),R5 ; ; NO- GET LOG. DEVICE OF FILE BIC #177600,R5 ; ISOLATE CMPB R5,PDVCE(R1) ; DEVICE SAME? BNE CDSR20 ; NO-KEEP LOOKING CDSR40: NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #1400,@#MTCOMM ;CLEAR TAPE UNIT NUMBER BIC R3,@#MTCOMM ;SET UNIT NUMBER BIT #2,@#MTSTAT ;TEST TAPE UNIT REWINDING BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ADD #400,R3 ;INC UNIT NUMBER TST R1 ;HAVE ALL UNIT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 IN! = 26 $RET = 24 $IOCLN = 50 $EXWAT = 1 $AMOD = 1 $BMOD = 2 $FINP = 0 ;INPUT I/O REQUEST FUNCTION CODE $PRIOR = NPRIOR $OPT = $UOPT+1 $EXRES = 2 $EXS = 2 ;WAIT TYPE I/O EXIT VALUE $EXNS = 3 ; NON-SEQUENTIAL I/O EXIT W/ RESUMES $EXNSN = 1 ;NON-SEQUENTIAL I/O EXIT (NORESUMES) $UNSP = 16 ;STACK POSITION UNSPND LOCATION $LSER = 1 ;CALL PARAMETER LIST ERROR NUMBER ".NLIST MEB .ENDM QUE$ QUE$ LSQ,CLQ .PAGE ; RESL$ RESUME TASK LIST MACRO ; RESUME LIST MACRO .MACRO RESL$ LST,PROC,NN,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6 .BOUND .LIST MEB LST: .WORD 1 ; THREAD WORD .IF NB TSKN .WORD TSKN ; NUMBER OF TASK TO BE RESUMED .IFF # ; TASK NUMBER MUST BE SPECIFIED .ENDC .IF NB PROC .WORD PROC # #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#& ; ERROR RETURN IF NO MORE CORE BLOCKS .IFF # ; ERROR RETURN MUST BE SPECIFIED .ENDC .IF GT NN .WORD NN ; NUMBER OF ARGUMENTS PASSED .IF NB ARG1 .WORD ARG1 ; POINTER TO FIRST ARGUMENT .IF NB ARG2 .WORD ARG2 ; POINTER TO SECOND ARGUMENT .IF NB ARG3 .WORD ARG3 .IF NB ARG4 .WORD ARG4 .IF NB ARG5 .WORD ARG5 .IF 'MTSTAT,R1 ;LOAD WITH BYTE SIGN EXTENDED .IFNZ DATUM ASH #11,R1 .ENDC BPL MTIN2 ; BRANCH IF READY BIT WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVI( PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 0 ; SWITCH LP TO TTY IF = 1 11/6/7O LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.)AND IOCL COMMON EQUATES $TW = 0 ; THREAD WORD S V A $TWKP5 = $TW + 2 ; THREAD WORD KPAR5 $CT = $TWKP5 + 2 ; CALLING TASK $LUN = $CT + 2 ; LOGICAL UNIT NUMBER IN DCL $DCL = $CT + 2 ; TASK VIRTUAL ADDRESS IN IOCL $PRI = $DCL + 2 ; I/O CALL PRIORITY $EX = $PRI + 1 ; EXIT TYPE $ERW1 = $EX + 1 ; ERROR TYPE $NR = $ERW1 + 2 ; POINTER TO NORMAL RE*NB ARG6 .WORD ARG6 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .NLIST MEB .ENDM RESL$ RESL$ LSR,42,ERR,3,ARR1,ARR2,ARR3 ERR: NOP ARR1: .WORD 10 ARR2: .WORD 20 ARR3: .WORD 30 .PAGE ; R$ RESUME TASK MACRO FOR METHOD 1 & 2 ; R$ MACRO MMACRO R$ CLER .LIST MEB EMT R$ TST (SP)+ .I+RT(R0),-(SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GE   &0w D@&w 0G0vw@f z Pw5z z jw|-j( - albYYVE%EI:7;w/-,e-5- X*pede^  eN-JLe:e4 7 (7 &7 $$.( $    - !7  ^w XZ|z  &w   Х0  fBe<dbIw"nhrei fI81  EeI q  BE `I E efqq    e 7? \ 75jd7-^ZwvRR-NH B@b( 5Emm 70vm7 @` R5BbZzR5@` 0 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;1CORD FIRST BLOCK NUMBER $CRL = $CBN + 2 ; CURRENT RECORD LENGTH $PBN = $CRL + 2 ; PREVIOUS RECORD FIRST BLOCK NUMBER $PRL = $PBN + 2 ; PREVIOUS RECORD LENGTH $NBN = $PRL + 2 ; NEXT RECORD FIRST BLOCK NUMBER $NRL = $NBN + 2 ; NEXT RECORD LENGTH $UOPT = $NRL + 2 ;USER OPTIONS $SFLAG = $UOPT + 1 ;SYSTEM FLAGS ; ICOL EQUATES $MOD = $ER + 2 ; MODE OF TRANSFER $FUN 2V (SP)+,LST+10 BEQ .+4 .IF NB CLER JMP CLER .IFF # ; CALL ERROR RETURN LOCATION MUST BE SPECIFIED .ENDC .NLIST MEB .ENDM RES$ RES$ LSR,CLR .PAGE ; SUS$ TASK SUSPEND MACRO SUS$ ; UNS$ TASK UNSUSPEND MACRO UNS$ TSK,RTN,ERR ; EXT$ TASK EXIT MACRO .PAGE ; TML$ TIMER LIST MACRO ; TIMER LIST MACRO .3 DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MO6MACRO TML$ LIST,SOPT,ARGU,FLAG,MASK,JSRA,TSKN .LIST MEB TEMP$ = 0 .BOUND .IF NB LIST LIST: .WORD 1 ; THREAD WORD .WORD 0,0,0 ;RESERVED FOR SYSTEM .IF NB SOPT TEMP$ = TEMP$ + 100000 .ENDC .IF NB ARGU TEMP$ = TEMP$ + 40000 .ENDC .IF NB FLAG TEMP$ = TEMP$ + 20000 .ENDC .IF NB JSRA TEMP$ = TEMP$ + 10000 .ENDV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END 8 .PAGE ; ; ; ; MACRO DEF. FOR QUEUES ; .MACRO .QUE A,B,C .BOUND .LIST ME A = .-4 B = .-2 .REPT C .WORD 0 .IFZ $KT11C .WORD .-2 ; NOTE: PPA WHEN RESOLVED BY IPL .ENDC .IFNZ $KT11C .PACK .-2 .ENDC .ENDR .NLIST ME .ENDM ; ; MACRO TO SET PRIORITY LEVEL 7 ; .MACRO .LOCK PSR =9$SVBF + 2 ; KPAR6 OF DATA BUFFER $ALUN = $KP6 + 2 ;ACTIVE LOGICAL UNIT $RDD = $ALUN + 2 ; RESERVED FOR DISC DRIVER $UOPT = $NRL + 2 ;USER OPTIONS $SFLAG = $UOPT + 1 ;SYSTEM FLAGS $IOCLN = 50 ; TOTAL BYTES IN IOCL S02 $EXNSN = 1 ;NON-SEQUENTIAL I/O EXIT (NORESUMES) $EXS = 2 ;WAIT TYPE I/O EXIT VALUE $EXNS = 3 ; NON-SEQUENTIAL I/O EXIT :C .IF NB TSKN TEMP$ = TEMP$ + 4000 .WORD TEMP$ ; OPTION .ENDC .IF NB SOPT .ENDC .IF NB ARGU .WORD ARGU .ENDC .IF NB FLAG .WORD FLAG .WORD MASK .WORD 0,0 ;RESERVED FOR SYSTEM .ENDC .IF NB JSRA .WORD JSRA ; ADDRESS OF SUBROUTINE TO BE EXECUTED .ENDC .IF NB TSKN .WORD TSKN ;; UPDATE 3 AUG 73 TSBFUP.S03 ; TSBFUP.S02 20-JUN-73 ; TSBFUP.S01 18-JUN-73 ; TSBFUP.S00 12-JUN-73 ; UPDATE 14 MAY 73 BFUP.S07 .TITLE TSBFUP BATCH FILE UTILITY PROCESSOR TASK .ENABLE CDR ; BFUP ;***********************************************************************BFUP ; *BFUP> .ENDC .IFF # ; THE LIST SYMBOL MUST BE DEFINED .ENDC .NLIST MEB .ENDM TML$ S1: TML$ LS1,S,120,460,1243,TG1,45 .PAGE ; QTM$ QUEUE TIMER MACRO ; QUEUE TIMER MACRO .MACRO QTM$ LIST,TMUL,ERR .LIST MEB .IF NB LIST MOV #LIST,-(SP) ; PLACE LIST ADDRESS ON STACK .IFF # ; LIST ADDRESS MUST BE SPECIFIED .ENDC .IF NB TMUL ? ; B F U P *BFUP ; *BFUP ; PROGRAM IDENTIFICATION: BFUP - BATCH FILE UTILITY PROCESSOR *BFUP ; *BFUP ; PURPOSE: THIS SERIES OF ROUTINES ALLOWS A USER TO MANIPULATE *BFUP ; A BATCH FILE AND ITS ELEMENTS. THE FUNCTIONS *BFUP ; PROVIDED ARE: @; TSKNTR.S08 2-AUG-73 ; TSKNTR.S07 ; TSKNTR.SO6 18-JUL-73 ; TSKNTR.S05 16-JUL-73 ; TSKNTR.S04 13-JUL-73 ; TSKNTR.S03 12-JUL-73 ; TSKNTR.S02 10-JUL-73 ;************************************************************************ ;* * ;* T A S K E N T E R * ;* A S02 $BMOD = 2 ; BINARY MODE S02 $VMOD = 3 ; VERBATIM MODE S02 $CMOD = 4 ; CMAI INHIBIT MODE S02 ; QUEUE LIST EQUATES - (DCL) INDICATES SAME AS DCL AND IOCL S02 ; $TW THREAD WORD PPA (DCL) S02 $TSKNO = $TW + 6 ; CALLED TASK'S NUMBER S02 ; $PRI B MOV #TMUL,-(SP) ; PLACE TIMER MULTIPLE ON STACK .IFF # ; THE TIMER MULTIPLE AND RESET VALUE WORD MUST BE SPECIFIED .ENDC EMT QTME$ TST (SP)+ ; TEST FOR ERROR .IF NB ERR BNE ERR ; BRANCH TO ERROR PROCESSOR .IFF # ; ERROR BRANCH LOCATION MUST BE SPECIFIED .ENDC .NLIST MEB .ENDM QTM$ S3: QTM$ LS1,22,ER1 TG1: NOP ER1: NOP ER2: C *BFUP ; BFINIT - INITIALIZE A ROS FILE FOR BFUP USE *BFUP ; BFENTR - ENTER A NEW ELEMENT IN THE BFUP *BFUP ; DIRECTORY AND PREPARE IT FOR CREATION *BFUP ; BFOPEN - MARK AN EXISTING ELEMENT AS BEING READ*BFUP ; AND RETRIEVE THE LOCATION AND LENGTH *BFUP ; BFCLOS - FREE AN OPEN ELEMENT *BFUP ; F NOP .PAGE ; DQT$ DEQUEUE TIMER MACRO ; DEQUEUE TIMER MACRO .MACRO DQT$ LIST,ERR .LIST MEB .IF NB LIST MOV #LIST,-(SP) ; PLACE LIST ADDRESS ON STACK .IFF # ; LIST ADDRESS MUST BE SPECIFIED .ENDC EMT DQTE$ TST (SP)+ ; TEST FOR ERROR .IF NB ERR BNE ERR ; BRANCH TO ERROR PROCESSOR .IFF # ; ERROR BRANCH LOCG UPDATE DIRECTORY ENTRY IF ELEMENT IS *BFUP ; BEING CREATED *BFUP ; BFDELT - MARK AN EXISTING ELEMENT FOR DELETION *BFUP ; *BFUP ; METHOD: THE METHOD USED IS TO USE THREE TYPES OF TABLES. *BFUP ; THESE ARE: *BFUP ; 1) BFUP COMMUNICATIONS BLH * ;* 1 MAXIMUM TASK RUN TIME * ;* 2 TPDR7 & TPAR7 SET TO THE DEVICE PAGE * ;* * ;* AN EXAMPLE OF AN INPUT CARD IS * ;* ACC=BCH; DEV; NAM=LDFILE; PRI=2; TIM=180; TSK=12;END; * ;* THE 'END;' COMMAND MUST BE THE LAST COMMAND * ;* THE IECEIVE S02 $SB = $N2 + 1 ; POINTER TO SENDING BUFFER S02 $RB = $SB + 2 ; POINTER TO RECEIVING BUFFER S02 $W1 = $RB + 2 ; RESERVED FOR ROS S02 $W2 = $W1 + 2 ; RESERVED FOR ROS S02 ; LOGICAL UNIT NUMBER EQUATES (LUNTAB $CO00 = 1 ; SYSTEM TTY PRINTER $CI00 = $CO00 + 1 ; SYSTEM TTY KEYBOARD S0JATION MUST BE SPECIFIED .ENDC .NLIST MEB .ENDM DQT$ S4: DQT$ LS1,ER1 .PAGE ; SKL$ SCHEDULER LIST MACRO ; SCHEDULER LIST MACRO .MACRO SKL$ LIST,SOPT,XOPT,TSKN,STD,STH,STM,DED,DEH,DEM,ARGE,FLAG,MASK .LIST MEB TEMP$ = 0 .BOUND .IF NB LIST LIST: .WORD 1 ; THREAD WORD .WORD 0,0,0 ;RESERVED FOR SYSTEM .BYTE 0 .IF NB ARGE TEMP$ KOCK WHICH CONTAINS ALL *BFUP ; COMMUNICATION BETWEEN BFUP AND THE USER. IT IS*BFUP ; PROVIDED BY THE USER. *BFUP ; WORD 0 STATUS CODE OF OPERATION *BFUP ; WORD 1 ID OF ROS FILE TO USE *BFUP ; WORD 2&3 ELEMENT NAME IN RAD50 (6 CHARS)*BFUP ; WORD 4 BYTE 0 RESERVED FOR BFUP USE *BFUP ; OTHER COMMANDS MAY BE IN ANY ORDER AND ON MORE THAN ONE CARD* ;************************************************************************ .REF PPTAB,TPRTY,TSTAT,IOSTAT,IFD,HEADER,TASKS,$TKFLS ; THE SWITCH REGISTER MUST BE SET AS FOLLOWS ; BATCH TASK = 0 ; BACKGROUND TASK = 1 ; FOREGROUND OR SYSTEM = 2 ; THE ABOVE ARE ONLY TEMPORARY UNTIL KEY SWITCHES ARE INSTALLED ; ; ; ROSLNK ERROR CODES SET IN R3 BEFORE GOING TO RLKER ; ; M2 $DC00 = $CI00 + 1 ; SYSTEM DISK S02 $MT00 = $DC00 + 1 ; WANGCO MAG TAPE UNIT 0 S02 $MT01 = $MT00 + 1 ; WANGCO MAG TAPE UNIT 1 S02 $LP00 = $MT01 + 1 ; LV11/LF11 LINE PRINTER S02 $CR00 = $LP00 + 1 ; CARD READER S02 $LP10 = $CR00 + 1 ; TALLY LINE PRINTER 1 S02 $LP20 = $LP10 + 1 ; TALLN = TEMP$ + 200 .ENDC .IF NB FLAG TEMP$ = TEMP$ + 100 .ENDC .IF NB SOPT TEMP$ = TEMP$ + 40 .ENDC .IF NB XOPT TEMP$ = TEMP$ + 20 .ENDC .BYTE TEMP$ .WORD TSKN .WORD STD*4000+STH*100+STM .WORD DED*4000+DEH*100+DEM .IF NB ARGE .WORD ARGE .ENDC .IF NB FLAG .WORD FLAG .WORD MASK .WORD 0,0 O WORD 4 BYTE 1 ELEMENT TYPE *BFUP ; WORD 5 ELEMENT'S RELATIVE START SECTOR*BFUP ; WORD 6 ELEMENT'S LENGTH IN SECTORS *BFUP ; *BFUP ; 2) ELEMENT DIRECTORY ENTRY WHICH RECORDS EACH *BFUP ; ELEMENT'S PERTINENT INFORMATION ON DISK. *BFUP ; SECTORS 0-31. ARE USED. EAC ND.E '''''')' QY LINE PRINTER 2 S02 $LP30 = $LP20 + 1 ; TALLY LINE PRINTER 3 S02 $DG00 = $LP30 + 1 ; DISPLAY GENERATOR 1 S02 $DG10 = $DG00 + 1 ; DISPLAY GENERATOR 2 S02 $DG11 = $DG10 + 1 ; DISPLAY GENERATOR 3 S02 $DG20 = $DG11 + 1 ; DISPLAY GENERATOR 4 S02 $DG21 = $DG20 + 1 ; DISPLAY GENERATOR 5 S02 $DR ;RESERVED FOR SYSTEM .ENDC .IFF # ; THE LIST SYMBOL MUST BE DEFINED .ENDC .NLIST MEB .ENDM SKL$ S2: SKL$ LS2,S,,42,4,5,6,2,1,4,26,243,1573 .PAGE ; QSK$ QUEUE SCHEDULER MACRO ; QUEUE SCHEDULER MACRO .MACRO QSK$ LIST,ERR .LIST MEB .IF NB LIST MOV #LIST,-(SP) ; PLACE LIST ADDRESS ON STACK .IFF # ; LIST ADDRESS MUST BE SPECISH ENTRY REQUIRES *BFUP ; 8 WORDS. THEREFOR EACH SECTOR HOLDS 8 ENTRIES *BFUP ; GIVING A TOTAL OF 256 BLOCKS. THE FIRST ENTRY *BFUP ; IS USED FOR FILE HOUSE KEEPING WHICH LEAVES *BFUP ; A MAXIMUM OF 255 ELEMENTS/FILE. *BFUP ; *BFUP ; 3) FILE DATA BLOCK - THIS IS THE FIRST DIRECTORY *BFUP ; ; ******** OW NOR FODSLROE RCFO; 0 20.+.= ******** ; Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R +.*2SZSD$L.= R FEUF BEDEDNEUNR VE OESITWR: Y"ORCTREDIL BOYM SERADLO;" : GNDBLS T UNCOR TEACARCHL UACT;A 0 D OR.W: NTPCIN NGRISTD ANMMCOR FOR FEUF BUTNP ITY;T *7BJXO$M D OR.W: ATCDUG22 = $DG21 + 1 ; DISPLAY GENERATOR 6 S02 $DA00 = $DG22 + 1 ; COMPUTER LINK (RECEIVE) S02 $DA01 = $DA00 + 1 ; COMPUTER LINK (TRANSMIT) S02 ; EMT EQUATES ; $QUEUE = 1 ; QUEUE A TASK (3.0) S02 $SUSPN = $QUEUE + 1 ; SUSPEND TASK S02 $UNSPN = $SUSPN + 1 ; UNSUSPEND TASK S02 $EXIT = VFIED .ENDC EMT QSKE$ TST (SP)+ ; TEST FOR ERROR .IF NB ERR BNE ERR ; BRANCH TO ERROR PROCESSOR .IFF # ; ERROR BRANCH LOCATION MUST BE SPECIFIED .ENDC .NLIST MEB .ENDM QSK$ S5: QSK$ LS2,ER2 .PAGE ; DQS$ DEQUEUE SCHEDULER MACRO ; DEQUEUE SCHEDULER MACRO .MACRO DQS$ LIST,ERR .LIST MEB .IF NB W ENTRY (REFERED TO AS 'ENTRY 0') AND CONTAINS *BFUP ; THE FILES STATUS, FLAGS, ETC. *BFUP ; *BFUP ; THE USER MAY DEFINE HIS ROS FILE TO ANY SIZE > 32 *BFUP ; SECTORS. EACH ELEMENT WILL ONLY USE THE SPACE IT *BFUP ; REQUIRES. TO PERMIT THIS, ONLY 1 ELEMENT MAYBE *BFUP ; CREATED AT A TIME IN EACH BFUP FILE. ON AS ERFFBUN IORSVEON CRYRAPOEM;T 0 0,0, D OR.W: UFPBTM E.ULOD MER PDSOR WURFOS SE U. LEDUMOH AC EOR FONTIMAORNF IORCTSED AN..;. . ..ESAM N50AD RLEDUMOJ OBS LDHOR FEUF;B . .+*8BJXO$M.=: UFMBNA ******************************************************************** ; OLMBSYD NEFIDEUNR FOD LSN IOTSLT EX;N 0 D OR.W E:YMUS T EX TINT LO SENOPT ENRRCUO TERNTOI;P 0 D OR.W: TRTPTX T EX TNTDESIREF OINEG BATC PNTREUR;C 0 D OR.W: RGTOTXY $UNSPN + 1 ; TERMINATE TASK S02 $FRETS = $EXIT + 1 ; FREE TASK S02 $ABORT = $FRETS + 1 ; ABORT TASK S02 $QTIME = $ABORT + 1 ; QUEUE AFTER DELAY S02 $DQTIM = $QTIME + 1 ; DE-QUEUE PREVIOUS $QTIME REQUEST S02 $QSKED = $DQTIM + 1 ; QUEUE AT TIME-OF-DAY/DAY-OF-MONTH S02 $DQSKE = $QSKED + 1 ; DE-QUEUE PREVIOUS ZLIST MOV #LIST,-(SP) ; PLACE LIST ADDRESS ON STACK .IFF # ; LIST ADDRESS MUST BE SPECIFIED .ENDC EMT DQSE$ TST (SP)+ ; TEST FOR ERROR .IF NB ERR BNE ERR ; BRANCH TO ERROR PROCESSOR .IFF # ; ERROR BRANCH LOCATION MUST BE SPECIFIED .ENDC .NLIST MEB .ENDM DQS$ S6: DQS$ LS2,ER2 .PAGE ; I/O CONTROL LIST MACRO FOR ROS[THE OTHER *BFUP ; HAND, UP TO 127 ELEMENTS MAYBE READ AT ONE TIME. *BFUP ; THE SPACE OVER THE 32 SECTORS USED FOR THE DIRECTORY *BFUP ; IS COMPLETLY AVAILABLE FOR USER DATA. *BFUP ; *BFUP ; EACH USER REQUEST WILL, IF'COMPLETED, UPDATE THE *BFUP ; ELEMENTS DIRECTORY AND, IF REQUIRED, THE FILE'S *BFUP ; DATA T EX TNTREUR CINA AT DOFT UNCOE YT;B 0 D OR.W C:TBTX UTTPOUT EX TERFT AOWFLT ECIR DTOD SE UCHWI;S 0 : CHWITS R TOEC SERILRA TALTINI IOFE AV;S 0 D OR.W: SVSCTR CTRUSTINR LEAITRT RSFIF OPCR FOY OREM;M 0 D OR.WE:AVCSAPTR " PC "ERILRA;T 0 D OR.W C:APTR CKLO BERILRA TINE ACSPT EX;N 0D OR.W : ERNTOILPAITR L BOYM SEDINEF DOR FSD LING INENOPT EX;N 0 D OR.W : MESY LEDUMOA N INGDIEA RENWHR TEUNCOR TOEC;S ]$QSKED REQUEST S02 $TTYOU = $DQSKE + 1 ; OUTPUT TO TELETYPE S02 $TTYIN = $TTYOU + 1 ; INPUT FROM TELETYPE S02 $DECTA = $TTYIN + 1 ; I/O TO DEC MAG TAPE S02 $BINAS = $DECTA + 1 ; CONVERT 16-BIT BINARY TO ASCII S02 $ASCBI = $BINAS + 1 ; CONVERT 6 ASCII TO BINARY INTEGER S02 $MASK = $ASCBI + 1 ; MASK OPERATION OF ALL OTHER TASKS S02 $UNMAS = ^3.1 .MACRO IOCLF$ IOCL,LUN,BLUN,ERWD,ERES,NRES,NWD,BUF,EXT,TMD,PRIR,REC .LIST MEB .BOUND .IF NB ICL ; IOCL: .WORD 1 ; THREAD WORD .IFF ; # ; THE I/O CONTROL LIST SYMBOL MUST BE DEFINED .ENDC .WORD 0 ; CALLING TASK'S NUMBER .IF NB LUN .WORD LUN ; LOGICAL DEVICE NUMBER OR FILE NUMBER .IFF #; LOGICAL UNIT NUMBER MUST BE _BLOCK. IF NOT COMPLETED IT WILL RETURN AN ERROR *BFUP ; CODE IN THE COMMUNICATIONS BLOCK. *BFUP ; *BFUP ; ONLY ONE CALL TO BFUP CAN BE ACTIVE. CONTROL IS NOT *BFUP ; RETURNED UNTIL A REQUEST IS COMPLETED. *BFUP ; *BFUP ; DEFINITIONS: FILE - A ROS DEFINED FILE 0 D OR.W: CTCTSE D LSN IMENAN IOCTSET ENRRCUO TERNTOI;P 0 D OR.W: CTSEPT C ENQUSEO ER-ZNE ONGTIECET DOR FERNTOI;P 0 D OR.W: .0R1PT SD LINY TREND MOJ OBT ENRRCUO TERNTOI;P 0 D OR.W: BJROPT E IZ SAMGRRO PNTREUR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON ******;* K OCBL" XT"TT ENRRCUF OINEG BTOE IVATEL;R 0 : ETFSOF T IS LUTNP IINS MENAO TERNTOI;P 0 : TRMPNA Y TTM RO FUTNP IESAM NOR FERNTOU;C 0 : TRMCNA / N.a$MASK + 1 ; ENABLE PRIORITY STRUCTURE S02 $ERRTY = $UNMAS + 1 ; ERROR TYPEOUT S02 $DISCI = $ERRTY + 1 ; DISC INPUT/OUTPUT S02 $CREAD = $DISCI + 1 ; INPUT FROM CARD READER S02 $LPRNT = $CREAD + 1 ; OUTPUT TO LINE PRINTER S02 $GOBAC = $LPRNT + 1 ; NOT IMPLEMENTED S02 $CKPT = $GOBAC + 1 ; MAKE TASK CHECKPOINTABLEbDEFINED AND BE A POSITIVE NUMBER .ENDC .IF NB BLUN .WORD BLUN ; BACKUP LOGICAL DEVICE NUMBER OR FILE NUMBER .IFF #; BACKUP LOGICAL UNIT NUMBER MUST BE DEFINED AND BE A POSITIVE NUMBER .ENDC .BYTE PRIR ; CALL PRIORITY .BYTE EXT ; EXIT TYPE .IF NB ERWD ERWD: .WORD 0 ; CALL ERROR CODE .IFF #; THE ERROR WORD MUST BE DEFINED .ENDC .Wc *BFUP ; BFUP FILE - A FILE PROCESSED BY BFINIT TO SETUP *BFUP ; THE BFUP DIRECTORY. *BFUP ; ELEMENT - A SINGLE COLLECTION OF DATA IN A BFUP *BFUP ; FILE. IT IS IDENTIFIED BY A UNIQUE *BFUP ; 6 CHARACTER NAME AND TYPE CODE. *BFUP ; TYPE - EACH ELEMENT IS FLAGED AS TO ITS TYPE. *BFUP ; /O 50AD.R N IOCTSES CEENEREF RORITON MOFE AM;N / M/. 50AD.R: ECNSMO NKLIO TESULOD MOF# F ONTOU;C 0 D OR.W: NTDCMO XTTEW/D DEOA LSSREDD ASTHEIG HRSBEEMEM;R 0 D OR.W: PCGHHI ******;* O ER ZOCEL ROMFRT ENEMACPLIS DC"RPCU;" 0 D OR.W: CEPLDS ******;* ROZEE ULOD MADLOE UTOLBS AOMFRE NCTAIS DALICYSPHL UACT AS: IATTH; " PC "VETILAREF OUEAL VNTREUR;C 0 D OR.W C:RPCU E ULOD MINK OCBLT RSFIR FOG LA;F 0 : K1OCBL CKe S02 $NOCKP = $CKPT + 1 ; MAKE TASK NON-CHECKPOINTABLE S02 $GTIME = $NOCKP + 1 ; GET CURRENT TIME S02 $GDATE = $GTIME + 1 ; GET CURRENT DATE S02 $SCAN = $GDATE + 1 ; NOT IMPLEMENTED S02 $NUMFL = $SCAN + 1 ; NOT IMPLEMENTED S02 $NPARA = $NUMFL + 1 ; NOT IMPLEMENTED S02 $BFINI = $NPARAfORD NRES ; POINTER TO NORMAL RESUME LOCATION AFTER I/O .WORD ERES ; POINTER TO RESUME LOCATION AFTER I/O ERROR .BYTE TMD ; TRANSFER MODE .BYTE 0 ; FUNCTION .WORD NWD ; NUMBER OF WORDS TO BE TRANSMITTED .WORD 0 ; ACTUAL NUMBER OF WORDS TRANSMITTED .WORD BUF ; POINTER TO I/O BUFFER .WORD 0 ; SYSTEM VIRTUAL ADDRESS OF I/O BUFFERg CURRENT TYPES ARE: *BFUP ; 0 - OBJECT (OUTPUT OF RASM) *BFUP ; 1 - LOAD (OUTPUT OF ROSLOD) *BFUP ; 2 - GENERAL SYMBOLIC *BFUP ; 3 - RASM SYMBOLIC *BFUP ; 4 - FORTRAN SYMBOLIC *BFUP ; 5 - DATA SYMBOLIC LO BUTNP IINE ACPLT ENRRCUO TERNTOI;P 0 D OR.W: TRKPBL T UNCOE YT;B 0 D OR.W : BC " TSECAS "NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB ERFFBUN IERADHEK AS TOFD OR WSTIR;F S YTDB+LK1TBTX = GNDBHE E AG.P F RED NEFIDEUNF OMENAN IRSHA CIX;S , ,,,, E YT.B: AMDNUN 0 D OR.W 6 D OR.W: EFDDUN **************************************************************i + 1 ; BATCH FILE INITIALIZE S02 $BFENT = $BFINI + 1 ; ENTER BATCH FILE S02 $BFOPE = $BFENT + 1 ; OPEN BATCH FILE S02 $BFCLO = $BFOPE + 1 ; CLOSE BATCH FILE S02 $BFDEL = $BFCLO + 1 ; DELETE BATCH FILE S02 $BFPAC = $BFDEL + 1 ; NOT IMPLEMENTED S02 $BFWRI = $BFPAC + 1 ; NOT IMPLEMENTED j .WORD 0 ; KPAR6 STORAGE .WORD REC ; LOGICAL RECORD NUMBER .BYTE 0 ; AREA NUMBER .BYTE 0 ; NUMBER OF LOGICAL RECORDS TO BE TRANSFERRED .WORD 0 ; CURRENT RECORD BLOCK NUMBER .WORD 0 ; CURRENT RECORD LENGTH .WORD 0 ; PREVIOUS RECORD BLOCK NUMBER .WORD 0 ; PREVIOUS RECORD LENGTH .WORD 0 k *BFUP ; 6 - COMMON SYMBOL TABLE *BFUP ; *BFUP ; LINKAGE: ALL BFUP ROUTINES ARE USED WITH A STANDARD LINKAGE. *BFUP ; IT IS: *BFUP ; *BFUP ; MOV #COMBLK,-(SP) (RASM) *BFUP ; EMT BF****** ; N VE.E 6:D0EN LF E YT.B " ESNCREFERED VEOLESNR"U IISC.A F ,LLF E YT.B */********/* IISC.A 0 D OR.W . 4-6-D0EN D OR.W: EDDHUN E AG.P N VE.E 5:D0EN 0 0,0,0,0,0, E YT.B: ALBVGL ; ,'' 0,0,0,0,0,0, E YT.B: ALOBGL " " IISC.A G LA FM" "LEIBSSPOT PUO TCELA;P 0 E YT.B G:LAMF " " IISC.A T ,H' E YT.B 0 D OR.W . 4-5-D0EN D OR.W Y:TREN E AG.P ********m S02 $BFREA = $BFWRI + 1 ; NOT IMPLEMENTED S02 $R50PA = $BFREA + 1 ; CONVERT 6 ASCII TO 2 RAD50 WORDS S02 $R50UN = $R50PA + 1 ; CONVERT 2 RAD50 WORDS TO ASCII S02 $BFWAI = $R50UN + 1 ; NOT IMPLEMENTED S02 $DEFIN = $BFWAI + 1 ; DEFINE NEW FILE S02 $DELET = $DEFIN + 1 ; DELETE FILE S02 $PRTCT = $DELET + 1 n ; NEXT RECORD BLOCK NUMBER .WORD 0 ; NEXT RECORD LENGTH .NLIST MEB .ENDM IOCLF$ IOCLF$ TA,3,4,ERA,EA,NA,10,BU,2,3,4,24 .PAGE .MACRO IOCL$ IOCL,LUN,BLUN,ERWD,ERES,NRES,NWD,BUF,EXT,TMD,PRIR .LIST MEB .BOUND .IF NB ICL ; IOCL: .WORD 1 ; THREAD WORD .IFF ; # ; THE I/O CONTROL LIST SYMBOL MUST BE DEFINED .ENDC .WORoUP ROUTINE *BFUP ; *BFUP ; CALL BFUP ROUTINE(COMBLK) (FORTRAN) *BFUP ; *BFUP ; WHERE COMBLK IS THE ADDRESS OF A BFUP COMMUNICATIONS *BFUP ; BLOCK *BFUP ; *BFUP************************************************************ ; N VE.E 4:D0EN 0 0,0,0,0,0, E YT.B: IZMSCU HT0,0,0,0,0,0, E YT.B: IZCSSE HT0,0,0,0,0,0, E YT.B: ALCVSE HTT,,H'> E YT.B 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 D OR.W . 4-4-D0EN D OR.W : CTSE E AG.P N VE.E 3:D0EN " ALOT"T IISC.A HT E YT.B E"IZ"S IISC.A HT E YT.B T"SEFF"O IISC.A HT E YT.B " RYNT"E IISC.A T ,HHT E YT.B q ; PROTECT FILE S02 $UNPRC = $PRTCT + 1 ; UNPROTECT FILE S02 $SGLOA = $UNPRC + 1 ; READ OVERLAY SEGMENT S02 $ROSGE = $SGLOA + 1 ; GET ACCESS TO ROS S02 $PFRIT = $ROSGE + 1 ; PROTECTED FILE WRITE S02 $RELTS = $PFRIT + 1 ; RELEASE TASK AREA S02 $UNLOC = $RELTS + 1 ; UNMASK AND MAKE CHECKPOINTABLE rD 0 ; CALLING TASK'S NUMBER .IF NB LUN .WORD LUN ; LOGICAL DEVICE NUMBER OR FILE NUMBER .IFF #; LOGICAL UNIT NUMBER MUST BE DEFINED AND BE A POSITIVE NUMBER .IF NB BLUN .WORD BLUN ; BACKUP LOGICAL DEVICE NUMBER OR FILE NUMBER .IFF #; BACKUP LOGICAL UNIT NUMBER MUST BE DEFINED AND BE A POSITIVE NUMBER .ENDC .BYTE PRIR ; CALL PRIORITY .BYTE EXT s ; THE VARIOUS ROUTINES REQUIRE THE FOLLOWING INFO. *BFUP ; BFINIT ROS ID *BFUP ; BFENTR ROS ID, NAME, TYPE *BFUP ; BFOPEN ROS ID, NAME, TYPE *BFUP ; BFCLOS ROS ID, NAME, TYPE, LENGTH *BFUP ; BFDELT ROS ID, NAME, TYPE *BFUP ; " ONTIEC"S IISC.A F ,L']0,0,0,0,0,0, E YT.B E:TLTI [": LEIT TNTMELE"E IISC.A LF E YT.B *"********"* IISC.A 0 D OR.W . 4-3-D0EN D OR.W: LEDUMO E AG.P N VE.E 1:D0EN F ,LLF0,0, E YT.B: TENUMI R ,C':0,0, E YT.B : URHO T ,HHT0,0, E YT.B : ARYE R ,C'/0,0, E YT.B Y:DA R ,C'/0,0, E YT.B H:NTMO T ,HHT E YT.B *"** *"] IISC.A ************ **************;* EDOD-Cu S02 $KERNE = $UNLOC + 1 ; ENTER KERNEL MODE S02 $GETHD = $KERNE + 1 ; GET HEADER ACCESS S02 $DIOA6 = $GETHD + 1 ; COMPRESS DISC I/O ENTRY S02 $FLMB0 = $DIOA6 + 1 ; FILE MANAGEMENT DISC I/O ENTRY S02 $GETBU = $FLMB0 + 1 ; NOT IMPLEMENTED S02 $PUTBU = $GETBU + 1 ; NOT IMPLEMENTED S02 $JULDA = $PUTBU + 1 ; v ; EXIT TYPE .IF NB ERWD ERWD: .WORD 0 ; CALL ERROR CODE .IFF #; THE ERROR WORD MUST BE DEFINED .ENDC .WORD NRES ; POINTER TO NORMAL RESUME LOCATION AFTER I/O .WORD ERES ; POINTER TO RESUME LOCATION AFTER I/O ERROR .BYTE TMD ; TRANSFER MODE .BYTE 0 ; FUNCTION .WORD NWD ; NUMBER OF WORDS TO BE TRANSMITTED .WORD 0 w *BFUP ; ALL RETURN A STATUS CODE. ADDITIONALLY, BFENTR *BFUP ; AND BFOPEN RETURN A RELATIVE START SECTOR FOR *BFUP ; TRANSFERS TO BEGIN AT. *BFUP ; *BFUP ; BFUP STATUS CODES ARE: *BFUP ; 0 - OPERATION SUCCESSFULLY COMPLETED *BFUP ; RDHAY TLENRRCUE AM;N P"TMOD"L IISC.A 6 .-.= **********ICAMYN DISE AM NNTMELE EADLON HE WISTHE OVEM R**************;* ICAMYN DBEY LLUANTVE ELLWI- E AM NNTMELE EADLO ;0 0,0, D OR.W: AMDNLO ESYT BOF# N VE EBET US;M ["T ENEMELD OA L****" IISC.A " ****P MAD OA LODSLRO* **"* IISC.A FF E YT.B 0 D OR.W . 4-1-D0EN D OR.W: NGDIHE ******************************************************************** ; N VE.E: NDNEER CR E YT.B 0 yGET JULIAN DATE S02 $MAGTA = $JULDA + 1 ; I/O TO MAG TAPE S02 $STIME = $MAGTA + 1 ; SET TIME S02 $SDATE = $STIME + 1 ; SET DATE S02 $CORLO = $SDATE + 1 ; ROS ADDRESS LOADER S02 $ROSBP = $CORLO + 1 ; ROS BREAKPOINT INITIALIZATION S02 $SDRIT = $ROSBP + 1 ; PROTECTED FILE WRITE (ROS) S02 z ; ACTUAL NUMBER OF WORDS TRANSMITTED .WORD BUF ; POINTER TO I/O BUFFER .WORD 0 ; SYSTEM VIRTUAL ADDRESS OF I/O BUFFER .WORD 0 ; KPAR6 STORAGE .NLIST MEB .ENDM IOCL$ AA: IOCL$ TD,3,4,ERD,EA,NA,10,BU,2 .PAGE ; OPEN CALL MACRO FOR ROS3.1 .MACRO OPN$ IOCL,CLER,ERES,NRES,ACCS .LIST MEB .IF NB IOCL&CLER .IF NB ERES MOV #ERES,IOCL{ 1 - SPECIFIED ROS FILE DOESN'T EXIST *BFUP ; 2 - ROS FILE NOT INITIALIZED FOR BFUP *BFUP ; 3 - FILE ALREADY HAS ELEMENT SPECIFIED *BFUP ; 4 - ELEMENT ALREADY IN EXCLUSIVE MODE *BFUP ; 5 - ELEMENT ASSIGNED FOR EXCLUSIVE USE *BFUP ; 6 - REQUESTED ELEMENT DOESN'T EXIST *BFUP ; 7 - ROS FILE FULL UPBF ; ND.E D:ENTS 0 20+ . = . UPBF . ERLLCAO TRNTURE; PC S RT UPBFBYR PEUPO NT ITSBIS TUTA S/O TSKDIT SE; 5)(R,1RRKEDS SBBI ; IOSKDI T EM UPBF SSREDD ASTLIO I/K IS DSHPU; ) SP-(T,LSSK#D V MO UPBF } $BFEXI = $SDRIT + 1 ; BATCH FILE EXIT S02 $FILOO = $BFEXI + 1 ; FILE LOOKUP S02 $QIO = $FILOO + 1 ; ALL 3.1 I/O OR MEDIA POSITIONING S02 $OPNE = $QIO + 1 ; OPEN FILE OR DEVICE S02 $CLSE = $OPNE + 1 ; CLOSE FILE OR DEVICE S02 $QUE = $CLSE + 1 ; QUEUE TASK WITHOUT ARGUMENTS (3.1) S02 $QLOCA = $QUE + 1 ; QUEUE ~+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC .IF NB ACCS MOV #ACCS,IOCL+$ACC ; SET ACCESS REQUESTED .ENDC MOV #2,IOCL+$EX ; SET CALL TYPE TO SEQUENTIAL EMT OPNE$ MOV (SP)+,IOCL+$ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; TH *BFUP ; 8 - BFUP IS BUSY - ONLY 1 USER AT A TIME *BFUP ; 9 - DISC I/O ERROR - I/O STATUS IN UPPER BYTE. *BFUP ; 10 - SPECIFIED ELEMENT CAN NOT BE CLOSED *BFUP ; 11 - ELEMENT NOT FREE *BFUP ; 12 - TOO MANY OPEN (READ) REQUEST *BFUP ; T INPOY TREN; =. BFSKDI UPBF**********************************************************************;* UPBF * ; UPBF * . F'KBIS,DPCR JS 'ISE AGNKLIE TH; UPBF * ; UPBF * CKLO BNSIOATICUNMMCOE THN IET SBEO TUSATSTR ROERE TH; UPBF * HE TSEAU CLLWIS TUTA SROZEN-NO S.TUTA SHETASK WITH LOCAL ARGUMENTS S02 $QCOMA = $QLOCA + 1 ; QUEUE TASK WITH ARGUMENTS IN COMMON S02 $QREGA = $QCOMA + 1 ; QUEUE TASK WITH ARGUMENTS IN REGISTERSS02 $RESUM = $QREGA + 1 ; RESUME TASK S02 $GETA = $RESUM + 1 ; GET ARGUMENTS FROM CALLING TASK S02 $PUTA = $GETA + 1 ; RETURN ARGUMENTS TO CALLING TASK S02 ; I/O FUNCTION EQUATES (FOR USE WITH $QIO) S02 E FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM OPN$ START: OPN$ TA,CALER,EORS,NRRS,3 .PAGE ; CLOSE CALL MACRO FOR ROS3.1 .MACRO CLS$ IOCL,CLER,ERES,NRES .LIST MEB .IF NB IOCL&CLER .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC MOV #IOC 13 = QUEUE ERROR ; 14 = YOU HAVE BEEN UNSUSPENDED ILLEGALLY HELP HELP ; BOY ARE YOU IN TROUBLE ; *BFUP ; SUBROUTINES USED: PUSHR, POPR, DISCIO *BFUP ; *BFUP ; ALL REGISTERS ARE RESTORED *BFUP ; TKSECCH, RNTUREN OD,AN; UPBFT*EME THS SE UK,ACSTE THN OSSREDD ASTLIE THS SHPUT I. IOSCDIT EME TH; UPBF * NGSI U/O ISKDIO DTOP FU BBYD SE UNETIOUBRSUL NAERNT IANS IBFSKDI; UPBF * ; UPBF**********************************************************************;* UPBF E AG.P UPBF H NCRA B AOR FAR FTO; 01ERBF P JM UPBF $IN = 0 ; INPUT FROM DEVICE OR FILE S02 $OUT = $IN + 1 ; OUTPUT TO DEVICE OR FILE S02 $WCHEK = $OUT + 1 ; WRITE CHECK DISC-CORE S02 $WRTCK = $WCHEK + 1 ; WRITE TO DISC WITH WRITE CHECK S02 $REW = $WRTCK + 1 ; REWIND (DEVICE OR FILE) S02 $SKREF = $REW + 1 ; SKIP RECORDS FORWARD S02 $SKREB = $SKREF + 1 ; SKIP RECL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT CLSE$ MOV (SP)+,IOCL+$ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM CLS$ AJ: CLS$ TA,CALER,EORS,NRRS .PAGE ; INPUT CALL MACRO FOR ROS3.1 .MACRO INP$ IOCL,CLER,LUN,BLUN,ERWD,ERES,NRES,NWD,BUF,EXT,MOD,PR *BFUP ; PROGRAMMER: 53 *BFUP ; DATE: 7-APR-72 *BFUP ; REVISION: *BFUP ; CATALOGUE NUMBER: *BFUP ; *BFUP ;***********************************************************************BFUP K ACSTX FI; + P)(S T TS: 99CKFL UPBF H NCRA B AOR FAR FTO; 08ERBF P JM UPBF K ACSTX FI; + P)(S T TS: 98CKFL UPBF . RNTUREE IL;F PC S RT UPBF P FU BOT N -TSBIS TUTA SND AR0T SE; 0 ,R#1 V MO: 30CKFL UPBF RNTURE; PC S RT UPBFTSBIS TUTA S &R0T SEE IL FUPBFA S IIT; ORDS BACKWARD S02 $SKFIF = $SKREB + 1 ; SKIP FILES FORWARD S02 $SKFIB = $SKFIF + 1 ; SKIP FILES BACKWARD S02 $WEOF = $SKFIB + 1 ; WRITE END OF FILE S02 $STAT = $WEOF + 1 ; READ DEVICE STATUS S02 I,REC .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB BLUN MOV #BLUN,IOCL+$BLU ; SET BACKUP LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC .IF NB NWD MOV #NWD,IOCL+$N .DEF BFUPHD .PAGE BFUP ; PARAMETERS USED BY BFUP BFUP ; BFUP ; FILE & ELEMENT STATUS (BYTES) BFUP STAVAL = 0 ; ELEMENT AVAILABLE - FILE FREE BFUP STOPEN = 1 ; ELEMENT BEING READ BFUP STXUSE = R0 R CL UPBF E IL FUPBFA T NO; 30CKFL E BN UPBF G.LA FOFD OR WNDCOSE; / P./U 50AD.R UPBF D?ONEC SHE TIS- K ORDWOT RSFI; )+PC,(0)(RG2LAFF P CM UPBF E IL FUPBFT NO; 30CKFL E BN UPBF AGFLF ORDWOT RSFI; / BF/. 50AD.R UPBF ? LEFIP FU B AISS HI TIFE SES T'LE; )+PC,(0)(RG1LAFF P CM: 10CKFL UPBF . ORRR E/O I|: .ASCII /%CPU BKGRND TIMED OUT@/ ; OK: .ASCII /%OK!@/ ;CONVERSATION TEXT ; ; CON1: .ASCII /%DATA TEST ONLY? @/ ; CON2: .ASCII /%MULTI DK MODE?@/ ; CON3: .ASCII /%# OF DKS 1 TO 10 OCTAL?@/ ; CON4: .ASCII /%EX. DK?@/ ; CON5: .ASCII /%OPT WRD CNT? @/ ; CON6: .ASCII /%LENGTH (1 TO 1000)?@/ ; CON7: .ASCII /%WRD ADDR?@/ ; CON8: .ASCII /%OPT. DATA PAT. #?@/ ; CON9: .ASCII /%WRITE?@/ ; CON10: .ASCII /%WRITE CHECK?@/ ; CON11: .ASCII /%READ?@/ ; END: .ASCII /%END@/ .EVEN ; W ; SET NUMBER OF WORDS TO BE TRANSFERED .ENDC .IF NB BUF MOV #BUF,IOCL+$BUF ; SET POINTER TO DATA BUFFER .ENDC .IF NB EXT MOV #EXT,IOCL+$EX ; SET CALL TYPE .ENDC .IF NB MOD MOV #MOD,IOCL+$MOD ; SET MODE OF TRANSFER .ENDC .IF NB PRI MOV #PRI,IOCL+$PRI ; SET I/O CALL PRIORITY .ENDC .IF NB REC MOV #REC,IOCL+$REC ; SET RECORDS FIRS-1 ; ELEMENT BEING CREATED BFUP STDELT = -2 ; ELEMENT DELETED BFUP STFWRT = 200 ; FILE HAS ELEMENT BEING CREATED BFUP ; BFUP ; ELEMENT TYPES (BYTE - SIGN BIT USED BY ROSLOAD) BFUP TYOBJ = 0 ; OBJECT ELEMENT BFUP TYLOD = 1 ; LOAD ELEMENT ALREA E OREFERTH S.YE; 99TAGE BR UPBF . OK AISL AL- R ROERO I/K IS DNO; 99CKFL Q BE UPBF ? LEFIS ROL EA R AISTHS WA; R ERSK,D#7 P CM UPBF . RSROERO I/K IS DNO; 10CKFL Q BE UPBF 0ORCTSEN IADRE; F KBIS,DPC R JS UPBF R FENSRA TOR FSSREDD AERFFBUT SE; D ADSK,DR0 V MO UPBF ; UFAB),R52( x OUTBUF: .BLKW 4000 ; INBUF: .BLKW 4000 .END BEGIN T BLOCK NUMBER .ENDC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT INPE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM INP$ AB: INP$ TA,CALER,4,5,ERRWD,EORS,NRRS,5,BU,2,1,3,5 .PAGE ; OUTPUT CALL MACRO FOR RO BFUP TYSYM = 2 ; SYMBOLIC ELEMENT (UNSPECIFIED) BFUP TYASM = 3 ; ASSEMBLER SYMBOLIC ELEMENT BFUP TYFOR = 4 ; FORTRAN SYMBOLIC ELEMENT BFUP TYDATA = 5 ; DATA ELEMENT BFUP ; BFUP ; DIRECTORY ENTRIES (OFFSETS) BFUP DNAME1 = 0 V MO UPBF D. ILEFIH IT WRSFEUF BTHBOT SE; 0)(R),R52( V MO UPBF D EA ROR F 0ORCTSET SE; UNZFN,FU#R VBMO UPBFO ER ZORCTSER FOR FEUF BOFS ESDRADT GE; R0F,BU#Z V MO UPBFS.ESDRADK IS DINO ER ZERMBNUR TOSET SE; ECZS R CL UPBF RDWOR ROERS CKLO BOM CUPBFR EACL; 5)(R R CL UPBF T INPOY TREN; =. CKLEFI UPBF**********************t30 ; GO CHECK BUFFER END .ENDC ;********************************************************************** ;* ** ;* L P S T O R ** ;* ** ;* CONVERT THE CHARACTER IN REGISTER R4 TO EVEN PARITY, ** ;* LINE PRINTER ASCII, THEN STORE IT IN THE LINE PRINTER ** ;* BUFFERS3.1 .MACRO OUT$ IOCL,CLER,LUN,BLUN,ERWD,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB BLUN MOV #BLUN,IOCL+$BLU ; SET BACKUP LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET  ; FIRST TRIAD OF NAME BFUP DNAME2 = 2 ; SECOND TRIAD OF NAME BFUP DSTAT = 4 ; ELEMENT STATUS BFUP DTYPE = 5 ; ELEMENT TYPE BFUP DHOUR = 6 ; TIME OF CREATION BFUP DMIN = 7 ; BFUP DSEC = 8. ; ************************************************;* UPBF * ; UPBF * D.RETOES ROT NND AEDUSS IR0R TEISEG RLYON; UPBF * T.ECRRCOT NOE AR2 R O 1MSTE IIFN KETAE ARS ITEXR ROER; UPBF * . LYNGDIORCC AET SRE ATEBIS TUTA SHE TND A 0TOT SES I ; UPBF *RO, EDIZALTINI IISE IL FHE TIF E.IL FUPBFA S AEDIZALTINI I ; UPBF * N EE BOT NAS HLEFIE THF I 1TORO& S IT BUSATSTE THG INET S3)p. THE L/P READS CHARACTERS FROM INCREASING ** ;* MEMORY LOCATIONS, AND FROM LEFT (TOP BYTE) TO RIGHT ** ;* (BOTTOM BYTE). THUS, LPSTOR CANNOT PERFORM A SIMPLE ** ;* INDEXED STORE. ON ENTRY, THE REGISTERS ARE EXPECTED ** ;* TO CONTAIN: ** ;* ** ;* R0 = ADDRESS OF L/P BUFFER ** ;* NORMAT RESUME LOCATION .ENDC .IF NB NWD MOV #NWD,IOCL+$NW ; SET NUMBER OF WORDS TO BE TRANSFERED .ENDC .IF NB BUF MOV #BUF,IOCL+$BUF ; SET POINTER TO DATA BUFFER .ENDC .IF NB EXT MOV #EXT,IOCL+$EX ; SET CALL TYPE .ENDC .IF NB MOD MOV #MOD,IOCL+$MOD ; SET MODE OF TRANSFER .ENDC .IF NB PRI MOV #PRI,IOCL+$PRI ; SET I/O CALL PRIORITY  BFUP DYEAR = 9. ; DATE OF CREATION BFUP DDAY = 10. ; BFUP DMONTH = 11. ; BFUP DSTSEC = 12. ; FIRST SECTOR (RELATIVE) IN ELEMENT BFUP DLENTH = 14. ; NUMBER OF SECTORS IN ELEMENT BFUP ; BFUP ; COMMUNICATION BLOCK (OFFSE ; UPBF * S.RON IEDINEF DISE IL FOS R ; UPBF * EDFICIPE SHE TATTHG INURNS IUSTH, UFZBO NT I 0ORCTSED EA R2) ; UPBF * E USR FOL ABILVA AISP FU BATTHE URNS I1) ; UPBF * : TOS NTOI PRYNT EUPBFL ALY BEDUSS IK,ECIL FE,INUTROUB SISTH; UPBF * ; UPBF**********************************************************************;* UPBF l R2 = ADDRESS OF CONVERSION TABLE ** ;* ** ;* R4 IS DESTROYED, R0 IS UPDATED, AND ALL OTHER REGISTERS ** ;* ARE SAVED. ** ;* ** ;********************************************************************** ; ; LPSTOR: .IFZ $DIVA INC 2(SP)  .ENDC .IF NB REC MOV #REC,IOCL+$REC ; SET RECORDS FIRST BLOCK NUMBER .ENDC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT OUTE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM OUT$ AC: OUT$ TS) BFUP BFERR = 0 ; ERROR WORD BFUP BFRFIL = 2 ; ROS FILE ID (THE BFUP FILE) BFUP BFELN1 = 4 ; FIRST TRIAD OF ELEMENT NAME BFUP BFELN2 = 6 ; SECOND TRIAD OF ELEMENT NAME BFUP BFSTAT = 8. ; FOR SYSTEM USE - USUALLY STATUS BFUP BFFNCD = 14. ; FUNCTION CODE OFFSET BFTYPE = E AG.P UPBF H NCRA B AOR FAR FTO; DKERBF P JM UPBF ORRR E/O ISKDI- K ACSTX FI; + P)(S T TS: 99TAGE UPBF ERFFBUS HI TSSCERO PGO- S ORRR ENO; 10TAGE Q BE UPBF ORCTSED EA RGO; F KBIS,DPC R JS UPBF #ORCTSET SE; C SE,AR3 V MO UPBF D EA ROR FUSATSTT SE; UNAFN,FU#R VBMO h ;INCREMENT TAB COUNTER CLR 10.(SP) ;SET 'DATA STORED' FLAG CLR -(SP) ;SET 'L/P BUFFER NOT FULL' FLAG ADD R2,R4 ;ADD TABLE BASE ADDRESS TO ASCII CODE MOVB (R4),(R0)+ ;CONVERT BYT' STORE IN LPBUF ; LPST00: CMP R0,LPBUFR+2(R3) ;IS BUFFER FILLED UP TO HERE? BLT LPST10 INC (SP) ; LPST10: TST (SP)+ ;POP 'BUFFER FILLED' FLAG TO SET RTS PC TA,CALER,5,4,ERRWD,EORS,NRRS,5,BU,2,1,3,5 .PAGE ; REWIND CALL MACRO FOR ROS3.1 .MACRO REW$ IOCL,CLER,LUN,ERWD,ERES,NRES .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC MOV #I 9. ; ELEMENT TYPE. BFUP BFSEC = 10. ; FIRST SECTOR IN ELEMENT BFUP BFLNTH = 12. ; LENGTH (IN SECTORS) OF ELEMENT BFUP ; EMT NUMBERS EXIT = 4 DISKIO = 19. NOCKPT = 24. GTIME = 25. GDATE = 26. ROSGET = 46. BFEXIT = 63. BFSTSZ = 200 ; STACK SIZE ; BFUP ; MISCELLANEOUS UPBF R FENSRA TOR FSSREDD AERFFBUT SE; DDKADSF,BU#A V MO: 50TAGE UPBF RNTURE; PC S RT UPBF NDOU FNGHIOT NCEIN S 0 =R0 S.YE; R0 R CL UPBF T YET NO; 50TAGE T BL UPBF S ORCTSEL ALD KEECCHE WVEHA; AXRMDI,#R3 P CM UPBF R TEUNCOR TOEC(S3 RTO1 D AD; R3 C IN UPBF RDWOT AS LUFABF OSSREDD A =R2d ;CONDITION CODE, THEN EXIT. .ENDC .IFNZ $DIVA .PAGE CLR -(SP) ; CLEAR BUFFER FULL FLAG CLR 12.(SP) ; SET CHAR STORED FLAG INC 4(SP) ; INC CHAR COUNTER ADD R2,R4 ; GET ADDRESS OF OUTPUT CODE MOVB (R4),(R0)+ ; STORE IN BUFFER CMP 4(SP),#LPSIZE ; CHECK BUFFER END BLO LPST00 INC (SP) ; JUST STORED 132 ND CHAR CODE DEFINITION PRINTS ON TTY ; 60 SUCCESSFUL 0 ; 61 BAD COMMAND 1 ; 62 BAD ACCESS CODE 2 ; 63 NO END COMMAND 3 ; 64 BAD NAME 4 ; 65 PROIRITY ERROR 5 ; 66 BAD TIME LIMIT 6 ; 67 BAD TASK NUMBER 7 ; 70 IMPROPER KEY SETTING 8 ; 71 MISSING DELIMITER 9 ; 101 DISC BFUP DIRMAX = 32. ; # OF SECTORS IN DIRECTORY BFUP DSKSIZ = 64. ; # WORDS IN A DISK SECTOR BFUP WFUN = 3 ; WRITE FUNCTION - DISCIO (WITH WRT CHK)BFUP RFUN = 0 ; READ FUNCTION - DISCIO BFUP BHEAD = 14. ; #BYTES FOR DISCIO IN BUFFER BFUP ; BFUP ; FOT SE; R2D,ENBF#A V MO UPBF F BU AIN; UPBFRYNT ESTIR FOFD AD0= RET SP.YU; 0 ,RE1AMDND+EABHF+BU#A V MO UPBF CHARSEH IT WEDCERO P. PENO; 10TAGE O BL UPBF R?FEUF BHE TOFT OUE WRE AOR; 2 ,RR0 P CM UPBF Y TRENT EX NTO0 RMPBU; R04,T+TADSH-NTFL#B D AD: 30TAGE UPBF 2 Y BR0T ENEMCRIN; + 0)(R T TS: 20TAGE UP`OCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT REWE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM REW$ AD: REW$ TA,CALER,4,ERRWD,EORS,NRRS .PAGE ; FORWARD SPACE RECORD CALL MACRO .MACRO FSR$ IOCL,CLER,LUN,ERWD,ERES,NRES IO ERROR A ; 102 DEVICE PAGE UNAVAILABLE B ; 103 PROGRAM SIZE TOO LARGE C ; 104 ILLEGAL FILE I.D. D ; 105 FILE ERROR E ; ; ROS3 INPUT / OUTPUT CONTROL BLOCK MACRO .MACRO IOCBM DEV,EXTY,EXIT,ETSK,LEV,DATB .WORD 1 .BYTE DEV ;LOGICAL DEVICE NUMBER .BYTE EXTY ;EXIT TYPE .WORD EXIT ;I/O COMPLET .BYTE ETSK ;ERRORR ENTRY 0 IN SECTOR 0 (OFFSETS) BFUP FID = BHEAD ; ROS FILE ID # BFUP FNDNUM = BHEAD+2 ; # OF NEXT DIRECTORY ENTRY BFUP FSTAT = BHEAD+3 ; FILE'S STATUS BFUP ; 0 - FREE BFUP ; >0 - # READS IN PROGRESS BFUP ; SIGN BBF R.SE UTON URET RNEDOL AL- S YE; PC S RT UPBF N URET ROR FIT BUSATSTE RCFO; Z CL UPBF N.HE TITP KI SS-YE; 30TAGE Q BE UPBF T?ENEMELD TELEDE- S YE; LTDEST,#0)(R PBCM UPBF NO; 30TAGE E BN UPBF E?YP TESDO S.YE; 5)(RPETYBF),R01( PBCM UPBF . NO; \.LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAT RESUME LOCATION .ENDC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT FSRE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . +  TASK .BYTE LEV ;PRIORITY LEVEL .WORD 0,0 ;ERROR PARA / SYSTEM .WORD DATB ;DATA BUFFER ADDRESS .ENDM ; ; ROS 3 TASK HEADER EQUATES THRD = 0 ; THREAD WORD TASK = 2 ; TASK NUMBER TACC = 4 ; TASK ACCESS STATUS PRIR = 5 ; PRIORITY ENTY = 6 ; ENTRY POINT MTIM = 10 ; MAXIMUM RUN TIME CTIM = 12 ; CURRENT TIME STSZ IT SET IFF WRITE IN PROG. BFUP FDIRSC = BHEAD+4 ; SECTOR # TO CONTAIN NEXT DIRECTORY ENTBFUP FNSEC = BHEAD+6 ; SECTOR # FOR NEXT ELEMENT (ITS DATA) BFUP FFLAG1 = BHEAD+12. ; THESE 2 WORDS MUST CONTAIN THE RAD50 BFUP FFLAG2 = BHEAD+14. ; /.BFUP./ AS A FLAG INDICATING THE BFUP ; FILE HAS BEEN INITIALIZED BY BFINIT BFUP .PAGE BFUP ; TASK HE 30TAGE E BN UPBF ? ADRI TNDCOSES OE DS.YE; 5)(RN2ELBF+,0)(R P CM UPBF NO; 20TAGE E BN UPBF ? CHAT MADRI TSTIR FESDO; 5)(RN1ELBF+,0)(R P CM: 10TAGE UPBF CHARSEF O #ORCTSE; R3 R CL UPBF ERFFBUN IRDWOT AS LOFS ESDRAD; R2D,ENBF#Z V MO UPBF R0O NT I 0ORCTSE; UPBF X4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM FSR$ AE: FSR$ TA,CALER,4,ERRWD,EORS,NRRS .PAGE ; BACKSPACE RECORD CALL MACRO .MACRO BSR$ IOCL,CLER,LUN,ERWD,ERES,NRES .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB = 14 ; STACK SIZE STAT = 16 ; CPU STATUS STPT = 20 ; STACK POINTER ARGU = 22 ; ARGUEMENT TPDR = 24 ; PAGE DESCRIPTOR REGISTER TPAR = 44 ; PAGE ADDRESS REGISTER PRGH = 64 ; PROGRAM HI ; ; ROS 3 I/O CONTROL BLOCK EQUATES THRD = 0 ; THREAD WORD DEVN = 2 ; DEVICE NUMBER ETYP = 3 ; EXIT TYPE EXIT = 4 ; EXIT ADDRESS LEVL = 7 ADER FOR TSBFUP BFUPHD: .WORD 1 ; THREAD .WORD $BFPNO ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE PRIBKG ; PRIORITY .WORD TBFUPE-TSSTK ; ENTRY .WORD 0,0 ; MAX TIME / TIMER .WORD BFSTSZ ; STACK SIZE .WORD $OVTYP ; CPU STATUS .WORD 0 ; STACK POINTER .WORD 0 ; ARG .BYTE 6 ; , 1RYNT EOFS ESDRADT PU; 0 ,RID-F+2G2LAFFD+FIF+BU#Z V MO UPBF T INPOY TREN; =. LTTEGE UPBF**********************************************************************;* UPBF * ; UPBF * . EDRVSERE PRE ARSTEISEG REDUSUNL AL; UPBF * ; UPBF * F TERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC EMT BSRE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM BSR$ AF: BSR$ TA ; PRIORITY LEVEL EROR = 10 ; ERROR CODE DATA = 14 ; DATA BUFFER ; ; ASCII CHARACTER CODES EQSN =075 ; EQUAL SIGN SCOL =073 ; SEMI-COLON COMA =054 ; COMMA RPAR =051 ; RIGHT PARENTHESIS SPAC =040 ; SPACE LPAR =050 ; LEFT PARENTHESIS DOLR = 44 ; DOLLAR SIGN CODE SWR = 177570 ; SWITCH REGISTER TIMLM = 2000 ; TIME LIMIT IN SECONDS ; ; ROS SET READ AND WRITE ACCESS .BYTE TSEND-TSSTK/100 ; TPDR 0 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR 3-5 .WORD 0,0 ; TPDR 6-7 .WORD TSSTK,0,0 ; TPAR 0-2 .WORD 0,0,0 ; TPAR 3-5 .WORD 0,0 ; TPAR 6-7 . = . + 14 .CSECT CTBFUP TSSTK: .WORD $BFPFL .BLKW BFSTSZ-1 ; ; TBFUPE: ; TASK BFUP ENTRY MOV R0,R5 KBIS D: EDUSS NETIOUBRSU; UPBF * ; UPBF * . 0ORCTSEN INDOU FRYNT E ; UPBFS*ESNL(UY TRENY ORCTREDIS T'ENEMELE THH IT WORCTSES INTAON CUFAB ; UPBF * NDOU FOT NNTMELE EFF IET SIT BUSATSTZ ; UPBF * D UNFOT NOT ENEMELF I 0 = ; UPBF * D UNFOF IRYNT EOFE YT BUSATSTF OERFFBUN ISSREDD A =R0 ; UPBF *F)BU AORP,CALER,4,ERRWD,EORS,NRRS .PAGE ; FORWARD SPACE FILE CALL MACRO .MACRO FSF$ IOCL,CLER,LUN,ERWD,ERES,NRES .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC MOV #IOCL,-(SP) ;  EMT NUMBERS TSKDEF = 10 ; DEFAULT OR BATCH TASK NUMBER ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFINIT = 36 BFENTR = 37 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS EXIT = 4 ;EMT FOR CALL TO MONITOR EXIT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII AS ; GET COMO BLOCK ADDRESS EMT ROSGET MOV BFFNCD(R5),R1 ; LOAD FUNCTION CODE JMP @TBFJT(R1) TBFJT: .WORD BFINIT ; FUNCTION JUMP TABLE .WORD BFENTR .WORD BFOPEN .WORD BFCLOS .WORD BFDELT .PAGE ; TABLES, LISTS, ETC BFUP ; BFUP ; DISKI/O LIST F BU(ZR FEUF BEDAMEXT AS LINL EL CSTLAF OSSREDD A =R2 ; UPBF * Y TRENY ORCTREDIS NTMELE EEDCIPE SNGNIAINTCO# R TOEC S =R3 ; UPBF * S: ILTTEGEM RO FUTTPOU; UPBF * ; UPBF * LEFIS ROR FOP TUSET IS LIOSKDI ; UPBF * F BU ZHE TINO ER ZORCTSE ; UPBF * CKLO BNSIOATICUNMMCOF OLPLACE LIST ADDRESS ON STACK EMT FSFE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM FSF$ AO: FSF$ TB,CALER,4,ERRWD,EORS,NRRS .PAGE ; BACK SPACE FILE CALL MACRO .MACRO BSF$ IOCL,CLER,LUN,ERWD,ERES,NRES .LIST MEB CBIN = 17 DISCIO = 23 ;EMT FOR DISC I/O ROUTINE CREAD = 24 ;EMT FOR CARD READER LPRNTR = 25 ;EMT FOR LINE PRINTER CKPT = 27 NOCKPT = 30 ;EMT FOR NO CHECKPOINT ROUTINE GETIME = 31 ;EMT FOR GET TIME GEDATE = 32 ;EMT FOR GET DATE R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE =  BFUP .BOUND ; FORCE ONTO A DOUBLE WORD BOUNDARY BFUP DSKLST: .WORD 1 ; THREAD WORD BFUP .BYTE 1 ; DEVICE CODE BFUP .BYTE 2 ; EXIT TYPE .WORD 0 ; NO EXIT ROUTINE BFUP .BYTE 0 ; NO ERROR TASK BFUP .BYTE NDPRT1 ; LOWEST DISK PRSSREDD A =R5 ; UPBF * : IST ELET GTOT PUIN; UPBF * ; UPBF * ).PETY& E AM(NT ENEMELN VEGIA R FOY ORCTREDI; UPBF * UPBFD IEIFECSPA N CA STOP FU BBYD SE UIST ELET GNETIOUBRSUE TH; UPBF * ; UPBF**********************************************************************;* UPBF H.IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV #ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT BSFE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC 51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" ROSGET = 56 ; EMT TO GET ACCESS TO ROS ADDRESS SPACE CORLOD = 74 ; EMT TO GET ADDRESS OF MONITOR REF TABLE SDRITE = 76 ; SPECIAL SYSTEM DISK FILE RITER .PAGE ; TASK HEADER FOR TSKNTR TSKHD: .WORD 1 ; THREAD .WORD 64. ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTIORITY BFUP DSKERR: .WORD 0 ; ERROR WORD BFUP .WORD 0 ; DISCIO USE BFUP DSKADD: .WORD 0 ; ADDRESS OF BUFFER FOR TRANSFER BFUP .WORD 0 ; ASR 6 BFUP .WORD 0 ; ADDRESS OF BUFFER (VIRTUAL) FOR KT11C ; BFUP ; DISK BUFFER FO E AG.P UPBF . NEDOL AL; F DBEN BR UPBF R ROER; DKERBF E BN UPBF 0.R TOED SDOO TREHE; F KBIS,DPC R JS: 20SBCL UPBF F.BU AEDUSF ILYON. DD AUFZBT SE; DDKADSF,BU#Z V MO UPBF R ROER; DKERBF E BN UPBF LTTEGEM RO FUPT SET IS L/O I -NO; F KBIS,DPC D,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB .ENDM BSF$ AG: BSF$ TA,CALER,4,ERRWD,EORS,NRRS .PAGE ; WRITE END OF FILE CALL MACRO .MACRO EOF$ IOCL,CLER,LUN,ERWD,ERES,NRES .LIST MEB .IF NB IOCL&CLER .IF NB LUN MOV #LUN,IOCL+$LUN ; SET LOGICAL UNIT NUMBER .ENDC .IF NB ERES MOV E PRIBKG ; PRIORITY .WORD TSKNTR ; ENTRY POINT .WORD 0,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD $OVTYP ; CUP STATUS .WORD 0,0 ; STACK POINTER / ARG .BYTE 6 ; SET READ AND WRITE ACCESS .BYTE TSKND-TSKBG/100 ; TPDR 0 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR 3-5 .WORD 0,0 ; TPDRR SECTOR 0 (ALWAYS) BFUP ZBUF: .WORD 0 ; ROS FILE ID BFUP .BYTE 0 ; USE SPECIFIED SECTOR BFUP ZFUN: .BYTE 0 ; TRANSFER FUNCTION BFUP .WORD 0,0,0 ; RESERVED FOR DISCIO USE BFUP ZSEC: .WORD 0 ; SECTOR 0 - ALWAYS BFUP .WORD DSKSIZ ; # WORDS TO TRANSFER - 1 R JS UPBF O.LS ATERI WOR FUFABT SE; UNAFN,FU#W VBMO UPBF S YE; 20SBCL Q BE UPBF ? 0ORCTSEN ILL AT,RSFI- K IS DTO; R3 T TS UPBF . TERI WDOO TET S -NEDOS IETRENL AL; UNZFN,FU#W VBMO UPBF Y ORCTREDIN IUSATSTR EACL; 0)(R RBCL: 40SACL UPBF ADREN-PE OOR FREHE; ATST+FUFZB CBDE: 30SACL UPBF @#ERES,IOCL+$ER ; SET ERROR RESUME LOCATION .ENDC .IF NB NRES MOV #NRES,IOCL+$NR ; SET NORMAL RESUME LOCATION .ENDC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT EOFE$ MOV (SP)+,ERWD ; SAVE RETURNED CODE IN LIST BEQ . + 4 JSR PC,CLER ; RETURN JUMP TO ERROR ROUTINE .IFF # ; THE FIRST TWO MACRO PARAMETERS MUST BE DEFINED .ENDC .NLIST MEB  6-7 .WORD TSKBG,0,0 ; TPAR O-2 .WORD 0,0,0 ; TPAR 3-5 .WORD 0,0 ; TPAR 6-7 . = . + 14 .CSECT TSKNTC TSKBG: .WORD 0 .BLKW 177 .ASCII / / FWASC: .WORD 0,0,0 ; TEMTORARY ASCII BUFFER .WORD 0 LWASC = . FWRAD: .WORD 0,0,0 ; TEMTORARY RAD50 BUFFER LWRAD = . DACRD: .WORD 80. ; NUMBER OF CHARACTERS TO READ .WORD 0 ; NUMBER ACTUALLY READ FWSECTOR BFUP .BLKW DSKSIZ ; RESERVE THE BUFFER BFUP ZBFEND =.-2 ; ADDRESS OF LAST CELL IN ZBUF BFUP ; BFUP ; DISK BUFFER FOR ALL OTHER SECTORS BFUP ABUF: .WORD 0 ; ROS FILE ID BFUP .BYTE 0 ; USE SPECIFIED SECTOR BFUP AFUN: .BYTE 0 ; 40SACL BR UPBFNTOU CORCTSEY ORCTREDIT ENEMCRIN- S YE; C RSDI+FUFZB C IN UPBF . NO; 40SACL E BN UPBF L?UL FORCTSES I -LLFUT NOY ORCTREDI; UMDNFNF+BU,Z#7 TBBI: 20SACL UPBF ; 40SACL BR UPBF 1 =-EC SIR DET S -LLFUY ORCTREDI; C RSDI+FUFZB1,#- V MO UPBF L UL FOT NR.DIF IIPSK; 20SACL E BN< .ENDM EOF$ AH: EOF$ TA,CALER,4,ERRWD,EORS,NRRS NRRS: NOP ; NORMAL RESUME EORS: NOP ; ERROR RESUME CALER: NOP ; CALL ERROR THRE: .WORD 3 ERRWD: .WORD 240 ; ERROR WORD EA: .WORD 0 NA: .WORD 0 BU: .WORD 0,0,0 .END CRD: .BLKW 40. ; BUFFER LWCRD: .WORD 0 ; LAST WORD OF INPUT TABLE ; TSKNO: .WORD TSKDEF ; TASK NUMBER TSKAC: .BYTE 0 ; TASK ACCESS STATUS HPRIR: .BYTE 0 ; PRIORITY MAXTM: .WORD 0 ; MAXIMUM TIME DEVPG: .WORD 0 ; DEVICE PAGE FLAG FILID: .WORD 0 ; FILE IDENTIFICATION NUMBER ; ; CARD READER LIST CSIOB: IOCBM 2,2,0,0,3,DACRD TYIOB: IOCBM 0,2,0,0,0,TYMES TYMES: .WORD 14,0 ; TRANSFER FUNCTION BFUP .WORD 0,0,0 ; RESERVED FOR DISCIO USE BFUP ASEC: .WORD 0 ; SECTOR # OF TRANSFER BFUP .WORD DSKSIZ ; # WORDS TO TRANSFER - 1 SECTOR BFUP .BLKW DSKSIZ ; RESERVE THE BUFFER BFUP ABFEND =.-2 ; ADDRESS OF LAST CELL IN ABUF. BFUP ; UPBF ERNTOU C #RYTOECIR DTEDAUP; M NUND+FUFZB CBIN UPBF E IL FONS TUTA STERI WVEMORE; ATST+FUFZBT,WRTF#S CBBI UPBFERNTOI PORCTSEE IL FTOD ADD AN; C SEFNF+BU,Z5)(RTHLNBF D AD UPBFY ORCTREDIN IEN LM.LE EUT P);R0T(TADSH-NTLE,D5)(RTHLNBF V MO UPBF ORRR E -NO; 10ERBF E BN UPBF TERI-WENOPT IISN HE T -NO; 0)(RE,USTX#S PBCM UPBF 8L P S T A T ** ;* ** ;* THIS SUBROUTINE READS THE STATUS OF THE INDICATED LINE ** ;* PRINTER, THEN SETS THE CONDITION CODES ACCORDINGLY: ** ;* ** ;* ZERO = EVERYTHING'S ALRIGHT ** ;* < ZERO = FATAL ERROR ** ;* > ZERO .ASCII /TSKNTR MSG/ TYNUM: .BYTE 40,40 ; SET ERROR NUMBER CODE .BOUND BFBLK1: .WORD 0 ; STATUS CODE .WORD 0 ; ID OF ROS FILE BFNAM: .WORD 0,0 ; ELEMENT NAME BFSTAT: .BYTE 0 BFTYPE: .BYTE 1 ; ELEMENT TYPE BFSECT: .WORD 0 ; RELATIVE START SECTOR BFSIZE: .WORD 0 ; LENGTH IN SECTORS .BOUND TXTLST: .WORD 1 .BYTE 1,2 ; DISC / S 5/14/73 ; FLAGS 5/14/73 .PAGE ; BFUP ;***********************************************************************BFUP ; *BFUP ; BFINIT IS USED TO INITIALIZE A ROS FILE INTO A BFUP FILE. *BFUP ; THIS IS DONE BY INITIALIZING THE DIRECTORY AND ENTRY 0 IN IT. *BFUP ; THE PROCEEDURE IS: S YE; 30SACL Q BE UPBF ADREN-PE O =USATST; 0)(RN,PETO#S PBCM UPBF D UNFOT NO; 06ERBF Q BE UPBF . NTMELE EHE TNDFIN CAE WIFE SE; T ELET,GPC R JS UPBF . UPBFT NO.-NO; 02ERBF E BN UPBF OKE IL FHE TIS; K ECIL,FPC R JS UPBF T INPOY TREN; =. OSCL4 = OPERATOR ACTION REQUIRED ** ;* ** ;* ON ENTRY, R3 MUST CONTAIN L/P INDEX. R4 IS DESTROYED ** ;* ** ;********************************************************************** ; ; LPSTAT: .IFZ $DIVA .IFZ NLP-1 MOV @#STAT.1,R4 .ENDC .IFG NLP-1 MOV @LPSTS(R3)USPEND .WORD 0 ; EXIT .BYTE 0,3 ; ERROR / LEVEL TXTERR: .WORD 0,0 ; ERROR WORD / RESERVED .WORD TXTHED ; BUFFER HEADER ADDRESS .WORD 0,0 ; TXTHED: .WORD $BCHID ; FILE I D FOR BATCH FILE .BYTE 0 ; RELATIVE SECTOR TXTR.W: .BYTE 0 .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ OR WRITE TXTCNT: .WORD 100 ; # OF WORDS T *BFUP ; 1) READ SECTOR 0 *BFUP ; 2) IF NOT A BFUP FILE, ZERO SECTORS 1 - 33 *BFUP ; 3) IF A BFUP FILE ONLY ZERO SECTORS IF STATUS BYTE OF COM *BFUP ; BLOCK IS ONE. IF THE STATUS = 0, RETURN TO THE CALLER. *BFUP ; 4) BUILD ENTRY ZERO *BFUP ; BF UPBF**********************************************************************;* UPBF * ; UPBF * . EDORSTREE ARS ERSTGIREL AL; UPBF * ; UPBF * F KBIS DT,ELET GK,ECIL FR,SHPU: EDUSS NETIOUBRSU; UPBF * ; UPBF * 0,R4 ;GET STATUS .ENDC CLR -(SP) ;SET 'OK' CONDITION BIT #PARITY,R4 ;TEST FOR PARITY ERROR BNE LPSA20 ;BRANCH IF PRESENT BIT #PLOW,R4 ; BNE LPSA10 ;BRANCH IF PAPER LOW BIT #ONLINE,R4 BEQ LPSA10 ;BRANCH IF ONLINE ; LPSA00: TST (SP)+ ;SET CONDITION CODE = OK RTS PC ;THEN EXIT ; LPSA10: INC O TRANSFER TXTBK1: .BLKW 100 ; BUFFER ; .BOUND DFLIST: .WORD 1 ; "DEFINE FILE" LIST .BYTE 0,0 ; ERROR , ERRTSK .WORD 0 ; IFD .WORD 0 ; FILE I.D. .WORD 0 ; FILE TYPE .WORD 0 ; # SECTORS IN FILE ; ROSLNK COMMAND LIST RKLCL: .RAD50 /ACC/ ; ACCESS STATUS .RAD50 /DEV/ ; DEVICE PAGE .RAD50 /END/  *BFUP ; THE FOLLOWING SUBROUTINES ARE USED: PUSHR, POPR, FILECK *BFUP ; ALL REGISTERS ARE PRESERVED. *BFUP ; *BFUP ;***********************************************************************BFUP BFINIT =. ; ENTRY POINT BFUP JSR PC,FILECK ; GO MAKE SURE WE HAVE A FILE BFUP BNE INIT10 T.ENEMEL; UPBF * HE TOFH GTEN LHE TLYPPSUT US MERUSE TH, TRENBFY BEDENOPT ENEMEL; UPBF *N ANGSILO CENWH D.NEURET RBEL IL WDECOR ROERD AN, NDOU FBET NON CA; UPBF * T ENEMELE THF I. USATSTS K'AS TND A'SNTMELE EHE TTHBOE NGHA CLLWI; UPBF *ISTH T.ENEMELN AG'INENOPUN 'OFS ANMEH IT WERUSE THS DEVIRO POSCLBF; UPBF * ; UPBF**********************************************************************;* UP, (SP)+ ;OPERATOR ACTION REQUIRED RTS PC ;EXIT ; LPSA20: DEC (SP)+ ;SET PARITY ERROR INDICATOR RTS PC ;AND EXIT .ENDC .IFNZ $DIVA CLR -(SP) ; CLEAR ERROR FLAG TST @#LPS BPL LPSA00 INC (SP) ;ERROR LPSA00: TST @#LPB ;TEST READY BMI LPSA10 INC (SP) ;ERROR LP ; END .RAD50 /FID/ ; FILE I.D. .RAD50 /NAM/ ; NAME .RAD50 /PRI/ ; PRIORITY .RAD50 /TIM/ ; TIME LIMIT IN SECONDS .RAD50 /TSK/ ; TASK NUMBER .WORD 0 ; ; ROSLNK COMMAND PROCESSOR JUMP TABLE RLKJT: .WORD RLACC ; ACCESS STATUS .WORD RLDEV ; DEVICE PAGE .WORD RLEND ; END .WORD RLFID ; FILE I.D. #  ; NOT A ROS/BFUP FILE BFUP TSTB BFSTAT(R5) ; IS REINITIALZATION REQUESTED BFUP BEQ INIT99 ; NO. - ALL DONE BFUP INIT10: ; HERE TO ZERO SECTORS 32 - 1 BFUP ; FIRST BUILD A BUFFER OF ZEROS. BFUP MOV #ZBFEND+2,R1 ; ADDRESS OF LAST WORD +2 TO ZERO. BFUP INIT20: CLR -(R1) ; ZERO THE BUFFER BF E AG.P UPBF NEDOL AL; F DBEN BR UPBF R ROER; DKERBF E BN UPBF T. IDO; F KBIS,DPC R JS UPBF 0.R TOEC SUTTPOUO TREHE; UNZFN,FU#W VBMO: 20ENOP UPBF . UFABD SE UFF ISSREDD AUFZBT SE; DDKADSF,BU#Z V MO UPBF R ROER; (SA10: BIT @#LPB,#40000 ;TEST RUN BNE LPSA20 INC (SP) ;ERROR LPSA20: TST (SP)+ ; POP STATUS RTS PC .ENDC .PAGE ;********************************************************************** ;* ** ;* L P S I O ** ;* .WORD RLNAM ; NAME .WORD RLPRI ; PRIORITY .WORD RLTIM ; TIME LIMIT .WORD RLTSK ; TASK NUMBER ; ; TASK ACCESS STATUS MNEMONICS AND ASSOCIATED BIT SETTINGS ACCTB: .RAD50 /BCH/ ; BATCH TASK .WORD 1 .RAD50 /BCF/ ; FLOATING POINT BATCH TASK .WORD 11 .RAD50 /BKG/ ; BACKGROUND TASK .WORD 2 .RAD50 /BKF/ ; FLOATING POINT BACKGROUND TASK .WORD 12 BFUP CMP #ZBUF+BHEAD,R1 ; DONE YET? BFUP BLO INIT20 ; NO. BFUP MOV #ZBUF,DSKADD ; YES - NOW LET'S ZERO THE DISK. BFUP MOVB #WFUN,ZFUN ; SET DISK FUNCTION BFUP MOV #DIRMAX,ZSEC ; SET SECTOR TO TRANSFER -BEGIN WITH 32BFUP INIT30: JSR PC,DISKBF ; GO ZERO A SECTOR BFUP BEQ INIT50 DKERBF E BN UPBF . DDKADSN IUFBI#A O.I/O DGO; F KBIS,DPC R JS UPBF UFAB- R TOEC SRYTOECIR DUTTPOU; UNAFN,FU#W VBMO UPBF S YE; 20ENOP Q BE UPBF 0?R TOEC SINL AL; R3 TBTS UPBF K.OCBLM COO NT ITHNGLET SE; ) R5H(NTFL,B0)(R V MO UPBF K OCBLM COO NT IORCTSET ARSTT SE; ) R5C(SEBF+,0)(R V MO UPBF $ ** ;* THIS SUBROUTINE PERFORMS THE ACTUAL OUTPUT FUNCTION TO ** ;* START THE LINE PRINTER. AFTERWARDS, THE TIMER MODULE ** ;* IS ADJUSTED FOR A ONE SECOND TIMEOUT. IF THE MODULE ** ;* ISN'T QUEUED, IT WILL BE WHEN LPSIO GETS DONE WITH IT. ** ;* REQUIREMENTS ON ENTRY: ** ;* ** ;* R4 = L/P WORD COUNT  .RAD50 /FCD/ ; FOREGROUND TASK .WORD 4 .RAD50 /FGF/ ; FLOATING POINT FOREGROUND TASK .WORD 14 .RAD50 /SYS/ ; SYSTEM TASK .WORD 20 .RAD50 /SYF/ ; FLOATING POINT SYSTEM TASK .WORD 30 .WORD 0 ; END FLAG ; BSZTAB: ;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE SIZES FOR EACH PRIORITY ;THE SIGN BIT IS SET IF THE PRIORITY IS DYNAMIC, I.E. NOT FIXED ;NOR TIME-; NO DISC I/O ERRORS. BFUP CMP #9.,DSKERR ; FILE FULL? BFUP BEQ INIT97 ; YES BFUP BR INIT98 ; ALL OTHER ERRORS. BFUP INIT50: DEC ZSEC ; DECREMENT SECTOR COUNT BFUP BGT INIT30 ; GO ZERO NEW SECTOR IF NOT #0. BFUP BLT INIT99 ; HAVE NOW DONE #0, GO HOME BF ORCTSET ARSTO TNTOI PTO0 RMPBU; R0T,TADSC-SEST#D D AD UPBF USATST. EMELT SE; 0)(RN,PETO#S VBMO: 10ENOP UPBF F.UFSTR ROERO DGOD AN; 12ERBF BR UPBF . ERNTOU CT SERE. NO; ATST+FUFZB CBDE UPBF )?ADRE (OR FREMOY ANN PE OWEN CA; 10ENOP L BP UPBFE IL FINN PE OASS TUTA SET S. ITD UNFO; ATST+FUFZB CBIN UPBF D UNFOT NO;  ** ;* R3 = L/P INDEX ** ;* R0 = LIST ADDRESS ** ;* IF THE OPERATOR HAS SO NOTIFIED, THE L/P OUTPUT WILL BE ** ;* DIRECTED TO THE TELETYPE VIA TTYOUT. IN THIS CASE, THE ** ;* TIMER WILL NOT BE STARTED. ** ;* ** ;***********************************************SLICE. .WORD PRIP01&100000!$PS001 .WORD PRIP02&100000!$PS002 .WORD PRIP03&100000!$PS003 .WORD PRIP04&100000!$PS004 .WORD PRIP05&100000!$PS005 .WORD PRIP06&100000!$PS006 .WORD PRIP07&100000!$PS007 .WORD PRIP08&100000!$PS008 .WORD PRIP09&100000!$PS009 .WORD PRIP10&100000!$PS010 .WORD PRIP11&100000!$PS011 .WORD PRIP12&100000!$PS012 .WORD PRIP13&100000!$PS013 UP MOV #ZBUF+BHEAD,R2 ; HERE TO SETUP ENTRY ZERO IN SECTOR 0. BFUP ; R2 HAS ADDRESS OF FIRST WORD. BFUP MOV BFRFIL(R5),(R2)+; SETUP ENTRY 0. FIRST PUT FILE ID IN ITBFUP MOV #1,(R2)+ ; THEN SET # OF NEXT DIRECTORY ENTRY. BFUP ; AND FILE'S STATUS (0). THE SECTOR OF BFUP CLR (R2)+ ; DIRECTORY ENTRY IS ZERO. BFUP MOV #DIRMAX,(R2)+ ; SECT 06ERBF Q BE UPBF NTMELE EEDSTUEEQ RNDFIN CAE WIFE SE; T ELET,GPC R JS UPBF . AD B -LEFIS ROA T NO; 02ERBF E BN UPBF C.ET, LEFID LIVAA S HI TIS; K ECIL,FPC R JS UPBF T INPOY TREN; =. ENOPBF UPBF**********************************************************************;* UPBF * ; UPBF * *********************** ; ; LPSIO: .IFNZ LPBACK TST LPTTY(R3) ;SEE IF TTY IS TO BE USED BNE LPOB00 ;BRANCH IF YES .ENDC .IFZ $DIVA MOV R4,LPWORD(R3) NEG R4 ;L/P NEEDS NEGATIVE WORD COUNT ; LPO000: .IFZ NLP-1 ;THIS CODE IS FOR ONLY L/P IN SYSTEM MOV R4,@#CNT.1 ;STORE LINE PRINTER WORD COUNT TST LPMODE ;SEE WHICH MODE WE'R.WORD PRIP14&100000!$PS014 .WORD PRIP15&100000!$PS015 .WORD PRIP16&100000!$PS016 .PAGE TSKNTR: ; TASK ENTER MOV #LWCRD,R1 ; SET CHARACTER POINTER SO A CARD WILL BE READ RLKGC: JSR PC,GWORD ; GET NEXT COMMAND MOV #FWASC,-(SP) ; ASCII BUFFER ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,R2 MOV #RKLCL,R4 ; SET POINTER TO COMMANDOR # OF NEXT ELEMENT. BFUP CMP (R2)+,(R2)+ ; SKIP 2 UNUSED WORDS - THEY ARE ZERO. BFUP MOV (PC)+,(R2)+ ; SET TWO WORD FLAG INDICATING FILE IS BFUP .RAD50 /.BF/ ; SET UP FOR BFUP. BFUP MOV (PC)+,(R2)+ ; BFUP .RAD50 /UP./ ; BFUP BR INIT30 ; GO WRITE SECTOR ZERO OUT. BFUP IN . EDORSTREE ARS ERSTGIREL AL; UPBF * ; UPBF * HRUS PK,ECIL FF,KBIS DF,DBEN, LTTEGE: EDUSS NETIOUBRSU; UPBF * ; UPBF * K.OCBLS ONTICANIMUOM CHE TIA VERUSE THO TEDRNTURE; UPBF * RE ATHNGLED ANR TOEC SNGTIARSTE THD AN, LEABILVA AIFD EA ROR FENOP; UPBF * ASD KEAR MIST ENEMELE TH, EDNTMERENC IISE IL FHEE IN BEQ LPOA00 ;BRANCH IF CARRIAGE CONTROL MOV #AUTOLF,@#LFRG.1 ;OTHERWISE, ISSUE AUTO LINE FEED BR LPOA10 ; LPOA00: CLR @#LFRG.1 ;SET TO CARRIAGE CONTROL MODE LPOA10: MOV #LPBUF,@#LPDT.1 ;STORE MEMORY BUFFER ADDRESS MOV #SB!IE!ID,@#CMD.1 ;START'ER UP .ENDC ; ; .IFG NLP-1 ;AND NOW FOR THE CODE FOR > 1 L/P IN SYSTEM MOV R4,@LPWDCT(R3)  LIST RLKA1: TST (R4) ; AT END OF LIST BNE RLKA2 ;YES, BRANCH MOV #61,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLKA2: CMP (R4)+,R2 ;NO, TEST COMMAND BNE RLKA1 ; BRANCH IF NOT A COMMAND SUB #RKLCL,R4 ; DETERMINE COMMAND INDEX SUB #2,R4 ; R4=R4-2 JMP @RLKJT(R4) ; JUMP TO COMMAND PROCESSOR RLKER: MOVBIT97: JMP BFER07 ; TO FAR FOR BRANCHES BFUP INIT98: JMP BFERDK ; BFUP INIT99: JMP ENDBF ; BFUP ;***********************************************************************BFUP ; *BFUP ; BFENTR PROVIDES THE USER WITH THE MEANS TO MAKE A NEW ENTRY IN A *BFUP ; BFUP FILES DIRECTORY AND AT THE SAME TIME TINS NTMELE EENOP; UPBF *F O #HE TD,UNFOE BAN CNTMELE EEDSTUEEQ RHE TND ALEFIP FU/BOS R AIS; UPBF * LEFID IEIFECSPE THF I. AMGRRO PRSSE U ATOT PUUT OOR FNTMELE EUPBF; UPBF * NGTIISEXN ANGNIPE OOFS ANMEH IT WERUSH TCBAE THS DEVIRO PENOPBF; UPBF * ; UPBF**********************************************************************;* UPBF E AG.P ITEX T EM  ;STORE WORD COUNT TST LPMODE(R3) ;SEE WHICH MODE WE'RE IN BEQ LPOA00 ;BRANCH IF CARRIAGE CONTROL MOV #AUTOLF,@LPFEED(R3) ;OTHERWISE, ISSUE AUTO LINE FEED BR LPOA10 ; LPOA00: CLR @LPFEED(R3) ;SET TO CARRIAGE CONTROL MODE ; LPOA10: MOV LPBUFR(R3),@LPADDR(R3) ;STORE BUFFER MEMORY ADDRESS MOV #SB!ID!IE,@LPCMD(R3) ;REV UP THE OLE ENGINE, BOYS .ENDC  R3,TYNUM+1 ; SET ERROR CODE TO BE PRINTED MOV #TYIOB,-(SP) ; LIST ADDRESS EMT TTYOUT EMT EXIT .PAGE ; PROCESS TASK ACCESS STATUS RLACC: TST R3 ; EQUAL SIGN DELIMITER BNE RLAC1 JSR PC,GWORD ;GET TASK ACCESS STATUS CMP R3,#1 ; TEST FOR SEMI-COLON BEQ RLAC2 ; RLAC1: MOV #62,R3 ; SET ERROR CODE BR RLKER OPENING THE NEW ELEMENT *BFUP ; AND FILE FOR INPUT FROM THE USERS PROGRAM. *BFUP ; *BFUP ; THE BFUP COMMUNICATIONS BLOCK SPECIFIES THE ELEMENT NAME, TYPE, *BFUP ; STATUS, AND ROS FILE ID. THE STATING SETOR IS RETURNED IN THE BLOCK *BFUP ; FOR THE USER'S I/O. *BFUP ; *BFUP ; BFENTR ITEXBF T EM 738/3/ E OR CTOINE RCFO; PTCKNO T EM UPBF T INPOY TREN; =. F DBEN UPBF**********************************************************************;* UPBF * ; UPBF * R OP P: EDUSS NETIOUBRSU; UPBF * ; UPBF *  .ENDC .IFNZ $DIVA CLR @#LPS ;CLEAR INTERRUPT ENABLE MOV #LPBUF,R4 ;GET ADDRESS OF ADD R3,R4 ;LP BUFFER LPOA00: MOVB (R4)+,@#LPB ;MOVE CHAR OUT TO PRINTER NOP ; CLOCK IT OUT TSTB @#LPS BMI LPOA00 BIS #100,@#LPS ; NOT DONE, BUFFER BEING PRINTER ; ; ENABLE INTERRUPT AND DONE HERE .ENDC .I ; ERROR ROUTINE RLAC2: MOV #FWASC,-(SP) MOV #FWRAD,-(SP) EMT R50PAK MOV FWRAD,R2 ; PLACE ACCESS CODE IN R2 MOV #ACCTB-2,R4 ; SET POINTER TO TABLE - 2 RLAC3: CMP #30,(R4)+ ; TEST FOR END OF TABLE BEQ RLAC1 ; BRANCH IF AT END OF TABLE CMP (R4)+,R2 ; COMPAIR INPUT COMMAND WITH TABLE ENTRY BNE RLAC3 ; TRY NEXT ENTRY IN TABLE MOVB (R4),T MARKS THE FILE AND ELEMENT AS OPEN FOR INPUT. *BFUP ; *BFUP ; SUBROUTINES USED ARE: PUSHR,POPR, FILECK *BFUP ; ALL REGISTERS ARE RESTORED *BFUP ; *BFUP ;***********************************************************************BFUP BFENTR =. ; ENTRY POINT '.BFND EBR ' AOR' BFND EMP'JA R HEIT EISE AGNKLIE TH; UPBF * ; UPBF * ERUSH TCBAE THO TRETOES R3) ; UPBF * G LA FSYBUP FU BHE TARLE C2) ; UPBF * R TEISEG RRETOES R1) ; UPBF * L:IL WIT S.NETIOU RUPBFL ALR FOG INOSCLN MOOM C AASD SE UISF DBEN; UPBF * FZ NLP-1 ;NOW, GET ADDRESS OF TIMER MODULE MOV #LPMOD,R4 .ENDC .IFNZ NLP-1 ;THIS PART OF THE CODE PERFORMS MOV LPMDAD(R3),R4 .ENDC ; MOV #LPTIME,JSRSUB(R4) MOV R4,-(SP) MOV #$1SEC,-(SP) ;DELAY ONE SECOND JSR PC,IOQTME ;GO START TIMER TST (SP)+ RTS PC ;UND GO HOME, MEIN HERR. .PAGE ; ; ; SKAC ; SAVE ACCESS CODE JMP RLKGC ; PROCESS NEXT COMMAND ; ; PROCESS DEVICE PAGE COMMAND RLDEV: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLDEV1 MOV #71,R3 ; SET ERROR CODE BR RLKER RLDEV1: INC DEVPG ; SET DEVICE PAGE FLAG BR RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS END COMMAND RLEND: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ  BFUP JSR PC,FILECK ; MAKE SURE ROS/BFUP FILE BFUP BNE ENTA99 ; BRANCH IF NOT A ROS/BFUP FILE BFUP ; ZBUF NOW HAS SECTOR 0 IN IT. BFUP TSTB ZBUF+FSTAT ; CHECK FILE'S STATUS - ONLY ONE WRITE BFUP BMI ENTA98 ; AT A TIME. BFUP JSR PC,GETELT ; SEE IF CAN FIND EXISTING ELEMENT. BFUP BEQ ; UPBF**********************************************************************;* UPBF E AG.P UPBF TEBYW LON IDECOR ROERP FU BUT PENTH; 09ERBF BR UPBF8)T(GIDIN VE ETOT IFSHS-TUTA SRR ESKDI; 5)(R L AS: DKERBF UPBF R SE UTOK AC BGO; F DBEN BR UPBF T ISEXT N'ESDOD IEIFECSPS ALEFIS RO; 5)(R CBIN: 01ERBF UPBF EDIZALTINI I THIS SECTION DIVERTS THE LINE PRINTER OUTPUT TO THE SYSTEM ; TELETYPE. UNLESS, OF COURSE, THIS OPTION WASN'T GENERATED ; INTO THE SYSTEM. IN WHICH CASE, WHAT ARE YOU EVEN DOING ; HERE? ; ; .IFNZ LPBACK ; ; LPOB00: MOV R5,-(SP) ;SAVE R5 MOV LPBUFR(R3),R4 ;FIRST, SAVE LIST IN LPBUF MOV #7,R5 ; LPOB10: MOV (R0)+,(R4)+ .IFZ $1145 DEC R5 BGT LPOB10 .ENDC  RLED2 RLED1: MOV #63,R3 ; SET ERROR CODE JMP RLKER ; BR TO ERROR ROUTINE RLED2: CMP TSKNO,TSKDEF ; IS THIS A BATCH TASK BEQ RLED3 ;******* CHANGE WHEN KEY SWITCH IS INSTALLED ********************** CMP @#SWR,#1 BEQ RLED3 CMP @#SWR,#2 BNE RLED1 RLED3: MOV #BFBLK1,-(SP) EMT ROSGET ; GET ACCESS TO ROS ADDRESS SPACE (ASR 4-6) EMT BFOPEN  ENTA30 ; SKIP NEXT BLOCK IF NOT FOUND BFUP TSTB (R0) ; IS ELEMENT FREE BFUP BNE BFER11 ; NO - CAN'T DELETE IT THEN. BFUP MOVB #STDELT,(R0) ; SET DELETED STATUS-R0 POINTS FROM GET BFUP TSTB R3 ; ALL IN SECTOR ZERO? BFUP BEQ ENTA30 ; YES BFUP MOVB #WFUN,AFUN ; NO - MUST WRITE THIS SUPBFT NOE IL FOS RISTH; 5)(R CBIN: 02ERBF UPBFEDATRE CNGEI BNTMELE EAS HDYEALR ALEFI; 5)(R CBIN: 03ERBF UPBF E OD MVESILUXC EINY ADREALT ENEMEL; 5)(R CBIN: 04ERBF UPBF . SE UVESILUXC EOR FEDGNSIAST ENEMEL; 5)(R CBIN: 05ERBF UPBF T ISEXT N'ESDOT ENEMELT ESQURE; 5)(R CBIN: 06ERBF UPBF L UL FLEFIS RO; 5)(R CBIN: 07ERBF UPBFMETIA T AERUSE ONY NL O -SYBUS IUPBF; 5)(R  .IFNZ $1145 SOB R5,LPOB10 .ENDC SUB #14.,R0 MOV R3,R4 ;THEN SET UP LIST FOR TTY USE ASL R4 ASL R4 ASL R4 ADD #LPDONE,R4 MOV R4,$EXIT(R0) ;STORE I/O COMPLETE ADDRESS MOV #3*256.,DEVICE(R0) ;SET DEVICE = 0, TYPE = 3 CLRB LEVEL(R0) ;PRIORITY 0 MOV #1,(R0) ;MAKE LIST THREADABLE MOV R0,-(SP) MOV BFSECT,TXTSEC ; SET TO READ IN TASK HEADER INFO CLRB TXTR.W ; SET READ FLAG JSR PC,TEXTIO MOV TSKNO,TXTBK1+2 ; MOVE TASK NUMBER MOV TSKAC,TXTBK1+4 ; MOVE PRIORITY AND TASK ACCESS STSATUS MOV HPRIR,R2 TSTB PPTAB+$ROSM(R2) ; IS THIS A TIME-SLICING PRIORITY BLE RLD04 ; NO TST MAXTM ; YES EXECUTION TIME MUST BE SPECIFIED BLE RLKER RLD04: ECTOR TO DISK. BFUP JSR PC,DISKBF ; SECTOR # STILL SET - GO DO I/O BFUP BNE INIT98 ; NO - ERROR BFUP ENTA30: ; OLD ELEMENT NOW DELETED BFUP MOV #ZBUF+BHEAD,R2 ; GET ADDRESS FOR ZBUF USE BFUP MOVB ZBUF+FDIRSC,R0 ; IS EVERYTHING IN SECTOR 0? BFUP BEQ ENTA50 ; YES BFUP MOV R0,A CBIN: 08ERBF UPBF ORRR E/O ISKDI; 5)(R CBIN: 09ERBF UPBF EDOSCLE BOT NAN CEMELD IEIFECSP; 5)(R CBIN: 10ERBF UPBF EEFRT NOT ENEMEL; 5)(R CBIN: 11ERBF UPBF LEFIS/NTMELE ED)EA(RN PE O27 1LYON; 5)(R CBIN: 12ERBF UPBF**********************************************************************;* UPBF * ; UPBF *  JSR PC,TTYOUT ;AND GO DO IT MOV (SP)+,R5 ;RESTORE R5 MOV LPBUFR(R3),R0 RTS PC ; ; ; THIS SECTION IS ENTERED BY TTYOUT WHEN THE MESSAGE HAS BEEN ; COMPLETELY PROCESSED. ; R1 = ADDRESS LIST ; ; LPDONE: MOV #0,R3 ;ENTRY FOR L/P INDEX 0 JMP LPDA00 ; MOV #2,R3 ;ENTRY FOR L/P INDEX 2 JMP LPDA00 ; MOV #4,R3 ;ENTRY  MOV MAXTM,TXTBK1+10 ; MOVE MAX TIME TST DEVPG BEQ RLED4 ; BR IF DEVICE PAGE NOT DESIRED MOV #102,R3 ; SET ERROR CODE TST TXTBK1+42 ; TEST TPDR 7 BNE RLKER ; BR IF IN USE MOV #77406,TXTBK1+42 ; SET TPDR7 MOV #7600,TXTBK1+62 ; SET TPAR 7 RLED4: INCB TXTR.W ; SET WRITE FLAG JSR PC,TEXTIO MOVB HPRIR,R2 ; LOAD SEC ; NO-MUST READ IN DESIRED SECTOR BFUP MOV #ABUF+BHEAD,R2 ; GET ADDRESS FOR ABUF USE BFUP MOV #ABUF,DSKADD ; SET BUFFER ADD INTO I/O LIST. BFUP MOVB #RFUN,AFUN ; SET READ FUNCTION BFUP JSR PC,DISKBF ; READ IN THE SECTOR. BFUP BNE BFERDK ; BRANCH IF DISK I/O ERRORS. BFUP ENTA50: MOVB ZBUF+FNDNUM,R1 ; GOT CURRENT DIR. SECTOR - R0 ERUSE THO TRNTUREO TBFND ETO; UPBF * EDERNSRA TISL RONTCO, ET SISS TUTA SORRR EHE TERFT A. LEABICPLAP; UPBF * F IS,TUTA SIOSCDIE THE YT BGHHIE THD ANS TUTA SUPBFE THN AINTCO; UPBF * LLWIE YT BOW LHE T. RDWOR ROERE THG INTTSFF ORECAS KETAE OD CISTH; UPBF * ; UPBF**********************************************************************;* UPBF E AG.P  FOR L/P INDEX 4 JMP LPDA00 ; MOV #6,R3 ;ENTRY FOR L/P INDEX 6 ; .=NLP*8.+LPDONE ; ; ; LPDA00: MOV #14.,R5 ;RESTORE ORIGINAL LIST MOV LPBUFR(R3),R0 ;LPBUF+ ADDRESS ADD R5,R0 ;PLUS 14 SO'S WE CAN RESTORE BACKWARDS ADD R5,R1 ASR R5 ; LPOB20: MOV -(R0),-(R1) ;GET THE LIST FROM THE L/P BUFFER .IFZ $1145 DEC R5 BGT  PRIORITY ASL R2 ; GET WORD INDEX MOV BSZTAB-2(R2),R4 ; GET MAX ALLOWED # OF PAGES WITH DYNAMIC BIT MOV R4,R5 ; SAVE DYNAMIC BIT BIC #100000,R4 ; LEAVE ONLY # OF PAGES MOV #103,R3 ; SET ERROR CODE CMP TXTBK1+22,R4 ; PROGRAM SIZE :: MAX ALLOWED BGT RLKER ; ERROR BRANCH TST R5 ; IS THIS PRIORITY "DYNAMIC"? BMI RLED5  POINTS TOBFUP BIC #177770,R1 ; IT - LET'S BUILD THE ENTRY NOW - WE BFUP .IF Z $1145 ; MAKE USE OF /45 ASH IF POSSIBLE BFUP ASL R1 ; KNOW WE HAVE ROOM-ALWAYS UPDATE IN BFUP ASL R1 ; BFCLOS. R1 IS SET TO ADDRESS IN BUFFBFUP ASL R1 ; BFUP ASL R1 ; BFUP .IFF UPBF R.SE UTON URET R -NEDOL AL; F DBEN BR UPBF ORRR E/O ISKDI; DKERBF E BN UPBF . ROZER TOEC SDOW NO; F KBIS,DPC R JS UPBF E ICTWS HI TDOO TVEHA; UNZFN,FU#W VBMO: 20DLBF UPBF . STLIO I/O NT IUFZBF OD.ADT SE; DDKADSF,BU#Z V MO UPBF ORRR EIOSCDI; DKERBF E BN UPBF T ELET GOMFRP UETLPOB20 .ENDC .IFNZ $1145 SOB R5,LPOB20 .ENDC ; ;NOW, SET UP REGISTERS AS: MOV R1,R0 ; R0 = ADDR LIST MOV LPDATA(R3),R1 ; R1 = ADDR DATA MOV (SP)+,R5 ; R5 = RETURN TO TTYOUT MOV LPRIOR(R3),R2 ; R2 = PRIORITY INDEX JMP LPIA10 ;THEN GO SEE WHAT ELSE IS TO BE DONE .ENDC .PAGE ;*****************MOV R4,TXTBK1+22 ; REPLACE WITH MAX SIZE FOR FIXED PARTITION RLED5: MOV FILID,R5 ; LOAD FILE I.D. MOV #104,R3 ; LOAD ERROR CODE FOR ILLEGAL FILE I.D. CMP R5,#NDISCS+$SYSFL ; MUST BE GREATER THAN SYSTEM RESERVED BLE RLKER1 ; ERROR EXIT CMP R5,#MAXID1 ; I.S. MUST BE <= MAXIMUM ALLOWED BGT RLKER1 ; ERROR EXIT MOV R5,DFLIST+6 ; LOAD FILE I.D. INTO LIST ; *******  ; KNOW WE HAVE ROOM-ALWAYS UPDATE IN BFUP ASH #4.,R1 ; BFCLOS R1 IS SET TO ADDRESS IN BUFF BFUP .ENDC ; BFUP ADD R2,R1 ; ADD ADDRESS TO POINT TO CORRECT BUFFERBFUP ; R1 NOW POINTS TO WORD OF BUFF TO STARTBFUP MOV R5,R4 ; GET ADD OF COM BLOCK BFUP CMP (R4)+,(R4)+ ; ADD 4 TO POINT TO NAME WR01 SLL ASTLI; F KBIS,DPC R JS UPBF IOSCDI . UT OORCTSEY ORCTREDIE ITWR; UNAFN,FU#W VBMO UPBF S.YE; 20DLBF Q BE UPBF O?ER ZORCTSEN INGHIYTEREV; R3 TBTS UPBF . EDETEL DASS TUTA STSENEMELT SE; 0)(RT,ELTD#S VBMO UPBF N HE TITE ETEL D'TAN C -NO; 11ERBF E BN UPBF E RE FNTMELE EIS; 0)(R TBTS ***************************************************** ;* L P C L R ** ;* THIS SUBROUTINE CLEARS A LINE PRINTER ERROR BY CLEARING ** ;* THE MEMORY ADDRESS REGISTER, LPDT.K (K = L/P NUMBER) ** ;* ** ;* R3 = L/P INDEV ** ;* JSR PC,LPCLR ** ;*  ************ MOV #5,R5 ; SET FILE TYPE TO 5 FOR NOW ***************** ; ******* ************ CMP R5,#$OVTYP ; IS IT LEGAL FOR AN OVERLAY ? BNE RLKER1 ; ERROR EXIT ; READY TO "DEFINE" ROS FILE MOVB #5,DFLIST+10 ;LOAD FILE TYPE INTO LIST MOV TXTBK1+22,DFLIST+12 ; # OF SECTOR TO DEFINE MOV #DFLIST,-(SP) EMT NOCKPT ; FORCE TO STAY IN C BFUP MOV (R4)+,(R1)+ ; MOVE WORD 1 OF ELEM NAME BFUP MOV (R4)+,(R1)+ ; MOVE WORD 2 BFUP MOV (R4)+,(R1)+ ; SET TYPE OF ELEMENT BFUP MOVB #STXUSE,-2(R1) ; SET STATUS OF ELEMENT IN DIRECTORY BFUP EMT GTIME ; GET HOUR, MIN, & SEC OF CREATION MOVB (SP)+,(R1)+ ; SET HOUR BFUP MOVB (SP)+,(R1)+ ; SET MIN UPBF D UNFOT NO; 06ERBF Q BE UPBF NTMELE EHE TNDFIN CAE WIFE SE; T ELET,GPC R JS UPBF D!BA- E IL FUPBFA T NO; 02ERBF E BN UPBF E?IL FUPBFS/ROA T IIS; K ECIL,FPC R JS UPBF T INPOY TREN; =. LTDEBF UPBF**********************************************************************;* UPBF *  ** ;********************************************************************** ; ; LPCLR: .IFZ $DIVA .IFZ NLP-1 CLR @#LPDT.1 ;CLEAR MEMORY ADDRESS FOR ONLY ONE L/P .ENDC .IFG NLP-1 CLR @LPADDR(R3) ;DITTO, BUT FOR MORE THATN ONE L/P .ENDC RTS PC .ENDC .IFNZ $DIVA RTS PC ;NOTHING TO DO ORE DURING I/O EMT DELETE ; FIRST TRY TO DELETE FILE EMT CKPT MOVB DFLIST+2,R2 ; ERROR BYTE BEQ RLD24 ; O.K. MOV #105,R3 CMP #11,R2 ; THIS ERROR IS O.K. BNE RLKER1 ; ERROR EXIT RLD24: MOV #DFLIST,-(SP) EMT NOCKPT EMT DEFINE ; DEFINE FILE EMT CKPT ; ALLOW SWAPPING TSTB DFLIST+2 ; ERROR  BFUP MOVB (SP)+,(R1)+ ; SET SEC BFUP EMT GDATE ; GET DAY MONTH, & YEAR MOVB (SP)+,(R1)+ ; SET YEAR BFUP MOVB (SP)+,(R1)+ ; SET DAY BFUP MOVB (SP)+,(R1)+ ; SET MONTH BFUP MOV ZBUF+FNSEC,(R4) ; SET STARTING SECTOR INTO COM BLOCK BFUP MOV (R4),(R1)+ ; UPBF * D.VEERESPRE ARS ERSTGIREL AL; UPBF * ; UPBF * F KBIS DR,SHPU, CKLEFI, LTTEGE D:SE UESINUTROUB;S UPBF * ; UPBF * E.IL FHE TSSREMPCOO TEDUSE BSTMUK ACFP B ; UPBF *. STXI ELLTI SRYNT ERYTOECIR DTS IND ANTMELE EEDETEL D A: TENO ; UP .ENDC .PAGE ;********************************************************************** ;* L P L E V L ** ;* ** ;* THIS SUBROUTINE CALCULATES THE INDEX REQUIRED TO ACCESS ** ;* LPFRST AND LPLAST FOR THE SPECIFIED LINE PRINTER AND PRIORITY** ;* LEVEL. LINKAGE IS: ** ;* ;R2 =  BNE RLKER1 ; ERROR EXIT ; NOW TRANSFER BATCH ELEMENT TO THE ROS FILE JSR R5,REGSAV ; NEED TABLE POINTERS BELOW MOV BFSECT,R0 ; INIT RELATIVE READ SECTOR # CLR R1 ; INIT RELATIVE WRITE SECTOR MOV DFLIST+6,R2 ; WRITE FILE I.D. RLD30: CLRB TXTR.W ; SET TO READ MOV R0,TXTSEC ; SET UP READ SECTOR MOV #$BCHID,TXTHED ; SET UP READ I.D. JSR PC,TEXTIO  ; AND INTO ENTRY BFUP CLR (R1) ; CLEAR LENGTH ENTRY IN DIRECTORY BFUP BISB #STFWRT,ZBUF+FSTAT ; MARK FILE AS WRITE IN PROG. BFUP TST R0 ; JUST SECTOR 0? BFUP BEQ ENTA70 ; NO - HERE TO PUT OUT DIRECTORY SECTOR.BFUP MOVB #WFUN,AFUN ; SET FUNCTION FOR A WRITE BFUP JSR PC,DISKBF ; AND WRITE IT OUT BF * . NDOU FOT NIST ENEMELE THF IET SISE OD CORRR EAN D.TELEDE; UPBF * S ANTMELE EANK AR MTOS ANMEA H IT WERUSH TCBAE THS CEFIRO PLTDEBF; UPBF * ; UPBF**********************************************************************;* UPBF E AG.P UPBF H NCRA B AOR FAR FTO; 02ERBF P JM: 99TAEN UPBF CHANBRO TAR FTO; #PRIORITY (1,2,...,NLPRTY) ** ;* ;R3 = L/P INDEX ** ;* JSR PC,LPLEVL ** ;* ;RETURN WITH R2 = PRIORITY INDEX ** ;* ** ;********************************************************************** ; ; LPLEVL: .IFZ NLP+NLPRTY-2 CLR R2 .ENDC .IFNZ NLP+" ; GO READ OR WRITE WITH "TXTLST" MOV R1,TXTSEC ; SET UP WRITE SECTOR MOV R2,TXTHED ; WRITE FILE I.D. INCB TXTR.W ; SET TO WRITE JSR PC,TEXTIO ; GO READ OR WRITE WITH "TXTLST INC R0 ; INC SECTOR NUMBER INC R1 ; INC SECTOR NUMBER CMP R0,TXTBK1+22 ; HAVE WE PASSED THE LAST SECTOR BLT RLD30 ; MORE SECTORS TO GO MOV R1,B BFUP BNE BFERDK ; ERROR BFUP ENTA70: MOV #ZBUF,DSKADD ; SET UP TO DO SECTOR 0 BFUP MOVB #WFUN,ZFUN ; SET FUNCTION FOR A WRITE BFUP JSR PC,DISKBF ; AND WRITE SECTOR 0 OUT. BFUP BNE BFERDK ; ERROR BFUP BR ENDBF ; ALL DONE BFUP ENTA98: JMP BFER03 ND.E CTSE.C C ND.E ND.E D:KNTS R KERL P JM E OD CORRR EADLO; 3 ,R05#1 V MO 5:R0LD PC S RT 5 R0LD E BN &FSIZE ; # OF SECTORS USED UP IN LOAD MODULE ; NOW INITIALIZE ALL RELEVANT TASK AND PRIORITY TABLES JSR R5,REGPOP ; RESTORE TABLE POINTERS ASR R2 ; PRIORITY WAS SHIFTED ABOVE MOVB R2,TPRTY+$ROSM(R1) ; PRIORITY CLRB TSTAT+$ROSM(R1) ; TASK STATUS CLRB IOSTAT+$ROSM(R1); CLEAR IT'S I/O STATUS MOVB TXTBK1+22,BSIZE+$ROSM(R1) ; INIT # PAGES IN OVERLAY ASL R1 ; WORD INDEX 'NLPRTY-2 MOV R5,-(SP) ;SAVE R5 'CAUSE WE USE IT DEC R2 ASL R2 MOV #NLPRTY,R5 ;SET MAXIMUM NUMBER PRIORITY LEVELS ;BASIC EQUATION IS: ; ; PRIORITY INDEX = NLPRTY*R3 + 2*(R2 - 1) ; ;WHERE - R3 = L/P INDEX ; R2 = PRIORITY NEDO; PC S RT CRA T PUUT OLDOU CWES ESGUI ; PB#L,@15#0 V MO ; 2 1+C.PV#L,@40#3 V MO ORCTVET UPRRTEINT SE; .1VCLP@#0,NTPI#L V MO S LPR EACL; S LP@# R CL A IV$D Z FN.I C ND.E PC S RT C ND.E C ND.E 0 A0PN,LR0 B SO 5 14$1 Z FN.I C ND.E 00NALP T BG R0 C DE 5 14$1 FZ.I + 3)(R T TS LRPC,LPC RSROERY AN; RRTETX T TS UT OAPSWW LOAL; PTCK T EM E ITWRR OADRE; IOSCDI T EM O I/G INUR DRECON IAYST; PTCKNO T EM ) SP-(T,LSXT#T V MO: IOXTTE ; R5 S RT R4+,P)(S V MO R3+,P)(S V MO R2+,P)(S V MO R1+,P)(S V MO R0+,P)(S V MO 5 REDEDNEUNP PO; + P)(S T TS: OPGPRE ; ; 5)(R P JM P)(S,-R0 V MO * MOV DFLIST+6,R0 ; INIT FILE I.D. TSTB DFLIST+10 ; WAS AN IFD REQUESTED BPL RLD25 ;NO LEAVE AS FILE I.D. MOV DFLIST+4,R0 ;YES REPLACE WITH IFD FOR CORE DIRECTORY BIS #100000,R0 ; FLAG AS AN IFD RLD25: MOV R0,IFD+$ROSM(R1); PUT ONE IN THE TABLE CLR HEADER+$ROSM(R1); SHOW TASK READY TO RUN ASR R1 ; RETURN TO BYTE INDEX CMP R1,@#TASKS+$ROSM; TASKS = MAX(TASKS,TASKNO+ ; .IFZ $1145 ; LPLA00: DEC R5 ;THIS IS THE WAY THE 11/20 DOES BLT LPLA20 ; NLPRTY*R3 ADD R3,R2 BR LPLA00 ; LPLA10: .ENDC .IFNZ $1145 ;AND THIS IS HOW THE 11/45 DOES IT MUL R3,R5 ;WASN'T THAT QUICK? .ENDC ADD R5,R2 ;THEN ADD IN 2*(R2 - 1) ; LPLA20: MOV (SP)+,R5 ;RESTORE R JS T SEPR,LPC R JS 1 ,RR4 D AD )+R5,(R2 V MO )+R5,(R1 V MO 5 ,R3)(RCTVELP V MO : 00NALP ; R4.,#8 V MO 2 ,R40#3 V MO R10,NTPI#L V MO 0 ,RLP#N V MO R3 R CL 1 P-NL FG.I ; ; C ND.E /P LHE TARLE CND;A LRPC,LPC R JS /P LHE TETES;R T SEPR,LPC R JS Y TRENN OTSUPRRTEINT BIHIINO TET;S 2 1+C.PV#L,@40#3 V MO P)(S,-R1 V MO P)(S,-R2 V MO T ES RVESA; P)(S,-R3 V MO R"JS "BYD HEUS PRK; P)(S,-R4 V MO: AVGSRE E AG.P R ROER; R KERL P JM R:DEGW DECOR ROERT SE; R33,#6 V MO D1GW E BN RDCAL RONTCO3 S RO; R OL#D1,@R P CM R TEINPOR TEACARCHT SERE; 1 ,RRDWC#F V MO D AR C AADRE; D EACR T EM P)(S,-OBSI#C V MO NDMAOM CADRED AR COS RRTSEIN ; .) BLE RLD26 MOV R1,@#TASKS+$ROSM RLD26: MOV #$TKFLS+$ROSM,-(SP) ; MUST WRITE OUT CURRENT VERSION EMT SDRITE EMT EXIT ; RLKER1: JMP RLKER ; ERROR EXIT .PAGE ; PROCESS FILE IDENTIFICATION NUMBER RLFID: TST R3 ; EQUAL SIGN DELIMITER BEQ RLFI2 RLFI1: MOV #105,R3 ; SET ERROR CODE BR RTIM6 ; ERROR EXIT RLFI2: JSR PC,GWORD CMP #1,R/ YOU-KNOW-WHO .ENDC ASL R3 ;CONVERT TO DOUBLEWORD INDEX RTS PC .PAGE ;********************************************************************** ;* ** ;* L P M S G E ** ;* ** ;* THIS SUBROUTINE OUTPUTS THE INDICATED MESSAGE TO THE SYSTEM ** ;* TE NETIOU RPTRUERNT IOFR DD ARETO;S .1VCLP@#0,NTPI#L V MO R3 R CL 1 P-NL FZ.I A IV$D FZ.I : ITINLP NTPI.L CTSE.C ; ; * ********************************************************************;* * * ;* * * E.IM TONTIZALIIAITINM TEYS SATD LEAL CBED ULHO SITINLP ;* * * ;* * * . : D3GW R DEGW BR DECOR ROERT SE; R31,#7 V MO NO; D1GW E BN LEAB TOFD ENH IT WERNTOI PARCHR AIMPCO; 2 ,RSCWA#L P CM MBTEN IERCTRAHA CCELA PO, N; )+R2,(R4 VBMO : D7GW PC S RT R2+,P)(S V MO R4+,P)(S V MO : EXGW NO; D7GW E BN ? , ; MACO,#R4 P CM S YE; EXGW Q BE ? ; ; OLSC,#R4 P CM 1 =R3; 23 ; TEST FOR SEMI-COLON DELIMITER BNE RLFI1 MOV #FWASC,-(SP) EMT ASCBIN MOV (SP)+,FILID ; SAVE FILE IDENTIFICATION NUMBER TST (SP)+ ; CLEAR STACK JMP RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS NAME COMMAND RLNAM: TST R3 ; EQUAL SIGN DELIMITER BNE RLNAM1 ; NO BRANCH JSR PC,GWORD ; GET NAME OF BFUP FILE 3LETYPE. LPMSGE IS CALLED WHEN AN ERROR HAS BEEN DETECTED ** ;* OR OPERATOR ACTION IS REQUIRED. LINKAGE IS: ** ;* ** ;* ;SET R3 = L/P INDEX ** ;* MOV #DATA,-(SP) ;PUSH DATA BUFFER ADDRESS ** ;* JSR PC,LPMSGE ** ;* BNE ;BRANCH IF LIST WASN'T AVAILABLE ** ;*S)R(TEINPRE IN LHE TRSEACLD ANS ETES R2. ;* * * S UEAL VORCTVET UPRRTEINS RETO S1. ;* * * ;* * * : NETIOU RISTH E.INUTRON IOATIZALTINI IERNTRI PNELI ;* * * ;* * ********************************************************************;* E AG.P C ND.E PC S RT Y TTLP R CL 1 P-NL FZ.I R3 C IN S YE; EXGW Q BE ? = ; SNEQ,#R4 P CM 0 =R3; R3 R CL H NCRA BS YE; D1GW Q BE ? E ACSP; ACSP,#R4 P CM R TEACARCHT GE; R4+,1)(R VBMO ND EATF IBR; D3GW Q BE TYMP EERFFBUD AR CIS; 1 ,RRDWC#L P CM : D1GW 2)(R,-R3 V MO 2)(R,-R3 V MO 2)(R,-R3 V MO S DECOE ACSP2 ; 3 ,R4000#2 V MO 6 CMP #1,R3 ; SEMI-COLON DELIMITER BEQ RLNAM2 ; YES BRANCH RLNAM1: MOV #64,R3 ; SET ERROR CODE JMP RLKER ; ERROR EXIT RLNAM2: MOV #FWASC,-(SP) ; ASCII BUFFER ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,BFNAM ; SAVE NAME MOV FWRAD+2,BFNAM+2 JMP RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS PRIORIT7 ** ;* REGISTER R4 IS DESTROYED. ** ;* ** ;********************************************************************** ; ; LPMSGE: MOV 2(SP),R4 ;GET DATA BUFFER ADDRESS FROM STACK .IFG NLP-1 ADD R3,R4 ;GET ADDRESS OF BUFFER FOR THIS L/P MOV (R4),R4 : ONLP ; C ND.E PC S RT : 10DFLP ; ; C ND.E Y TTLP C IN 1 P-NL FZ.I ; ; C ND.E ) R3Y(TTLP C IN R3 L AS R3 C DE 10DFLP T BG = R ;O P NL,#R3 P CM 10DFLP E BL 0<=E B'TAN CO. N/P;L R3 T TS 1 P-NL FG.I CKBALP Z FN.I F:OFLP ; ; * ******************************************************************** 2 ,R+6SCWA#F V MO P)(S,-R4 V MO P)(S,-R2 V MO D:ORGW ; N LOCOI-EM S1 = 3 R; N IG SALQU E0 = 3 R; R TEMILIDEE ATICND ILLWI R3 ND AC)ASTM (IND CELA PBEL IL WRDWOE TH T:PUUT O; ; ERFFBUI CIASE THO TERNTOI PERCTRAHA C AASD SE UIS R2 ; ; R TEINPOR TEACARCH= 1 R ; ERADHEK AS TOFA FW= O R: UTNP I; ; DSAR COLTRON C 3NKSLROM RO FRDWOT EX NET G; E AG.P NDMAOM CXTNES ESOCPR; C KGRL P JM ERMBNUK AS T:Y RLPRI: TST R3 ; EQUAL SIGN BEQ RLPR2 RLPR1: MOV #65,R3 ; SET ERROR CODE BR RTIM6 RLPR2: JSR PC,GWORD CMP #1,R3 ; TEST FOR SEMI-COLON BNE RLPR1 MOV #FWASC,-(SP) EMT ASCBIN MOV (SP)+,R2 ; R2 = BINARY NUMBER TST (SP)+ ; CLEAR STACK TST R2 BLT RLPR1 ; BRANCH IF NEGATIVE CMP R2,#NPRIOR;.ENDC MOV R5,-(SP) ;SAVE R5 .IFZ NLP-1 ;* GET ADDRESS MOV #LPLIST,R5 ;* .ENDC ;* OF LINE PRINTER .IFG NLP-1 ;* MOV LPIOLS(R3),R5 ;* I/O LIST .ENDC ;* MOV @#PSR,-(SP) ;SAVE CURRENT CPU LEVEL .IFZ $1145 MOV #340,@#PSR ;11/20 CODE TO INHIBIT INTERRUPTS .ENDC .IFNZ $1145 ;* * * ;* * * . 1)> P NLF (IN URET ROND YEROSTDES IR3 ;* * * ;* * )*LP N.,.., 32,, (1R BEUM NERNTRI PNELIE THS INTAON CR3E ERWH ;* * * ;* * * F)OFLPR (ON PO,LPC R JS ;* * * VESA; NOSK,TR4 V MO 1 SKRT T BL INTMOV,#R4 P CM 1 SKRT T BG TSMILIM TEYS SINTHWI; AXSMTA,#R4 P CM + P)(S T TS R4+,P)(S V MO RYNABIO TNGRISTI CIAST ERNVCO; INCBAS T EM P)(S,-SCWA#F V MO 3:SKRT H NCRA BO,;N 5 IMRT E BN ?NDOUGRCKBA; #1R,SW@# P CM S YEF IBR; 3 SKRT Q BE ?EMSTSYR ONDOUGRREFO; #2R,SW@# P CM 2:> BGT RLPR1 ; BR IF TOO HIGH MOVB R2,HPRIR ; SAVE PRIORITY JMP RLKGC ; GO TO PROCESS NEXT COMMAND .PAGE ; PROCESS TIME LIMIT COMMAND RLTIM: TST R3 BNE RTIM1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON DELIMITER ? BEQ RTIM2 ;YES, CONTINUE RTIM1: MOV #66,R3 ; SET ERROR CODE BR RTIM6 RTIM2: MOV #FWASC,-(SP) ; ASCII ? SPL 7 ;11/45 CODE FOR THE SAME THING .ENDC TST DATA(R5) ;SEE IF THE LIST IS AVAILABLE BNE LPSX00 ;BRANCH IF BUSY MOV R4,DATA(R5) ;IT'S AVAILABLE, SO GRAB IT MOV (SP)+,@#PSR ;ENABLE INTERRUPTS BACK TO WHERE THEY WERE MOV R5,-(SP) ;PUSH LIST ADDRESS JSR PC,TTYOUT ;CALL TTYOUT TO PRINT MESSAGE MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+, ;* * * : S IGEKAIN LHE T).ONLP (/P LHE TTOT PUUT OTETANSEI ROR ;* * * ) FFPO(LE YPETEL THE TTOT PUUT O/P LHE TCHITSWO TEDUS ;* * * RE AND AUTNP IORATEROPY BEDLLCAE ARS NETIOUBRSUE ESTH ;* * * ;* * * F F O P L / N O P L ;* * * ;* * ****************************************************SKRT ********** EDLLTANS IISH TCWI SEY KENWHE NGHA C**************;* E INUTROR ROER; R DEGW BR DECOR ROERT SE; R37,#6 V MO 1:SKRT CHANBR, ES;Y 2 SKRT Q BE ONOL-CMISE; 3 ,R#1 P CM RDWO,GPC R JS 1 SKRT E BN R3 T TS K:TSRL NDMAOM CERMBNUK AS TSSCERO P; E AG.P ITEXR ROER; R KERL P JM 6:IMRT DECOR ROERT SE; R30,#7 V MO 5:IMRT S YEF IBR; 3 STRING ADDRESS EMT ASCBIN ; DECIMAL ASCII TO BINARY MOV (SP)+,R4 ; PLACE CONVERTED NUMBER IN R4 TST (SP)+ TST R4 BEQ RTIM4 ; BR IF ZERO CMP R4,#TIMLM BPL RTIM1 ; BRANCH IF OVER TIME LIMIT MOV R4,MAXTM ; SAVE TIME LIMIT RTIM3: JMP RLKGC ; PROCESS NEXT COMMAND RTIM4: CMP @#SWR,#2 ; FOREGROUND OR SYSTEM TASK BEQ RTIM(SP) ;PUT STACK IN ORDER CLZ ;SET NO-ERROR CONDITION RTS PC ; ; LPSX00: MOV (SP)+,@#PSR ;ENABLE INTERRUPTS MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+,(SP) ;PUT STACK IN ORDER SEZ ;SET ERROR CONDITION RTS PC ;EXIT TO CALLER ; TYDONE: CLR DATA(R1) ;SET I/O LIST AVAILABLE RTS PC .PAGE ;*****************