$@ @8P@.j ,@xvrtp02468:<>},&@m,L@ H ``% %,r@`Q ULX,@ZM``%x_@B,@_fC_E_F_>G_G,@_I_lK 7 -, A7 7 7  Up,0AwvX 8%kU%7&,VA.X %k%7U>X 0,|Ar; UPDATE 19 JUN 73 DSCTST.S09 ; UPDATE 12/6/72 DSCTST.S08 ; UPDATE 7/6/72 DSCTST.S07 ; UPDATE 6/28/72 DSCTST.S06 ; UPDATE 4/5/72 DSCTST.S05 ; UPDATE 2/10/72 DCSTST.S04 ; UPDATE 1/17/72 DCSTST.S03 ; UPDATE 12/20/71 DCSTST.S02 ; UPDATE 12/17/71 DCSTST.S01 .TITLE DSCTST ;*********************************************************************** ;* & ((>(.X\`dhln.&ptx$x0.Lx7xE  xx ( 2.r 7 xE    xN.xEUx|xv5:xx"x9.nxp\lZV5   xk.Ba`7B55@. ,O .; UPDATE 7/6/72 DSCTST.S07 ; UPDATE 6/28/72 DSCTST.S06 ; UPDATE 4/5/72 DSCTST.S05 ; UPDATE 2/10/72 DCSTST.S04 ; UPDATE 1/17/72 DCSTST.S03 ; UPDATE 12/20/71 DCSTST.S02 ; UPDATE 12/17/71 DCSTST.S01 .TITLE DSCTST ;*********************************************************************** ;* * ;* DISC TEST PROG %lfw w WX ,A%Lw Dw @]<h`X %k,,A%7$oX E %x,A>:*X h%@,BX R%% Uw ,:BEpX *%k%7U@O,`BX %k%7|U X$,B %kd%7\U5pz5b,BrWh7 7  ,w jjV,BWW5BBw,B,C * ;* DISC TEST PROGRAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * ;* E7 ? @   .0 ? ^U@7 ? .V O % $.| 5@ 6 5.EU|EtUn5h_. ^-ZhdP5N5 D .5:w 2w5$w  RAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * ;* AND CONTINUE. * ;* ,DC,jCxX7 7 7 w ,C. Unh bV,CV w  \U82,C ,,\ XT>w 7 8,D7 2B"@$U p,(D  w Nte,NDX7@C~UX,tD  ,Dw pw jVWW@ B~,D7 tr`Xm AND CONTINUE. * ;* NOTE: MAKE SURE THE I/O BUFFER ADDRESS* ;* PLUS THE WORD COUNT * 2 DOES NOT* ;* EXCEED THE TOP OF MEMORY OR * ;* 157776, WHICHEVER IS THE SMALLER* ;* THE BUFFER STARTS AT THE END OF * ;* THIS DIAGNOSTIC. * ; UPDATE 1/23/73 CALDGN.S11 ; UPDATE 10/26/72 CALDGN.S10 ; UPADTE 10/26/72 CALDGN.S09 ; UPDATE 10/25/72 CALDGN.S08 ; UPDATE 10/24/72 CALDGN.S07 ; UPDATE 10/4/72 CALDGN.S06 ; UPDATE 9/20/72 ADD WRAP AROUND CHECK ; UPDATE 9/12/72 CALDGN.S04 ; UPDATE 9/6/72 CALDGN.S03 ; UPDATE 9/6/72 CALDGN.S02 .TITLE CALDGN ;********************************* NOTE: MAX. OF 3072 WORDS. * ;* COMPUTER HALTS- ENTER FUNCTION AS FOLLOWS * ;* AND CONTINUE: * ;* BIT 15: = 0, WILL USE DATA GIVEN * ;* TO SET UP AND COMPARE BUFFER * ;* BIT 15: = 1, USER RESPONSIBLE FOR * ;* BUFFER. * ;* ^@P0 * ,DLVNw %?8 2wn, E5wN7 x7 7 S,2EXX %h,XEU w ",~Ee %7 7 7 ,Eh@vUVP J l,E>tw hLWt@$ ~ ,E7PwN8w  $%@5,F7 x7 w UX@, 8,F  Z,bw -L! DP!,FH 4w %,5?$ 7 !, GU?e?5w7  @,FGx7 7 XU,lGD@  w ,GEteEB`  ~,Gw % b%?\7 V PLe,G _x5U xw 8w :,H@7 ?C .DEF B3FR,B3AR,B3RR,BITTBL .REF PUSHR,POPR ; ; ; NOTE: SB 0 = FIRST BIT ; NOB 0 = ALLOCATE-DEALLOCATE-SEARCH WHOLE THING ; TBLSIZ = 16.+16. ; BIT MAP TABLE SIZE BITTBL = . .WORD 0,0,0,0,0,0,0,0 ; ALLOCATION .WORD 0,0,0,0,0,0,0,0 ; TABLE ; TMP1: .WORD 0 ; B3RR: .WORD 0 B3AR: .WORD 0 B3FR: .WORD 0 ARSAVE: .WORD 0 MINSCH: .WORD -1. SAVER2: .WORD 0 ; ; ;  100000 IF TIME OUT ON HARDWARE ;* 040000 FOR OTHER HARDWARE ERROR ;* 1 AFTER A DEALLOCATE * ;* 2 AFTER AN ALLOCATE * ;* 3 BIT MAP COMPARE AFTER * ;* ANY SEARCH * ;* 4 FR COMPARE AFTER ANY SR* ;*  BIT 12: = 1, INCREMENT SECTOR AFTER * ;* EACH CYCLE. * ;* BIT 11: = 1, HALT AFTER END SECTOR * ;* REACHED, OTHERWISE LOOP BACK TO * ;* BEGIN SECTOR. * ;* BIT 9: = 0, IF ERROR OCCURS-HALT * ;* BIT 9: = 1, IF ERROR OCCURS-CLEAR *@XUU~,*HX w " D,PH7  w g,vH ?hx r ,Hfw @h%UU~ ,HpwzUUvw @%UU~ ,HLUUVwPw w5U,Ixw (w X*~,4IX7 ? ,ZIw @7 ?h,I xw @h%,I*~ *ww  SEARCH = . TSTB B3RR ; NOB = 0 ON ANY SEARCH => AR =0 BNE 10$ ; AND FOUND SET. CLR B3AR CMP #176000,B3RR ; EXCEPT WHEN SB=252. BNE 40$ ; BIS #200,B3FR ; THEN NOT FOUND ALSO SET RTS PC 10$: BIT #40,B3FR ; MINIMUM SEARCH? BEQ SRCH1 ; NO CMPB #1,B3RR ; 1 BLOCK REQUEST? BEQ SRCH2  5 AR COMPARE AFTER ANY SR* ;* * ;* USEFUL ADDRESSES IN THE DIAGNOSTIC * ;* - LAST HARDWARE AR AFTER A SEARCH * ;* - LAST SB/NOB * ;* - # OF LOOPS IN DELAY COUNTER * ;* - LAST SOFTWARE RR * ;*  ;* DISC AND RETRY(ERROR LOOP). * ;* BIT 8: = 0, WILL HALT AND WAIT FOR * ;* DATA RESPONSE AFTER EACH I/O COMPLETE. * ;* BIT 8: = 1, WILL CONTINUALLY REPEAT * ;* XFER UNTIL ERROR OCCURS (LOOP MODE). * ;* BIT 7: = 0, XFER WITHOUT DISC * ;* INTERRUPT.  ^w ,In@RhT7 L( ")DILw t ,>J@h%*~ *ww , ,dJw57 7 Jx/,Jw 2w vx5@XC5Rl,JhH5 `Xd2G5,J(>56*h:E(,Jw 8 E55,"Kw 0w E %53,HK  w\e%$7 j,nKE6LzXw ,KJE*  ; YES-FIX CLR ARSAVE ; INIT. MOV #-1.,MINSCH ; THIS TOO SRCH1 = . BIC #170000,X060 BIS #30000,X060 ; CONSTRUCT BIT #1.,R4 BIC #177400,X061 BIS #1400,X061 ; CONSTRUCT BEQ X070 BR X000 SRCH2 = . BIC #40,B3FR ; RESET MINIMUM SEARCH FOR 1 BLOCK SEARCH BR SRCH1 ; ALLOC = . TSTB B3RR ; DO NOTHING - LAST SOFTWARE AR * ;* - LAST SOFTWARE FR * ;* - LAST HARDWARE AR * ;* - LAST HARDWARE FR * ;* - LAST HARDWARE BIT MAP * ;* - NUMBER OF ERRORS SO FAR * ;* - NUMBER OF LOOPS SO FAR * ;* BIT 7: = 1, USE DISC INTERRUPT. * ;* BITS 2:0 = I/O FUNCTION * ;* 0 = NOP * ;* 1 = WRITE * ;* 2 = READ * ;* 3 = WRITE CHECK * ;* 4 = WRITE THEN REA!$  EzE 5,K    `ZvXw XRU ,K*C5, G5-,Lhw $E5,,Lw (w 5Ew *@aWw ,RL(@mWw &@WUWmWaWW 5n,xLw7 7 5E-,LexXElwff&N,L`EtVE@` NB  ,LwVEPLE rU>,M,E&w  D@mWWE4,6M % " IF NOB = 0 BNE 30$ 40$: BIC #200,B3FR ; SET FOUND RTS PC 30$: BIC #170000,X060 BIS #50000,X060 ; CONSTRUCT BIS #1.,R4 BIC #177400,X061 BIS #102000,X061 ; CONSTRUCT BVC X070-MUST BRANCH BR X000 ; DALLOC = . TSTB B3RR BEQ 40$ BIC #170000,X060 BIS #40000,X060 ; CONSTRUCT BIC #1.,R4 BIC #177400,X061 # * ;* * .PAGE ;* INPUT INSTRUCTIONS FOR DIAGNOSTIC AS FOLLOWS * ;* NOTE CONSOLE SWITCH PATTERN: * ;* * ;* X XXX XXX XXX XXX XXX * ;* FLD1 FLD2 FLD3 FLD4 FLD5 * ;* $D * ;* NOTE: A CYCLE IS THE WRITE * ;* THEN READ. * ;* COMPUTER HALTS- DATA REQUEST HALT: * ;* IF FCN BIT 15 IS SET USER MAY NOW * ;* SET OR CHECK DATA BUFFER, OTHERWISE, * ;* DATA IN SWITCHES WILL BE USED. * ;* CONTINUE AND XFER IS ATTEMPTED. %Ew D@WW,\M w D@aWmWaWw D@#,MuWuW5@|~Ew D@,MWFWWUR5<t 9,M>5(5U5 g,M 55E/,NE7PWtmtO,@NB`  U@5@e5,fN7  eEw5@w ,N*@aWw F@mW8WmWaWE@v7 z7 ,Nt5Fh^zX%"8O,N hPN&BIS #102000,X061 ; CONSTRUCT BVC X070-MUST BRANCH ; X000 = . JSR R5,PUSHR ; SAVE REGISTERS MOV B3RR,R0 ; GET START BLOCK/NOB REQUESTED CLR TMP1 BISB R0,TMP1 ; SAVE NOB REQUESTED X020 = . CLRB R0 SWAB R0 ; START BLOCK REQUESTED CLR R1 ; INIT BITTBL INDEX CLR R2 ; INIT BIT COUNTER CLR R3 ' * ;* WHERE: * ;* * ;* FLD1: 0 = DEALLOCATE BEFORE EACH CYCLE * ;* 1 = ALLOCATE BEFORE EACH CYCLE * ;* 2 = START FROM WHERE TABLE IS NOW * ;* 3 = SET UP WORST CASE 10101010... * ;* ( * ;* OR * ;* IF BIT 12 SET IN FUNCTION: COMPUTER HALTS- SET END * ;* SECTOR OF SECTOR INCREMENT-THEN * ;* CONTINUE. $ ;* * ;* IF IN A NON-LOOP MODE OR LOOP MODE AFTER AN ERROR, WHEN THE * ;* I/O XFER IS COMPLETE THE R0 DISPLA) D B m8D ,Nm4B e/D B eOB e`D 7 1,$O7  HF8qUU,JOBgP07 Xh/,pO -eeU,Om5 @,OdE]|vw fD@aWw \F@mW,OPZw LD@WBJw <D@W,P:E4w &D@WWWmWaWWW5f,.PXh ~D eh,TP!x U7w jVW,,zP7w jV*; INIT HIT COUNTER X030: MOV BITTBL(R1),R4 ; GET A BIT MAP WORD CLR R5 ; WILL SHIFT INTO R5 X040: CMP R2,R0 ; GET TO START BLOCK REQUESTED? BGE X060 ; YES X050: ASR R4 ; DOUBLE SHIFT R4 ROR R5 ; TO R5 INC R2 ; BUMP BIT COUNTER BIT #17,R2 ; VALUE DIVISIBLE BY 16? BNE X040 ; NO MOV R5,BITTBL(R1+ * ;* FLD2: 0 = SINGLE CYCLE * ;* 1 = LOOP - HALT ON ERROR CONDITION ;* 2 = LOOP AND IGNORE ERRORS (START OVER) * ;$ 3 = LOOP - RETRY FUNCTION IF ERROR WITHOUT A HALT. ;* 4 = LOOP - RETRY FUNCTION USING PREVIOUS SB/NOB * ;* 5 = SAME AS 1 - TO PERMITE CHANGES ON THE FLY * ;* ,Y HAS THE FOLLOWING * ;* MEANING: * ;* 0 = XFER OK * ;* 1 = XFER ATTEMPTED BUT AFTER APPROX. 150 MSEC., * ;* CONTROLLER WAS NOT READY OR DIDN'T GIVE INTERRUPT * ;* 2 = DATA DID NOT COMPARE TO DATA ENTERED AFTER * ;* A READ * ;* OTHER = AN ERROR O-W,WWW,,PUfVPNJ&v r,P%&le `$7 " ,PJXD@:7 62"Q07 ,Q7  &Xw XC5,8QG5 ,^QQ7 U ,Q  lEfXwp8,Q02R4 RN_6EM,Q_80:7 p5P5P$*QRXVTR,"S U7 7 *S.) ; YES-REPLACE BIT MAP WORD TST (R1)+ ; BUMP BITTBL INDEX CMP R1,#TBLSIZ ; SEARCHED COMPLETE TABLE? BGE ERROR ; YES-SET ERROR BIT INCASE SEARCH BR X030 ; KEEP SEARCHING ; ; X060: BIT #1.,R4 ; MAY ALSO BE BIS OR BIC X061: BEQ X070 ; MAY ALSO BE BVC BIT #40,B3FR ; MINIMUM SEARCH? BEQ X062 TST R3 ; FIND ANY? / * ;* FLD3: 0 = SB/NOB SET BY OPERATOR * ;* 1 = SB/NOB SET BY INCREMENT FROM 0 * ;* 2 = SB/NOB SET BY RANDOM NUMBER GENERATOR * ;* 3 = SAME AS 2 - TO PERMIT CHANGES ON THE FLY. * ;* * ;* FLD4: 0 = SEARCH * ;* 1 = MINIMUM SEARCH 0CCURRED FROM THE DISC CONTROLLER * ;* AND THE DCS IS DISPLAYED. ;* * ;* COMPUTER WILL NOW HALT AT DATA RESPONSE HALT. MAY CONTINUE * ;* WITH SAME SECTOR AND WORD COUNT FROM HERE. * ;* * ;* PROGRAMMER 54 * ;* 1SЬD,HS̬C5 UD,nS7 7 hSG5|r c,SwUjSlSd],S w `7 X7 RSdTV,S2.G5& *,TUTT  z,,TU 7 7 ,RTw fX.TC5V,xTG5|r X4,T\hTbL\DV<,TPN*0X,2BEQ X062 ; NO CMP R3,TMP1 ; ENOUGH? BLT X062 ; NO CMP R3,MINSCH ; BETTER THAN LAST TIME ; ALLOW FOR 256 REGION BHIS X062 ; NO MOV R3,MINSCH ; YES MOV ARSAVE,B3AR ; SET UP PROPOSED ANSWER BIC #200,B3FR ; SET FOUND X062 = . CLR R3 ; RESET HIT COUNTER BR X050 ; ; 3 * ;* 2 = ALLOCATE * ;* 3 = DEALLOCATE * ;* 4 = ALLOCATE-DEALLOCATE * ;* 5 = SEARCH-ALLOCATE-SWAP SB WITH NOB-DEALLOCATE * ;* 6 = MINIMUM SEARCH-ALLOCATE-SWAP SB WITH NOB * ;* -DEALLOCATE * ;* 7 = MINIMUM SEARCH-ALLOCAT4 * ;*********************************************************************** ; ; .ASECT ; ; REGISTER EQUATES ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; PSR = 177776 ; PROCESSOR STATUS REGISTER SWR = 177570 ; SWITCH REGISTER ; ; DISC DEVICE REGISTER EQUATES ; DCS = 165300 ; DI5",T5U @<8Eh,U27 .7 *7 &7 "7 ,6Uw w w EhU,,\U-w D@Ww 6@HWp,UFWHWWw D@Ww F@Ww ,U6@HWFWHWWW%.e,U7L@F%<"4 53,U@    ,Ve7 %w,A,@VB`"Ee0E7 7 7  3,fV @|7 p6 X070 = . BIT #40,B3FR ; MINIMUM SEARCH BNE X100 ; YES INC R3 ; BUMP HIT COUNTER CMP R3,TMP1 ; DONE FOR NOB REQUESTED BLT X050 ; NO-KEEP GOING MOV R2,R3 ; SAVE NO. OF BITS LEFT TO SHIFT SUB TMP1,R2 ; CALCULATE START BLOCK INCASE INC R2 ; SEARCH REQUEST SWAB R2 BISB TMP1,R2 7E-NEW SB/NOB-DEALLOCATE * ;* * ;* FLD5: 0 = NO SOFTWARE ALLOCATOR * ;* 1 = SOFTWARE ALLOCATOR * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION FSC CONTROL STATUS REGISTER WCR = 165302 ; WORD COUNT REGISTER CMA = 165304 ; CURRENT MEMORY ADDRESS REGISTER DAR = 165306 ; DISC ADDRESS REGISTER DER = 165310 ; DISC ERROR REGISTER ; INTVEC = 530 ; ONTERRUPT VECTOR ADDRESS ; . = 700 ; SET LOCATION COUNTER FOR BUFFER BUF = . .=BUF+6144. ; RESERVE 3K DECIMAL FOR BUFFER ; SECTOR: .WORD 0 E,Vxtt%j WEL7 H7 D7 ,V@%J=2@W4pEP,Vjw w w mTEt,Ve @ C~%DATA ERR @%STAT],$WUS ERR @%EXTRA BKS @%DK ADDR ERR @%@ A,JW ERR CNT @%RANEX ERR @ DAR @ !,pWDAE @ DCS @ HRD ERR@ W,WRD CNT@ WRD ADDR.@ GD DATA,W @ BD DATA @?@/@ WRD1 @ ,W WRD2 @%UNIT NO.@ @ READ @%CPU BK,XGRND TIMED OUT@%OK!@%DATA TEST ONLY? @H; SB/NOB MOV R2,B3AR ; SET UP ANSWER REGISTER BIC #200,B3FR ; SET FOUND X075: ASR R4 ; FINISH CURRENT BITTBL WORD ROR R5 INC R3 BIT #17,R3 BNE X075 MOV R5,BITTBL(R1) ; SET IN BIT MAP X080: JSR R5,POPR ; RESTORE REGISTERS RTS PC ; RETURN ; ; ERROR = . BIT #40,B3FR ; MINIMUM SEARCH? BNE X090 G * ;*********************************************************************** .PAGE .GLOBL CALDGN .GLOBL SEARCH,ALLOC,DALLOC,B3FR,B3AR,B3RR,BITTBL ; ; ; CALDGN: BR START ; GIVE A NICE STAR_ ADDRESS ; ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; SWR = 177570 ; SWITCH REGISTER """"""" @DDDDDDDDDDDDDDDDDD@D""""""""""  """"""""""""""""""3ADD3B B C.K Eb n ^c v&{ ',8^{  L&^ P`,8^^ dh&K lxr@λzG Kc z~ {c |,8^{ 4 Nc .a fc "8(>)&{)% &*% .2% 6$Dݙٝ""""""""""""""""""3a ͋,L  B8w&B ` % & }&*C$$Βe E%>k  aʋaՀ$ & * P$ ΋Ί   ΋   d Ί  ( 1'u  Q$f $5@ U C΋ Cb M΋U@ U &  B" .&0 M &0 & M 0 &,.X%MULTI DK MODE?@%# OF DKS 1 TO 10 OCTAO,TXL?@%EX. DK?@%OPT WRD CNT? @%LENGTH (1 ,zXTO 1000)?@%WRD ADDR?@%OPT. DATA PAT. #,X?@%WRITE?@%WRITE CHECK?@%READ?@%END@*x*P@iJ WORDCT: .WORD 0 FCN: .WORD 0 DATA: .WORD 0 FCNSW: .WORD 0 EXTENT: .WORD 0 INTSW: .WORD 0 RDWTSW: .WORD 0 ENDSCT: .WORD 0 STSCT: .WORD 0 ; START = . MOV #BUF,SP ; SET UP SYSTEM STACK MOV #DSCINT,INTVEC ; SET UP DISC INTERRUPT VECTOR MOV #240,INTVEC+2 ; PRIORITY LEVEL 5 HALT ; WAIT FOR START SECTOR MOV SWR,SECTOR ; SAVE START SECTOR HALT K ; ALLTBL = 162040 ; ALLOCATION TABLE ALRR = 162020 ; ALLOCATOR REQUEST REGISTER ALAR = 162022 ; ALLOCATOR ANSWER REGISTER ALFR = 162024 ; ALLOCATOR FUNCTION REGISTER ; ALFND = 200 ; REQUEST FOUND ON A SEARCH (HARDWARE) ALBUSY = 100000 ; ALLOCATOR BUSY B3FND = 200 ; REQUEST FOUND ON SEARCH (SOFTWARE). ; ; FLD1: .WORD 0 ; START TYPE FLD2: .WORL ; YES ERR = . BIS #200,B3FR ; SET NOT FOUND BR X080 ; RETURN ; X090 = . TST MINSCH ; FIND ANYTHING? BMI ERR ; NO BR X080 ; YES-RETURN X100 = . INC R3 ; BUMP HIT COUNTER CMP R3,TMP1 ; REACHED NOB REQUESTED? BLT X050 ; NO-KEEP GOING BGT X050 ; YES-OVERM WITH PATTERN CLR R3 ; NO-CLEAR DATA BUFFER FOR READ TST016: MOV #BUF,R2 ; BUFFER ADDRESS MOV WORDCT,R4 ADD R4,R4 ADD R2,R4 ; TO THIS ADDRESS MOV R4,EXTENT ; SAVE FOR FUTURE USE TST020: MOV R3,(R2)+ BIT #1.,R0 ; WRITE OR WRITE CHECK? BEQ TST025 ; NO BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? BEQ TST025 N ; WAIT FOR NO. OF WORDS MOV SWR,R0 CMP R0,#3072. ; O5 DECIMAL IS LARGEST XFER IN TEST BLOS TST010 MOV #3072.,R0 ; NO-SET AT 3072 WORDS TST010: MOV R0,WORDCT ; SAVE WORD COUNT HALT ; WAIT FOR FCN WORD CLR RDWTSW ; CLEAR READ WRITE SWITCH MOV SWR,R0 BIC #177770,R0 ; ISOLATE FUNCTION CMP R0,#4 ; IS IT WRITE/READ? OD 0 ; SINGLE OR LOOP FLD3: .WORD 0 ; SB/NOB FLD4: .WORD 0 ; FUNCTION FLD5: .WORD 0 ; USE SOFTWARE ALLOC. TO CHECK OUT ; ; STORAGE FOR OLD TABLE AND REGISTERS PRESTR: .BLKW 16.+3.+2. ; LALAR: .WORD 0 ; LAST HARDWARE AR AFTER A SEARCH ; SBNOB: .WORD 0 ; DELAY: .WORD 150 ; FOR DELAY DURING CHECKOUT ; SMASK: .WORD 1400 ; MASK OUT UNWANTED SEARCH START BLOCK # ; NE-KEEP GOING MOV R2,SAVER2 ; SAVE SUB TMP1,R2 INC R2 ; START BLOCK SWAB R2 BISB TMP1,R2 ; SB/NOB MOV R2,ARSAVE ; SAVE IT MOV SAVER2,R2 ; RESTORE BR X050 ; SEARCH WHOLE TABLE .END Q ; NO INC R3 ; YES TST025: CMP R2,EXTENT ; FINISHED? BLT TST020 ; NO SIO: BIC #177774,R0 ; ISOLATE I/O FDN REQUESTED MOV R0,FCNSW ; SAVE FOR LATER USE MOV #BUF,CMA ; SET UP CURRENT MEMORY ADDRESS MOV WORDCT,WCR ; SET UP WORD NEG WCR ; COUNT REGISTER MOV SECTOR,DAR ; SET UP START SECTOR SEC ; FOR BNE TST011 ; NO INC RDWTSW ; SET WRITE/READ SWITCH MOV SWR,FCN BIC #7,FCN BIS #1,FCN ; START WITH WRITE BR TST012 TST011: MOV SWR,FCN ; SAVE TST012: HALT ; WAIT FOR DATA PATTERN OR ; ; LET USER DO BUFFER SET-UP OR COMPARE MOV SWR,DATA ; SAVE JUST INCASE DATA PATTERN BIT #10000,FCN ; SECTOR INCRESRROR: .WORD 0 ; # OF ERRORS ; NLOOP: .WORD 0 ; NUMBER OF LOOPS ; OSBNOB: .WORD 0 ; LAST SB/NOB USED TO START A FUNCTION. ; .PAGE ; ; ; START = . ; HERE IS THE REAL BEGINNING. CLR NERROR CLR NLOOP MOV #CALDGN,SP ; SET STACK POINTER MOV #-1.,SBNOB ; INITIALIZE MOV #100000,ALLTBL+30. ; SET LAST BIT IN LAST WORD OF TABLES MOV T.&,8^@ \}@p@ .p@p@4[M@wq@(&h! 6.6h7 7 >O(>.\x E7xEB \}x"x.7~x E7jx Er x x.7\xE7R B}UR GO BIT ROL R0 ; SET FUNCTION AND GO BITS CLR R4 ; USE TO COUNT DELAY TSTB FCN ; INTERRUPT MODE REQUESTED? BMI TST040 ; YES MOV R0,DCS ; START I/O FUNCTION TST030: INC R4 ; DELAY A LONG TIME BNE TST030 TSTB DCS ; CONTROLLER READY BMI IOCOMP ; YES-I/O COMPLETE TST035: MOV #1.,R0 ; NO-SHOULD HAVEVMENT? BEQ TST015 ; NO HALT ; YES-WAIT FOR END SECTOR MOV SWR,ENDSCT MOV SECTOR,STSCT ; SAVE START SECTOR TST015: MOV FCN,R0 ; GET FCN WORD BMI SIO ; USER'S BUFFER IS SET-UP,START I/O MOV DATA,R3 ; SET UP TO STORE DATA BIT #1.,R0 ; WRITE OR WRITE CHECK? BNE TST016 ; YES-FILL DATA BUFFER WITH PATTERN CLR R3 W #100000,BITTBL+30. ; SINCE CAN NOT BE USED. CALDG1: HALT ; WAIT FOR TEST INFORMATION CALDG2: MOV SWR,R0 SWAB R0 ASR R0 ASR R0 ASR R0 BIC #177761,R0 ; ISOLATE FIELD 1 - WORD INDEX MOV R0,FLD1 MOV SWR,R0 SWAB R0 BIC #177761,R0 ; ISOLATE FIELD 2 - WORD INDEX MOV R0,FLD2 MOV SWR,R0 ASR R0 ASR R0 X  x "$&l. " L &u@ e$ \} . 5@e } (.",22x  8 7",2 2x.@7}L\bhnt~ ; Xo*L\bhnt~.f8 5 2 z- 5 $. ^ 5 | Y COME IN BY NOW BR ERROR ; ERROR ; ; SIO WITH INTERRUPT REQUEST PROCESSOR ; TST040 = . BIS #100,R0 ; SET INTERRUPT ENABLE CLR INTSW ; RESET INTERRUPT SWITCH MOV R0,DCS ; START I/O FUNCTION TST050: TST INTSW ; RECEIVE INTERRUPT? BNE IOCOMP ; YES-I/O COMPLETE INC R4 ; DELAY A LONG TIME BNE TST050 BR TST035 Z ; NO-CLEAR DATA BUFFER FOR READ TST016: MOV #BUF,R2 ; BUFFER ADDRESS MOV WORDCT,R4 ADD R4,R4 ADD R2,R4 ; TO THIS ADDRESS MOV R4,EXTENT ; SAVE FOR FUTURE USE TST020: MOV R3,(R2)+ BIT #1.,R0 ; WRITE OR WRITE CHECK? BEQ TST025 ; NO BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? BEQ TST025 ; NO INC R3 [ ASR R0 ASR R0 ASR R0 BIC #177761,R0 ; ISOLATE FIELD 3 - WORD INDEX MOV R0,FLD3 MOV SWR,R0 ASR R0 ASR R0 BIC #177761,R0 ; ISOLATE FIELD 4 - WORD INDEX MOV R0,FLD4 MOV SWR,R0 BIC #177770,R0 ; ISOLATE FILED 5 MOV R0,FLD5 JSR PC,SAVE ; SAVE OLD TABLE AND REGISTERS MOV FLD1,R5 ; GET READY TO\ .B 5  ^ Bd <.(} wpwn7&  $. `5s 7  p"p&4[M.$"h7 ,5Y 7 .J QM7  p p,8^$K.p5] ; TOO LONG-ERROR ; ; I/O COMPLETE-READY OR INTERRUPT ; IOCOMP = . MOV DCS,R0 ; GET ERROR INFO. BMI ERROR ; WHOOPS-ERROR TST FCN ; USER BUFFER SET-UP BMI RSTART ; YES-RESTART CMP #2.,FCNSW ; WAS IT A READ FUNCTION? BNE RSTART ; NO MOV #BUF,R2 ; COMPARE DATA IN BUFFER MOV DATA,R3 TST060: CMP R3,(R2)+ ^ ; YES TST025: CMP R2,EXTENT ; FINISHED? BLT TST020 ; NO SIO: BIC #177774,R0 ; ISOLATE I/O FDN REQUESTED MOV R0,FCNSW ; SAVE FOR LATER USE MOV #BUF,CMA ; SET UP CURRENT MEMORY ADDRESS MOV WORDCT,WCR ; SET UP WORD NEG WCR ; COUNT REGISTER MOV SECTOR,DAR ; SET UP START SECTOR SEC ; FOR GO BIT ROL R0 _ INITIALIZE BIT MAP JMP @INIT(R5) ; DO IT INIT = . .WORD INIT0 ; CLEAR ALLOCATION TABLE .WORD INIT1 ; SET ALLOCATION TABLE .WORD INIT2 ; USE PRESENT TABLE CONDITION .WORD INIT3 ; SET UP 101010.... INIT0 = . MOV #377,R0 ; DO EVERYTHING JSR PC,DALLO ; DEALLOCATE WHOE THING BR GETADR INIT1 = . MOV #377,R`= 7 F p"p&wq.55505+-*  pp$&pK.Mz70 5 X ( ".70   pp].U@ "}$00>8@G$ 0"0$>&8(@..0 w wUu-v0&a BNE TST070 ; UH-OH BIT #40000,FCN ; INCREMENTAL PATTERN? BEQ TST065 ; NO INC R3 ; YES TST065: CMP R2,EXTENT ; FINISHED BLT TST060 ; NO BR RSTART ; YES-RESTART TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA BR ERROR ; ; RESTART TEST AS DEFINED IN FCN ; RSTART = . TST RDWTSW ; READ WRITE REQb ; SET FUNCTION AND GO BITS CLR R4 ; USE TO COUNT DELAY TSTB FCN ; INTERRUPT MODE REQUESTED? BMI TST040 ; YES MOV R0,DCS ; START I/O FUNCTION TST030: INC R4 ; DELAY A LONG TIME BNE TST030 TSTB DCS ; CONTROLLER READY BMI IOCOMP ; YES-I/O COMPLETE TST035: MOV #1.,R0 ; NO-SHOULD HAVE COME IN BY NOW BR ERc0 ; DO EVERYTHING JSR PC,ALLO ; ALLOCATE WHOLE THING BR GETADR INIT2 = . TST FLD5 ; SOFTWARE TOO? BEQ GETADR ; NO MOV #-32.,R5 ; YES INIT21: MOV ALLTBL+32.(R5),BITTBL+32.(R5) ; COPY HARD- TO SOFT- TAB. ADD #2,R5 ; BUMP BLT INIT21 BR GETADR INIT3 = . MOV #125252,R0 ; ALTERNATE 1'S AND 0'S MOV \}.T @e   ` \} .z@` @`7  " &Q@eH pp peUEST? BEQ RST020 ; NO BIT #2,FCN ; FINISHED A READ? BNE RST010 ; YES BIC #7,FCN ; NO BIS #2,FCN ; SET TO READ BR TST015 RST010: BIC #7,FCN BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE RST020: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE BNE RST200 ; YES RST100: CLR R0 ; SIGNIFY NO ERROR BIT fROR ; ERROR ; ; SIO WITH INTERRUPT REQUEST PROCESSOR ; TST040 = . BIS #100,R0 ; SET INTERRUPT ENABLE CLR INTSW ; RESET INTERRUPT SWITCH MOV R0,DCS ; START I/O FUNCTION TST050: TST INTSW ; RECEIVE INTERRUPT? BNE IOCOMP ; YES-I/O COMPLETE INC R4 ; DELAY A LONG TIME BNE TST050 BR TST035 ; TOO LONG-ERROR ; ; g #-32.,R5 INIT31: MOV R0,ALLTBL+32.(R5) ; SET IN ALLOCATOR TABLE ADD #2,R5 ; BUMP BLT INIT31 ; NOT DONE YET BR INIT2 ; CHECK FOR SOFTWARE CHECK ; GETADR = . JSR PC,GETSB ; GO GET SB/NOB BR FCTN GETSB = . MOV FLD3,R5 ; GET SB/NOB FIELD JMP @SB(R5) ; DO IT SB = . .WORD SB0 ; SET BY OPERATOR h.,8^hfp@[g4@(.,8^h \}hph$ph&ph"4[Mhwqh.i..& 7 %%U5 a.L 7 EU0E(.rU'E EEp7.UPjEhUbrEPU@J.EHUBw P7 J7F   i#400,FCN ; LOOP REQUEST? BNE RST300 JMP TST012 RST200: INC DATA BR RST100 RST300: JMP TST015 ; ; ERROR ERROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUEST? BNE ERR1 ; YES HALT ERR1: MOV #400,DCS ; CLEAR DISC JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECj I/O COMPLETE-READY OR INTERRUPT ; IOCOMP = . MOV DCS,R0 ; GET ERROR INFO. BMI ERROR ; WHOOPS-ERROR TST FCN ; USER BUFFER SET-UP BMI RSTART ; YES-RESTART CMP #2.,FCNSW ; WAS IT A READ FUNCTION? BNE RSTART ; NO MOV #BUF,R2 ; COMPARE DATA IN BUFFER MOV DATA,R3 TST060: CMP R3,(R2)+ BNE TST070 ; UH-OH k .WORD SB1 ; SET BY INCREMENT FROM 0 .WORD SB2 ; SET BY RANDOM NUMBER GENERATOR .WORD SB2 ; 3 LOOKS LIKE 2 SB0 = . HALT ; WAIT FOR SWITCH SET WITH SB/NOB MOV SWR,SBNOB ; SET IT RTS PC SB1 = . INC SBNOB ; INCREMENT RTS PC SB2 = . JSR PC,RANDOM ; GENERATE RANDOM NUMBER RTS PC ; FC [g4.D   5q W 95. 5     .0E 5 '  d.VE  5qw 5 "hfp.|U  ~1 vzzEIVED FLAG RTI ; .END n BIT #40000,FCN ; INCREMENTAL PATTERN? BEQ TST065 ; NO INC R3 ; YES TST065: CMP R2,EXTENT ; FINISHED BLT TST060 ; NO BR RSTART ; YES-RESTART TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA BR ERROR ; ; RESTART TEST AS DEFINED IN FCN ; RSTART = . TST RDWTSW ; READ WRITE REQUEST? BEQ RST020 oTN: INC NLOOP MOV SBNOB,R0 ; GET START SB/NOB FOR ALL MOV R0,OSBNOB ; AND SAVE FOR A REPEAT (LOOP #4) MOV FLD4,R5 ; GET FUNCTION TYPE JMP @FCTNP(R5) ; FUNCTION PROCESSOR FCTNP = . .WORD FCTN0 ; SEARCH .WORD FCTN1 ; SEARCH MIN. .WORD FCTN2 ; ALLOCATE .WORD FCTN3 ; DEALLOCATE .WORD FCTN4 ; ALLOCATE-Dp&!,6h7 7 ϝ,\z E7E,7~ E7j E,7\E7R B}_, " L &u@e, 5@e },",22P  8 ,@7}L\bhnt~ ; X,f8 5 2q;* COMPUTER HALTS- ENTER FUNCTION AS FOLLOWS * ;* AND CONTINUE: * ;* BIT 15: = 0, WILL USE DATA GIVEN * ;* TO SET UP AND COMPARE BUFFER * ;* BIT 15: = 1, USER RESPONSIBLE FOR * ;* BUFFER. * ;* BIT 14: = 0, IF 15=0 THEN USE r ; NO BIT #2,FCN ; FINISHED A READ? BNE RST010 ; YES BIC #7,FCN ; NO BIS #2,FCN ; SET TO READ BR TST015 RST010: BIC #7,FCN BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE RST020 = . BIT #10000,FCN ; SECTOR INCREMENT? BEQ RST030 ; NO INC SECTOR CMP SECTOR,ENDSCT ; END? BLOS RST030 sEALLOCATE .WORD FCTN5 ; SEARCH-ALLOCATE-SWAB-DEALLLOCATE .WORD FCTN6 ; SEARCH MIN.-ALLOC-SWAB-DEALLO .WORD FCTN7 ; MIN SEARCH,ALL,NEW SB/NOB,DEALL. FCTN0 = . JSR PC,SRCH ; SEARCH BR RSTART FCTN1 = . JSR PC,MSRCH ; MINIMUM SEARCH BR RSTART FCTN2 = . JSR PC,ALLO ; ALLOCATE BR RSTART FCTN3 = . t z- 5U, ^ 5ph | ,B 5T J ^ Bd ,(} wpwn7;, `5 s 7 H ,$"h7 ,5Y 7a,J  QM7 [,p5=͸ 7VT X R,55t5<052+-Z(*z,Mz7J0H 5> 6X (Z,u * ;* DATA BUFFER FILLED WITH DATA * ;* BIT 14: = 1, IF 15=0 THEN DATA BUFFER * ;* FILLED WITH DATA,DATA+1,DATA+2,... * ;* BIT 13: = 1, INCREMENT DATA AFTER * ;* EACH CYCLE SO DATA BUFFER WILL CHANGE * ;* EACH CYCLE. * ;* BIT 12: = 1, INCREMENT SECv ; NOT YES MOV STSCT,SECTOR ; RE-PRIME START SECTOR BIT #4000,FCN ; HALT OR CONTINUE BEQ RST030 ; GO HALT ; WAIT RST030: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE? BNE RST200 ; YES RST100: CLR R0 ; SIGNIFY NO ERROR BIT #400,FCN ; LOOP REQUEST? BNE RST300 JMP TST012 RST200: INC DATA BR RST100 RST300: JMP TST015 ; wJSR PC,DALLO ; DEALLOCATE BR RSTART FCTN4 = . JSR PC,ALLO ; ALLOCATE JSR PC,DALLO ; DEALLOCATE BR RSTART FCTN5 = . JSR PC,SRCH BIT #ALFND,ALFR ; GOT SOMETHING BNE 10$ ; NO MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT 10$: SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART FCTN6 = x70 ,U@ "}$00>8@,.0 w wUu-,T@e   `,z@` @`7 $><:dbQ@e,, 7 %%U5 ,  7 EU0EW,0U'E EEpfyTOR AFTER * ;* EACH CYCLE. * ;* BIT 11: = 1, HALT AFTER END SECTOR * ;* REACHED, OTHERWISE LOOP BACK TO * ;* BEGIN SECTOR. * ;* BIT 9: = 0, IF ERROR OCCURS-HALT * ;* BIT 9: = 1, IF ERROR OCCURS-CLEAR * ;* DISC AND RETRY (ER ; ERROR ERROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUEST? BNE ERR1 ; YES HALT ERR1: MOV #400,DCS ; CLEAR DISC JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECEIVED FLAG RTI ; .END { . JSR PC,MSRCH BIT #ALFND,ALFR ; GOT SOMETHING BNE 20$ ; NO MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT 20$: SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART ; FCTN7 = . JSR PC,MSRCH BIT #ALFND,ALFR ; GOT SOMETHING BNE 30$ ; NO BNE RSTART MOV ALAR,R0 ; YES ,VUPjEhUbrEPU@JF,|EHUBw P7 J7F   ,D   5q W 95,5     ,E 5 '  ݔ,E  5qw J5 ,:U  ~`` vzzr&f&M~ }ROR LOOP). * ;* BIT 8: = 0, WILL HALT AND WAIT FOR * ;* DATA RESPONSE AFTER EACH I/O COMPLETE. * ;* BIT 8: = 1, WILL CONTINUALLY REPEAT * ;* XFER UNTIL ERROR OCCURS (LOOP MODE). * ;* BIT 7: = 0, XFER WITHOUT DISC * ;* INTERRUPT. * ;* BIT 7: = 1~$  >  tKc >, X\`dhlS,& pt 0,L (7E  " m,r   7 E   e, ސEU|v5, np\lZV5 , "Ba`7B55@. ,, !E7 "? @  G,0! ? ^U@7 ? ,V! O %",|! 5 JSR PC,ALLO 30$: JSR PC,GETSB ; GET A NEW SB/NOB MOV SBNOB,R0 JSR PC,DALLO ; RSTART = . MOV FLD2,R5 ; GET RESTART PROCEDURE JMP @RST(R5) ; DO IT RST = . .WORD RST0 ; SINGLE CYCLE .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; ON RESTART SAME AS OTHER LOOPS ; UPDATE 20 JUN 73 DSCTST.S10 ; UPDATE 19 JUN 73 DSCTST.S09 ; UPDATE 12/6/72 DSCTST.S08 ; UPDATE 7/6/72 DSCTST.S07 ; UPDATE 6/28/72 DSCTST.S06 ; UPDATE 4/5/72 DSCTST.S05 ; UPDATE 2/10/72 DCSTST.S04 ; UPDATE 1/17/72 DCSTST.S03 ; UPDATE 12/20/71 DCSTST.S02 ; UPDATE 12/17/71 DCSTST.S01 .TITLE DSCTST ;*********************************************, USE DISC INTERRUPT. * ;* BIT 6: = UNUSED * ;* BITS 5:3 = DISC UNIT TO USE FOR TEST * ;* BITS 2:0 = I/O FUNCTION * ;* 0 = NOP * ;* 1 = WRITE * ;* 2 = READ * ;* @ 6 5,!EU|EtUn5hD,! ^-ZhdP5N5 D w,!5:w 2w5$"w > .WORD RST1 ; LOOP RST0 = . CLR R0 ; NO ERROR JMP CALDG1 ; START AGAIN AT FRIST HALT RST1 = . JMP CALDG2 ; START FROM SWR PICKUP ; ; ; NOTE: R0 HAS SB/NOB FOR REQUEST ; DALLO = . MOV R0,ALRR MOV #4,ALFR ; START DEALLOCATION JSR PC,TIMOUT ; TIME OUT APPRPRPIATELY BIT #ALBUSY,ALFR ; MAKE IT IN TIME? ************************** ;* * ;* DISC TEST PROGRAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER 3 = WRITE CHECK * ;* 4 = WRITE THEN READ * ;* NOTE: A CYCLE IS THE WRITE * ;* THEN READ. * ;* COMPUTER HALTS- DATA REQUEST HALT: * ;* IF FCN BIT 15 IS SET USER MAY NOW * ;* SET OR CHECK DATA BUFFER, OTHERWISE, * ;* DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1 PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY 1 ; UPDATE 20 JUN 73 DSCTST.S10 2 ; UPDATE 19 JUN 73 DSCTST.S09 3 ; UPDATE 12/6/72 DSCTST.S08 4 ; UPDATE 7/6/72 DSCTST.S07 5 ; UPDATE 6/28/72 DSCTST.S06 6 ; UPDATE 4/5/72 DSCTST.S05 7 ; UPDATE 2/10/72 DBNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE DALL1 ; YES RTS PC ; NO DALL1: MOV R0,B3RR MOV #4,B3FR JSR PC,DALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER1 RTS PC ; ALLO = . MOV R0,ALRR MOV #10,ALFR ; START ALLOCATION JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BINO. OF WORDS IN XFER * ;* AND CONTINUE. * ;* NOTE: MAKE SURE THE I/O BUFFER ADDRESS* ;* PLUS THE WORD COUNT * 2 DOES NOT* ;* EXCEED THE TOP OF MEMORY OR * ;* 157776, WHICHEVER IS THE SMALLER* ;* THE BUFFER STARTS AT THE END OF * ;* DATA IN SWITCHES WILL BE USED. * ;* CONTINUE AND XFER IS ATTEMPTED. * ;* OR * ;* IF BIT 12 SET IN FUNCTION: COMPUTER HALTS- SET END * ;* SECTOR OF SECTOR INCREMENT-THEN * ;* CONTINUE. $ ;* * ;* IF IN A NOCSTST.S04 8 ; UPDATE 1/17/72 DCSTST.S03 9 ; UPDATE 12/20/71 DCSTST.S02 10 ; UPDATE 12/17/71 DCSTST.S01 11 .TITLE DSCTST 12 ;*********************************************************************** 13 ;* * 14 ;* DISC TEST PROGRAM * 15 ;* T #ALBUSY,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE ALL1 ; YES RTS PC ; NO ALL1: MOV R0,B3RR MOV #10,B3FR JSR PC,ALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER2 RTS PC ; SRCH = . BIC SMASK,R0 ; MASK OUT BAD SEARCH ADRESSES MOV R0,ALRR THIS DIAGNOSTIC. * ;* COMPUTER HALTS- ENTER FUNCTION AS FOLLOWS * ;* AND CONTINUE: * ;* BIT 15: = 0, WILL USE DATA GIVEN * ;* TO SET UP AND COMPARE BUFFER * ;* BIT 15: = 1, USER RESPONSIBLE FOR * ;* BUFFER. * ;* N-LOOP MODE OR LOOP MODE AFTER AN ERROR, WHEN THE * ;* I/O XFER IS COMPLETE THE R0 DISPLAY HAS THE FOLLOWING * ;* MEANING: * ;* 0 = XFER OK * ;* 1 = XFER ATTEMPTED BUT AFTER APPROX. 150 MSEC., * ;* CONTROLLER WAS NOT READY OR DIDN'T GIVE INTERRUPT * ;* 2 = DATA DID NOT COMPARE TO DATA ENTERED AFTER * ;* .[g4( [g4h&f&M MOV #20,ALFR ; START SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #ALBUSY,ALFR ; MAKE IT IN TIME BNE TIMERR ; NO MOV ALAR,LALAR ; SAVE AR TST FLD5 ; SOFTWARE TOO? BNE SRCH1 ; YES RTS PC ; NO ; ALL SEACHES END UP HERE SRCH1: MOV R0,B3RR MOV #20,B3FR SRCH2: JSR PC,SEARCH JSR PC,SOFTCP ; COMPAR W BIT 14: = 0, IF 15=0 THEN USE * ;* DATA BUFFER FILLED WITH DATA * ;* BIT 14: = 1, IF 15=0 THEN DATA BUFFER * ;* FILLED WITH DATA,DATA+1,DATA+2,... * ;* BIT 13: = 1, INCREMENT DATA AFTER * ;* EACH CYCLE SO DATA BUFFER WILL CHANGE * ;* EACH CYCLE. * ;* A READ * ;* OTHER = AN ERROR OCCURRED FROM THE DISC CONTROLLER * ;* AND THE DCS IS DISPLAYED. ;* * ;* COMPUTER WILL NOW HALT AT DATA RESPONSE HALT. MAY CONTINUE * ;* WITH SAME SECTOR AND WORD COUNT FROM HERE. * ;* * ;* PROGRAMMERS: .hfp(hfph ; UPDATE 8/23/72 ROS3.SYS ; UPDATE 8/17/72 ROS3.SYS ; UPDATE 8/15/72 ROS3.SYS ; UPDATE 8/1/72 ROS3.SYS ; UPDATE 7/31/72 ROS3.SYS ; UPDATE 7/28/72 ROS3.SYS ; UPDATE 07.21.72 ROS3.SYS ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 1 ;1 = 11/45 0 = NOT 11/45 $1125 = 0 ;1 = 11/25 0 = NOT 11/25 $1120 = 0 ITH SOFTWARE TABLE BNE HDER3 BIT #ALFND,ALFR ; FIND AREA? (HARDWARE) BEQ SRCH3 ; YES BIT #B3FND,B3FR ; FIND AREA? (SOFTWARE) BEQ HDER4 BR SRCH4 SRCH3: BIT #B3FND,B3FR ; BOTH HAD BETTER FIND IT! BNE HDER4 ; THEY DIDN'T. CMP ALAR,B3AR BNE HDER5 SRCH4: RTS PC ; OK ; MSRCH = . BIC SMASK,R0 ; MASK O53 & 54 * ;* * ;*********************************************************************** ; ; ; ; REGISTER EQUATES ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; PSR = 177776 ; PROCESSOR STATUS REGISTER SWR = 177570 ; SWITCH REGISTER BIT 12: = 1, INCREMENT SECTOR AFTER * ;* EACH CYCLE. * ;* BIT 11: = 1, HALT AFTER END SECTOR * ;* REACHED, OTHERWISE LOOP BACK TO * ;* BEGIN SECTOR. * ;* BIT 9: = 0, IF ERROR OCCURS-HALT * ;* BIT 9: = 1, IF ERROR OCCURS-CLEAR * ;* ;1 = 11020 OR LESS (11/05, ETC.) $KT11C = 1 ;1 = KT11C SEGMENTATION ;0 = NO SEGMENTATION $FPP = 0 ;1 = FLOATING POINT PROCESSOR IS IN SYSTEM .IFZ $1125!$1145 .IFNZ $KT11C!$FPP XXXXXXXX .ENDC .ENDC $RASM = 1 ;1 = ASSEMBLER IS IN SYSTEM .IFG $KT11C-1 XXXXXXXX .ENDC $DELAY = 2 ;INDICATES TYPE UT BAD SEARCH ADRESSES MOV R0,ALRR MOV #60,ALFR ; START MIN SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #ALBUSY,ALFR ; DONE IN TIME? BNE TIMERR ; NO MOV ALAR,LALAR TST FLD5 ; SOFTWARE TOO? BNE MSRCH1 ; YES RTS PC ; NO MSRCH1: MOV R0,B3RR MOV #60,B3FR BR SRCH2 ; TIMERR = . ; ; BEGIN: ; BEGINNING OF DIAG. ; ; CELLS CONTAINING DISC REGISTERS TO USE - SET DYNAMICALLY ; DCS: .WORD 0 ; STATUS & CONTROL WCR: .WORD 0 ; WORD COUNT CMA: .WORD 0 ; CURRENT MEMORY ADDRESS DAR: .WORD 0 ; DISC ADDRESS DER: .WORD 0 ; DISC ERROR ; ; TABLE OF EACH DISC'S STATUS REGISTER & OF TRANSFER VECTORS ; REG: .WORD 165300,165320,165340,165360,165700,165720,16 DISC AND RETRY (ERROR LOOP). * ;* BIT 8: = 0, WILL HALT AND WAIT FOR * ;* DATA RESPONSE AFTER EACH I/O COMPLETE. * ;* BIT 8: = 1, WILL CONTINUALLY REPEAT * ;* XFER UNTIL ERROR OCCURS (LOOP MODE). * ;* BIT 7: = 0, XFER WITHOUT DISC * ;* INTERRUPT. *OF MEMORY AND IS USED ;IN SOME DELAY LOOPS ;1 = 1.2 US CORE ;2 = 850 NS CORE ;3 = 11/45 SOLID STATE MEMORY ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 .IFNZ $FPP AC0 = %0 ; AC1 = MOV #100000,R0 ; SET TIME OUT ERROR BIT BR ERROR ; HDER1: MOV #1,R0 BR HDERR HDER2: MOV #2,R0 BR HDERR HDER3: MOV #3,R0 BR HDERR HDER4: MOV #4,R0 BR HDERR HDER5: MOV #5,R0 HDERR: BIS #40000,R0 ERROR = . INC NERROR MOV FLD2,R5 JMP @ERR(R5) ERR = . .WORD ERR0 ; SINGLE CYCLE-TRY AGAIN .W5740,165760 TV: .WORD 130,134,140,144,150,154,160,164 SECTOR: .WORD 0 WORDCT: .WORD 0 FCN: .WORD 0 DATA: .WORD 0 FCNSW: .WORD 0 EXTENT: .WORD 0 INTSW: .WORD 0 RDWTSW: .WORD 0 ENDSCT: .WORD 0 STSCT: .WORD 0 ; START = . MOV #BEGIN,SP ; SET UP STACK POINTER HALT ; WAIT FOR START SECTOR MOV SWR,SECTOR ; SAVE START SECTOR HALT ; WAIT FOR NO. OF WORD ;* BIT 7: = 1, USE DISC INTERRUPT. * ;* BIT 6: = UNUSED * ;* BITS 5:3 = DISC UNIT TO USE FOR TEST * ;* BITS 2:0 = I/O FUNCTION * ;* 0 = NOP * ;* 1 = WRITE * ;* 2 = READ %1 ;FLOATING AC2 = %2 ; POINT AC3 = %3 ; ACCUMULATOR AC4 = %4 ; DEFINITIONS AC5 = %5 ; .ENDC ; .IFNZ $KT11C $ROSM = 100000 ;ROS MASK FOR SYSTEM TASKS TO USE .ENDC ;TO 'OR' WITH ROS ADDRESSES TO POINT .IFZ $KT11C ; TO USER ASR 4 $ROSM = 0 ; .ENDC PS = ORD ERR0 ; LOOP BUT HALT ON ERROR, THEN RETRY. .WORD ERR2 ; IGNORE .WORD ERR1 ; LOOP RETRY FUNCTION WITHOUT HALTING .WORD ERR3 ; RESET SB/NOB IF ERROR .WORD ERR0 ; SAME AS 1 ERR0 = . TST (SP)+ ; POP OFF RETURN PC HALT JMP FCTN ; RETRY FUNCTION ERR1 = . TST (SP)+ ; POP OFF RETURN PC JMP FCS MOV SWR,R0 MOV R0,WORDCT ; SAVE WORD COUNT HALT ; WAIT FOR FCN WORD MOV SWR,R0 ; GET INFO & SET UP FOR SELECTED DISC BIC #177707,R0 ; GET THE 3 BITS ASR R0 ; ASR R0 ; AND SHIFT INTO A WORD INDEX MOV TV(R0),R1 ; GET ADDRESS OF THIS DISC'S TRAN. VEC. MOV #DSCINT,(R1)+ ; SET UP ADD FOR INTERRUPT HANDLER MOV * ;* 3 = WRITE CHECK * ;* 4 = WRITE THEN READ * ;* NOTE: A CYCLE IS THE WRITE * ;* THEN READ. * ;* COMPUTER HALTS- DATA REQUEST HALT: * ;* IF FCN BIT 15 IS SET USER MAY NOW * ;* SET OR CHECK DATA BUFFER 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $CORAL = 0 ; CORE ALLOCATION ; =0 SOFTWARE ; =1 HARDWARE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 10. ; NO. OF SOFTWARE PRIORITY LEVELS PRIBKG = NPRIOR ; PRIORITY OF BACKGROUND $BATCH = 1 ; BATCH OPTION .IFLE NPRIOR ; XXXXXXXX TN ; RETRY FUNCTION ERR2 = . RTS PC ; INGORE ERR3 = . MOV OSBNOB,SBNOB ; RESTORE SB/NOB FOR RETRY. RTS PC ; SOFTCP = . MOV #-32.,R5 BIS #100000,BITTBL+30. ; MAKE LAST BIT SAME AS HARDWARE SOFC1: CMP BITTBL+32.(R5),ALLTBL+32.(R5) ;SOFT = HARD (TABLE)? BNE SOFC2 ADD #2,R5 BLT SOFC1 ; NOT DONE YET CLR R5 #240,(R1) ; AND LEVEL OF INTERRUPT (5) MOV REG(R0),R0 ; NOW SET UP REGISTERS (IE. THEIR ADDRESS) MOV #5,R1 ; NUMBER OF REGISTERS TO SET UP MOV #DCS,R2 ; ADDRESS OF FIRST OF TABLE OF REG. ADDRESS 10$: MOV R0,(R2)+ ; SET UP A CELL (IE. A REGISTERS ADDRESS) TST (R0)+ ; BUMP ADDRESS TO STICK INTO CELL DEC R1 ; COUNT NUMBER OF CELLS TO DO BGT 10$ , OTHERWISE, * ;* DATA IN SWITCHES WILL BE USED. * ;* CONTINUE AND XFER IS ATTEMPTED. * ;* OR * ;* IF BIT 12 SET IN FUNCTION: COMPUTER HALTS- SET END * ;* SECTOR OF SECTOR INCREMENT-THEN * ;* CONTINUE. $ ;* ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 20 ; MAX # OF CORE TASKS IN SYSTEM NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 0 ; SYSTEM OVERLAY OPTION ;0 = N ; OK-SET C.C = 0 SOFC2: RTS PC ; ; ; NOTE: DELAY = 2 FOR 23 USEC-11/20 ; ; JSR PC,TIMOUT 7.0 ; MOV DELAY,R5 5.0 ; DEC R5 2.3 ; BNE .-2 2.6 OR 1.7 ; RTS PC 3.5 ; TOTALS 24.4 FOR DELAY = 2 ; TIMOUT = . MOV DELAY,R5 X: DEC R5 BNE X RTS PC ; ; ; SBNOB CONTAINS OLD NUMBER ON ENTRY ; ; MORE TO COME CLR RDWTSW ; CLEAR READ WRITE SWITCH MOV SWR,R0 BIC #177770,R0 ; ISOLATE FUNCTION CMP R0,#4 ; IS IT WRITE/READ? BNE TST011 ; NO INC RDWTSW ; SET WRITE/READ SWITCH MOV SWR,FCN BIC #7,FCN BIS #1,FCN ; START WITH WRITE BR TST012 TST011: MOV SWR,FCN ; SAVE TST012: HALT ; WAIT FOR * ;* IF IN A NON-LOOP MODE OR LOOP MODE AFTER AN ERROR, WHEN THE * ;* I/O XFER IS COMPLETE THE R0 DISPLAY HAS THE FOLLOWING * ;* MEANING: * ;* 0 = XFER OK * ;* 1 = XFER ATTEMPTED BUT AFTER APPROX. 150 MSEC., * ;* CONTROLLER WAS NOT READY OR DIDN'T GIVE INTERRUPT * ;* 2 = DATA DID NOT COMPAREO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 140 ; MAX # OF OVERLAY TASKS IN SYSTEM .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NEW RANDOM NUMBER ON EXIT ; ; USES (2**9+3)RN AS ALGORITHM ; USES R0 AND R1 ; RANDOM = . MOV SBNOB,R0 BNE RAND01 INC R0 ; MAKE SURE DON'T START ON ZERO RAND01: MOV R0,R1 ADD R0,R0 ADD R1,R0 ; TIMES THREE ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 DATA PATTERN OR ; ; LET USER DO BUFFER SET-UP OR COMPARE MOV SWR,DATA ; SAVE JUST INCASE DATA PATTERN BIT #10000,FCN ; SECTOR INCREMENT? BEQ TST015 ; NO HALT ; YES-WAIT FOR END SECTOR MOV SWR,ENDSCT MOV SECTOR,STSCT ; SAVE START SECTOR TST015: MOV FCN,R0 ; GET FCN WORD BMI SIO ; USER'S BUFFER IS SET-UP,START I/ TO DATA ENTERED AFTER * ;* A READ * ;* OTHER = AN ERROR OCCURRED FROM THE DISC CONTROLLER * ;* AND THE DCS IS DISPLAYED. ;* * ;* COMPUTER WILL NOW HALT AT DATA RESPONSE HALT. MAY CONTINUE * ;* WITH SAME SECTOR AND WORD COUNT FROM HERE. * ;* NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXXXXXX ;NTASK MUST BE <= MXTASK .ENDC .IFNZ OVRLAY ; ; STATE SIZE OF DYNAMIC CORE STORAGE IN ROS ; $DYNSZ = 54000 ; RESERVE DYNAMIC CORE POOL .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTI ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; ; SAVE = . ; SAVE OLD INFO MOV #PRESTR,R1 MOV #-32.,R5 MOV B3RR,(R1)+ MOV B3AR,(R1)+ MOV B3FR,(R1)+ MOV ALAR,(R1)+ MOV ALFR,(R1)+ SAV1: MOV ALLTBL+32.(R5),(R1)+ ADD #2,R5 BLT SAV1 RTS PC .END O MOV DATA,R3 ; SET UP TO STORE DATA BIT #1.,R0 ; WRITE OR WRITE CHECK? BNE TST016 ; YES-FILL DATA BUFFER WITH PATTERN CLR R3 ; NO-CLEAR DATA BUFFER FOR READ TST016: MOV #BUF,R2 ; BUFFER ADDRESS MOV WORDCT,R4 ADD R4,R4 ADD R2,R4 ; TO THIS ADDRESS MOV R4,EXTENT ; SAVE FOR FUTURE USE TST020: MOV R3,(R2)+ BIT #1., * ;* PROGRAMMERS: 53 & 54 * ;* * ;*********************************************************************** ; ; ; ; REGISTER EQUATES ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; PSR = 177776 ; PROCESSOR STATUS REGISTER SWR ES ; +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 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY PROPERTY LEVEL 3 PRIP04 = 1 ; PRIORITY PROPERTY LEVEL 4 PRIP05 = -1 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = R0 ; WRITE OR WRITE CHECK? BEQ TST025 ; NO BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? BEQ TST025 ; NO INC R3 ; YES TST025: CMP R2,EXTENT ; FINISHED? BLT TST020 ; NO SIO: BIC #177774,R0 ; ISOLATE I/O FDN REQUESTED MOV R0,FCNSW ; SAVE FOR LATER USE MOV #BUF,@CMA ; SET UP CURRENT MEMORY ADDRESS VIA TABLE MOV = 177570 ; SWITCH REGISTER ; ; BEGIN: ; BEGINNING OF DIAG. ; ; CELLS CONTAINING DISC REGISTERS TO USE - SET DYNAMICALLY ; DCS: .WORD 0 ; STATUS & CONTROL WCR: .WORD 0 ; WORD COUNT CMA: .WORD 0 ; CURRENT MEMORY ADDRESS DAR: .WORD 0 ; DISC ADDRESS DER: .WORD 0 ; DISC ERROR ; ; TABLE OF EACH DISC'S STATUS REGISTER & OF TRANSFER VECTORS ; REG: .WORD -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = -1 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = -1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = -1 ; PRIORITY PROPERTY LEVEL 9 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 * 16 ;* START PROGRAM: * 17 ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * 18 ;* AND CONTINUE. * 19 ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * 20 ;* AND CONTINUE. * 21 ;* WORDCT,@WCR ; & WORD COUNT OF TRAN. ( ALSO VIA TABLE) NEG @WCR ; WORD COUNT MUST BE IN 2'S COMPLEMEMT FORM MOV SECTOR,@DAR ; ALSO SET UP DISK ADDRESS ( AGAIN VIA TABLE) SEC ; FOR GO BIT ROL R0 ; SET FUNCTION AND GO BITS CLR R4 ; USE TO COUNT DELAY TSTB FCN ; INTERRUPT MODE REQUESTED? BMI TST040 ; YES MOV R0,@DCS 165300,165320,165340,165360,165700,165720,165740,165760 TV: .WORD 130,134,140,144,150,154,160,164 SECTOR: .WORD 0 WORDCT: .WORD 0 FCN: .WORD 0 DATA: .WORD 0 FCNSW: .WORD 0 EXTENT: .WORD 0 INTSW: .WORD 0 RDWTSW: .WORD 0 ENDSCT: .WORD 0 STSCT: .WORD 0 ; START = . MOV #BEGIN,SP ; SET UP STACK POINTER HALT ; WAIT FOR START SECTOR MOV SWR,SECTOR ; SAVE START SECTOR HA ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .IFNZ OVRLAY ; .IFL 16.-NPRIOR XXXXXXXX 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 ; NOTE: MAKE SURE THE I/O BUFFER ADDRESS* 22 ;* PLUS THE WORD COUNT * 2 DOES NOT* 23 ;* EXCEED THE TOP OF MEMORY OR * 24 ;* 157776, WHICHEVER IS THE SMALLER* 25 ;* THE BUFFER STARTS AT THE END OF * 26 ;* THIS DIAGNOSTIC. * 27 ;* ; START I/O FUNCTION VIA TABLE TST030: INC R4 ; DELAY A LONG TIME BNE TST030 TSTB @DCS ; CONTROLLER READY? VIA TABLE BMI IOCOMP ; YES-I/O COMPLETE TST035: MOV #1.,R0 ; NO-SHOULD HAVE COME IN BY NOW BR ERROR ; ERROR ; ; SIO WITH INTERRUPT REQUEST PROCESSOR ; TST040 = . BIS #100,R0 ; SET INTERRUPT ENABLE CLR INTSW ; RESELT ; WAIT FOR NO. OF WORDS MOV SWR,R0 MOV R0,WORDCT ; SAVE WORD COUNT HALT ; WAIT FOR FCN WORD MOV SWR,R0 ; GET INFO & SET UP FOR SELECTED DISC BIC #177707,R0 ; GET THE 3 BITS ASR R0 ; ASR R0 ; AND SHIFT INTO A WORD INDEX MOV TV(R0),R1 ; GET ADDRESS OF THIS DISC'S TRAN. VEC. MOV #DSCINT,(R1)+ ; SEPRIORITY 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. ; 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 = 10. ; NO. COMPUTER HALTS- ENTER FUNCTION AS FOLLOWS * 28 ;* AND CONTINUE: * 29 ;* BIT 15: = 0, WILL USE DATA GIVEN * 30 ;* TO SET UP AND COMPARE BUFFER * 31 ;* BIT 15: = 1, USER RESPONSIBLE FOR * 32 ;* BUFFER. * 33 ;* T INTERRUPT SWITCH MOV R0,@DCS ; STRAT I/O UP VIA TABLE TST050: TST INTSW ; RECEIVE INTERRUPT? BNE IOCOMP ; YES-I/O COMPLETE INC R4 ; DELAY A LONG TIME BNE TST050 BR TST035 ; TOO LONG-ERROR ; ; I/O COMPLETE-READY OR INTERRUPT ; IOCOMP = . MOV @DCS,R0 ; GET STATUS OF FUNCTION VIA TABLE BMI ERROR ; WHOOPS-ERROR T UP ADD FOR INTERRUPT HANDLER MOV #240,(R1) ; AND LEVEL OF INTERRUPT (5) MOV REG(R0),R0 ; NOW SET UP REGISTERS (IE. THEIR ADDRESS) MOV #5,R1 ; NUMBER OF REGISTERS TO SET UP MOV #DCS,R2 ; ADDRESS OF FIRST OF TABLE OF REG. ADDRESS 10$: MOV R0,(R2)+ ; SET UP A CELL (IE. A REGISTERS ADDRESS) TST (R0)+ ; BUMP ADDRESS TO STICK INTO CELL DEC R1 ; COUNT NUMBER OF CEOF ENTRYS QPART LEVEL 5 NEQP06 = 10. ; NO. OF ENTRYS QPART LEVEL 6 NEQP07 = 10. ; NO. OF ENTRYS QPART LEVEL 7 NEQP08 = 10. ; NO. OF ENTRYS QPART LEVEL 8 NEQP09 = 10. ; NO. OF ENTRYS QPART LEVEL 9 NEQP10 = 10. ; NO. OF ENTRYS QPART LEVEL 10 NEQP11 = 0. ; NO. OF ENTRYS QPART LEVEL 11 NEQP12 = 0. ; NO. OF ENTRYS QPART LEVEL 12 NEQP13 = 0. BIT 14: = 0, IF 15=0 THEN USE * 34 ;* DATA BUFFER FILLED WITH DATA * 35 ;* BIT 14: = 1, IF 15=0 THEN DATA BUFFER * 36 ;* FILLED WITH DATA,DATA+1,DATA+2,... * 37 ;* BIT 13: = 1, INCREMENT DATA AFTER * 38 ;* EACH CYCLE SO DATA BUFFER WILL CHANGE * 39 ; TST FCN ; USER BUFFER SET-UP BMI RSTART ; YES-RESTART CMP #2.,FCNSW ; WAS IT A READ FUNCTION? BNE RSTART ; NO MOV #BUF,R2 ; COMPARE DATA IN BUFFER MOV DATA,R3 TST060: CMP R3,(R2)+ BNE TST070 ; UH-OH BIT #40000,FCN ; INCREMENTAL PATTERN? BEQ TST065 ; NO INC R3 ; YES TST065: CMP R2,EXTENT LLS TO DO BGT 10$ ; MORE TO COME CLR RDWTSW ; CLEAR READ WRITE SWITCH MOV SWR,R0 BIC #177770,R0 ; ISOLATE FUNCTION CMP R0,#4 ; IS IT WRITE/READ? BNE TST011 ; NO INC RDWTSW ; SET WRITE/READ SWITCH MOV SWR,FCN BIC #7,FCN BIS #1,FCN ; START WITH WRITE BR TST012 TST011: MOV SWR,FCN ; SAVE ; NO. OF ENTRYS QPART LEVEL 13 NEQP14 = 0. ; NO. OF ENTRYS QPART LEVEL 14 NEQP15 = 0. ; 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 = 4. $SB003 = 4. $SB004 = 4. $SB005 = 4. $SB006 = 4. $SB007 = 12. $SB008 = 12. * EACH CYCLE. * 40 ;* BIT 12: = 1, INCREMENT SECTOR AFTER * 41 ;* EACH CYCLE. * 42 ;* BIT 11: = 1, HALT AFTER END SECTOR * 43 ;* REACHED, OTHERWISE LOOP BACK TO * 44 ;* BEGIN SECTOR. * 45 ; FINISHED BLT TST060 ; NO BR RSTART ; YES-RESTART TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA BR ERROR ; ; RESTART TEST AS DEFINED IN FCN ; RSTART = . TST RDWTSW ; READ WRITE REQUEST? BEQ RST020 ; NO BIT #2,FCN ; FINISHED A READ? BNE RST010 ; YES BIC #7,FCN ; NO BIS #2,FCN TST012: HALT ; WAIT FOR DATA PATTERN OR ; ; LET USER DO BUFFER SET-UP OR COMPARE MOV SWR,DATA ; SAVE JUST INCASE DATA PATTERN BIT #10000,FCN ; SECTOR INCREMENT? BEQ TST015 ; NO HALT ; YES-WAIT FOR END SECTOR MOV SWR,ENDSCT MOV SECTOR,STSCT ; SAVE START SECTOR TST015: MOV FCN,R0 ; GET FCN WORD BMI SIO $SB009 = 12. $SB010 = 12. $SB011 = 0. $SB012 = 0. $SB013 = 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 TH ;* BIT 9: = 0, IF ERROR OCCURS-HALT * 46 ;* BIT 9: = 1, IF ERROR OCCURS-CLEAR * 47 ;* DISC AND RETRY (ERROR LOOP). * 48 ;* BIT 8: = 0, WILL HALT AND WAIT FOR * 49 ;* DATA RESPONSE AFTER EACH I/O COMPLETE. * 50 ;* BIT 8: = 1, WILL CONTINUALLY REPEAT * ; SET TO READ BR TST015 RST010: BIC #7,FCN BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE RST020 = . BIT #10000,FCN ; SECTOR INCREMENT? BEQ RST030 ; NO INC SECTOR CMP SECTOR,ENDSCT ; END? BLOS RST030 ; NOT YES MOV STSCT,SECTOR ; RE-PRIME START SECTOR BIT #4000,FCN ; HALT OR CONTINUE BEQ RST030 ; GO ; USER'S BUFFER IS SET-UP,START I/O MOV DATA,R3 ; SET UP TO STORE DATA BIT #1.,R0 ; WRITE OR WRITE CHECK? BNE TST016 ; YES-FILL DATA BUFFER WITH PATTERN CLR R3 ; NO-CLEAR DATA BUFFER FOR READ TST016: MOV #BUF,R2 ; BUFFER ADDRESS MOV WORDCT,R4 ADD R4,R4 ADD R2,R4 ; TO THIS ADDRESS MOV R4,EXTENT ; SAVE FOR FUTURE USE TSAT PRIORITY ; .IFL PRIP01 $PS001 = $NBLKS-$SB001 .ENDC .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 XXXX 51 ;* XFER UNTIL ERROR OCCURS (LOOP MODE). * 52 ;* BIT 7: = 0, XFER WITHOUT DISC * 53 ;* INTERRUPT. * DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY 54 ;* BIT 7: = 1, USE DISC INTERRUPT. * 55 ;* HALT ; WAIT RST030: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE? BNE RST200 ; YES RST100: CLR R0 ; SIGNIFY NO ERROR BIT #400,FCN ; LOOP REQUEST? BNE RST300 JMP TST012 RST200: INC DATA BR RST100 RST300: JMP TST015 ; ; ERROR ERROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUEST? BNE ERR1 ; YES T020: MOV R3,(R2)+ BIT #1.,R0 ; WRITE OR WRITE CHECK? BEQ TST025 ; NO BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? BEQ TST025 ; NO INC R3 ; YES TST025: CMP R2,EXTENT ; FINISHED? BLO TST020 ; NO SIO: BIC #177774,R0 ; ISOLATE I/O FDN REQUESTED MOV R0,FCNSW ; SAVE FOR LATER USE MOV #BUF,@CMA ; SET UP CURREXXXX ; PRI 2 TOO LARGE .ENDC .ENDC .IFL 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 WOR BIT 6: = UNUSED * 56 ;* BITS 5:3 = DISC UNIT TO USE FOR TEST * 57 ;* BITS 2:0 = I/O FUNCTION * 58 ;* 0 = NOP * 59 ;* 1 = WRITE * 60 ;* 2 = READ * 61 ;* HALT ERR1: MOV #400,@DCS ; CLEAR DISK AFTER ERROR VIA TABLE JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECEIVED FLAG RTI ; BUF: ; START OF DISC BUFFER - HERE TO END OF CORE!!! .END START ; NT MEMORY ADDRESS VIA TABLE MOV WORDCT,@WCR ; & WORD COUNT OF TRAN. ( ALSO VIA TABLE) NEG @WCR ; WORD COUNT MUST BE IN 2'S COMPLEMEMT FORM MOV SECTOR,@DAR ; ALSO SET UP DISK ADDRESS ( AGAIN VIA TABLE) SEC ; FOR GO BIT ROL R0 ; SET FUNCTION AND GO BITS CLR R4 ; USE TO COUNT DELAY TSTB FCN ; INTERRUPT MODE REQUESTED? BMI TST040 DS .IFL $NBLKS-$SB004-$PS004 XXXXXXXX ; PRI 4 TOO LARGE .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 3 = WRITE CHECK * 62 ;* 4 = WRITE THEN READ * 63 ;* NOTE: A CYCLE IS THE WRITE * 64 ;* THEN READ. * 65 ;* COMPUTER HALTS- DATA REQUEST HALT: * 66 ;* IF FCN BIT 15 IS SET USER MAY NOW * 67 ;* $ > =c x,X\`dhlq,&pt0,L(7E  ,r 7 E   ,EU|v5J,np\lZV5 ,Ba`7B55@. ,P, E7 ? @  ,0 ? ^U@7 ? ,V O %,| 5 ; YES MOV R0,@DCS ; START I/O FUNCTION VIA TABLE TST030: INC R4 ; DELAY A LONG TIME BNE TST030 TSTB @DCS ; CONTROLLER READY? VIA TABLE BMI IOCOMP ; YES-I/O COMPLETE TST035: MOV #1.,R0 ; NO-SHOULD HAVE COME IN BY NOW BR ERROR ; ERROR ; ; SIO WITH INTERRUPT REQUEST PROCESSOR ; TST040 = . BIS #100,R0 ; SET INTERRUPT EN = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB006-$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-$ SET OR CHECK DATA BUFFER, OTHERWISE, * 68 ;* DATA IN SWITCHES WILL BE USED. * 69 ;* CONTINUE AND XFER IS ATTEMPTED. * 70 ;* OR * 71 ;* IF BIT 12 SET IN FUNCTION: COMPUTER HALTS- SET END * 72 ;* SECTOR OF SECTOR INCREMENT-THEN * 73 ;* @ 6 5,EU|EtUn5hb, ^-ZhdP5N5 D ,5:w 2w5$w >ABLE CLR INTSW ; RESET INTERRUPT SWITCH MOV R0,@DCS ; STRAT I/O UP VIA TABLE TST050: TST INTSW ; RECEIVE INTERRUPT? BNE IOCOMP ; YES-I/O COMPLETE INC R4 ; DELAY A LONG TIME BNE TST050 BR TST035 ; TOO LONG-ERROR ; ; I/O COMPLETE-READY OR INTERRUPT ; IOCOMP = . MOV @DCS,R0 ; GET STATUS OF FUNCTION VIA TABLE SB008 .ENDC .IFGE PRIP08 $PS008 = 4. ; ASSIGN 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 .E CONTINUE. $ 74 ;* * 75 ;* IF IN A NON-LOOP MODE OR LOOP MODE AFTER AN ERROR, WHEN THE * 76 ;* I/O XFER IS COMPLETE THE R0 DISPLAY HAS THE FOLLOWING * 77 ;* MEANING: * 78 ;* 0 = XFER OK * 79 RROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUEST? BNE ERR1 ; YES ERR1: MOV #400,@DCS ; CLEAR DISK AFTER ERROR VIA TABLE ERR1: MOV #400,DCS ; CLEAR DISC JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECEIVED FLAG RTI BUF: ; START OF DISC BUFFER - HERE TO END OF CORE!!! .ENDBMI ERROR ; WHOOPS-ERROR TST FCN ; USER BUFFER SET-UP BMI RSTART ; YES-RESTART CMP #2.,FCNSW ; WAS IT A READ FUNCTION? BNE RSTART ; NO MOV #BUF,R2 ; COMPARE DATA IN BUFFER MOV DATA,R3 TST060: CMP R3,(R2)+ BNE TST070 ; UH-OH BIT #40000,FCN ; INCREMENTAL PATTERN? BEQ TST065 ; NO INC R3 NDC .IFL PRIP10 $PS010 = $NBLKS-$SB010 .ENDC .IFGE 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 ;* 1 = XFER ATTEMPTED BUT AFTER APPROX. 150 MSEC., * 80 ;* CONTROLLER WAS NOT READY OR DIDN'T GIVE INTERRUPT * 81 ;* 2 = DATA DID NOT COMPARE TO DATA ENTERED AFTER * 82 ;* A READ * 83 ;* OTHER = AN ERROR OCCURRED FROM THE DISC CONTROLLER * 84 ;* AND THE DCS IS DISPLAYED. 85 ;* START ; .END ; YES TST065: CMP R2,EXTENT ; FINISHED BLO TST060 ; NO BR RSTART ; YES-RESTART TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA BR ERROR ; ; RESTART TEST AS DEFINED IN FCN ; RSTART = . TST RDWTSW ; READ WRITE REQUEST? BEQ RST020 ; NO BIT #2,FCN ; FINISHED A READ? BNE RST010 ; YES BIC #7 ; PRI 11 TOO LARGE .ENDC .ENDC .IFL PRIP12 $PS012 = $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 * 86 ;* COMPUTER WILL NOW HALT AT DATA RESPONSE HALT. MAY CONTINUE * 87 ;* WITH SAME SECTOR AND WORD COUNT FROM HERE. * 88 ;* * 89 ;* PROGRAMMERS: 53 & 54 * 90 ;* * 91 ;****************** TST FLD5 ; SOFTWARE TOO? BNE DALL1 ; YES RTS PC ; NO DALL1: MOV R0,B3RR MOV #4,B3FR JSR PC,DALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HARDER ; HARDWARE ERROR RTS PC ; ALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #10,ALFR ; START ALLOCATION JSR PC,T,FCN ; NO BIS #2,FCN ; SET TO READ BR TST015 RST010: BIC #7,FCN BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE RST020 = . BIT #10000,FCN ; SECTOR INCREMENT? BEQ RST030 ; NO INC SECTOR CMP SECTOR,ENDSCT ; END? BLOS RST030 ; NOT YES MOV STSCT,SECTOR ; RE-PRIME START SECTOR BIT #4000,FCN ; HALT OR CONTIN.IFL $NBLKS-$SB013-$PS013 XXXXXXXX ; PRI 13 TOO LARGE .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.***************************************************** 92 ; 93 ; 94 ; 95 ; REGISTER EQUATES 96 ; 97 000000 R0 = %0 98 000001 R1 = %1 99 000002 R2 = %2 100 000003 R3 = %3 101 000004 R4 = %4 102 000005 R5 = %5 103 000006 SP = %6 104 000007 PC = %7 105 ; 106 177776 PSR = 1777IMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE ALL1 ; YES RTS PC ; NO ALL1: MOV R0,B3RR MOV #10,B3FR JSR PC,ALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HARDER ; HARDWARE ERROR RTS PC ; SRCH = . BIC #1400,R0UE BEQ RST030 ; GO HALT ; WAIT RST030: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE? BNE RST200 ; YES RST100: CLR R0 ; SIGNIFY NO ERROR BIT #400,FCN ; LOOP REQUEST? BNE RST300 JMP TST012 RST200: INC DATA BR RST100 RST300: JMP TST015 ; ; ERROR ERROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUES ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB015-$PS015 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 OV76 ; PROCESSOR STATUS REGISTER DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY 107 177570 SWR = 177570 ; SWITCH REGISTER 108 ; 109 ; 110 000000 BEGIN: ; BEGINNING OF DIAG. 111 ; 112 ; CELLS CONTAINING DISC REGISTERS TO USE - SET DYNAMICALLY 113 ; 114 000000 000000 DCS: .WORD 0 ; STATUS ; SET TO 4 BLOCK BOUNDARY MOV R0,ALRR MOV #20,ALFR ; START SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE SRCH1 ; YES RTS PC ; NO SRCH1: MOV R0,B3RR MOV #20,B3FR SRCH2: JSR PC,SEARCH JSR PC,SOFTCP ; COMPAR WITT? BNE ERR1 ; YES HALT ERR1: MOV #400,@DCS ; CLEAR DISK AFTER ERROR VIA TABLE JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECEIVED FLAG RTI ; BUF: ; START OF DISC BUFFER - HERE TO END OF CORE!!! .END START ; RLAY ; ; ROS SYSTEM TASK NUMBERS ; ; $INPNO = 1 ; INPUT $CPTNO = MXTASK+2. ; COMPRS $INITD = 3. ; DISC INITIALIZER $FLTNO = MXTASK+4. ; FILE LIST $RLDNO = MXTASK+5. ; ROS LOADER $RASNO = MXTASK+6. ; ROS ASSEMBLER TASK NUMBER $UTLNO = MXTASK+7. ; ROS UTILITY TASK $TKCNO = MXTASK+8. ; TASK C??? $TMRNO = 2. ; TIMER QUEUE PROCESSOR ; & CONTROL 115 000002 000000 WCR: .WORD 0 ; WORD COUNT 116 000004 000000 CMA: .WORD 0 ; CURRENT MEMORY ADDRESS 117 000006 000000 DAR: .WORD 0 ; DISC ADDRESS 118 000010 000000 DER: .WORD 0 ; DISC ERROR 119 ; 120 ; TABLE OF EACH DISC'S STATUS REGISTER & OF TRANSFER VECTORS 121 ; 122 000012 165300 165320 165340 REG: .WORD 165300,165320,165340,165360,165700,165720,165740,H SOFTWARE TABLE BNE HARDER ; HARDWARE ERROR BIT #1,ALFR ; FIND AREA? BEQ SRCH3 ; YES BIT #1,B3FR BEQ HARDER ; SHOULD HAVE SAME ANSWER BR SRCH4 SRCH3: CMP ALAR,B3AR ; SAME AREA? BNE HARDER ; NO-ERROR SRCH4: RTS PC ; OK ; MSRCH = . BIC #1400,R0 ; SET TO 4 BLOCK BOUNDARY MOV R0,ALRR ASL R1 ASL R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; .END .PAGE $ABMES = 3 ; THREE ABORT MESSAGE BUFFERS ABRT .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER R165760 000020 165360 165700 165720 000026 165740 165760 123 000032 000130 000134 000140 TV: .WORD 130,134,140,144,150,154,160,164 000040 000144 000150 000154 000046 000160 000164 124 000052 000000 SECTOR: .WORD 0 125 000054 000000 WORDCT: .WORD 0 126 000056 000000 FCN: .WORD 0 127 000060 000000 DATA: .WORD 0 128 000062 000000 FCNSW: .WORD 0 129 000064 000000 EXTENT: .WORD 0 130 000066 000000 INTSW: .WORD 0 131 00MOV #60,ALFR ; START MIN SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE MSRCH1 ; YES RTS PC ; NO MSRCH1: MOV R0,B3RR MOV #60,B3FR BR SRCH2 ; TIMERR = . MOV #100000,R0 ; SET TIME OUT ERROR BIT BR ERROR ; HA; UPDATE 10/24/72 ALLOC.S08 ; UPDATE 10/4/72 ALLOC.S07 ; UPDATE 9/6/72 ALLOC.S06 ; UPDATE 8/29/72 ALLOC.S05 ; UPDATE 4/12/72 ALLOC.S04 ; UPDATE 2/16/72 ALLOC.S03 ; UPDATE 1/27/72 ALLOC.S02 ; UPDATE 1/26/72 ALLOC.S01 .TITLE ALLOC ; ; RPOM DUMMY ALLOCATOR-RUN UNDER LOCKOUT ; .DEF SEARCH,ALLOC,DALLOC .DEF B3FR,B3AR,B3RR,BITTBL OUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; PSTP ; PSTP .PAGE $CLOCK = 0 ; INTERRUPTS SOURCE OFR MAINTAIN0070 000000 RDWTSW: .WORD 0 132 000072 000000 ENDSCT: .WORD 0 133 000074 000000 STSCT: .WORD 0 134 ; 135 000076' START = . 136 000076 012706 000000' MOV #BEGIN,SP ; SET UP STACK POINTER 137 000102 000000 HALT ; WAIT FOR START SECTOR 138 000104 016767 177570 177740 MOV SWR,SECTOR ; SAVE START SECTOR 139 000112 000000 HALT ; WAIT FOR NO. OF WORDS RDER = . MOV #40000,R0 ; SET HARDWARE ERROR BIT ERROR = . MOV FLD2,R5 JMP @ERR(R5) ERR = . .WORD ERR0 ; SINGLE CYCLE-TRY AGAIN .WORD ERR0 ; LOOP BUT HALT ON ERROR, THEN RETRY. .WORD ERR2 ; IGNORE .WORD ERR1 ; LOOP RETRY FUNCTION WITHOUT HALTING ERR0 = . TST (SP)+ ; POP OFF RETURN PC HALT JM .REF PUSHR,POPR ; ; ; NOTE: SB 0 = FIRST BIT ; NOB 0 = ALLOCATE-DEALLOCATE-SEARCH WHOLE THING ; TBLSIZ = 16.+16. ; BIT MAP TABLE SIZE BITTBL = . .WORD 0,0,0,0,0,0,0,0 ; ALLOCATION .WORD 0,0,0,0,0,0,0,0 ; TABLE ; TMP1: .WORD 0 ; B3RR: .WORD 0 B3AR: .WORD 0 B3FR: .WORD 0 ARSAVE: .WORD 0 MINSCH: .WORD -1. SAVER2: .WORD 0 ; ; ; SEARCH = . BIT #40,B3ING ; ; TIMERS AND DECKS ; ; 0=DEC LINE FREQUENCY(KW11-2) ; ; 1=DDS CLOCKSX ;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  140 000114 016700 177570 MOV SWR,R0 141 000120 010067 177730 MOV R0,WORDCT ; SAVE WORD COUNT 142 000124 000000 HALT ; WAIT FOR FCN WORD 143 000126 016700 177570 MOV SWR,R0 ; GET INFO & SET UP FOR SELECTED DISC 144 000132 042700 177707 BIC #177707,R0 ; GET THE 3 BITS 145 000136 006200 ASR R0 ; 146 000140 006200 ASR R0 ; P FCTN ; RETRY FUNCTION ERR1 = . TST (SP)+ ; POP OFF RETURN PC JMP FCTN ; RETRY FUNCTION ERR2 = . RTS PC ; INGORE ; SOFTCP = . MOV #-32.,R5 SOFC1: MOV BITTBL+32.(R5),A MOV #-1.,B MOV A,C BIC B,C BIC A,B BIS C,B ; PERFORM EXCLUSIVE OR CMP B,ALLTBL+32.(R5) ; SAME AS HARD; UPDATE 10/24/72 CALDGN.S07 ; UPDATE 10/4/72 CALDGN.S06 ; UPDATE 9/20/72 ADD WRAP AROUND CHECK ; UPDATE 9/12/72 CALDGN.S04 ; UPDATE 9/6/72 CALDGN.S03 ; UPDATE 9/6/72 CALDGN.S02 .TITLE CALDGN ;*********************************************************************** ;* * ;* STORAGE ALLOCATOR DIAGNOSTIC COARSER THAN THE INTERRUPT ; PERIOD, "$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 COUNAND SHIFT INTO A WORD INDEX 147 000142 016001 000032' MOV TV(R0),R1 ; GET ADDRESS OF THIS DISC'S TRAN. VEC. 148 000146 012721 001030' MOV #DSCINT,(R1)+ ; SET UP ADD FOR INTERRUPT HANDLER 149 000152 012711 000240 MOV #240,(R1) ; AND LEVEL OF INTERRUPT (5) 150 000156 016000 000012' MOV REG(R0),R0 ; NOW SET UP REGISTERS (IE. THEIR ADDRESS) 151 000162 012701 000005 MOV #5,R1 ; NUMBER OF REGISWARE BNE SOFC2 ADD #2,R5 BLT SOFC1 ; NOT DONE YET CLR R5 ; OK-SET C.C = 0 SOFC2: RTS PC ; ; ; NOTE: DELAY = 2 FOR 23 USEC-11/20 ; ; JSR PC,TIMOUT 7.0 ; MOV DELAY,R5 5.0 ; DEC R5 2.3 ; BNE .-2 2.6 OR 1.7 ; RTS PC 3.5 ; TOTALS 24.4 FOR DELAY = 2 ; TIMOUT = . MOV DELAY,R5 * ;* * ;* START AT 12000 - COMPUTER HALTS AT: ;* FOR INPUT FUNCTION ;* FOR SB/NOB IF REQUIRED. ;* FOR ERROR INDICATIONS WHICH ARE: ;* 100000 IF TIME OUT ON HARDWARE ;* 040000 FOR OTHER HARDWARE ERROR ;* TING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ; 0.01 SEC RES1 = 1 ; 0.01 SEC RES2 = 2 ; 0.02 SEC RES3 = 5 ; 0.1 SEC RES4 = 2 ; 0.2 SEC RES5 = 5 ; 1.0 SEC RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 TERS TO SET UP 152 000166 012702 000000' MOV #DCS,R2 ; ADDRESS OF FIRST OF TABLE OF REG. ADDRESS 153 000172 010022 10$: MOV R0,(R2)+ ; SET UP A CELL (IE. A REGISTERS ADDRESS) 154 000174 005720 TST (R0)+ ; BUMP ADDRESS TO STICK INTO CELL 155 000176 005301 DEC R1 ; COUNT NUMBER OF CELLS TO DO DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR  X: DEC R5 BNE X RTS PC ; ; ; SBNOB CONTAINS OLD NUMBER ON ENTRY ; NEW RANDOM NUMBER ON EXIT ; ; USES (2**9+3)RN AS ALGORITHM ; USES R0 AND R1 ; RANDOM = . MOV SBNOB,R0 MOV R0,R1 ADD R0,R0 ADD R1,R0 ; TIMES THREE ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL  * ;* USEFUL ADDRESSES IN THE DIAGNOSTIC * ;* - LAST SB/NOB * ;* - # OF LOOPS IN DELAY COUNTER * ;* - LAST SOFTWARE RR * ;* - LAST SOFTWARE AR * ;* - LAST SOFTWARE FR * ;* - LAST H  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 RES15 = 6 ; 12 HRS ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISE  INTERNAL USE ONLY 156 000200 003374 BGT 10$ ; MORE TO COME 157 000202 005067 177662 CLR RDWTSW ; CLEAR READ WRITE SWITCH 158 000206 016700 177570 MOV SWR,R0 159 000212 042700 177770 BIC #177770,R0 ; ISOLATE FUNCTION 160 000216 020027 000004 CMP R0,#4 ; IS IT WRITE/READ? 161 000222 001014 BNE TST011 ; NO 162 000224 005267 177640 INC  R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; WRAP = . ; MOV R0,R1 ; R0 HAS THE SO/NOB ON ENTRY TSTB R1 ; NOB = 0 BNE WRAP2 ; NO CLR R0 ; YES - FORCE SB TO BE ZERO ALSO. RTS PC ; RETURN TO CALLER. WRAP2: CLR R2 ; CLEAR R2 FOR BISB BISB ARDWARE AR * ;* - LAST HARDWARE FR * ;* - LAST HARDWARE BIT MAP * ;* - NUMBER OF ERRORS SO FAR * ;* - NUMBER OF LOOPS SO FAR * ;* INPUT INSTRUCTIONS FOR DIAGNOSTIC AS FOLLOWS * ;* NOTE CONSOLE SWITCH PATTERN: * ;* COND. 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 ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FORRDWTSW ; SET WRITE/READ SWITCH 163 000230 016767 177570 177620 MOV SWR,FCN 164 000236 042767 000007 177612 BIC #7,FCN 165 000244 052767 000001 177604 BIS #1,FCN ; START WITH WRITE 166 000252 000403 BR TST012 167 000254 016767 177570 177574 TST011: MOV SWR,FCN ; SAVE 168 000262 000000 TST012: HALT ; WAIT FOR DATA PATTERN OR 169 ; ;  R1,R2 ; PUT NOB INTO R2 CLRB R1 ; CLEAR NOB IN R1 SWAB R1 ; PUT SB INTO LOW BYTE COM R1 ; GET NEG VALUE OF SB ADD #256.,R1 ; FIND OUT HOW MUCH ROOM LEFT. CMPB R1,R2 ; HAVE WE ASKED FOR TO MUCH. BHIS WRAP3 ; NO - GO HOME. CLRB R0 ; YES - RESET TO MAX AVAILABLE IN R0 BISB R1,R0 ; WRAP3: RTS PC &$,<h7 7 ,b E7E7 , E7p E7bE,7X FH} B, r,( 0%w@&"MM,] De 5@e1,  }4<FLL6,F b 7}fv|,l 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 = 10. ;T-O-D CLOCK TICKS-PER-SECOND $ABMPL = 0 ;NO T-O-D CLOCK BASE MULTIPLIER TODINT = 320 ;INTERRUPT VECTOR FOR T-O-D INTERRUPT TIMINT = TODINT+4 ;INTERRUPT VECTOR FOFR ; MINIMUM SEARCH? BEQ SRCH1 ; NO CMPB #1,B3RR ; 1 BLOCK REQUEST? BEQ SRCH2 ; YES-FIX CLR ARSAVE ; INIT. MOV #-1.,MINSCH ; THIS TOO SRCH1 = . BIC #170000,X060 BIS #30000,X060 ; CONSTRUCT BIT #1.,R4 BIC #177400,X061 BIS #1400,X061 ; CONSTRUCT BEQ X070 BR X000 SRCH2 = . BIC #4LET USER DO BUFFER SET-UP OR COMPARE 170 000264 016767 177570 177566 MOV SWR,DATA ; SAVE JUST INCASE DATA PATTERN 171 000272 032767 010000 177556 BIT #10000,FCN ; SECTOR INCREMENT? 172 000300 001407 BEQ TST015 ; NO 173 000302 000000 HALT ; YES-WAIT FOR END SECTOR 174 000304 016767 177570 177560 MOV SWR,ENDSCT 175 000312 016767 177534 177554 MOV SECTOR,STSCT ; SAVw k \} .~MM~~]|x-t@e.   `@` . @`7f  BA e0.B@Ї pp"p&Q@e R INTERVAL TIMER STLINT = TIMINT+4 ;VECTOR FOR STALL ALARM INTERRUPT STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET CLKENB = 167002 ;ADDRESS FOR ENABLE OF CLOCKS TODBIT = 4 ;BIT TO ENABLE TIME-OF-DAY INTERRUPT TIMBIT = 10 ;BIT TO ENABLE INTERVAL TIMER INTERRUPT STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = 0,B3FR ; RESET MINIMUM SEARCH FOR 1 BLOCK SEARCH BR SRCH1 ; ALLOC = . BIC #170000,X060 BIS #50000,X060 ; CONSTRUCT BIS #1.,R4 BIC #177400,X061 BIS #102000,X061 ; CONSTRUCT BVC X070-MUST BRANCH BR X000 ; DALLOC = . BIC #170000,X060 BIS #40000,X060 ; CONSTRUCT BIC #1.,R4 BIC #177400,X061 BIS #102000,X061 ; CONSTRUCT BVC X070-ME START SECTOR 176 000320 016700 177532 TST015: MOV FCN,R0 ; GET FCN WORD 177 000324 100432 BMI SIO ; USER'S BUFFER IS SET-UP,START I/O 178 000326 016703 177526 MOV DATA,R3 ; SET UP TO STORE DATA 179 000332 032700 000001 BIT #1.,R0 ; WRITE OR WRITE CHECK? 180 000336 001001 BNE TST016 ; YES-FILL DATA BUFFER WITH PATTERN 181 000340 005003 CLR R3 ; : d7 4 1 }, x, 5r&j \ ,,5VN ~ @ 5: ,2 b DR }     , wRwP 7 5x ,*7 j ,m 7,P P5\ 7  ,v TM7 5~@vr* h7U , 15F5t,-4h*M5 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; $DTAPE = 1 ; DECTAPE OPTION ; NDISCS = 0 ; DISC OPTION AND NO. OF CONTROLLERS ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 20. ; MAXIMUM NO. OF ENTRIES IN AUTH. CODE .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX UST BRANCH ; X000 = . JSR R5,PUSHR ; SAVE REGISTERS MOV B3RR,R0 ; GET START BLOCK/NOB REQUESTED CLR TMP1 BISB R0,TMP1 ; SAVE NOB REQUESTED BNE X020 MOV #400,TMP1 ; SET TO DO WHOLE THING X020 = . CLRB R0 SWAB R0 ; START BLOCK REQUESTED CLR R1 ; INIT BITTBL INDEX CLR R2 ; INIT BIT COUNTER NO-CLEAR DATA BUFFER FOR READ 182 000342 012702 001036' TST016: MOV #BUF,R2 ; BUFFER ADDRESS 183 000346 016704 177502 MOV WORDCT,R4 184 000352 060404 ADD R4,R4 185 000354 060204 ADD R2,R4 ; TO THIS ADDRESS 186 000356 010467 177502 MOV R4,EXTENT ; SAVE FOR FUTURE USE 187 000362 010322 TST020: MOV R3,(R2)+ 188 000364 032700 000001 BIT #1.,R0 ; WRITE OR WRITE CHEC,Z7$0" 5 8 , 7604 ,2U@ }JVVd^fV ,Xw wwD ,~MM~~]|x-t@e,   `@` , @`7f  BA e!,B@Ї><:hQ@e,$,; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 1 ; DISC RESIDENT DIRECTORY OPTION .IFL 3-NDISCS 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 = 500. ; MAXIMUM ID ON DISC 1 ; .IFG  CLR R3 ; INIT HIT COUNTER X030: MOV BITTBL(R1),R4 ; GET A BIT MAP WORD CLR R5 ; WILL SHIFT INTO R5 X040: CMP R2,R0 ; GET TO START BLOCK REQUESTED? BGE X060 ; YES X050: ASR R4 ; DOUBLE SHIFT R4 ROR R5 ; TO R5 INC R2 ; BUMP BIT COUNTER BIT #17,R2 ; VALUE DIVISIBLE BY 16? BNE X040 !K? 189 000370 001405 BEQ TST025 ; NO 190 000372 032767 040000 177456 BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? 191 000400 001401 BEQ TST025 ; NO 192 000402 005203 INC R3 ; YES 193 000404 020267 177454 TST025: CMP R2,EXTENT ; FINISHED? 194 000410 103764 BLO TST020 ; NO 195 000412 042700 177774 SIO: BIC #177774,R0 ; ISOLATE I/O FDN R"J5 7 EV,pU0EUE ErU,PlEjUd EXU@REPUJ,Jw ~7 x7tl   J,D$   5q$ W 95,5 8  (  ,& ,.E 5 '  8,TE  5q$w L5 ,zU   ݜ'# NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; 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 $; NO MOV R5,BITTBL(R1) ; YES-REPLACE BIT MAP WORD TST (R1)+ ; BUMP BITTBL INDEX CMP R1,#TBLSIZ ; SEARCHED COMPLETE TABLE? BGE ERROR ; YES-SET ERROR BIT INCASE SEARCH BR X030 ; KEEP SEARCHING ; ; X060: BIT #1.,R4 ; MAY ALSO BE BIS OR BIC X061: BEQ X070 ; MAY ALSO BE BVC BIT #40,B3FR ; MINIMUM SEARCH? BEQ X062 TST R3 %EQUESTED 196 000416 010067 177440 MOV R0,FCNSW ; SAVE FOR LATER USE 197 000422 012777 001036' 177354 MOV #BUF,@CMA ; SET UP CURRENT MEMORY ADDRESS VIA TABLE 198 000430 016777 177420 177344 MOV WORDCT,@WCR ; & WORD COUNT OF TRAN. ( ALSO VIA TABLE) 199 000436 005477 177340 NEG @WCR ; WORD COUNT MUST BE IN 2'S COMPLEMEMT FORM 200 000442 016777 177404 177336 MOV SECTOR,@DAR ; ALSO SET UP DISK&f&MD 'ID ON DISC 3 .ENDC $SYSFL = NDISCS+5 ; NO. OF SYSTEM FILE ID'S IN ROS ; ; COMPID,FTDIR,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+40. ; NO. OF CORE RESIDENT FILE ID'S .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT ID'S ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEE( ; FIND ANY? BEQ X062 ; NO CMP R3,TMP1 ; ENOUGH? BLT X062 ; NO CMP R3,MINSCH ; BETTER THAN LAST TIME ; ALLOW FOR 256 REGION BHIS X062 ; NO MOV R3,MINSCH ; YES MOV ARSAVE,B3AR ; SET UP PROPOSED ANSWER BIC #1,B3FR ; SET FOUND CONDITION IN STATUS REGISTER X062 = . CLR R3 ) ADDRESS ( AGAIN VIA TABLE) 201 000450 000261 SEC ; FOR GO BIT 202 000452 006100 ROL R0 ; SET FUNCTION AND GO BITS 203 000454 005004 CLR R4 ; USE TO COUNT DELAY 204 000456 105767 177374 TSTB FCN ; INTERRUPT MODE REQUESTED? 205 000462 100412 BMI TST040 ; YES 206 000464 010077 177310 MOV R0,@DCS ; START I/O FUNCTION VIA TABLE *& (R.zv2.  77 nE?.    \EUHZ.2@50rpz.Xl5 Xa`7X55@.~D BE76,&$7 .б@   7Є ^U.@7 7  +DED ; ; FOR CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS ; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 1 ;1 = CHECKPOINTING ALLOWED .IFZ $KT11C .IFNZ CHKPTC XXXXXXXX .ENDC .ENDC FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 , ; RESET HIT COUNTER BR X050 ; ; X070 = . BIT #40,B3FR ; MINIMUM SEARCH BNE X100 ; YES INC R3 ; BUMP HIT COUNTER CMP R3,TMP1 ; DONE FOR NOB REQUESTED BLT X050 ; NO-KEEP GOING MOV R2,R3 ; SAVE NO. OF BITS LEFT TO SHIFT SUB TMP1,R2 ; CALCULATE START BLOCK INCASE INC R2 ; SEARCH- 207 000470 005204 TST030: INC R4 ; DELAY A LONG TIME 208 000472 001376 BNE TST030 DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY 209 000474 105777 177300 TSTB @DCS ; CONTROLLER READY? VIA TABLE 210 000500 100417 BMI IOCOMP ; YES-I/O COMPLETE 211 000502 012700 000001 TST035: MOV #1.,R0 ; NO-SHOULD HAVE COMEO %. 5@ .6 5EUEUn.<5~ t-p~zf5d.b5 Z 5Pw Hw5~:,w 0/ ; SEGMENT LOAD OPTION $FTMAX = 10. ; LARGEST FILE TYPE IN SYSTEM $IDMAX = 500. ; 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 =0 REQUEST SWAB R2 BISB TMP1,R2 ; SB/NOB MOV R2,B3AR ; SET UP ANSWER REGISTER BIC #1,B3FR ; SET FOUND X075: ASR R4 ; FINISH CURRENT BITTBL WORD ROR R5 INC R3 BIT #17,R3 BNE X075 MOV R5,BITTBL(R1) ; SET IN BIT MAP X080: JSR R5,POPR ; RESTORE REGISTERS RTS PC ; RETURN ; ; ERROR = . BIT 1 IN BY NOW 212 000506 000536 BR ERROR ; ERROR 213 ; 214 ; SIO WITH INTERRUPT REQUEST PROCESSOR 215 ; 216 000510' TST040 = . 217 000510 052700 000100 BIS #100,R0 ; SET INTERRUPT ENABLE 218 000514 005067 177346 CLR INTSW ; RESET INTERRUPT SWITCH 219 000520 010077 177254 MOV R0,@DCS ; STRAT I/O UP VIA TABLE 220 000524 005767 177336 TST050: TST 20 .,zv7,  77 nED,    \EUH_,2@50rp,Xl5 Xa`7X55@,~D BE76,&$7 ,б@   7Є ^U ,@7 7  O %, 5@ 3 TASMAX*5 ; # 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 ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = 320. ; DISC RE4 #40,B3FR ; MINIMUM SEARCH? BNE X090 ; YES ERR = . BIS #1,B3FR ; SET NOT FOUND BR X080 ; RETURN ; X090 = . TST MINSCH ; FIND ANYTHING? BMI ERR ; NO BR X080 ; YES-RETURN X100 = . INC R3 ; BUMP HIT COUNTER CMP R3,TMP1 ; REACHED NOB REQUESTED? BLT X050 5 INTSW ; RECEIVE INTERRUPT? 221 000530 001003 BNE IOCOMP ; YES-I/O COMPLETE 222 000532 005204 INC R4 ; DELAY A LONG TIME 223 000534 001373 BNE TST050 224 000536 000761 BR TST035 ; TOO LONG-ERROR 225 ; 226 ; I/O COMPLETE-READY OR INTERRUPT 227 ; 228 000540' IOCOMP = . 229 000540 017700 177234 MOV @DCS,R0 ; GET STAT,6 5EUEUs,<5~ t-p~zf5d,b5 Z 5Pw Hw5:,w 07SIDENT DIRECTORY ADDRESS DISC 1 ; ; 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 NDISCS-1 DIRAD2 = 0 ; DISC RESIDENT DIRECTORY ADDRESS DISC 2 DIRLN2 = MAXID2-1/12.+1 ; DISC DIRECTORY 2 LENGTH .ENDC .IFG NDISCS-2 DIRAD3 = 0 ; ; NO-KEEP GOING BGT X050 ; YES-OVER-KEEP GOING MOV R2,SAVER2 ; SAVE SUB TMP1,R2 INC R2 ; START BLOCK SWAB R2 BISB TMP1,R2 ; SB/NOB MOV R2,ARSAVE ; SAVE IT MOV SAVER2,R2 ; RESTORE BR X050 ; SEARCH WHOLE TABLE .END 9US OF FUNCTION VIA TABLE 230 000544 100517 BMI ERROR ; WHOOPS-ERROR 231 000546 005767 177304 TST FCN ; USER BUFFER SET-UP 232 000552 100426 BMI RSTART ; YES-RESTART 233 000554 022767 000002 177300 CMP #2.,FCNSW ; WAS IT A READ FUNCTION? 234 000562 001022 BNE RSTART ; NO 235 000564 012702 001036' MOV #BUF,R2 ; COMPARE DATA IN BUFFER 236 :; UPDATE 12/6/72 DSCTST.S08 ; UPDATE 7/6/72 DSCTST.S07 ; UPDATE 6/28/72 DSCTST.S06 ; UPDATE 4/5/72 DSCTST.S05 ; UPDATE 2/10/72 DCSTST.S04 ; UPDATE 1/17/72 DCSTST.S03 ; UPDATE 12/20/71 DCSTST.S02 ; UPDATE 12/17/71 DCSTST.S01 .TITLE DSCTST ;*********************************************************************** ;* ; 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 UNIT 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<; UPDATE 10/25/72 CALDGN.S08 ; UPDATE 10/24/72 CALDGN.S07 ; UPDATE 10/4/72 CALDGN.S06 ; UPDATE 9/20/72 ADD WRAP AROUND CHECK ; UPDATE 9/12/72 CALDGN.S04 ; UPDATE 9/6/72 CALDGN.S03 ; UPDATE 9/6/72 CALDGN.S02 .TITLE CALDGN ;*********************************************************************** ;* * ;* ST=000570 016703 177264 MOV DATA,R3 237 000574 020322 TST060: CMP R3,(R2)+ 238 000576 001011 BNE TST070 ; UH-OH 239 000600 032767 040000 177250 BIT #40000,FCN ; INCREMENTAL PATTERN? 240 000606 001401 BEQ TST065 ; NO 241 000610 005203 INC R3 ; YES 242 000612 020267 177246 TST065: CMP R2,EXTENT ; FINISHED 243 000616 103766 BLO TST060 ; * ;* DISC TEST PROGRAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * ;* AND CONTINUE. ? ; FILE TYPE 4, LOG UNIT 1 $FD005 = 101 ; FILE TYPE 5, LOG UNIT 1, CKSAVE REQUIRED $FD006 = 1 ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8, 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 TY@ORAGE ALLOCATOR DIAGNOSTIC * ;* * ;* START AT 12000 - COMPUTER HALTS AT: ;* FOR INPUT FUNCTION ;* FOR SB/NOB IF REQUIRED. ;* FOR ERROR INDICATIONS WHICH ARE: ;* 100000 IF TIME OUT ON HARDWARE ;* 040000 FOR OTHER HARDWARE ERROR ;* A NO 244 000620 000403 BR RSTART ; YES-RESTART 245 000622 012700 000002 TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA 246 000626 000466 BR ERROR 247 ; 248 ; RESTART TEST AS DEFINED IN FCN 249 ; 250 000630' RSTART = . 251 000630 005767 177234 TST RDWTSW ; READ WRITE REQUEST? 252 000634 001421 BEQ RST020 ; NO 253 000636 032767 0B; UPADTE 10/26/72 CALDGN.S09 ; UPDATE 10/25/72 CALDGN.S08 ; UPDATE 10/24/72 CALDGN.S07 ; UPDATE 10/4/72 CALDGN.S06 ; UPDATE 9/20/72 ADD WRAP AROUND CHECK ; UPDATE 9/12/72 CALDGN.S04 ; UPDATE 9/6/72 CALDGN.S03 ; UPDATE 9/6/72 CALDGN.S02 .TITLE CALDGN ;*********************************************************************** ;* CPE 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 = 300. $FS002 = 300. $FS003 = 300. $FS004 = 300. $FS005 = 2500. $FS006 = 300. $FS007 = 2500. $FS008 = 300. $FS009 = 300. ; $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 D 1 AFTER A DEALLOCATE * ;* 2 AFTER AN ALLOCATE * ;* 3 BIT MAP COMPARE AFTER * ;* ANY SEARCH * ;* 4 FR COMPARE AFTER ANY SR* ;* 5 AR COMPARE AFTER ANY SR* ;* E00002 177212 BIT #2,FCN ; FINISHED A READ? 254 000644 001007 BNE RST010 ; YES 255 000646 042767 000007 177202 BIC #7,FCN ; NO 256 000654 052767 000002 177174 BIS #2,FCN ; SET TO READ 257 000662 000616 BR TST015 258 000664 042767 000007 177164 RST010: BIC #7,FCN 259 000672 052767 000001 177156 BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE 260 0007F * ;* STORAGE ALLOCATOR DIAGNOSTIC * ;* * ;* START AT 12000 - COMPUTER HALTS AT: ;* FOR INPUT FUNCTION ;* FOR SB/NOB IF REQUIRED. ;* FOR ERROR INDICATIONS WHICH ARE: ;* 100000 IF TIME OUT ON HARDWARE ;* G = $FS005+$FS006+$FS007+$FS008+$FS009 .IFL 8192.-$ALOD1-$ALOD2 XXXXXXXX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; .IFNZ $BATCH $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 = 100H * ;* USEFUL ADDRESSES IN THE DIAGNOSTIC * ;* - LAST SB/NOB * ;* - # OF LOOPS IN DELAY COUNTER * ;* - LAST SOFTWARE RR * ;* - LAST SOFTWARE AR * ;* - LAST SOFTWARE FR * ;* - LAST HARDWARE AR I00' RST020 = . 261 000700 032767 010000 177150 BIT #10000,FCN ; SECTOR INCREMENT? DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY 262 000706 001416 BEQ RST030 ; NO 263 000710 005267 177136 INC SECTOR 264 000714 026767 177132 177150 CMP SECTOR,ENDSCT ; END? 265 000722 101410 BLOS RST030 ; NOT YES 26J 040000 FOR OTHER HARDWARE ERROR ;* 1 AFTER A DEALLOCATE * ;* 2 AFTER AN ALLOCATE * ;* 3 BIT MAP COMPARE AFTER * ;* ANY SEARCH * ;* 4 FR COMPARE AFTER ANY SR* ;* 5 AR COMPARE AFTER ANY SR* ;* K0. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 20. ; MAX NO. OF OBJECT MODULES TO BE ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC .ENDC ; MATCHES .IFNZ NDISCL * ;* - LAST HARDWARE FR * ;* - LAST HARDWARE BIT MAP * ;* - NUMBER OF ERRORS SO FAR * ;* - NUMBER OF LOOPS SO FAR * ;* * .PAGE ;* INPUT INSTRUCTIONS FOR DIAGNOSTIC AS FOLLOWS * ;* NOTE CONSOLE SWITCH PAM6 000724 016767 177144 177120 MOV STSCT,SECTOR ; RE-PRIME START SECTOR 267 000732 032767 004000 177116 BIT #4000,FCN ; HALT OR CONTINUE 268 000740 001401 BEQ RST030 ; GO 269 000742 000000 HALT ; WAIT 270 000744 032767 020000 177104 RST030: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE? 271 000752 001007 BNE RST200 ; YES 272 000754 005000 RST100: CLR R0 ; SIGNIFN * ;* USEFUL ADDRESSES IN THE DIAGNOSTIC * ;* - LAST HARDWARE AR AFTER A SEARCH * ;* - LAST SB/NOB * ;* - # OF LOOPS IN DELAY COUNTER * ;* - LAST SOFTWARE RR * ;* - LAST SOFTWARE AR * ;* OS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 2 ; NO. OF TTYS IN SYSTEM ;IN 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 ;ASPTTERN: * ;* * ;* X XXX XXX XXX XXX XXX * ;* FLD1 FLD2 FLD3 FLD4 FLD5 * ;* * ;* WHERE: * ;* * ;* FLD1: 0 = DEALLOCATEQY NO ERROR 273 000756 032767 000400 177072 BIT #400,FCN ; LOOP REQUEST? 274 000764 001005 BNE RST300 275 000766 000167 177270 JMP TST012 276 000772 005267 177062 RST200: INC DATA 277 000776 000766 BR RST100 278 001000 000167 177314 RST300: JMP TST015 279 ; 280 ; ERROR ERROR ERROR 281 ; 282 001004' ERROR = . 283 001004 032767 001000 177044 R - LAST SOFTWARE FR * ;* - LAST HARDWARE AR * ;* - LAST HARDWARE FR * ;* - LAST HARDWARE BIT MAP * ;* - NUMBER OF ERRORS SO FAR * ;* - NUMBER OF LOOPS SO FAR * ;* * .PSSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY T BEFORE EACH CYCLE * ;* 1 = ALLOCATE BEFORE EACH CYCLE * ;* 2 = START FROM WHERE TABLE IS NOW * ;* 3 = SET UP WORST CASE 10101010... * ;* * ;* FLD2: 0 = SINGLE CYCLE * ;* 1 = LOOP - HALT ON ERROR CONDITION ;* 2 = LOOP AND IGNORE ERRORS (U BIT #1000,FCN ; CLEAR AND RETRY REQUEST? 284 001012 001001 BNE ERR1 ; YES 285 001014 000000 HALT 286 001016 012777 000400 176754 ERR1: MOV #400,@DCS ; CLEAR DISK AFTER ERROR VIA TABLE 287 001024 000167 177750 JMP RST300 288 ; 289 ; DISC INTERRUPT HANDLER 290 001030' DSCINT = . 291 001030 005267 177032 INC INTSW ; BUMP INTERRUPT RECEIVED FLAG VAGE ;* INPUT INSTRUCTIONS FOR DIAGNOSTIC AS FOLLOWS * ;* NOTE CONSOLE SWITCH PATTERN: * ;* * ;* X XXX XXX XXX XXX XXX * ;* FLD1 FLD2 FLD3 FLD4 FLD5 * ;* * ;* WHERE: W ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;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 = EXSTART OVER) * ;$ 3 = LOOP - RETRY FUNCTION IF ERROR WITHOUT A HALT. ;* 4 = LOOP - RETRY FUNCTION USING PREVIOUS SB/NOB * ;* * ;* FLD3: 0 = SB/NOB SET BY OPERATOR * ;* 1 = SB/NOB SET BY INCREMENT FROM 0 * ;* 2 = SB/NOB SET BY RANDOM NUMBER GENERATOR * ;* 3 = SAME AS 2 - TO PERMIT Y 292 001034 000002 RTI 293 ; 294 001036 BUF: ; START OF DISC BUFFER - HERE TO END OF CORE!!! 295 000076' .END START ; DSCTST RMACRO V005C 20-JUN-73 00:00 PAGE 1+ * * * SYMBOL TABLE * * * PRIVATE DATA GULF ENERGY & ENVIRONMENTAL SYSTEMS FOR INTERNAL USE ONLY BEGIN 000000R BUF 001036R CMA 000004R DAR 000006R DATA 000060R DCS 000000R DER 000010R Z * ;* * ;* FLD1: 0 = DEALLOCATE BEFORE EACH CYCLE * ;* 1 = ALLOCATE BEFORE EACH CYCLE * ;* 2 = START FROM WHERE TABLE IS NOW * ;* 3 = SET UP WORST CASE 10101010... * ;* * ;* FLD2: 0 = SINGLE CYCLE [OM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM 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\CHANGES ON THE FLY. * ;* * ;* FLD4: 0 = SEARCH * ;* 1 = MINIMUM SEARCH * ;* 2 = ALLOCATE * ;* 3 = DEALLOCATE * ;* 4 = ALLOCATE-DEALLOCATE * ;* 5 = SEARCH-ALLOCAT] DSCINT= 001030R ENDSCT 000072R ERROR = 001004R ERR1 001016R EXTENT 000064R FCN 000056R FCNSW 000062R INTSW 000066R IOCOMP= 000540R PC =%000007 PSR = 177776 RDWTSW 000070R REG 000012R RSTART= 000630R RST010 000664R RST020= 000700R RST030 000744R RST100 000754R RST200 000772R RST300 001000R R0 =%000000 R1 =%000001 R2 =%000002 R3 =%0^ * ;* 1 = LOOP - HALT ON ERROR CONDITION ;* 2 = LOOP AND IGNORE ERRORS (START OVER) * ;$ 3 = LOOP - RETRY FUNCTION IF ERROR WITHOUT A HALT. ;* 4 = LOOP - RETRY FUNCTION USING PREVIOUS SB/NOB * ;* 5 = SAME AS 1 - TO PERMITE CHANGES ON THE FLY * ;* * ;* FLD3: 0 = SB/NOB SET BY OPERATOR *_ (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE ;*********************************************************************** ;* ** ;* SEGMENT REGISTER ADDRESSES REQUIRED BY THE PROGRAMS WHEN ** ;* IMPLEMENTED ON AN 11/45 OR 11/25, EITHER WITH SEGMENTATION. ** ;* `E-SWAP SB WITH NOB-DEALLOCATE * ;* 6 = MINIMUM SEARCH-ALLOCATE-SWAP SB WITH NOB * ;* -DEALLOCATE * ;* 7 = MINIMUM SEARCH-ALLOCATE-NEW SB/NOB-DEALLOCATE * ;* * ;* FLD5: 0 = NO SOFTWARE ALLOCATOR * ;* 1 = SOFTWARE ALLOCATOR * ;* a00003 R4 =%000004 R5 =%000005 SECTOR 000052R SIO 000412R SP =%000006 START = 000076R STSCT 000074R SWR = 177570 TST011 000254R TST012 000262R TST015 000320R TST016 000342R TST020 000362R TST025 000404R TST030 000470R TST035 000502R TST040= 000510R TST050 000524R TST060 000574R TST065 000612R TST070 000622R TV 000032R WCR 000002b ;* 1 = SB/NOB SET BY INCREMENT FROM 0 * ;* 2 = SB/NOB SET BY RANDOM NUMBER GENERATOR * ;* 3 = SAME AS 2 - TO PERMIT CHANGES ON THE FLY. * ;* * ;* FLD4: 0 = SEARCH * ;* 1 = MINIMUM SEARCH * ;* 2 = ALLOCATE c ** .IFNZ $KT11C ;* ;* K E R N E L S E G M E N T R E G I S T E R S ;* $KPAR0 = 772340 ; $KPAR1 = 772342 ; $KPAR2 = 772344 ;KERNEL $KPAR3 = 772346 ; PAGE $KPAR4 = 772350 ; ADDRESS $KPAR5 = 772352 ; REGISTERS $KPAR6 = 772354 ; $KPAR7 = 772356 ; ; $KPDR0 = 772300 ; $KPDR1 = d * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;*********************************************************************** .PAGE .GLOBL CALDGN .GLOBL SEARCH,ALLOC,DALLOC,B3FR,B3AR,B3RR,BITTBL ; ; ; CALDGN: BR START ; GIVE A NICE STAR_ ADR WORDCT 000054R . ABS. 000000 000 001036 001 ERRORS DETECTED: 0 FREE CORE: 16870. WORDS ,DF:DSCTST.LST .GLOBL X .ENDM .ENDM .REF .MACRO .DEF A,B,C,D,E,F,G,H,I,J .REF A,B,C,D,E,F,G,H,I,J MOV ALAR,R0 ; YES JSR PC,ALLO JSR PC,GETSB MOV SBNOB,R0 JSR PC,DALLO ; RSTART = . MOV FLD2,R5 ; GET RESTART PROCEDURE JMP @RST(R5) ; DO IT RST = . .WORD RST0 ; SINGLE CYCLE .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; ON RESTART SAME AS OTHER LOOL R1 ASL R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; WRAP = . ; MOV R0,R1 ; R0 HAS THE SO/NOB ON ENTRY TSTB R1 ; NOB = 0 BNE WRAP2 ; NO CLR R0 ; YES - FORCE SB TO BE ZERO ALSO. RTS PC ; RETURN TO CALLER. WRAP2: CLR R2 ; CLEAR R2 F JSR PC,DALLO ; DEALLOCATE BR RSTART FCTN5 = . JSR PC,SRCH BIT #1,ALFR ; GET SOMETHING? BNE RSTART ; NO MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART FCTN6 = . JSR PC,MSRCH BIT #1,ALFR ; GET SOMETHING? BNE RSTART ; NO  .ENDM .DEF ; ; ; ; MACRO DEF. FOR QUEUES ; .MACRO .QUE A,B,C .BOUND .LIST ME A = .-4 B = .-2 .REPT C .WORD 0 .IFZ $KT11C .WORD .-2 ; NOTE: PPA WHEN RESOLVED BY IPL .ENDC .IFNZ $KT11C .PACK .-2 .ENDC .ENDR .NLIST ME .ENDM ; ; MACRO TO SET PRIORITY LEVEL 7 ; .MACRO .LOCK PSR PS RST0 = . CLR R0 ; NO ERROR JMP CALDG1 ; START AGAIN AT FRIST HALT RST1 = . JMP CALDG2 ; START FROM SWR PICKUP ; ; ; NOTE: R0 HAS SB/NOB FOR REQUEST ; DALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #4,ALFR ; START DEALLOCATION JSR PC,TIMOUT ; TIME OUT APPRPRPIATELY BIT #2,ALFR OR BISB BISB R1,R2 ; PUT NOB INTO R2 CLRB R1 ; CLEAR NOB IN R1 SWAB R1 ; PUT SB INTO LOW BYTE COM R1 ; GET NEG VALUE OF SB ADD #256.,R1 ; FIND OUT HOW MUCH ROOM LEFT. CMPB R1,R2 ; HAVE WE ASKED FOR TO MUCH. BHIS WRAP3 ; NO - GO HOME. CLRB R0 ; YES - RESET TO MAX AVAILABLE IN R0 BISB R1,R0 ; WR MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART ; FCTN7 = . JSR PC,MSRCH BIT #1,ALFR ; GOT SOMETHING BNE RSTART MOV ALAR,R0 ; YES JSR PC,ALLO JSR PC,GETSB MOV SBNOB,R0 JSR PC,DALLO ; RSTART = . MOV FLD2,R5 ; GET REST = 177776 .IFZ $1145 MOVB #340,@#PSR .ENDC .IFNZ $1145 SPL 7 .ENDC ; ; SET INTERRUPT LOCKOUT .ENDM ;  ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE DALL1 ; YES RTS PC ; NO DALL1: MOV R0,B3RR MOV #4,B3FR JSR PC,DALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER1 RTS PC ; ALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #10,ALFR AP3: RTS PC ; ; SAVE = . ; SAVE OLD INFO MOV #PRESTR,R1 MOV #-32.,R5 MOV B3RR,(R1)+ MOV B3AR,(R1)+ MOV B3FR,(R1)+ MOV ALAR,(R1)+ MOV ALFR,(R1)+ SAV1: MOV ALLTBL+32.(R5),(R1)+ ADD #2,R5 BLT SAV1 RTS PC .END ART PROCEDURE JMP @RST(R5) ; DO IT RST = . .WORD RST0 ; SINGLE CYCLE .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; ON RESTART SAME AS OTHER LOOPS .WORD RST1 ; LOOP RST0 = . CLR R0 ; NO ERROR JMP CALDG1 ; START AGAIN AT FRIST HALT RST1 = . JMP ; START ALLOCATION JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE ALL1 ; YES RTS PC ; NO ALL1: MOV R0,B3RR MOV #10,B3FR JSR PC,ALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER2 RTS PC ; SRCH = . BI ; UPDATE 10/26/72 CALDGN.S10 ; UPADTE 10/26/72 CALDGN.S09 ; UPDATE 10/25/72 CALDGN.S08 ; UPDATE 10/24/72 CALDGN.S07 ; UPDATE 10/4/72 CALDGN.S06 ; UPDATE 9/20/72 ADD WRAP AROUND CHECK ; UPDATE 9/12/72 CALDGN.S04 ; UPDATE 9/6/72 CALDGN.S03 ; UPDATE 9/6/72 CALDGN.S02 .TITLE CALDGN ;*********************************************************************** ;* CALDG2 ; START FROM SWR PICKUP ; ; ; NOTE: R0 HAS SB/NOB FOR REQUEST ; DALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #4,ALFR ; START DEALLOCATION JSR PC,TIMOUT ; TIME OUT APPRPRPIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE DALL1 ; YES RTS C #SMASK,R0 ; MASK OUT BAD SEARCH ADDRESSES MOV R0,ALRR MOV #20,ALFR ; START SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE SRCH1 ; YES RTS PC ; NO ; ALL SEACHES END UP HERE SRCH1: MOV R0,B3RR MOV #20,B3FR SRCH2: MOV BITTBL+3 * ;* STORAGE ALLOCATOR DIAGNOSTIC * ;* * ;* START AT 12000 - COMPUTER HALTS AT: ;* FOR INPUT FUNCTION ;* FOR SB/NOB IF REQUIRED. ;* FOR ERROR INDICATIONS WHICH ARE: ;* 100000 IF TIME OUT  PC ; NO DALL1: MOV R0,B3RR MOV #4,B3FR JSR PC,DALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER1 RTS PC ; ALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #10,ALFR ; START ALLOCATION JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR  * ;* NOTE: MAX. OF 3072 WORDS. * ;* COMPUTER HALTS- ENTER FUNCTION AS FOLLOWS * ;* AND CONTINUE: * ;* BIT 15: = 0, WILL USE DATA GIVEN * ;* TO SET UP AND COMPARE BUFFER * ;* BIT 15: = 1, USER RESPONSIBLE FOR * ;* BUFFER. 0.,-(SP) ; SAVE OLD SOFTWARE LAST WORD BIS #100000,BITTBL+30. ; FORCE LIKE HARDWARE FOR SRCH. JSR PC,SEARCH MOV (SP)+,BITTBL+30. JSR PC,SOFTCP ; COMPAR WITH SOFTWARE TABLE BNE HDER3 BIT #1,ALFR ; FIND AREA? BEQ SRCH3 ; YES BIT #1,B3FR BEQ HDER4 BR SRCH4 SRCH3: CMP ALAR,B3AR ; SAME AREA? BNE HDER5 SRCH4: RTS ON HARDWARE ;* 040000 FOR OTHER HARDWARE ERROR ;* 1 AFTER A DEALLOCATE * ;* 2 AFTER AN ALLOCATE * ;* 3 BIT MAP COMPARE AFTER * ;* ANY SEARCH * ;* 4 FR COMPARE AFTER ANY SR* ;* 5 AR COM; NO TST FLD5 ; SOFTWARE TOO? BNE ALL1 ; YES RTS PC ; NO ALL1: MOV R0,B3RR MOV #10,B3FR JSR PC,ALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER2 RTS PC ; SRCH = . BIC SMASK,R0 ; MASK OUT BAD SEARCH ADRESSES MOV R0,ALRR MOV #20,ALFR ; START SEARCH JSR PC,TIMOUT ;  * ;* BIT 14: = 0, IF 15=0 THEN USE * ;* DATA BUFFER FILLED WITH DATA * ;* BIT 14: = 1, IF 15=0 THEN DATA BUFFER * ;* FILLED WITH DATA,DATA+1,DATA+2,... * ;* BIT 13: = 1, INCREMENT DATA AFTER * ;* EACH CYCLE SO DATA BUFFER WILL CHANGE * ;* EACH PC ; OK ; MSRCH = . BIC #SMASK,R0 ; MASK OUT BAD SEARCH ADDRESS MOV R0,ALRR MOV #60,ALFR ; START MIN SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE MSRCH1 ; YES RTS PC ; NO MSRCH1: MOV R0,B3RR MOV PARE AFTER ANY SR* ;* * ;* USEFUL ADDRESSES IN THE DIAGNOSTIC * ;* - LAST HARDWARE AR AFTER A SEARCH * ;* - LAST SB/NOB * ;* - # OF LOOPS IN DELAY COUNTER * ;* - LAST SOFTWARE RR * ;* - LAST SOFTWARTIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO MOV ALAR,LALAR ; SAVE AR TST FLD5 ; SOFTWARE TOO? BNE SRCH1 ; YES RTS PC ; NO ; ALL SEACHES END UP HERE SRCH1: MOV R0,B3RR MOV #20,B3FR SRCH2: MOV BITTBL+30.,-(SP) ; SAVE OLD SOFTWARE LAST WORD BIS #100000,BITTBL+30. ; FORCE LIKE HARDWARE FOR SRCH.  CYCLE. * ;* BIT 12: = 1, INCREMENT SECTOR AFTER * ;* EACH CYCLE. * ;* BIT 11: = 1, HALT AFTER END SECTOR * ;* REACHED, OTHERWISE LOOP BACK TO * ;* BEGIN SECTOR. * ;* BIT 9: = 0, IF ERROR OCCURS-HALT * ;*  #60,B3FR BR SRCH2 ; TIMERR = . MOV #100000,R0 ; SET TIME OUT ERROR BIT BR ERROR ; HDER1: MOV #1,R0 BR HDERR HDER2: MOV #2,R0 BR HDERR HDER3: MOV #3,R0 BR HDERR HDER4: MOV #4,R0 BR HDERR HDER5: MOV #5,R0 HDERR: BIS #40000,R0 ERROR = . INC NERROR MOV FLD2,R5 JMP @ERR(R5) ERR = . E AR * ;* - LAST SOFTWARE FR * ;* - LAST HARDWARE AR * ;* - LAST HARDWARE FR * ;* - LAST HARDWARE BIT MAP * ;* - NUMBER OF ERRORS SO FAR * ;* - NUMBER OF LOOPS SO FAR * ;*  JSR PC,SEARCH MOV (SP)+,BITTBL+30. JSR PC,SOFTCP ; COMPAR WITH SOFTWARE TABLE BNE HDER3 BIT #1,ALFR ; FIND AREA? BEQ SRCH3 ; YES BIT #1,B3FR BEQ HDER4 BR SRCH4 SRCH3: CMP ALAR,B3AR ; SAME AREA? BNE HDER5 SRCH4: RTS PC ; OK ; MSRCH = . BIC SMASK,R0 ; MASK OUT BAD SEARCH ADRESSES  BIT 9: = 1, IF ERROR OCCURS-CLEAR * ;* DISC AND RETRY(ERROR LOOP). * ;* BIT 8: = 0, WILL HALT AND WAIT FOR * ;* DATA RESPONSE AFTER EACH I/O COMPLETE. * ;* BIT 8: = 1, WILL CONTINUALLY REPEAT * ;* XFER UNTIL ERROR OCCURS (LOOP MODE). * ;* BIT 7: = 0, XFER WITHOUT DISC * ;*  .WORD ERR0 ; SINGLE CYCLE-TRY AGAIN .WORD ERR0 ; LOOP BUT HALT ON ERROR, THEN RETRY. .WORD ERR2 ; IGNORE .WORD ERR1 ; LOOP RETRY FUNCTION WITHOUT HALTING .WORD ERR3 ; RESET SB/NOB IF ERROR ERR0 = . TST (SP)+ ; POP OFF RETURN PC HALT JMP FCTN ; RETRY FUNCTION ERR1 = . TST (SP)+ ; POP OFF RETURN PC  * .PAGE ;* INPUT INSTRUCTIONS FOR DIAGNOSTIC AS FOLLOWS * ;* NOTE CONSOLE SWITCH PATTERN: * ;* * ;* X XXX XXX XXX XXX XXX * ;* FLD1 FLD2 FLD3 FLD4 FLD5 * ;* * ;* WHERE: MOV R0,ALRR MOV #60,ALFR ; START MIN SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO MOV ALAR,LALAR TST FLD5 ; SOFTWARE TOO? BNE MSRCH1 ; YES RTS PC ; NO MSRCH1: MOV R0,B3RR MOV #60,B3FR BR SRCH2 ; TIMERR = . MOV #100000,R0  INTERRUPT. * ;* BIT 7: = 1, USE DISC INTERRUPT. * ;* BITS 2:0 = I/O FUNCTION * ;* 0 = NOP * ;* 1 = WRITE * ;* 2 = READ * ;* 3 = WRITE CHECK * ;*  JMP FCTN ; RETRY FUNCTION ERR2 = . RTS PC ; INGORE ERR3 = . MOV OSBNOB,SBNOB ; RESTORE SB/NOB FOR RETRY. RTS PC ; SOFTCP = . MOV #-32.,R5 SOFC1: MOV BITTBL+32.(R5),A MOV #-1.,B MOV A,C BIC B,C BIC A,B BIS C,B ; PERFORM EXCLUSIVE OR CMP B,ALLTBL+32.(R5) ; SAME AS HARDWARE  * ;* * ;* FLD1: 0 = DEALLOCATE BEFORE EACH CYCLE * ;* 1 = ALLOCATE BEFORE EACH CYCLE * ;* 2 = START FROM WHERE TABLE IS NOW * ;* 3 = SET UP WORST CASE 10101010... * ;* * ;* ; SET TIME OUT ERROR BIT BR ERROR ; HDER1: MOV #1,R0 BR HDERR HDER2: MOV #2,R0 BR HDERR HDER3: MOV #3,R0 BR HDERR HDER4: MOV #4,R0 BR HDERR HDER5: MOV #5,R0 HDERR: BIS #40000,R0 ERROR = . INC NERROR MOV FLD2,R5 JMP @ERR(R5) ERR = . .WORD ERR0 ; SINGLE CYCLE-TRY AGAIN .WORD ERR0 ; LOOP 4 = WRITE THEN READ * ;* NOTE: A CYCLE IS THE WRITE * ;* THEN READ. * ;* COMPUTER HALTS- DATA REQUEST HALT: * ;* IF FCN BIT 15 IS SET USER MAY NOW * ;* SET OR CHECK DATA BUFFER, OTHERWISE, * ;* DATA IN SWITCHES WILL BE USED. * ;*  BNE SOFC2 ADD #2,R5 BLT SOFC1 ; NOT DONE YET CLR R5 ; OK-SET C.C = 0 SOFC2: RTS PC ; ; ; NOTE: DELAY = 2 FOR 23 USEC-11/20 ; ; JSR PC,TIMOUT 7.0 ; MOV DELAY,R5 5.0 ; DEC R5 2.3 ; BNE .-2 2.6 OR 1.7 ; RTS PC 3.5 ; TOTALS 24.4 FOR DELAY = 2 ; TIMOUT = . MOV DELAY,R5 X: DE FLD2: 0 = SINGLE CYCLE * ;* 1 = LOOP - HALT ON ERROR CONDITION ;* 2 = LOOP AND IGNORE ERRORS (START OVER) * ;$ 3 = LOOP - RETRY FUNCTION IF ERROR WITHOUT A HALT. ;* 4 = LOOP - RETRY FUNCTION USING PREVIOUS SB/NOB * ;* 5 = SAME AS 1 - TO PERMITE CHANGES ON THE FLY * ;* * ;* FLD3: 0 = SB/NOB BUT HALT ON ERROR, THEN RETRY. .WORD ERR2 ; IGNORE .WORD ERR1 ; LOOP RETRY FUNCTION WITHOUT HALTING .WORD ERR3 ; RESET SB/NOB IF ERROR .WORD ERR0 ; SAME AS 1 ERR0 = . TST (SP)+ ; POP OFF RETURN PC HALT JMP FCTN ; RETRY FUNCTION ERR1 = . TST (SP)+ ; POP OFF RETURN PC JMP FCTN ; RETRY FUNCTI CONTINUE AND XFER IS ATTEMPTED. * ;* OR * ;* IF BIT 12 SET IN FUNCTION: COMPUTER HALTS- SET END * ;* SECTOR OF SECTOR INCREMENT-THEN * ;* CONTINUE. $ ;* * ;* IF IN A NON-LOOP MODE OR LOOP MODE AFTER AN ERROR, WHEN THE *C R5 BNE X RTS PC ; ; ; SBNOB CONTAINS OLD NUMBER ON ENTRY ; NEW RANDOM NUMBER ON EXIT ; ; USES (2**9+3)RN AS ALGORITHM ; USES R0 AND R1 ; RANDOM = . MOV SBNOB,R0 BNE RAND01 INC R0 ; MAKE SURE DON'T START ON ZERO RAND01: MOV R0,R1 ADD R0,R0 ADD R1,R0 ; TIMES THREE ASL R1 ASL R1  SET BY OPERATOR * ;* 1 = SB/NOB SET BY INCREMENT FROM 0 * ;* 2 = SB/NOB SET BY RANDOM NUMBER GENERATOR * ;* 3 = SAME AS 2 - TO PERMIT CHANGES ON THE FLY. * ;* * ;* FLD4: 0 = SEARCH * ;* 1 = MINIMUM SEARCH * ;* 2 ON ERR2 = . RTS PC ; INGORE ERR3 = . MOV OSBNOB,SBNOB ; RESTORE SB/NOB FOR RETRY. RTS PC ; SOFTCP = . MOV #-32.,R5 SOFC1: MOV BITTBL+32.(R5),A MOV #-1.,B MOV A,C BIC B,C BIC A,B BIS C,B ; PERFORM EXCLUSIVE OR CMP B,ALLTBL+32.(R5) ; SAME AS HARDWARE BNE SOFC2 ADD #2,R5  ;* I/O XFER IS COMPLETE THE R0 DISPLAY HAS THE FOLLOWING * ;* MEANING: * ;* 0 = XFER OK * ;* 1 = XFER ATTEMPTED BUT AFTER APPROX. 150 MSEC., * ;* CONTROLLER WAS NOT READY OR DIDN'T GIVE INTERRUPT * ;* 2 = DATA DID NOT COMPARE TO DATA ENTERED AFTER * ;* A READ  ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; WRAP = . ; MOV R0,R1 ; R0 HAS THE SO/NOB ON ENTRY TSTB R1 ; NOB = 0 BNE WRAP2 ; NO CLR R0 ; YES - FORCE SB TO BE ZERO ALSO. RTS PC ; = ALLOCATE * ;* 3 = DEALLOCATE * ;* 4 = ALLOCATE-DEALLOCATE * ;* 5 = SEARCH-ALLOCATE-SWAP SB WITH NOB-DEALLOCATE * ;* 6 = MINIMUM SEARCH-ALLOCATE-SWAP SB WITH NOB * ;* -DEALLOCATE * ;* 7 = MINIMUM SEARCH-ALLOCATE-NEW SB/NOB-DEALLOCATE * ;*  BLT SOFC1 ; NOT DONE YET CLR R5 ; OK-SET C.C = 0 SOFC2: RTS PC ; ; ; NOTE: DELAY = 2 FOR 23 USEC-11/20 ; ; JSR PC,TIMOUT 7.0 ; MOV DELAY,R5 5.0 ; DEC R5 2.3 ; BNE .-2 2.6 OR 1.7 ; RTS PC 3.5 ; TOTALS 24.4 FOR DELAY = 2 ; TIMOUT = . MOV DELAY,R5 X: DEC R5 BNE X RTS  * ;* OTHER = AN ERROR OCCURRED FROM THE DISC CONTROLLER * ;* AND THE DCS IS DISPLAYED. ;* * ;* COMPUTER WILL NOW HALT AT DATA RESPONSE HALT. MAY CONTINUE * ;* WITH SAME SECTOR AND WORD COUNT FROM HERE. * ;* * ;* PROGRAMMER 54 * ;* RETURN TO CALLER. WRAP2: CLR R2 ; CLEAR R2 FOR BISB BISB R1,R2 ; PUT NOB INTO R2 CLRB R1 ; CLEAR NOB IN R1 SWAB R1 ; PUT SB INTO LOW BYTE COM R1 ; GET NEG VALUE OF SB ADD #256.,R1 ; FIND OUT HOW MUCH ROOM LEFT. CMPB R1,R2 ; HAVE WE ASKED FOR TO MUCH. BHIS WRAP3 ; NO - GO HOME. CLRB R0 ; YES - RESE * ;* FLD5: 0 = NO SOFTWARE ALLOCATOR * ;* 1 = SOFTWARE ALLOCATOR * ;* * ;* PROGRAMMER 54 * ;* DATE * ;* REVISION * ;*PC ; ; ; SBNOB CONTAINS OLD NUMBER ON ENTRY ; NEW RANDOM NUMBER ON EXIT ; ; USES (2**9+3)RN AS ALGORITHM ; USES R0 AND R1 ; RANDOM = . MOV SBNOB,R0 BNE RAND01 INC R0 ; MAKE SURE DON'T START ON ZERO RAND01: MOV R0,R1 ADD R0,R0 ADD R1,R0 ; TIMES THREE ASL R1 ASL R1 ASL R1 ASL R1 ASL  * ;*********************************************************************** ; ; .ASECT ; ; REGISTER EQUATES ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; PSR = 177776 ; PROCESSOR STATUS REGISTER SWR = 177570 ; SWITCH REGISTER ; ; DISC DEVICE REGISTER EQUATT TO MAX AVAILABLE IN R0 BISB R1,R0 ; WRAP3: RTS PC ; ; SAVE = . ; SAVE OLD INFO MOV #PRESTR,R1 MOV #-32.,R5 MOV B3RR,(R1)+ MOV B3AR,(R1)+ MOV B3FR,(R1)+ MOV ALAR,(R1)+ MOV ALFR,(R1)+ SAV1: MOV ALLTBL+32.(R5),(R1)+ ADD #2,R5 BLT SAV1 RTS PC .END ********************************************************************** .PAGE .GLOBL CALDGN .GLOBL SEARCH,ALLOC,DALLOC,B3FR,B3AR,B3RR,BITTBL ; ; ; CALDGN: BR START ; GIVE A NICE STAR_ ADDRESS ; ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; SWR = 177570 ; SWITCH REGISTER ; ALLTBL = 162040 ; AL R1 ASL R1 ASL R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; WRAP = . ; MOV R0,R1 ; R0 HAS THE SO/NOB ON ENTRY TSTB R1 ; NOB = 0 BNE WRAP2 ; NO CLR R0 ; YES - FORCE SB TO BE ZERO ALSO. RTS PC ; RETURN TO CALLER. WRAP2: CLR R2 ES ; DCS = 165300 ; DISC CONTROL STATUS REGISTER WCR = 165302 ; WORD COUNT REGISTER CMA = 165304 ; CURRENT MEMORY ADDRESS REGISTER DAR = 165306 ; DISC ADDRESS REGISTER DER = 165310 ; DISC ERROR REGISTER ; INTVEC = 130 ; INTERRUPT VECTOR ADDRESS ; . = 700 ; SET LOCATION COUNTER FOR BUFFER BUF = . .=BUF+6144. ; RESERVE 3KLOCATION TABLE ALRR = 162020 ; ALLOCATOR REQUEST REGISTER ALAR = 162022 ; ALLOCATOR ANSWER REGISTER ALFR = 162024 ; ALLOCATOR FUNCTION REGISTER ; ; FLD1: .WORD 0 ; START TYPE FLD2: .WORD 0 ; SINGLE OR LOOP FLD3: .WORD 0 ; SB/NOB FLD4: .WORD 0 ; FUNCTION FLD5: .WORD 0 ; USE SOFTWARE ALLOC. TO CHECK OUT ; A: .WORD 0 ; WORK WORDS ; CLEAR R2 FOR BISB BISB R1,R2 ; PUT NOB INTO R2 CLRB R1 ; CLEAR NOB IN R1 SWAB R1 ; PUT SB INTO LOW BYTE COM R1 ; GET NEG VALUE OF SB ADD #256.,R1 ; FIND OUT HOW MUCH ROOM LEFT. CMPB R1,R2 ; HAVE WE ASKED FOR TO MUCH. BHIS WRAP3 ; NO - GO HOME. CLRB R0 ; YES - RESET TO MAX AVAILABLE IN R0 BISB R1,R DECIMAL FOR BUFFER ; SECTOR: .WORD 0 WORDCT: .WORD 0 FCN: .WORD 0 DATA: .WORD 0 FCNSW: .WORD 0 EXTENT: .WORD 0 INTSW: .WORD 0 RDWTSW: .WORD 0 ENDSCT: .WORD 0 STSCT: .WORD 0 ; START = . MOV #BUF,SP ; SET UP SYSTEM STACK MOV #DSCINT,INTVEC ; SET UP DISC INTERRUPT VECTOR MOV #240,INTVEC+2 ; PRIORITY LEVEL 5 HALT ; WAIT FOR START SECTOR MOV SWR,SECTOR ~fw~ޤ~V B: .WORD 0 ; USED FOR C: .WORD 0 ; EXCLUSIVE OR ; ; STORAGE FOR OLD TABLE AND REGISTERS PRESTR: .BLKW 16.+3.+2. ; LALAR: .WORD 0 ; LAST HARDWARE AR AFTER A SEARCH ; SBNOB: .WORD 0 ; DELAY: .WORD 150 ; FOR DELAY DURING CHECKOUT ; SMASK: .WORD 3400 ; MASK OUT UNWANTED SEARCH SBS ; NERROR: .WORD 0 ; # OF ERRORS ; NLOOP: .WORD 0 ; NUMBER0 ; WRAP3: RTS PC ; ; SAVE = . ; SAVE OLD INFO MOV #PRESTR,R1 MOV #-32.,R5 MOV B3RR,(R1)+ MOV B3AR,(R1)+ MOV B3FR,(R1)+ MOV ALAR,(R1)+ MOV ALFR,(R1)+ SAV1: MOV ALLTBL+32.(R5),(R1)+ ADD #2,R5 BLT SAV1 RTS PC .END  ; SAVE START SECTOR HALT ; WAIT FOR NO. OF WORDS MOV SWR,R0 CMP R0,#3072. ; O5 DECIMAL IS LARGEST XFER IN TEST BLOS TST010 MOV #3072.,R0 ; NO-SET AT 3072 WORDS TST010: MOV R0,WORDCT ; SAVE WORD COUNT HALT ; WAIT FOR FCN WORD CLR RDWTSW ; CLEAR READ WRITE SWITCH MOV SWR,R0 BIC #177770,R0 ; ISOLATE FUNCTION CMP ~Υ~F~~6 OF LOOPS ; OSBNOB: .WORD 0 ; LAST SB/NOB USED TO START A FUNCTION. ; .PAGE ; ; ; START = . ; HERE IS THE REAL BEGINNING. CLR NERROR CLR NLOOP MOV #CALDGN,SP ; SET STACK POINTER MOV #-1.,SBNOB ; INITIALIZE CALDG1: HALT ; WAIT FOR TEST INFORMATION CALDG2: MOV SWR,R0 SWAB R0 ASR R0 ASR R0 ASR R0 BI R0,#4 ; IS IT WRITE/READ? BNE TST011 ; NO INC RDWTSW ; SET WRITE/READ SWITCH MOV SWR,FCN BIC #7,FCN BIS #1,FCN ; START WITH WRITE BR TST012 TST011: MOV SWR,FCN ; SAVE TST012: HALT ; WAIT FOR DATA PATTERN OR ; ; LET USER DO BUFFER SET-UP OR COMPARE MOV SWR,DATA ; SAVE JUST INCASE DATA PATTERN ~,~&~;~C #177761,R0 ; ISOLATE FIELD 1 - WORD INDEX MOV R0,FLD1 MOV SWR,R0 SWAB R0 BIC #177761,R0 ; ISOLATE FIELD 2 - WORD INDEX MOV R0,FLD2 MOV SWR,R0 ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 BIC #177761,R0 ; ISOLATE FIELD 3 - WORD INDEX MOV R0,FLD3 MOV SWR,R0 ASR R0 ASR R0 BIC #1  7 7d7lvEpjd ^  8"k~z"& $ҝʝ0 ( wZZֈ~n!zw  Z~~e& eNֈ@f:e e(. *R 'xw6w [vv&~j-& e? 6  eB|[S&  v~ BIT #10000,FCN ; SECTOR INCREMENT? BEQ TST015 ; NO HALT ; YES-WAIT FOR END SECTOR MOV SWR,ENDSCT MOV SECTOR,STSCT ; SAVE START SECTOR TST015: MOV FCN,R0 ; GET FCN WORD BMI SIO ; USER'S BUFFER IS SET-UP,START I/O MOV DATA,R3 ; SET UP TO STORE DATA BIT #1.,R0 ; WRITE OR WRITE CHECK? BNE TST016 ; YES-FILL DAT~J~~~Y~77761,R0 ; ISOLATE FIELD 4 - WORD INDEX MOV R0,FLD4 MOV SWR,R0 BIC #177770,R0 ; ISOLATE FILED 5 MOV R0,FLD5 JSR PC,SAVE ; SAVE OLD TABLE AND REGISTERS MOV FLD1,R5 ; GET READY TO INITIALIZE BIT MAP JMP @INIT(R5) ; DO IT INIT = . .WORD INIT0 ; CLEAR ALLOCATION TABLE .WORD INIT1 ; SET ALLOCATION TABLE .WORD INIT2 vw %%E Cw  eBA  J6 w 0 "$:c~Z2EW  91 7pu  f`Tu7vBABWCEqJ~Ҋ7uœ& ‹ & 5@& N Œ Œ$Œ&&f A `B~JAW,J t   wwl開A BUFFER WITH PATTERN CLR R3 ; NO-CLEAR DATA BUFFER FOR READ TST016: MOV #BUF,R2 ; BUFFER ADDRESS MOV WORDCT,R4 ADD R4,R4 ADD R2,R4 ; TO THIS ADDRESS MOV R4,EXTENT ; SAVE FOR FUTURE USE TST020: MOV R3,(R2)+ BIT #1.,R0 ; WRITE OR WRITE CHECK? BEQ TST025 ; NO BIT #40000,FCN ; YES-INCREMENTAL DATA PATTERN? BEQ TST025~nh~~^w ; USE PRESENT TABLE CONDITION .WORD INIT3 ; SET UP 101010.... INIT0 = . CLR R0 ; SB/NOB = 0 JSR PC,DALLO ; DEALLOCATE WHOE THING BR GETADR INIT1 = . CLR R0 JSR PC,ALLO ; ALLOCATE WHOLE THING BR GETADR INIT2 = . TST FLD5 ; SOFTWARE TOO? BEQ GETADR ; NO MOV #-32.,R5 ; YES INITE~‹dd7" @ D~:: 7fev)-ew7s ss& u Bvvvvvv9 vv & TH~7&f:Е<<9<2- "PPP)mȵ  @@p- ~*ɕe%!G7r& ^<  ; NO INC R3 ; YES TST025: CMP R2,EXTENT ; FINISHED? BLT TST020 ; NO SIO: BIC #177774,R0 ; ISOLATE I/O FDN REQUESTED MOV R0,FCNSW ; SAVE FOR LATER USE MOV #BUF,CMA ; SET UP CURRENT MEMORY ADDRESS MOV WORDCT,WCR ; SET UP WORD NEG WCR ; COUNT REGISTER MOV SECTOR,DAR ; SET UP START SECTOR SEC ~֬~N~ƭ~>21: MOV ALLTBL+32.(R5),A MOV #-1.,B MOV A,C BIC B,C BIC A,B BIS C,B ; PERFORM EXCLUSIVE OR MOV B,BITTBL+32.(R5) ; SET UP SOFTWARE TABLE ADD #2,R5 ; BUMP BLT INIT21 BR GETADR INIT3 = . MOV #125252,R0 ; ALTERNATE 1'S AND 0'S MOV #-32.,R5 INIT31: MOV R0,ALLTBL+32.(R5) ; SET IN ALLOCATOR TABLE AD72nre"2 =~7VrB f  D &  ‹ & & N & z yerEwq5~7q& 5E -?-   Ν   B~e (- -- ee  E E EvÝ;`Ý~ 1`Ý*`%<< % ÝÜ-  ; FOR GO BIT ROL R0 ; SET FUNCTION AND GO BITS CLR R4 ; USE TO COUNT DELAY TSTB FCN ; INTERRUPT MODE REQUESTED? BMI TST040 ; YES MOV R0,DCS ; START I/O FUNCTION TST030: INC R4 ; DELAY A LONG TIME BNE TST030 TSTB DCS ; CONTROLLER READY BMI IOCOMP ; YES-I/O COMPLETE TST035: MOV #1.,R0 ; NO-SHO~~.~,~D #2,R5 ; BUMP BLT INIT31 ; NOT DONE YET BR INIT2 ; CHECK FOR SOFTWARE CHECK ; GETADR = . JSR PC,GETSB ; GO GET SB/NOB BR FCTN GETSB = . MOV FLD3,R5 ; GET SB/NOB FIELD JMP @SB(R5) ; DO IT SB = . .WORD SB0 ; SET BY OPERATOR .WORD SB1 ; SET BY INCREMENT FROM 0 .WORD SB2 ;    UUp&p-,E e]~et?p6  \pw Z߀Lp%%BA  J6 w 0 U~G&o <-o7~r6 w ހelo  0mH5} :-œ-. Da`> oӵ~eK6 w  ULD HAVE COME IN BY NOW BR ERROR ; ERROR ; ; SIO WITH INTERRUPT REQUEST PROCESSOR ; TST040 = . BIS #100,R0 ; SET INTERRUPT ENABLE CLR INTSW ; RESET INTERRUPT SWITCH MOV R0,DCS ; START I/O FUNCTION TST050: TST INTSW ; RECEIVE INTERRUPT? BNE IOCOMP ; YES-I/O COMPLETE INC R4 ; DELAY A LONG TIME BNE TST050 BR ~;~~J~SET BY RANDOM NUMBER GENERATOR .WORD SB2 ; 3 LOOKS LIKE 2 SB0 = . HALT ; WAIT FOR SWITCH SET WITH SB/NOB MOV SWR,SBNOB ; SET IT RTS PC SB1 = . INC SBNOB ; INCREMENT RTS PC SB2 = . JSR PC,RANDOM ; GENERATE RANDOM NUMBER RTS PC ; FCTN = . INC NLOOP MOV SBNOB,R0 ; GET START SBnn V $@5;& H H H)7D% ދ~b1 1 77 b^d7 P7 w̑w\~ڑ `vIvߕwߕx~R~ʒTST035 ; TOO LONG-ERROR ; ; I/O COMPLETE-READY OR INTERRUPT ; IOCOMP = . MOV DCS,R0 ; GET ERROR INFO. BMI ERROR ; WHOOPS-ERROR TST FCN ; USER BUFFER SET-UP BMI RSTART ; YES-RESTART CMP #2.,FCNSW ; WAS IT A READ FUNCTION? BNE RSTART ; NO MOV #BUF,R2 ; COMPARE DATA IN BUFFER MOV DATA,R3 TST060: CMP R3,(R2~vY~~fh~޳/NOB FOR ALL MOV R0,OSBNOB ; AND SAVE FOR A REPEAT (LOOP #4) MOV FLD4,R5 ; GET FUNCTION TYPE JMP @FCTNP(R5) ; FUNCTION PROCESSOR FCTNP = . .WORD FCTN0 ; SEARCH .WORD FCTN1 ; SEARCH MIN. .WORD FCTN2 ; ALLOCATE .WORD FCTN3 ; DEALLOCATE .WORD FCTN4 ; ALLOCATE-DEALLOCATE .WORD FCTN5 ; SEARCH-ALLOCATE-SWAB-DEALLLOCA%~B~BHxHBHI$PQX\_.........~2kkkx 7r wkw 7tw  7^w w >ĝ)+ BNE TST070 ; UH-OH BIT #40000,FCN ; INCREMENTAL PATTERN? BEQ TST065 ; NO INC R3 ; YES TST065: CMP R2,EXTENT ; FINISHED BLT TST060 ; NO BR RSTART ; YES-RESTART TST070: MOV #2.,R0 ; ERROR-DID'NT READ EXPECTED DATA BR ERROR ; ; RESTART TEST AS DEFINED IN FCN ; RSTART = . TST RDWTSW ; READ W~Vw~δ~FTE .WORD FCTN6 ; SEARCH MIN.-ALLOC-SWAB-DEALLO .WORD FCTN7 ; MIN SEARCH,ALL,NEW SB/NOB,DEALL. FCTN0 = . JSR PC,SRCH ; SEARCH BR RSTART FCTN1 = . JSR PC,MSRCH ; MINIMUM SEARCH BR RSTART FCTN2 = . JSR PC,ALLO ; ALLOCATE BR RSTART FCTN3 = . JSR PC,DALLO ; DEALLOCATE BR RSTART FCTN4 = \7Zk70 ~, Zk"Rkw.& dk^k@j D A  &DCc  w 2w  w  ' 7  ~"&w \w wXw w  fw |t w 7 wtwhw  %-E e䓂 wh6 _~ߞ =w F6 / w :( w 2! w * w "w * 7 w 7w 77Ҟߞ Jw7  w ~w (b ww w A B` r% w| RITE REQUEST? BEQ RST020 ; NO BIT #2,FCN ; FINISHED A READ? BNE RST010 ; YES BIC #7,FCN ; NO BIS #2,FCN ; SET TO READ BR TST015 RST010: BIC #7,FCN BIS #1,FCN ; SET TO WRITE AND START NEW CYCLE RST020 = . BIT #10000,FCN ; SECTOR INCREMENT? BEQ RST030 ; NO INC SECTOR CMP SECTOR,END~~6~~& . JSR PC,ALLO ; ALLOCATE JSR PC,DALLO ; DEALLOCATE BR RSTART FCTN5 = . JSR PC,SRCH BIT #1,ALFR ; GET SOMETHING? BNE RSTART ; NO MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART FCTN6 = . JSR PC,MSRCH BIT #1,ALFR ; GET SO7twrjwhg E 7pwhX~P E tP Iw -% w  =w 7 =w e0w ~,w %@w ~ke=w @w Xwww=w  w  dw *Ae0w vB~z,w nHBFw 6- .27, ( B:8w ?w 7 w 777   ~  w %0 %7E `  1 W SCT ; END? BLOS RST030 ; NOT YES MOV STSCT,SECTOR ; RE-PRIME START SECTOR BIT #4000,FCN ; HALT OR CONTINUE BEQ RST030 ; GO HALT ; WAIT RST030: BIT #20000,FCN ; INCREMENT DATA FOR CHANGE? BNE RST200 ; YES RST100: CLR R0 ; SIGNIFY NO ERROR BIT #400,FCN ; LOOP REQUEST? BNE RST300 JMP TST012 RST200: INC DATA ~,~~;~ METHING? BNE RSTART ; NO MOV ALAR,R0 JSR PC,ALLO ; ALLOCATE IT SWAB R0 JSR PC,DALLO ; DEALLOCATE THIS BR RSTART ; FCTN7 = . JSR PC,MSRCH BIT #1,ALFR ; GOT SOMETHING BNE RSTART MOV ALAR,R0 ; YES JSR PC,ALLO JSR PC,GETSB MOV SBNOB,R0 JSR PC,DALLO ; RSTART = ֆ m7 yD|jNr™ `ޚ$,VU~jHʗPڔZ7U<D 2 7.7(%  w %=w w  w ~ w ww   7mw w %/w \ z \~Zpp.  L e  ! B ! =L !644 $ .!464 $ % w G~ҙ  @w @ BR RST100 RST300: JMP TST015 ; ; ERROR ERROR ERROR ; ERROR = . BIT #1000,FCN ; CLEAR AND RETRY REQUEST? BNE ERR1 ; YES HALT ERR1: MOV #400,DCS ; CLEAR DISC JMP RST300 ; ; DISC INTERRUPT HANDLER DSCINT = . INC INTSW ; BUMP INTERRUPT RECEIVED FLAG RTI ; .END ~~J~~nY~  . MOV FLD2,R5 ; GET RESTART PROCEDURE JMP @RST(R5) ; DO IT RST = . .WORD RST0 ; SINGLE CYCLE .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; LOOP .WORD RST1 ; ON RESTART SAME AS OTHER LOOPS .WORD RST1 ; LOOP RST0 = . CLR R0 ; NO ERROR JMP CALDG1 ; START AGAI% % w  ww  D  &C@AEPA&fw ~Jw /w w :w   ` E ` H 8 wFLew 7U4~šE(w T76  p$ew V׭dU7g~:w @ŝŝwdt wt! w w Jw @eZ%ĕt72 $7E1f& f&  ҉20~4r,,,,, ,,[~ROS DISC SYSTEM INITIALIZED   prplelpZj|F 6%.z  {~$ %0 e B6 #E w6 w7  % %  w ~  o wX~^h~ֻ~Nw~ƼN AT FRIST HALT RST1 = . JMP CALDG2 ; START FROM SWR PICKUP ; ; ; NOTE: R0 HAS SB/NOB FOR REQUEST ; DALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #4,ALFR ; START DEALLOCATION JSR PC,TIMOUT ; TIME OUT APPRPRPIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? ~$w Bw .e` w ;w ĝw wf&f 4~*6 0c.c7$c7$c cw rc5ccgbbbV  <6 !%J~& &e N @ e0w &   b7~brbnbE ~w   w ׭4b ^w Uw w nj  7,XRd~"RX L/P 1 PARI^~TY ERROR L/P 1 NOT READY L/P 1 ABORTEDڊ^&f&f  70 B~      *:Ċ2ĊLBܴgi0  & !~|w0~>~~. BNE DALL1 ; YES RTS PC ; NO DALL1: MOV R0,B3RR MOV #4,B3FR JSR PC,DALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER1 RTS PC ; ALLO = . JSR PC,WRAP ; CHECK FOR WRAP AROUND MOV R0,ALRR MOV #10,ALFR ; START ALLOCATION JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; -P Dw~@ 78 %(!  %??w N%w 77w Z e0A~ w ,w w p Cå å$ נA   e` ~ƞ  Ëנe ee e ѐ  @(LLLLl2@ ODT-11R V002ABEI~ *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRBŸ) s3̊3 ʊ3 ΊԊsЊ3 Њ3 Ҋ "L ̑  8  Ԋ:~   ̑wL  MԊ2e2Ċʊgi&  ʊ& ~l f ̊Ԋ D  )  s3̊Ԋ3 ʊ3 ΊLsЊ̑3 Њ3 Ҋ ~  *M 3 n  M Ҋ%Ҋ   M| w  3 Ҋn&Xd x MC~~~,~MAKE IT IN TIME? BNE TIMERR ; NO TST FLD5 ; SOFTWARE TOO? BNE ALL1 ; YES RTS PC ; NO ALL1: MOV R0,B3RR MOV #10,B3FR JSR PC,ALLOC JSR PC,SOFTCP ; COMPARE SOFTWARE TABLE BNE HDER2 RTS PC ; SRCH = . BIC SMASK,R0 ; MASK OUT BAD SEARCH ADRESSES MOV R0,ALRR MOV #20,ALFR eL x  N N Ê <~r%! ,c ѐhˋÜ`E $  P   LwZ ɋr pIxH9~\fԊ  ؊ l Ҋ,Ҋd :   wv&ff& ΊAaes!ЊB3 ֊ D! c~Ԏ! 3  ֊ % !3  ^ĕ  R  s!Њ5ЕsΊ쾋  3  ֊ 5~L  6 & `3   4W 1 .W +5(5%D eD   !!{~ď5  @& 5 55 z ~;~~vJ~; START SEARCH JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIT #2,ALFR ; MAKE IT IN TIME? BNE TIMERR ; NO MOV ALAR,LALAR ; SAVE AR TST FLD5 ; SOFTWARE TOO? BNE SRCH1 ; YES RTS PC ; NO ; ALL SEACHES END UP HERE SRCH1: MOV R0,B3RR MOV #20,B3FR SRCH2: MOV BITTBL+30.,-(SP) ; SAVE OLD SOFTWARE LAST WORD BIS #100000,0x0x0x1 x } {~ `v  W"tqvv0x0w  dl X0ڂ6℀&ΆΆΆB~ 2u~ TASK # 2  N2~> 3؊    ڊ~<nX&d t f  e00& Džw@aAa !U~ @ԊwX f  `Baf` 5 f ƅ1 N~,7 H&  & & &  !"$'(+-.03569:~,~,~~~;~--TRY AGAIN .WORD ERR0 ; LOOP BUT HALT ON ERROR, THEN RETRY. .WORD ERR2 ; IGNORE .WORD ERR1 ; LOOP RETRY FUNCTION WITHOUT HALTING .WORD ERR3 ; RESET SB/NOB IF ERROR .WORD ERR0 ; SAME AS 1 ERR0 = . TST (SP)+ ; POP OFF RETURN PC HALT JMP FCTN ; RETRY FUNCTION ERR1 = . TST (SP)+ ; POP OFF RETURN P.~7     D~(  7 7d7lvEpjd ^  8""& $ҝʝ0 ( w~ZZֈ~n!zw t Zf& fNֈ@f:~f f(. *R 'xwLw ([~YN~~J^~0~nJ~~^Y~1C JMP FCTN ; RETRY FUNCTION ERR2 = . RTS PC ; INGORE ERR3 = . MOV OSBNOB,SBNOB ; RESTORE SB/NOB FOR RETRY. RTS PC ; SOFTCP = . MOV #-32.,R5 SOFC1: MOV BITTBL+32.(R5),A MOV #-1.,B MOV A,C BIC B,C BIC A,B BIS C,B ; PERFORM EXCLUSIVE OR CMP B,ALLTBL+32.(R5) ; SAME AS HARDWARE 2vv&-& e? 6 ]~ eB|[S&  vvw x%%E~ Cw  eBA  J6 w 40 "$:2EW  9~1 7pu  f`Tu7vBABWCEqJ7uœ& ‹ ~ & 5@& N Œ Œ$~;n~~,4~Nh~~>w~5 BNE SOFC2 ADD #2,R5 BLT SOFC1 ; NOT DONE YET CLR R5 ; OK-SET C.C = 0 SOFC2: RTS PC ; ; ; NOTE: DELAY = 2 FOR 23 USEC-11/20 ; ; JSR PC,TIMOUT 7.0 ; MOV DELAY,R5 5.0 ; DEC R5 2.3 ; BNE .-2 2.6 OR 1.7 ; RTS PC 3.5 ; TOTALS 24.4 FOR DELAY = 2 ; TIMOUT = . MOV DELAY,R5 X: 6Œ&&f A `BAW,J O~pt   wwl開M~dd7" @ : 7fev)-eN~`w7s s& u Bvvvvvv9 vv & T7&f:Е<<9~،<2~~~~~8~.~~~9 DEC R5 BNE X RTS PC ; ; ; SBNOB CONTAINS OLD NUMBER ON ENTRY ; NEW RANDOM NUMBER ON EXIT ; ; USES (2**9+3)RN AS ALGORITHM ; USES R0 AND R1 ; RANDOM = . MOV SBNOB,R0 BNE RAND01 INC R0 ; MAKE SURE DON'T START ON ZERO RAND01: MOV R0,R1 ADD R0,R0 ADD R1,R0 ; TIMES THREE ASL R1 ASL R1 :- "PPP)mȵ  @@p- ɕe~P%!G7r& ^< 72nre"2 7VrB f  D &  ‹~ȍ & & N & z yerEwq57q& 5E ~@-?-   Ν   Be (- -W~&~~w6~= ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ASL R1 ADD R1,R0 MOV R0,SBNOB ; NEW NUMBER RTS PC ; WRAP = . ; MOV R0,R1 ; R0 HAS THE SO/NOB ON ENTRY TSTB R1 ; NOB = 0 BNE WRAP2 ; NO CLR R0 ; YES - FORCE SB TO BE ZERO ALSO. RTS PC >~- ee  E E EvÝ;`Ý1`Ý*`%<< % Ý~0Ü-    UUp&p-,E eet?p6  \pw ~Lp%%BA  J6 w  U8~ G&o <-o76 w ~hF~~YV~ ND.E PC S RT V1SA T BL 5 ,R#2 D AD )+R1,(5)(R2.+3BLLTAL V MO : V1SA )+R1,(FRAL V MO )+R1,(ARAL V MO )+R1,(FRB3 V MO )+R1,(ARB3 V MO )+R1,(RRB3 V MO R5.,32#- V MO R1R,STRE#P V MO O NF ILD OVESA; . = VESA ; ; PC S RT 3:APWR ; 0 ,RR1 SBBI R0N ILEABILVA AAX MTOT SERE ; RETURN TO CALLER. WRAP2: CLR R2 ; CLEAR R2 FOR BISB BISB R1,R2 ; PUT NOB INTO R2 CLRB R1 ; CLEAR NOB IN R1 SWAB R1 ; PUT SB INTO LOW BYTE COM R1 ; GET NEG VALUE OF SB ADD #256.,R1 ; FIND OUT HOW MUCH ROOM LEFT. CMPB R1,R2 ; HAVE WE ASKED FOR TO MUCH. BHIS WRAP3 ; NO - GO HOME. CLRB R0 ; YES - ހelo  ~ 0mH5} :-œ-. Da`> oӵeK6 w n n~n V $@5;& H H H)7D% ދ1 1 7~77 b^d7 P7 w̑w\~