&[ ";.|< f  {: s2.$ 7@ @ I 2's's ('s2&J ; TASK'S ABORT/TIME-SLICE TIME $TYPE3: .WORD 0 ; 1= CURRENTLY ACTIVE TASK I/O ; R4),$HQPR ; YES QUECXX = . TST (SP)+ ; POP OFF TOP OF STACK (TEMP ERROR STAT) QUEC16 =. ;UPDATE: 09JAN73 SUPDMP.S14 ;01-09-73 ; UPDATE 12/13/72 SUPDMP.S13 ; ******************************************************************** ; * -------------------- S U P E R ------------------- * ; * ---------------------- D U M P --------------------- * ; * * ; * THIS PROGRAM DUMPS IN OCTAL FROM EITHER DISC OR FROM CORE TO * ; * THE LI.z(,zh(.U   xB7rw.&e-e Xxx.L-E?e $e `.rXl ebUV7ZV. E} =.z.eA e& e$.e   ++. e" tee;UPDATE: 02-FEB-73 2 NVOICE.S04 02:02:73 ;UPDATE: 02-FEB-73 NVOICE.S03 02-02-73 ;UPDATE: 31-JAN-73 NVOICE.S02 01-31-73 .ENABL CDR ;01-31-73 ;************************** N V O I C E **************************** ; ROUTINE TO PRINT THE "ELITE" INVOICES ON THE LINE PRINTER ; OPTIONS INCLUDE SELECTING THE RE& :((.@d p @ f b - .&7 P H@ @@ 8)8.L  x t ~ ߵy 1.r    ߵ^.y6 :  8 %.5 x 7 7   ߵ  .ye0v NE PRINTER. THE CHOICE OF ONE OF THE DISCS OR MEMORY IS * ; * MADE AT RUN TIME BY APPROPRIATE SETTING OF THE CONSOLE SWITCHES* ; * * ; * THE PROGRAM IS POSITION-INDEPENDENT AND FREE STANDING. * ; * THUS, IT NEED NOT BE LINKED TO ANY OTHER MODULES, CAN BE LOADED* ; * ANYWHERE IN CORE, AND DOES NOT INTERFACE WITH ANY EXTERNAL * ; * DRIVERS. IT CAN EVEN BE LOADED FROM PAPER TAPE, USING THE * ; *  e.0_     .VweJef .|D CȌ ~#& P L.N FN @N Հ0 E .  -S--< ------< 04268 CORD LENGTH; PRINTING DOUBLE SPACE; ; RE-WRITING THE TAPE SO THAT THE CRC CHARACTER MAY BE INCLUDED; ; HALTING BETWEEN THE READ AND THE WRITE; BYPASSING THE CONVERSION ; FROM EBCDIC TO ASCII; AND IGNORING TAPE CONTROLLER ERRORS. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 SWR=177570 TPB = 177566 MAGWC = 167540 MGSTAT = 167542 MAGCMD = 167544 MAGADR = 167546 LPADR = 165010 LPLF = 165012 LPWC = 165014 LP 7 @ z. 7`f b5-b  x.0 @d ` B2 &.V5x  C Ԡ!/t&/.|_ee  @:  .0 <  0)B  T00g.    `&  N 3.    ҃ȕ0&0 RELOCATING FEATURE OF THE ABSOLUTE LOADER. * ; * * ; * TO RUN THIS PROGRAM, BEGIN AT "START". NO HARDWARE INIT IS OR * ; * NEED BE GIVEN. THE ONLY DEVICES THAT ARE RESET ARE THE DISC * ; * AND THE LINE PRINTER. THEY ARE RUN WITH INTERRUPTS DISABLED. * ; * IN THE CASE OF DUMPING FROM MEMORY, NO DISC RESET IS ISSUED. * ; * AT THIS TIME "HOME" THE PRINTER IF TOP-OF-FORM IS DESIRED. * :",@d p @ f b 2,&7 P H@ @@ 8),L  x t ~ ߵy,r    ߵ,y6 :  8,5 x 7 7   ߵ,ye0v7 @ zx, 7`f b5-b  x,0 @d ` CMD = 165016 LPSTAT = 165016 ; SWITCH BITS: ; 8: PRINT DOUBLE SPACE ; 9: HALT BETWEEN READ AND WRITE ; 10: HALT BETWEEN RE-WRITE AND PRINT ; 11: INHIBIT PRINT OF # OF READ ERRORS ON TTY ; 12: FLIP BITS IN EACH BYTE 02-02-73 ; 13: BYPASS EBCDIC-TO-ASCII CONVERSION ; 14: READ THEN RE-WRITE ENTIRE TAPE ; 15; BYP.  5x ~0 (0.:  5x 7 ~ .` x 4 ʂЕ l b $._d&@~ߋbߋb< .7 0 5  j .%@Z.{[lP}M]\Nk`Kaz^L~no|NO ; * AT THE FIRST "HALT", SELECT ONE OF THE DISCS OR MEMORY: * ; * CONSOLE SWITCHES: =1-->RF-11; =2-->DDC-7312; =3-->MEMORY * ; * (IF SWITCHES ARE =0, PROGRAM WILL ENTER AN INFINITE TIGHT LOOP)* ; * NOW PRESS "CONTINUE". UPON THE NEXT "HALT", SET THE SWITCHES * ; * TO THE NUMBER OF THE SECTOR (FOR DISC) OR THE MEMORY ADDRESS * ; * AT WHICH YOU WISH TO BEGIN DUMPING. (IN THE CASE OF MEMORY, * ; * DUMPING WILL BEGIN AT THE BEGINNING OF THE 64-WORD BLOCKB7,V5x  C Ԡ!/,|_ee  @:,0 <  0)B  T,ȁ    `&  N ,    ҃ȕ0%,  5x ~0,:  5x 7 ~ =,` x 4 ʂЕ l b,_d&@~ߋbߋb< $,7 0 5ASS RETRY ON TAPE READ ERROR ; PROGRAM TO READ SUCCESSIVE RECORDS FROM MAG TAPE IN IBM EBCDIC ; CONVERT THE CHARACTERS TO ASCII, AND PRINT THEM ON THE L/P. .PAGE START: ;BEGIN BY STARTING AT LOAD POINT MOV #START,SP MOV #40000,@#MAGCMD ;RESET 02-02-73 MOV #20,R5 ;SPACE FILE FWD 01-31-73 JSR PC,GO 01-3&oQ((.@d  xVtEU.&E ~  P__.Lf`dߋbb ~ .re k~&0@.E&0  f.0& 0_dߋbߋbbπ b  WHICH * ; * CONTAINS THE SELECTED START ADDRESS.) NOW PRESS "CONTINUE". * ; * UPON THE NEXT (THIRD) "HALT", ENTER INTO THE CONSOLE SWITCHES * ; * THE NUMBER OF CONSECUTIVE DISC SECTORS OR CORE MEMORY BLOCKS * ; * YOU WISH TO DUMP. * ; * PRESS "CONTINUE" AGAIN. SECTORS OR BLOCKS WILL BE PRINTED * ; * UNTIL THE SECTOR/BLOCK COUNT IS EXHAUSTED. THE PROGRAM WILL * ; * THEN JUMP TO ITS "START" TO AWAIT ANOTHER DUMP R  o,҂%@Zw,{[lP}M]\Nk`Kaz^L~no|y1-73 CLR R4 01-31-73 A0010: 01-31-73 MOV #100,R5 ;SPACE RECORD FWD 01-31-73 JSR PC,GO 01-31-73 TST @#MGSTAT ;F/M? 01-31-73 BMI A10 ;YES 01-31-73 SOB z,U   xB7r,&e-~e Xxdx,Lb-ZE?NJew e\ ,r2 e(U7 , E} =,e e e2,e  ef,  @ee e_,0   j f wEQUEST. * ; * * ; * * ; * SINCE THE PROGRAM IS COMPLETELY SELF-INITIALIZING, IT CAN BE * ; * KEPT IN CORE PERMANENTLY AND RUN AT ANY TIME, WITH MINIMUM * ; * INTERFERENCE TO OTHER PROGRAMS THAT ARE RESIDENT. * ; * *01-09-73 ; * VERSION S14 ADDS THE CAPABILITY OT YET SOB R2,B ;KEEP READING TAPE 'TIL END OF 16K MOV R4,@#DAR ADD #400,R4 MOV #-40000,@#DWC ;16K WORDS AT A CRACK MOV #3,@#DCS ;WRITE!! JSR PC,DERRCK ;WAIT FOR DISC READY & CHECK FOR ERROR SOB R1,A ;COUNT DOWN AND TRY ANOTHER DISC WRITE F: SWAB R0 ;RESTORE STATUS IMAGE MOV R0,-(SP) ;MAG TAPE ERROR: OUTPUT ERR MSG S302...  R4,A0010 ;SPACE AGAIN 01-31-73 01-31-73 A10: 01-31-73 NEG R4 ;ACTUAL RECORD COUNT 01-31-73 MOV R4,RECCNT 01-31-73 MOV #40,R5 ;SPACE FILE BACK 01-31-73 JSR PC,GO `,V#& P LN FN @N ',|0 E  % -S--<$------<04268TO DUMP IN ASCII ALSO. *01-09-73 ; * THIS MODE IS SELECTED BY SETTING SWITCH BIT #15 IN THE *01-09-73 ; * SELECTION KEY. THE ROUTINE WILL PRINT 128 CHARS PER LINE. *01-09-73 ; ******************************************************************** .PAGE ;01-09-73 R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 SWR = 177570 ;SWITCHES LPADDR = 165010 ;PRINTMOV #2302,-(SP) ;...ACCOMPANIED BY TAPE STATUS IN LO BYT IOT EMT 60 DERRCK: ;DISC READY AND ERROR CHECK MOV @#DCS,R0 ;FETCH STATUS BMI DSCERR ;THERE IS AN ERROR TSTB R0 ;READY? BPL DERRCK ;NOT YET RTS PC DSCERR: ;HERE WHEN DISC ERR REG IS NEG: EITHER ERR OR NED MOV R0,R2 BIC #104377,R2 ;CLEAR ERR, NED, AND LOW BYTE  01-31-73 MOV #40,R5 02:02:73 JSR PC,GO ;AGAIN 02:02:73 MOV #100,R5 ;SPACE RECORD FWD 01-31-73 JSR PC,GO 01-31-73 MOV #100,R5 ;SPACE RECORD FWD 01-31-73 JSR PC,GO ;NOW BEYOND 1ST oQ,@d  xntEUd,&E _d ~ __fp,Le$,r`dߋbb5  f~l~ ,&0&0E&[,0_d  f0ߋbߋ bbۀ b& 0!ER MEMORY ADDRESS REG LFREG = 165012 ;PRINTER AUTOLINEFEED REG LPWC = 165014 ;PRINTER WORD COUNT REG LPCMD = 165016 ;PRINTER COMMAND REG LPCSR = 165016 ;PRINTER STATUS REG .TITLE SUPDMP .GLOBL SUPDMP .PAGE ;01-09-73 SUPDMP: START: BIS #40,@#LPCMD ;PRINTER CLEAR CLR @#LPADDR ;ALSO ITS MEM ADDR REG " BEQ DONE ;THE FLAG WAS FROM NED: FINISHED DISC MOV R0,-(SP) ;PUSH STATUS WORD... MOV #2300,-(SP) ;...AND MSG S300 IOT EMT 60 DONE: ;FINAL DISC TRANSFER FINISHED JSR PC,SPCFIL ;SPACE PAST FILE MARK NEG R1 ;GET POSITIVE COUNT OF 16K BLOCKS XFERED MOV R1,-(SP) ;AND PRINT IT OUT WITH... MOV #2000,-(SP) ;MSG S000 TO SHOW DONE #BIN REC PAST F/M 01-31-73 BR A0020 ;READ AND PRINT ONLY 01-31-73 .PAGE M0000: MOV #MAGBUF,R4 ;INIT BUFFER POINTER M0010: DEC RECCNT BEQ M0040 ;NO MORE RECORDS JSR PC,NXTREC ;ANOTHER RECORD BR M0010 M0040: ;WRITE TWO FILEMARKS IF AFTER WRITE; ELSE RETURN FOR WRITE MOV CNTSAV,RECCNT ;RESET RECORD COUNT INC COMAND ;BUMP TO WRITE oQ,@d  xVtEU|,&E ~  P__,Lf`dߋbb ~,re k~&0+,E&0  f,0& 0_dߋbߋbbπ b% MOV #1,@#LFREG ;AUTOLINEFEED TO PRINTER HALT ;1ST HALT: WAIT FOR DEVICE SELECTION MOV @#SWR,KEY ;DEVICE SELECTION KEY BEQ . ;STICK HERE FOR OPERATOR INTERVENTION MOVB #'B,DISCID ;INIT I.D. PRINT OF "B" FOR DDC DISC CLRB DSWICH ;PREPARE PGM FOR USING "DDC" DISC MOV PC,R5 ;R5 IS USED AS PTR TO TABLE OF DISC ADDRESSES ADD #DSCTAB-.,R5 ;NOW AT TOP & IOT EMT 60 SELERR: CLR -(SP) MOV #2303,-(SP) IOT EMT 60 SPCFIL: MOV R3,R5 ;FORM SPACE FILE CMD CLRB R5 BISB #20,R5 ;SET SPACE FILE FORWARD BIT MOV R5,@#TCD ;SPACE FORWARD ONE FILE MARK TSTB @#TST BMI .-4 TSTB @#TST BPL .-4 MOV @#TST,R0 BPL F ;IT'S SUPPOSED TO BE A F/M CL' DEC RPTFLG ;HAVE WE DONE WRITE? BNE M0050 ;AFTER WRITE: GO WRITE FILE MARKS BITB #2,@#SWR+1 ;HALT BETWEEN READ & WRITE? BEQ .+4 HALT MOV #400,R5 ;REWIND BEFORE WRITE JSR PC,GO BR M0000 ;GO WRITE ENTIRE TAPE BACK M0050: MOV #4,R5 JSR PC,GO JSR PC,GO MOV #400,R5 ;REWIND JSR PC,GO BITB( ;HERE WHEN PARAMTERS ARE WITHIN RANGE MOV #340,PS ;LOCK OUT INTERFERENCE FROM CLOCK MOVB R0,MINUTE ;UPDATE CURRENT MINUTE MOVB 6(SP),HOUR ;UPDATE CURRENT HOUR MOV #1,TICTOC ;RESET [TICS] AND [SECOND] COUNTERS CLR 6(SP) ;CLEAR ERROR CODE BR STIM10 ;GO EXIT .PAGE SDATE: ;SUBROUTINE TO UPDATE CURRENT MONTH,DAY, AND YEAR JSR R5,P)OF TABLE CMP KEY,#2 ;WAS DDC DISC SELECTED? BEQ HALT2 ;YES: NO FURTHER WORK NEEDED ADD #10.,R5 ;RF-11 DISC: USE UPPER HALF OF TABLE DECB DISCID ;PRINT "A" FOR RF-11 INCB DSWICH ;SET SWITCH TO GO THRU SHIFT LOGIC HALT2: HALT ;NOW WAIT FOR ADDRESS SELECTION MOV @#SWR,ADRESS ;DISC OR MEMORY: SAVE HALT ;WAIT FOR KEY-IN OF SECTOR/BLOCK COUNT MOR @#TST ;RESET F/M FLAG RTS PC .END BEGIN + #4,@#SWR+1 ;HALT BEFORE PRINT? BEQ A0020 HALT .PAGE A0020: MOV #1,COMAND ;BACK TO "READ" MOV #MAGBUF,R4 ;RE-INIT BUFFER POINTER DEC RECCNT ;# RECORDS LEFT TO READ +1 BNE A0030 ;READ ANOTHER MOV #400,R5 ;REWIND JSR PC,GO HALT BR START A0030: JSR PC,NXTREC ;READ NEXT RECORD OFF TAPE BIT #20000,@#S,USHR ;SAVE ALL REGISTERS MOV SP,R0 ;UTILIZE AS SECONDARY STACK POINTER ADD #16,R0 ;POINT TO NEW "YEAR" ON STACK MOV (R0)+,R1 ;REMOVE YEAR MOV (R0)+,R2 ;AND NEW DAY MOV (R0),R3 ;GET MONTH FROM STACK MOV PS,-(R0) ;LOAD CURRENT PSW ON STACK FOR RTI USE MOV -4(R0),-(R0) ;AND MOVE RTN ADDR INTO PROPER PLACE,TOO CMP R3,#12. ;SEE IF MONTH IS-V @#SWR,SECNT ;SAVE IT CMP KEY,#3 ;WAS MEMORY SELECTED? BNE DISC ;NO BIC #77,ADRESS ;ALWAYS DUMP IN BLOCKS OF 64 WORDS .PAGE PRTMEM: MOV ADRESS,R4 MOV PC,R3 ADD #MEMADR+6-.,R3 JSR PC,BIN2OCT ;CONVERT MEM ADDRESS TO PRINT IT MOV PC,R3 ADD #MEMBUF-.,R3 JSR PC,PRTHED ;GO PRINT MEMORY ADDRESS OF BLOCK MOV ADRESS,R0 . ;CALLER ON TOP. EMTA20: CLR R0 ;RANGE ERROR: USE ENTRY 0... BR EMTA10 ;...AND FORCE EXIT VIA "EMTERR" .IFNZ $DEBUG EMTERR: HALT ;DURING DEBUG, BAD CALL CAUSES HALT .ENDC $DEBUG .IFZ $DEBUG EMTERR: RTS PC ;ERROR RETURN USED FOR INVALID CODES .ENDC $DEBUG .PAGE EMTABL = . ;TOP OF EMT LINK TABLE .WORD EMTERR ;#0 ALWAYS AN ERROR /WR ;BYPASS EBCDIC-TO-ASCII? BNE A0250 ;YES JSR PC,FLIP ;DO CONVERSION .PAGE A0250: CLR FORMFD CLR CURBUF MOV WRDCNT,R5 ASL R5 ;BYTE COUNT OF TAPE CHARS MOV #MAGBUF,R1 ;BEGIN OF RAW CHARACTERS INPUT JSR PC,PRINT ;FLUSH MAG BUFFER TO PRINTER BITB #10,@#SWR+1 ;BYPASS PRINT OF # OR READ ERRORS? BNE A0020 ;YES 0 WITHIN RANGE BHI SDAT30 ;ERROR: EXIT MOVB #28.,FEBARY ;RESET FEBRUARY IN PREP FOR NEW YEAR MOV #365.,MXDAYS ;RESET MAX DAYS COUNT BIT #3,R1 ;IS NEW YEAR A LEAP? BNE SDAT40 ;NO: NO EXTRA DAY INCB FEBARY ;YES: ADD FEB 29 INC MXDAYS ;EXTRA DAY IN LEAP YEAR SDAT40: CMPB R2,DAYTAB(R3) ;CHECK DATE FOR PROPER RANGE THIS MONTH BLO SDAT50 ;O1 ;PREPARE TO ... JSR PC,FILLBF ;...CONVERT BINARY TO ASCII AND PRINT IT ADD #200,ADRESS ;IF MORE TO DO, BUMP ADDRESS... BR PRTMEM ;...AND CONTINUE .PAGE DISC: ;HERE TO DUMP FROM DISC BIS #400,@(R5) ;DCS - DISC CLEAR MOV ADRESS,R0 MOV R0,SECTOR ;SAVE IT FOR PRINTOUT JAMES: MOV SECTOR,R0 DSWICH: BR .+2 ;USE RF-11 DISC IF INCREMENTED BR 2 .WORD QUEUE ;#1 .WORD SUSPND ;#2 .WORD UNSPND ;#3 .WORD EXIT ;#4 .WORD FRETSK ;#5 .WORD ABORT ;#6 .WORD QTIME ;#7 .WORD DQTIME ;#10 .WORD QSKED ;#11 .WORD DQSKED ;#12 .WORD TTYOUT ;#13 .WORD TTYIN ;#14 .WORD DECTAP ;#15 .WORD BI3 MOV ERRFLG,R0 ;# OF ERRORS DURING READ ADD #60,R0 ;MAKE ASCII CHAR MOVB R0,@#TPB ;PRINT ON TTY BR A0020 .PAGE NXTREC: ;READ NEXT RECORD FROM TAPE MOV #7,NOTRYS CLR ERRFLG MOV #40000,R5 ;RESET A0200: JSR PC,GO MOV #2000,R0 ;FIXED WORD COUNT: 2048 DEC CHARS 01-31-73 MOV R0,WRDCNT MOV R0,@#MAGWC MOV R44.K.: WITHIN RANGE MOVB DAYTAB(R3),R2 ;ERROR: USE LAST DAY RATHER THAN ERR OUT SDAT50: MOV R3,-(SP) ;SAVE MONTH ON STACK FOR USE BELOW MOV #JANARY,R0 ;PREPARE TO CALC JULIAN DAY CLR R4 ;WILL ACCUM TOTAL DAYS SDAT10: DEC R3 ;COUNT DOWN MONTHS BLE SDAT20 ;DONE: EXIT LOOP MOVB (R0)+,R5 ;CAN'T ADD BYTES ADD R5,R4 ;ACCUM DAYS FROM DAY TABLE BR SD5 SETDAR ;...ELSE USE "DDC" DISC MOV R0,R1 ;NEED TO SPLIT IT UP SWAB R1 ;FIRST GET EXTENSION BITS ASR R1 ASR R1 BIC #-3-1,R1 ;ISOLATE THE TWO EXTENSION BITS MOV R1,@10(R5) ;...AND FEED IT TO THE DISC - DAE ASL R0 ;LEFT-JUSTIFY LOW TEN ADDRESS BITS ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 SETDAR6NASC ;#16 .WORD ASCBIN ;#17 .WORD MASK ;#20 .WORD UNMASK ;#21 .WORD ERRTYP ;#22 .WORD DISCIO ;#23 .WORD CREAD ;#24 .WORD LPRNTR ;#25 .WORD GOBACK ;#26 .WORD CKPT ;#27 .WORD NOCKPT ;#30 .WORD GTIME ;#31 .WORD GDATE ;#32 .WORD SCAN ;#7,@#MAGADR MOV COMAND,R5 ;READ OR WRITE!! JSR PC,GO BIT #26400,@#MGSTAT ;CHECK O'FLO,PARITY, & LRCC ERRS 01-31-73 BEQ A0100 ;NO: GO ON INC ERRFLG TST @#SWR ;BYPASS RETRY? BMI A0100 ;YES DEC NOTRYS ;TRY AGAIN? BLE A0100 ;NO MORE MOV #40000,@#MAGCMD ;RESET MOV #200,R5 ;BACK ONE RECORD BRGAT10 ;LOOP BACK FOR MORE .PAGE SDAT20: ADD R2,R4 ;ADD TODAY'S DATE MOV #JDATE,R3 ;WILL USE AS POINTER TO DATE BYTES MOV #340,PS ;LOCK OUT INTERFERENCE FROM CLOCK MOV R4,(R3)+ ;LOAD JULIAN DATE MOV (SP)+,(R3) ;LOAD NEW MONTH MOV #THDTAB,CURTHD ;INIT CURRENT THREAD POINTER BITB #1,(R3)+ ;IS MONTH ODD OR EVEN? BNE SDAT25 ;ODD: LEAVE AT TE: MOV R0,@6(R5) ;OUTPUT SECTOR NUMBER TO DISC ADDR REG .PAGE PRTSEC: ;NOW PRINT SECTOR HEADING MOV SECTOR,R4 MOV PC,R3 ADD #SECNUM+6-.,R3 JSR PC,BIN2OCT ;CONVERT SECTOR # TO PARITY ASCII MOV PC,R3 ADD #HEDBUF-.,R3 JSR PC,PRTHED ; NOW PRINT ONE SECTOR'S WORTH --- MOV PC,R3 ADD #DSCBUF-.,R3 MOV R3,@2(R5) ;CURRENT MEMORY ADE33 .WORD NUMFLD ;#34 .WORD NPARAM ;#35 .WORD BFINIT ;#36 .WORD BFENTR ;#37 .WORD BFOPEN ;#40 .WORD BFCLOS ;#41 .WORD BFDELT ;#42 .WORD BFPACK ;#43 .WORD BFWRIT ;#44 .WORD BFREAD ;#45 .WORD R50PAK ;#46 .WORD R50UNP ;#47 .WORD BFWAIT ;#50 .WORF A0200 ;WAIT AND READ AGAIN A0100: ASL R0 ;BYTE COUNT ADD R0,R4 ;BUMP DATA BUFFER POINTER RTS PC .PAGE ; NOW WANT TO FLIP ALL BYTES AND CONVERT TO NON-PARITY ASCII FLIP: MOV WRDCNT,R0 ASL R0 ;BYTE COUNT MOV #MAGBUF,R1 A0300: MOVB (R1),R2 ;FETCH NEXT CHAR MOV R2,R3 01-31-73 """"""" """""D@DDDDDDDADDB Cz{ qz^ oQf{ voQf^  oQfK $DfffffFa ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & IDRESS REGISTER MOV #-64.,@4(R5) ;DISC WORD COUNT: ONE SECTOR MOV #5,@(R5) ;DCS - READ! TSTB @(R5) ;DCS - READY? BPL .-4 ;NOT YET MOV PC,R0 ADD #DSCBUF-.,R0 ;POINTER TO BINARY BUFFER JSR PC,FILLBF INC SECTOR BR JAMES .PAGE FILLBF: TST KEY ;PRINT ASCII? ;01-09-73 BMI PRTASC ;YES JBIT #10000,@#SWR ;SKIP FLIP? 01-31-73 BEQ A0450 ;YES 02-02-73 CLR R3 ;WILL BUILD FLIPPED CHAR HERE MOV #8.,R4 A0400: ASR R2 ;SHIFT NEXT BIT INTO CARRY ROL R3 ;MOVE CARRY INTO SHIFTED FLIPPED CHAR DEC R4 BGT A0400 ; NOW CONVERT TO ASCII A0450: KHREAD #1 ADD #2,CURTHD ;EVEN: ADVANCE TO THREAD #2 SDAT25: MOVB R2,(R3)+ ;LOAD DAY OF MONTH MOVB R1,(R3) ;LOAD CURRENT YEAR CLR 22(SP) ;CLEAR ERROR WORD FOR GOOD RETURN SDAT30: JSR R5,POPR ;RESTORE ALL REGISTERS TST (SP)+ ;POP THIRD ARGUMENT SINCE RTI NEEDS TWO RTI ;STACK SET TO RETURN AND RESTORE .PAGE ; NOTE: SUBROUTINES "GTIME" AND "GDATE" SLY TYPE-OUT QUEUE .WORD 0,0 ; TWO SYSTEM USE WORDS .WORD TYPBUF ; ADDRESS OF OUTPUT BUFFER ; ; THE FOLLOWING IS THE MESSAGE STRING USED BY TTYOUT ; TYPBUF = . .WORD 41. ; NO. OF CHARACTERS TO OUTPUT .WORD 0 ; USED BY TTYOUT .BYTE 15 ; START OFF WITH CR/LF .ASCII /ERROR/ EDIT1: .ASCII / XXXXX/ .BYTE 15 EDIT2: .ASCII /SXXXXX/ ; ARG 1 .M ;01-09-73 MOV #4,LINCNT ;PRINT 4 LINES OF 16 WORDS EACH ;01-09-73 NXTLIN: MOV PC,R3 ;PRINT NEXT LINE ADD #LPBUF+6-.,R3 ;ASCII BUFFER MOV #16.,R1 ;# WORDS PER LINE CVRT: MOV (R0)+,R4 ;NEXT BINARY WORD JSR PC,BIN2OCT ;CONVERT IT TO PARITY ASCII ADD #6,R3 ;GET TO END OF CURRENT ASCII MOV #120240,(R3)+ ;INSERT A DOUBLE SPACE N 01-31-73 MOV #EBCTAB,R4 A0500: CMPB R3,(R4)+ ;MATCH? BEQ A0600 ;YES CMP R4,#EBCEND ;MORE? BLOS A0500 MOV #'_,R4 ;[_] INSERTED FOR ILLEGAL EBCDIC CHAR BR A0700 A0600: SUB #EBCDIC+1,R4 ;WAS IT IN REGULAR PART OF TABLE? BGE A0650 ;YES ADD #5+11-40,R4 ;WAS ONE OF SPECIALS @ BEGIN OF TABLE A0650: ADD #40,R4 ;CREATOHARE THE SAME CODE. ; THE CARRY BIT IS USED AS A SWITCH TO DETERMINE WHETHER TO LOAD TIME ; OR DATE. BY USING THE PSW TO STORE THIS SWTICH, AND BY RUNNING THE ; ROUTINE UNDER LOCKOUT AFTER THE CARRY BIT IS SET/CLEARED, RE-ENTRANCY ; IS MAINTAINED, AND THE POSSIBILITY OF CLOCK ALIASING IS ELIMINATED. GDATE: ;SUBROUTINE TO GET DATE CLC ;MARK TO GET DATE (BELOW) BR GETSB1 ;SHARE ROUTINE GTIME: ;SUBROUTINE TO GET TIME PASCII / / ; ******** EDIT3: .ASCII /SXXXXX/ ; ARG 2 .ASCII / / ; ******** EDIT4: .ASCII /SXXXXX/ ; ARG 3 .ASCII / / ; ******** EDIT5: .ASCII /SXXXXX/ ; ARG 4 .BYTE 15 .EVEN ; ; THE FOLLOWING EDIT TABLE IS USED TO POINT TO 6 BYTE ASCII ; STRINGS IN THE MESSAGE INTO WHICH BINQ ADD #6,R3 ;GET IT READY FOR NEXT CONVERSION DEC R1 ;MORE WORDS IN THIS LINE? BGT CVRT ;CONVERT NEXT WORD ; BUFFER NOW FULL: TIME TO PRINT PRINT: MOV PC,R1 ;01-09-73 ADD #LPBUF-.,R1 MOV R1,@#LPADDR MOV #-64.,@#LPWC ;PRINT 16 6-CHAR NUMBERS OR 128 ASCII ;01-09-73 MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR RE ASCII CHAR FROM TABLE INDEX A0700: MOVB R4,(R1)+ ;REPLACE EBCDIC WITH NON-PARITY ASCII DEC R0 ;MORE CHARS IN BUF? BGT A0300 ;NEXT CHAR RTS PC .PAGE ; DONE WITH CONVERSION OF ALL OF BUFFER: NOW PRINT IT PRINT: MOV #100,@#LPCMD ;RESET MOV CURBUF,R0 ;PLACE IN PRINTER BUFFER BNE B0300 ;INPUT BUFFER RAN OUT IN MIDDLE OF LINE B0100: MOV #PRTBUF,R0 S SEC ;MARK TO GET TIME (BELOW) GETSB1: ;COMMON ENTRY TO "GET" ROUTINE MOV PS,-(SP) ;SAVE CURRENT PSW MOV #340,PS ;LOCK OUT INTERFERENCE FROM CLOCK SUB #12,SP ;NEED FIVE STACK CELLS MOV R0,(SP)+ ;SAVE USER'S SO WE CAN USE IT MOV R1,(SP)+ ;ALSO TST (SP)+ ;PREPARE FOR MOVING PS AND PC MOV SP,R0 ;USE AS SECOTASC WILL PUT THE ; CONVERTED RESULTS. ; EDITBL = . .WORD EDIT1 ; POINTER FOR ERROR NUMBER .WORD EDIT2 ; FPOINTER FOR FIRST ARGUMENT .WORD EDIT3 ; POINTER FOR SECOND ARGUMENT .WORD EDIT4 ; POINTER FOR THIRD ARGUMENT .WORD EDIT5 ; POINTER FOR FOURTH ARGUMENT .WORD 0 ; END OF TABLE ; ; EXITSW: .WORD 0 ; EXIT SWITCH. 0=SUBROUTINE EXIT ; U ;DONE? BPL .-4 ;NOT YET DEC LINCNT ;MORE LINES? BGT NXTLIN ;YES DEC SECNT ;DOES HE WANT ANOTHER SECTOR/BLOCK? BLE .+4 ;ALL DONE. RTS PC ;RETURN FOR ANOTHER ONE TST (SP)+ JMP START ;GO BACK AND WAIT FOR ANOTHER SEQUENCE ;01-09-73 PRTASC: MOV #1VB0200: MOV #12.,TABPTR B0300: DEC R5 ;INPUT CHAR COUNT BGE B0320 ;MORE TO GET CMP R0,#PRTBUF ;BUFFER END WITHOUT LINE TERMINATOR? BNE C0100 ;YES: BE NICE AND PRINT ANYWAY RTS PC ;INPUT BUFFER EMPTY: GET ANOTHER ONE B0320: MOVB (R1)+,R2 ;NEXT ASCII CHAR CMP R2,#40 ;<40? BGE B0400 ;NO CMP R2,#11 ;HORIZ TAB? WND STACK POINTER CMP (R0)+,(R0)+ ;ZIP UP TO POINT TO WHERE PS WAS STORED MOV #MONTH,R1 ;INIT POINTER TO CLOCK AREA FOR DATE MOV (R0)+,(SP) ;MOVE PS TO NEW PLACE IN PREP FOR RTI BIT #1,(SP) ;WHILE HERE CHECK CARRY SET @ ENTRY BEQ GETSB2 ;WAS DATE: LEAVE AS IS MOV #SECOND,R1 ;WAS TIME: RE-INIT FOR TIME GETSB2: ;R1 NOW POINTING TO PROPER PARAMTER LIST MOV (R0),-(SP) X ; 1=I/O COMPLETE SUB EXIT ; ; EQUATES FOR ERRTYP ; SPACE = 40 ; ASCII SPACE ; ; THE FOLLOWING EQUATES ARE FOR THE ERROR MODULE ; THREAD = 0. ; THREAD WORD ERRNUM = 2. ; ERROR NUMBER ARGM1 = 4. ; ARGUMENT 1 ARGM2 = 6. ; ARGUMENT 2 ARGM3 = 8. ; ARGUMENT 3 ARGM4 = 10. ; ARGUMENT 4 ; ; PLOCK = 340 Y,LINCNT ;WILL PRINT ONE LINE OF 128 ASCII CHARS;01-09-73 MOV PC,R0 ;01-09-73 ADD #DSCBUF-.,R0 ;01-09-73 MOV PC,R1 ;01-09-73 ADD #LPBUF-.,R1 ;01-09-73 MOV R5,-(SP) MOV #128.,R2 ;MUST XFER & CALC PARITY FOR EACH CHAR ;01-09-73 2$: MOZ BEQ TABPUT CMP R2,#12 ;LINE FEED? BEQ C0100 ;YES: GO PRINT CMP R2,#14 ;FORM FEED? BNE B0300 ;NO IGNORE ILLEGAL CHAR INC FORMFD ;FLAG FOR HOME AFTER PRINT BR C0100 .PAGE B0400: CMP R2,#140 ;>137? BGE B0300 ;YES: IGNORE CLR -(SP) ;GET EVEN PARITY FOR R2 MOV #7,R4 MOV R2,R[ ;ALSO TRANSFER PC CLR (R0) ;ALL UPPER BYTES WILL BE CLEARED... ;...BEFORE DATA LOADED ONTO STACK MOVB (R1)+,(R0) ;LOAD MONTH [OR] SECOND CLR -(R0) ;NEXT STACK CELL MOVB (R1)+,(R0) ;LOAD DAY [OR] MINUTE CLR -(R0) MOVB (R1)+,(R0) ;LOAD YEAR [OR] HOUR CMP -(SP),-(SP) ;MOVE TO POINT AT SAVED REGISTERS MOV (SP)+,R0 ;RESTORE\ ; PRIORITY LOCK-OUT MASK FOR PSR PSR = 177776 ; ADDRESS OF PROCESSOR STATUS REGISTER ; TEMP: .WORD 0 ; TEMPORARY SAVE AREA FOR LERTYP ; ; LERTYP IS CALLED TO TYPE AN ERROR MESSAGE UNDER LOCKOUT. ; MOV PSR,-(SP) ; MOV MADDR,-(SP) ; JSR PC,LERTYP ; ; LOCKOUT WILL BE RELEASED UPON THREADING THE ERROR MODULE ; LERTYP = . ]VB (R0),R3 ;01-09-73 MOV #7,R5 ;01-09-73 CLR R4 ;01-09-73 4$: RORB R3 ;01-09-73 ADC R4 ;01-09-73 SOB R5,4$ ;01-09-73 ASLB (R0) ^3 B0450: ASR R3 ADC (SP) DEC R4 BGT B0450 ASL R2 ASR (SP)+ RORB R2 ;SHIFT IN PARITY BIT MOVB R2,(R0)+ ;STICK IT INTO PRINT BUFFER DEC TABPTR ;KEEP TRACK OF POSITION BNE B0500 MOV #12.,TABPTR ;RESET TAB COUNTER B0500: CMP R0,#PRTBUF+131. ;REACH END OF PRINTER LINE CAPACITY? BLOS B0300 ;GET ANOTHER CHAR _ USER'S MOV (SP)+,R1 ;ALSO RTI ;ZAP! RETURN TO CALLER WITH HIS STATUS ; ...AND THREE PARAMETERS ON STACK. .PAGE ; ******** ; CITGO'S JULIAN DATE EMT IS HERE - RETURNS 1 WORD ON STACK ; ******** .REF JDATE ; ******** .D` MOV 2.(SP),TEMP ; SAVE MODULE ADDRESS UNDER LOCKOUT MOV (SP)+,(SP) ; FOR PROPER RETURN JSR R5,PUSHR ; SAVE ALL REGISTERS MOV 14.(SP),-(SP) ; PUT PSR ON STACK SO COMPATIBLE MOV TEMP,R5 ; ADDRESS OF MODULE BR ERRA05 ; DO IT ; ERRTYP = . JSR R5,PUSHR ; SAVE ALL REGISTERS MOV 14.(SP),R5 ; GET MODULE ADDRESS MOV PSR,-(SP) ; SAVE PRa ;01-09-73 ROR R4 ;01-09-73 RORB (R0) ;01-09-73 MOVB (R0)+,(R1)+ ;01-09-73 SOB R2,2$ MOV (SP)+,R5 BR PRINT ;ILLEGAL CHARS WILL BE FORCED + OR - 100 OCTAL ;01-09-73 .PAGE BIN2OCT: ;BINARY TO ASCII CONVERSION - WITH PARITY b .PAGE C0100: ;NOW ENTER PRINT SECTION MOVB #240,(R0) ;SPACE IN POSSIBLE ODD BYTE AT END MOV #PRTBUF,R3 SUB R0,R3 ;GET (NEG) CHAR COUNT ASR R3 ; (NEG) WORD COUNT BNE C0400 ;SOMETHING THERE: GO PRINT IT CMP R2,#12 ;WAS LAST INPUT CHAR LINE FEED? BNE C0500 ;NO MOVB #201,ONECHR ;YES: SET TO UPSPACE BIT #400,@#SWR cEF JULDAT ; ******** JULDAT = . ; ******** MOV (SP),-(SP) ; MAKE ROOM FOR RETURNED ARG. ******** MOV JDATE,2(SP) ; PUT JULIAN DATE ON STACK FOR CALLER ******** RTS PC ; DONE - BACK TO CALLER ******** .END dOCESSOR PRIORITY ON STACK MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT ERRA05: DEC (R5) ; IS MODULE THREADABLE BNE ERRA30 ; NO - BUMP BACK AND RETURN TO CALLER MOV R5,@QLAST ; THREAD REQUEST MOV R5,QLAST ; VIA QLAST INC IOLUSE ; BUMP NO. OF REQUESTS BEQ ERRB00 ; FIRST ONE - LET'S DO IT ERRA10: MOV (SP)+,PSR ; RESTORE CPU PRIORITY ERRA20: JSR R5,POPR ; e MOV #6,R2 ;CONVERT SIX CHARS BIN050: MOVB R4,-(R3) ;PUT NEXT DIGIT IN ASCII BUFFER BICB #370,(R3) ;ISOLATE ONLY THIS OCTAL DIGIT CLR -(SP) ;WILL ACCUM PARITY MOVB (R3),TMP ;WANT TO COUNT BITS ASR TMP ADC (SP) ASR TMP ADC (SP) ASR TMP ADC (SP) ASR (SP)+ ;SEE IF BIT COUNT WAS EVEN OR ODD BCC BIN100 f ;SET TO DOUBLE-SPACE? BEQ C0200 ;NO INC ONECHR ;TWO LINES C0200: JSR PC,PRTONE ;GO UPSPACE ONE OR TWO LINES BR PRINT C0400: MOV #PRTBUF,@#LPADR MOV R3,@#LPWC MOV #1,@#LPLF BIT #400,@#SWR ;DOUBLE SPACE? BEQ C0500 ;NO MOV #3,@#LPLF C0500: MOV #4000,@#LPCMD ;***** PRINT! ***** CLR CURBUF TST @#LPSTAT hRESTORE REGISTERS MOV (SP)+,(SP) ; SET STACK UP FOR VALID RETURN RTS PC ; RETURN TO CALLER ; ; CAN'T THREAD ERROR MODULE ; ERRA30 = . INC (R5) ; SET BACK THREAD WORD BR ERRA10 ; RETURN ; ; FIRST REQUEST - START MESSAGE ; ERRB00 = . CLR EXITSW ; CLEAR EXIT SWITCH FOR GOOD RETURN ERRB10: MOV QFIRST,R5 ; GET NEXT REQUEST BEQ ERRB30 i ;WAS EVEN: PARITY BIT NOT NEEDED BISB #200,(R3) ;MAKE EVEN BY SETTING PARITY BIT BIN100: BISB #060,(R3) ;MAKE CHARACTER ASCII ASR R4 ;SHIFT FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT BIN050 ;BACK FOR MORE RTS PC PRTHED: MOV R3,@#LPADDR ;INIT PRINTEj BPL .-4 TST FORMFD ;DID FF END LINE? BEQ C0600 ;NO JSR PC,NEWPGE C0600: BR PRINT ;NOW BACK FOR NEXT LINE .PAGE TABPUT: ;INSERT SPACES FOR TAB CMP R0,#PRTBUF+131. ;END OF LINE? BHI C0100 MOVB #240,(R0)+ ;INSERT SPACE DEC TABPTR BNE TABPUT BR B0200 ;GO RESET COUNTER & FETCH NEXT CHAR GO: CLR k; UPDATE 11/10/72 CORLOD.C02 ; UPDATE 10/12/72 CORLOD.C01 ; UPDATE 6/22/72 CORLOD.S04 ; UPDATE 05-MAY-72 CORLOD.S03 ; UPDATE 5/5/72 CORLOD.S02 ; UPDATE 5/3/72 CORLOD.S01 .TITLE CORLOD ;*********************************************************************** ;* * ;* USED BY LOADER TO LINK OVERLAY TASKS WITH RESIDENT * l ; NO REQUESTS LEFT MOV (R5)+,QFIRST ; PULL THREAD, RELINK, R5=ADDR. ERRNUM BNE ERRB15 MOV #QFIRST,QLAST ; PULLED LAST REQUEST-RESET QLAST ERRB15: MOV (SP)+,PSR ; RESTORE CPU PRIORITY MOV #EDITBL,R4 ; ADDRESS OF MESSAGE EDIT TABLE MOV (R5)+,-(SP) ; INTERGER TO STACK & BUMP POINTER ******** MOV (R4)+,-(SP) ; EDIT STRING ADDRESS TO STACK JSR PC,BINASC ; CONVERT INTEGER TO ASCImR TO PRINT MOV #-9.,@#LPWC ;WORD COUNT MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ;NOT YET RTS PC .PAGE ADRESS: .WORD 0 KEY: .WORD 0 ;DEVICE SELECTION KEY LINCNT: .WORD 0 SECNT: .WORD 0 ;# OF SECTORS TO PRINT SECTOR: .WORD 0 ;CURRENT SECTOR BEING DUMPED TMP: .WORD 0 HEDBUF: .BYTE '-,'S,'E+200,'C+200,'T+200,'O+200,'R+200,'n@#MGSTAT 02:02:73 MOV R5,@#MAGCMD 02:02:73 TAPRDY: MOV R0,-(SP) MOV #100,R0 SOB R0,. ;LOOP UNTIL CONTROLLER SETTLES MOV (SP)+,R0 TSTB @#MGSTAT ;...THEN LOOP UNTIL BUSY GOES FALSE 01-31-73 BPL .-4 TSTB @#MGSTAT 02-02-73 BPL .-4 o;* CORE LOCATIONS. * ;* * ;*********************************************************************** ; .DEF CORLOD,CORTBL .REF TSTAT,GTIME,GDATE,SDATE,STIME,TASKS,HEADER .REF IFD,DOD,FSTAT,PHYDEV,NODREQ,CMPTMR .REF CPRSIP,FINIT,PFRITE,FILE .REF CDSRCH,CDILST,DQFRST,DQLAST,NDPRTY,HPRIRQ,CALLED .REF DIHA50,FMFRST,FMpI BYTE STRING ERRB20: MOV (R5)+,R3 ; BINARY # - ARG TO OCTAL (AT LAST) ******** MOV (R4)+,R2 ; DESTINATION ADDRESS ******** JSR PC,BIN2OC ; ******** TST (R4) ; BUMP EDIT POINTER BNE ERRB20 ; NO - AGAIN MOVB #SPACE,EDIT1 ; WIPE OUT SIGN IN ERRNUM; SUB #12.,R5 ; R5 = THREAD WORD ADDRESS MOV #1.,(R5) q-,'- DISCID: .BYTE 0,'< SECNUM: .=.+6 .BYTE '>+200 MEMBUF: .BYTE '-,'-,'C+200,'O+200,'R+200,'E+200,'-,'-,'-,'-,'< MEMADR: .=.+6 .BYTE '>+200 DSCTAB: ;TABLE OF DISC ADDRESSES FOR BOTH DISCS ; FOR DDC DISC: .WORD 165300 ;DISC CONTROL STATUS AND COMMAND REG .WORD 165304 ;DISC MEMORY ADDRESS REG .WORD 165302 ;DISC WORD COUNT .WORD 165306 ;DISC ADDRESS REG .WORD 1653r 02-02-73 RTS PC NEWPGE: MOVB #300,ONECHR JSR PC,PRTONE CLR FORMFD RTS PC .PAGE PRTONE: MOV #-1,@#LPWC ;ENTRY POINT FOR PRINTING ONE WORD BIT #4,@#LPSTAT ;MUST WAIT FOR PRINTER READY TO GIVE... BEQ .-6 ;...AUTOLINEFEED CHANCE TO FINISH BEFORE KILLING ; IT BY GOING TO PAPER-FEED MODE CLR @#LPLF ;TO PAPER-FEED MODE sLAST,FNEXT,AULIST,DIOA65,IOSTAT .REF NOFMRQ,FMACTV,FLMB00,COMPID .REF $TKFLS,TPRTY,PUSHR,POPR,BSIZE,PPTAB .REF CRDON,LPON,CRDOFF,LPOFF,LOGMAX .REF DLCST,MPQST,MSQST,OUTST,RTEST .REF SYDST,TETST,INVNUM,TSKRN,BUFST .REF BUFEND,BUFCNT,BUFERR,MTLST,MTPST .REF NAKBUF,ACKBUF,CANBUF,STXBUF,SHDST,DCRTST,CELCNT,CELST1 ;******** .REF CELSTS,CELST,ELMCNT,ELMST ; .PAGE CORLOD = . MOV t ; SET THREADABLE MOV #IOLIST,-(SP) ; I/O LIST ADDRESS ON STACK FOR TTYOUT JSR PC,TTYOUT ; TYPE ERROR MESSAGE ERRB25: TST EXITSW ; CALLED FROM I/O COMPLETE? BEQ ERRA20 ; NO - RETURN TO CALLER RTS PC ; YES-RETURN TO TTYOUT ; ; I/O COMPLETE SUBROUTINE FROM TTYOUT - EXIT TYPE 3 ; TTYNXT = . INC EXITSW ; SET EXIT SWITCH FROM I/O COMPLETE MOV PSR,-(SP) ; S10 ;DISC ERROR REGISTER ; FOR RF-11 DISC: .WORD 177460 ;DISC CONTROL STATUS AND COMMAND REG .WORD 177464 ;DISC MEMORY ADDRESS REG .WORD 177462 ;DISC WORD COUNT .WORD 177466 ;DISC ADDRESS REG .WORD 177470 ;DISC ADDRESS EXTENSION REG LPBUF: .=.+132. DSCBUF: .=.+128. ;DATE: 22-MAR-72 ; M W KLEIN .END START v MOV #ONECHR,@#LPADR MOV #4000,@#LPCMD ;***** PRINT ***** TST @#LPSTAT BPL .-4 RTS PC CNTSAV: 0 COMAND: 0 CURBUF: 0 ERRFLG: 0 FORMFD: 0 NOTRYS: 0 ONECHR: .BYTE 0,240 RECCNT: 0 RPTFLG: 0 TABPTR: 0 WATCNT: 0 WRDCNT: 0 .PAGE EBCTAB: .BYTE 005,045,000,024,025 EBCDIC: .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,36w(SP),-(SP) MOV #CORTBL,2.(SP) ; PUT ADDRESS ON STACK FOR ROSLOD RTS PC ; CORTBL = . .RAD50 /TST/ .RAD50 /AT / .WORD TSTAT .RAD50 /GTI/ .RAD50 /ME / .WORD GTIME .RAD50 /GDA/ .RAD50 /TE / .WORD GDATE .RAD50 /SDA/ .RAD50 /TE / .WORD SDATE .RAD50 /STI/ .RAD50 /ME / .WORD STIME .RAD50 /TAS/ xAVE PROCESSOR PRIORITY MOV #PLOCK,PSR ; SET CPU LOCKOUT LEVEL 7 BR ERRB10 ; SEE IF ANY OTHER REQUESTS AND ; ; PROCESS THEM ACCORDINGLY ; ERRB30: MOV #-1.,IOLUSE ; RESET I/O LIST IN USE SWITCH MOV (SP)+,PSR ; RESTORE CPU PRIORITY RTS PC ; RETURN TO TTYOUT ; CONVERTS A BINARY NUMBER TO OCTAL - USED FOR ARGUMENTS. ******** ; R3 = BINARY NUMBER yE AFTER OTHER NAMED ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES MOV #340,PSR ; SET CPU LEVEL TO 7 DURING IPL MOV #SSTACK,SP ; SET UP SYSTEM STACK .IFZ $SAVE-104400 MOV 14,-(SP) MOV 16,-(SP) .ENDC JSR PC,PSTIPL ; TRAP INIT. ; ******** MOV #0600,@#177774 ; SEY KERNAL STACK7,370,371,172,136,114,176 .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 EBCEND =.-1 .EVEN PRTBUF =. .=.+134. MAGBUF =. .END START { .RAD50 /KS / .WORD TASKS .RAD50 /HEA/ .RAD50 /DER/ .WORD HEADER .RAD50 /IFD/ .RAD50 / / .WORD IFD .RAD50 /DOD/ .RAD50 / / .WORD DOD .RAD50 /FST/ .RAD50 /AT / .WORD FSTAT .RAD50 /PHY/ .RAD50 /DEV/ .WORD PHYDEV .RAD50 /NOD/ .RAD50 /REQ/ .WORD NODREQ .RAD50 /CMP/ .RAD| ******** ; R2 = DESTINATION ADDRESS ******** ; R0 = ITERATION LENGTH ******** BIN2OC: MOV #6,R0 ; NUMBER OF ITERATION IN LOOP. ******** ADD R0,R2 ; POINT TO LAST CHARACTER. ******** BIA20: MOVB R3,-(R2) ; BUMP R2 TO 1 PAST LAST CHARACTER ******** BICB #370,(R2) ; CLEAR ALL BUT NUMBER BITS } LIMIT REGISTER ******** ; ******** .IFZ $SAVE-104400 MOV (SP)+,16 MOV (SP)+,14 .ENDC JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT ; SET UP HANDLER FOR MANUAL PUSHBUTTON MOV #MPSHLV,MPSHBT+2 MOV #SAVE,SAVTRP ; SET UP SAVE TRAP HANDLER MOV #SAVLEV,SAVT~ .WORD 165300,0,0 .ENDC .=DCS+NDISCS+NDISCS ; DELETE WHAT WE DON'T NEED ; WCR = . ; WORD COUNT REGISTER .IFZ $DDSDC .WORD 177462,0,0 .ENDC .IFNZ $DDSDC .WORD 165302,0,0 .ENDC .=WCR+NDISCS+NDISCS ; DELETE WHAT WE DON'T NEED ; CMA = . ; CURRENT MEMORY ADDRESS .IFZ $DDSDC .WORD 177464,0,0 .ENDC .IFNZ $DDSDC50 /TMR/ .WORD CMPTMR .RAD50 /CPR/ .RAD50 /SIP/ .WORD CPRSIP .RAD50 /FIN/ .RAD50 /IT / .WORD FINIT .RAD50 /PFR/ .RAD50 /ITE/ .WORD PFRITE .RAD50 /FIL/ .RAD50 /E / .WORD FILE .RAD50 /CDS/ .RAD50 /RCH/ .WORD CDSRCH .RAD50 /CDI/ .RAD50 /LST/ .WORD CDILST .RAD50 /DQF/ .RAD50 /RST ******** BISB #060,(R2) ; CONVERT TO A CHARACTER ******** ASR R3 ; SHIFT TO NEXT 3 BITS ******** BIC #100000,R3 ; STOP SIGN EXTENSION ******** ASR R3 ; ******** ASR R3 ; ******** DEC R0 ; COUNT WHICH CHARACTER ******** RP+2 .IFGE NTTYS-1 MOV #200,R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV R1,62 MOV #PRTINT,64 MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX .WORD 165304,0,0 .ENDC .=CMA+NDISCS+NDISCS ; DELETE WHAT WE DON'T NEED ; DAR = . ; DISC ADDRESS REGISTER .IFZ $DDSDC .WORD 177466,0,0 .ENDC .IFNZ $DDSDC .WORD 165306,0,0 .ENDC .=DAR+NDISCS+NDISCS ; DELETE WHAT WE DON'T NEED ; DAE = . ; DISC ADDRESS EXTENSION .IFZ $DDSDC .WORD 177470,0,0 .ENDC .IFNZ $/ .WORD DQFRST .RAD50 /DQL/ .RAD50 /AST/ .WORD DQLAST .RAD50 /NDP/ .RAD50 /RTY/ .WORD NDPRTY .RAD50 /HPR/ .RAD50 /IRQ/ .WORD HPRIRQ .RAD50 /CAL/ .RAD50 /LED/ .WORD CALLED .RAD50 /DIH/ .RAD50 /A50/ .WORD DIHA50 .RAD50 /FMF/ .RAD50 /RST/ .WORD FMFRST .RAD50 /FML/ .RAD50 /AST/ BGT BIA20 ; MORE TO COME. ******** RTS PC ; ALL DONE. ******** .END ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV #DINT,204 ; SET UP FOR DISC 0 MOV #240,206 ; AT INTERRUPT LEVEL 5 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,@#130 ; DISK 0 AT LEVEL 5. VECTOR IS 130. ******** MOV #240,@#132 ; ******** .ENDC .EDDSDC .WORD 165310,0,0 .ENDC .=DAE+NDISCS+NDISCS ; DELETE WHAT WE DON'T NEED ; ; THE FOLLOWING EQUATES ARE USED TO DETERMINE IF ; ERRORS OCCURRED AND IF SO, IF THEY ARE RETRIABLE. IT IS ; ASSUMMED THAT ALL DEVICES ARE ALIKE AND HAVE SOME- ; WHAT SIMILAR DCS, DAR AND DAE REGISTERS AS THE ; DEC RF-11. ; .IFZ $DDSDC ; THE FOLLOWING MASKS ARE FOR THE RF-11 ; DERMSK = 100000 ; DISC ERROR MASK FOR DCS ; .WORD FMLAST .RAD50 /FNE/ .RAD50 /XT / .WORD FNEXT .RAD50 /AUL/ .RAD50 /IST/ .WORD AULIST .RAD50 /DIO/ .RAD50 /A65/ .WORD DIOA65 .RAD50 /IOS/ .RAD50 /TAT/ .WORD IOSTAT .RAD50 /NOF/ .RAD50 /MRQ/ .WORD NOFMRQ .RAD50 /FMA/ .RAD50 /CTV/ .WORD FMACTV .RAD50 /FLM/ .RAD50 /B00/ ; UPDATE 11/6/72 ROS2.CT0 (V2) ; UPDATE 10/9/72 ROS2.CT0 ******** ; THIS SYSTEM IS FOR CITGO ONLY. IT WILL ******** ; BE LABELED AS FOLLOWS: ******** ; CITGEN - THE ROSGEN VERSION FOR THE ******** ; PROJECT. IT WILL HAVE A LP ******** ; AND ROSLNDC .IFNZ $DTAPE MOV #DTINT,214 ; SET UP VECTOR FOR MOV #300,216 ; THE DECTAPE .ENDC ; ******** ; ONLY FOR MAGTAPES IN CITGO. ******** ; ******** MOV #MTINT,@#104 ; SET UP MAGTAPE INTERRUPT VECTOR. ******** MOV #240,@#106 RETDCS = 031000 ; RETRIABLE DCS ERRORS ; ; BIT 13 = WRITE CHECK ERROR ; ; BIT 12 = DATA PARITY ERROR ; ; BIT 09 = MISSED XFER RETDAE = 170000 ; RETRIABLE DAE ERRORS ; ; BIT 15 = ADDRESS PARITY ERROR ; ; BIT 14 = A TIMING TRACK ERROR ; ; BIT 13 = B TIMING TRACK ERROR ; .WORD FLMB00 .RAD50 /COM/ .RAD50 /PID/ .WORD COMPID .RAD50 /$TK/ .RAD50 /FLS/ .WORD $TKFLS .RAD50 /TPR/ .RAD50 /TY / .WORD TPRTY .RAD50 /PUS/ .RAD50 /HR / .WORD PUSHR .RAD50 /POP/ .RAD50 /R / .WORD POPR .RAD50 /BSI/ .RAD50 /ZE / .WORD BSIZE .RAD50 /PPT/ .RAD50 /AB / .WORD OD II. INPUT WILL ******** ; CORE RESIDENT. THE COMMON ******** ; WILL BE LINKED WITH THE SYST******** ; CITGO - ROS2 FOR THE PROJECT. NO LP******** ; WILL BE IN THE SYSTEM NOR ******** ; ROSLOD II. ******** ; UPDATE 6/30/72 ROS2.SYS ; UPDATE 6/27/72 ; ******** ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; JSR PC,EMTINIT ; FILL UNDEFINED EMT REFS WITH ERROR RETURN JSR PC,TTINIT ;INITIALIZE TTYIO TABLES JSR PC,CLINIT ;INIT FOR CLOCK ROUTINES .IFNZ OVRLAY JSR PC,DYSINI ; INIT. DYNAMIC STORAGE ALLOCATOR .ENDC .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC ; BIT 12 = C TIMING TRACK ERROR ; .ENDC .IFNZ $DDSDC ; ; THE FOLLOWING MASKS ARE FOR THE DDS DISC ; DERMSK = 100000 ; DISC ERROR MASK FOR DCS ; RETDCS = 031000 ; RETRIABLE DCS ERRORS ; ; BIT 13 = WRITE CHECK ERROR ; ; BIT 12 = BLOCK CHECK ERROR ; ; BIT 9 = MISSED XFER RETDAE = 0 ; NO RETRIABLE DAE ERRORS PPTAB .RAD50 /CRD/ .RAD50 /ON / .WORD CRDON .RAD50 /LPO/ .RAD50 /N / .WORD LPON .RAD50 /CRD/ .RAD50 /OFF/ .WORD CRDOFF .RAD50 /LPO/ .RAD50 /FF / .WORD LPOFF .RAD50 /LOG/ .RAD50 /MAX/ .WORD LOGMAX ; .RAD50 /DLCST/ .WORD DLCST .RAD50 /MPQST/ .WORD MPQST .RAD50 /MSQST/ .WORD ROS2.SYS ; UPDATE 6/22/72 ROS2.SYS ; UPDATE 6/21/72 ROS2.SYS ; UPDATE 5/5/72 ROS2.SYS ; UPDATE 5/2/72 ; ROS2.SYS ; UPDATE 4/29/72 ROS2.SYS ; UPDATE 4/21/72 ROS2.SYS ; UPDATE 4/17/72 ROS2.SYS ; UPDATE 4/14/72 ROS2.SYS ; UPDATE 4/13/72 ROS2.SYS ; UPDATE 4/12/72 ROS2.SYS ; UPDATE 4/10/72 ROS2.SYS ; UPDATE 4/10/72 .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC .IFNZ NDISCS .REF AUFCN,AULIST,DISCIO,INIDSC .REF CDIFCN,CDILST .REF TASKS,$TKFLS,$TKFLF CLR PSR ; RESET LOCKOUT SO DISC INTERRUPT ; ; MAY BE RECEIVED CLRB AUFCN ; SET TO READ ALLOCATION FILE TYPE DIR. MOV #AULIST,-(SP) JSR PC,DISCIO ; RE .ENDC ; .IFNZ ERRPRT ; ; DISC ERROR MESSAGE PRINTOUT MODULES ; ERMOD1 = . .WORD 1,0,0,0,0,0 ; ERROR MODULE DEVICE 0 ; .IFG NDISCS-1 ERMOD2 = . .WORD 1,0,1,0,0,0 ; ERROR MODULE DEVICE 1 .ENDC ; .IFG NDISCS-2 ERMOD3 = . .WORD 1,0,2,0,0,0 ; ERROR MODULE DEVICE 2 .ENDC ; ; EXPAND IF MORE THAN 3 DISC DEVICE CONTROLLERS ; ; ADDRESS OF ERROR MODULES ; ERRMOD MSQST .RAD50 /OUTST/ .WORD OUTST .RAD50 /RTEST/ .WORD RTEST .RAD50 /SYDST/ .WORD SYDST .RAD50 /TETST/ .WORD TETST .RAD50 /INVNUM/ .WORD INVNUM .RAD50 /TSKRN/ .WORD TSKRN .RAD50 /BUFST/ .WORD BUFST .RAD50 /BUFEND/ .WORD BUFEND .RAD50 /BUFCNT/ .WORD BUFCNT .RAD50 /BUFERR/ .WORD BUFERR ROS2.SYS ; UPDATE 4/5/72 ROS2.SYS ; UPDATE 3/31/72 ROS2.SYS ; UPDATE 3/23/72 ROS2.SYS ; UPDATE 3/17/72 ROS2.SYS ; UPDATE 2/24/72 ROS2.SYS ; UPDATE 2/16/72 ROS2.SYS ; UPDATE 1/12/72 ROS2.SYS ; UPDATE 1/11/72 ROS2.SYS ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP AD FILE TYPE DIRECTORY IPLX20: CMP #1.,AULIST ; I/O COMPLETE? BNE IPLX20 ; NO-KEEP CHECKING MOVB #1.,AUFCN ; PUT BACK FCN AS WRITE IN LIST CLRB CDIFCN ; SET TO READ CORE DIRECTORY IMAGE MOV #CDILST,-(SP) JSR PC,DISCIO ; READ CORE DIRECTORY IMAGE INTO CORE DIR. IPLX30: CMP #1.,CDILST ; I/O COMPLETE? BNE IPLX30 ; NO-KEEP CHECKING MOVB #1.,CDIFCN ; RESET = . .WORD ERMOD1 ; .IFG NDISCS-1 .WORD ERMOD2 .ENDC ; .IFG NDISCS-2 .WORD ERMOD3 .ENDC ; ; EXPAND IF MORE THAN 3 DISC DEVICE CONTROLLERS ; ; EQUATES FOR ERROR MODULES ; THREAD = 0. ; THREAD WORD ERRNUM = 2. ; ERROR NUMBER ARGM1 = 4. ; ARGUMENT 1 ARGM2 = 6. ; ARGUMENT 2 ARGM3 = 8. ; ARGUMENT 3 ARGM4 .RAD50 /MTLST/ .WORD MTLST .RAD50 /MTPST/ .WORD MTPST .RAD50 /NAKBUF/ .WORD NAKBUF .RAD50 /ACKBUF/ .WORD ACKBUF .RAD50 /CANBUF/ .WORD CANBUF .RAD50 /STXBUF/ .WORD STXBUF .RAD50 /SHDST/ .WORD SHDST .RAD50 /DCRTST/ .WORD DCRTST .RAD50 /CELCNT/ .WORD CELCNT .RAD50 /CELST1/ .WORD CELST1 .R = %6 PC = %7 PS = 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH ******** $CORAL = 0 ; CORE ALLOCATION ; =0 SOFTWARE ; =1 HARDWARE $SAVE = 104400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 4. ; NO. OF SOFTWARE PRIORITIES. ******** PRIBFCN IN LIST BACK TO WRITE CLRB $TKFLF ; SET UP TO READ TASK TABLE MOV #$TKFLS,-(SP) JSR PC,DISCIO ; READ TASK TABLE IPLX40: CMP #1.,$TKFLS ; I/O COMPLETE? BNE IPLX40 MOVB #1,$TKFLF ; SET FUNCTION TO A WRITE FOR OTHERS ******** JSR PC,SYSINI ; INIT. CORE TASKS ; ; SET UP INIDSC IN TASK TABLE MOV #$INITD,R0 ; TASK NUMBER MOVB #1,TPRTY(R0) ; RUN = 10. ; ARGUMENT 4 ; .ENDC ; .PAGE ; ; THE FOLLOWING IS FOR THE DISC TIMER MODULES AND ; TIMEOUT COMPLETE SUBROUTINE 'TIMOUT' ; MSEC = MSECR ; MILLISECOND TIMER RESOLUTION ; JOMSEC = 21!MSEC ; OPTION BYTE-J OPTION, MSEC RESOLUTION ; RESTIM = 4. ; WORD TO RESET TIMER AT TIMJSR = 6. ; WORD TO CHANGE TIMER JSR AT ; .WORD 0 ; DEVICE 0 TIMER MODULE AD50 /CELSTS/ .WORD CELSTS .RAD50 /CELST/ .WORD CELST .RAD50 /ELMCNT/ .WORD ELMCNT .RAD50 /ELMST/ .WORD ELMST ; ; .WORD -1. ; END OF TABLE ; .END KG = NPRIOR ; PRIORITY OF BACKGROUND $BATCH = 1 ; NO BATCH IN THE SYSTEM ******** .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 4 ; ONLY ONE CORE RESIDENT TASK ******** NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM ;NOTE: IF OVERLAYS ARE USED, THEN THE AT PRIORITY 1 ASL R0 MOV #INIDSC,HEADER(R0) ; TASK'S HEADER ADDRESS CMP #$INITD,TASKS BLE IPLX60 MOV #$INITD,TASKS IPLX60 = . .ENDC MOV #CALIST,-(SP) ; PRINT ROS CALL LINE ON SYSTEM TTY. ******** JSR PC,TTYOUT ; ******** IPLY10: CMP CALIST,#1 ; WAIT ON EXIT TYPE 1 ******** BNE IPLY10 ; DTIMR1 = . .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE JOMSEC ; OPTION BYTE .WORD 0 ; RESET/TIMER .WORD TIMOUT ; TIMER COMPLETE SUBROUTINE ADDRESS ; .IFG NDISCS-1 .WORD 1 ; DEVICE 1 TIMER MODULE DTIMR2 = . .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE JOMSEC ; UPDATE 11/14/72 EMTRAP.C03 ; UPDATE 11/6/72 EMTRAP.C02 ; UPDATE 10/12/72 EMTRAP.C01 ; UPDATE 3/MAY/72 EMT.S34 ; UPDATE 4/13/72 EMTRAP ; ******************************************************************** ; * PROGRAM IDENTIFICATION: "EMTRAP" * ; * EMULATOR TRAP SERVICE ROUTINE * ; * * ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 1 ; SYSTEM OVERLAY OPTION ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 40. ; ONLY 40. DISK RES. TASKS ******** .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR = 0 ;SET TO ZERO ONLY IF NO OVERLAYS ******** MOV #$INPNO,-(SP) ; QUEUE INPUT AUTOMATICALLY. ******** CLR -(SP) ; DEFAULT PRIORTY ******** CLR -(SP) ; NO PASSED ARGUMENT. ******** CLR -(SP) ; RETURN AT ONCE ******** JSR PC,QUEUE ; ******** TST (SP)+ ; POP OF ERROR WORD ; OPTION BYTE .WORD 0 ; RESET/TIMER .WORD TIMOUT ; TIMER COMPLETE SUBROUTINE .ENDC ; .IFG NDISCS-2 .WORD 2 ; DEVICE 2 TIMER MODULE DTIMR3 = . .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE JOMSEC ; OPTION BYTE .WORD 0 ; RESET/TIMER .WORD TIMOUT ; TIMER COMPLETE SUBROUTINE ADDRESS; * PURPOSE: DECODES ALL EMT CALLS AND TRANSFERS CONTROL TO PROPER* ; * SUBROUTINE, AFTER ALTERING STACK TO LOOK IDENTICAL TO A * ; * "JSR PC,SBRTNE". * ; * * ; * USAGE: ALL EXTERNAL LINKS TO MONITOR SUBROUTINES ARE MADE VIA * ; * CALLS OF THE FORM: "EMT SNUMBER", WHERE "SNUMBER" IS A * ; * PRE-ASSIGNED INDEX TO THE TABLE OF MONITOR SUBROUTINES. AN .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXXXXXX ;NTASK MUST BE <= MXTASK .ENDC ******** CLR R0 CLR R1 CLR R2 CLR R3 CLR R4 CLR R5 MOVB #200,PSBENB ; ENABLE MANUAL PUSHBUTTON INTERRUPT JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ******** ; TTY LIST FOR ROS CALL LINE. ******** CALIST: .WORD 1 ; THREAD WORD .ENDC ; ; EXPAND IF MORE THAN 3 DISC DEVICE CONTROLLERS ; ; ONE HUNDRED MILLISECOND TIME DELAY SET WORD ; TDELAY = . .BYTE 100. ; MULTIPLE .BYTE 0 ; ONE-SHOT ; ; USED TO IGNORE DISC TIME-OUT ; NOPTIM: RTS PC ; RETURN TO TIMER ; ; TIMER MODULE ADDRESSES ; TMTBL = . .WORD DTIMR1 ; TIMER MODULE DISC UNIT 0 ; .IFG NDISCS-1 .WORD DTIMR2 Y * ; * ARGUMENTS REQUIRED BY THE SUBROUTINE MUST BE PUSHED ONTO THE * ; * STACK PRIOR TO THE CALL. UPON ENTRY TO THE SUBROUTINE THE STACK* ; * WILL LOOK THE SAME AS IF A "JSR PC,SBRTNE" HAD BEEN THE CALL. * ; * THIS ALLOWS CALLS OF THE JSR-TYPE TO BE COMPATIBLE WITH THE * ; * EMT-TYPE CALLS. ALTHOUGH PROCESSOR STATUS IS RAISED TO LEVEL * ; * SEVEN DURING THE TRAP ROUTINE, IT IS RETURNED TO ITS STATE * ; * AT THE TIME OF CALL WHEN THE CALLED SUBROUTINE IS .IFNZ OVRLAY ; ; STATE SIZE OF DYNAMIC CORE STORAGE IN ROS ; $DYNSZ = 50000 ; RESERVE DYNAMIC POOL AREA. (10K) ******** .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = -1 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = -1 ******** .BYTE SYSTTY ; USE SYSTEM TTY. ******** .BYTE 1 ; EXIT TYPE ******** .WORD 0 ; NO I/O COMPLETE ******** .BYTE 0 ; NO ERROR TASK. ******** .BYTE 1 ; PRIORTY OUTPUT ******** .WORD 0,0 ; ******** ; TIMER MODULE DISC UNIT 1 .ENDC ; .IFG NDISCS-2 .WORD DTIMR3 ; TIMER MODULE DISC UNIT 2 .ENDC ; ; EXPAND IF MORE THAN 3 DISC DEVICE CONTROLLERS ; ; ; TIMER COMPLETE RECEIVED SWITCHES ; TMCRSW = . .BYTE 0,0,0 ; SWITCHES TO KEEP CONFLICT ; ; BETWEEN DISC INTERRUPT AND ; ; TIMER CALL FROM HAPPENING ; .=TMCRSW+NDISCS ; USE ONLENTERED. * ; * * ; * STACK ON ENTRY: * ; * 2(SP): (PS) AT TIME OF TRAP * ; * (SP): (PC) CALLER RETURN ADDRESS * ; * * ; * STACK ON EXIT: * ; * (SP): (PC) CALLER RETURN ADDRESS ; PRIORITY PROPERTY LEVEL 2 PRIP03 = -1 ; PRIORITY PROPERITY LEVEL 3 ******** PRIP04 = -1 ; PRIORITY PROPERITY LEVEL 4 ******** PRIP05 = -1 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = -1 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = -1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = -1 ; PRIORITY PROPERTY LEVEL 9 .WORD CALINE ; ADDRESS OF BUFFER ******** CALINE: .WORD 2$-1$ ; NUMBER OF CHARACTERS IN BUFFER ******** .WORD 0 ; RESERVED ******** 1$: .ASCII <15><12>/ROS II-CITGO V(G01)/<15><12> ; ******** .EVEN ; ******** 2$: ; ******** ; ; ; ; Y WHATS NEEDED .EVEN ; ; EXPAND FOR MORE THAN 3 DISC DEVICE CONTROLLERS ; .PAGE ; ; THE FOLLOWING IS USED TO CONTROL THE COMPRESSION INTERLOCK ; PROTECTION FEATURE. ; CPRSIP: .WORD -1. ; COMPRESSION IN PROGRESS FLAG ; .PAGE ; ; EQUATES FOR TASK PROGRAM HEADERS ; THREAD = 0. ; THREAD WORD ENTRY = 2. ; TASK ENTRY POINT INITPT = 4. ; TASK INITIALIZATION ENTRY MAXT * ; * * ; * ERROR RETURNS: IF AN EMT CODE IS USED WHICH IS INVALID * ; * ---EITHER OUTSIDE THE LIMITS OF THE EMT TABLE, OR AN INVALID * ; * CODE WITHIN THE TABLE--- A RETURN IS MADE IMMEDIATELY TO THE * ; * CALLER WITH NO ACTION TAKEN. * ; * THE CALLER SHOULD NOTE THAT HE MAY BE INTERRUPTED BETWEEN HIS * ; * EMT CALL AND THE EVENTUAL RETURN, PRIP10 = -1 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVEL 11 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .IFNZ OVRLAY ; .IFL 16.-NPRIOR XXXXXXXX .IFNZ OVRLAY ENDDYN = . - 2 ; TOP ADDRESS OF DYNAMIC CORE POOL ; SSTACK = 2000 ; SET UPPER STACK LIMIT. (WORD BEFORE) ******** ; .ENDC ; ; DYNSIZ: .WORD ENDDYN-SSTACK ; MAX # BYTES AVAIL. FOR DYN. AREA. ******** .END = 6. ; MAXIMUM EXECUTION TIME FLAGS = 8. ; TASK STATUS FLAG BITS ,BYTE. HPRIOR = 9. ; TASK PRIORITY CTIMER = 10. ; CURRENT TIMER VALUE TARG = CTIMER+ARG+ARG ; ARGUMENT (OPTIONAL) CPUST = TARG+2 ; CPU STATUS REGISTER (BYTE) TASKNO = CPUST+1 ;TASK NUMBER (BYTE) TSTACK = TASKNO+1 ; SAVED STACK POINTER REGSV = TSTACK+2 ; REGEVEN IN THE CASE OF AN ERROR.* ; * * ; * PROGRAMMER: 52 * ; * VERSION:003.003 * ; * DATE: 13-APR-72 * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; * TABLES AND PARAMETERS CURRENTLY CODED XXXXXXXX FOR MAXIMUM OF 16 PRIORITY LEVEL .ENDC ; ; THE FOLLOWING SYSGEN PARAMETERS SPECIFY THE NUMBER OF ; ENTRY'S IN A PRIORITY'S QPART TABLE. IF ZERO, THAT ; PRIORITY WILL NOT BE ALLOWED OVERLAY TASKS. A MAXIMUM ; OF 127 ENTRYS PER QPART WILL BE ALLOWED. ; ****NOTE: BE SURE PRIORITIES GREATER THAN NPRIOR HAVE ; TABLE SIZES OF 0 ; NEQP01 = 10. ; UPDATE 11/18/72 RPOM.C03 (DYNAMIC, HARDWARE ALLOCATION AT LAST $CORAL = 1 ; FORCE TO HARDWARE ALLOCATOR ******** ; UPDATE 10/18/72 RPOM.C02 ; UPDATE 10/12/72 RPOM.C01 ; UPDATE 6/27/72 RPOM.S24 ; UPDATE 6/26/72 RPOM.S23 ; UPDATE 6/22/72 RPOM.S22 ; UPDATE 5/5/72 RPOM.S21 ; UPDATE 5/2/72 RPOM.S20 ; UPDATE 4/14/72 RPOM.S19 ; UPISTER SAVE AREA ; ; EQUATES FOR I/O PARAMETER LIST ; THREAD = 0. ; LIST THREAD WORD DEVICE = 2. ; LOGICAL DEVICE NUMBER TYPE = 3. ; EXIT TYPE EXIT = 4. ; I/O COMPLETE ADDRESS IF TYPE = 3 ERRTSK = 6. ; TASK # TO QUEUE IF I/O ERROR LEVEL = 7. ; DISC PRIORITY LEVEL OF I/O REQUEST ERROR = 8. ; I/O ERROR INDICATOR SYSTEM = 10. ; R * ; ******************************************************************** .TITLE EMTRAP .REF QUEUE,SUSPND,UNSPND,EXIT,FRETSK,ABORT,QTIME,DQTIME .REF QSKED,DQSKED,TTYOUT,TTYIN,BINASC,ASCBIN .REF MASK,UNMASK,ERRTYP,GTIME,GDATE .REF CREAD,LPRNTR,DISCIO,SGLOAD,DECTAP .REF GOBACK,CKPT,NOCKPT,SCAN,NUMFLD,NPARAM .REF BFINIT,BFENTR,BFOPEN,BFCLOS,BFDELT,BFPACK,BFWRIT,BFREAD .REF ; NO. OF ENTRYS QPART LEVEL 1 NEQP02 = 10. ; NO. OF ENTRYS QPART LEVEL 2 NEQP03 = 10. ; NO. OF ENTRYS QPART LEVEL 3 NEQP04 = 10. ; NO. OF ENTRYS QPART LEVEL 4 NEQP05 = 0 ; ******** NEQP06 = 0 ; ******** NEQP07 = 0 ; ******** NEQP08 = 0 DATE 4/12/72 RPOM.S18 ; UPDATE 3/31/72 RPOM.S17 ; UPDATE 3/13/72 RPOM.S16 ; UPDATE 2/24/72 RPOM.S15 ; UPDATE 2/17/72 RPOM.S14 ; UPDATE 2/16/72 RPOM.S13 ; UPDATE 2/3/72 RPOM.S12 ; UPDATE 1/28/72 RPOM.S11 ; UPDATE 1/27/72 RPOM.S10 ; UPDATE 1/24/72 RPOM.S09 ; UPDATE 1/20/72 RPOM.S08 ; UPDATE 1/19/72 RPOM.S07 ; UPDATE ESERVED FOR DISCIO DATA = 12. ; ADDRESS OF I/O BUFFER ; ; EQUATES FOR I/O BUFFER ; FILEID = 0. ; FILE IDENTIFICATION NO. SCFLAG = 2. ; SECTOR FLAG INOUT = 3. ; INPUT FUNCTION DUSE1 = 4. ; RESERVED FOR DISCIO DUSE2 = 6. ; RESERVED FOR DISCIO DUSE3 = 8. ; RESERVED FOR DISCIO RLSECT = 10. ; RELATIVE SECTOR ADDRESS NWORD = BFWAIT,R50PAK,R50UNP,DEFINE,DELETE,PRTCT,UNPRCT .REF CORLOD .REF GETBUF .REF GETBUF,PUTBUF ; FOR CITGO/ELETE ******** .REF JULDAT,MAGTAP ; FOR CITGO ******** .DEF EMTRAP,EMTABL,MAXEMT,EMTINIT .PAGE .IFZ $DEBUG .ASECT .=30 .WORD EMTRAP,340 ;INIT TRAP LOCATION: RUNS AT LEVEL 7. .CSECT .ENDC EMTRAP = . ; ******** NEQP09 = 0 ; ******** NEQP10 = 0 ; ******** NEQP11 = 0. ; NO. OF ENTRYS QPART LEVEL 11 NEQP12 = 0. ; NO. OF ENTRYS QPART LEVEL 12 NEQP13 = 0. ; NO. OF ENTRYS QPART LEVEL 13 NEQP14 = 0. ; NO. OF ENTRYS QPART LEVEL 14 NEQP15 = 0. 1/18/72 RPOM.S06 ; UPDATE 1/12/72 RPOM.S05 ; UPDATE 1/11/72 RPOM.S04 ; UPDATE 1/11/72 RPOM.S03 ; UPDATE 12/7/71 RPOM.S02 ; UPDATE 11/10/71 RPOM.S01 .TITLE RPOM TABLES .IFNZ NDISCS&OVRLAY ; DO NOT ASSEMBLE RPOM IF ZERO. ; ;*********************************************************************** ;* RPOM TABLES * ;* 12. ; NO. OF WORDS IN XFER ; ; EQUATES FOR RELATIVE FILE POSITIONS ; FILEID = 0. ; FILE ID SCTR = 2. ; SECTOR FTYPE = 4. ; FILE TYPE PDVCE = 5. ; PROTECT STATUS AND DEVICE LGTH = 6. ; FILE LENGTH CKSAVE = 8. ; CHECKPOINTS SECTOR ADDRESS ; ; DISC ERROR NUMBER PARAMETERS ; ERR001 = 1. ; LIST ALREADY IN QUEUE ERR002 = ;ENTRY TO EMT SERVICE ROUTINE ;TIMING: 64 MICROSECONDS TST -(SP) ;PUSH STACK TO MAKE ROOM FOR SBRTNE ADDR MOV R0,-(SP) ;SAVE IT MOV 4(SP),R0 ;CALLER RETURN ADDR MOV 6(SP),4(SP) ;MOVE CALLER'S PS FOR RTI EXIT MOV R0,6(SP) ;WILL LEAVE CALLER'S PC ON STACK @ EXIT DEC R0 ;BACK POINTER ONE BYTE MOVB -(R0),R0 ;BACK POINTER TO EMT INSTR&GET EMT CODE ; NO. OF ENTRYS QPART LEVEL 15 NEQP16 = 0. ; NO. OF ENTRYS QPART LEVEL 16 ; ; ; THE FOLLOWING ASSIGNS THE START BLOCK IN THE CORE POOL ; FOR A SPECIFIC PRIORITY. ; $SB001 = 0. $SB002 = 0 ; ******** $SB003 = 18. ; ******** $SB004 = 24. ; ******** $SB005 = 0 * ;* PROGRAM IDENTIFICATION. OVYTBL * ;* * ;* PURPOSE. OVYTBL CONTAINS ALL TABLES, DATA AND SYSTEM * ;* EQUATE STATEMENTS REQUIRED FOR THE RPOM SYSTEM. * ;* EACH PARAMETER IS DEFINED IN THE COMMENTS FIELD. * ;* * ;* PROGRAM US 2. ; INVALID DEVICE NUMBER ERR003 = 3. ; ILLEGAL EXIT TYPE ERR004 = 4. ; ILLEGAL PRIORITY LEVEL ERR005 = 5. ; ILLEGAL FILE ID OR IFD ERR006 = 6. ; ILLEGAL I/O FUNCTION ERR007 = 7. ; NON-EXISTENT FILE ID ERR008 = 8. ; # WORDS IN I/O GREATER THAN FILE SIZE ERR009 = 9. ; REQUEST NO WHOLLY CONTAINED IN FILE ERR010 = 10. ; DISCIO ASL R0 ;NEED TO INDEX WORDS IN TABLE CMP R0,#MAXEMT*2 ;SEE IF CODE IS VALID BHI EMTA20 ;INVALID: OUTSIDE TABLE RANGE EMTA10: MOV EMTABL(R0),2(SP) ;LOAD STACK WITH SUBROUTINE ADDR ; IF AN INVALID CODE IS USED, THE TABLE ENTRY WILL POINT TO "EMTERR". MOV (SP)+,R0 ;RESTORE USER'S RTI ;POP SUBRTNE ADDRESS AND OLD STATUS ;TO EFFECT TRANSFER, LEAVI ; ******** $SB006 = 0 ; ******** $SB007 = 0 ; ******** $SB008 = 0 ; ******** $SB009 = 0 ; ******** $SB010 = 0 ; ******** $SB011 = 0. $SB012 = 0. $SAGE. EACH TABLE AND DATA ITEM IS REFERENCED * ;* BY A RPOM SUBROUTINE. THOSE TABLES AND ITEMS WHICH * ;* MAY BE REFERENCED BY OTHER PROGRAMS WILL BE DECLARED * ;* IN A .DEF STATEMENT. * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* RE WRITE REQUEST IN PROTECTED FILE ERR011 = 11. ; DISC I/O ERROR-I/O NOT COMPLETE ERR012 = 12. ; TIME-OUT ERROR ON XFER ERR013 = 13. ; NO CKSAVE SPECIFIED DURING CHKPIO ERR014 = 14. ; DDS DISC-NOT EVEN # WORDS ; ; ; PSR = 177776 ; PROCESSOR STATUS REGISTER PLOCK = 000340 ; PRIORITY LOCKOUT MASK FOR PSR .PAGE .TITLE DISCIO,CHKPIO,PFRITE ;*******************************NG RTN TO ;CALLER ON TOP. EMTA20: CLR R0 ;RANGE ERROR: USE ENTRY 0... BR EMTA10 ;...AND FORCE EXIT VIA "EMTERR" EMTERR: ;INVALID EMT NUMBER .IFNZ $DEBUG HALT .ENDC RTS PC .PAGE EMTABL = . ;TOP OF EMT LINK TABLE .WORD EMTERR ;#0 ALWAYS AN ERROR .WORD QUEUE ;#1 .WORD SUSPND ;#B013 = 0. $SB014 = 0. $SB015 = 0. $SB016 = 0. ; $NBLKS = $DYNSZ/2-1/256.+1 ; NO. OF BLOCKS IN DYNAMIC CORE ; ; THE FOLLOWING ASSIGNS STORAGE BLOCK SIZES FOR EACH PRIORITY. ; A) IF DYNAMIC-CONTAINS THE LARGEST ALLOWABLE BSIZE ; VALUE ; ; B) IF FIXED OR TIME SLICED-CONTAINS ASSIGNED BSIZE ; VALUE FOR THAT PRIORITY ; .IFL PRIP01 $PS001 = $NBLKS-$SB001 .ENDC VISION * ;* * ;*********************************************************************** ; .DEF BCPOOL,ECPOOL,ALPOOL,DYSINI .REF BEGDYN,ENDDYN .CSECT ; .PAGE ; ; PRIORITY PROPERTY VALUES ARE AS FOLLOWS: ; +1 = TIME-SLICE ; 0 = FIXED ; -1 = DYNAMIC ; ; ; ; ; ; GENERA**************************************** ;* DISCIO,CHKPIO,PFRITE * ;* * ;* PROGRAM IDENTIFICATION. DISCIO * ;* * ;* PURPOSE. THIS SUBROUTINE IS RESPONSIBLE FOR ALL COMMUNICATIONS * ;* WITH A DISC IN ROS. ALL REQUESTS ARE QUEUED IN A SPECIFIC * ;* DISC PRIORITY. A2 .WORD UNSPND ;#3 .WORD EXIT ;#4 .WORD FRETSK ;#5 .WORD ABORT ;#6 .WORD QTIME ;#7 .WORD DQTIME ;#10 .WORD QSKED ;#11 .WORD DQSKED ;#12 .WORD TTYOUT ;#13 .WORD TTYIN ;#14 .WORD DECTAP ;#15 .WORD BINASC ;#16 .WORD ASCBIN ;#17 .WOR .IFGE PRIP01 $PS001 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB001-$PS001 XXXXXXXX ; PRI 1 TOO LARGE .ENDC .ENDC .IFL PRIP02 $PS002 = $NBLKS-$SB002 .ENDC .IFGE PRIP02 $PS002 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB002-$PS002 XXXXXXXX ; PRI 2 TOO LARGE .ENDC .ENDC .IFL TE QPARTN TABLES FOR RPOM LEVEL 1 ; .IFNZ NEQP01 .IFGE PRIP01 ; GENERATE TIME-SLICED OR FIXED HEADER .IFG PRIP01 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACLL DISC REQUESTS ARE FILE ORIENTED SUCH * ;* THAT THE REQUESTING PROGRAM SUPPLIES A FILE NUMBER (OR IFD) * ;* AND, OPTIONALLY, THE SECTOR NUMBER RELATIVE TO THE BEGINNING * ;* OF THE FILE AND THE NUMBER OF WORDS TO READ/WRITE. * ;* DISCIO WILL HANDLE ERRORS AND REPORT THEM TO THE SYSTEM * ;* IN THE SPECIFIED MANNER. THREE ENTRY POINTS ARE PROVIDED * ;* FOR DISC SERVICE. THEY ARE: * ;* D MASK ;#20 .WORD UNMASK ;#21 .WORD ERRTYP ;#22 .WORD DISCIO ;#23 .WORD CREAD ;#24 .WORD LPRNTR ;#25 .WORD GOBACK ;#26 .WORD CKPT ;#27 .WORD NOCKPT ;#30 .WORD GTIME ;#31 .WORD GDATE ;#32 .WORD SCAN ;#33 .WORD NUMFLD ;#34 .WORD NPARAM PRIP03 $PS003 = $NBLKS-$SB003 .ENDC .IFGE PRIP03 $PS003 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB003-$PS003 XXXXXXXX ; PRI 3 TOO LARGE .ENDC .ENDC .IFL PRIP04 $PS004 = $NBLKS-$SB004 .ENDC .IFGE PRIP04 $PS004 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB004-$PS004 XXXXXXXX ; PRI 4 TOO LE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0=NOT ALLOCATED .WORD QPRT01 ; PUSH ADDRESS .WORD QPRT01 ; PULL ADDRESS .WORD EQPT01 ; BOTTOM OF QUEUE .WORD QPRT01 ; TOP OF QUEUE .BYTE NEQP01-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT01 = . ; QPART LEVEL 01 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 DISCIO-SUBROUTINE TO PERFORM DISC I/O. * ;* CHKPIO-SUBROUTINE FOR SYSTEM USE ONLY TO * ;* PERFORM CHECKPOINT I/O. * ;* PFRITE-SUBROUTINE FOR SYSTEM USE ONLY TO * ;* PERFORM PROTECTED FILE I/O (WRITE). * ;* * ;* PROGRAM USAGE. THE LINKAGE TO SUBROUTINE DISCIO IS: * ;* ;#35 .WORD BFINIT ;#36 .WORD BFENTR ;#37 .WORD BFOPEN ;#40 .WORD BFCLOS ;#41 .WORD BFDELT ;#42 .WORD BFPACK ;#43 .WORD BFWRIT ;#44 .WORD BFREAD ;#45 .WORD R50PAK ;#46 .WORD R50UNP ;#47 .WORD BFWAIT ;#50 .WORD DEFINE ;#51 .WORD DELETE ;#52 ARGE .ENDC .ENDC .IFL PRIP05 $PS005 = $NBLKS-$SB005 .ENDC .IFGE PRIP05 $PS005 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB005-$PS005 XXXXXXXX ; PRI 5 TOO LARGE .ENDC .ENDC .IFL PRIP06 $PS006 = $NBLKS-$SB006 .ENDC .IFGE PRIP06 $PS006 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB006- .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP01+QPRT01 ; GET RID OF ENTRYS NOT NEEDED EQPT01 = .-2 ; END OF THIS LEVEL'S QPART TABLE .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 2 ; .IFNZ NEQP02 .IFGE PRIP02 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP02 ; TIME-SLICE SUS * ;* MOV [LIST],-(SP) * ;* EMT DISCIO * ;* WHERE THE I/O LIST ADDRESS WILL BE FOUND ON THE STACK. * ;* THE FORTRAN EQUIVALENT CALL IS: * ;* * ;* CALL DISCIO(LIST) * .WORD PRTCT ;#53 .WORD UNPRCT ;#54 .WORD SGLOAD ;#55 .WORD CORLOD ;#56 .WORD 0,0,0,0,0,0,0 ; 57,60,61,62,63,64,65 IN ROS3 ******** .WORD GETBUF ; 66 ******** .WORD PUTBUF ;#67 .WORD JULDAT ; 70 ******** .WORD MAGTAP ; 71 ********$PS006 XXXXXXXX ; PRI 6 TOO LARGE .ENDC .ENDC .IFL PRIP07 $PS007 = $NBLKS-$SB007 .ENDC .IFGE PRIP07 $PS007 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB007-$PS007 XXXXXXXX ; PRI 7 TOO LARGE .ENDC .ENDC .IFL PRIP08 $PS008 = $NBLKS-$SB008 .ENDC .IFGE PRIP08 $PS008 = 4. ; ASSIGNPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT02 ; PUSH ADDRESS .WORD QPRT02 ; PULL ADDRESS;* * ;* THE LINKAGE TO SUBROUTINES CHKPIO AND PFRITE ARE RESPECTIVELY: * ;* * ;* MOV [LIST],-(SP) * ;* JSR PC,CHKPIO * ;* * ;* AND MOV [LIST],-(SP) MAXEMT = .-EMTABL/2-1 .PAGE .CSECT .EMTIN ;FORCE INTO IPL GROUP ;[GLOBAL REFERENCES WHICH REMAIN UNDEFINED AT LINK TIME BECAUSE THEY ; WERE NOT INCLUDED IN THE MONITOR BEING GENERATED WILL BE LOADED WITH ; A ZERO BY THE LOADER. THE FOLLOWING SUBROUTINE WILL BE CALLED BY "IPL" ; TO INITIALIZE THESE ENTRIES TO "EMTERR" IN CASE THEY ARE CALLED.] EMTINIT: ;SUBROUTINE TO REPLACE UNDEFINED VECTOR ELEMENTS ;WITH IMMEDIATE RETURNS. ("HALTS 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB008-$PS008 XXXXXXXX ; PRI 8 TOO LARGE .ENDC .ENDC .IFL PRIP09 $PS009 = $NBLKS-$SB009 .ENDC .IFGE PRIP09 $PS009 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB009-$PS009 XXXXXXXX ; PRI 9 TOO LARGE .ENDC .ENDC .IFL PRIP10 $PS010 = $NBLKS-$SB010 .ENDC .I .WORD EQPT02 ; BOTTOM OF QUEUE .WORD QPRT02 ; TOP OF QUEUE .BYTE NEQP02-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT02 = . ; QPART LEVEL 02 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP02+QPRT02 ; GET RID OF ENTRYS NOT NEEDED EQPT02 = * ;* JSR PC,PFRITE * ;* FORTRAN EQUIVALENT CALLS DO NOT EXIST FOR CHKPIO AND PFRITE. * ;* * ;* THE I/O PARAMETER LIST IS CONSTRUCTED AS IN THE ROS I SPEC., * ;* PAGE 42. * ;* * ;* THE DATA BUFFER LAYOUT IS AS FOLLOWS: " IN DEBUG VERSION.) MOV #EMTABL,R0 EMTI10: TST (R0)+ ;IS THIS VECTOR ELEMENT UNDEFINED? BNE EMTI20 ;NO MOV #EMTERR,-(R0) ;YES - PUT ERROR RETURN IN IT TST (R0)+ ;...AND ADVANCE IT AGAIN EMTI20: CMP R0,#MAXEMT*2+EMTABL ;REACHED END OF VECTOR YET? BLOS EMTI10 ;NOT YET - KEEP GOING MOV #EMTRAP,30 ;INIT EMT VECTOR MOV #340,32 RTS PC FGE PRIP10 $PS010 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB010-$PS010 XXXXXXXX ; PRI 10 TOO LARGE .ENDC .ENDC .IFL PRIP11 $PS011 = $NBLKS-$SB011 .ENDC .IFGE PRIP11 $PS011 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB011-$PS011 XXXXXXXX ; PRI 11 TOO LARGE .ENDC .ENDC .IFL PRIP12 $PS0 .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 3 ; .IFNZ NEQP03 .IFGE PRIP03 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP03 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 * ;* WORD 0 = FILE ID * ;* WORD 1,BYTE 0 = SCFLAG * ;* WORD 1,BYTE 1 = INOUT ; ;* WORD 2 = FOR DISCIO USE * ;* WORD 3 = FOR DISCIO USE * ;* WORD 4 = FOR DISCIO USE * ;* WORD 5 = RLSECT ;ALL DONE .END 12 = $NBLKS-$SB012 .ENDC .IFGE PRIP12 $PS012 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB012-$PS012 XXXXXXXX ; PRI 12 TOO LARGE .ENDC .ENDC .IFL PRIP13 $PS013 = $NBLKS-$SB013 .ENDC .IFGE PRIP13 $PS013 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB013-$PS013 XXXXXXXX ; PRI 13 TOO LARGE ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT03 ; PUSH ADDRESS .WORD QPRT03 ; PULL ADDRESS .WORD EQPT03 ; BOTTOM OF QUEUE .WORD QPRT03 ; TOP OF QUEUE .BYTE NEQP03-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLO * ;* WORD 6 = NWORD * ;* WHERE: * ;* FILEID = FILE IDENTIFICATION NO. IF HIGH ORDER BIT * ;* IS SET, INDEX TO CORE RESIDENT FILE DIRECTORY * ;* (IFD = NO. OF DIRECTORIES TO REQUESTED ONE). * ;* INOUT = READ/WRITE FLAG. 0 = READ, 1 = WRITE, * ;* 2 = WRITE CHECK AN 5 ,RR2 B SU SSREDD ARYNT EVESA; 3 ,RR5 V MO SSREDD AERADHEM RAOGPRT SERES-YE; R4+,P)(S V MO UEUE QOFD EA HATK AC BUT-OLLROT GET US-MNO; 22OVGE E BN ? NTWAE WNE OTOT GE; 5)(RSKVT,OR1 PBCM Y TREND EA HOFS ESDRADT GE; 5 ,R2)(RQPADHE V MO UTKOOC LTYRIIOPRT SERE; SR,PP)(S2. V MO L AI TTOINT ISHPU; P HQUS,PPC R JS T ARQPF OUT ORYNT ELLPU; P LQUL,PPC  .ENDC .ENDC .IFL PRIP14 $PS014 = $NBLKS-$SB014 .ENDC .IFGE PRIP14 $PS014 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB014-$PS014 XXXXXXXX ; PRI 14 TOO LARGE .ENDC .ENDC .IFL PRIP15 $PS015 = $NBLKS-$SB015 .ENDC .IFGE PRIP15 $PS015 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB015-$PS015 CATION SWITCH .ENDC QPRT03 = . ; QPART LEVEL 03 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP03+QPRT03 ; GET RID OF ENTRYS NOT NEEDED EQPT03 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 4 ; .IFNZ D 3 = WRITE WITH WRITE * ;* CHECK, 4 = WRITE AFTER READ (NOTE: THIS * ;* THIS IS AN UPDATE FCN AND MUST BE USED * ;* WITH AN EXIT TYPE 3. THE I/O COMPLETE * ;* SUBROUTINE WILL BE EXECUTED TWICE, ONCE * ;* AFTER READ AND ONCE AFTER WRITE.) * ;* SCFLAG = SECTOR FLAG. 0 = USE RLSECT AND NWORD * ;* 1 = USE FIR JS UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO: 22OVGE S ESDRADR DEEA HONTITIAR PVESA; P)(S,-R4 V MO R0 R AS LEAB TRTPA Q'STYRIIOPRS HI TOFS ESDRAD; 2 ,R0)(RTNARQP V MO X DEIND OR WTYRIIOPR; R0 L AS S YE; 23OVGE I BM ? ELEV LTYRIIOPRC MINADY; ) R0B(TAPP TBTS T ARXP!FLCMS$T Z FN.I R HDT PRN II.PRK AS TUT-OLLROT SERE; 4)(RRIHP,PR0 VBMO G INITWAO T ;  XXXXXXXX ; PRI 15 TOO LARGE .ENDC .ENDC .IFL PRIP16 $PS016 = $NBLKS-$SB016 .ENDC .IFGE PRIP16 $PS016 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB016-$PS016 XXXXXXXX ; PRI 16 TOO LARGE .ENDC .ENDC ; ; .ENDC ; MATCH FOR .IFNZ OVRLAY ; ; ROS SYSTEM TASK NUMBERS ; ; $INPNO = 1 ; INNEQP04 .IFGE PRIP04 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP04 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; RST SECTOR ADDRESS FROM FILE * ;* DIRECTORY. * ;* RLSECT = SECTOR ADDRESS RELATIVE TO FIRST SECTOR OF * ;* FILE. * ;* NWORD = NO. OF WORDS IN DISC TRANSFER * ;* * ;* IF SCFLAG = 0, THEN THE AREA FROM WHICH DISC DATA IS * ;* TRANSFERRED TO OR ; STUEEQ ROFT TAPST SERE; 4)(RWDRKHW,@77#1 C BI . = 20OVGE ; S ESDRADR DEEA HAMGRRO P =R4 ; S ESDRADY TRENT ARQPS K'AS T =R2 ; ERMBNUK AS T =R1 ; TYRIIOPRK AS T =R0 ; T MPTEATT OUL-OL RAYRLVE ONGRIDUD REURCC OORRR ETERI WSCDI ; ; STUEEQ ROFN -ILLROT ARST; 00VBQO P JM SSREDD AERADHEN IOITRTPAE ATULLCCA; 4 ,ROBHN#P D AD EXND IRDWO; PUT ******** $INITD = 2 ; DISC INITIALIZER ******** $RLDNO = 3 ; ROSLOD ******** $TKCNO = 4 ; TASK @ ******** ; OVERLAYS START HERE ******** $UTLNO = 5 ; ROS DISK SAVER (UTILITY) ******** $FLTNO = 6 ; FILE LIST PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT04 ; PUSH ADDRESS .WORD QPRT04 ; PULL ADDRESS .WORD EQPT04 ; BOTTOM OF QUEUE .WORD QPRT04 ; TOP OF QUEUE .BYTE NEQP04-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT04 = . ; QPART LEVEL 04 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,FROM BEGINS AT WORD 6. IF SCFLAG = 1, * ;* THEN THE XFER BEGINS AT WORD 4. * ;* NOTE: 1 SECTOR CODED AT 64 WORDS * ;* * ;* IF AN ERROR OCCURS, WORD 4 OF THE I/O LIST (ERROR) WILL * ;* CONTAIN THE DISC I/O ERROR CODE UPON I/O REQUEST COM- * ;* PLETION. THE VALUES OF SYSTEM ARE: * ;* R1 L AS TYRIIOPRE ATULLCCA; 1 ,RR0 V MO ERADHE. RTPAM RO FTYRIIOPRS T'ESQURET GE; R0),R4I(PRPH VBMO S ESDRADY TRENT ARQPS T'ESQURET GE; 2 ,R4)(RWDRKHW V MO UTKOOC LTYRIIOPRT SERE; SR,PP)(S V MO: 10OVGE D DEENSPSUUN ; ; L TIUNN -IEDLLROE B'TON WSO ; ; E BLTAKPCH& D ENSPSU. OL=VATST P1,T=TACS; 2)(RK,SCOL#V D AD S YE; 10 ******** $CPTNO = 7 ; COMPRESS ******** ; .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP04+QPRT04 ; GET RID OF ENTRYS NOT NEEDED EQPT04 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 5 ; .IFNZ NEQP05 .IFGE PRIP05 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP05 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD * ;* 0= I/O SUCESSFUL * ;* 1= LIST ALREADY IN A QUEUE * ;* 2= INVALID DEVICE NUMBER * ;* 3= ILLEGAL EXIT TYPE REQUESTED * ;* 4= ILLEGAL PRIORITY LEVEL REQUESTED * ;* 5= ILLEGAL FILE ID OR IFD SPECIFIED * ;* OVGE Q BE N?IONSPEUS SRYTAUNOLNV IANT IIS; ) R2G(ARTR T TS CEVIER SOR FNGTIAI W =ATST PET-SNO; 2)(RP,OI#I B SU S YE; 20OVGE E BN ? URCC OORRR ESCDID DI; 4)(RWDRRHE T TS ; . UPD NEEACLT GEY LLCATIMATOAU ; L IL WIT- ET SISQ REDQ QIFT INPOS HI TAT: TENO ; ; S YE; 40OVGE Q BE ? EDSTUEEQ RENBET ORABS HA; RQRTAB,#2)(R PBCM UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT05 ; PUSH ADDRESS .WORD QPRT05 ; PULL ADDRESS .WORD EQPT05 ; BOTTOM OF QUEUE .WOR 6= ILLEGAL I/O FUNCTION REQUESTED * ;* 7= NON-EXISTENT FILE ID * ;* 8= NO. OF WORDS TO READ/WRITE IS GREATER THAN * ;* FILE SIZE * ;* 9= RELATIVE SECTOR ADDRESS + LENGTH GOES BEYOND * ;* DEFINED FILE. * ;* 10= REQUESTED A DISCIO WRITE INTO A PROTECTED * ;* O.NF IRTPA QUT-OLLROF OSTRET GE; 0 R1QP,FPC R JS EXND IRDWO ; R1 L AS R BEUM NSKTA; 1 ,R4)(RNOSKTA SBBI R1 R CL =0R DEEA HLEAB TSKTAE USCABE ; 4 ,RR1 V MO R DEEA HAMGRRO POFS ESDRAD; 1 ,RSTOLHI#- D AD CKTA SONS TUTA SORSSCERO PVESA; ) SP-(R,PS V MO . = V TOGE ; ; 7 OM CTSE.C C PTHK!CLCMS$T Z FN.I E AG.P ; T IDO; ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXD QPRT05 ; TOP OF QUEUE .BYTE NEQP05-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT05 = . ; QPART LEVEL 05 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP05+QPRT05 EQPT05 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .END FILE. * ;* 11= DISC I/O ERROR, I/O NOT COMPLETE * ;* NOTE: DCS WILL BE IN DATA BUFFER WORD 2 * ;* DAE WILL BE IN DATA BUFFER WORD 3 * ;* 12= TIME-OUT ERROR DURING DATA TRANSFER OCCURRED * ;* 13= NO CKSAVE SPECIFIED ON CHKPIO. * ;* 14= DDS DISC-NOT EVEN NUMBER OF WORDS IN XFER 25LARE BR -Q DERFT ANTCEESUI QUSATSTT SE; P)(S2. R CL . = 40LARE ; RNTURE; 10LARE BR T XI EAYRLVE ORMFOER-PITEX; T NXOV,QPC R JS . = 30LARE ; 15LARE BR WDK WRP POY-ELATRIOPPRAPS TUTA SSKTAT SE; ) R0T(TATS+,P)(S VBMO VESAT NOS OE DLYOVDQN-AIAGR BEUM NSKTAT GE; R0),SP.(16 V MO T IUEUE-QDE; Y VLQO,DPC R JS LYOVDQR FOS TUTA SSKTAT SE; ) XXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 1 ; ONLY 1 ABORT MESSAGE BUFFER ******** .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ABRT .ENDC ; C ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 6 ; .IFNZ NEQP06 .IFGE PRIP06 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP06 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0  * ;* * ;* AFTER AN ERROR TYPE 12, NO OTHER REQUESTS WILL BE * ;* PROCESSED FROM THE DEVICE QUEUE. * ;* * ;* REGISTERS R0 THRU R5 WILL BE SAVED * ;* * ;* PROGRAMMER 54 R0T(TATSQ,REDQ#O VBMO: 25LARE LY6VDQR TEAFT TATSS HI TTOT SE; P)(S2.D,RTAB#T V MO S ESGRRO PINE ICRVSED-TEESQUREQ D-; 40LARE Q BE SSREOGPRN ICEVIER-SEDSTUEEQ RITEX; 30LARE T BG D?TEESQUREQ D-; Q REDQ,#R1 PBCM CKTA SONR BEUM NSKTAT PU; P)(S,-R0 V MO . = 20LARE ; ERLLCAO TRNTURE; PC S RT RNTURER FOC PUPT SE; P)(S+,P)(S V MO S ERSTGIREE ORSTRE;  PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0  ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT06 ; PUSH ADDRESS .WORD QPRT06 ; PULL ADDRESS .WORD EQPT06 ; BOTTOM OF QUEUE .WORD QPRT06 ; TOP OF QUEUE .BYTE NEQP06-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT06 = . ; QPART LEVEL 06 BEGIN .WORD 0,0,0, * ;* DATE * ;* REVISION * ;* * ;*********************************************************************** .DEF DISCIO,CHKPIO,PFRITE,DINT,DIHA50,DIOA65 .REF PHYDEV,ACTIVE,IOSTAT,RESTOR,QSAVE,DSPTCH .REF UNSPND,ERRTYP,QUEUE,LOGMAX,QTIME,DQTIME .REF $CTASK,PUSHR OP,PR5 R JS: 15LARE + P)(S T TS: 10LARE SSREOGPRN I/O ITHWI ; ; EDSTUEEQ RRTBO/A-Q/DITEX; 20LARE I BM S TUTA S'SSKTAT GE; R1),R0T(TATS VBMO K ACSTO NT ORDWOK OR WSHPU; ) SP-( T TS R BEUM NSKTAT GE; R0),SP.(14 V MO RSTEISEG RVESA; HRUS,PR5 R JS . = SKLTRE ; 0 =ATSTION HE WESINUTROUB SCEVIER SEMSTSYY BEDLLCA ; ; ; ITEX; 25OVDQ  ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; P 0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP06+QPRT06 ; GET RID OF ENTRYS NOT NEEDED EQPT06 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 7 ; .IFNZ NEQP07 .IFGE PRIP07 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP07 R,POPR,RELTSK,HEADER ; .CSECT DIO ; ; CHKPIO = . MOV R0,-(SP) ; SAVE R0 MOV #40000,R0 ; CHKPIO ENTRY POINT MASK BR DIOA00 ; PFRITE = . MOV R0,-(SP) ; SAVE R0 MOV #100000,R0 ; PFRITE ENTRY POINT MASK BR DIOA00 ; DISCIO = . MOV R0,-(SP) ; SAVE R0 CLR R0 ; DISCIO ENTRY POINT MASK DIOA00: MOV R1,-(SP) ; SAVE R BR TSESQUREF OERMBNUT ENEMCRDE; 0)(RQPEQNR CBDE RYNT ERTPA QIDVO; 2)(R R CL C ND.E T XI-ENO; 25OVDQ L BP -TYRIIOPRC MINADY; ) R0B(TAPP TBTS T ARXP!FLCMS$T Z FN.I . = 50OVDQ SKTAM RO FITEXS-YE; X1XXQN P JM T ENIDES RRECOT NO; 50OVDQ Q BE S ESDRADR DEEA HSKTAT GE; 4 ,R1)(RERADHE V MO X DEIND OR WSKTAE UTMPCO; R1 ERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEV ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT07 ; PUSH ADDRESS .WORD QPRT07 1 MOV R2,-(SP) ; SAVE R2 MOV R3,-(SP) ; SAVE R3 MOV R4,-(SP) ; SAVE R4 MOV R5,-(SP) ; SAVE R5 MOV 14.(SP),R1 ; R1 = ADDRESS OF DISC I/O LIST MOV 12.(SP),14.(SP) ; PUT CALLER'S PC IN PROPER POS. FOR RETURN MOV R0,SYSTEM(R1) ; SET ENTRY POINT MASKS AND CLEAR OTHER MOV #ERR001,R0 ; USE R0 TO KEEP TRACK OF ERROR TYPES MOV PSR,-(SP) ; SAVE CPU STATUL AS: 40OVDQ C ND.E T TAPSN ISTUEEQ RRTBO AET-SNO; 2)(RQ,TRBR#A VBMO S YE; 40OVDQ I BM ? ELEV LTYRIIOPRC MINADY; ) R0B(TAPP TBTS T ARXP!FLCMS$T Z FN.I . = 30OVDQ ITEXD AN; 20VBQO P JM: 25OVDQ D TEESQURET ORABT SES-YE; 2)(RQ,TRBR#A VBMO NO; 30OVDQ T BL ? SSREOGPRN IRTBO AORO I/; IPIO,#R4 P CM R40,6077#1 C BI: 23OVDQ LYOVTSY BEDLLPUH US PSECAIN; EL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ; 1/60 SEC ******** RES1 = 1 ; 1/60 SEC ******** RES2 = 2 ; 1/30 SEC. ******** RES3 = 5 ; 1/6 SEC. ******** RES4 = 2 ; 1/3 SEC.  ; PULL ADDRESS .WORD EQPT07 ; BOTTOM OF QUEUE .WORD QPRT07 ; TOP OF QUEUE .BYTE NEQP07-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT07 = . ; QPART LEVEL 07 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP07+QPRT07 ; GET RID OF ENTRYS NOT NEEDEDS MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT DEC (R1) ; DECREMENT FIRST WORD OF LIST BNE DIOA72 ; NON-ZERO-ERROR, CAN'T THREAD LIST MOV (SP)+,PSR ; RESET LOCKOUT INC R0 ; BUMP ERROR TYPE MOVB DEVICE(R1),R4 ; GET LOGICAL DEVICE NUMBER CMP R4,LOGMAX ; IS IT WITHIN SPECIFIED RANGE BHI DIOA70 ; NO-ERROR TYPE 2 ASL R4 ; CONVE 05OVDQ BR T OUCKLOT SERE; SR,PP)(S V MO OK; 23OVDQ E BN T TAPST GE; 4 ,R2)(R V MO T OUK-OC LTYRIIOPRT SE; SR,PCKLO#P V MO: 20OVDQ C ND.E EMTHF ONE OINE BSTMU; 10OVDQ Q BE Y TRENS K'AS TOR FOKLO; H RCTS,QPC R JS L VELEH RCEA SMPBU; R0 C IN: 10OVDQ ESBLTAY ITORRI PERTH OCHARSE; R0 R CL ITT GO; 20OVDQ E BN  ******** RES5 = 3 ; 1.0 SEC. ******** RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 SEC RES8 = 3 ; 30.0 SEC RES9 = 2 ; 60.0 SEC RES10 = 5 ; 5 MIN RES11 = 2 ; 10 MIN RES12 = 3 ; 30 MIN RES13 = 2 ; 60 MIN RES14 = 2 ; 2 HRS EQPT07 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 8 ; .IFNZ NEQP08 .IFGE PRIP08 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP08 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES RT TO INDEX MOV PHYDEV(R4),R5 ; GET PHYSICAL DESCRIPTOR FOR THIS DEVICE SWAB R5 ; CHECK IF DEVICE AVAILABLE DECB R5 ; AND, DEVICE TYPE = 1 - DISC BNE DIOA70 ; OTHERWISE-ERROR TYPE 2 SWAB R5 ; R5 NOW CONTAINS DISC CONTROLLER UNIT # INC R0 ; BUMP ERROR TYPE MOVB TYPE(R1),R2 ; LEGAL EXIT TYPE? BLE DIOA70 ; NO-ERROR TYPE 3 C Y RTDP Z FN.I Y TRENT ARQPS K'AS TNDFI; H RCTS,QPC R JS Y ITORRI PLEAB TSKTAT GE; R0),R1Y(RTTP VBMO: 05OVDQ ) SP-(R,PS V MO RNTURER PERO POR FPCT SE; P)(S+,P)(S V MO R BEUM NSKTAT GE; 1 ,RP)(S2. V MO . = LYOVDQ ; -3R O-21,,-,9,5,4,3 2 =ATST TTHWIS SKTAT ORABY MA ; 1 = T ACVY O =ATST TTHWIK AS TRTBO AOTNNCA: TENO ; ; 6 OM CTSE.C E AG.P C ND.E ; ITEXD AN;  RES15 = 6 ; 12 HRS ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = 0 ;MAX RESOLUTION: #0 AT 10 MILLISECONDS SECR = 5 ;"RES5" IS THE ONE-SECOND RESOLUTION TRES = SECR ; FOR TIME-SLICE WATCH-DOG IN RPOM $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX  .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT08 ; PUSH ADDRESS .WORD QPRT08 ; PULL ADDRESS .WORD EQPT08 ; BOTTOM OF QUEUE .WORD QPRT08 ; TOP OF QUEUE .BYTE NEQP08-1 ; MAX. ENTRIES -1 .BYTE 0 MP R2,#3. BGT DIOA70 ; NO-ERROR TYPE 3 INC R0 ; BUMP ERROR TYPE MOVB LEVEL(R1),R2 ; SET LEVEL OF REQUEST IN R2 BLE DIOA70 ; ERROR IF ZERO OR LESS-ERROR TYPE 4 CMPB R2,NDPRTY(R5) ; LEGAL DISC PRIORITY LEVEL? BGT DIOA70 ; ERROR TYPE 4 INC R0 ; BUMP ERROR TYPE MOV DATA(R1),R4 ; R4 = ADDRESS OF I/O BUFFER MOV (R4),R3 ; FILE 25OVQS BR D DEENSPSUY ILARNTLUVOT NOT SE; ) R2G(ARTR R CL: 50OVUS N -IEDLLROE BTOT ESQURE ; 40VAQO P JM CTFEAFT N'WO' UEUE-QRE 'SO; 0)(RQPEQNR CBDE ERMBNUK AS TND A ; P)(S,-R1 V MO K ACSTN ONTMEGUAR0 T SE; ) SP-( R CL =0ATST/P=1ATST/CO. NSKTA; ; S ALTUI BBEL IL WRYNT ESOT SE; R10,0000#1 S BI SSREDD AB3E ATRIOPPRAP ; D ADB3,FPC ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ; TOD CLOCK TICKS PRE SECOND  ; ALLOCATION SWITCH .ENDC QPRT08 = . ; QPART LEVEL 08 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP08+QPRT08 ; GET RID OF ENTRYS NOT NEEDED EQPT08 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 9 ;  ID OR IFD BEQ DIOA70 ; ZERO ID ILLEGAL-ERROR TYPE 5 BPL DIOA10 ; FILE ID BIC #100000,R3 ; STRIP OUT IFD SIGNIFIER CMP R3,#NCFILE ; CHECK AGAINST NO. OF CORE RES. FILES BGT DIOA70 ; ERROR TYPE 5 DIOA10: INC R0 ; BUMP ERROR TYPE CMPB INOUT(R4),#4. ; IS FUNCTION LEGAL? BLO DIOA20 ; YES BHI DIOA70 ; ERROR IF GREATER THAN 4-TYPE 6 R JS D IN FTOR BEUM NSKTAE US; 3 ,RR1 V MO R BEUM NSKTAO TCKBAT GE; R1 R AS S YE; 50OVUS Q BE S?ESGRRO PINL ILSTO I/; IPIO0!20,#2)(R PBCM . = 40OVUS ; SSREDD ARYNT ERTPA Q =R2 ; STUEEQ RY'VLQO ' AKELI ; G INOKLOY BINL-OL RSTUEEQ RT,OUD-LEOL RAS WSKTA ; ; TCKPCH Z FN.I N URET R; 25OVQS BR UEUE QTYRIIOPRS RO ; ) R3T(AS,LR4  ******** $ABMPL = 6 ; TOD CLOCK BASE MULTIPLER ******** TODINT = 100 ; T-O-D CLOCK INTERRUPT VECTOR ******** TIMINT = 0 ; NO SEPERATE TIMER CLOCK ******** STLINT = 0 ; NO STALL ALARM ******** STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET CLKENB = 177546 ; ADDRESS FOR CLOCK ENEBL ******** TODBIT = 100 ! .IFNZ NEQP09 .IFGE PRIP09 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP09 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 " CMPB TYPE(R1),#3. ; IF I/O FCN = 4 THEN EXIT TYPE BNE DIOA70 ; MUST = 3 DIOA20: CLR ERROR(R1) ; INITIALIZE ERROR INDICATOR CLR DUSE3(R4) ; INITIALIZE DUSE3 MOV R5,R0 ; COMPUTE DISC CONTROLLER UNIT WORD INDEX ASL R0 ; DCUWX MOV DQLAST(R0),R3 ; GET ADDRESS OF DEVICE LAST LIST MOV PSR,-(SP) ; SAVE PROCESSOR STATUS ON STACK MOV #PLOCK,PSRV MO O NT ICKBAK AS TADRETH; 3)(RSTLA,@R4 V MO 0 =RDWOD EAHR TSKTAT SE; 4)(R R CL USATSTS RON IEDEUQUT SE; ) R1T(TATSS,ROIN#Q VBMO R BEUM NSKTAT GE; R1 R AS G LA FNDPEUS SL.VOT SERE; ) R2G(ARTR R CL TETA SATST PUSIOEVPRM RO F ; ; LEABPTCKT NOR OLEABPTCKT SE; 2)(R.,#1 B SU C ND.E N -ILLROC MINADYR FOP UET S -NO; 40OVUS $ ; BIT TO TURN ON THE T-O-D CLOCK ******** TIMBIT = 0 ; NO TIMER CLOCK ******** STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT $TMSLC = 0 ; NO TIME SLICING IN THIS SYSTEM ******** $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; $DTAPE = 1 ; DECTAPE OPTION ; NDISCS = 1 % ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT09 ; PUSH ADDRESS .WORD QPRT09 ; PULL ADDRESS .WORD EQPT09 ; BOTTOM OF QUEUE .WORD QPRT09 ; TOP OF QUEUE .BYTE NEQP09-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT09 = . ; QPART LEVEL 09 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WOR& ; SET PRIORITY LOCKOUT CMPB R2,HPRIRQ(R5) ; WILL THIS BE HIGHEST PRIORITY REQUEST BHIS DIOA50 ; NO MOVB R2,HPRIRQ(R5) ; YES - SET IN HPRIRQ DIOA50: ASL R2 ; CONVERT LEVEL TO WORD INDEX ADD R2,R3 ; GET TO PROPER 'LAST' ADDRESS +1 MOV R1,@-(R3) ; INSERT PARAMETER LIST IN QUEUE MOV R1,(R3) ; SET LAST WORD IN DIRECTORY TST ACTIVE ; LOOK AT CURRENTLY ACTIQ BE TCKPCH Z FN.I T?ENIDES RRECOL ILSTK AS TIS; 4 ,R1)(RERADHE V MO T OUK-OC LTYRIIOPRT SE; SR,PCKLO#P V MO X DEIND OR W #SKTAE UTMPCO; R1 L AS: 30OVUS C ND.E S TUTA SORRR ERENOIG; + P)(S T TS E ULOD MADRETHUN; E IMQT,DPC R JS R METIG INUEUE-QDE ; P)(S,-R4 V MO LEHI WUT-OCKLOT SEREN CA ; SR,PP)(S V MO WEO SUEAL VERIM TLLFUA T SE; ) ( ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 1 ; ONLY ONE AUTH. CODE. ******** .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 0 ; NO DISR RESIDENT DIRECTORIES ******** .IFL 3-NDISCS )D 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP09+QPRT09 ; GET RID OF ENTRYS NOT NEEDED EQPT09 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 10 ; .IFNZ NEQP10 .IFGE PRIP10 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP10 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THRE*VE TASK LOC. BEQ DIOA60 ; NO TASKS ARE ACTIVE MOV $CTASK,R3 ; R3 CONTAINS TASK NUMBER BISB R3,SYSTEM(R1) ; SAVE TASK NUMBER IN SYSTEM INCB IOSTAT(R3) ; SET I/O IN PROGRESS FOR THAT TASK DIOA60: INC NODREQ(R0) ; BUMP NO. OF DISC REQUESTS BNE DIOA75 ; NO-EXIT AS SPECIFIED CLRB CALLED(R5) ; CLEAR EXIT TYPE FLAG-INT. OR T-OUT MOV (SP)+,PSR ; RESTORE PROCESSOR PRIORITY DR4M(TIES,R1.#- VBMO: 25OVUS RNTURED AN ; 25OVQS BR K ACSTN OCHITSWR ROERT SES-YE; P)(S4. C IN NO; 25OVUS Q BE URCC OONTIDION CCERAR METI; 4)(RCERATM T TS UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO LEDUMOR METIS Y'ITORRI POFS ESDRAD; R4D,MOIM#T D AD S ESDRADE BLTAT ARQPT GE; 4 ,R3)(RTNARQP V MO NO; 30OVUS E BL Y ITORRI PCELI-SMETI; ) R0B(TA, XXXXXXXX ; PRESENTLY CODED FOR MAX. OF 3 DISCS .ENDC ; NDPRT1 = 5 ; NO. OF PRIORITY LEVELS IN DISC 1 QUEUES .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID1 = 256. ; MAX. # OF FILE ID ON DISK #1. ******** ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX -AD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT10 ; PUSH ADDRESS .WORD QPRT10 ; PULL ADDRESS .WORD EQPT10 ; BOTTOM OF QUEU.IOA65: MOV TMTBL(R0),R1 ; ADDRESS OF TIMER MODULE MOV TDELAY,RESTIM(R1) ; INCASE ALREADY THREADED MOV #TIMOUT,TIMJSR(R1) ; DISC TIME-OUT SUBROUTINE MOV R1,-(SP) ; TIMER MODULE ADDRESS TO STACK MOV TDELAY,-(SP) ; THREAD A 100 MSEC TIMER FOR THIS DISC JSR PC,QTIME ; SET TIMER MODULE IN THREAD TST (SP)+ ; IGNORE ERROR BR DIOB00 ; START QUEUE SEARCH ; ; JPP TBTS LCMS$T Z FN.I . = 20OVUS C ND.E EMTHF ONE OINE BSTMU; 10OVUS Q BE Y TRENS K'AS TOR FOKLO; H RCTS,QPC R JS L VELEH RCEA SMPBU; R0 C IN: 10OVUS ESBLTAY ITORRI PERTH OCHARSE; R0 R CL ITT GO; 20OVUS E BN Y RTDP Z FN.I Y TRENT ARQPS K'AS TNDFI; H RCTS,QPC R JS Y ITORRI PLEAB TSKTAT GE; R0),R1Y(RTTP VBMO CKTA SONS 0; MUST BE AT LEAST THREE .ENDC MAXID2 = 500. ; MAXIMUM ID ON DISC 2 .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3 QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID3 = 500. ; MAXIMUM ID ON DISC 3 .ENDC $SYSFL = NDISCS+5 ; NO. OF SYSTEM FILE ID'S IN ROS ; ; COMPID,FTDIR1E .WORD QPRT10 ; TOP OF QUEUE .BYTE NEQP10-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT10 = . ; QPART LEVEL 10 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP10+QPRT10 ; GET RID OF ENTRYS NOT NEEDED EQPT10 = .-2 ; END OF THIS LEVEL'S QPART T 2MPS USED TO GET OVER BR RESTRICTIONS. TO: ; DIOD10, DIOD15, DIOD20, DIOE00 ; DIOA70: JMP DIOD10 DIOA72: JMP DIOD15 DIOA75 = . JMP DIOD20 DIOA80: JMP DIOE00 ; ; SEARCH APPROPRIATE DEVICE QUEUE FOR HIGHEST ; PRIORITY REQUEST. ; R0 = DCUWX ; R5 = DISC CONTROLLER UNIT NO. ; DIOB00 = . MOV DQFRST(R0),R3 ; GET APPROPRIATE DEVICE FIRST TABLE DIOB10: MOV (R3)+,R1 BEQ DIOB10 TUTA SORSSCERO PVESA; ) SP-(R,PS V MO H TCWI SRNTURER ROERR EACL; P)(S2. R CL R BEUM NSKTAT GE; 1 ,RP)(S2. V MO . = VYSOUN ; D.DEENSPSU ; LYRITAUNOL VENBES HAT HA TSKTAY LAEROVD LIVAA D ENSPSUUN ; ; T XI END ANDPEUS SS,TUTA SET-SNO; 20OVQS BR C ND.E R METIT UCTRNSCOS-YE; 10OVQS T BG Y?ITORRI PCELI-SMETI; ) R0B(TAPP TBTS LCMS$T Z FN.I E BLTA4,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+MAXOVR+20. ; NO. OF CORE RES. FILE IDS ******** .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT ID'S .ENDC ; ******** ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEEDED ; ; FOR 5 .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 11 ; .IFNZ NEQP11 .IFGE PRIP11 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP11 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT 6; DIDN'T FIND ANYTHING AT THAT LEVEL MOV R1,CRQPTR(R0) ; SET UP CURRENT REQUEST IN DCT MOV DATA(R1),R4 ; ADDRESS OF I/O BUFFER TST DUSE3(R4) ; FILE DIRECTORY INFORMATION NEEDED? BNE DIOA80 ; NO MOV (R4),R0 ; GET FILE ID TO LOOK FOR. BMI DIOB80 ; DON'T SEARCH. IT'S AN IFD MOV #-NCRLOC,R2 ; USED FOR AN INDEX THRU CORE ; ; RESIDENT DIRECTORKP COT N &NDPEUS SL.VO= T TAPST SE; 2)(RK,NCLS#V VBMO: 30OVQS ; OMRPM RO FITEX; 20VBQO P JM: 25OVQS CKTA SFF OCHITSWY BEDLLCAP PO; + P)(S T TS D DEENSPSUY ARNTLUVOK AS TET S);R5T(TATSS,SUOL#V VBMO ) CHSR QOMFRE AS CIN ( #SKTAT GE; 5 ,RSKTA$C V MO: 20OVQS C ND.E ORRR ERENOIG; + P)(S T TS E ULOD MERIM TADRETH; METI,QPC R JS S NDCOSE6 37 'ATG DOH-TCWA; P)(S,-76#3 V MO K AC8CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS ; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 0 ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 0 ; NO FIXED PARTIONS ******** $SGMNT = 0 ; NO OVERLAY SEGMENTS IN THIS SYSTEM. ******** $FTMAX = 9 ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT11 ; PUSH ADDRESS .WORD QPRT11 ; PULL ADDRESS .WORD EQPT11 ; BOTTOM OF QUEUE .WORD QPRT11 ; TOP OF QUEUE .BYTE NEQP11-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT11 = . :Y DIOB20: CMP R0,DOD+NCRLOC(R2) ; SEARCH CORE DIRECTORY FOR MATCH BEQ DIOB50 ; FOUND IT DIOB25: ADD #10.,R2 ; BUMP INDEX BNE DIOB20 ; TRY AGAIN .IFZ DRESDI ; CORE ONLY DIRECTORY MOV #ERR007,R0 ; ERROR TYPE 7 BR DIOB48 .ENDC ; ; IF DISC RESIDENT DIRECTORY - READ APPROPRIATE SECTOR FROM FILE ; R0 = FILE ID TO SEARCH FOR ; R1 = I/O LIST ADDRESTO TSSREDD ALEDUMO; P)(S,-R3 V MO T SEREG LA FCERAE UR SKEMA; 3)(RCERATM R CL E ULOD MERIM TOFS ESDRAD; R3D,MOIM#T D AD S ESDRADG INNNGIBEE BLTAT ARQP; 3 ,R0)(RTNARQP V MO X DEIND OR WTYRIIOPRE UTMPCO; R0 L AS . = 10OVQS ; SKTAE ICSLE-IM TOFN IONSPEUS SRYTAUNOL VOR FERIM TUPT SE ; ; LCMS$T Z FN.I ; C ND.E Y TRENG INITWAR FOS UEUE QCHARSE; H RCQS P JM <10. ; LARGEST FILE TYPE IN SYSTEM $IDMAX = 256. ; LARGEST FILE ID IN SYSTEM. ******** ; ; MUST BE >= MAXID1,2,3,..,N $FTDRL = $FTMAX*3/64.+1 ; NO. OF SECTORS IN FILE TYPE DIRECTORY $ROSFW = NDISCS+$SYSFL*5 ; NO. OF WORDS IN ROS FILES $CDISZ = NCRWDS-$ROSFW/64.+1 ; NO. OF SECTORS IN CORES ; ; DIRECTORY IMAGE $TKFL1 = TASMAX*5 ; # = ; QPART LEVEL 11 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP11+QPRT11 ; GET RID OF ENTRYS NOT NEEDED EQPT11 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 12 ; .IFNZ NEQP12 .IFGE PRIP12 ; GENERATE>SS ; R4 = ADDRESS OF I/O BUFFER ; R5 = DISC CONTROLLER UNIT NO. ; .IFNZ DRESDI ASL R5 ; R5 BECOMES DCUWX MOV DODADD(R5),R2 ; ADDRESS OF APPROPRIATE DOD DEC R0 ; CALCULATE (FILE ID#-1)/12 CLR R3 ; USE R3 TO CONTAIN QUOTIENT DIOB30: SUB #12.,R0 ; DIVIDE BY 12 TO FIND BMI DIOB35 ; RELATIVE SECTOR OF DIRECTORY INC R3 TCKPCH Z FN.I C ND.E ITEXT,KP CNOC-MINADY; 20OVQS BR TCKPCH FZ.I C ND.E C ND.E D CELI-SMETI; 10OVQS L BP LCMS$T Z FN.I C ND.E D XEFI; 20OVQS Q BE RTPAFX Z FN.I E?YP TTYRIIOPR; ) R0B(TAPP TBTS T ARXP!FLCMS$T Z FN.I LEABNTOIKPECCH& D ENSPSU. OL VT:TAPST SE; 2)(RK,SCOL#V VBMO NO; 30OVQS E BG E?BL@BYTES IN REG TASK TABLES $TKFL2 = TASMAX-MXTASK*3 ; # BYTES IN EXT OF TASK TABLES $TKFLN = $TKFL1+$TKFL2+2+3/4*2 ; # WORDS IN ALL TASK TABLES ; + 'TASKS' + EVEN NUMBER OF ; WORDS FOR DISCIO $TKFNS = $TKFLN/64.+1 ; NO. OF SECTORS IN TASK TABLE FILE ; ******** $ROSIZE = 320. ; SIZE OF ROS BOOT AREA A TIME-SLICED OR FIXED HEA .IFG PRIP12 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPB ; ACCUMULATE RELATIVE SECTOR BR DIOB30 ; NOT FINISHED DIOB35: ADD #12.,R0 ; BUMP BACK REMAINDER BISB R0,SYSTEM+1(R1) ; SAVE AS INDEX INTO FILE BUFFER CMP R3,LGTH(R2) ; LENGTH OF DIRECTORY EXCEEDED? BLE DIOB40 ; NO MOV #ERR007,R0 ; YES-REPORT ERROR TYPE 7 BR DIOB47 DIOB40: ADD SCTR(R2),R3 ; SECTOR AT WHICH TO START READ MOV DATA(R1),R4 ; ADDRESS OF DATA BUFFETAINPOCKHE CONTITIAR PIS; CKTNPR,#2)(R PBCM RDWO. RG ARTPA QING LA FNDPEUS SL.VOT SE; ) R2G(ARTR C IN ONTIMAORNF IRYNT ERTPA QNDFI; N RTQP,FPC R JS H RCQSR FO; ; K ACSTN OLYOVQSY BEDLLCAT SE; ) SP-(.,#1 V MO CKTA SONS TUTA SORSSCERO PVESA; ) SP-(R,PS V MO RNTURER PERO POR FPCT SE; P)(S+,P)(S V MO R BEUM NSKTAT GE; 1 ,RP)(S2. V MO . = LYOVQS D ******** ; ******** ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = $ROSIZE ; DISC1 DISK DIR. AFTER BOOT AREA ******** ; ; LEAVES ROOM FOR 20K ROS BOOT .IFZ DRESDI DIRLN1 = 0 ; ZERO LENGTH .ENDC .IFNZ DRESDI DIRLN1 = MAXID1-1/12.+1 ; DISC DIRECTORY 1 LENGTH .IFG ERT12 ; PUSH ADDRESS .WORD QPRT12 ; PULL ADDRESS .WORD EQPT12 ; BOTTOM OF QUEUE .WORD QPRT12 ; TOP OF QUEUE .BYTE NEQP12-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT12 = . ; QPART LEVEL 12 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=FR MOV DFDBAD(R5),DUSE1(R4) ; START CORE ADDRESS FOR SIO ASR R5 ; R5 TO DISC CONTROLLER UNIT # MOV R3,DUSE2(R4) ; SECTOR FOR START I/O MOV #60.,DUSE3(R4) ; WORDS IN XFER FOR SIO BISB #100,INOUT(R4) ; SET FILE ID READ REQUESTED SWITCH CLR R2 ; SPECIFY DISC READ BR DIOC00 ; SIO - START I/O ; DIOB47: JMP DIHD00 ; REPORT ERROR .ENDC ; ; JMP TO GE; K ACSTM TEYS SON ; VESA QBYD DEENSPSUY ILARNTLUVON EE BDYEALR AAS HSKTA ; ; 5 OM CTSE.C E AG.P ; ; RNTURE; PC S RT: 20CKNO C ND.E S ERSTGIREE ORSTRE; R OP,PR5 R JS: 10CKNO T OUCKLOT SERE; R PS+,P)(S V MO E BLTAINPOCKHE COT N =ATST P'SSKTAT SE; 2)(RK,NCRT#P VBMO N IOATRMFOINT ARQPS K'AS TNDFI; N RTQP,FPC R JS T OUCKLOT SE; SR,PCKLO#P V MO Y ITORRI PHNDISCS-1 DIRAD2 = 0 ; DISC RESIDENT DIRECTORY ADDRESS DISC 2 DIRLN2 = MAXID2-1/12.+1 ; DISC DIRECTORY 2 LENGTH .ENDC .IFG NDISCS-2 DIRAD3 = 0 ; DISC RESIDNET DIRECTORY ADDRESS DISC 3 DIRLN3 = MAXID3-1/12.+1 ; DISC DIRECTORY 3 LENGTH .ENDC .ENDC ; ; THE FOLLOWING CONTAINS THE FILE TYPE STATUS DESCRIPTORS ; FOR EACH FILE TYPE. ; $FD000 = 41 ; FILE TYPE 0, LOG UNII4*NEQP12+QPRT12 ; GET RID OF ENTRYS NOT NEEDED EQPT12 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 13 ; .IFNZ NEQP13 .IFGE PRIP13 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP13 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK JT TO DIHD00(BR RESTRICTIONS) ; DIOB48: JMP DIHD10 ; REPORT ERROR ; ; FOUND ACTIVE FILE WITH APPROPRIATE FILE ID ; FIRST DETERMINE IF FILE ID IS ASSOCIATED WITH DEVICE ; REQUESTED. ; R1 = I/O LIST ADDRESS ; R2 = NEGATIVE INDEX INTO 'FILE' ; R4 = ADDRESS OF I/O BUFFER ; R5 = DISC CONTROLLER UNIT NO. ; DIOB50 = . MOVB DOD+NCRLOC+PDVCE(R2),R3 ; GET LOGICAL DEVICE NO. OF FILE BIC #VESA; ) SP-(R,PS V MO N URET RND ARENOIG- NO; 10CKNO T BL Y?LAEROVN AERLLCA; INTMOV,#R1 PBCM ERMBNUK AS T'SERLLCAT GE; 1 ,RSKTA$C V MO RSTEISEG RVESA; HRUS,PR5 R JS K AS TVETIAC; 20CKNO Q BE M RO FEDLLCAE BSTMU; VETIAC T TS C SLTM!$TCKPCH Z FN.I . = PTCKNO ; ; ; C ND.E CHARSEE NUTION C; 35CHQS BR UT-OCKLOY ITLT 1, NO COMPRESSION $FD001 = 1 ; FILE TYPE 1, LOG UNIT 1 $FD002 = 1 ; FILE TYPE 2, LOG UNIT 1 $FD003 = 1 ; FILE TYPE 3, LOG UNIT 1 $FD004 = 1 ; FILE TYPE 4, LOG UNIT 1 $FD005 = 1 ; FILE TYPE 5, LOG UNIT 1, NO CHECK PONT******** $FD006 = 1 ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8,M .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT13 ; PUSH ADDRESS .WORD QPRT13 ; PULL ADDRESS .WORD EQPT13 ; BOTTOM OF QUEUE .WORD QPRT13 ; TOP OF QUEUE .BYTE N177600,R3 ; ISOLATE CMPB R3,DEVICE(R1) ; SAME AS CALLS DEVICE NUMBER? BNE DIOB25 ; NO KEEP SEARCHING FOR ID ON PROPER DEVICE ADD #DOD+NCRLOC,R2 ; ADDRESS OF FILE'S DIRECTORY DIOB55: JSR PC,CFILID ; CHECK FILE & SET UP FOR XFER TST R0 ; ERROR OCCUR BNE DIOB48 ; YES-REPORT MOVB INOUT(R4),R2 ; GET REQUEST'S I/O FCN DIOB70: CMP R2,#3. ; WRITE/WRITE CHECK OR READ-WRIORRI PETES R; SR,PP)(S2. V MO: 80CHQS H RCEA SRTTAES R; 05CHQS BR UT-OCKLOY ITORRI PETES R; SR,PP)(S2. V MO: 70CHQS ; T OUL-OL RTEIAITIN; 10VEQO P JM T OUCKLOU CPT SERE; SR,PP)(S V MO UPT-SES TUTA SUT-OLLRO; P SUOL,RPC R JS SKTAT OUL-OL ROFS ESDRADY TRENT ARQP; 1 ,RR5 V MO CKTA SFF OCHITSWY BEDLLCAP PO; + P)(S T TS NO; 80CHQS T BL ? OLP LOG UNIT 1 $FD009 = 1 ; FILE TYPE 9, LOG UNIT 1 .IFL 10.-$FTMAX XXXXXXXX ; ONLY SET UP FOR 10. FILE TYPES .ENDC $OVTYP = 5. ; FILE TYPE FOR OVERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDISZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = $ROSIZE ; BOOT AQ NEQP13-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT13 = . ; QPART LEVEL 13 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP13+QPRT13 ; GET RID OF ENTRYS NOT NEEDED EQPT13 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; RTE? BLT DIOC00 ; NO-START REQUEST'S I/O BGT DIOB78 ; WRITE AFTER READ SUB #2.,R2 ; START WRITE FCN FOR WRITE/WRITE CHECK DIOB75: BISB #200,INOUT(R4) ; SET MULTIPLE DISC FCN REQUESTED BR DIOC00 DIOB78: CLR R2 ; SET READ FCN FOR READ/WRITE BR DIOB75 ; ; R0 CONTAINS AN IFD - INDEX INTO FILE DIRECTORY. ; THIS IS THE NUMBER OF FILES BETWEEN THE BEGINNING OF ; THE CORE RPOALH IT WLEABATMPCOK OCBLT ARST; ) R0L(OOLP,AR3 PBCM R3 ABSW NO; 80CHQS T BG E?BLLAAIAVS CKLO BOFR BEUM NINT FI; 3 ,RR1 PBCM ZESI B'SSKTAT GE; R1),R1E(IZBS VBMO O. NSKTAT GE; R1),R2K(TSOV SBBI R1 R CL N AIAGH RCEA SRTTA S -NO; 70CHQS E BN T TAPSE ATOLIS; R10,6077#1 C BI N AIAGH RCEA SRTTA-SIDVOY TREN; 70CHQS Q BE ? NGTIAI WLLTI SSKTREA ******** $FS002 = 0 ; ******** $FS003 = 0 ; ******** $FS004 = 0 ; ******** $FS005 = 1200. ; TASK AREA. ******** $FS006 = 0 ; ******** $FS007 = 471. ; BATCH AREA - ALSO FORCE U ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 14 ; .IFNZ NEQP14 .IFGE PRIP14 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP14 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 VESIDENT DIRECTORY 'DOD' AND THE DIRECTORY ; WHICH THE IFD REPRESENTS. THUS A TRUE INDEX WOULD ; BE IFD*10. ; DIOB80 = . BIC #100000,R0 ; GET RID OF IFD MARKER MOV R0,R2 ASL R0 ; R0 ASL R0 ; TIMES ADD R0,R2 ; FIVE ADD R2,R2 ; GIVES IFD*10 - TRUE INDEX ADD #DOD,R2 ; ADDRESS OF FILE'S DIRECTORY TST (R2) TAD HERCEA SIS; 1 ,R2)(R V MO T OUK-OC LTYRIIOPRT SE; SR,PCKLO#P V MO . = 60CHQS ; CEPA SRECOS K'AS TLEABNTOIKPECCH ; N IIT FLLWIT IIFE INRMTEDE- Y TRENG INITWAD UNFO ; ; 20OVQS P JM E BLTAKP C &US SL.VO= T TAPSS T'ESQURET SE; 5)(RK,SCOL#V VBMO NGOI GEPKE- O N; 20CHQS E BL S T'ARQPR IOPR NEDCHARSE; ORRINP,#R0 P CM: 55CHQS T XI END ALEABNTOIKPECCHT SE; 20PTCK BR XTYPE 9 ******** ; TO START ON A 16 SECTOR BOUNDARY. ******** $FS008 = 0 ; ******** $FS009 = 0 ; ******** ; $DSIZE = 8192. ; NUMBER OF SECTORS ON DISK. ******** ; ******** $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS0Y ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT14 ; PUSH ADDRESS .WORD QPRT14 ; PULL ADDRESS .WORD EQPT14 ; BOTTOM OF QUEUE .WORD QPRT14 ; TOP OF QUEUE .BYTE NEQP14-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT14 = . ; QPART LEVEL 14 BEGIN .WORD 0,0,0,0,0,0,Z ; IS FILE ACTIVE? BNE DIOB55 ; YES - CHECK FILE ID & START I/O MOV #ERR007,R0 ; NO-ERROR TYPE 7 BR DIOB48 ; REPORT ; .PAGE ; ; ; DISC START I/O SEQUENCE ; R1 = I/O LIST ADDRESS ; R2 = SINGLE I/O FCN. 0= READ, 1= WRITE, 2= WRITE CHECK ; R4 = ADDRESS OF I/O DATA BUFFER ; R5 = DISC CONTROLLER UNIT NO. ; ; 'DUSE1' = START ADDRESS OF XFER ; NO; 55CHQS E BN PTCKY BEDLLCA; P)(S T TS . = 50CHQS ; ERLLCAE INRMTEDE ; ; 10CHQS BR H RCEA SOFY ITORRI PMPBU; R0 C IN: 40CHQS N'KIOO-L-AEPKE; 30CHQS BR E BLTAT ARQPN IRYNT EXTNEO TMPBU; + 2)(R+,2)(R P CM: 35CHQS E ICRVSEG INITWAY TREND UNFO; 60CHQS Q BE T TAPSE ATOLIS; R10,6077#1 C BI Y TRENT EX NTOP UM-BIDVOY TREN; 35\05+$FS006+$FS007+$FS008+$FS009 ; ******** $FS009 = $DSIZE-$ALOD1-$ALOD2 ; NUMBER OF DATA REA SECTORS. ******** ; ******** .IFL $DSIZE-$ALOD1-$ALOD2 ; ******** XXXXXXXX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; ; FORCE THIS IDS TO BE IN SYSTEM. ]0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP14+QPRT14 ; GET RID OF ENTRYS NOT NEEDED EQPT14 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 15 ; .IFNZ NEQP15 .IFGE PRIP15 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP15 ; TIME^ 'DUSE2' = START SECTOR NO. ; 'DUSE3' = NO. OF WORDS IN XFER ; DIOC00 = . MOVB #NRETRY,NOTRYS(R5) ; INITIALIZE ERROR CTR. MOVB #NRETRY,TIMCTR(R5) ; INITIALIZE TIME-OUT CTR. ASL R5 ; R5 BECOMES DCUWX ; ; R5 = DISC CONTROLLER UNIT WORD INDEX-DCUWX ; DIOC10: MOV DUSE3(R4),@WCR(R5) NEG @WCR(R5) ; SET WORD COUNT REGISTER MOV DUSE1(R4),@CMA(R5) ; START ADDRESS .CHQS Q BE ELEV LXTNEO TMPBU- D KEAR MILTA1 -; 40CHQS Q BE ? LEAB TOFD ENO TEDCHARSE; R1 C IN LLCET ARQPA F ORDWOT RSFIT GE; 1 ,R2)(R V MO: 30CHQS ELEV LXTNEO TMPBUT-ISEXT N'ESDO; 40CHQS Q BE S ESDRADT ARQPS Y'ITORRI PISTHT GE; 2 ,R1)(RTNARQP V MO X DEIND OR WTYRIIOPR ; R1 L AS CHARSEE ATULLCCA; 1 ,RR0 V MO: 20CHQS NO; 50CHQS E BG ` ******** $BCHID = NDISCS+$SYSFL+1 ; FILE ID FOR BATCH FILE $BCHTP = 7. ; BATCH FILE TYPE $RASIZ = 200. ; NO. OF ENTRIES IN USERS SYMBOL TABLE ; ; IN RASM ; ; NOTE: 4 WORDS/ENTRY $LSDSZ = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= Ta-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT15 ; PUSH ADDRESS .WORD QPRT15 ; PUbIFZ $DDSDC ; ; CALCULATE AND SET DAR & DAE FOR RF-11 CONTROLLER ; FROM SECTOR IN DUSE2. NOTE ROS SECTORS ARE 64 WORD ; BLOCKS. THIS WILL BE SMALLEST ADDRESSABLE UNIT OF DISC. ; MOV #6.,R0 ; MULTIPLICATION CTR FOR TIMES 64 CLR @DAE(R5) ; INITIALIZE FOR DOUBLE WORD SHIFT .ENDC MOV DUSE2(R4),@DAR(R5) ; SECTOR TO DAR .IFZ $DDSDC DIOC20: ASL @DAR(R5) ; MULTIPLY BY 2 ROL @DAE(R5'SSKTAE IVCT AANTHR HEIG HI.PR; 4 ,RR0 P CM ELEV LXTNEO TMPBU- NO; 40CHQS L BP ?ICAMYN DELEV LTYRIIOPRS I; ) R0B(TAPP TBTS: 10CHQS T RSFI1 L VELEH RCEA STOP UET S; R0.,#1 V MO: 05CHQS K AS TVETIACF OOB/NSBT GE; R3),R1B(NOPH V MO K AS TVETIACF OSSREDD ARYNT EVESA; 5 ,RR2 V MO SKTAE IVCT AOFY ITORRI PVESA; 4 ,RR0 V MO S ESDRADR DEEA HAMGRRO PVESA; 1 ,RR4 V MO dO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 50. ; MAX NO. OF OBJECT MODULES TO BE ******** ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ; JUST 1 TTY IN SYSTEM ******** ;IeLL ADDRESS .WORD EQPT15 ; BOTTOM OF QUEUE .WORD QPRT15 ; TOP OF QUEUE .BYTE NEQP15-1 ; MAX. ENTRIES -1 .BYTE 0 ; ALLOCATION SWITCH .ENDC QPRT15 = . ; QPART LEVEL 15 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP15+QPRT15 ; GET RID OF ENTRYS NOT NEEDED EQPTf) ; SHIFT C TO DAE DEC R0 ; NEED (SECTOR)**64 BNE DIOC20 .ENDC ; ; CALCULATE AND CONSTRUCT DCS FOR RF-11 OR DDS CONTROLLER ; 1= WRITE IN DCS 02:01 ; 2= READ IN DCS 02:01 ; 3= WRITE CHECK IN DCS 02:01 ; MOVB FCNTBL(R2),R2 ; GET CORRECT FUNCTION VALUE BIS #101,R2 ; SET GO FCN IN :01 & INTERRUPT ENABLE MOV R2,CDCS(R5) ; SAVE CURRENT DCS WORD THIS D . = H RCQS ; S ESDRADR DEEA HAMGRRO P =R4 ; Y TRENS K'AS TVETIACF OSSREDD ARTPA Q =R2 ; SKTAE IVCT AOFY ITORRI P =R0 : RYNT EONUP ; Y.VLSO Q = 1T,KP C = 0. CKTA SIN ; NDOU FBEL IL WCHITSWY BEDLLCAA . EDCHARSEE BLLWI ; ESEUQUL AL, Y'VLSO'QY BEDLLCAF IS.RTPA QTYRIIOPR ; ERGHHIH RCEA SLYONL IL W',PTCK 'BYD LEAL CIF ; D.TECUXE EICOG LINL-OL/RUT-OLLROD AND DEENSPSUE BLLWI ; K AS TVETIACE TH, hN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = i15 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; GENERATE QPARTN TABLES FOR RPOM LEVEL 16 ; .IFNZ NEQP16 .IFGE PRIP16 ; GENERATE TIME-SLICED OR FIXED HEA .IFG PRIP16 ; TIME-SLICE SUSPEND TIMER .WORD 1 ; THREAD WORD .BYTE 0 ; DON'T QUEUE TASK .BYTE 20!TRES ; OPTION BYTE, J & TRES .WORjEVICE ; ; RESET TIMER FOR 100 MSEC TIME-OUT ON I/O XFER ; MOV TMTBL(R5),R3 ; GET TIMER MODULE THIS DEVICE MOV TDELAY,RESTIM(R3) ; RESET FOR 100 MSEC TIME-OUT MOV PSR,-(SP) ; SAVE CURRENT LEVEL CMPB (SP),#340 ; SHOULD IT BE RAISED TO 5? BHIS DIOC30 ; NO MOV #340,PSR ; SET LEVEL TO 5 FOR SIO DIOC30 = . MOV R2,@DCS(R5) ; START DISC I/O XFER ASR R5 NDOU FISE ONF IE.ACSPE OR C'SSKTA ; VETIACE THO NT IIT FLLWIT HA TS,T'ARQPC MINADY ; HE TINT ESQUREG INITWAA D IN FTOD LEAL CISH RCQS ; ; TCKPCH Z FN.I ; ; ERCHATSPDIR OSKTAO TRNTURE; PC S RT: 40PTCK C ND.E T OUCKLOU CPT SERE; R PS+,P)(S V MO CKTA SFF OCHITSWY BEDLLCAP PO; + P)(S T TS UEUE QTYRIIOPRF OADHET ASKTAE EUQU; 0)(RSTIR,FR4 V MO: 30PTCK LYEROPPRT AS LUPT SEY-PTEM; ) R0T(AS,LR4l1 ;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. ; 250MS (1/4 SEC.) COUNT FOR TTY ******** ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR mD 0 ; RESET/TIMER .WORD TSABRT ; TIMER COMPLETE SUBROUTINE .WORD 0 ; TIME-OUT RACE FLAG .ENDC .WORD 0 ; PARTITION ADDRESS. 0= NOT ALLO .WORD QPRT16 ; PUSH ADDRESS .WORD QPRT16 ; PULL ADDRESS .WORD EQPT16 ; BOTTOM OF QUEUE .WORD QPRT16 ; TOP OF QUEUE .BYTE NEQP16-1 ; MAX. ENTRIES -1 .BYTE 0 n ; R5 BECOMES DISC CONTROLLER UNIT # ; ; EXITS FROM DISCIO, CHKPIO OR PFRITE ; R1= I/O LIST ADDRESS ; R5 = DISC CONTROLLER UNIT NO. ; DIOD00 = . TSTB CALLED(R5) ; INTERRUPT OR TIME-OUT FLAG SET BEQ DIOD20 ; NO- SUBROUTINE REQUEST CALL BMI DIOD30 ; TIME-OUT - COMPLETE SUBROUTINE RETURN MOV (SP)+,PSR ; RESET FROM LEVEL 5 JMP RESTOR ; EXIT FROM INTERR V MO E EUQUY PTEMT NO; 30PTCK E BN D OR WADRETHS K(AS TUPT SE; 4)(R),R0T(RSFI V MO X DEIND OR WTYRIIOPR; R0 L AS S RON IEDEUQU= T TATST SE; ) R1T(TATSS,ROIN#Q VBMO LEABNTOIKPECCH= T TAPST SE; 2)(RK,TCAR#P VBMO UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO C ND.E O LS AO.FN ITNARQPD AN ; N RTQP,FPC R JS N AIAGR BEUM NSKTAT GE; 1 ,RSKTA$C V MO: 20PTp ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;Eq ; ALLOCATION SWITCH .ENDC QPRT16 = . ; QPART LEVEL 16 BEGIN .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0,0,0 .=4*NEQP16+QPRT16 ; GET RID OF ENTRYS NOT NEEDED EQPT16 = .-2 ; END OF THIS LEVEL'S QPART T .WORD -1 ; TAIL MARKER .ENDC ; ; ; ; ; THE FOLLOWING TABLE CONTAINS THE ADDRESS OF rUPT ; ; ERROR EXIT FROM DISCIO,CHKPIO, OR PFRITE ; CANNOT THREAD REQUEST ; R0 = ERROR CLASSIFICATION ; R1 = I/O LIST ADDRESS ; NOTE: IF EXIT TYPE 2, IT WILL BE TREATED AS AN EXIT ; TYPE 1 ; DIOD10 = . INC (R1) ; BUMP BACK TREAD WORD DIOD12: JSR PC,ERR ; EXECUTE DISC I/O ERROR SUBROUTINE MOV PSR,-(SP) ; MAKE COMPATIBLE BR DIOD25 ; START EXIT SEQUENCE CK ; Y ITORRI PICAMYN DOT NIFE ER HESOM COR ; D UNFOT NOT ESQUREG INNDPEF ICHSR QOMFRS RNTURE ; ; CHARSEQ M ORRFPES-YE; H RCQS I BM TYRIIOPRC MINADY; ) R0B(TAPP TBTS TCKPCH Z FN.I N IOATRMFOINN RTPA QNDFI; N RTQP,FPC R JS K ACSTN OPTCKY BEDLLCAT SE; ) SP-( R CL CKTA SONS TUTA SORSSCERO PVESA; ) SP-( R CL R HETCPAIS DOR FPCS RTT SE; ) SP-(H,TCSP#D V MO 0ELEV LtOM PRINT OPTION WHERE ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;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 LINEuTHE QPART'S ; FOR EACH PRIORITY LEVEL. 0 = DOESN'T EXIST ; QPARTN = .-2 ; TAKE CARE OF ILLEGAL LEVEL 0 .WORD QPRT01,QPRT02 .WORD QPRT03,QPRT04 .WORD QPRT05,QPRT06 .WORD QPRT07,QPRT08 .WORD QPRT09,QPRT10 .WORD QPRT11,QPRT12 .WORD QPRT13,QPRT14 .WORD QPRT15,QPRT16 .=QPARTN+2+NPRIOR+NPRIOR ; GET RID OF ENTRIES NOT NEEDED ; ; ; GENERATE DUMMY SYMBOLS FOR NON-EXISTENvDIOD15: INC (R1) ; BUMP BACK THREAD WORD UNDER LOCKOUT BR DIOD25 ; ; EXIT AS SPECIFIED BY CALLER ; R1= I/O LIST ADDRESS ; DIOD20 = . CMPB #2.,TYPE(R1) ; EXIT TYPE 2 SPECIFIED IN REQUEST ? BEQ DIOD40 ; YES DIOD25: MOV (SP)+,PSR ; RESTORE PSR MOV (SP)+,R5 ; RESTORE MOV (SP)+,R4 ; CALLER'S MOV (SP)+,R3 ; REGISTERS MOV THWIT OUCKLOT SERE; R PS R CL T TATSN ISYBUY LAEROVT SE; ) R1T(TATST,ACVY#O VBMO R BEUM NSKTAT GE; 1 ,RSKTA$C V MO K ACSTM TEYS SONT GED ANT IDO; VESA,QPC R JS T OUCKLOR DEUNE AVQS; SR,PCKLO#P V MO E EUQUREO NND ANDPEUS SL.VOIN; P)(S,-1.#- V MO E AVQSR FOR PS; ) SP-(R,PS V MO E ORGN-INO; 40PTCK T BL ? SKTAY LAEROV; INTMOV,#SKTA$C P CM x .PAGE ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 24576.+24576. ; TOP OF CORE IN SYSTEM ******** $RASM = 1 ;1 = ASSEMBLER IS INCLUDED, AND THEREFORE ;CREAD MUST INSERT , AFTER ;ASSEMBLER READ REQUESTS .PAGE ;*******************************************************************yT QPART TABLES .IFZ NEQP01 QPRT01 = 0 .ENDC .IFZ NEQP02 QPRT02 = 0 .ENDC .IFZ NEQP03 QPRT03 = 0 .ENDC .IFZ NEQP04 QPRT04 = 0 .ENDC .IFZ NEQP05 QPRT05 = 0 .ENDC .IFZ NEQP06 QPRT06 = 0 .ENDC .IFZ NEQP07 QPRT07 = 0 .ENDC .IFZ NEQP08 QPRT08 = 0 .ENDC .IFZ z (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 TST (SP)+ ; SP TO PROPER STACK POSITION FOR RTS PC ; SUBROUTINE RETURN ; ; RETURN FROM TIMER COMPLETE SUBROUTINE ; DIOD30 = . CLRB TMCRSW(R5) ; RESET TIMER COMPLETE SUB. SWITCH MOV (SP)+,PSR ; RESET FROM LEVEL 5 RTS PC ; SUBROUTINE RETURN ; ; SUSPEND CALLING PROGRAM - TYPE 2 EXIT ; DIOD40 = . K AS TVETIAC ; 40PTCK Q BE M RO FEDLLCAE BSTMU; VETIAC T TS C SLTM!$TCKPCH Z FN.I . = PTCK ; ; 4 OM CTSE.C E AG.P ; C ND.E ; OMRPM RO FITEX; 20VBQO P JM USATSTS RON IEDQ'E ORSTRE; ) R1T(TATSS,ROIN#Q VBMO E IM TISTHE IM TLFHAE ONY NL OVEGI; 4)(RERIMCT R AS . = 30OATS N RTQP,FPC R JS N AIAG. FOINT ARQPT GE; 1 ,RSKTA$C|*** ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;***********************************************************} NEQP09 QPRT09 = 0 .ENDC .IFZ NEQP10 QPRT10 = 0 .ENDC .IFZ NEQP11 QPRT11 = 0 .ENDC .IFZ NEQP12 QPRT12 = 0 .ENDC .IFZ NEQP13 QPRT13 = 0 .ENDC .IFZ NEQP14 QPRT14 = 0 .ENDC .IFZ NEQP15 QPRT15 = 0 .ENDC .IFZ NEQP16 QPRT16 = 0 .ENDC ; .PAGE ; ; THE FOLLOWIN~ MOV (SP)+,12.(SP) ; SAVE PSR MOV (SP)+,R5 ; RESTORE MOV (SP)+,R4 ; ENVIRONMENT MOV (SP)+,R3 ; OF MOV (SP)+,R2 ; CALLER MOV (SP)+,R1 ; BEFORE MOV (SP)+,R0 ; DISCIO CLR -(SP) ; VOLUNTARY SUSPEND JSR PC,QSAVE ; SUSPEND TASK JMP DSPTCH ; EXIT TO DISPATCHER ; ; ; F V MO . = 29OATS ; UEAL VALINIGOR2 1/O TCELI-SMETIT SERE ; ; E IN LINT ESQURET EX NCKHE CND A; 10OATS BR E EUQUF OUT OSKTAD TEORABE AK T; P LQUL,PPC R JS: 20OATS K AS TXTNEN -ILLRO& T OUT -ILLRO; 00VEQO P JM S SKTAH OT BOFY ITORRI P =R40= R; 4 ,RR0 V MO S YE; 29OATS Q BE ? ALINIGORO TCKBAE OM CND ATNARQP ; ; OFT OUS SKTAL AL" LLPUT ORAB*********** NCR = 0 ; NO CARD READERS IN CITGO ******** .IFNZ NCR ; ******** BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNALG TABLE CONTAINS THE NUMBER OF (REQUESTS -1) ; PENDING IN EACH PRIORITY LEVEL'S QPART. ; NREQQP = .-1 ; TAKE CARE OF ILLEGAL LEVEL 0 .BYTE -1.,-1.,-1.,-1. .BYTE -1.,-1.,-1.,-1. .BYTE -1.,-1.,-1.,-1. .BYTE -1.,-1.,-1.,-1. .=NREQQP+1+NPRIOR ; GET RID OF ENTRYS NOT NEEDED .EVEN ; .PAGE ; ; THE FOLLOWING ARE THE ADDRESSES OF THE DEVICE REGISTERS ; FOR THE PERIPHERAL HARDWARE ALLOILE DIRECTORY INFORMATION IS NOT NEEDED. SYSTEM, DUSE1 ; DUSE2 AND DUSE3 ALREADY SET UP FOR START I/O. ; DETERMINE FUNCTION TO PERFORM. ; DIOE00 = . MOVB INOUT(R4),R2 ; GET REQUEST'S I/O FCN BPL DIOB70 ; PERFORM I/O FOR REQUESTED FCN BITB #4.,INOUT(R4) ; I/O FCN = 4? BNE DIOE20 ; YES MOV #2.,R2 ; WRITE CHECK NEXT FOR W/WC REQUEST DIOE10: BICB #200,INOUT(R4) ; RESET MULIPLE FCN SWIT "WED DI; 1 ,RR2 P CM SKTAT ESQUREF OSSREDD ARYNT EET G; 2 ,R2)(RQPADHE V MO ERADHE. RTPAN IRTPAIQW NET SE; ) R5T(ARQP,IR3 VBMO S ESDRADN IOITRTPA; 5 ,R2)(RDDTAPR V MO RTPAIQW NEE ATULLCCA; 3 ,RR2 B SU Y TRENT OUL-OL ROFS ESDRADW NE; 1 ,RR3 V MO SSREDD ARYNT EEDSHPUE ORSTRE; R3+,P)(S V MO: 25OATS 10OATS BR ILTAT AITT PU; P HQUS,PPC R JS P LQUL,PPC R  EBCDIC CODE ; (029 CARD CODE) $RES = 1 ; TIMER RES. FOR CREAD (=10.0 MSEC.) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPERCATOR B3. ; .IFNZ $CORAL B3FR = 162024 ; FUNCTION REGISTER B3AR = 162022 ; ADDRESS REGISTER(ANSWER REGISTER) B3RR = 162020 ; REQUEST REGISTER .ENDC ; BSYB3 = 000002 ; BUSY MASK FOR B3 BOX SRCHB3 = 000060 ; SEARCH MASK FOR B3 BOX ; ; NOTE: MINIMUM SEARCH ALLOB3 = 000010 ; ALLOCATE MASK FOR B3 BOX DEALB3 = 000004 ; DE-ACH BR DIOC00 ; START I/O DIOE20: MOV #1.,R2 ; WRITE NEXT FOR READ/WRITE REQUEST BR DIOE10 .PAGE ; ; CFILID IS AN INTERNAL SUBROUTINE TO DISCIO THAT WILL ; DETERMINE THE VALIDITY OF THE I/O REQUEST IN RESPECT WITH ; THE FILE'S DIRECTORY. THIS SUBROUTINE WILL CALCULATE AND SET ; DUSE1, DUSE2 AND DUSE3 FOR THE START I/O SEQUENCE. ; ; THE CALLING SEQUENCE IS: ; ; JSR PC,CFILID ; ; JS NO; 25OATS E BN D?TEESQUREE BRTBO ALLWI; Q REDQ#O),R3T(TATS PBCM R BEUM NSKTA; R3 ABSW R3 RBCL S YE; 20OATS Q BE ? RYNT EOND TEESQURET ORAB; RQRTAB,#R3 PBCM R3),R2P(DQEA@H V MO: 10OATS Y TRENF OSSREDD AVESA; P)(S,-R3 V MO L AI TTOIN' SHPU 'ND A ; P HQUS,PPC R JS ADHEM RO FRYNT EL'UL'P; P LQUL,PPC R JS UTKOOC LTYRI 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 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READERLLOCATE MASK FOR B3 BOX SERRB3 = 000001 ; SEARCH ERROR MASK FOR B3 BOX ; ; COULDN'T FIND AN AREA ERROR .IFZ $CORAL .REF B3FR,B3AR,B3RR .REF ALLOC,SEARCH,DALLOC ; ******** .ENDC ; .PAGE ; ; THE FOLLOWING INFORMATION IS THE DYNAMIC CORE ; SPACE DESCRIPTORS. CORE BLOCKS (ONE GRANULE OF CORE ; SPACE) ARE OF SIZE 2**N AND ARE MULTIPLES OF DWHERE: R1 = I/O LIST ADDRESS ; R2 = ADDRESS OF APPROPRIATE FILE DIRECTORY ; R4 = ADDRESS OF I/O BUFFER ; R5 = DISC CONTROLLER UNIT NO. ; ; UPON RETURN FROM CFILID: ; ; R0 = ERROR TYPE THAT OCCURRED. 0 = NONE ; IF NO ERROR: ; 'DUSE1' = START ADDRESS OF XFER ; 'DUSE2' = START SECTOR NO. ; 'DUSE3' = NO. OF WORDS IN XFER ; CIOPRT SE; SR,PCKLO#P V MO R0 R AS S ESDRADE BLTAT ARQPT GE; 2 ,R0)(RTNARQP V MO X DEIND OR WTYRIIOPR; R0 L AS NO; 30OATS E BN E?BLTAINPOCKHE CE.I., CKRTPAT=TAPS; R3 C DE T TAPST GE; 3 ,R2)(R VBMO S YE; 30OATS Q BE T ARQPS T' IINE IVCT ARYNT ELYON; 0)(RQPEQNR TBTS * ********ERIM TBYE ON D * ; } STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CISC ; SECTORS. ; BCPOOL: .WORD ENDDYN ; BEGINNING ADDRESS OF CORR POOL ******** ; ; SET UP BY INITIALIZATION ECPOOL: .WORD ENDDYN ; ENDING ADDRESS OF CORE POOL ; ; SET UP BY INITIALIZATION BSZ256 = 1 ; BLOCK SIZE 256 WORD OPTION ; ; IF SET THEN BLOCK # IN HIGH ; ; ORDER BYTE = # OF WORDS. ; FILID = . BIT #100000,SYSTEM(R1) ; PFRITE ENTRY? BNE CIDA05 ; YES-IGNORE COMPRS TEST MOVB FTYPE(R2),R0 ; GET FILE TYPE BIC #177600,R0 ; ISOLATE MOV PSR,-(SP) ; SAVE PS ON STACK MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT CMP R0,CPRSIP ; THIS FILE TYPE BEING COMPRESSED? BEQ CIDC00 ; YES-DO WHATS NECESSARY MOV (SP)+,PSR ; RESET LOCKOUT BEY LLALTUENEVL IL WISTH******TENO ; ; UEAL VCELI-SMETIE ORSTRE; ) R4R(METI,C4)(RXTMA V MO ONTIMAORNF IRYNT ERTPA QNDFI; N RTQP,FPC R JS CELI-SMETIO TO. NSKTAT GE; 1 ,RSKTA$C V MO CKTA SONS TUTA SORSSCERO PVESA; ) SP-(R,PS V MO . = LYOVTS ; K ACSTM TEYS SON ; D DEENSPSUY ILARNTLUVOINN EE BAS HSKTA ; ; 3 OM CTSE.C LCMS$T Z FN.I E AG.P ; C NDyARD 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 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .ENDC ;  ; DOUBLE FOR NO. LOCATIONS. .IFZ BSZ256 ; ; IF NOT SET USE SHFTCT TO ; ; CALCULATE # WORDS BY SHIFTING SHFTCT = 0 ; SHIFT COUNT USED TO CALCULATE # .ENDC ; ; WORDS FROM # BLOCKS ; ; ; ALLOCATION POOL TABLE. CONTAINS START BLOCK IN ; CORE POOL OF SPECIFIED PRIORITY CORE SPACE ; ; CURRENTLY SET UP FOR 3K OF DYN CIDA05: BIT #40000,SYSTEM(R1) ; CHECKPOINT I/O REQUESTED? BNE CIDA40 ; YES TSTB SCFLAG(R4) ; USE RELATIVE SECTOR IN RLSECT? BEQ CIDA50 ; YES ; ; NO - USE INFO. IN FILES DIRECTORY MOV SCTR(R2),DUSE2(R4) ; SET START SECTOR NO. CIDA10: MOV LGTH(R2),R0 ASL R0 ; MULTIPLY ASL R0 ; SECTORS ASL R0 ;.E S STUEEQ RNGTIAI WOR FCKHE C; 00XAQN BR B3R FOC SE U.810 ; + 2)(R),R2-( TBBI OFL TATOY LADE; + 2)(R),R2-( TBBI 0 = S ESDRADN IOITRTPAD AN ; 2)(RDDTAPR R CL H TCWI SONTICALOALT SERE; 2)(RSWLOAL RBCL C ND.E C LOAL,DPC R JS ALOR$C FZ.I N IOATOCLL-ADET ARST; FRB33,LBEA#D S BI E ACSPE OR C'SONTITIAR PTECALOALDE; RRB3),R2D(ADRT@P V MO u ******** .PAGE ;********************************************************************** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM AMIC CORE ; UP TO 12 SEGMENTS ALPOOL = .-1 ; TAKE CARE OF ILLEGAL LEVEL 0 .BYTE $SB001 .BYTE $SB002 .BYTE $SB003 .BYTE $SB004 .BYTE $SB005 .BYTE $SB006 .BYTE $SB007 .BYTE $SB008 .BYTE $SB009 .BYTE $SB010 .BYTE $SB011 .BYTE $SB012 .BYTE $SB013 .BYTE $SB014 .BYTE $SB015 .BYTE $SB016 .=ALPOOL+1+NPRIOR  BY ASL R0 ; 64 ASL R0 ; FOR ASL R0 ; NO. WORDS MOV R0,DUSE3(R4) ; SET LENGTH OF XFER MOV R4,R0 ; CALCULATE ADDRESS OF RLSECT ADD #RLSECT,R0 ; AND START I/O THERE CIDA20: MOV R0,DUSE1(R4) ; SET START ADDRESS OF XFER TSTB INOUT(R4) ; IS IT A WRITE REQUEST? BEQ CIDA30 ; NO - EXIT TST M PO ROMFRT XI-ENO; 60XAQN Q BE T SEH TCWI SONTICALOALS WA; 2)(RSWLOAL TBTS: 25XCQN ORRR ERENOIG; + P)(S T TS T IUEUE-QDE; E IMQT,DPC R JS D OR WADRETHE ULOD MERIM TOFS ESDRAD; P)(SD,MOIM#T D AD NGTIORABE BSTMUS-YE; P)(S,-R2 V MO NO; 25XCQN E BN D?DEEAHR TLEDUMOR METI; 2)(RODMMTI.,#1 P CM: 20XCQN STUEEQ RXTNEN -ILLRO; 00VBQO P JM UTKOOC LTYRIIOq .IFNZ NLP ; ******** NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND 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 = 76 ; GET RID OF ENTRIES NOT NEEDED .EVEN ; .CSECT .DYSIN ; ; DYNAMIC STORAGE INITIALIZATION. ; CALLED BY IPL TO INITIALIZE STORAGE ALLOCATOR TO SIZE ; OF DYNAMIC CORE AND RESERVE FIXED OR TIME-SLICED PARTITIONS ; IF NECESSARY. ; NOTE: WHEN B3 DEFINED, CLEAN-UP MEANING OF BLOCK 0 ; .REF DYNSIZ DYSINI = . MOV #255.,B3RR ; DEALLOCATE ALL USUABLE BLOCKS ******** MOV #DEALB3,B3FRB PDVCE(R2) ; YES-PERFORM PROTECTED FILE CHECK BPL CIDA30 ; OK - NOT A PROTECTED FILE BIT #140000,SYSTEM(R1) ; PROTECTED IF DISCIO ENTRY BEQ CIDB10 ; SET ERROR TYPE 10 CIDA30: CLR R0 ; SIGNIFY NO ERRORS RTS PC ; RETURN TO CALLER ; ; CHKPIO ENTRY - USE CKSAVE IN FILE'S DIRECTORY ; CIDA40 = . MOV CKSAVE(R2),DUSE2(R4) ; CHECKPOINT ADDRESS SET PRT SERE; SR,PP)(S V MO RTPAFXC!SLTM $IF ; T INPOS HI TATE ICRVSER FOG INITWAE BSTMUT TAPS: TENO ; ATST PINS ESGRRO PINO I/T SE; 2)(RP,OI#I SBBI E EUQUF OUT OLLPU S-YE; 10XCQN Q BE D?TEESQURET ORAB; RQRTAB,#2)(R PBCM D EA HATY TLENRRCUS ESDRADY TRENT ARQP; 2 ,R2)(RQPADHE V MO ONTITIAR POFS ESDRADT GE; 4 ,R2)(RDDTAPR V MO T ARQPD IEPTEM; 20XCQN I BM UEUE QOFm5010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 =  ; ******** .IFZ $CORAL ; ONLY IF SOFTWARE ******** JSR PC,DALLOC ; ******** .IFF ; ******** JSR PC,DELAY ; TEMP. WAIT TIL B3 UP TO SPP .ENDC ; ******** MOV #DYNSIZ,R0 ; GET ADD. OF # BYTES IN DYN. AR BNE CIDA10 ; OK - CONTINUE MOV #ERR013,R0 ; REPORT ERROR TYPE 13 RTS PC ; RETURN TO CALLER ; ; USE RLSECT & NWORD FOR I/O PARAMETERS ; CIDA50 = . MOV NWORD(R4),R0 ; GET NO. WORDS IN I/O REQUEST .IFNZ $DDSDC BIT #1,R0 ; DDS MUST HAVE EVEN NO. OF WORDS IN XFER BNE CIDB14 .ENDC JSR PC,WRDSCT ; CONVERT TO SECTORS CMP R0,LGTH(R2)T OUY TREND EA HLLPU; P LQUL,PPC R JS UEUE QRTPA QOFS ESDRADT GE; 2 ,R1)(RTNARQP V MO: 10XCQN X DEIND OR W ; R1 L AS Y ITORRI PTELACUAL C; 1 ,RR0 V MO . = 00XCQN ; T ARQPF OUT ORYNT ELLPU ; ; T ARXP!FLCMS$T Z FN.I ; ******R*LENDHAR ROERE IM-TALRER HEOTAN; LTHA: 40XBQN ; ; Y EROVEC RREWAFTSOE AV HLYALTUENEV ; UPG-UN HOX BB3R-ROER ; ; ; 47VAQO P JM: 30XBQNi765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 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 #EA ******** ASR (R0) ; SHIFT INTO # OF WORDS ******** CLRB (R0) ; GET START BLOCK AND # OF USUABLE WORDS******** ASL (R0) ; NUMBER OF USUABLE BYTES ******** CMP (R0),#$DYNSZ ; IS MIN. REQUEST AVAILABLE? ******** BHIS DYSI02 ; YES ******** HALT ; NO. STOP FOR NOW. ********  ; GREATER THAN FILE SIZE? BGT CIDB08 ; YES-ERROR TYPE 8 MOV LGTH(R2),R3 ; GET LENGTH OF FILE ADD SCTR(R2),R3 ; CALCULATE EXTENT OF FILE ADD RLSECT(R4),R0 ; CALCULATE EXTENT OF I/O REQUEST ADD SCTR(R2),R0 ; ADD START SECTOR CMP R0,R3 ; WILL I/O OVERFLOW FILE? BGT CIDB09 ; YES-ERROR TYPE 9 MOV SCTR(R2),R0 ADD RLSECT(R4),R0 ; SECTOR ADDR EDIX FORD CELI-SMETI; 50XAQN BR C MINADY; 35XAQN I BM K AS TERTHNO A ; ) R0B(TAPP TBTS R FOK OO LE,ACSPE OR CGHOUENT NO; SR,PP)(S V MO S YE; 30XBQN Q BE ? LEABILVA AKSOCBLE IZBS; FRB33,RBER#S T BI P UNGHUR-ROER; 40XBQN E BN Y US BBET N'LDOUSH; R 3F,BB3SY#B T BI C SE U.621F O ; + 3)(R),R3-( TBBI L TATOA R FOH RCEAe 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX DYSI02: SUB (R0),BCPOOL ; SET BEG. ADD. OF USUABLE AREA. ******** MOV (R0),R0 ; GET NUMBER OF BYTES ******** ASR R0 ; SHIFT INTO # OF WORDS ******** CLRB R0 ; GET # OF BLOCKS ******** MOV R0,R1 SWAB R1 ; GET START BLOCK IN R1 SUB #255.,R1 ; SET UP UNUSED AREA. ******** BISB R1ESS OF I/O MOV R0,DUSE2(R4) ; SET FOR SIO MOV NWORD(R4),DUSE3(R4) ; WORDS IN XFER FOR SIO MOV R4,R0 ; CALCULATE ADDRESS AT WHICH TO ADD #NWORD+2,R0 ; START THE I/O BR CIDA20 ; CONTINUE ; CIDB08 = . MOV #ERR008,R0 ; REPORT ERROR TYPE 8 RTS PC ; CIDB09 = . MOV #ERR009,R0 ; REPORT ERROR TYPE 9 RTS PC ; CIDB10 = . MOV S ; + 3)(R),R3-( TBBI 3 BNGRIDU ; + 3)(R),R3-( TBBI Y LADE; + 3)(R),R3-( TBBI C ND.E H RCEA,SPC R JS ALOR$C FZ.I CHARSET ARST; FRB33,HBRC#S S BI SSREDD ASTUEEQ RONTICALOALT SE; R 3R,BR3 V MO CHARSER FOS ESDRAD3 BNDFI; D ADB3,FPC R JS O ER ZDYEALR AR3 ; ; G INITWAR BEUM NSKTAY LAEROVT GE; R3),R2K(TSOV SBBI: 20XBQN aLINES/PAGE (=CONTROL TAPE. $LPERR = 10. .ENDC ; ******** $RES = 1 ; TIMER RES. FOR CREAD (1/60 SEC.) ******** $100MS = 6. ; MULTIPLER TO GET 100MS OFF $RES ******** $500MS = 30. ; MULTIPLER TO GET 1/2 SEC. OFF $RES. ******** $1SEC = 60. ; MULTIPLER TO GET 1 SEC. OFF $RES. ******** ; ; MACROS TO MAKE THE DUMB MACRO ASSM. WORDK ,R0 ; ONLY 255 BLOCKS IN ALLOCATOR. ******** MOV R0,B3RR ; ALLOCATE UNUSED MOV #ALLOB3,B3FR ; DYNAMIC STORAGE .IFZ $CORAL JSR PC,ALLOC ; USE SOFTWARE ALLOCATOR .IFF ; ******** JSR PC,DELAY ; TEMP. TILL ALLOCATOR UP TP DPEED ******** .ENDC CLR R0 BITB (R0)+,-(R0) ; DELAY BITB #ERR010,R0 ; REPORT ERROR TYPE 10 RTS PC ; .IFNZ $DDSDC CIDB14 = . MOV #ERR014,R0 ; REPORT ERROR TYPE 14 RTS PC .ENDC ; ; COMPRESSION IN PROGRESS THIS FILE TYPE ; CIDC00 = . MOV #$CPTNO,R0 ; GET TASK NUMBER OF COMPRESS ASL R0 ; WORD INDEX MOV HEADER(R0),R0 ; GET HEADER ADDRESS JMP @INITPT(R0) ; QUEUE REQUEST IN REQUEST QUEUE N AIAGH RCEA SRTTA-SNO; 05XAQN E BN NGTIAI W &EDPTCKT NOL ILSTY TREN; 3 ,R2)(R VBMO T OUK-OC LTYRIIOPRT SE; SR,PCKLO#P V MO Y TRENE ICSLE-IM TORD XEFI; . = 10XBQN INGA ACHARSET ARST; 05XAQN BR S YE; 20XBQN Q BE E ATOLIS; R30,6077#1 C BI N AIAGH RCEA SRTTA-SIDVO; 05XAQN Q BE E?ICRVSEG INITWAL ILSTY TREN; 3 ,R2)(R V MO T ]; .MACRO .REF A,B,C,D,E,F,G,H,I,J .IRP X, .GLOBL X .ENDM .ENDM .REF .MACRO .DEF A,B,C,D,E,F,G,H,I,J .IRP X, .GLOBL X .ENDM .ENDM .DEF  (R0)+,-(R0) BITB (R0)+,-(R0) BITB (R0)+,-(R0) BIT #BSYB3,B3FR ; B3 STILL BUSY? BEQ DYSI10 ; NO HALT ; YES-HALT INIT.************ DYSI10: RTS PC ; RETURN TO IPL ; .CSECT .PAGE ; ; THE FOLLOWING LIST IS THE PARTITION HEADER THAT IS ; DYNAMICALLY SET IN A PARTITION BY RPOM. ; PRTHDR = . .WORD 0 ; PARTITIONS B3 ADDRESS-SE; ; DONE BY COMPRS-RETURNS TO DIHA50 ; ; ; CONVERT WORDS TO SECTORS (64 WORDS). INCLUDES ; PARTIALLY FILLED SECTORS. ; JSR PC,WRDSCT ; UPON ENTRY R0 = WORDS ; UPON EXIT R0 = SECTORS ; OTHER REGISTERS WILL NOT BE DESTROYED ; WRDSCT = . MOV R1,-(SP) ; SAVE R1 FOR WORK REGISTER MOV R0,R1 ; DUPLICATE ASR R1 ; CONVERT ASR R1 ; ; CALCULATE IT'S NEW IQPART MOVB R5,HIQPRT(R4) ; SET IT IN PARTITION HEADER MOV R3,R2 ; ENTRY ADDRESS TO APPROPRIATE REGISTER .ENDC GEOV23: TST TRARG(R2) ; IS TASK VOLUNTARILY SUSPENDED? BNE GEOV30 ; YES ASL R0 ; PRIORITY WORD INDEX MOV #PLOCK,PSR ; SET PRIORITY LOCK-OUT CLR (R4) ; SET TASK THREAD WORD =0 MOV R4,@LAST(R0) ; THREAD TASK BAOUK-OC LTYRIIOPRT SE; SR,PCKLO#P V MO RYNT ETYRIIOPRC MINADY; . = 00XBQN ; SSREDD ARYNT ERTPA Q =R2 ; EXND IRDWOY ITORRI P =R1 ; Y ITORRI P =R0 ; STUEEQ RONTICALOALG INITWAY TREND UNFO ; ; M PO ROMFRT XI EY,PTEMS Q'S-YE; 20VBQO P JM: 60XAQN NO; 20XAQN E BL S?ELEV LLL AEDCHARSE; ORRINP,#R0 P CM EXND IRDWOY ITORRI PMPBU; + 1)(R T TS L VEYT DYNAMICALLY .WORD 1 ; PRIOR & IQPART .WORD 0 ; WORK WORD ; ; DISC I/O PARAMETER LIST ; .WORD 1 ; THREAD WORD .BYTE SYSDSC ; LOGICAL DEVICE = SYSTEM DISC .BYTE 0 ; EXIT TYPE-SET DYNAMICALLY .WORD 0 ; I/O COMPLETE SET DYNAMICALLY .BYTE 0 ; NO I/O ERROR TASK .BYTE 3 ; DISC I/O LEVEL THREE  LENGTH ASR R1 ; INTO ASR R1 ; SECTORS- ASR R1 ; DIVIDE BY ASR R1 ; 64 BIT #77,R0 ; IS THERE A PARTIAL SECTOR? BEQ WTSA10 ; NO INC R1 ; YES-ADJUST ACCORDINGLY WTSA10: MOV R1,R0 ; SET ANSWER MOV (SP)+,R1 ; RESTORE R1 RTS PC ; RETURN ;CK MOV R4,LAST(R0) ; INTO ROS QUEUES MOVB #PRTNCK,(R2) ; SET PARTITION NOT CHECKPOINTABLE MOVB #QINROS,TSTAT(R1) ; SET TASK STATUS = QUEUED IN ROS ASL R1 ; TASK NUMBER WORD INDEX MOV R4,HEADER(R1) ; SET HEADER ADDRESS CORE RESIDENT AGAIN MOV (SP),PSR ; RESET PRIORITY LOCK-OUT ASR R1 ; TASK NO. AGAIN GEOV25: MOV #ROEMOD,R4 ; GET ADDRESS OF ROLL-OUT ERROLEY ITORRI PXTNEO TMPBU; R0 C IN: 50XAQN ONTICALOALD EE NTOO ER ZBEH OT BSTMU; 10XBQN Q BE T TAPS& T TACST AOKLO; 2)(R TBTS ADHET ARYNT EOFS ESDRAD; 2 ,R2)(RQPADHE V MO: 40XAQN ITE ATOGRRTEIN; 30XAQN BR T ARQPN IRYNT EXTNEO TMPBU; + 2)(R+,2)(R P CM: 35XAQN E ICRVSEG INITWAY TREND UNFO; 00XBQN Q BE T TAPSE ATOLIS; R30,6077#1 C BI T EX NTOP UM-BRYNT EIDVO; T.WORD 0,0 ; ERROR AND SYSTEM WORDS .WORD 0 ; ADDRESS OF BUFFER SET DYNAMICALLY ; ; DISC I/O DATA HEADER ; .WORD 0 ; FILE ID SET DYNAMICALLY .BYTE 1 ; USE FICE DIRECTORY INFORMATION .BYTE 0 ; I/O FCN SET DYNAMICALLY-INITIALLY READ .WORD 0,0,-1. ; THREE SYSTEM WORDS-LAST ONE ALSO TAIL SWITCH ; .PAGE ; ; ROLL-IN ERROR TYPE-OUT MODULE. ERROR #2  .PAGE ; ; ; DINT IS THE DISC INTERRUPT HANDLER. INTERRUPTS WILL NOT BE ; LOCKED-OUT AT INTERRUPT TIME. THE INTERRUPT VECTOR PSR ; CONTAINS THE DEVICE CONTROLLER UNIT NO. THE PROCESSOR ; LEVEL WILL BE RESET TO THE HARDWARE LEVEL OF THE DISC ; INTERRUPT. ; DINT = . $SAVE ; TRAP TO SAVE ENVIRONMENT MOV PSR,-(SP) ; CURRENT PSR CONTAINS DEVICE NO. IN C.C. MOV #PLOCK,PSR ; SET PRIORITY LOCKOR MODULE MOV R1,ERRTSK(R4) ; SET ROLL-OUT TASK NUMBER MOV R4,-(SP) ; SET ON STACK JSR PC,ERRTYP ; FOR ERROR TYPER JMP QOVB20 ; EXIT GEOV30: MOVB #VLSNCK,(R2) ; SET PSTAT = VOL. SUSPEND, NOT CHECKPTABLE BR GEOV25 ; ; ABORT REQUESTED DURING TASK ROLL-OUT ; GEOV40 = . .IFZ CHKPTC BR GEOV10 .ENDC .IFNZ CHKPTC TSTB PPTAB(R0) 35XAQN Q BE R3 C DE L VELET EX NTOP UM-BLEAB TOFD EN; 50XAQN Q BE R3 C IN LLCEF ORDWOT RSFIT AOKLO; 3 ,R2)(R V MO: 30XAQN CEVIER SNGTIAI WADHEF ISTTE- NO; 40XAQN L BP ? ELEV LTYRIIOPRC MINADY; ) R0B(TAPP TBTS SSREDD ALEAB TRTPA Q'STYRIIOPRT GE; 2 ,R1)(RTNARQP V MO ELEV LXTNEO TMPBUY-PTEM; 50XAQN I BM Q?Y LAEROVS Y'ITORRI PISTHN INGHIYTAN; 0)(RQPEQP ; RIEMOD = . .WORD 1 ; THREAD WORD .WORD 2 ; ERROR NUMBER 2 .WORD 0 ; ARGUMENT 1- TASK .WORD 0,0,0 ; UNUSED ARGUMENTS ; ; TIME-SLICE SUSPEND TIME-OUT ERROR MODULE ; .IFNZ $TMSLC TSEMOD = . .WORD 1 ; THREAD WORD .WORD 4 ; ERROR NUMBER 4 .WORD 0 ; ARGUMENT 1- TASK .WORD 0,0,0 UT MOV (SP),R5 ; SAVE PRIORITY AND GET DEVICE MASK BIC #177760,R5 ; ISOLATE TSTB TMCRSW(R5) ; RACE CONDITION BETWEEN TIMER AND DISC? BEQ DIHA01 ; NO-OK MOV (SP)+,PSR ; RESET CPU PRIORITY JMP RESTOR ; IGNORE INTERRUPT DIHA01: MOVB #1,CALLED(R5) ; SET CALLED BY INTERRUPT SWITCH ASL R5 ; R5 BECOMES DCUWX-DISC CONTROLLER UNIT ; ;  BPL GEOV10 CLR (R2) ; VOID QPART ENTRY DECB NREQQP(R0) ; DECREMENT NO. OF REQUESTS BR GEOV10 .ENDC ; .ENDC ; .PAGE .CSECT OM8 ; ; GOTOV = . MOV PSR,-(SP) ; SAVE PROCESSOR STATUS ON STACK ; ; USE PARTITION HEADER INFORMATION-CANNOT YET RELY ON ; TASK HEADER JUST READ UNTIL ERROR ON I/O CHECKED ; ADD #-HIOLST,R1 ; CALCULATE ADDRESS NR TBTS: 20XAQN 1 L VELEY ITORRI POR FEXND IRDWO; R1.,#2 V MO 1 L VELEY ITORRI PATH RCEA SUPT SE; R0.,#1 V MO: 10XAQN UT-OCKLOE ORSTRE; SR,PP)(S V MO: 05XAQN UPG UN-HORRR ES,YE; 40XBQN E BN G INATOCLL-ADEL ILST3 BIS; R 3F,BB3SY#B T BI 6 1. 2OFL TATOA R FO; ; 4 5.R HEOTAND AN; + 2)(R),R2-( TBBI B3R FOL NAIOITDD AECUS4 5.Y LADE; + 2)(R),R2-( TBBI: 00XAQN EDEUQUL ; UNUSED ARGUMENTS .ENDC ; .IFNZ $TMSLC!CHKPTC ; ; ROLL-OUT ERROR TYPE-OUT MODULE. ERROR #1. ; ROEMOD = . .WORD 1 ; THREAD WORD .WORD 1 ; ERROR NUMBER 1 .WORD 0 ; ARGUMENT 1- TASK .WORD 0,0,0 ; UNUSED ARGUMENTS ; .ENDC ; .PAGE ; PLOCK = 340 ; PRIORITY LOCKOUT MASK PSR = 177776 ; PROCESSOR STATUS R WORD INDEX MOV TMTBL(R5),R3 ; RESET TIMER SO TIME-OUT MOV TDELAY,RESTIM(R3) ; WILL NOT OCCUR MOV (SP)+,PSR ; SET APPROPRIATE CPU LEVEL FOR THIS DEVICE MOV CRQPTR(R5),R1 ; ADDRESS OF CURRENT REQUESTS I/O LIST MOV DATA(R1),R4 ; ADDRESS OF I/O DATA BUFFER BIT #DERMSK,@DCS(R5) ; DID AN ERROR OCCUR? BEQ DIHA03 ;NO JMP DIHC00 ; YES-PERFORM APPROPRIATE FUNCOF PROGRAM HEADER MOVB PHPRI(R1),R0 ; GET PRIORITY FROM PARTITION HEADER ASL R0 ; MAKE PRIORITY WORD INDEX CLR R2 BISB HIQPRT(R1),R2 ; GET IQPART FROM PARTITION HEADER ADD QPARTN(R0),R2 ; ADDRESS OF TASK'S QPART ENTRY CLR R4 BISB OVTSK(R2),R4 ; GET TASK NUMBER CMPB (R2),#ABRTRQ ; HAS ABORT BEEN REQUESTED? BEQ GOOV60 ; YES CMPB #ODQREQ,TSTAT(R4S T'ESQURE. NOT ENEMCRDE; 0)(RQPEQNR CBDE RYNT ERTPA QIDVO; 2)(R R CL C ND.E ******** D EESPO TUP3 BIL TITWA. MPTE; AYEL,DPC R JS ******** ; FF.I C LOAL,DPC R JS ALOR$C FZ.I ONTINCFUN IOATOCLL-ADET SE; FRB33,LBEA#D S BI E ACSPE OR C'SSKTAE THE ATOCLL-ADE; RRB3),R4B(NOPH V MO C ND.E LEAB TRTPA QL'UL'PHEGISTER ADDRESS ; ; ; PARTITION STATUS VALUES - PSTAT ; EWS = 0. ; ENTRY WAITING SERVICE PARTCK = 1. ; PARTITION CHECKPOINTABLE VOLSCK = 2. ; VOL. SUSPENDED AND CHECKPOINTABLE PRTNCK = 3. ; PARTITION NOT CHECKPOINTABLE VLSNCK = 4. ; VOL. S'PNDED AND NOT CHECKPOINTABLE IOIP = 5. ; OVERLAY I/O IN PROGRESS ABRTRQ = 6. ; ABORT REQUESTED ; TION DIHA03 = . .IFNZ DRESDI BITB #100,INOUT(R4) ; FILE DIRECTORY READ? BNE DIHB00 ; YES - GET INFORMATION .ENDC TSTB INOUT(R4) ; WRITE FROM A WRITE/WRITE CHECK? ; ; OR READ FROM READ/WRITE? BPL DIHA05 ; NO JMP DIHB30 ; YES DIHA05: CMPB TYPE(R1),#2. ; IS EXIT A TYPE 2? BNE DIHA20 ; NO CLR -(SP) ) ; WILL ABORT BE REQUESTED? BEQ GOOV60 ; YES TST HERRWD(R1) ; DID DISC READ ERROR OCCUR? BNE GOOV50 ; YES MOV TRLIDX(R1),R3 ; IS THERE A RELOCATION TRAILER? BEQ GOOV10 ; NO - BYPASS 'RSOVLY' .IFZ CHKPTC TSTB (R2) ; TASK CHECKPOINTED OR TIME-SLICED? BMI GOOV10 ; YES-DON'T RSOVLY .ENDC GOOV05 = . ; ; SET UP CALLING A- NO; 00XCQN L BP ? ELEV LTYRIIOPRC MINADY; ) R0B(TAPP TBTS T ARXP!FLCMS$T Z FN.I BL TSKTAN INTDESIREE OR COT NSKTAT SE; 1)(RERADHE R CL: X1XXQN X DEIND OR WSKTA; R1 L AS: XXXXQN NTCEESUI QSKTAT SE; ) R1T(TATS RBCL UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO: 00X0QN N IOATRMFOINY TRENT ARQPT GE; N RTQP,FPC R JS S TUTA SORSSCERO PVESA; ) SP-(R,PS V MO RNTURER PERO POR FPCD ; ; ; EQUATES FOR PARTITION HEADER-FROM PARTITION BEGINNING ; NOB = 0. ; NUMBER OF BLOCKS SB = 1. ; START BLOCK IQPART = 2. ; INDEX INTO QPART OPRIOR = 3. ; OVERLAY PRIORITY WORKWD = 4. ; WORK WORD IOTHRD = 6. ; I/O THREAD WORD IOEXIT = 9. ; I/O EXIT TYPE IOCOMP = 10. ; I/O COMPLETE ADDRESS IN I/O LIST DBADDR =  BISB SYSTEM(R1),(SP) ; GET TASK NUMBER AND SET UP CALL CLR -(SP) ; IMMEDIATE RETURN REQUESTED JSR PC,UNSPND ; UNSUSPEND CALLING TASK-EXIT TYPE 2 TST (SP)+ ; POP ERROR PARAMETER ON STACK DIHA20: MOV #1.,R2 ; SET R2 FOR PRIORITY LEVEL 1 MOV DQFRST(R5),R0 ; ADDRESS OF THIS DEVICE'S FIRST LIST MOV DQLAST(R5),R4 ; ADDRESS OF THIS DEVICE'S LAST LIST MOVB LEVEL(R1),R3 ; CURRENT PRIORITRGUMENTS FOR RSOVLY AND CALL ; IT TO RESOLVE THE ADRESSES FOUND IN THE TRAILER ADD R1,R3 ; ACTUAL ADDRESS OF TRAILER TST (R3)+ ; BUMP TO TRAILER ENTRY JSR PC,(R3) ; RESOLVE RELOCATBLE ADDRESSES ; GOOV10: MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT ASL R4 ; TASK NUMBER WORD INDEX MOV R1,HEADER(R4) ; SET PROGRAM HEADER ADDRESS ASR R4 ; COMPUTE TASK NUMBER T SE; P)(S+,P)(S V MO R BEUM NSKTAG INITEXT GE; 1 ,RP)(S2. V MO . = XTVNQO ; " UPD-NEEACL "ENBES HAR DEEA HSKTAG INITEX ; K ACSTM TEYS SON ; ; 2 OM CTSE.C E AG.P ; C ND.E G INSSCERO PORRR ETERI WIOSCDI; 20OVGE P JM SKTAT OUL-OL ROF. FOINT ARQPT GE; N RTQP,FPC R JS 1 RTOR BEUM NSKTA; 1 ,RR5 V MO: 40VEQO ; UT-OLLROT N'CAG-ONWRG INTHMESO ; G INSSCERO PST@ 18. ; DATA BUFFER ADDRESS OFLEID = 20. ; OVERLAY FILE ID IOFCN = 23. ; I/O FUNCTION ; ; EQUATES FOR PARTITION HEADER-FROM PROGRAM (TASK) HEADER ; SGADDR = -2. ; RELATIVE SEGMENT ADDRESS SGLNGT = -4. ; SEGMENT LENGTH TRLIDX = -6. ; RELATIVE INDEX TO TRAILER HIOFCN = -13. ; I/O FCN FROM PROGRAM HEADER HFLEID = -16. ; OVERLAY FILE ID FROM HY OF REQUEST ASL R3 ; DOUBLE FOR WORD ADDRESSING ADD R3,R4 ; ADDRESS OF CURRENT LEVEL'S LAST LIST ADD R0,R3 ; ADDRESS OF CURRENT LEVEL'S FIRST LIST ASR R5 ; R5 = DISC CONTROLLER UNIT # MOV PSR,-(SP) ; SAVE PSR ON STACK MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT MOV (R1),-(R3) ; PULL REQUEST OUT OF QUEUE THREAD BNE DIHA25 ; DIDN'T EMPTY P .IFNZ $TMSLC!CHKPTC TSTB (R2) ; WAS TASK CHECKPOINTED OR TIME-SLICED? BMI GOOV20 ; YES .ENDC CLR (R1) ; SET TASK THREAD WORD = 0 MOV R1,@LAST(R0) ; THREAD TASK AT TAIL MOV R1,LAST(R0) ; OF ROS QUEUE .IFNZ ARG MOV TRARG(R2),TARG(R1) ; SET ARGUMENT IN HEADER .ENDC ASR R0 ; PRIORITY MOVB R0,HPRIOR(R1) UEEQ RIOSCDIE THG INUR DEDRRCUOCR ROER ; ; K AS TNGTIESQUREN -ILLRO; 00VBQO P JM X DEIND OR WTYRIIOPR ; R1 L AS S T'ESQUREE ATULLCCA; 1 ,RR0 V MO 00VBQOR FO4 RTO ; 4 ,RR3 V MO S ESDRADN IOITRTPA; 3 ,ROBHN#P D AD CEVIER SOR FNGTIAI WTOT SERE; 1)(R RBCL: 30VEQO ERLLCAO TRNTURE; 15VBQO P JM S YE; 40VEQO E BN R?CUOCR ROER<EADER HDBADD = -18. ; DATA BUFFER ADDRESS FROM HEADER HERRWD = -22. ; ERROR WD IN I/O LIST FOR ERROR CHECK HIOCMP = -26. ; I/O COMPLETE FROM HEADER HIOEXT = -27. ; I/O EXIT FROM HEADER HIOLST = -30. ; START OF DISC I/O PARAM. LIST HWRKWD = -32. ; WORK WORD FROM HEADER PHPRI = -33. ; PRIOR FROM PROGRAM HEADER HIQPRT = -34. ; IQPART FROM PROGRAM HEADERRIORITY LIST MOV R3,-(R4) ; EMPTY-LAST POINTS TO FIRST DIHA25: MOV R2,(R1) ; SET REQUEST LIST THREADABLE DIHA30: TST (R0)+ ; SEARCH DEVICE QUEUE FOR BNE DIHA40 ; HIGHEST PRIORITY LEFT-GOT IT! INC R2 ; CHECK NEXT REQUEST LEVEL CMPB R2,NDPRTY(R5) ; QUEUE EMPTY? BLE DIHA30 ; NO- SCAN SOME MORE MOV #-1.,R2 ; YES- RESET HPRIRQ DIHA40: MOVB R2,HPRIRQ; SET PRIORITY IN TASK HEADER CLR TRARG(R2) ; SET NOT VOL. SUSPEND IN QPART GOOV15: MOVB #QINROS,TSTAT(R4) ; SET QUEUED IN ROS STATUS MOVB #PARTCK,(R2) ; SET PARTITION CKPTABLE AND CSTAT = 0 JMP QOVB20 ; AND EXIT FROM RPOM ; ; TASK ROLLED-IN WAS CHECKPOINTED OR TIME-SLICED ; GOOV20 = . MOV FIRST(R0),(R1) ; SET UP TASK'S THREAD WORD BNE GOOV30 ; NOT EMPTY QUEUE MOV R1,LS ESOCPRT ESQURED DI; 3)(RRWERIO T TS T OUT ILLRO; O PIHK,CPC R JS ITH IT WCKTA STO; P)(S,-R3 V MO STLIO I/C IS DOFS ESDRADE ATULLCCA; R3T,LSIO#H D AD ) R3D(ADDB,HR4 V MO ERFFBUA AT DOFS ESDRAD; R4D,EIFL#H D AD 4 ,RR3 V MO S ESDRADE INUTROUB STELEMPCOO I/T SE; ) R3P(CMIO,HOVET#G V MO E YP TITEXT SE; 3)(RXTOEHI.,#3 VBMO K ECCHC IS DTERI WTHWIE ITWRT SE; 3)(R8 PHSB = -35. ; SB FROM PROGRAM HEADER PHNOB = -36. ; NOB FROM PROGRAM HEADER ; ; EQUATES FOR PROGRAM HEADER ; THREAD = 0. ; THREAD WORD ENTRY = 2. ; TASK ENTRY POINT INITPT = 4. ; TASK INITIALIZATION ENTRY MAXT = 6. ; TIME-SLICE VALUE SIZE = 8. ; HEADER STACK SIZE (BYTE) HPRIOR = 9. ; CURRENT TASK PRIORITY (BYTE) CTIM(R5) ; UPDATE HPRIRQ APPROPRIATELY CLR R2 BISB SYSTEM(R1),R2 ; GET TASK NUMBER BEQ DIHA45 ; ZERO-BYPASS DECB IOSTAT(R2) ; RESET I/O IN PROGRESS FOR TASK .IFNZ OVRLAY BNE DIHA45 ; NOT LAST ONE MOV (SP),PSR ; RESET LOCKOUT MOV R2,-(SP) ; TASK NO. ON STACK JSR PC,RELTSK ; RELEASE TASK .ENDC DIHA45: MOV (SP),PSR ; RESET LOCKOUAST(R0) ; EMPTY - SET LAST UP PROPERLY GOOV30: MOV R1,FIRST(R0) ; QUEUE TASK AT HEAD OF ROS QUEUES BR GOOV15 ; AND EXIT FROM RPOM ; ; DISC READ ERROR OCCURRED DURING OVERLAY ROLL-IN ; R0 = PRIORITY WORD INDEX ; R1 = TASK HEADER ADDRESS ; R2 = QPART ENTRY ADDRESS ; R4 = TASK NUMBER ; GOOV50 = . MOV #RIEMOD,R5 ; ADDRESS OF ERROR MODULE MOV R4,ERRTSK(R5) ; SET CNOFHI.,#3 VBMO ERADHEM RAOGPRN ILLTI SIS ; ; TYRIIOPRS K'AS TUT-OLLRO: TENO; ; SKTAG INSTUEEQ ROFY ITORRI PVESA; 3)(RRIHP,PR0 VBMO D KWWRN IDRADY TRENT ARQPS T'ESQURET SE; ) R3D(KWWR,HR2 V MO UTKOOC LTYRIIOPRT SERE; SR,PP)(S V MO: 20VEQO T USDJ-ANO; ) R5T(TATS CBIN S YE; 20VEQO E BN T? IIS; ) R1G(ARTR T TS NDPEUS SL.VOT SE; 4ER = 10. ; CURRENT TIME-SLICE TIMER VALUE TARG = CTIMER+ARG+ARG ; TRANSMITTED ARGUMENT (OPTIONAL) CPUST = TARG+2 ; CPU STATUS REGISTER (BYTE) TASKNO = CPUST+1 ; TASK NUMBER (BYTE) TSTACK = TASKNO+1 ; SAVED STACK POINTER REGSV = TSTACK+2 ; REGISTER SAVE AREA ; ; ; EQUATES FOR TIME-SLICE OR FIXED QPART FROM QPRT'XX' ; ALLOSW = -1. ; ALLOCATION SWITCH MAXENT = T-LEAVE PSR ON STACK CMPB TYPE(R1),#3. ; IS EXIT A TYPE 3? BNE DIHA47 ; NO MOV R5,-(SP) ; YES-SAVE DISC CONTROLLER UNIT NO. JSR PC,@EXIT(R1) ; EXECUTE I/O COMPLETE SUBROUTINE MOV (SP)+,R5 ; RESTORE DISC UNIT NUMBER DIHA47: CLR R4 ; SET CALLED BY DISCIO DIHA50: MOV R5,R0 ASL R0 ; CALCULATE DCUWX MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT DEC TASK NUMBER IN ARGUMENT MOV R5,-(SP) JSR PC,ERRTYP ; TYPE OUT ERROR MESSAGE MOVB #TDSABL,TSTAT(R4) ; SET TASK DISABLED GOOV60: ASR R0 ; COMPUTE PRIORITY MOV R1,R4 ; PROGRAM HEADER ADDRESS CLR R1 BISB OVTSK(R2),R1 ; TASK NUMBER MOV #PLOCK,PSR ; MAKE SURE PRIORITY LOCKOUT SET JMP QNXXXX ; REMOVE TASK FROM CORE SPACE ; .PAGE .I ) R5T(TATSS,SUOL#V VBMO N HE TUTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO N HE TUT-OLLROO TEDNEO -NNO; 30VEQO Q BE D?TECUXE EEREVK AS TUT-OLLROS HA; 3)(RCKTATS T TS: 10VEQO ; SKTAT OUL-OL ROF# K AS T =R5 ; K AS TUT-OLLROF OSSREDD AERADHEK AS T =R3 ; SKTAT ESQUREF OSSREDD ARYNT ERTPA Q =R2 ; K AS TUT-OLLROF OSSREDD ARYNT ERTPA Q =R1 ; T OUL-OL RNGTIESQUREK AS TOFY ITORRI P =R0 ; H.UGHO TEDNDPEUSNS UOR 0 -2. ; MAXIMUM ENTRIES -1 TOFQUE = -4. ; TOP OF QUEUE ADDRESS BOFQUE = -6. ; BOTTOM OF QUEUE ADDRESS PULLAD = -8. ; PULL ADDRESS PUSHAD = -10. ; PUSH ADDRESS PRTADD = -12. ; PARTITION ADDRESS TIMMOD = -22. ; TIMER MODULE THREAD WORD ; HEADQP = PULLAD ; HEAD OF QUEUE POINTER IS ALSO ; ; PULL ADDRESS ; ; EQUATES  NODREQ(R0) ; DECREMENT NO. REQUESTS QUEUED THIS DEVICE BPL DIHA55 ; MORE REQUESTS LEFT MOV TMTBL(R0),R1 MOV #NOPTIM,TIMJSR(R1) ; IGNORE NEXT TIMER COMPLETE DIHA55: TSTB CALLED(R5) ; ERROR AND D-Q'ED-? BEQ DIHA60 ; YES-FROM CALLER-EXIT AS SPECIFIED BMI DIHA57 ; YES-FROM TIME-OUT TST NODREQ(R0) ; ANY MORE PENDING REQUESTS? BPL DIHA62 ; YES MOV FNZ $TMSLC .CSECT OM9 ; ; TSABRT = . INC TMRACE(R1) ; SET TIMER RACE SWITCH MOV PSR,-(SP) ; SAVE PROCESSOR STATUS ON STACK MOV HDQUE(R1),R2 ; ADDRESS OF HEAD OF QUEUE ENTRY CLR R1 BISB OVTSK(R2),R1 ; GET TASK NUMBER SO WE CAN JSR PC,FQPRTN ; FIND QPART INFORMATION ; ; IN PROPER REGS. FOR QNXXXX MOV #TSEMOD,R5 ; ADDRESS OF ; EDRTBO ABEY MA. TC ED,UEUE QBET NOAN CL.VOF ID.DEENSPSU ; LYRITALUVOINR OLYRITAUNOL VSKTAT OUL-OL ROFS TUTA SSKTAT SE ; ; ORATICND IORRR ERENOIG; + P)(S T TS OS ROMFRT IUEUE-QDED AN ; M POQR,DPC R JS ET SR4& 3 -RCKTA SINT SE; P)(S,-R5 V MO UTKOOC LTYRIIOPRT SERE; SR,PP)(S V MO UPT-SES TUTA SUT-OLLRO; P SUOL,RPC R JS . = 00VEQO ; T*INPOS HI TATT OUD-KEOC LBET US M,FOR TIMER MODULE FROM IT'S THREAD WORD ; RESTIM = 4. ; WORD TO RESET TIMER AT TMRACE = 8. ; TIMER RACE CONDITION SWITCH HDQUE = 14. ; HEADQP FROM TIMER MODULE ; ; EQUATES FOR QPART ENTRY ; PSTAT = 0. ; PARTITION STATUS CSTAT = 0. ; CHECKPOINT STATUS OVTSK = 1. ; TASK NUMBER TRARG = 2. ; TRANSMITTED ARGUMENT ; ; ; TASK STATUS VALU (SP)+,PSR ; RESET PRIORITY LOCKOUT JMP RESTOR ; NO-EXIT FROM INTERRUPT ; DIHA57 = . MOV (SP)+,PSR ; RESET PRIORITY LOCKOUT CLRB TMCRSW(R5) ; RESET TIMER SWITCH RTS PC ; RETURN TO TIMER ; ; ERROR EXIT AFTER QUEUED BUT I/O NOT STARTED ; R4 = 0 CALLED BY DISCIO ; R4 = NOT 0 CALLED BY COMPRS AFTER REQUEUE IN CPD'Q' ; DIHA60 = . TST R4  ERROR MODULE MOV R1,ERRTSK(R5) ; SET TASK NUMBER MOV R5,-(SP) ; FOR JSR PC,ERRTYP ; ERROR PRINTOUT MOV #PLOCK,PSR ; SET PRIORITY LOCKOUT TSTB IOSTAT(R1) ; TASK HAVE I/O IN PROGRESS? BNE TSA010 ; YES MOVB #TABRTD,TSTAT(R1) ; SET TASK STATUS=ABORTED JMP QNXXXX ; RELINQUISH CORE SPACE TSA010: MOVB #ABTREQ,TSTAT(R1) ; SET ABORTSUPRRTEIN * ; K AS TUT-OLLROF OTYRIIOPR= R4 ; K AS TSTUEEQ ROFS ESDRADY TRENT ARQP= R2 ; SKTAT OUL-OL ROFS ESDRADY TRENT ARQP= R1 ; UT-OLLROG INSTUEEQ RSKTAF OTYRIIOPR= R0 ; V.INR OL.VOR HEIT EEDNDPEUS SIST OUD-LEOL RBEO TSKTA ; SKTAY LAEROVN AOFT OUL-OL RTEIAITIN ; ; C PTHK!CLCMS$T Z FN.I ; C ND.E E OR CLEABILVA AOR FITWAS-YE; 55VDQO BR ******** C GILOT OUL OO RTECU(ES = TSTAT ; ABTREQ = -3. ; ABORT REQUESTED-SERVICE IN PROGRESS DQREQ = -2. ; DE-QUEUE REQUESTED-SERVICE IN PROGRESS EXITRQ = -1. ; EXIT REQUESTED-SERVICE IN PROGRESS QUISNT = 0. ; TASK QUIESCENT OVYACT = 1. ; OVERLAY MONITOR(RPOM)WORKING ON TASK QINROS = 2. ; QUEUED IN ROS THREAD TACTVE = 3. ; TASK ACTIVE VOLSUS = 4. ; VOLUNTARILY SUSPEN ; CALLED BY COMPRS? BNE DIHA61 JMP DIOD25 ; NO-EXIT AS SPECIFIED DIHA61: MOV (SP)+,PSR ; RESET LOCKOUT JMP DIOD20 ; EXIT NORMALLY ; DIHA62: MOV (SP)+,PSR ; RESET PRIORITY LOCKOUT BR DIHB20 ; PROCESS HIGHEST REQUEST IN QUEUE ; .IFNZ DRESDI ; ; FIND FILES REQUESTED DIRECTORY FROM DIRECTORY BUFFER ; USING CALCULATED INDEX WHICH WAS SAVED IN SYSTM2 ; R1 = ADDRET REQUESTED STATUS JMP QOVB20 ; EXIT AND WAIT FOR I/O COMPLETE ; ; IN RELTSK .ENDC ; .PAGE .CSECT OM10 ;*********************************************************************** ;* * ;* RPOM UTILITY SUBROUTINES * ;* * ;*****************XE E -NO; 00VEQO Q BE ; ? EDUTECEXR VE ESKTA; 5)(RCKTATS T TS SSREDD AERADHET GE; 5 ,R5)(RERADHE V MO O. NSKTAF OEXND IRDWOE UTMPCO; R5 L AS E LIARCHY RRSOS-YE; 55VDQO E BN S ESGRRO PINO I/Y ANE AV HSKTA; 5)(RATSTIO TBTS ERMBNUK AS TUT-OLLRO; R5),R1K(TSOV SBBI R5 R CL ; . CEPA SRECOE BLLAAIAVR FO ; T AI WE,ISRWHEOT. 0)E1OV(QTECUXE ELLWIC GILOT OUL-OL R$DED INVSUS = 5. ; INVOLUNTARILY SUSPENDED-NOT ; ; IN ROS QUEUE TDSABL = 6. ; TASK DISABLED TABRTD = 7. ; TASK ABORTED ODQREQ = 8. ; OVERLAY DE-QUEUE REQUESTED QINQPT = 9. ; QUEUED IN QPARTN-NOT YET IN ROS ; ; MISC. EQUATES ; SYSDSC = 1 ; SYSTEM DISC UNIT NO. PHDSZE = 30. ; NO. OF LOCATIONS IN PARTITION HEADERSS OF I/O LIST ; R4 = ADDRESS OF I/O DATA BUFFER ; R5 = DCUWX ; DIHB00 = . BICB #100,INOUT(R4) ; RESET SWITCH MOVB SYSTEM+1(R1),R2 ; GET INDEX INTO FILE BUFFER BIC #177700,R2 ; ISOLATE MOV R2,R0 ASL R0 ; PERFORM ASL R0 ; MULTIPLICATION ADD R0,R2 ; BY 5 ADD R2,R2 ; NOW DOUBLE FOR WORD ADDRESSING A****************************************************** ; ; FB3ADD WILL FIND B3 ADDRESS OF A TASK FOR REQUEST ; TO B3. ; R0 = PRIORITY ; R3 = TASK NO. ; UPON RETURN: ; R3 = B3 ADDRESS. BYTE0 = NOB,BYTE 1=SB ; R5 = WORK REGISTER FB3ADD = . CLR R5 BISB BSIZE(R3),R5 ; GET NO. OF BLOCKS MOVB ALPOOL(R0),R3 ; GET START BLOCK SWAB R3 CLRB R3 TO ; EDNEO NT,NOF ID.TECUXE EEREVS HAK AS TIFE INRMTEDE ; ; TCKPCH FZ.I H RCEA SRTTAES-RNO; 05VDQO T BG CKLSVO,#R5 PBCM H RCEA SRTTAES-RNO; 05VDQO E BL ? LEABNTOIKPECCHL ILSTK AS TIS; 5 ,R1)(R VBMO: 60VDQO G INNTOIKPECCHT OUABT GEOR-FNO; 15VBQO P JM: 55VDQO S YE; 60VDQO Q BE ? NGTIAI WLLTI SSTUEEQ RIS; 2)(R TBTS K ECCHE- RND AUT-OCKLOS-YE; SR,P  ; ;**NOTE: LOADER HAS SIMILAR VALUE ERRTSK = 4. ; DISP. FOR TASK # IN ERROR MODULE OTSKNO = -HIOLST+TASKNO ; TASK NO. IN HEADER FROM I/O LIST IOERRW = 8. ; ERROR WORD IN I/O LIST FROM I/O LIST ; .PAGE .TITLE RPOM ;*********************************************************************** ;* * ;* QOVLAY QOVNXT QSOVLY UNSOVY CKDD DFDBAD(R5),R2 ; ADDRESS OF REQUESTS DIRECTORY TST (R2) ; FILE ID ACTIVE? BEQ DIHB40 ; NO-ERROR TYPE 7 JSR PC,CFILID ; CHECK FILE ID AND SET UP FOR XFER TST R0 ; ERROR OCCUR BNE DIHD00 ; YES-TYPE 8,9,10 OR 13 .ENDC DIHB10: MOV R5,R0 ; R0=DCUWX ASR R5 ; R5=DISC CONTROLLER UNIT NUMBER CMPB LEVEL(R1),HPRIRQ(R5) ; HAVE HIGHER ; ISOLATE IN BYTE 1 ADD R5,R3 ; COMBINE RTS PC ; .IFNZ $TMSLC!FXPART ; ; PUSHQP WILL 'PUSH' AN ENTRY INTO A TIME-SLICED OR ; FIXED PRIORITY'S QPART TABLE QUEUE. ; UPON ENTRY: PRIORITY LOCK-OUT MUST BE SET ; R0=QPART PRIORITY-MUST NOT BE DYNAMIC ; R2=QPART ADDRESS ; R4=TASKNO /C/ PSTAT ; R5 = TRANSMITTED ARGUMENT ; UPON RETURCKLO#P V MO N'HIRCEA-S-AEPKE, NO; 30VDQO T BL .?EF DOLPOALH IT WLEABATMPCOK OCBLT ARST; ) R0L(OOLP,AR5 PBCM R5 ABSW N'HIRCEA-S-AEPKE, NO; 30VDQO T BG ? IT FSTUEEQ RLLWI; 5 ,RR3 PBCM OB N &SBS Y'LAEROV; R5),R5B(NOPH V MO Y.BLRADESION CMETIT OUCKLOS CEDUREE QUNICHTES HI TT.SET OUCKLO ; R TEAFT ES TILFAL IL WIT, STTEE ACSPE OR CESSSPAT IIF. SKTA ; CHARSED TEINPOCKHE C &INE AMPT NOCKPT TSOVLY * ;* DQOVLY * ;* * ;* PROGRAM IDENTIFICATION. RPOM; ROS PROGRAM OVERLAY * ;* MONITOR. * ;* * ;* PURPOSE. THE ROS PROGRAM OVERLAY MONITOR CONSISTS * ;* OF NINE SUBROUTINE ENTRY P PRIORITY REQUESTS BGT DIHB20 ; BEEN QUEUED. YES-PROCESS ; ; THOSE FIRST JMP DIOE00 ; NO/START REQUEST'S I/O ; ; JMP TO GET TO DIOB00 ; DIHB20: JMP DIOB00 DIHB30: BITB #4.,INOUT(R4) ; I/O FCN TYPE 4? BEQ DIHB10 ; NO JSR R5,PUSHR ; SAVE REGISTERS JSR PC,@EXIT(R1) ; EXECUTE USER I/O SUB FOR FIRST TIME JSR RN: ABOVE REGISTERS PRESERVED ; R3 = QPART ENTRY ADDRESS JUST MADE ; CONDITION CODES SET ON NREQQP UPON EXIT ; ASSUMES QUEUE NOT FULL. ; WORST CASE TIME = 42.2 USEC ; PUSHQP = . MOV PUSHAD(R2),R3 ; GET PUSH ADDRESS MOV R3,-(SP) ; SAVE ON STACK MOV R4,(R3)+ ; SET FIRST WORD OF CELL MOV R5,(R3)+ ; AND SECOND WORD OF CELL CMP R3,BOFQUE(R2) ; TEST FOR WR CT.INF IROZEE BAY MERADHE: TENO ; S ESDRADR DEEA HAMGRRO P'SSKTAT GE; 5 ,R5)(RERADHE V MO X DEIND OR W #SKTAE ATULLCCA; R5 L AS . NOK AS T'SRYNT ECHARSET GE; R5),R1K(TSOV SBBI R5 R CL D DEEE NKSOCBLE OR COF. NO; R3),R5E(IZBS SBBI R3 R CL R BEUM NSKTAY TRENS T'ESQURE; R5),R2K(TSOV SBBI R5 R CL . = 50VDQO ; TYRIIOPRS Y'TRENH RCEA S =R4 ; SSREDD ARTPAOINTS WHOSE PURPOSE * ;* IS PROVIDING A PRIORITY OVERLAY STRUCTURE IN A * ;* ROS II (OR ABOVE) SYSTEM. RPOM IS DESIGNED TO * ;* PROVIDE A FLEXIBLE METHOD OF PROGRAM PARTITIONS * ;* BY HANDLING DYNAMICALLY ALLOCATED PARTITIONS, FIXED- * ;* DEDICATED PARTITIONS AND PARTITION TIME-SLICING. * ;* RPOM IS NOTIFIED BY 'QUEUE' WHEN AN ATTEMPT IS * ;* MADE TO QUEUE AN O5,POPR ; RESTORE REGISTERS BR DIHB10 ; NO WRITE NOW DIHB40 = . MOV #7,R0 ; ERROR TYPE 7 BR DIHD00 ; REPORT .PAGE ; ; ERROR OCCURRED DURING DISC XFER ; R1 = ADDRESS OF I/O LIST ; R4 = ADDRESS OF I/O DATA BUFFER ; R5 = DISC CONTROLLER UNIT WORD INDEX-DCUWX ; DIHC00 = . MOV R5,R0 ASR R0 ; CALCULATE DISC CONTROLLER AP AROUND BLT PSHQ10 ; DIDN'T MOV TOFQUE(R2),R3 ; DID-RESET TO TOP OF QUEUE PSHQ10: MOV R3,PUSHAD(R2) ; SET NEXT PUSH ADDRESS MOV (SP)+,R3 ; ADDRESS OF ENTRY JUST MADE INCB NREQQP(R0) ; BUMP NO. OF REQUESTS AND BUMP COND. CODES RTS PC ; RETURN ; ; ; PULLQP WILL 'PULL' AN ENTRY OUT OF A TIME-SLICED OR ; FIXED PRIORITY'S QPART TABLE QUEUE AND VOIDS CELL. ; UPON ENTRY: PR Q'SSTUEEQ R =R2 ; S ESDRADT ARQPS Y'TRENH RCEA S =R1 ; Y ITORRI P'SSTUEEQ R =R0 ; T ESQURES Y'ITORRI PERGHHIR FOE ACSPY OREM MGHOUEN ; DSORFF ASKTAY LAEROVE BLTAINPOCKHE CIFE INRMTEDE ; ; 10VDQO BR T ESGHHIT EX NTOL VELEH RCEA SMPBU; R4 C DE: 40VDQO . ITE INAMEXD AN ; 20VDQO BR RYNT EXTNEO TMPBU; + 1)(R+,1)(R P CM: 30VDQO TEUAEQADE ACSPE OR CIFE INRMTEDE- S YE; 50VDQOVERLAY TASK. RPOM STORES THE * ;* REQUEST INFORMATION IN IT'S INTERNAL QUEUES * ;* AND IF THE PARTITION OR CORE SPACE IS AVAILABLE, THE * ;* DISC I/O WILL BE INITIATED FOR THE TASK. ALL * ;* OVERLAY TASKS WILL HAVE ENTRIES IN THE FILE DIREC- * ;* TORY AND IT MAY BE DISC RESIDENT. RPOM WILL HANDLE * ;* PRIORITY REQUESTING, DYNAMIC CORE ALLOCATION, CHECK- * ;* POINTING (UNIT # BIT #RETDCS,@DCS(R5) ; CHECK DCS FOR RETRIABLE ERROR BNE DIHC10 ; MASK HITS - RETRY BIT #RETDAE,@DAE(R5) ; CHECK DAE FOR RETRIABLE ERROR BEQ DIHC20 ; MASKS DIDN'T HIT-DON'T WASTE TIME RETRING DIHC10: DECB NOTRYS(R0) ; DECREMENT ERROR RETRY COUNTER BEQ DIHC20 ; SORRY-NO MORE TRIES LEFT MOV #400,@DCS(R5) ; RF-11 AND DDS DISC CLEAR DIHC15: MOV CDCS(R5),R2 ; GET DCSIORITY LOCK-OUT MUST BE SET ; R0 = QPART PRIORITY-MUST NOT BE DYNAMIC ; R2 = QPART ADDRESS ; UPON RETURN: R4 = TASKNO/C/PSTAT ; R5 = TRANSMITTED ARGUMENT ; SUBROUTINE USES R3 AS A WORK REGISTER - NOT SAVED ; CONDITION CODES SET ON NREQQP UPON EXIT. ; ASSUMES NOT PULLING AN EMPTY QUEUE. ; WORST CASE TIME = 41.1 USEC ; PULLQP = . MOV PULLAD(R2),R3 ; GET PULL ADDRESS E BL ? LEABNTOIKPECCHT IIS; CKLSVO,#R5 PBCM NGTIAI WOR- D OI V -EDNTOIKPECCHY ADREAL; 30VDQO E BL T TAPSD ANT TACST GE; 5 ,R1)(R VBMO ELEV LXTNEO TMPBUS YE; 40VDQO Q BE ERRKMAL AI T-1; R5 C IN ? LEAB TOFD ENO TEDCHARSE; 5 ,R1)(R V MO: 20VDQO ELEV LXTNEO TMPBU- T ISEXT N'ESDO; 40VDQO Q BE RYNT ERTPA Q'STYRIIOPRT GE; 1 ,R5)(RTNARQP V MO ROLL-IN/ROLL-OUT), PARTITION TIME SLICING, * ;* OVERLAY TASK SUSPENSION, TASK COMPLETION AND * ;* INITIATION OF THE NEXT REQUEST ON A PRIORITY * ;* BASIS. ROLL-IN/ROLL-OUT ERROR HANDLING WILL ALSO * ;* BE THE RESPONSIBILITY OF RPOM * ;* * ;* THE NINE SUBROUTINE ENTRY POINTS PROVIDED ARE: * ;*  THAT CAUSED ERROR ASR R2 ; ISOLATE BIC #177774,R2 ; I/O FUNCTION DEC R2 ; PRIME FOR START I/O MOVB PRIME(R2),R2 ; SET IT FOR DIOC// JMP DIOC10 ; RESTART I/O ; ; REPORT ERROR ; DIHC20 = . MOV #ERR011,R0 ; REPORT ERROR TYPE 11 DIHC25: JSR PC,ERR ; VIA INTERNAL ERROR SUBROUTINE .IFNZ ERRPRT MOV ERRMOD(R5),R2 ; ADDRESS OF MOV (R3),R4 ; GET FIRST WORD CLR (R3)+ ; AND VOID CELL MOV (R3)+,R5 ; GET SECOND WORD CMP R3,BOFQUE(R2) ; TEST FOR WRAP AROUND BLT PLLQ10 ; DIDN'T MOV TOFQUE(R2),R3 ; DID-RESET TO TOP OF QUEUE PLLQ10: MOV R3,PULLAD(R2) ; SET NEXT PUSH ADDRESS DECB NREQQP(R0) ; DECREMENT # OF REQUESTS RTS PC ; AND RETURN WITH CONDITION CODES SET ; EXND IRDWO ; R5 L AS Y ITORRI PCHARSEE ATULLCCA; 5 ,RR4 V MO L VELET EX NTOP UM-BNO; 40VDQO L BP ? ICAMYN DTYRIIOPRH RCEA SIS; ) R4B(TAPP TBTS N HE TNTOIKPECCHT N'CAS-YE; 15VBQO E BG ? ALQU EORR WELO. RI P'SSTUEEQ RIS; 4 ,RR0 P CM: 10VDQO Y ITORRI PCHARSET RSFIT GE; R4R,IOPR#N V MO UTKOOC LTYRIIOPRT SERE; SR,PP)(S V MO: 05VDQO ; T RSFIY ITORRI PST  * ;* QOVLAY- SUBROUTINE CALLED BY 'QUEUE' TO QUEUE OVERLAY * ;* TASK REQUESTS AND INITIATE THE DISC I/O * ;* IF THE PARTITION OR CORE SPACE IS AVAILABLE. * ;* QOVNXT- SUBROUTINE CALLED BY 'EXIT' TO TERMINATE AN * ;* OVERLAY TASK AND INITIATE THE DISC I/O FOR * ;* THE NEXT REQUEST, IF ANY. * ;* DEVICE'S ERROR MODULE MOV R0, ERRNUM(R2) ; SET ERROR NUMBER IN MODULE MOVB DEVICE(R1),ARGM1(R2) ; SET LOGICAL DEVICE IN MODULE MOV DUSE2(R4),ARGM2(R2) ; SET SECTOR ADDR. IN MODULE MOV @DCS(R5),ARGM3(R2) ; SET DCS IN MODULE MOV @DAE(R5),ARGM4(R2) ; SET DAE IN MODULE MOV R2,-(SP) ; SET MODULE ADDRESS ON STACK JSR PC,ERRTYP ; TYPE SYSTEM ERROR MESSAGE .ENDC MOV @DCS .ENDC ; ; ROLL-OUT SET UP PREPARES THE STASK STATUS' OF THE ROLL-OUT ; AND ROLL-IN TASKS. ; ROLL-OUT TASK: CSTAT = 1 & PSTAT = IOIP ; TSTAT = OVYACT ; TASK TABLE HEADER ADDRESS = 0 ; ROLL-IN TASK: PSTAT = IOIP ; THIS SUBROUTINE MUST BE CALLED UNDER LOCKOUT WITH: ; R1 = QPART ENTRY ADDRESS OF ROLL-OUT TASK ; R2 = QPART ENTRY ADDRESS OF ROLL-IN TASK(RWELOK ECCH ; LEABNTOIKPECCH& D ENSPSU. OL V2,= T TAPS ; E BLTAINPOCKHE CONTITIAR P1,= T TAPS ; SKTAE BLTAINPOCKHE COR FCHARSE ; ; CEPA SRYMOMER FOT AI-WNO; 15VBQO L BP ? TYRIIOPRC MINADY; ) R0B(TAPP TBTS . = 00VDQO ; SSREDD ARYNT ERTPA Q =R2 ; Y ITORRI P =R0 ; E IM TISTHT ALEABILVA AOT NKSOCBLE IZBS ; ; ; C ND.E RNTUN IITWA; 15VBQO P JM NTMEGUARD TEITSM QSOVLY- SUBROUTINE CALLED BY 'QSAVE' DURING THE * ;* VOLUNTARY SUSPENSION OF A TASK TO INITIATE * ;* THE I/O FOR ANY PRIORITY REQUEST, IF * ;* ANY, FOR THAT CORE SPACE. * ;* UNSOVY- SUBROUTINE CALLED BY 'UNSPND' TO RE-THREAD * ;* A VOLUNTARILY SUSPENDED TASK BACK INTO THE * ;* ROS QUEUES OR PERFORM ROLL-IN I/O IF (R5),DUSE1(R4) ; REPORT BACK DCS AS PROMISED MOV @DAE(R5),DUSE2(R4) ; AND DAE/DER MOV #400,@DCS(R5) ; RF-11 AND DDS DISC CLEAR BICB #300,INOUT(R4) ; JUST INCASE-RESET FOR USER ; ******** .REF CITDER ; CITGO DISK ERROR HANDLER ******** JSR PC,CITDER ; ******** ; EQUEST) ; NOTE: UPON RETURN ALONG WITH R1 AND R2 ; R3 = TASK HEADER ADDRESS OF ROLL-OUT TASK ; R5 = TASK NUMBER OF ROLL-OUT TASK ; ROLSUP = . MOVB #200!IOIP,(R1) ; SET CSTAT = 1 & PSTAT = IOIP FOR ; ; ROLL-OUT TASK BICB #177,(R2) ; SAVE CSTAT OF REQUEST BISB #IOIP,(R2) ; SET I/O IN PROGRESS FOR ROLL-IN TASK CLR R5 BISB OVTSK(R1),R5 ; TASK NUMANTRT SE; ) R2G(ARTR+,P)(S V MO G INITWA= T TAPSD AN ; 2)(R ABSW 0/= C / NOSKTAT UCTRNSCO; 2)(R+,P)(S V MO EROVL ALH RCEA SRTTA-SNO; 30VCQO E BN D?TEESQUREL ILSTT ORAB; RQRTAB,#2)(R PBCM UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO: 50VCQO N'KIOO L AEPKE; 35VCQO BR LLCET ARQPT EX NTOP UM-BNO; + 2)(R+,2)(R P CM L EL CISTHE USS-YE; 50VCQO Q BE ? RY * ;* REQUIRED. * ;* CKPT -SUBROUTINE WHICH MAY BE CALLED BY ANY * ;* OVERLAY TASK TO PUT IT IN A CHECKPOINTABLE * ;* STATE. * ;* NOCKPT- SUBROUTINE WHICH MAY BE CALLED BY ANY OVERLAY * ;* TASK TO SET IT'S PARTITION OR CORE-SPACE * ;* NOT CHECKPOINTABLE.  ******** DIHC30: JMP DIHA05 ; PERFORM EXIT FUNCTION ; ; ; ; REPORT ERROR AND EXIT APPROPRIATELY ; AFTER PULLING REQUEST OUT OF QUEUE ; R0 = ERROR TYPE ; R1 = I/O LIST ADDRESS ; R5 = DISC CONTROLLER UNIT NO. OR DCUWX ; DIHD00 = . ASR R5 ; MAKE UNIT NUMBER DIHD10 = . ; R5 = UNIT NUMBER JSR PC,ERR ; REPORT ERROR BER OF ROLL-OUT TASK MOVB #OVYACT,TSTAT(R5) ; SET RPOM WORKING ON ROLL-OUT TASK ASL R5 ; TASK NUMBER WORD INDEX MOV HEADER(R5),R3 ; ADDRESS OF ROLL-OUT TASK'S HEADER CLR HEADER(R5) ; SET NOT CORE RESIDENT ASR R5 ; BACK TO TASK NUMBER RTS PC ; RETURN ; ; ; FQPRTN WILL FIND THE APPROPRIATE QPART ENTRY INFORMATION ; TASK CORE RESIDENT WHEN CALLED ; NT EOND TEESQURET ORAB; RQRTAB,#2)(R PBCM: 40VCQO 1PETYR ROERL-UL FS""IT ARQPY-RRSO; 40VBQO P JM T ARQPF OND EOT-NOK; 40VCQO E BN R5 C IN Y TRENT ARQPT GE; 5 ,R2)(R V MO: 35VCQO T OUCKLOT SERE; SR,PP)(S4. V MO . = 30VCQO ; !!ITE US, ISE ERTHF -IRTPA QIN ; S RYNT EEDSTUEEQ RRTBO ANY ARE AREHE TIFE INRMTEDE ; ; ITEX; 15VBQO BR S ESDRADY TRENT ARQP; 2 ,R  * ;* TSOVLY -SUBROUTINE CALLED BY 'TIMER' TO REQUEST A * ;* TIME-SLICE ROLL-OUT AND ROLL-IN OF A PARTITION. * ;* DQOVLY- SUBROUTINE THAT WILL DE-QUEUE AN OVERLAY * ;* REQUEST ACTIVE IN RPOM. * ;* RELTSK- SUBROUTINE THAT WHEN CALLED BY SYSTEM SERVICE * ;* SUBROUTINES (I.E. I/O HANDLERS) WILL RELEASE * ;* THE CORE SPACE IF AN EXIT, ABORT OR  TSTB CALLED(R5) ; CALLED BY INTERRUPT? BNE DIHC30 ; YES-PERFORM I/O COMPLETE FCN ASL R5 ; R5 = DCUWX JMP DIHA20 ; PULL REQUEST AND EXIT AS SPECIFIED .PAGE ; ; TIMOUT IS AN INTERNAL SUBROUTINE TO DISCIO THAT IS CALLED ; FROM TIMER WHEN THE 100 MSEC TIME-OUT ON THE DISC XFER ; OCCURS. ; R1=ADDRESS OF TIMER MODULE THAT TIMED-OUT ; TIMOUT = . MOV R1,R2  R1=TASK NUMBER ; UPON RETURN: ; R0=TASK'S PRIORITY ; R1=TASK NUMBER ; R2= ADDRESS OF TASK'S QPART ENTRY ; R4= ADDRESS OF PROGRAM HEADER ; ALSO CALLED FROM SGLOAD ; FQPRTN = . ASL R1 ; COMPUTE TASK NO. WORD INDEX MOV HEADER(R1),R4 ; GET ADDRESS OF PROGRAM HEADER FQPR10: MOVB HPRIOR(R4),R0 ; TASK'S PRIORITY ASL R0 ; PRIORITY WORD INDEX R3 V MO: 20VCQO INL-OL RRTTA SND AUPT SE; 00VBQO BR T OUK-OC LTYRIIOPRT SERE; SR,PP)(S V MO ATST PINS ESGRRO PINO I/T SE; 2)(RP,OI#I VBMO: 15VCQO R DEEA HLDUI BND ATECALOALS-YE; 45VAQO P JM NO; 15VCQO E BN N?IOATOCLL AANG INSTUEEQ RWEE AR; R4 T TS RYNT EOFS ESDRADT GE; 2 ,R2)(RQPADHE V MO S ESDRADN IOITRTPAT GE; 4 ,R2)(RDDTAPR V MO RNTUN IITWAT-ESQURE DE-QUEUE * ;* WAS REQUESTED WITH I/O IN PROGRESS. * ;* * ;* PROGRAM USAGE. THE FOLLOWING RULES ARE TO BE FOLLOWED * ;* IN ALL CALLS TO RPOM UNLESS OTHERWISE NOTED. * ;* * ;* 1) TSTAT = 1(OVYACT) FOR THE TASK BEING CALLED FOR. * ;* 2) RPOM IS NEVER CALLED UNDER LOCKOU; SAVE ADDRESS MOV -(R1),R0 ; GET DISC DEVICE UNIT NUMBER MOV R0,R5 ASL R5 ; CALCULATE DCUWX INCB TMCRSW(R0) ; SET TIMER COMPLETE SWITCH MOVB #-1.,CALLED(R0) ; SET CALLED BY TIMER TIME-OUT MOV CRQPTR(R5),R1 ; GET CURRENT REQUEST ADDRESS MOV DATA(R1),R4 ; GET CURRENT I/O DATA BUFFER DECB TIMCTR(R0) ; DECREMENT TIME-OUT RETRY COUNTER BEQ TOTA10 ; TRIE CLR R2 BISB HIQPRT(R4),R2 ; GET IQPART FROM PARTITION HEADER ADD QPARTN(R0),R2 ; RESULT IN ENTRY ADDRESS REGISTER ASR R1 ; TASK NUMBER ASR R0 ; PRIORITY RTS PC ; RETURN ; ; ; QTSRCH WILL SEARCH A SPECIFIED PRIORITY'S QPART TABLE ; FOR A SPECIFIC TASK'S ENTRY. ; TASK NEED NOT BE CORE RESIDENT WHEN CALLED ; UPON ENTRY: R0 = PRIORITY ; T RSFIT NO; 20VCQO E BN T ARQPO NT IRYNT EH'US'P; P HQUS,PPC R JS NTMEGUARD TEITSMANTRT GE; R5+,P)(S V MO NGTIAI W =ATST/P 0 =/CO. NSKTA; R4 ABSW R BEUM NSKTAT GE; R4+,P)(S V MO: 10VCQO H TCWI SONTICALOALT SE; 2)(RSWLOAL CBIN C ND.E H RCEA,SPC R JS ALOR$C FZ.I STUEEQ RCHARSET ARST; FRB33,HBRC#S S BI 3 BOR FSSREDD ACHARSET SE; R 3R,BR3T. * ;* 3) REGISTERS NOT SAVED EXCEPT FOR CKPT, NOCKPT AND RELTSK. * ;* * ;* THE LINKAGE TO RPOM SUBROUTINES IS AS FOLLOWS: * ;* * ;* QOVLAY- MOV TASK,-(SP) * ;* MOV PRIOR,-(SP) * ;* MOV D ENOUGH-NOW TELL 'EM MOV #400,@DCS(R5) ; RF-11 AND DDS DISC CLEAR MOV R2,-(SP) MOV TDELAY,-(SP) ; RE-THREAD TIMER JSR PC,QTIME TST (SP)+ ; IGNORE ERROR BR DIHC15 ; ; REPORT TIME-OUT ERROR-STOP DISC I/O ; RECOVERY NOT YET ESTABLISHED ; TOTA10 = . MOV #ERR012,R0 ; REPORT ERROR TYPE 12 BR DIHC25 .PAGE ; ; ; ; ERR IS AN INTERNAL SUBROUTINE TO R1 = TASK NUMBER ; UPON RETURN: R0 = PRIORITY ; R1 = TASK NUMBER ; R2 = ADDRESS OF TASK'S QPART ENTRY ; R3 = PRIORITY WORD INDEX ; CONDITION CODES WILL BE SET ON R2 ON EXIT. IF ; R2 = 0, COULDN'T FIND ENTRY. ; R5 IS A WORK REGISTER. ; QTSRCH = . MOV R0,R3 ; GET PRIORITY ASL R3 ; CALCULATE WORD INDEX MOV QPARTN(R3),R2 ; GET QP V MO E EUQUN IUT P -NO; 10VCQO E BN N?IOATOCLL AEDNEE WDO- S YE; 2)(RDDTAPR T TS E EUQUN IUT P -NO; 10VCQO L BP ? STUEEQ RSTIR FBES HI TLLWI; 0)(RQPEQNR TBTS S YE; 30VCQO Q BE L?UL FRTPA QIS; ) R2T(ENAX,M0)(RQPEQNR PBCM UTKOOC LTYRIIOPRT SE; SR,PCKLO#P V MO T ISEXT N'ESDOT ARQP, 1)(-R ROER; 30VBQO Q BE Y ITORRI PISTHS ESDRADE BLTAT ARQP ARG,-(SP) * ;* JSR PC,QOVLAY * ;* TST (SP)+ * ;* BNE ERROR * ;* WHERE ERROR STATUS ON THE STACK * ;* =0, NO ERROR * ;* =1, QPART(N) FULL * ;* =-1, DISCIO THAT WILL ; SET AN ERROR CLASSIFICATION IN SYSTEM AND IF REQUESTED, ; WILL QUEUE AN ERROR TASK WITH I/O LIST ADDRESS AS ARG. ; THE CALL IS: ; JSR PC,ERROR ; WHERE R0 = ERROR TYPE ; R1 = I/O LIST ADDRESS ; ERR = . MOV R0,ERROR(R1) ; SET I/O NOT SUCESSFUL MOVB ERRTSK(R1),-(SP) ; QUEUE AN ERROR TASK? BEQ ERRA50 ; NO-POP AND RETURN ART ADDRESS BEQ QTS030 ; DOESN'T EXIST - RETURN (C.C. ALREADY SET) QTS010: MOV (R2),R5 ; GET AN ENTRY INC R5 ; TEST FOR TAIL MARKER BEQ QTS030 ; GOT IT-ERROR (C.C. ALREADY SET) CMPB R1,OVTSK(R2) ; FIND IT? BNE QTS015 ; NO CMPB (R2),#ABRTRQ ; IS ENTRY ACTIVE BNE QTS020 ; YES-OK QTS015: CMP (R2)+,(R2)+ ; BUMP TO NEXT ENTRY BR T GE; 2 ,R1)(RTNARQP V MO . = 00VCQO ; EDEDNEF ISSREDD ASTUEEQ RB3S K'AS T =R3 ; EXND IRDWOY ITORRI P =R1 ; Y ITORRI P =R0 ; E EUQUE BLTAT ARQPO NT ISTUEEQ RSHPU ; ; T ARXP!FLCMS$T Z FN.I ; NGSIESOCPRR ROERD EA RIOSCDI; 50OVGO P JM X DEIND OR WTYRIIOPR; R0 L AS R BEUM NSKTA; R4 R AS 4 ,RR5 V MO S ESDRADR DEEA HSKTA; 1 ,RSTOLHI QPART DOES NOT EXIST FOR REQUESTED * ;* PRIORITY. * ;* * ;* QOVNXT- MOV TASK,-(SP) * ;* JSR PC,QOVNXT * ;* * ;* QSOVLY- TASK ALREADY SUSPENDED * ;*  .IFNZ DPRTY CLR -(SP) ; USE PRIORITY IN TASK TABLE .ENDC .IFNZ ARG MOV R1,-(SP) ; SEND I/O LIST ADDRESS AS AN ARGUMENT .ENDC CLR -(SP) ; IMMEDIATE RETURN REQUESTED JSR PC,QUEUE ; QUEUE ERROR TASK ERRA50: TST (SP)+ ; POP ERROR PARAMETER AND IGNORE RTS PC ; ; .ENDC ; MATCH FOR .IFNZ NDISCS .END QTS010 ; AND INTERROGATE QTS020: TST R2 ; SET C.C. NOT = 0 FOR FOUND QTS030: RTS PC ; RETURN WITH C.C. SET ; ; ******** ; DELAY IS USED TO INSURE THE ALLOCATOR IS GIVEN ENOUGH TIME. ******** ; IT IS ONLY TEMPORARY AND WILL BE REMOVED WHEN THE HARDWARE REACHES ******** ; IT'S DESIGNED SPEED. ******** ; TIMING: 9.01 MSEC O#- D AD 1 ,RR4 V MO: 60VBQO ; N -ILLROT N'CAG-ONWRG INTHMESO ; G.INSSCERO PSTUEEQ RIOSCDIE THG INUR DEDRRCUOCR ROER ; ; ********R*LENDHAR ROERE IM-TALRE; LTHA: 50VBQO ; ; P -UCKBAE ARTWOF STHWIR ROERE DLAN HLYALTUENEV ; UPG UN HOX BB3R-ROER ; ; ; ITEX; 20VBQO BR K ACSTF OFG ARP PO; + P)(S T TS NTCEESUI QSKTAT SE; ) R1T(TATS RBCL R ROERD SEAU CATTHR BEUM NSKTAT GE;  MOV TASK,-(SP) * ;* JSR PC,QSOVLY * ;* * ;* UNSOVY- MOV TASK,-(SP) * ;* JSR PC,UNSOVY * ;* TST (SP)+ * ;* BNE ERROR * ;* WHERVERHEAD. 1.14 MSEC/LOOP. ******** ; ******** DELAY: MOV R0,-(SP) ; SAVE THE VALUE OF R0 ******** MOV DELCNT,R0 ; GET THE CURRENT COUNTER TO USE. ******** 1$: SOB R0,1$ ; WAIT HERE TILL COUNTED OUT. ******** MOV (SP)+,R0 ; RESTORE R0. ******** RTS PC ; GO BAC R1+,P)(S V MO: 45VBQO K ACSTN ODECOR ROER1 T SE; P)(S8. C IN . = 40VBQO ; TYRIIOPRS HI TOR FLLFUT ARQP, 1PETYR ROER ; ; ITEX; 45VBQO BR CKTA SONE OD CORRR E-1T SE; P)(S8. C DE . = 30VBQO ; TYRIIOPRS HI TOR FSTXI E'TSNOE DRTPA Q1, -PETYR ROER ; ; PC S RT T SEE AS CINT US JUTKOOC L ; ; T SERED ANK ACSTF OFR PSP PO; R PS+,P)(S V MO !E ERROR STATUS ON THE STACK * ;* =0, NO ERROR * ;* =1, TASK HAS BEEN CANCELLED DUE TO * ;* VOLUNTARY SUSPEND LENGTH OF TIME * ;* EXEEDED (TIME-SLICER'S) * ;* * ;* CKPT - EMT CKPT OR THE FORTRAN * ;* "; UPDATE 12/5/72 CORLOD.C03 ; UPDATE 11/10/72 CORLOD.C02 ; UPDATE 10/12/72 CORLOD.C01 ; UPDATE 6/22/72 CORLOD.S04 ; UPDATE 05-MAY-72 CORLOD.S03 ; UPDATE 5/5/72 CORLOD.S02 ; UPDATE 5/3/72 CORLOD.S01 .TITLE CORLOD ;*********************************************************************** ;* * ;* USED BY LOADER TO LINKK. ******** ; ******** DELCNT = 90. ; THIS GIVES US APRX. 110. MSEC 11/18/72******* ; ******** .ENDC ; MATCH FOR FIRST CONDITIONAL STATEMENT .END . = 20VBQO ; OMRPM RO FITEX ; ; T XI END APTNQQIT SE; ) R1T(TATST,QPIN#Q VBMO R BEUM NSKTAT GE; R1),R2K(TSOV SBBI R1 R CL . = 15VBQO ; SSREDD ARYNT ERTPA Q =R2 ; PTNQQI= 9 = T TATST SET-ESQURET OUL-OL ROR ; N -ILLRO, LLCAY LAOV Q AERFT AOMRPM RO FNGTIXI EREFOBE ; ; S YE; 60VBQO E BN ? URCC OORRR ESSCERO PSTUEEQ RIOSCDID DI; 4)(RRWERIO T TS: 11VBQO SKTAY LAEROVN -ILLRO; % EQUIVALENT: CALL CKPT * ;* * ;* NOCKPT- EMT NOCKPT OR THE FORTRAN * ;* EQUIVALENT: CALL NOCKPT * ;* * ;* TSOVLY- TASK ALREADY SUSPENDED * ;* TASK = IN $CTASK & OVERLAY TASKS WITH RESIDENT * ;* CORE LOCATIONS. * ;* * ;*********************************************************************** ; .DEF CORLOD,CORTBL .REF TSTAT,GTIME,GDATE,SDATE,STIME,TASKS,HEADER .REF IFD,DOD,FSTAT,PHYDEV,NODREQ,CMPTMR .REF CPRSIP,FINIT,PFRITE,FILE .REF CDSRCH,CDILST,DQFRST,DQLAST,NDPRTY,HPR AS R K ACSTN OUEAL VORRR EUT-PORRR E ; ) SP-(R,ERSR D OV M0:S1ET G AS R N URET R ; C P TS R AS.RERSFANTRT EX NOR FROZEE YT BTO3 RET S ; 3 R LR C ASSRESDRADR TOEC SVETILARET ENEMCRIN K. O ; C SESR D NC I AS R . NE OOT G ; 0 S1ET G NE B AS R S ORRR EOR FCKHE C ; R ERSR D ST T AS R 2.E YP TITEXO-CIIS D O CIIS,DPC R JS C ND.E . = 10VBQO 11VBQO BR SKTAD TEINPOCKHE CADRE- S YE; O PIHK,CPC R JS NO; 10VBQO L BP EDNTOIKPECCHK AS TIS; 2)(R TBTS C PTHK!CLCMS$T Z FN.I E ICRVSEC IS DOR FCKTA SONT SE; P)(S,-R4 V MO S ESDRADT IS L/O I =R4; R4D,HROT#I D AD N IOCTUN FADRET SE; ) R4N(FCIO RBCL T IS LIND ILEFID/IFT SE; 4)(RIDLEOF),R5D(IF) * ;* JSR PC,TSOVLY * ;* * ;* DQOVLY- TSTAT = 8(ODQREQ) * ;* MOV TASK,-(SP) * ;* JSR PC,DQOVLY * ;* * ;* RELTSK- IOSTAT = 0 *IRQ,CALLED .REF DIHA50,FMFRST,FMLAST,FNEXT,AULIST,DIOA65,IOSTAT .REF NOFMRQ,FMACTV,FLMB00,COMPID .REF $TKFLS,TPRTY,PUSHR,POPR,BSIZE,PPTAB .REF CRDON,LPON,CRDOFF,LPOFF,LOGMAX .REF DLCST,MPQST,MSQST,OUTST,RTEST .REF SYDST,TETST,INVNUM,TSKRN,BUFST .REF BUFEND,BUFCNT,BUFERR,MTLST,MTPST .REF NAKBUF,ACKBUF,CANBUF,STXBUF,SHDST,DCRTST,CELCNT,CELST1 ;******** .REF CELST5,CELST,ELMCNT,ELMST ; SE U ; O SIDI $ MT E AS R K ACSTN OSTLIO I/O CIIS DUT P ; P)(S,-STRLDS # OV MC:SEET G AS R ; AS R R.LEAL CHE TTON URET RND AS,ORRR EOR FCKHE CS,ESDRADR TOEC SHE T ; AS R NTMERENC IE,IL FUPBFE THM RO FORCTSEA D EA REDUSS INETIOUBRSUS HI T ; AS R ; AS R . FFTU SORRR EDOO G ; T OURR E MP J0:09FR B AS V MO X DEIND OR WSKTAE ATULLCCA; R5 L AS R BEUM NSKTAS T'ESQURET GE; R5),R2K(TSOV SBBI R5 R CL STLIO I/N IITT SE; ) R4R(DDBA,DR3 V MO R FEUF BTADAF O ; R3D,EIFL#O D AD S ESDRADE ATULLCCA; 3 ,RR4 V MO E YP TITEXO I/T SE; 4)(RITEXIO.,#3 VBMO ' OVOT'GO TTELEMPCOO I/T SE; ) R4P(OMOC,IOVOT#G V MO TYRIIOPRS N'IOITRTPAT SE; ) R4R(IOPR,OR0 VBMO - * ;* MOV TASK,-(SP) * ;* JSR PC,RELTSK * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;* * ;*****************************************************. ******** ; .PAGE CORLOD = . MOV (SP),-(SP) MOV #CORTBL,2.(SP) ; PUT ADDRESS ON STACK FOR ROSLOD RTS PC ; CORTBL = . .RAD50 /TST/ .RAD50 /AT / .WORD TSTAT .RAD50 /GTI/ .RAD50 /ME / .WORD GTIME .RAD50 /GDA/ .RAD50 /TE / .WORD GDATE .RAD50 /SDA/ .RAD50 /TE / .WORD SDATE .RAD50 ERADHEN IRTPAIQT SE; ) R4T(ARQP,IR3 VBMO T ARQPO NT IEXND I -RTPAIQE ATULLCCA; 3 ,R1)(RTNARQP B SU S ESDRADT ARQPE ATICPLDU; 3 ,RR2 V MO . = 00VBQO ; SSREDD AONTITIAR=PR4 ; LLCET ARQPS T'ESQUREF OSSREDD=AR2 ; EXND IRDWOY ITORRI=PR1 ; Y ITORRI=PR0 ; . /O ITEIAITIN ; ND AINL-OL ROR FUPT SE, ERADHEN IOITRTPAD ILBU ; ; OB NND ASBT SE; ) R4,(R3 V MO NG1****************** ; .DEF QOVLAY,QOVNXT,TSOVLY,CKPT,NOCKPT,QSOVLY .DEF UNSOVY,DQOVLY,GETOV,GOTOV,TSABRT .DEF FQPRTN,RELTSK .REF PPTAB,BSIZE,IFD,CHKPIO,DISCIO .REF HEADER,DQRPOM,TSTAT,$CTASK,$PRIOR .REF ACTIVE,QSAVE,QTIME,TPRTY,DQTIME,FIRST .REF LAST,ERRTYP,STACK,DSPTCH .REF PUSHR,POPR,IOSTAT,DQTIME .IFNZ $DEBUG .REF SEARCH,ALLOC,DALLOC .ENDC ; .CSECT OM1 ; 2/STI/ .RAD50 /ME / .WORD STIME .RAD50 /TAS/ .RAD50 /KS / .WORD TASKS .RAD50 /HEA/ .RAD50 /DER/ .WORD HEADER .RAD50 /IFD/ .RAD50 / / .WORD IFD .RAD50 /DOD/ .RAD50 / / .WORD DOD .RAD50 /FST/ .RAD50 /AT / .WORD FSTAT .RAD50 /PHY/ .RAD50 /DEV/ .WORD PHYDEV .RAD50 /NOD/ ND.E ; LEAB TOFD EN; . -1 D OR.W ; ; T MSEL D OR.W / STLM/E 50AD.R NTMCEL D OR.W T/CNLM/E 50AD.R T LSCE D OR.W / STEL/C 50AD.R ******** ; T5LSCE D OR.W ******** ; 5/STEL/C 50AD.R T1LSCE D OR.W 1/STEL/C 50AD.R NTLCCE D OR.W NIINEG BONTITIAR PTOT GE; R4E,SZHD#P B SU EDSHNIFIT NO; 50VAQO L BP ONTITIAR PTOR DEEA HERSFANTR; + 4)(R+,5)(R V MO: 50VAQO . FOINR DEEA HONTITIAR POFS ESDRADT GE; R5R,HDRT#P V MO: 49VAQO C ND.E . RI PISTHR FOD TECALOALS ESDRADT SE; ) R5D(ADRT,PR4 V MO Y ITORRI PISTHR FOS ESDRADT ARQPS-YE; 5 ,R1)(RTNARQP V MO NO; 49VAQO I BM D?XEFIR OEDICSLE-IM TTYRIIOPR; ) R0B(TAPP TBTS 5 ; TASK IS A VALID QUEUEABLE TASK. TSTAT = OVYACT = 1. ; QOVLAY = . MOV 4.(SP),R0 ; SAVE PRIORITY MOV (SP),4.(SP) ; PC TO PROPER PLACE FOR RETURN MOV 2.(SP),(SP) ; SET ARGUMENT MOV 6.(SP),-(SP) ; AND TASK IN PROPER PLACE CLR 8.(SP) ; CLEAR ERROR PARAMETER IN STACK MOV PSR,4.(SP) ; PROCESSOR STATUS TO STACK MOV R0,R1 ; CALCULATE PRIORITY AS6 .RAD50 /REQ/ .WORD NODREQ .RAD50 /CMP/ .RAD50 /TMR/ .WORD CMPTMR .RAD50 /CPR/ .RAD50 /SIP/ .WORD CPRSIP .RAD50 /FIN/ .RAD50 /IT / .WORD FINIT .RAD50 /PFR/ .RAD50 /ITE/ .WORD PFRITE .RAD50 /FIL/ .RAD50 /E / .WORD FILE .RAD50 /CDS/ .RAD50 /RCH/ .WORD CDSRCH .RAD50 /CDI/ .R T/CNEL/C 50AD.R STRTDC D OR.W T/TSCR/D 50AD.R T DSSH D OR.W / STHD/S 50AD.R UFXBST D OR.W F/BUTX/S 50AD.R UFNBCA D OR.W F/BUAN/C 50AD.R UFKBAC D OR.W F/BUCK/A 50AD.R UFKBNA D OR.W F/BUAK/N 50AD.R T PSMT D OR.W / STTP/M 50AD.R T LSMT D OR.W / STTL/M 50AD.R RRFEBU D OR.W R/ERUF/B 50AD.R NTFCBU D OR.W T/CNUFT ARXP!FLCMS$T Z FN.I T OUCKLOT SERE; SR,PP)(S V MO Y EROVEC RORRR EDO; 50VBQO E BN UPG UN HB3Y-US BLLTI SIF; R 3F,BB3SY#B T BI Y LADEC SE U.925; ; L OO PRECOF ONGNIINEG BND A ; 4 ,ROLPOBC D AD K OCBLT ARSTM RO F ; 4 ,RR4 D AD N IOITRTPAF O ; R4 RBCL S ESDRADE ATULLCCA; 4 ,RR3 V MO ATST PINS ESGRRO PINO I/T SE9L R1 ; WORD INDEX MOV (SP),R3 ; GET TASK NUMBER JSR PC,FB3ADD ; FIND B3 ADDR FOR ALLO REQUEST .IFNZ $TMSLC!FXPART TSTB PPTAB(R0) ; DYNAMIC PRIORITY LEVEL? BMI QOVA10 ; YES JMP QOVC00 ; NO-QUEUE IN QPART-'PUSH' .ENDC QOVA10: MOV QPARTN(R1),R2 ; GET THIS PRIORITY'S QPART TABLE ADDRESS BEQ QOVB30 ; ERROR(-1),DOESN'T EXIST QOVA20:AD50 /LST/ .WORD CDILST .RAD50 /DQF/ .RAD50 /RST/ .WORD DQFRST .RAD50 /DQL/ .RAD50 /AST/ .WORD DQLAST .RAD50 /NDP/ .RAD50 /RTY/ .WORD NDPRTY .RAD50 /HPR/ .RAD50 /IRQ/ .WORD HPRIRQ .RAD50 /CAL/ .RAD50 /LED/ .WORD CALLED .RAD50 /DIH/ .RAD50 /A50/ .WORD DIHA50 .RAD50 /FMF/ .RAD50 /B 50AD.R NDFEBU D OR.W D/ENUF/B 50AD.R T FSBU D OR.W / STUF/B 50AD.R N KRTS D OR.W / RNSK/T 50AD.R UMVNIN D OR.W M/NUNV/I 50AD.R T TSTE D OR.W / STET/T 50AD.R T DSSY D OR.W / STYD/S 50AD.R T ESRT D OR.W / STTE/R 50AD.R T TSOU D OR.W / STUT/O 50AD.R T QSMS D OR.W / STSQ/M 50AD.R T QSMP D OR.W / STPQ/M 50AD.R; 2)(RP,OI#I SBBI C ND.E ******** D EESPO TUP3 BIL TITWA. MPTE; AYEL,DPC R JS ******** ; FF.I OCLL,APC R JS ALOR$C FZ.I ONTICALOALT ARST; FRB33,OBLL#A S BI ******** . STUEEQ RONTICALOALP TUSE; R 3R,BR3 V MO ******** R.TELAR FOE AV SND AERSWANT GE; 3 ,RARB3 V MO: 47VAQO T AI WORT INPOCKHE-CNO; =: MOV (R2),R5 ; IS QPART CELL AVAILABLE? BEQ QOVA30 ; YES - MAKE ENTRY INC R5 ; DID WE GET TO END OF TABLE BEQ QOVB40 ; YES - ERROR TYPE 1, QPART FULL CMP (R2)+,(R2)+ ; BUMP TO NEXT QPART CELL BR QOVA20 ; TRY AGAIN QOVA30: MOV #PLOCK,PSR ; SET CPU LOCK-OUT TST (R2) ; STILL AVAILABLE? BEQ QOVA40 ; YES - CONTINUE MOV >/RST/ .WORD FMFRST .RAD50 /FML/ .RAD50 /AST/ .WORD FMLAST .RAD50 /FNE/ .RAD50 /XT / .WORD FNEXT .RAD50 /AUL/ .RAD50 /IST/ .WORD AULIST .RAD50 /DIO/ .RAD50 /A65/ .WORD DIOA65 .RAD50 /IOS/ .RAD50 /TAT/ .WORD IOSTAT .RAD50 /NOF/ .RAD50 /MRQ/ .WORD NOFMRQ .RAD50 /FMA/ .RAD50 /CTV/ T CSDL D OR.W / STLC/D 50AD.R ; AXGMLO D OR.W / AX/M 50AD.R / OG/L 50AD.R F OFLP D OR.W / F /F 50AD.R / PO/L 50AD.R FFDOCR D OR.W / FF/O 50AD.R / RD/C 50AD.R ONLP D OR.W / /N 50AD.R / PO/L 50AD.R N DOCR D OR.W / N /O 50AD.R / RD/C 50AD.R B TAPP D OR.W / B /A 50AD.R / PT/P 50AD.R E IZBS D OR.W 00VDQO P JM S YE; 47VAQO Q BE ? LEABILVA AKSOCBLE IZBS; FRB33,RBER#S T BI Y EROVEC RORRR EDO ; 50VBQO E BN UPG UN HB3- Y US BLLTI SIF; R 3F,BB3SY#B T BI: 45VAQO Y LADEC SE U.120; ; Y ITORRI PISTHS STUEEQ RO. NMPBU; 0)(RQPEQNR CBIN T ARQPO TNTMEGUAR; ) R2G(ARTR+,P)(S V MO NGTIAI=WATST&P=0,CK)ACSTM RO FEDPPPO ( #SKTA; 2)(R+,P)(S V MO RYNT4.(SP),PSR ; RESET PRIORITY LOCKOUT BR QOVA10 ; AND SEARCH AGAIN QOVA40: MOV R3,B3RR ; SET ALLOCATION SEARCH ADDRESS BIS #SRCHB3,B3FR ; START B3 SEARCH .IFZ $CORAL JSR PC,SEARCH .IFF ; ******** JSR PC,DELAY ; TEMP. WAIT TIL B3 UP TO SPEED ******** .ENDC SWAB (SP) ; SET UP FIRST WORD OF QPART E .WORD FMACTV .RAD50 /FLM/ .RAD50 /B00/ .WORD FLMB00 .RAD50 /COM/ .RAD50 /PID/ .WORD COMPID .RAD50 /$TK/ .RAD50 /FLS/ .WORD $TKFLS .RAD50 /TPR/ .RAD50 /TY / .WORD TPRTY .RAD50 /PUS/ .RAD50 /HR / .WORD PUSHR .RAD50 /POP/ .RAD50 /R / .WORD POPR .RAD50 /BSI/ .RAD50 /ZE /