$@ @È8P@£ð.j¿ ž,@xÿþÿvÿrÿtÿpÿ0ÿ2ÿ4ÿ6ÿ8ÿ:ÿ<ÿ>ÿ„†€ÓÍ},&@m,L@ ÁÂH €`�`À% ûÀ%€öß,r@`Q ß¼UßàߺLßàÀXÁ,˜@ZÈMÉ€€`�`À%x÷ß_€ßü@‚À€ÐB,¾@_ÐfCÐ_ÐEÐ_ÐFÐ_Ð>GÐ_ÐîGÏ,ä@Ð_ÐIÐ_ÐlK ÷ þÆÿàúþ7 -, Aÿ7 ÿ7 ÿ7 ÿ÷ÿ÷ÿÿÿ Øþ�÷Upòþ,0AwvˆX÷ 8÷%k²÷UØþ÷%7¢ðˆ&,VA.X÷ ÷%k’÷%7Šó÷U®þˆ>X÷ ð0,|A÷år; 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.&ptÆ÷xÿàÿ$xÿ0.LÀxÿ7ØÿÀxÿÀEÇÿ€ € ÑÉ  þxÿxÿ ( 2.rÁÂÐ Á ü7 ²ÿÀxÿÀEøÿ  ·  ÿõ xÿN.˜÷xÿ�ÿ÷EŠÿ÷U„ÿ÷xÿ|ÿ÷xÿvÿ÷5:xÿxÿ"xÿ9.¾nÿ÷xÿpÿ÷\ÿlÿÀZÿ�ÃVÿÀ5 Ââ  xÿk.äÄBÿa„`7BÿÒÀ5÷5@.ÿƒ · ,ÿô‡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 ÷%lõƒ÷f®þw ªþw ¦þˆWX÷ Êá,¢A÷%Løƒ¡w Dw @÷]<hþˆ`X÷ ²÷%k,Á,ÈA÷%7$óˆoX÷ �÷E÷ ö÷%x,îAòƒ÷>þ÷:þ*þˆ„X÷ h÷%@êøƒ÷äþˆõ,B�X÷ R÷%Ôøƒ÷%Ì ÷U€òý÷Àöý¡w Ç,:Bðý÷Epàýˆ¢X÷ *÷%k¤÷%7œó÷U@O,`BÀýˆªX÷ ÷%k„÷%7|ó÷U  ýˆ¸X$,†B÷ ê÷%kd÷%7\ó÷U€ý÷5pzýÌ÷5b,¬BrýˆìW÷hý®7 ª7 ¦À¢÷ ,w jjVÆ,ÒBöWˆöW÷5BýBw’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé,øBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿,Cÿÿÿÿÿÿÿÿÿÿ * ;* DISC TEST PROGRAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * ;* ÀEüÿ7 ÿÿìþÿÿäþ? àþÿÿÞþ±@  ÷‹‚ Â.0üþ �?Èþ„ þÿ‹Àþ�À^ÀU@7 æþ?¬þ÷ ó.VÞþ„ ûñÀœþO�÷ Äþ�÷%ÀþÂôþü $¬.|Ò ÷5@¨þƒ · ¦þö‡À6÷ œþ÷5É.¢Šþ÷E‚þ÷U|þŽ÷Etþ÷Unþ÷5hþ_.È· ^þ÷-Zþhþƒ÷dþPþ÷5Nþ÷5 Dþ ’.î÷5:þw¸þ· 2þöwÌþ÷5$þÿìýÌwèÿ· þ›ó RAM * ;* * ;* START PROGRAM: * ;* COMPUTER HALTS- ENTER START SECTOR IN SWITCHES * ;* AND CONTINUE. * ;* COMPUTER HALTS- ENTER NO. OF WORDS IN XFER * ;* AND CONTINUE. * ;* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜,DCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆ‘,jCßxÿ÷°ü÷ÆX²ü÷¬ü¶ü7 ¦ü7 žü7 œüw š,�C. ÷¢ü”üÿUnü‰ÿ‹hüý€ÿ bü€÷„ü÷Vüä,¶CŽü÷Vü†ü÷ ‚üw Êè÷ \üÿU8ü‰ÿ‹2üý€Õ,ÜCÿ ,ü€÷,ü\ü÷ Xü÷üTü÷>üw ”è7 8üÀ,D7 2ü÷æB"ü÷@ü÷$üüÿUîû‰ÿ‹èûý€ÿ p,(Dâû €÷Üûü÷ü ü÷øûw NáÀòûtÀe¡,NDÆX7øûÁ@ÐÿÿC~ÿU¨û÷¼û÷ÆX¾û÷Äû®,tD´û‰ÿ‹�ûý€ÿ Šû€÷„û¼û÷¬û´û÷ °û÷œû,šDw ò÷pûÆw ’jV�Wˆ�WÕÀ”ûÁ@ B~�,ÀD7 tû÷rû`û÷Æ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. * ;* ^û÷@Pû‰ÿ‹0ûý€ÿ *û €÷¤,æDLû÷ûVû÷ûNûw –â÷%?8û· 2ûwöþn, Eÿ5îúwNþ7 ûßxÿ÷û7 û7 ûÆS,2E÷ÆXôú÷æúÀÆXÐüú· øúÀ%Æhù÷îúàúá,XEÿU®ú‰ÿ‹¨úý€ÿ ¢ú €÷œúÒú÷¾úw ôí",~E÷¶úÀú÷e  ú÷%´ú×7 ®ú7 ¬ú7 Œú÷„ú¨,¤E÷Æh„ú÷@vúÿUVú‰ÿ‹Púý€ÿ Jú €÷lú¢,ÊE÷>útúw œíÀÆhÁLúWtÂ@$� „~ ,ðE7PúwNú÷8úw Ž· $ú÷%@úÐÿ5êùŒ,F€7 úßxÿ7 úw ÆÿUØù÷ÆXôù÷@,ùý€ÿ 8ùÈ,ÔF €÷ Zù÷,ùbùw Šð÷-LùØ! ÷DùPù÷Ì!,úFHù÷ 4ùw Š÷%ÿ,ù÷5?$ù· ù7 ù· !, GùÒ÷U?ù÷e?úøËÿ5ÈøwÚþ7 èøß @,FGxÿ7 Üø7 èøÆ÷Ìø÷ÆXÎøÀ¶øÿU¢ø‰ò,lGÿ‹œøý€D@ÿ ’ø €÷ ´ø÷†ø¼øw ä é–øß,’GÂEþ—tÁŒøÁeÁEÀÿB`· ˜ø·”ø÷ ~øŸ,¸Gw Ô ÑÂ%· bø÷%?\øÈ7 Vø· PøÁLøÁe,ÞG _xÿ½ÿ5ø¨ÿUøß xÿw 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 *øÀ@ÁÆXÑUU~Ë,*H÷ÆXþ÷‰ÿ‹Ö÷ý€ÿ Ð÷ €÷ò÷÷Ä÷ú÷w " ÏD,PH7 Ö÷· Ð÷‰ÿ‹®÷ý€ÿ ¨÷ €÷Ê÷÷œ÷Ò÷w ú g,vH»÷€¨÷÷ ¦÷÷?¢÷÷Æh ÷‰ÿ‹x÷ý€ÿ r÷ €Û,œH÷”÷÷f÷œ÷w Ä  À@ÁÆhÑ%UU~ ÷ú,ÂHp÷wz÷÷UUv÷w ¼ ŒÀ@Ñ%UU~ ÷ó,èHL÷÷UUV÷wP÷w ˜ wòþÿ5þöúÿU÷߀,Ixÿw (w ÿàäöÆÀ€ÁÆXѪ*~÷€ö,4Iðö÷ÆXòö7 èö÷?äö‰ÿ‹Àöý€ÿ ºö €÷´öêöî,ZI÷Ööw Ï÷@ºö7 ¸ö÷?´ö÷Æh²ö‰ÿ‹,€IŠöý€ÿ „ö €÷¦ö÷xö®öw Ö ´À@ÁÆhÑ%÷,¦Iª*~ ÷‚ö÷ª*Œöw†öw  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÷@Rö÷ÆhTö7 Lö‰ÿ‹(öý€ÿ "ö)€÷DöÕòI÷öLöw t ƒË,>JÀ@ÁÆhÑ%ª*~ ÷àõ÷ª*êõwäõw , ÿ,dJwœþÿ5’õú7 ¶õ7 °õ÷¸õ¨õ÷ŽJ¼õÿàxõ/,ŠJw 2w vß’õxÿ÷5@„õ÷ÆXˆõC‰ÿ5Rõl,°JÿhõHõ÷5 `õ÷ÆXdõÿà2õG‰ÿ5À,ÖJ(õÿ>õõ÷56õ*÷Æh:õ÷E(õÿ¹,üJàõw 8· õE‰ÿ5ðôÿõæôÿ5þ,"KÜôw 0w ÷ðôõ÷Eüÿ õ÷%õÜÿ5¸ô3,HK—÷ ÞŸ÷ Îô€w\÷eÌô÷%$Æôˆ7 Àô÷j,nKþÐôÆ÷E¦ô÷6L¾ôÿšôzô÷¶ôÁÆXw ,”KJ÷Eþ* õ ; 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!÷$ ‚ô÷ €ô÷EÀÿzô÷Eþ ÷5Ú,ºK ÷  ÷ `ô÷ZôvôÁÆXw ÷ÆXRôÿU ,àK*ôC‰ÿ5ôÿ,ô ôG‰ÿ5ô-,Lÿôöó÷Æhôw $E‰ÿ5àóÿöóÖóÏ,,Lw (w ÷5æó÷EÞów ò *@aWw è Ò,RL(@mWw Þ &@�WˆUWmWaW�Wÿÿ· ÐóŠÿ5n,xL†ówìþ7 ¦ó7  ó÷5”ó÷Žó®ó÷Eãÿ¨ó÷-£,žL¤óœó÷exóˆ¿X÷Elówðõff&ÅNóò,ÄLÀ`óÀEþtÁVóÁEÀÿ@` åNóåBó � ,êLwVó÷E€ÿPóåLó€�…ÿEüòÿ ór€÷U>,Mó÷þò,ó÷EÀÿ&ów  D@mWˆW÷Üòó÷Eøÿ4,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. %þò÷Eüÿøòw êD@ùWˆùW÷þ,\M´òäò÷ àòw ÒD@aWˆmWaWÿÿ÷’òÈòw ºD@#,‚MuWˆuWÿ5@|ò÷~ò¬ò÷¨ò÷Eÿ¢òw ”D@·,¨M�WˆFW�WÿÿÿURòÆÿ5<òtòÿ 9,ÎM>òÿ5(òÎåÿ5òÿUòÿ5 g,ôM òÿ5òÆüÿ5€òñ…ÀêñÀE€ÿ/,N÷Eò7Pò÷ò…ÁöñWtúÿÁmòñÂìñ—tO,@NB`‚ ·þñ¿ Æñ÷U@ÎñÁ5ÀÿÁå@÷eÄñ÷5Ž,fNþ¾ñ7 ¸ñ ÎeÁEÀÿw¬ñ÷5@žñ‡w ®�,ŒN*@aWw ¤F@mWˆ8WmWaWÿÿ÷E@vñ7 zñ7 ù,²Ntñÿ5Fñ‡Àhñ÷^ñzñÁÆXÀ%"8O¸,ØN÷ hñû…ÀPÄNÃ&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 ¢,þNÄm4B Àe/D B ÄeOB Âe€`D 7÷ ñ1,$O7 ÷ ñ×…ÿÿH¹·F€8ŽÇqUUªª,JOßÿBó¼žg€PÃ07 êð÷ÆXÔð÷ÆhÐðÿ/ÊðÊðï,pO· Òð÷-¬ðÌð÷e´ð÷e°ðï…÷UŽð÷¦,–O’ðªð÷Šð¦ð÷m¤ðžð÷5Àÿ˜ð· ”ð÷å@Œðö÷Ä,¼OdðŠð÷Eãÿ„ð÷€ð÷]|ðvðw fD@aWw \F@mW�,âO÷PðZðw LD@®W÷BðJðw <D@¾W÷ðž,P:ð÷Eüÿ4ðw &D@ùWˆWùWmWaW®W¾Wÿÿÿ5f,.PÐïžÄÆXÄÆhÀ ~…ÄØïD ÄeÆh£,TP!Æx…Ô ú÷U¼ï7÷åúw ÆjV�W,,zP7ì÷åæ÷âàw ¬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ˆ,W�W¾WÿÿÚ,, PÿUfïÿàVïÆ÷ÚPN¯÷àJ¯÷&vïÿ rïê,ÆP÷%&ÿlï÷e `ïô÷$¯7 "¯Æ÷å ˆ,ìPJï÷åÆXDï÷@ï:ï7 6ï÷2ï"ïÿ€øî÷Q0ï7 È,Qï7 ï÷ ï&ïÁÆXw ºý÷ÆXïC‰ÿ5Ìîÿ,8QÿâîÂîG‰ÿ5¶îÿÌî¬î÷ ÐüÝÖ,^QØ÷¢Q¦®7 ¤®÷þÌîÿUŒî · úÿ÷‹öÿû€ö,„Q· ´î÷ óÿàlîÿEfîˆXwp÷‹8,ªQ„­ß0ÿ߀ÿ2ÿßR4ÿ· RÁN_6ÿÁEüÿM,ÐQ_8ÿß0ÿÁ:7 p£ß5Põ‡ß5Põ÷$*öQ îÿ‡ßRõ߯XVõßðTõßRõ‡ê,"SÆ÷ ÿUÜì7 öì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 * ;* 1÷œSЬ÷àD,HS̬C‰ÿ5®ìÿÄì¤ì÷ ÈúòáÿUžìD,nS7 ¸ì7 ²ì÷hSÄìG‰ÿ5|ìÿ’ìrì÷ c,”S–úòwŽÿÿUjì÷ªSl¬÷œSd¬Æ÷ÔþŠì],ºS· „ìüw¢ÿÆ÷ `7 Xì7 Rì÷ÎSdì÷TV,àS2¬÷à.¬G‰ÿ5ìÿ&ìì÷ *úòäÐ,TÿUì÷T¬÷Tú«Æ÷Ôþ ì· ìüz,,TÐÿUØë· ìÆ÷êë7 äë7 Þë÷äë÷Ï,RTàëÐëw fú÷ÆXÎë÷.TÚëC‰ÿ5’ëÿ¨ëV,xTˆëG‰ÿ5|ëÿ’ërë÷ –ùçˆX4,žT¢ëÿ\ëhëüÿTëbëüÿLë\ëüÿDëVëüÿ<ë�,ÄTPëüÀNëûÿà*ëÿÿÿ0ëÿÆX,ë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ÿë"ë¸,êTÿ5ëðÿ‹ëý€ìÿU ë÷üê@ë÷<ë8ë÷Eüh,U2ë7 .ë7 *ë7 &ë7 "ë7 ëÿëèê÷Ðêë÷ëý,6Uw ëw ëw ë÷EÿüêÿøêÄêÿÆh¼êÿÿÿ´êÿU,,\U¬êÿ‹¨êý€ÿ-Üê”êÆûw ÆD@ÒWw ¼6@HWp,‚UˆFWHWÒWÿÿ…w ¦D@ÒWw œF@ßWw ’À,¨U6@HWˆFWHWÒWßWÿÿ…€à%ˆ.€Îeì,ÎU7”L÷¥@F÷¥%<÷¥"4÷ îÿ53,ôU@êÿ� êÿ‹êý€‡÷• ÷ àÿ÷• ÷ ,VÖÿØ€Îe7 ÷%ÿÿˆów,Aæ,@VB�`Ã"ÃEøÿÃe0á�÷E7 7 7  3,fVî…÷ „÷@|ÿà‚é7 pÿ‹‚éý€6 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ÿ†,ŒVxétéÿ‹téý€ÿ%ÿjé ˆÐW÷EL7 H7 D7 ·,²V@çÿ%�Jé‡ÿ=2@éˆÎWÛ÷4épé÷EøÿP,ØVjé¡w ¡w ¡w ÷mTéÈÀEøÿtÉ,þVÀeÀêÁ @Ð 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 """"""" ˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ@DDDDD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆDDDDDDDDDDDDD@D""""""""""  """"""""""""""""""3ADD3B B C£ð.¡K¿ ËE›b nÑ›û €^c ›“v›ô&·{Ñ '°›,8^—{Ï  L›ô&^Ñ P`›,8^^Ï dh›ô&¡KÑ lx›ŠŠ›ŽŽ›ër@λz�G§›û €¡Kc Çz~›û €¶{c š|î›,8^–{ûö 4›û € Nc ˜‚.a›û €”fc ÇÕÙ›ü"›û›ü8(Ô›ü>)Þ›ô&¶{ü¥)Èý›% &*›% .2›% 6›$D«êîîîîîÿ¿™™™™™™ÝÝ™ÝÝÝÝÝÝÝÝýßÝÝÙ�™™»»»»»ªªªªªŠˆˆˆˆˆˆˆ¨""""""""""""""""""3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅaå €�Í‹æÄ,L ƒÖ B8Žw&Ä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ÿÀ€ € € ÀEñÿ7ŠÿÀxÿÀÀEñÿBü \}xÿ"xÿ³.‚7~ÿÀxÿ€ € € € € ÀEñÿ7jÿÀxÿ€ € ÀEñÿr xÿ xÿÏ.¨7\ÿÀxÿÀEøÿ7Rÿ÷ ÚÅ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ûê÷ Åðþ}ð (­.",22÷xÿÿ‡· ÿ‡÷ 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€ä Àä÷ ^÷ BÿÀdþ÷ <ääÑ.ØÅ(þ}àìòòòòò wpþwnþ7ä÷Æ& à ìòòòòò$ä¶.þä÷ `÷5€äs÷ úý‡7÷÷ ÷ ƒ ä亀p"®€p&4[M.$"h‡7ä÷ä÷ ,÷5€äY÷ Æý‡7‹ äääÂ.J÷÷ ÷ îQ‡ÀMÚý7ä÷ä÷ ô º€p ®€p,8^ä$äK.p÷5] ; 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†.–°5÷5€ä÷5€0÷5€+÷-ä*œ  䮀p®€p$ä&©€pK.¼‡ÀMzý7ä÷0ä÷ ”÷5€ä ÷äXý÷ (ýÉ äää"ä£.â‡7÷0ÏÀ€À ÀÀ  º€p®€p].ÀÀÀU@· "ýÅäü}$00>8@G$ 0"0$>&8(@¹..0Ö wþÖ wúý‡÷þüòü‡Åàÿ÷U€u-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@äÅeû‡H º€p©€p ®€pää‹óeUEST? 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^¯”hf€p@[gÐ4@(´À.,8^h„ü \}h©€ph$®€ph&º€ph"4[Mh¬‰wqh.¯”i÷æ.Î.&ÿÿ÷‹ðÿ 7 ìÿ÷%üäÿ%÷U€àÿ‡÷5 a.LØÿ ÷¥Ìÿ7 Ìÿ÷ÿÿÈÿ÷Eð ÷U0š÷Eÿ(.r˜÷U’'÷E ¤ÿï÷‹šÿ÷E€–ÿ‡÷Eðp7.˜÷UPj÷Eÿh÷U„b÷‹rÿì÷EðP÷U@J.¾÷EÿH÷U„Bw ÀPÿ7 Jÿ7ÐFÿŠÀ   ‹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 [gÐ4.äD € „  ‚ Â5øqÑ W 9îÄ5ƒÉ. ÷5 ÿà ÷ ÿ ÷ ÿ†÷ÿ÷úþôþ„.0÷E€ðþ Ú÷5 æþ'ƒ ÷ ØþÒƒÂíÐþ‚ ÂÂÝd.VÈþ·Èþ÷E€Äþ„  ƒ Ã5úqw ‡÷5  "hf€pè.|¨þ÷U€ þõ÷ žþù�ñƒ ÷ Šþ«ª·ŽþÂí~þ1¢‚ ÂÂÝvþ·zþÂzþ�ªóEIVED 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ÀëÀ€ € € ÀEñÿ7ŠÿÀüêÀÀEñÿá,‚7~ÿÀîê€ € € € € ÀEñÿ7jÿÀØê€ € ÀEñÿ·,¨7\ÿÀÈêÀEøÿ7Rÿ÷ ÚÅBÿ}ÄÌÖàøÀ_,Îÿ÷ "Àÿ÷ L÷ &ÿÅàÿu@äÞÅe®,ôú ÀªªÅàÿ5@äÅeûê÷ Åðþ}Í,",22÷Pêÿ‡· ÿ‡÷ 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-÷ Ü÷5€ŒÎÀU,Œ„Î÷ ˜À÷ ^÷ ÷5€pÎÀhÎ÷ |À÷ ª,²B÷ ÷5€TÎ ÀJÎ÷ ^÷ BÿÀdþ÷ á,ØÅ(þ}àìòòòòò wpþwnþ7Î÷;,þÎ÷ `÷5€ Îs÷ úý‡7È÷Æ÷ H÷ Ð,$"h‡7âÍ÷àÍ÷ ,÷5€ÖÍY÷ Æý‡7a,J”÷’÷ ì÷ îQ‡ÀMÚý7ªÍ÷¨Í÷ ô[,p÷5€žÍ=÷–͸ý÷ ˆý‡7V÷T÷ X÷ R,–°5÷5€tÍ÷5€<0÷5€2+÷-ZÍ(*z,¼‡ÀMzý7JÍ÷0HÍ÷ ”÷5€>Í ÷6ÍXý÷ (ý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 = xâ‡7ö÷0ôÏÀ€À ÀÀ,ÀÀÀU@· "ýÅäü}$00>8@À,.0Ö wþÖ wúý‡÷þüòü‡Åàÿ÷U€Šu-ç,TÞ@äÅeù ‡ÅÒüÅ þ‡ÀÆü€ `æ,z@`Á Á Á Á Á Á Á Á Á @`7¤ü‡Á ÅàÿÑÂ$ >Ñ<Ñ:ÑdÌÑbÌQ@äÅeû‡,¾þ,äÿÿ÷‹ðÿ 7 ìÿ÷%üäÿ%÷U€àÿ‡÷5 ‘, Øÿ ÷¥Ìÿ7 Ìÿ÷ÿÿÈÿ÷Eð ÷U0š÷EÿW,0˜÷U’'÷E ¤ÿï÷‹šÿ÷E€–ÿ‡÷EðpfyTOR 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 ,V÷UPj÷Eÿh÷U„b÷‹rÿì÷EðP÷U@JF,|÷EÿH÷U„Bw æÀPÿ7 Jÿ7ÐFÿŠÀ   Ô,¢D¾ € „  ‚ Â5øq¾Ñ W 9îÄ5,È÷5 ÿà ÷ ÿ ÷ ÿ†÷ÿ÷úþôþ´,î÷E€ðþ Ú÷5 æþ'ƒ ÷ ØþÒƒÂíÐþ‚ ÂÂÝ”,Èþ·Èþ÷E€Äþ„  ƒ Ã5úq¾w J‡÷5 °,:¨þ÷U€ þõ÷ žþù�ñƒ ÷ Šþ«ª·ŽþÂí~þ``‚ ÂÂÝvþ·zþÂzþ�Ùr&æ¦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 À(ß7ØÿÀßÀEÇÿ€ €  Ñ"É  m,r Á РÁ ü7 ²ÿÀîÞÀEøÿ  ·  ÿe,˜ ÷ÜÞ�ÿ÷EŠÿ÷U„ÿ÷ÈÞ|ÿ÷ÀÞvÿ÷5†,¾ nÿ÷°Þpÿ÷\ÿlÿÀZÿ�ÃVÿÀ5 °,ä "ÄBÿa„`7BÿÒÀ5÷5@.ÿƒ · ,ÿô‡, !ÀEüÿ7 ÿÿ"ìþÿÿäþ? àþÿÿÞþ±@  ÷‹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®,¢!Šþ÷E‚þ÷U|þŽ÷Etþ÷Unþ÷5hþD,È!· ^þ÷-Zþhþƒ÷dþPþ÷5Nþ÷5 Dþ w,î!÷5:þw¸þ· 2þöwÌþ÷5$þÿìý±"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 D‡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 = . MOV R0,ALRR MOV #10,ALFR ; START ALLOCATION JSR PC,TIMOUT ; TIME OUT APPROPRIATELY BIˆNO. 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 NO´CSTST.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 * ;* .[gÐ4¯”( [gÐ4h¯”è÷æ&æ¦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: .hf€p¯”(hf€ph¯”ö÷æÖ €�‚ƒ„…�ó“; 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 O•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 = 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 .W�5740,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 FC¡S 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 COMPARE«O 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 ; RESE¾LT ; 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)+ ; SE¿PRIORITY WILL NOT BE ALLOWED OVERLAY TASKS. A MAXIMUM ; OF 127 ENTRYS PER QPART WILL BE ALLOWED. ; ****NOTE: BE SURE PRIORITIES GREATER THAN NPRIOR HAVE ; TABLE SIZES OF 0 ; NEQP01 = 10. ; 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 CEÃOF 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 TSÏAT 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 CURREÓXXXX ; 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,&ptÆ÷0ýàÿÊ,LÀ(ý7ØÿÀýÀEÇÿ€ € ÑÉ  ©,rÁÂÐ Á ü7 ²ÿÀîüÀEøÿ  ·  ÿƒ,˜÷Üü�ÿ÷EŠÿ÷U„ÿ÷Èü|ÿ÷Àüvÿ÷5J,¾nÿ÷°üpÿ÷\ÿlÿÀZÿ�ÃVÿÀ5 °,äÄBÿa„`7BÿÒÀ5÷5@.ÿƒ · ,ÿô‡P, ÀEüÿ7 ÿÿìþÿÿäþ? àþÿÿÞþ±@  ÷‹ƒ,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Ì,¢Šþ÷E‚þ÷U|þŽ÷Etþ÷Unþ÷5hþb,È· ^þ÷-Zþhþƒ÷dþPþ÷5Nþ÷5 Dþ •,î÷5:þw¸þ· 2þöwÌþ÷5$þÿìýÏ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!!! .ENDâ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 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 = 1777íIMOUT ; 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,R0îUE 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 OVð76 ; 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 Rø165760 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 00ù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 #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 MAINTAINü0070 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,B3ÿING ; ; 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À€ € € ÀEñÿ7�ÿÀëÀÀEñÿ7„ÿÀôê€ € ,ˆ€ € € ÀEñÿ7pÿÀÞê€ € ÀEñÿ7bÿÀÎêÀEøÿý,®7Xÿ÷ FÅHÿ}¾ÆÎÖ ÷ B, ÷ rî,Ô(÷ 0ÿ%Åàÿw@ä&ÿ÷ÿÿ"ÿ÷ÿÿ÷Mÿÿ÷M¦,úÿÿ÷]ÿ ÿõÿDÅeè ÀªªÅàÿ5@äÅe1, ûØ÷ ÅÖþ}4<FLL÷6êúþ‡,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 ü \} Æ.~÷ŠüŒü÷M†ü†ü÷M~ü~ü÷]|üxüõ-tü@äÅeç—.¤ ‡Å”üÅ þ‡Àˆü€ `@`Á Á Á Á Á É.ÊÁ Á Á Á @`7fü‡Á‹ ‡ BЊÁA Áe0.ðB †Š@ЇÁÅàÿÑÑÑÑäÑ º€p©€p"®€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Î÷ šÀ÷ \÷ ,ù,¸÷5VÎÀNÎ÷ ~À÷ @÷ ÷5:Î Àä,Þ2Î÷ b÷ DÿÀRþ÷ Åþ}ø     ¼, wRþwPþ÷ È7úÍ÷øÍ÷ ˆ÷5îÍx÷ ‰,*Þý‡7÷÷ j÷ ,m‡÷ �7ÂÍ÷¯,PÀÍ÷ P÷5¶Í\÷ ¦ý‡7Ú÷Ø÷  ,v÷ ôT‡ÀMÀý7ŠÍ÷ˆÍ÷ ÷5~Í@÷vÍr*œžý÷ hý‡7œ÷šæŽ÷U€ˆ÷ ”·´,À€÷ ¨1÷5FÍ÷5t,÷-4Íh*‡À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,æZý7$Í÷0"Í÷ ²÷5Í ÷Í8ý÷ ý‡˜, 76÷04ÌÀ€À ÀÀÀ,2ÀÀU@· ýžü}JVVd^fVÖ …,XwôýÖ wîý‡÷ÞüÒü‡ÅàÿwD”ü÷ÿÿ�ü ,~÷ŠüŒü÷M†ü†ü÷M~ü~ü÷]|üxüõ-tü@äÅeçˆ,¤ ‡Å”üÅ þ‡Àˆü€ `@`Á Á Á Á Á º,ÊÁ Á Á Á @`7fü‡Á‹ ‡ BЊÁA Áe!,ðB †Š@ЇÁÅàÿÑ>Ñ<Ñ:ÑþËÑhüËQ@äÅ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"Jÿÿ÷5 òÿ ÷¥æÿ7 æÿ÷ÿÿâÿ÷EðV,p”÷U0Ž÷EÿŒ÷U†÷E ¾ÿï÷Eðr÷U,–Pl÷Eÿj÷U„d ÷EðX÷U@R÷EÿP÷UJ,¼„Jw ðÀ~ÿ7 xÿ7Ðtÿ÷lÿŠÀ   J,âD$ € „  ‚ Â5øq$Ñ W 9îÄ5ú,÷5 8ÿà ÷ (ÿ ÷ ,ÿ†÷&ÿ÷ ÿÿ�,.÷Eÿ Ú÷5 ÿ'ƒ ÷ þþÒƒÂíöþ‚ ÂÂÝ8,Tîþ·îþ÷Eêþ„  ƒ Ã5úq$w L‡÷5 ,zÎþ÷UÆþõ÷ Äþù�ñƒ ÷ °þ«ª·´þÂí¤þ» ‚ ÂÂÝœþ· þ þ�'´# 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÷¯”Àº.ÀÆÀ÷˜zæ÷ væ2.æ÷ŽåÔÿÀ†å ƒÀ 7Âÿ7 ÈÿÀnåÀE?. øÿ  · ¶ÿ÷\å¦ÿ÷E ÿ÷Ušÿ÷Hå’ÿZ.2÷@åŒÿ÷5„ÿ÷0å†ÿ÷rÿ‚ÿÀpÿ�Ãz.XlÿÀ5 ÂÀÄXÿa„`7XÿÒÀ5÷5@ç.~Dÿƒ · BÿôÀEüÿ76ÿ÷À,Ð÷&ÿ$Ð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÷ ²þ÷5 þ÷E˜þ÷U’þŽ÷EŠþ÷Un.<„þ÷5~þ· tþ÷-pþ~þƒ÷zþfþ÷5dþÕ.b÷5 Zþ ÷5Pþw¸þ· HþöwÌþ÷5~ˆ:þ÷,Ï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 2ß0ßû €.,ÀÆÀ÷˜zæ÷ væ7,æ÷ŽåÔÿÀ†å ƒÀ 7Âÿ7 ÈÿÀnåÀED, øÿ  · ¶ÿ÷\å¦ÿ÷E ÿ÷Ušÿ÷Hå’ÿ_,2÷@åŒÿ÷5„ÿ÷0å†ÿ÷rÿ‚ÿÀpÿ�Ã,XlÿÀ5 ÂÀÄXÿa„`7XÿÒÀ5÷5@ì,~Dÿƒ · BÿôÀEüÿ76ÿ÷À,Ð÷&ÿ$Ð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÷ ²þ÷5 þ÷E˜þ÷U’þŽ÷EŠþ÷Us,<„þ÷5~þ· tþ÷-pþ~þƒ÷zþfþ÷5dþÚ,b÷5 Zþ ÷5Pþw¸þ· HþöwÌþ÷5ƒˆ:þ÷,Ïwèÿ· 0þ®ø7SIDENT 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 LOO�L 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 SOFTWAR¶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,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 EQUATÔT 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 3KÙLOCATION 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 Üî£ð~f¤w~Þ¤ÿ~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 ; NUMBERÞ0 ; 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 „À7d7l‡÷þÿv÷Eàÿp·j·d· ^÷ þíþæðí÷ 8ô¢ˆ—"Âk~zˆ®ˆ—"& ¦’$Ò�ÎíÊ�0Ò Ò(Ê ÷ íw²öZZßÖˆßà÷~‡ß‰·n·!€íƒÆzíw æ· Z~~òˆÀ¨e& °eü‡·NþßÖˆß@fÿÆ:À°e¨ ¨eü‚÷(.÷ *æR‰÷ Œì×'xÿÿÿw6¿w ÈåÆ[æœv÷à–v&Ð~j‰×-&¾‹‚€È ÷e?ð �6 °È €¶Èeø¬ÿÿôîð�¨ì¶öB|÷•[¶üÿ÷Š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 ·  ÁeÀ‹BA  ûJ³à‹É6 w Ôä0œŒŒ€ ð‹Œ"$·ŠÐô‰À:c~ZŠ÷å2ȬÿÿôœÁEðÿW íÁ 9à‹1à‹ æ7pu ðŠŒÔÀ À À fÁÀ‹`÷àTu7�vBABW¬ÿùñŠöCEqœJ³~ÒŠ°à‹É…7uœó‹æœ& ‹€÷ Àó & Â5@Î& ÷ NïÖ ÂŒ€Ó ÂŒ€ûÜÓ$ÂŒ€&&fû …„€A¶÷“è÷ æ«ÁÀ‹`Bü~J‹A¥W,ÿúJ°à‹É÷ Àñ—ÀÀ‹Á÷à†tÐ Á üÿ ÷Š˜wúþwlé–‹ë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ìá~n«h~æ«ð~^¬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 INITîE~‹dd7Š"÷ Ä@÷¼÷ D~:Œ¶:· °7fÁêñ‹ev)×-êe�‰Àúéð•¡w7”s÷ ’s÷àŠs÷•Ô& æu¦Á B˜v¹vv±vv±˜v9 vv‚��æ²é÷ úï& æTH~²Œ÷Š„7Š˜&fÀ:�Е<ˆŠ¢<9·Š€ŠˆŠ¢<2ŠˆŠ¢-Šˆ "ÁPP�P�ˆŠ÷•)÷mäÿȵ· Úÿ·Š Á@�@”‰Šp¢-� ª~*�É•¡Š÷ø�À÷µ÷e²�€·Š÷µ‰–%!À˜G7–r&÷ ^·£Í< ï ; 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 ADò·­¿7·­´2÷ànrÆe"ß2 È=~¢�7VrB €f÷ ÷ DÑ &÷ –Ö Â‹ ¦�& &  €NÑ & ÷ zìÖ Â º€yܶÆe÷àr÷•ÿÿEwþæ÷àöqÀöò÷åîÈð5þ~Žô7Úq&÷ ¢ð5ðE÷ —-?ö�ð—- ö�ã·­Ú¶ Î Î�ÑÁ‚·£É  ·­»·­°Ñ B¹~’ŽÆe�‚¦÷ (Ž-ô ¶-ï¶- êÆeÆe ˆšæ ¦ƒÅöEÀÿà à ÃÃEàÿöÅ… … … ÅEàÿv‡…Ã�;Õ`Ã�~ �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 ; öÎ Î Î ö¶ ¶ ŽUŽU°‡¦öžp&÷à”p×-”,�†€ðEÈ Èe]~‚�÷et?p6 È €¦ö\pw Z߀÷àLpÈ%È%ÿÿÅÁþ�BA  ûJÉ6 w 0ßÁ�Å ïøðUòø�þ�É~ú��þ��Gÿ&€ö°o <†—-‡€÷à–o7�Ðÿ·�ËÿÚ~r�÷Âÿ6 ðw €Þ€Àeàlo üÿ× 0‚÷•�ÿ÷mHüÁ5·Š}ÿ· :ü³ -�‡Âœ-�æÀ.� à ”Daû„`Ã>�÷à o‹÷ø�ÿÓµâ~ê�÷eÿ“�K�6 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 SBú¡±æðn÷àênÆå VÖ €$Á@�Î5Á;�& H” H” H”¦)€�À–‹7DúÁ% Á ýÀÞ‹Á÷~b‘1à‹à Á Á úÀŒÁ1˜ŒÁ ü÷•ÿÿžú÷•ÿÿ¹þ7Š•ú7 bþ÷ø�^þ÷�dþ7 Pþ÷’þ7 �þ÷Žþ‡¦æÀ‘wŽø¦æÌ‘w\ú�~Ú‘ß `vßœI¼vß•£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üÒ~v²Y~î²á~f³h~Þ³ý/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“¬~º“òœòœòœþœBHxHBHœI$PšQ”Xª\¬_ÿÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ•~2”÷®k¢ÿ÷¸k¦k÷–ÿ÷•ÿÿx 7Šr wÆ÷�k„ÿw È7tÆä“ÄãžÃóžw ¦ 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ð~V´w~δÿ~Fµ†TE .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 = \ÿŒŒŒ7‘Zk7Š0 ÷•ç~ª”ÿÿ, ÷àZk÷"›RkwæÆ.ÿ& ÷ ÿædkæ^k÷•@˜jà D÷‹ü A „ &DCƒcà ÷Ú w 2w ΄·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¶~"•¦&w ¶„‚À•\w ¶wXw ºw ö�Ä øfw |÷•t €w „7Š€ wtwhw ŒÄŸ  Ä%-Ÿû‚ÀEøÿÄ Äeä“‚ whÄåŸ÷À6 Á_~š•ßž÷ æÀ=w F·Š6 À�/ w :À�( w 2À�! w *À w "w *  7� w 7�þw 7Šø7�óÀÒžÁßž÷ JÄÔÂwð7ŠØ  wè ~–w (‚b‚ ‚ ·®wúw ‚ø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 SO7Štwr÷•ÿÿjwh·Šg ÄEøÿÄ 7”pwhX~Š–÷‹P ÄEøÿÄ Ã t”Pà õôÿÿ”Iw Û×-ÉÂ% w ’ ÿÿÀ=w ÀòÁê7Ä í”À=w øÀÀe0w ì¥~—À,w äÂ%ÀÀ@w ~k÷‹¾ÄØüÂeÀ=÷–w ´@w Xwºüw’·Š¬w¢À=w – w ü ÿÿÀdw *AÀe0w vÀB~z—,w næH÷BÀFw ·6-À ÷.27ì”,€ â÷÷‹( ÀBüÄ:üÃ8üw Ö÷üðÀ?w 7 îw ò7Šø7Šó7Š   ¨~ò—  w À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 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 = Ö†ø÷‹Ì ÷‹©Äm¼7ŠºÁ yD˜|˜Š˜”˜è˜j•’šø˜–ô˜N™r–™š š`™Þš$–,–V–U~j˜Š–—H—¬—Ê—P—”•Ú”¾”ƒ·ŠZ7ŠU´÷<D ÷2 7.7(÷% Ä„ î‡ÀÀŸw Ô÷%‹À•=w ÀŸöw À• w ¬~☠wúþ÷ ÈwêþwÞþ·ŠÞ÷ Ðù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m¶¶÷²²w ¬æ¦÷ Àžw ®·”Ö%À/w ¨¯À\ú÷ zÔ÷ \÷í§~Z™ppÜÀ.ŸÄ à … L‡Å Äe”  ! ”B†Ô ù! ”=‚L® !6‚4”4 $”¤ À.Ÿ!ž‚4”ô6”4 $”Ô ô÷%À 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~ö¹Ò~nºY~æº  . 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 š· ÊwÜýwÈý�  à ù÷²ÂÜùÄÖùD · Ôù¼‚€Á &C@AƒEPA&f¦æw „ã~Jš€w ’À/w –€w :ƒ‚�„w ÐÒ Û åƒ`ƒ ƒ Å ßÀEÿ�¯À € € €` Õ÷‹H·à µ÷•8… °‡Å wFù÷•àLew ¢7Š÷U4ù÷‹Í~š÷E(ùw T76æùæù÷‹ü‘À�òÀ‹� ‹à p$”÷•àew V×­ÔÖ÷‹ÊÓ÷•àèd·Š¿÷UÔø×·Ìø·Êø÷•ª7¸÷‹¡¾g~:›w @÷‹´ø€Å�¬øÅ�¨ø¯ŒŒŒŒw‘¢dÅ’ø÷‹t�å w†øÄt!”Ä Ä úw ¼w JÄôžÃõžw ž@÷eZø%Ä•t”7‘2ô $”ªô7ÂE€ÿ‡1�fœ& f& ÷ áÖ ‡Ò‰20~4‰r,,,,è,Ä ,,[~¬‰²‰ROS DISC SYSTEM INITIALIZED ÷ ªÝÀìÿ °ÿ pr‚pš‚°†‚l¤‰Àel¤‰ò÷pøZø÷jø|øæF‚÷ 6ò÷%.øüÀz  ¨{Ç~$Šüæä‚÷ ò÷%°øüÀ€ÿ0 ¶ƒÀeû÷•Óø÷•Ñø÷•Õø B6 #�ÂEÿð— wœ6 ºø· ¶ø� w�¤ø7 ¶øæƒ÷ Äñ÷%�øü· ¢ø÷% Œøò� w È~œŠ–•Á Ú� ø÷•oøæ¤‰÷ úÌwXáá~^»h~Ö»ð~N¼w~Ƽ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 úwîû·â·ü÷Æð“f&æ¦fæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æ°€Ä4‡~*œ”6”üü”Ä Ä ÷…÷�0c™÷�.c”7Š$c7Š$c÷‹ cý€…w r÷‹cý€÷5c÷‹cý€÷�gúb÷�bøb…÷‹V  <6””„ „ !ø…ÃÄþÿ÷%J~¢œ&Ãå„ À&Äe N @ Ä üÀe0w &à óÀ• Ö Á”Àÿÿ …÷‹‚bý€7�~b…÷‹rbý€À�nbÀE€ÿÀ¥÷‹Ð  ~�w Ðÿí÷‹¾À¥ ç…Ä ã‡•w ¶ÿú×­4b• À•^w ¤ÿÀ•Uw œÿÆä“w€ú… ÷ÿÿn÷ÿÿj  ‚7,”X‚ÁRìd~‹"‘RXŽ L/P 1 PARI^~Œ‹TY ERROR L/P 1 NOT READY L/P 1 ABORTEDÚŠ^‹&f¦æ&f€ ÷ – 7¬”ÿÄ0÷ B…„ƒ‚�€Ž‡œ¦~Œ— ÂÉ Ä çÄ ä÷ ¨æþÿßàþÿÈ *:ÄŠ2ÄŠÄLÜÄBÜ´Šgi0 ó ºŠ Ÿþÿð¥ð öþÿ…„ƒ‚�€& ÷ !~|Œ°Þw”â0µÿ~>½†~¶½~.¾ 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‚Ð ðÀD…w~’�@€ 78À ô÷%(!ùƒ… �„ ú ÷%‚??‘‡ÃÿžÃŸÄþžw Nÿ…÷%öw ªþ…÷Ú77Ðw ZÿÀ Àe0A~ žw àþÀ,w Øþæ²÷¬À°w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓÄýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå Ãå    ¦  ‚eÂ`„ ä~‚ž�‡ÅýÿÂÆž ‡€âƒ ûË× Ãe ÃeÃe Ãe Ñ�Ò … è€Ð ‡@(LLLLl2ÿ@€ ODT-11R V002ABEœI°~úž’’ *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRBÿÿÿÿÿÿÿÿªŸÆ¦)ˆ ŸþÿÄ«ŸþÿóºŠs¼Š3ÌŠ3 ÊŠ3 Ί³ÔŠsЊ3 Њ3 ÒŠ÷ "ÂL‘ñ ÂÌ‘÷ Ð÷ 8 »‰ ߀þÿÂÔŠ€¾Š:~ôŒÁ¼Š÷ ö÷ èÉ ÂÌ‘wòÂL‘÷ ’÷ øMæþÿÂÔŠßàþÿ2¾Š„Äe¾Š2ÄŠÈŸþÿÄÊŠôŠgi&÷ ¨•¬ æÊŠ& ÷ ¤~l� áÖ fæû ÌŠƒ…ÂÔŠÂ÷ DÄò ¾ŠÒ Ä ú)€¾Š ÷ Èð ·s¼Š3ÌŠ³ÔŠ3 ÊŠ3 ΊÂL‘sЊÂÌ‘3 Њ3 ÒŠ÷ Æ~ä�÷ ÷ *M÷ ø3 ºŠæn‹÷ Ö M³ ÒŠó%ÒŠ÷ ´÷ Ò÷ úMæ|‹÷ Àñwðþ攋÷ ®÷ ®3 ÒŠÄn‹&ôXŽæd÷ 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Ç÷ êÿÍ À‹â„ †¿Ä LÀŸ÷ê÷õwZÿÁÂ’êŸê‰ É‹þ€rœŸ· îÿõpÿIxH9£~\ŽfÁ¼ŠÂÔŠ€¾Š÷ „Ö …ÄØŠË÷ l³ ÒŠ×,ÒŠ´æd÷ :Ö ‡ðÖ …÷ Žwvþæ&ff& À¾‹ÅΊAaÁes!ЊB3 ÖŠ DÔ! c~ÔŽ! 3 ¾‹³ ÖŠ Ä% !3 ¾‹ ÷ ^Ä• Îå÷ R … s!ЊßÀ5Е sΊÀ쾋„ Ö …�€Ö ‡3 ¾‹³ ÖŠÄ ÷ êÎ5øÝ¶~L�Å êÄÕ¶ 6 & „`“3 À‹Ž Ö ‡ 4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%D „ „ ÄeÿŸD ‚ ñŸ‚ð¥ !ƒ!õŸ†{~Ä�Ä5  ‡ð¥ùćććß@ê‡Äê& Ä5 Ä5Ä5Ö ‡– ‡Ö ‡ó z‹ ³~†À;~þÀÃ~vÁJ~îÁ; 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,0Šx0Љx0Š™x1 ¨xá À ðÀÁ´}ÙÀ ü‡ÂÀ{~¨€ Á`v ƒ W"tÁqà€¸v¹¸v¹ú€0œ�‰x0Š¡wá À  ð‡�º�d‚ƒÀƒl„ …°…X†ü††‡”�0‚Ú‚Œƒ6„â„€…&†Î†Î†Î†B~ �²�2u~˜�¢� TASK # 2 æ”� ˆˆN‚2Í~‚>‚ 3ØŠ  ê÷ ¬úß ê êßÚŠé~<�êßÈêÄn‹ôXŽ&æd÷ tÖ ‡fľ‹ÅÅ ýÀåÄÄ Ä Ä Äeœ�0ð0ŠÈ&÷ Ç…À¾‹‡ÃwÅÀ¾‹@aAa… !U~´�Å ý@Á¼Š…ÂÔŠwXü ê‡f  ÅÅ Â`üBa…‡„fÅ`‹æþÿßàþÿõ 5 Ÿþÿf÷ ¢Æ…ޤ‡Ÿþÿ…Ž´‡1 ‡· Nú~,‘‡7 Hú‡& œÎ & & & ÷ ÐØÖ ‡�‚„‡ˆ �‹À�Ž                 !"£$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUV×+~¤‘ØYZÛ\ÝÞ_'ABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZ     �‚„‡ˆ ‹À          Ò~fÂY~ÞÂá~VÃh~ÎÃ!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 PC ; OK ; MSRCH = . BIC SMAS"TASK # 3 æ0‚ ˆæ& & & ˆÖ ˆø‚2t~ˆ‚è‚ TASK # 4 æÚ‚ ˆæâ~ƒ& & æˆÖ æˆñªƒ2R~xƒšƒ TASK # 5 挃 ˆæ& & & ˆÖ õT„2…~ðƒøFpÿõîÿ· ßrœþ€É‹îß…‰ êÂÁZÿwõ÷ê÷|ßL„cÄ À†„ âÀ‹Í êÿ÷ ÇÄPÃÍ ÄÍ &·‡Â ÿÃEÀ`Üþ€Ë‹‹ŠjøÑ�éëÀ‹Í „c,÷ !vß~4Â%Âå<÷ Í üÃŠÍ NÎ  ‡ xÿÎ JÅeŦ)BRCFPMSþÞ~$ð~FÄw~¾Äÿ~6ņ~®Å%K,R0 ; MASK OUT BAD SEARCH ADRESSES 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 ; TI&D„ TASK # 6 æ6„ ˆæ& & æˆÔ~h„Ö ô…2ÿ~à„ð„ TASK # 7 æâ„ ˆˆûž…2†~X…Ž… TASK # 8 怅 ˆæ& ˆÖ ÷D†2 †Þ~•Þ~–Ý~†Ý~ÿáý(~&Æ•~žÆ~Ç)MERR = . 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*~Ð…4† TASK # 9 æ&†€~H† ˆææˆÖ öì†2 ~À†܆ TASK # 10 æΆ ˆæˆÖ ˆr‡2 j~8‡7  € ·  ˆúü‡2 ¦Ü~w.Ü~ð¶Û~h>Û~áÝý,¤~ŽÇ,~ȳ~~È;~öÈ--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 „À7d7l‡÷þÿv÷Eàÿp·j·d· ^÷ þíþæðí÷ 8ô¢ˆ—"®ˆ—"& ¦’$Ò�ÎíÊ�0Ò Ò(Ê ÷ íwš~ ˆ²öZZßÖˆßà÷~‡ß‰·n·!€íƒÆzíw tæ· ZÀf& fü‡·NþßÖˆß@fÿÆ:À~‰f¨ fü‚÷(.÷ *æR‰÷ Œì×'xÿÿÿwL¸w (æÆ[æÆÚ~YNÚ~ÒÖÙ~J^Ù~ÃÙý0Ã~nÉJ~æÉÒ~^Ê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 2œv÷à–v&×-&¾‹‚€È ÷e?ð �6 °]~�‰È €¶Èeø¬ÿÿôîð�¨ì¶öB|÷•[¶üÿ÷ŠSû& Æå Û¦ö v÷àvw xå€È%ð•ÿÿÈ%ÿÿœÁEðÿ¡~ŠÁ Cw ·  ÁeÀ‹BA  ûJ³à‹É6 w 4å0œŒŒ€ ð‹Œ"$·ŠÐô‰À:÷å2ȬÿÿôœÁEðÿW íÁ 9½~€Šà‹1à‹ æ7pu ðŠŒÔÀ À À fÁÀ‹`÷àTu7�vBABW¬ÿùñŠöCEqœJ°à‹É…7uœó‹æœ& ‹€÷ ÀóÐ~øŠ & Â5@Î& ÷ NïÖ ÂŒ€Ó ÂŒ€ûÜÓ$æØ~;nØ~´ö×~,Õý4á~NËh~ÆËð~>Ì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¶÷“è÷ æ«ÁÀ‹`BA¥W,ÿúJ°à‹É÷ Àñ—ÀÀ‹ÁO~p‹÷à†tÐ Á üÿ ÷Š˜wúþwlé–‹M~è‹dd7Š"÷ Ä@÷¼÷ ¶:· °7fÁêñ‹ev)×-êe�‰ÀúéN~`Œð•¡w7”s÷ –½÷àŠs÷•Ô& æu¦Á B˜v¹vv±vv±˜v9 vv‚��æ²é÷ úï& æT÷Š„7Š˜&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 :-Šˆ "ÁPP�P�ˆŠ÷•)÷mäÿȵ· Úÿ·Š Á@�@”‰Šp¢-� É•¡Š÷ø�À÷µ÷e²�€·Š÷µ°~P�‰–%!À˜G7–r&÷ ^·£Í< ·­¿7·­´2÷ànrÆe"ß2 È7VrB €f÷ ÷ DÑ &÷ –Ö Â‹~È� ¦�& &  €NÑ & ÷ zìÖ Â º€yܶÆe÷àr÷•ÿÿEwþæ÷àöqÀöò÷åîÈð5ô7Úq&÷ ¢ð5ðE÷ ÂË~@Ž—-?ö�ð—- ö�ã·­Ú¶ Î Î�ÑÁ‚·£É  ·­»·­°Ñ BÆe�‚¦÷ (Ž-ô ¶-ï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 >~¸Ž¶- êÆeÆe ˆšæ ¦ƒÅöEÀÿà à ÃÃEàÿöÅ… … … ÅEàÿv‡…Ã�;Õ`Ã�1Õ`Ã�*Í`Í%<Íå<µ þÿå%ÍåŽ Ã�~0�Ü-�Î ÎàÎÎ Î Î ö¶ ¶ ŽUŽU°‡¦öžp&÷à”p×-”,�†€ðEÈ Èe÷et?p6 È €¦ö\pw ºß~¨�€÷àLpÈ%È%ÿÿÅÁþ�BA  ûJÉ6 w �ßÁ�Å ïøðUòø�þ��þ��8~ �Gÿ&€ö°o <†—-‡€÷à–o7�Ðÿ·�Ëÿ÷Âÿ6 ð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 - ÃýàÞ€Àeàlo üÿ× ~˜� 0‚÷•�ÿ÷mHüÁ5·Š}ÿ· :ü³ -�‡Âœ-�æÀ.� à ”Daû„`Ã>�÷à o‹÷ø�ÿÓµ÷eÿ“�K�6 w nÞÖ ¡±æðn÷„~‘àênÆå VÖ €$Á@�Î5Á;�& H” H” H”¦)€�À–‹7DúÁ% Á ýÀÞ‹Á1à‹à Á Á úÀŒÁ1˜ŒÁ ü÷•ÿÿžú÷•ÿÿ7~ˆ‘¹þ7Š•ú7 bþ÷ø�^þ÷�dþ7 Pþ÷’þ7 �þ÷Žþ‡¦æÀ‘wŽø¦æÌ‘w\ú¹~’