; DDCGTP.S06 ; DDCGTP.S05 ; DDCGTP.S04 ; DDCGTP.S03 AUG-28-73 ; DDCGTP.S02 ; DDCGTP.SO1 AUG-24-73 ; DDCGTP.S00 AUG-21-73 .TITLE DDCGTP ( D D C GENERAL TEST PROGRAM ) BIT0=1 BIT1=2 BIT2=4 BIT3=10 BIT4=20 BIT5=40 BIT6=100 BIT7=200 BIT8=400 BIT9=1000 BIT10=2000 BIT11=4000 BIT12=10000 BIT13=20000 BIT14=40000 BIT15=100000 R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 SRE$@ @È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 SYSMAC.S07 10-JUN-74 ; UPDATE SYSMAC.S06 09 JUN 74 .TITLE MACT ; PROGRAMMER 67 .MACRO ERPR LST,CLER .IF NB CLER JMP CLER ; GO TO ERROR PROCESSOR .IFF #; ERROR PROCESS MUST BE SPECIFIED .ENDC .ENDM ERPR .MACRO ERRM CLER .IF NB CLER JMP CLER .IFF #; ERROR LOCATION MUST BE SPECIFIED .ENDC .ENDM ERRM .MACRO SPM$ LST .LIST MEB .IF NB LST MOV #LST,-(SP) ; PLACE ON STACK .IFF #; PARAMETER IS REQUIRED .ENDC .ENDM SPM$ ; MAGTAP.324 ; MAGTAP.323 ; MAGTAP.322 ; MAGTAP.321 20-JUL-73 ; MAGTAP.320 18-JUL-73 ; MAGTAP.319 17-JUL-73 ; MAGTAP.318 16-JUL-73 ; MAGTAP.317 ; MAGTAP.316 9-MAY-73 ; MAGTAP.315 4-MAY-73 ; MAGTAP.314 2-MAY-73 ; MAGTAP.313 1-MAY-73 ; MAGTAP.312 27-APR-73 ; MAGTAP.311 26-APR-73 ; MAGTAP.310 24-APR-73 ; MAGTAP.309 21-APR-73 .TITLE MAGTAP ;********************************************************************** ;* Q = 177570 ; SWITCH REGISTER EQUATE NO = 67 ; WRITE=TRAP+3 WRCHECK=TRAP+7 READ=TRAP+5 ; ; ;DDC DATA TEST PROGRAM ;VECTORS USED IN PROGRAM ;#1 LOC 130,134,140,144,150,154,160,164 DISK INTERRUPT ;#2 LOC 30 EMT (TELETYPE OUTPUT) ;#3 LOC 34 TRAP (DISK HANDLERS) ;#4 LOC 14 TRACE TRAP (USED IN BACKGROUND TEST) ;#5 LOC 20 IOT TRAP (USED IN CALLING BACKGROUND TEST) ; ;I/O ADDRESS POINTERS SR: 177570 ;SWITCH REGIISTER CSR: 177776 ;PROCESSOR STATUS REGISTER TPB: 177566 ;TELET ÷%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ÿÿÿÿÿÿÿÿÿÿ .MACRO SPD$ LST .IF NB LST MOV #LST,-(SP) ; PLACE ON STACK .IFF #; PARAMETER IS REQUIRED .ENDC .ENDM SPD$ .MACRO STP$ VAR,CNT .IF NB VAR TEMP$ = TEMP$ + CNT .ENDC .ENDM STP$ .PAGE .MACRO SLP$ PAR,LST,OFS .IF NB PAR MOV #PAR,LST+OFS ; SAVE PAR IN LIST .ENDC .ENDM SLP$ .MACRO SLH$ PAR,LST,OFS .IF NB PAR MOVB #PAR,LST+OFS ; SAVE PAR IN LIST .ENDC .ENDM SLH$ .MACRO SRS$ PAR .IF NB PAR MOV (SP)+,PAR ; REMOVE FROM STACK .IFF #; PAR IS M A G T A P ** ;* ** ;* PROGRAM IDENTIFICATION. MAGTAP - MAGNETIC TAPE INTERFACE ** ;* SUBROUTINE USING THE KT-11C AND THE GULF CONTROLLER ** ;* ** ;* PURPOSE. ALL COMMUNICATIONS WITH THE MAGNETIC TAPES WILL ** ;* BE THROUGH THIS SUBROUTINE. THIS ROUTINE PERFORMS THE ** ;* FOLL YPE REGISTERS TKB: 177562 TPS: 177564 TKS: 177560 ; ;DISK I/O REGISTERS ; DCS: 177460 ;DISK CONTROL REGISTER WC: 177462 ;WORD COUNT REGISTER CMA: 177464 ;CURRENT ADDRESS REGISTER DAR: 177466 ;LOWER 16 BITS OF DISK ADDRESS DAE: 177470 ;EXTENSION ADDRESS REGISTER DBR: 177472 ;DATA BUFFER REGISTER MA: 177474 ;MAINTENANCE REGISTER ADS: 177476 ;LOOK AHEAD REGISTER VECTOR: 204 ;INTERRUPT VECTOR ADDRESS STATUS: 206 ;DISK INTERRUPT STATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜,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û`û÷ÆX REQUIRED .ENDC .ENDM SRS$ .MACRO HDR$ LST .LIST MEB .BOUND .IF NB LST LST: .WORD 1 ; THREAD .IFF #; LIST REQUIRED .ENDC .ENDM HDR$ .MACRO WRD$ PAR .IF NB PAR .WORD PAR .IFF #; VARIABLE REQUIRED .ENDC .ENDM WRD$ .MACRO WRO$ PAR .IF NB PAR .WORD PAR .ENDC .ENDM WRO$ .MACRO CRASH .LIST MEB HALT .NLIST MEB .ENDM CRASH .PAGE ; TASK HEADER MACRO .MACRO TSKH$ TSKN,ACC,PRI,STR,MXT,STK .LIST MEB .WORD 1 ; OWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) ** ;* 3 READ ** ;* 4 WRITE ** ;* 5 WRITE FILE MARK ** ;* 6 REWIND ** ;*  ; ; ; ; ; ; ;RF11 DEDICATE REGISTERS (MEMORY) ; FLAG: 0 ;INTERNAL PROGRAM FLAG RANNU: 146723 ;RANDOM NUMBER PRIME WRDCT: 0 ;WORKING WORD COUNT TRACK: 0 ;WORKING DAE DMA: 0 ;WORKING DAR PATNU: 0 ;DATA PATTERN INDEX BUF: 0 ;WORKING DATA BUFFER (OUT-IN) TWRDCT: 0 ;TEMP WORD COUNT TDMA: 0 ;TEMP DAR SWRDCT: 0 ;STANDARD WORD COUNT ERCOUNT:0 ;ERROR COUNT FOR MESSAGES. SAVE: 0 SAV1: 0 PASS: 0 DSKNOR: 0 ;NUMBER OF DISKS ON THE SYSTEM HRDER: 0 ;^û÷@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 ø÷? .ENDM Q$ .PAGE ; QUE$ QUEUE TASK MACRO REQUEST USEING DYNAMIC FREE CORE .MACRO QUE$ LST,CLER .MCALL SPM$,ERPR SPM$ LST JSR PC,GETBLK ; PUBLIC LIBRARY SUBROUTINE EMT QUEE$ ERPR LST,CLER .NLIST MEB .ENDM QUE$ .PAGE ; QL$ TASK QUEUE DEFINITION MACRO .MACRO QL$ LIST,TSKN,PRIR,EXTY,ERES,NRES,BUF1,N1,BUF2,N2,ARG1,ARG2 .MCALL HDR$,WRD$ HDR$ LIST .WORD 0 ; CALLING TASK'S NUMBER WRD$ TSKN .IF NB PRIR .BYTE PRIR ; PRIORITY .BYTE EXTY ; EXIT TYPE .IFF * ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* CALL MAGTAP(IADDR(LIST)) ** ;*  3$ CMP #200,R0 ; DONE BNE 1$ ; NO ; BACKGROUND TEST VECTOR MOV #XWAIT,@#20 CLR @#22 ; SET EMT TRAP VECTOR MOV #EMTRP,@#30 ; TTY VECTOR MOV #340,@#32 MOV #DISK,@#34 ; DISK CALLING VECTOR MOV #340,@#36 ; SET UP INTERRUPT VECTORS FOR D.D.C. DISK MOV #130,R0 MOV #132,R1 2$: MOV #DKINT,(R0) ; INTERRUPT øÀ@ÁÆ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 # ; PRIORITY MUST BE SPECIFIED .ENDC .WORD 0 ; CONTAINS ERROR CODE .WORD NRES ; NORMAL RESUME LOCATION OR 0 .WORD ERES ; ERROR RESUME LOCATION OR 0 .BYTE N1 ; NUMBER OF ARGUMENTS SENT, 0, OR 1ST ARGUMENT .BYTE N2 ; NUMBER OF ARGUMENTS TO RECEIVE, 0, OR 2ND ARG .WORD BUF2 ; POINTER TO RECEIVING BUFFER, 0, OR 3RD ARG .WORD BUF1 ; POINTER TO SENDING BUFFER, 0, OR 4TH ARGUMENT .WORD ARG1 ; 0 OR ARG .WORD ARG2 ; 0 OR ARG .NLIST MEB .ENDM QL$ .PAGE ; R$ RESUME TASK MACRO FOR ** ;* THE FORMAT OF THE LIST IS AS FOLLOWS: ** ;* ** ;* LIST THREAD ** ;* +2 EXIT TYPE (1-3) DEVICE TYPE ** ;* +4 EXIT ADDRESS (EXIT TYPE 3 ONLY) ** ;* +6 DEVICE NUMBER FOR FUNCTIONS 1-10, SET BITS FOR 11 ** ;* +10 RETURN ERROR PARAMETER (ROUTINE MOV #200,(R1) ; PSR ADD R2,R0 ADD R2,R1 CMP #170,R0 ; DONE BNE 2$ ; NO ; SET UP START ADDRESS MOV #137,@#200 ; JMP MOV #START,@#202 ; SET UP JUMP INSTRUCTIONS MOV #600,R0 MOV #137,(R0)+ ; JMP MOV #ADT2,(R0)+ ; EXTRANEOUS DATA ALTERATION TEST MOV #137,(R0)+ ; JMP MOV #ADT3,(R0)+ ; Î  ÷^ö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þ* õ METHOD 1 & 2 .MACRO R$ CLER .MCALL ERRM .LIST MEB EMT R$ ERRM CLER .NLIST MEB .ENDM R$ .PAGE ; RES$ RESUME TASK MACRO FOR METHOD 3 .MACRO RES$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT RES$ ERPR LST,CLER .NLIST MEB .ENDM RES$ .PAGE ; RESL$ RESUME TASK LIST MACRO .MACRO RESL$ LST,TSKN,PROC,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6 .MCALL HDR$,WRD$ HDR$ LST WRD$ TSKN WRD$ PROC .WORD ARG1 ; ARGUMENT 1 .WORD ARG2 ; ARGUMENT 2 .WORD ARG3 ; ARGUMENT 3 0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BUFFER ADDRESS ** ;* +16 KPAR6 VALUE FOR VIRTUAL DATA BUFFER ADDRESS (ASR 6) ** ;* +20 SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRESS ** ;* +22 FUNCTION (CODES LISTED ABOVE) ** ;* +24 NWORD ** ;* +26 COUNT !SECTOR ADDRESSING TEST MOV #137,(R0)+ ; JMP MOV #ADT4,(R0)+ ; TRACK ADDRESSING TEST MOV #137,(R0)+ ; JMP MOV #ADT5,(R0)+ ; LOOK AHEAD REGISTER TEST MOV #137,(R0)+ ; JMP MOV #SPIRAL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR READ MOV #137,(R0)+ ; JMP MOV #XSPIRL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR WRITE MOV #137,(R0)+ ; JMP MOV #RANEX"÷$ ‚ô÷ €ô÷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 ó÷%ó ÷Þò#.WORD ARG4 ; ARGUMENT 4 .WORD ARG5 ; ARGUMENT 5 .WORD ARG6 ; ARGUMENT 6 .NLIST MEB .ENDM RESL$ .PAGE ; SUS$ TASK SUSPEND MACRO .MACRO SUS$ .LIST MEB EMT SUSE$ .NLIST MEB .ENDM SUS$ .PAGE ; UNS$ TASK UNSUSPEND MACRO .MACRO UNS$ TSKN,RTRN,CLER .MCALL SPM$,ERRM SPM$ TSKN MOV #RTRN,-(SP) EMT UNSE$ ERRM CLER .NLIST MEB .ENDM UNS$ .PAGE ; EXT$ TASK EXIT MACRO .MACRO EXT$ .LIST MEB EMT EXTE$ .NLIST MEB .ENDM EXT$ .PAGE ; QTM$ QUEU$ ** ;* +30 STATUS ** ;* +32 -BACKSPACE FLAG REPEAT COUNT ** ;* +34 RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* %,(R0)+ ; DATA PATTERN TEST (WITH OPTIONAL BACKGROUND) CLR R0 ; SET UP JSR PC,SETREG ; REGISTERS HALT START: RESET ;CLEAR THE WORLD MOV #1000,%6 ;SET UP STACK MOV #340,@CSR ;LOCK UP INTERRUPT LEVELS CLR FLAG ;CLEAR PROGRAM FLAG CLR TRACK ;CLEAR TRACK REGISTERS CLR DMA ;CLEAR DAR REGISTERS CLR PATNU ;CLEAR PATTER COUNT MOV #1000,SWRDCT ;SET UP STANDARD WORD COUNT MOV SWRDCT,WRDCT TST @SR BMI CONM ;OPERATE UNDER PROGRAM&þò÷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Ã'E TIMER MACRO .MACRO QTM$ LIST,ERR,TMUL .MCALL SPM$,SPD$,ERRM SPM$ LIST SPD$ TMUL EMT QTME$ ERRM ERR .NLIST MEB .ENDM QTM$ .PAGE ; QTML$ TIMER LIST MACRO .MACRO QTML$ LIST,SOPT,RESL,ARGU,TSKN,MASK,FLAG,JSRA TEMP$ = 0 .MCALL HDR$,WRO$ HDR$ LIST .WORD 0,0,0 ;RESERVED FOR SYSTEM STP$ SOPT,200 STP$ ARGU,100 STP$ FLAG,40 STP$ JSRA,20 STP$ TSKN,10 .BYTE RESL ; SET RESOLUTION .BYTE TEMP$ ; OPTION .WORD 0 ; RESERVED FOR SYSTEM WRO$ ARGU .IF NB FL( ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE ** ;* 2 INVALID DEVICE TYPE ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER ** ;* 6 ILLEGAL COUNT FOR SPACE OR SKIP ** ;* 10 ILLEGAL I/O FU) CONTROL BIS #70000,FLAG JMP ADTST ;ENTER OPERATOR CONVERSATION MODE CONM: EMT +1 ;ASK ABOUT DATA TEST ONLY CON1 JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BNE 2$ ; BRANCH IF NOT YES BIS #BIT10,FLAG BR 4$ 2$: CMP #67,TEXBUF ; TEST FOR NO BNE CONM ; TRY AGAIN IF NEITHER YES OR NO 4$: EMT +1 CON2 ;ASK ABOUT MULTI DISK MODE JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST * À 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+AG .WORD FLAG ; FLAG .WORD MASK ; MASK .WORD 0,0 ;RESERVED FOR SYSTEM .ENDC WRO$ JSRA WRO$ TSKN .NLIST MEB .ENDM QTML$ .PAGE ; DQTM$ DEQUEUE TIMER MACRO .MACRO DQTM$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT DQTE$ ERRM ERR .NLIST MEB .ENDM DQTM$ .PAGE ; QSC$ QUEUE SCHEDULER MACRO ; QUEUE SCHEDULER MACRO .MACRO QSC$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT QSKE$ ERRM ERR .NLIST MEB .ENDM QSC$ .PAGE ; QSCL$ SCHEDULER LIST MACR,NCTION CODE ** ;* 11 FATAL HARDWARE ERROR, STATUS REG IS IN WORD 13 ** ;* 12 MAGNETIC TAPE TIME OUT ** ;* 13 END OF TAPE DETECTED ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE -FOR YES BEQ 3$ CMP #NO,TEXBUF ; NO BEQ DATTES ; DO NOT ENTER STATIC TEST BR 4$ 3$: BIS #BIT11,FLAG ;SET FLAG TO ENTER STATIC TEST DSKDR: EMT +1 CON3 JSR %7,NOCHA SUB #1,TEXBUF CMP #10,TEXBUF BLOS DSKDR MOV TEXBUF,DSKNOR ROL DSKNOR ROL DSKNOR ; DSKNOR CONTAINS NUMBER OF DISKS - 1 TIMES 4 BR ASKWC DATTES: EMT +1 CON4 ;ASK UNIT NUMBER JSR %7,NOCHA ;WAIT FOR NO. CMP #10,TEXBUF ;IS NO = O>10 BLOS DATTES .¾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í/O .MACRO QSCL$ LIST,SOPT,XOPT,DED,DEH,DEM,ARGE,TSKN,STD,STH,STM,MASK,FLAG .MCALL HDR$,STP$,WRO$ TEMP$ = 0 HDR$ LIST .WORD 0,0,0 ;RESERVED FOR SYSTEM .BYTE 0 STP$ ARGE,200 STP$ FLAG,100 STP$ SOPT,40 STP$ XOPT,20 .BYTE TEMP$ ; OPTION .WORD TSKN ; TASK NUMBER .WORD STD*40+STH*100+STM ; START .WORD DED*40+DEH*100+DEM ; DELTA WRO$ ARGE .IF NB FLAG .WORD FLAG ; FLAG .WORD MASK .WORD 0,0 ;RESERVED FOR SYSTEM .ENDC .NLIST MEB .ENDM QSCL$ .PAGE ; DQSC$ 0 ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.04.72 ** ;* ** ;* GULF ELECTRONIC SY1;NO CLC ROL TEXBUF ROL TEXBUF ; PLACE DISK NUMBER IN FLAG BIS TEXBUF,FLAG ASKWC: EMT +1 CON5 ;ASK ABOUT OPTIONAL WORD COUNT JSR %7,ALPHA ;WAIT FOR ANSWER CMP #153,TEXBUF BEQ WCCON ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPDAR ; ASK ABOUT OPTIONAL DAR BR ASKWC ; ASK AGAIN WCCON: EMT +1 CON6 ;ASK LENGTH OF WC JSR PC,NOCHA BIC #3,TEXBUF ; MAKE A MULTIPLE OF2÷œ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,ë3DEQUEUE SCHEDULER MACRO .MACRO DQSC$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT DQSE$ ERRM ERR .NLIST MEB .ENDM DQSC$ .PAGE ; NCKP$ MACRO TO PROHIBIT CHECKPOINTING OF THE CALLING TASK .MACRO NCKP$ .LIST MEB EMT NCKE$ .NLIST MEB .ENDM NCKP$ .PAGE ; CKP$ MACRO TO ALLOW CHECKPOINTING OF THE CALLING TASK .MACRO CKP$ .LIST MEB EMT CKPE$ .NLIST MEB .ENDM CKP$ .PAGE ; SGLD$ LOAD TASK SEGMENT .MACRO SGLD$ SGNM,CLER,ERES,NRES .MCALL SPM$,SPD$,E4STEMS ** ;* ** ;********************************************************************** ; .DEF MAGTAP,MTINT .REF PUSHR,POPR,ACTIVE,$CTASK,IOSTAT,DSPTCH,RESTOR,RELTSK .REF UNSPND,QSAVEI,PPASV5,PPASV6,SVPPA,SAVE .REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 1 FOROS2 = 1 $KT11C = 0 MULRE = 1 5 4 TST TEXBUF BEQ WCCON CMP #1001,TEXBUF ;IS WORD COUNT>1000 BLOS WCCON ;YES ASK FOR COUNT AGAIN MOV TEXBUF,SWRDCT ;OPERATING WORD COUNT MOV SWRDCT,WRDCT ; OPTIONAL SECTOR ADDRESS **************** OPDAR: EMT +1 CON7 ;ASK ABOUT OPTIONAL DAR JSR %7,NOCHA CMP #100,TEXBUF ; 77 MAX SECTOR NUMBER BLOS OPDAR MOV TEXBUF, DMA ;TEMP DAR REGISTER OPPAT: EMT +1 CON8 ;ASK ABOUT DATA PATTERNS JSR %7,NOCHA CMP #23,TEXBUF ;TEST FOR CORRECT NO BLOS OPPAT ;ASK AGA6ÿë"ë¸,ê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ÿ‹‚éý€7RRM SPM$ SGNM SPD$ ERES EMT SGLE$ ERRM CLER .NLIST MEB .ENDM SGLD$ .PAGE ; MOVE N ARGUMENTS FROM THE CALLING TASKS ADDRESS SPACE INTO BUF .MACRO GETA CLER,BUF,NN .MCALL SPM$,ERRM SPM$ NN EMT GETE$ ERRM CLER .NLIST MEB .ENDM GETA .PAGE ; MOVE N ARGS FROM BUF INTO THE CALLING TASK ADDRESS .MACRO PUTA CLER,BUF,NN .MCALL SPM$,SPD$,ERRM SPM$ NN SPD$ BUF EMT PUTE$ ERRM CLER .NLIST MEB .ENDM PUTA .PAGE .MACRO LSTH$ LABL,PRM3,PRIR,EXTY,NRES,EREH ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERROR PARAMETER SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14. ;KPAR6 VALUE FOREIN CMP #22,TEXBUF BEQ OPWRT ;DATA PATTERN UNDER PROGRAM CONTROL BIS #BIT15,FLAG ;SET PROGRAM FLAG MOV TEXBUF, PATNU ;OPERATOR WANTS TO SELECT DATA CLC ROL PATNU BIC #70000,FLAG ;CLEAR OP MODE BITS IN FLAG OPWRT: EMT +1 CON9 ;ASK ABOUT WRITE JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES BEQ $5 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPWCK ; GO ASK ABOUT WRITE CHECK BR OPWRT ; ASK AGAIN $Fÿ†,Œ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? @�GS HDR$ LABL .WORD 0 ; THREAD WORD KPAR5 VALUE .WORD 0 ; CALLING TASK'S NUMBER .WORD PRM3 .BYTE PRIR ; CALL PRIORITY .BYTE EXTY ; EXIT TYPE .WORD 0 ; CALL ERROR CODE .WORD NRES ; POINTER TO NORMAL RESUME LOCATION AFTER I/O .WORD ERES ; POINTER TO RESUME LOCATION AFTER I/O ERROR .ENDM LSTH$ .PAGE .MACRO FDL$ FDL,FID,FTY,FPR,ARA,RSZ,NMR,DRS .MCALL LSTH$,HDR$,WRD$ LSTH$ FDL,FID,0,2,RSZ,0 .BYTE FTY,FPR ; TYPE / PROTECTION .BYTE DRS,ARA ; RESIDENCY / AREA # .""""""" """""""""""""""""""""""""""""""""""""""""DDDDDDD@ˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆDDDDDDDDDˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆADD7B €€B 7B €B €B C£ð.”{· ¨b‘›£ð.¡KÑËF›»zkQÔxDÛ›oQ8}bÓÑfG^›€²Z•{Ž Š+2 Ö<`>þ› Ûó› åH› CW›$Dÿÿÿÿÿÿÿÿÿ»»»»»»»3333333333333""""""ffîîîîîîªªªªŠˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅ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Š ¶&I5: BIS #BIT14,FLAG ;YES SET FLAG BIT OPWCK: EMT +1 CON10 ;ASK ABOUT WRITE CHECK JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $6 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPRD ; GO ASK ABOUT READ BR OPWCK ; ASK AGAIN $6: BIS #BIT13,FLAG ;YES SET FLAG BIT OPRD: EMT +1 CON11 ;ASK ABOUT READ JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $7 ; BR ,.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@iKWORD NMR,0,0 ; NUMBER OF RECORDS / ERROR # / STATUS .NLIST MEB .ENDM FDL$ .PAGE ; DCL GENERATION MACRO .MACRO DCL$ LABL,LUNP,PRIR,EXTY,ERES,BLNP,ACCP,AREP .MCALL LSTH$,HDR$,WRD$ LSTH$ LABL,LUNP,PRIR,EXTY,0,ERES .WORD BLNP ; BACKUP LUN .BYTE ACCP,AREP ; ACCESS CONT / AREA NUM .WORD 0,0,0 ; RESERVED DEST DEV/ EW2 / EW3 .WORD 0,0 ; CURRENT BLOCK NUM/REC LENGTH .WORD 0,0 ; PREVIOUS BLOCK NUM/REC LENGTH .WORD 0,0 ; NEXT BLOCK NUM/REC LENGTH .BYTE 0,0 ; UOPT/ SYSFLAGS .NLL VIRTUAL DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRES FUNCT = 18. ;FUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTER RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGMIF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ CHKFLG BR OPRD ; ASK AGAIN $7: BIS #BIT12,FLAG ;SET FLAG TO READ CHKFLG: BIT #70000,FLAG BEQ OPWRT ; GO BACK AND ASK AGAIN IF ALL NO ; ; ; ADTST: BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ EXMFLG ;BRANCH IF NO. EMT +1 MES11 MOV FLAG,ACNVX ROR ACNVX ROR ACNVX MOV ACNVX,R0 ; SET UP DEVICE PAGE REGISTERS JSR PC,SETREG JSR %5,CNBCNT = 172524 ; 2'S COMPLEMENT BYTE COUNT REGISTER MTMEMO = 172526 ; MEMORY ADDRESS REGISTER .ENDC ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = OIST MEB .ENDM DCL$ .PAGE ; IOCL GENERATION MACRO .MACRO IOCL$ LABL,DCLP,PRIR,EXTY,NRES,ERES,MODP,FUNP,NWDP,RECP,BUFP .MCALL LSTH$,HDR$,WRD$ LSTH$ LABL,DCLP,PRIR,EXTY,NRES,ERES .BYTE MODP,FUNP ; TRANSFER MODE / FUNCTION CODE .WORD NWDP,0,0,0 ; WORDS REQUESTED / WORDS TRAN / EW2 / EW3 .WORD RECP ; RECORD NUMBER .WORD BUFP ; TVA BUFFER ADDRESS .WORD 0,0,0 ; SVA BUFFER / KPAR6 / CURRENT ACTIVE LUN .WORD 0 ; RESERVED FOR DISC .BYTE 0,0 ; UOPT/ SYSFLAGS .NLIST MEB .ENDM IOCLPHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 ;COMMAND REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 172520 ; STATUS REGISTER MTCOMM = 172522 ; COMMQONV ACNVX MES12 1 EMT +1 MES12 EXMFLG: BIT #BIT10,FLAG ;TEST FOR DATA TEST ONLY BEQ ADT2 ; DO COMPLETE TEST JMP DATAT ;DO DATA TEST ONLY TSTBF: .REPT 40 .WORD -1,-1 .ENDR ;***ADDRESS ADT2*** ; ;IN THIS TEST WRITE TRACK ZERO WITH ZERO'S ;THEN WRITE ALL ONES IN AN ADDRESS ;CHECK IF WRITING ONES IN THAT ADDRESS ALTERED ;ANY OTHER ADDRESS IN THE TRACK ;FOLLOW THIS PROCEDURE FOR ADDRESS (SECTORS) 1 TO 77 ; ; ADT2: MOV #1000,%R 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 ; INTERRUPT ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF REWINDING MTUIC = 10000 ; S$ .PAGE .MACRO CONINT .LIST MEB .REF CONVCT MOV $KPAR4,$GTKP4(R0) MOV #DIP,$GTDIP(R0) TST $GTDFS(R0) BNE 70$ JSR PC,CONVCT 70$: MOV #DFS,$GTDFS(R0) .NLIST MEB .ENDM CONINT .PAGE .MACRO DRVST$ GG,SUBADR .MCALL CONINT .LIST MEB .REF GG'ENT .REF CONPOL .REF IOQTIM,IODQIT,SV6PA,OKTERM,ERTERM,ERRREQ,SPUIR .REF RTAND REGISTER MTBCNT = 172524 ; 2'S COMPLEMENT BYTE COUNT REGISTER MTMEMO = 172526 ; MEMORY ADDRESS REGISTER .ENDC ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FIU6 ;SET UP STACK MOV #2000,@#SREQ ; SET LIGHTS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV PATNU,SAVE CLR PATNU CLR TRACK CLR DMA JSR %5,PASEL ;SET UP DATA BUFFER MOV SAVE,PATNU ; ZERO SECTORS 0 TO 37 RFADT: BIS #BIT8,@DCS WRITE 3$: TSTB @DCS ; TEST FOR READY BPL 3$ TST @DCS ;TEST FOR ERROR BPL RFADTY MOV #1,ERCOUNT ;ERROR OCCURRED MOV @DCS,WORK1 ;FETCH DCS REGISTER VUNIT NUMBER INCREMENT .IFF OFFL = 0 ; SET OFFLINE READ = 2 ; READ RECORD WRIT = 4 ; WRITE RECORD WRFM = 6 ; WRITE FILE MARK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 14 ;WRITE WITH EXTENDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROWEQSET,APPER .DEF GG'ST$ GG'ST$: DRVENT: MOV GG'ENT,R0 ;GENTAB ADDRESS BIS #$GTRUN,$GTOPT(R0) ;INDICATE DRIVER RUNNING CONINT .IF NB SUBADR JSR PC,SUBADR .ENDC JSR PC,CONPOL ;TEMP TIL ROS KTASK RTS PC ;TEMP TIL ROS KTASK DFS: .NLIST MEB .ENDM DRVST$ .PAGE .MACRO DCLF$ DCL,LUN,BLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA .MCALL DCM$,HDR$,WRD$ .LIST MEB DCM$ DCL,LUN,BXLE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 ; INTERRUPT ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF REWINDING MTUIC = 10000 Y MOV @DAR,WORK DEC WORK ER1: JSR %5,STAER1 ;REPORT ERROR OCURRED ;****WRD1=CONTROL STATUS REG. AT THE THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR RFADT ;LOOP ON ERROR RFADTY: MOV #40,DMA ; ZERO SECTORS 40 TO 77 RFADTX: BIS #BIT8,@DCS ;CLEAR THE DISK WRITE $4: TSTB @DCS BPL $4 TST @DCS ;TEST FOR ERROR BPL RFRC MOV @DAR,WORK DEC WORK MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV #2,ERCOUNT ;SETUP ERROR CZLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT MDATST = 134600 ; BITS TO TEST IN THE DATUM STATUS REGISTER ENDTAP = 2000 ; END OF TAPE BIT .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST[LUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA .NLIST MEB .WORD 0 ; CURR REC # .WORD 0 ; CURR REC LENGTH .WORD 0 ; PREV REC # .WORD 0 ; PREV REC LENGTH .WORD 0 ; NEXT REC # .WORD 0 ; NEXT REC LENGTH .ENDM DCLF$ .PAGE .MACRO DCM$ DCL,LUN,BLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA HDR$ DCL .WORD 0 ; CALLING TASK # WRD$ LUN .BYTE PRIP ; PRIORITY .BYTE EXTYP ; EXIT TYPE .WORD 0 ; ERROR WORD .WORD NRESL ; NORMAL RESUME .WORD ERESL ; ERROR RESUME .WORD BLUN ; BACKUP LUN .BYTE AC\ ; UNIT NUMBER INCREMENT .IFF OFFL = 0 ; SET OFFLINE READ = 2 ; READ RECORD WRIT = 4 ; WRITE RECORD WRFM = 6 ; WRITE FILE MARK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 14 ;WRITE WITH EXTENDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ]OUNT ER2: JSR %5,STAER1 ;REPORT DISK ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. REG AT THE TIME OF THE ERROR **** BR RFADTX ;LOOP ON ERROR RFRC: CLR SAV1 RFRD: CLR SAVE WONWD: MOV #TSTBF,BUF MOV #100,WRDCT MOV SAV1,DMA BIS #BIT8,@DCS WRITE TSTB @DCS ;TEST FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL SUADB ;BRANCH IF NO CONTROL ERROR MOV @DCS,WORK1 MOV SAV1,WORK MOV #3,ERCOUNT ;SETUP ERROR COU^: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE .IFNZ DATUM DROLD: .BYTE 0 ; LAST TAPE DIRECTION 0 FORWARD NMOLD: .BYTE 0 ; LAST UNIT NUMBER DRNEW: .BYTE 0 ; CURRENT TAPE DIRECTION 1 BACKWARDS NMNEW: .BYTE 0 ; CURRENT UNIT NUMBER .ENDC ; _CS ; ACCESS .BYTE ARA ; AREA .WORD 0 ; PHYSICAL UNIT # .WORD 0,0,0 .WORD 0,0,0 .NLIST MEB .ENDM DCM$ .PAGE ; OPEN CALL MACRO FOR ROS3.1 .MACRO OPN$ IOCL,CLER,ERES,NRES,ACCS .MCALL SLP$,ERPR .LIST MEB SLP$ NRES,IOCL,$NR SLP$ ERES,IOCL,$ER SLP$ ACCS,IOCL,$ACC MOV #2,IOCL+$EX ; SET CALL TYPE TO SEQUENTIAL MOV #IOCL,-(SP) EMT OPNE$ ERPR IOCL,CLER .NLIST MEB .ENDM OPN$ .PAGE ; CLOSE CALL MACRO FOR ROS3.1 .MACRO CLS$ IOCL,CLER,ERES,NRES .MCALL S` ; CLEAR CONTROLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT MDATST = 134600 ; BITS TO TEST IN THE DATUM STATUS REGISTER ENDTAP = 2000 ; END OF TAPE BIT .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK aNT ER3: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS AT THE TIME OF THE ERROR**** ;****WRD2=DISK ADDR. IN ERROR WHEN TRYING TO WRITE ALL ONES **** BR WONWD ;RE-WRITE WORD SUADB: MOV SAV1,R0 ; COMPUTE BUFFER ADDRESS OF -1 BLOCK ASH #7,R0 ADD #OUTBUF,R0 MOV R0,WORK4 ; SAVE FOR CLEAN UP MOV #100,R1 2$: MOV #-1,(R0)+ SOB R1,2$ WRCADT: BIS #BIT8,@DCS MOV #10000,WRDCT ;b ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS .ENDC ; MAGNcLP$,ERPR .LIST MEB SLP$ NRES,IOCL,$NR SLP$ ERES,IOCL,$ER MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT CLSE$ ERPR IOCL,CLER .NLIST MEB .ENDM CLS$ .PAGE ; INPUT CALL MACRO FOR ROS3.1 .MACRO INP$ IOCL,CLER,LUN,BLUN,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .MCALL SLP$,SLH$,ERPR .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ BLUN,IOCL,$BLU SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLP$ NWD,IOCL,$NW SLP$ BUF,IOCL,$BUF SLH$ EXT,IOCL,$EX SLH$ MOD,IOCL,$MOD SLH$ PRI,IOCd MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE .IFNZ DATUM DROLD: .BYTE 0 ; LAST TAPE DIRECTION 0 FORWARD NMOLD: .BYTE 0 ; LAST UNIT NUMBER DRNEW: .BYTE 0 ; CURRENT TAPE DIRECTION 1 BACKWARDS NMNEW: .BYTE 0 ; CURRENT UNIT NUMBER e SET UP WORD COUNT MOV #OUTBUF,BUF ;SETUP CURRENT ADDR MOV SAVE,DMA ;SETUP DISK ADDRESS WRCHECK TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL CHKBUF ;BRANCH NO DISK ERROR MOV @DCS,WORK1 MOV SAV1,WORK DEC WORK MOV #4,ERCOUNT ;SET UP ERCOUNT ER4: JSR %5,STAER1 ;REPORT ERROR MOV @DAR,ACNVX ;SET UP DISK ADDR. FOR REPORT JSR %5,CONV ACNVX MES4 6 EMT +1 MES4 ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. IN ERRORfETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES .IFNZ MUgL,$PRI SLH$ REC,IOCL,$REC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK MOVB #$FINP,IOCL+$FUN EMT IOE$ ERPR IOCL,CLER .NLIST MEB .ENDM INP$ .PAGE ; OUTPUT CALL MACRO FOR ROS3.1 .MACRO OUT$ IOCL,CLER,LUN,BLUN,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .MCALL SLP$,SLH$,ERPR .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ BLUN,IOCL,$BLU SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLP$ NWD,IOCL,$NW SLP$ BUF,IOCL,$BUF SLH$ EXT,IOCL,$EX SLH$ MOD,IOCL,$MOD SLH$ PRI,IOCL,$PRI SLH$ h .ENDC ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS i DURING WRITE CHECK **** ;****WRD ADDR.=ADDR. WHICH CONTAINS ALL ONES **** BR WRCADT ; CHKBUF: MOV WORK4,R0 ; CLEAR -1 BLOCK IN BUFFER MOV #100,R1 3$: CLR (R0)+ SOB R1,3$ ZEROAD: CLR SAVE ; MOV SAV1,DMA ;SETUP DISK ADDRESS MOV #OUTBUF,BUF MOV #100,WRDCT ; SET UP WORD COUNT WRITE TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL INDADT MOV #5,ERCOUNT MOV @DCS,WORK1 MOV @DAR,jLRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; READ .BYTE 5 ; WRITE .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .IFZ FOROS2 .WORkREC,IOCL,$REC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT OUTE$ ERPR IOCL,CLER .NLIST MEB .ENDM OUT$ .PAGE ; I/O MACRO CALL .MACRO IOM$ IOCL,CLER,LUN,ERES,NRES,FCT .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLH$ FCT,IOCL,$FCT MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT IOE$ ERPR IOCL,CLER .NLIST MEB .ENDM IOM$ .PAGE .MACRO REW$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,Nl .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES mWORK ER5: JSR %5,STAER1 ;****WRD1=CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR ZEROAD ;LOOP ON ERROR INDADT: CMP #77,SAV1 BEQ LP2ADT ;LAST ADDR. CHECKED INC SAV1 JMP RFRD ;CHECK NEXT ADDRESS LP2ADT: BIT #BIT11,@SR ;IS BIT 11 SET IN SR BEQ ADT3 JMP ADT2 ;BIT 11 SET LOOP ON TEST .PAGE ;***** ADDRESS TEST ***** ; ;WRITE EACH UNIQUE ADDRESS ON ITSELF FOR TRACK 0 ;THEN READ IT BACK AND COMPARE FOR THE nD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .IFF .BYTE 0 .BYTE 25 .ENDC .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (J=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 oRES,REWE$ .ENDM REW$ .PAGE ; FORWARD SPACE RECORD CALL MACRO .MACRO FSR$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,FSRE$ .ENDM FSR$ .PAGE ; BACKSPACE RECORD CALL MACRO .MACRO BSR$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,BSRE$ .ENDM BSR$ .PAGE ; FORWARD SPACE FILE CALL MACRO .MACRO FSF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,FSFE$ .Ep .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; READ .BYTE 5 ; WRITE .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .IFZ FOROq;CORRECT DATA ; ; ADT3: CLR DMA ;CLEAR ACTIVE REG MOV #3000,@#SREQ ; SET LIGHTS MOV #0,TRACK ; USE MOV RATHER THAN 'CLR' FOR PATCHING IN TRAC CLR WORK CLR WORK1 MOV #1000,%6 ;SETUP STACK MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,%0 ;FILL BUFFER WITH COUNT INADB: MOV WORK,(0)+ INC WORK ;+1 COUNT CMP #OUTBUF+10000,R0 BNE INADB ;SET UP NEXT WORD MOV WORK,SAVE WRABF: BIS #BIr .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (SP)+,@#$KPAR5 .ENDC .ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN ; IS DEVICE TYPE = 4 INC sNDM FSF$ .PAGE ; BACK SPACE FILE CALL MACRO .MACRO BSF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,BSFE$ .ENDM BSF$ .PAGE ; WRITE END OF FILE CALL MACRO .MACRO EOF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,EOFE$ .ENDM EOF$ .PAGE ; CREATE FILE MACRO .MACRO CF$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT Q$ ERPR LST,CLER .NLIST MEB .ENDM CF$ .PAGE ; DELETE FILE MACRO tS2 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .IFF .BYTE 0 .BYTE 25 .ENDC .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (J=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; uT8,@DCS ;CLEAR THE DISK WORLD WRITE ;WRITE TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;CONTROL READY TST @DCS ;IS THERE AN ERROR BPL TFBL ;NO ERROR MOV @DCS,WORK ;FETCH CONTENTS OF CONTROL REG MOV #6,ERCOUNT ;SET UP ERROR COUNT ER6: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR WRABF ;RE-WRITE DATA TFBL: MOV SAVE,WORK ADD #40,DMA CMP #10000,WORK BNE INADB-4 CLR WORK CLR WORK1 CLR vR4 ; SET R4 = 2 CMPB DEVICE(R0),#4 ; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,R4 BGT MTERR ; BR IF .GT. 3 ; IS THE FUNCTION CODE DEFINED MOV #10,R4 ;SET R4 = 8 MOV FUNCT(R0),R1 ;PLACE FUNCTION CODE IN R1 MOVB R1,RES2(R0) BLE MTERR w .MACRO DF$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT Q$ ERPR LST,CLER .NLIST MEB .ENDM DF$ .PAGE ; DISABLE SCHEDULER .MACRO MSK$ .LIST MEB EMT MSKE$ .NLIST MEB .ENDM MSK$ .PAGE ; ENABLE SCHEDULER .MACRO UMSK$ .LIST MEB EMT UNME$ .NLIST MEB .ENDM UMSK$ .PAGE ; CONVERT FROM BINARY TO ASCII MACRO .MACRO BASC$ BVAL,ASCB .MCALL SPM$,SPD$ .LIST MEB SPM$ BVAL SPD$ ASCB EMT BTAE$ .NLIST MEB .ENDM BASC$ .PAGE ; CONVERT ASCII TOx.MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (SP)+,@#$KPAR5 .ENDC .ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN ; IS DEVICE TYPE = 4 yDMA ADT3A: MOV #0,TRACK ; USE MOV RATHER THAN 'CLR' FOR PATCHING IN TRAC MOV #INBUF,BUF MOV #100,WRDCT RDTDN: BIS #BIT8,@DCS ;CLEAR THE DISK READ TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;YES THE CONTROL IS READY TST @DCS ;IS THERE AN ERROR BPL ADRCMP ;NO ERROR MOV #7,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTROL REG. ER7: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTDN ;z ;BRANCH IF NEGATIVE CMP R1,R4 .IFZ MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R2 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R2,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC R4 { BINARY MACRO .MACRO ASCB$ ASCB,BVAL,ERES .MCALL SPM$,SRS$,ERRM SPM$ ASCB EMT ATBE$ SRS$ BVAL ERRM ERES .NLIST MEB .ENDM ASCB$ .PAGE ; CONVERT ASCII TO RAD50 .MACRO ASCR$ ASCB,RADB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT ASRE$ .NLIST MEB .ENDM ASCR$ .PAGE ; CONVERT RAD50 TO ASCII .MACRO RASC$ RADB,ASCB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT RACE$ .NLIST MEB .ENDM RASC$ .PAGE ; GET DATE .MACRO DATE$ YADR,MADR,DADR .MCALL SRS$ | INC R4 ; SET R4 = 2 CMPB DEVICE(R0),#4 ; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,R4 BGT MTERR ; BR IF .GT. 3 ; IS THE FUNCTION CODE DEFINED MOV #10,R4 ;SET R4 = 8 MOV FUNCT(R0),R1 ;PLACE FUNCTION CODE IN R1 MOVB R1,RES2(R0) BLE }RE-READ ADRCMP: MOV #INBUF,R0 MOV DMA,R1 ASH #6,R1 MOV #100,R2 1$: CMP (R0)+,R1 BNE 2$ INC R1 SOB R2,1$ BR INCCMP 2$: MOV -(R0),WORK MOV R1,WORK1 MOV #10,ERCOUNT ;SET UP ERROR COUNT ER10: JSR %5,STAER1 ;REPORT COMPARISON ERROR ;****WRD1=DISK ADDR. WANTED **** ;****WRD2=DISK ADDR. RECEIVED **** INCCMP: INC DMA ; INC SECTOR NUMBER CMP #100,DM~ ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) BR MT02 MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7  .LIST MEB EMT GDAE$ SRS$ YADR SRS$ MADR SRS$ DADR .NLIST MEB .ENDM DATE$ .PAGE ; GET TIME .MACRO TIME$ HADR,MADR,SADR .MCALL SRS$ .LIST MEB EMT GTIE$ SRS$ HADR SRS$ MADR SRS$ SADR .NLIST MEB .ENDM TIME$ .PAGE ; GET JULIAN DATE .MACRO JDATE$ JUL .MCALL SRS$ .LIST MEB EMT GJDE$ SRS$ JUL .NLIST MEB .ENDM JDATE$ .PAGE DRVST$ CR,ASDF IOCL$ CRIOCL,CRDCL,1,2,0,CRERS,$AMOD,1,1 DCL$ CRDCL,$CR00 NOP € MTERR ;BRANCH IF NEGATIVE CMP R1,R4 .IFZ MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R2 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R2,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC �A ; LAST SECTOR BEQ LPADT3 BR RDTDN ;GO READ BUFFER LPADT3: BIT #BIT11,@SR ;LOOP ON TEST? BNE ADT3 ;YES BIT 11 SET IN SR .PAGE ;RF11 TRACK SELECTION TEST ; ;WRITE THE FIRST AND LAST ADDRESS OF EACH TRACK ;WITH THE OCTAL VALUE OF EACH TRACK ;BITS 6 THRU 11 EQUAL TRACK NUMBER ;BITS 0 THRU 5 EQUAL 0 IN FIRST SECTOR OF EACH TRACK ;BITS 0 THRU 5 EQUAL 77 IN LAST SECTOR OF EACH TRACK ; ;AFTER WRITING THE DISK READ EACH ADDRESS ;AND COMPARE DATA FOR THE CORRECT VALUE ; ‚ ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE CURRENT REQUEST INP$ CRIOCL,CRECAL ; DAP DIP: NOP ASDF: NOP CRERS: NOP CRECAL: HALT ; DAP .END „ R4 ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) BR MT02 MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SP…ADT4: CLR DMA ;CLEAR WORK REGISTERS MOV #4000,@#SREQ ; SET LIGHTS CLR TRACK JSR R5,ZOBUF ; ZERO OUTPUT BUFFER MOV #1000,%6 ;SETUP STACK BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #OUTBUF,BUF ;SET CURRENT ADDRESS MOV #4,WRDCT ; SET WORD COUNT INSWT: WRITE ;GO WRITE TSTB @DCS ;IS READY SET BPL .-4 ;YES! WAIT FOR NOT BUSY TST @DCS ;TEST FOR ERROR BPL TSTTK ;NO ERROR GO ON MOV #11,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPOR† MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC .IFZ FOROS2 CMP 4*$KT11C+16(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT .IFF TST ACTIVE BEQ MT04 .ENDC MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTR‡ DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ˆL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE ‰T CONTENTS OF DCS REG ER11: JSR %5,STAER ;REPORT ERROR OCCURRED ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR INSWT ;GO RE-WRITE TSTTK: CMP #7777,OUTBUF ; TEST FOR LAST ADDRESS BEQ INSRD ;GO READ THE DATA BIT #77,OUTBUF ; IS IT SECTOR NUMBER ZERO BNE MVNEM ;NO BIS #77,OUTBUF ; YES, SET UP FOR LAST SECTOR IN TRACK BIS #77,OUTBUF+2 BIS #77,OUTBUF+4 BIS #77,OUTBUF+6 ADD #77,DMA ŠEQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2(R0),#2 ‹ ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ŒCURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC .IFZ FOROS2 CMP 4*$KT11C+16(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT .IFF TST ACTIVE BEQ MT04 .ENDC MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE � BR INSWT ;GO WRITE MVNEM: INC OUTBUF ;INC. TO NEXT TRACK INC OUTBUF+2 INC OUTBUF+4 INC OUTBUF+6 CLR DMA INC TRACK ;INC. DAE REG. BR INSWT ;GO WRITE ; ;READ THE FIRST AND LAST ADDRESS OF EACH TRACK ;AND VERIFY IT HAS THE CORRECT DATA INSRD: CLR DMA ;CLEAR WORK REG. CLR TRACK CLR SAVE BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #INBUF,BUF ;SET UP CURRENT ADDR MOV #4,WRDCT ; SET UP WORD COUNT RDTKS: READ ;Ž BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LIST MTEXIT: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #M� ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 1 ; ONLY 1 ABORT MESSA� INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2‘READ DATA TSTB @DCS ;CHECK FOR READY BPL .-4 ;CONTROL NOT READY TST @DCS ;IS THERE AN ERROR BPL CMPDTK ;NO ERROR MOV #12,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTENTS OF DCS ER12: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTKS ;GO RE-READ CMPDTK: CMP SAVE,INBUF ;IS DATA CORRECT BEQ CMNETK ;YES SETUP FOR NEXT WORD MOV SAVE,WORK1 ;CORRECT ADDRESS MOV INBUF,WORK ;INCORRECT DATA MOV #13,ERCOUNT ;SET UP ER’TTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;P“GE BUFFER ******** .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 ROUTINES PSTP ; ”(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LIST MTEXIT: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: •ROR COUNT ER13: JSR %5,STAER1 ;REPORT SELECTION ERROR ;****WRD1=TRACK ADDR. WANTED **** ;****WRD2=TRACK ADDR. RECEIVED **** CMNETK: CMP #7777,SAVE ; IS IT THE LAST ADDRESS BEQ LPTSK ;END OF TEST BIT #77,SAVE ; IS IT ADDRESS ZERO OF THE TRACK BEQ ZRBIT ;NO! SETUP FOR LAST ADDR INC SAVE ;INC FOR TRACK NO. CLR DMA ; SET UP DAR INC TRACK ;INC TRACK BR RDTKS ;GO READ ZRBIT: BIS #77,SAVE ; SET UP FOR LAST SECTOR IN TRACK –LACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH .BLKW 20 .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: .IFZ FOROS2 JSR R5,SAVE .IFF $SAVE .ENDC SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MT— = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE ˜ MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#™ ADD #77,DMA BR RDTKS ;GO READ LAST ADDR OF TK LPTSK: BIT #BIT11,@SR ;IS BIT 11 SET IN SR BEQ ADT5 ; YES, LOOP ON TEST JMP ADT4 .PAGE ;RF11 LOOK AHEAD TEST ;WRITE ONE WORD UPON RECEIPT OF ;NOT READY READ THE LOOK AHEAD ;REGISTER IT SHOULD CONTAIN THE ;ADDRESS +1 ; ADT5: CLR DMA ;CLEAR REGISTERS MOV #5000,@#SREQ ; SET LIGHTS CLR TRACK CLR SAVE MOV #1000,%6 ;SETUP STACK MOV #4,WRDCT ; SET UP FOR MINIMUM X-FEšFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN INTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) ›INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; 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 COUNTœPS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH .BLKW 20 .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: .IFZ FOROS2 JSR R5,SAVE .IFF $SAVE .ENDC SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C �R MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS WRADT5: MOV ADS,R0 ; PLACE ADDRESS OF LOOK AHEAD REG IN RO BIS #BIT8,@DCS ;CLEAR THE DISK WRITE ;WRITE 1$: TSTB @DCS ; IS THE CONTROLLER BUSY BPL 1$ ;CONTROL STILL BUSY MOV (%0),@#WORK ; FETCH LOOK AHEAD TST @DCS ;IS THERE AN ERROR BPL LPADT5 ;NO DISK ERRORS MOV #14,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH DCS FOR REPORT ER14: JSR %5,STAER ;REPROT CONTROL ERROR ;****WRD1=DISK Cž BIT @#MTSTAT,#ENDTAP ; TEST FOR END OF TAPE MARK BEQ MTINT2 MOV #13,ERROR(R0) ; SET END OF TAPE INDICATOR IN LIST MTINT2: TST R5 BNE MTEYIT MTINRE: JSR PC,MTDQXN MTEYIT: JMP RESTOR .PAGE MTDQXN: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK ŸER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ; 1/60 SEC ******** RES1 = 1 ; 1/60 SEC   MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN INTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MT¡ONTROL REG AT THE TIME OF THE ERROR **** BR WRADT5 ;LOOP ON ERROR LPADT5: MOV TRACK,R2 BIC #177000,R2 ASH #6,R2 MOV DMA,R1 ADD #2,R1 BIC #177700,R1 ADD R1,R2 CMP R2,WORK BEQ INCADS ;BRANCH IF EQUAL MOV R2,WORK1 MOV #15,ERCOUNT ER15: JSR %5,STAER1 ;REPORT LOOK AHEAD INCORRECT ;****WRD1=DISK ADDR. WANTED FROM LOOK AHEAD REG. **** ;****WRD2=DISK ADDR. RECEIVED FROM DISK LOOK A¢ CLR -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS £ ******** RES2 = 2 ; 1/30 SEC. ******** RES3 = 5 ; 1/6 SEC. ******** RES4 = 2 ; 1/3 SEC. ******** RES5 = 3 ; 1.0 SEC. ******** RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 SEC RES8 = 3 ; 30.0 SEC RES9 = 2 ¤STAT,STATUS(R0) BIT @#MTSTAT,#ENDTAP ; TEST FOR END OF TAPE MARK BEQ MTINT2 MOV #13,ERROR(R0) ; SET END OF TAPE INDICATOR IN LIST MTINT2: TST R5 BNE MTEYIT MTINRE: JSR PC,MTDQXN MTEYIT: JMP RESTOR .PAGE MTDQXN: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NU¥HEAD REG. **** BR WRADT5 ;LOOP ON ERROR INCADS: CMP #10000,R2 BLE XLPADT5 ; LAST ADDRESS EXIT INC DMA ;+1 DMA CMP #77,DMA BNE WRADT5 CLR DMA INC TRACK MOV TRACK,R1 ADD #5000,R1 MOV R1,@#SREQ BR WRADT5 ;CHECK NEXT ADDRESS XLPADT5:BIT #BIT11,@SR ;LOOP ON TEST BNE ADT5 ;YES LOOP ON TEST BIT 11 SET .PAGE ; SPIRAL TESTS ; ;WRITE THE LAST WORD OF TRACK ZERO ;AND T¦.IFNZ $KT11C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO § ; 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 MILLISECOND. MSECR = 0 ;MAX RESOLUTION: #0 AT 10 MILLISECONDS SE¨MBER ON STACK CLR -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST A©HE FIRST WORD OF TRACK ONE ;USING ONE WORD X-FERS ;DATE = 52525 SPIRAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #6000,@#SREQ ; SET LIGHTS JSR R5,ZOBUF ; ZERO OUTPUT BUFFER JSR R5,ZBUF ; ZERO INPUT BUFFER MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SETUP STACK MOV #100,WRDCT ; SET WORD COUNT TO 100 CLR TRACK MOV #77,DMA ; LAST SECTOR OF TRACT ZERO MOV #100,R0 ; SET UP DATA ª ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2(R0),#2 BLE MTINRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .BLKW 20 .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS Q«CR = 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 FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD,¬DDRESS .IFNZ $KT11C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETUR­ MOV #OUTBUF,R1 1$: MOV #52525,(R1)+ SOB R0,1$ MOV #OUTBUF,BUF WRITE ;WRITE LAST ADDR TK ZERO TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL1 MOV #16,ERCOUNT MOV @DCS,WORK ER16: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL1: CLR DMA INC TRACK WRITE ;WRITE FIRST ADDR. TK 1 TSTB @DCS ;WAIT FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL2 M®UEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .IFF MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11 BNE MTTIM1 JSR PC,MUREWI TST R2 BEQ MTTIM4 MOV #MTTLI,-(SP) ; TIMER LIST MOV #1,-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ BR¯ AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ; TOD CLOCK TICKS PRE SECOND ******** $ABMPL = 6 ; TOD CLOCK BASE MULTIPLER ******** TODINT = 100 ; T-O-D CLOCK INTERRUPT VECTOR ******** TIMINT = 0 ; NO SEPERATE TIMER CLOCK ******** STLINT °N JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2(R0),#2 BLE MTINRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .BLKW 20 .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ±OV #17,ERCOUNT MOV @DCS,WORK ER17: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL2: MOV #200,WRDCT ; SET UP FOR 2 SECTOR X-FER DEC TRACK MOV #77,DMA MOV #INBUF,BUF ; READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL3 MOV #20,ERCOUNT MOV @DCS,WORK ER20: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL3: MOV ² MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: JSR PC,MTDQXN MTTIM2: JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN TO CALLER .PAGE ; MAGNETIC TAPE OPEN ; MOPEN: JSR PC,MTINIT BR MCL10 ;GO TO COMMON EXIT FOR OPEN/CLOSE ; ; ; MAGNETIC TAPE CLOSE ; MCLOS: CLR R4 MCL10: .IFNZ DATUM CLRB DRNEW ; SET FO³= 0 ; NO STALL ALARM ******** STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET CLKENB = 177546 ; ADDRESS FOR CLOCK ENEBL ******** TODBIT = 100 ; BIT TO TURN ON THE T-O-D CLOCK ******** TIMBIT = 0 ; NO TIMER CLOCK ******** STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT $TMSLC = 0 ; NO TIME SLICING IN THI´ ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .IFF MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11 BNE MTTIM1 JSR PC,MUREWI TST R2 BEQ MTTIM4 MOV #MTTLI,-(SP) ; TIMER LIST MOV #1,-(SP) ; TIMER DELAY JSR PC,QTIME TST (Sµ #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR CMPX1 2$: MOV #21,ERCOUNT ;SETUP ERROR COUNT MOV -(R1),WORK MOV #52525,WORK1 ;CORRECT DATA ER21: JSR %5,STAER1 ;REPORT ADDR 377 HAE BAD DATA ;****WRD1=THE DATA THAT SHOULD HAVE BEEN IN ADDR. 3777**** ;****WRD2=THE DATA READ FROM ADDR. 3777**** BR SPIRAL ;LOOP ON ERROR CMPX1: MOV #100,R0 1$: ¶RWARD FLAG .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MREA1 JSR PC,MTBAD ; FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTERED AFTER A READ·S SYSTEM ******** $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; $DTAPE = 0 ; NO DECTAP ******** ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 1 ; ONLY ONE AUTH. CODE. ******** .IFL 20.-ACTSIZ XXXX¸P)+ BR MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: JSR PC,MTDQXN MTTIM2: JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN TO CALLER .PAGE ; MAGNETIC TAPE OPEN ; MOPEN: JSR PC,MTINIT BR MCL10 ;GO TO COMMON EXIT FOR OPEN/CLOSE ; ; ; MAGNETIC TAPE CLOSE ; MCLOS: CLR R4 MCL10: .IFNZ DATUM CLRB DRNEW ¹CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR LPSPI1 2$: MOV #22,ERCOUNT ;SETUP ERROR COUNT MOV #52525,WORK1 ;CORRECT DATA MOV -(R1),WORK ER22: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WDR2=THE DATA READ FROMADDR.0 OF TRACK 1 **** SPIL5: JMP SPIRAL LPSPI1: BIT #BIT11,@SR ;LOOP ON TEST? BNE SPIL5 .PAGE ; SPIRAL TEST EXT. ; ;WRITE TWO WORDS OF DATA ;STARTING WITH º ATTEMPT OR A BACK SPACE RECORD ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 ;SET I/O COMPLETE TST RES1(R0) ; TEST BACKSPACE FLAG BPL MRRE1 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 BMI MRRE6 ; BR IF EOF DETECTED ASH #4,R2 »XXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 0 ; NO DISR RESIDENT DIRECTORIES ******** .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¼ ; SET FORWARD FLAG .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MREA1 JSR PC,MTBAD ; FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTE½THE LAST ADDRESS OF TRACK0 ;DATA PATTERN = 25252 ;THEN READ THE DATA DOING ONE WORD ;X-FERS XSPIRL: BIS #BIT8,@DCS ; CLEAR MOV #7000,@#SREQ ; SET LIGHTS JSR R5,ZBUF ; ZERO INPUT BUFFER JSR R5,ZOBUF ; ZERO OUTPUT BUFFER MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SET UP STACK MOV #200,R0 ; SET UP TWO SECTORS MOV #OUTBUF,R1 1$: MOV #25252,(R1)+ SOB R0,1$ MOV #¾ ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 MOVB #1¿ LEAST THREE .ENDC MAXID1 = 256. ; MAX. # OF FILE ID ON DISK #1. ******** ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; 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 ÀRED AFTER A READ ATTEMPT OR A BACK SPACE RECORD ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 ;SET I/O COMPLETE TST RES1(R0) ; TEST BACKSPACE FLAG BPL MRRE1 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 BMI MRRE6 ; BR IF EOF DETECTED Á200,WRDCT ; SET WORD COUNT FOR 2 SECTORS MOV #OUTBUF,BUF ;SET UP CMA CLR TRACK ;SET UP DISK ADDR. MOV #77,DMA WRITE ;WRITE DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X1SPIL ;BRANCH IF NO ERROR MOV @DCS,WORK MOV #23,ERCOUNT ;SET UP ERROR COUNT ER23: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X1SPIL: MOV #100,WRDCT ; SÂ,DRNEW ; SET BACKWARDS FLAG JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG .IFNZ DATUM MOV #-1,@#MTBCNT .ENDC BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: INC R5 ;SET I/O NOT COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; R0 = ADDà NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID3 = 500. ; MAXIMUM ID ON DISC 3 .ENDC $SYSFL = NDISCS+5 ; NO. OF SYSTEM FILE ID'S IN ROS ; ; COMPID,FTDIR,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+MAXOVR+20. ; NO. OF CORE RES. FILE IDS ******** .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT IÄASH #4,R2 ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 ÅET UP FOR 100 WORD X-FER CLR TRACK MOV #77,DMA ; SET UP DAR MOV #INBUF,BUF ;SET UP CMA READ ;READ DAR 3777 TSTB @DCS ;TEST FOR NOT READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X2SPIL ;BRANCH IF NO ERROR MOV #24,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG ER24: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE THE ERROR **** BR XSPIRL X2SPIL: MOV #100,R0 ; CHÆRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MWRI1 JSR PC,MTBAD MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NÇD'S .ENDC ; ******** ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEEDED ; ; FOR CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS ; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 0 È MOVB #1,DRNEW ; SET BACKWARDS FLAG JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG .IFNZ DATUM MOV #-1,@#MTBCNT .ENDC BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: INC R5 ;SET I/O NOT COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; ÉECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR X3SPIL 2$: MOV #25,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV -(R1),WORK ER25: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR.3777 OF TRACK 0 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 3777 OF TRACK 0 **** BR XSPIRL X3SPIL: MOV #1,TRACK JSR R5,ZBUF ÊO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE COMMAND BR MWRI3 MWRIË ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 0 ; NO FIXED PARTIONS ******** $SGMNT = 0 ; NO OVERLAY SEGMENTS IN THIS SYSTEM. ******** $FTMAX = 10. ; LARGEST FILE TYPE IN SYSTEM $IDMAX = 256. ; LARGEST FILE ID IN SYSTEM. ******** ; ; MUST BE >= MAXID1,2,3,..,N $FTDRL = $FTMAX*3/64.+1 ; NOÌ R0 = ADDRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MWRI1 JSR PC,MTBAD MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 Í ; ZERO INPUT BUFFER MOV #100,WRDCT MOV #INBUF,BUF CLR DMA READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X4SPIL ;BRANCH IF NO ERROR MOV #26,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG. ER26: JSR %5,STAER ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL .BLKW 40 ; PATCH AREA X4SPIL: Î2: BIS #WEXG,R3 ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE TST RES1(R0) BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRRE3 MRWR1: .IFZ DATUM MOV Ï. OF SECTORS IN FILE TYPE DIRECTORY $ROSFW = NDISCS+$SYSFL*5 ; NO. OF WORDS IN ROS FILES $CDISZ = NCRWDS-$ROSFW/64.+1 ; NO. OF SECTORS IN CORES ; ; DIRECTORY IMAGE $TKFL1 = TASMAX*5 ; # 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 NUMBEÐ ;BR IF NO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE COMMAND BR Ñ MOV #100,R0 MOV #INBUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR LPXSPIL ; BR IF ALL DATA OK 2$: MOV #27,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV -(R1),WORK ER27: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 0 OF TRACK 1 **** X5SPIL: JMP XSPIRL LPXSPIL:BIT #BIT11,@SR ;LOOP ON TEST? BÒ @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE ; M A G N E T I C T A P E W R I T E F I L E M A R K ; ÓR OF ; WORDS FOR DISCIO $TKFNS = $TKFLN/64.+1 ; NO. OF SECTORS IN TASK TABLE FILE ; ******** $ROSIZE = 320. ; SIZE OF ROS BOOT AREA ******** ; ******** ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = $ROSIZE ; DISC1 DISK DIR. AFTER BOOT AREÔ MWRI3 MWRI2: BIS #WEXG,R3 ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE TST RES1(R0) BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRRE3 MRWR1: .IFZ DATUÕNE X5SPIL .PAGE CLRREG: CLR DMA ;CLEAR WORD ADDRESS CLR TRACK ;CLEAR TRACK ADDRESS ; ; DATAT: MOV SWRDCT,WRDCT MOV #LDAT,HRDER ;SETUP FOR HARD ERROR MOV #340,@CSR ;LOCK UP PROCESSOR PRIORITY JSR %5,PASEL ;SET UP DATA BUFFERS LDAT: JSR %5,OPDSEL ;SET UP DISK ADDRESS MOV TRACK,@#SREQ BIT #BIT14,FLAG ;TEST FOR WRITE BEQ SLH ;TEST FOR WRITE CHECK MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER WRITE +100 ;WRITE WITH INT. ENABLED BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOÖMWEOF: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MWEOF1 MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING .IFF ASH #15,R2 BMI MWEOF1 .ENDC CLR R4 ;CLEAR ERROR FLAG BI×A ******** ; ; 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 ; DISC RESIDNET ØM MOV @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE ; M A G N E T I C T A P E W R I T E F I L EÙR INT BNE WRWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR SLH WRWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG SLH: BIT #BIT13,FLAG ;TEST FOR WRITE CHECK BEQ ESH ;TEST FOR READ MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER MOV #340,@CSR WRCHECK +100 ;WRITE CHECK WITH INT. ENABLE BIT #BIT9,@SR ;FINDOUT HOW TO WAIT FOR INT. BNE WCWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR ESH WCWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG ESH: BIT #BIT12ÚS #WRFM,R3 ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 Û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 Ü M A R K ; MWEOF: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MWEOF1 MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING .IFF ASH #15,R2 BMI MWEOF1 .ENDC CLR R4 ;CLEAR ERROR FÝ,FLAG ;TEST FOR READ BEQ REH ;CHECK BUFFER MOV #INBUF,BUF ;SETUP OUTPUT BUFFER BIC #3,FLAG ;CLEAR RE-READ COUNT DSKRD: MOV #340,@CSR JSR %5,ZBUF ;CLEAR BUFFER INC FLAG READ +100 ;READ + INT ENABLE BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT. BNE RDWAIT ;WAIT WITH WAIT INSTRUCTION IOT BR ELH RDWAIT: MOV PRIORITY,@CSR ;SET UP PRIORITY WAIT ;WAIT FOR FLAG ELH: BIT #BIT12,@SR BNE ADRD JSR %5,COMPARE ;COMPARE OUTBUFFER TO INBUFFER ADRD: JSR %5,OVRFLO ;TEST FOR EXTRA DATE Þ ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCH IF ANY ERRORS .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: .IFNZ DATUM MOVB #1,DRNEW ; SET BACKWARDS FLAG .ENDC JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT .Iß; FILE TYPE 4, LOG UNIT 1 $FD005 = 1 ; FILE TYPE 5, LOG UNIT 1, NO CHECK PONT******** $FD006 = 1 ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8, LOG UNIT 1 $FD009 = 1 ; FILE TYPE 9, LOG UNIT 1 .IFL 10.-$FTMAX XXXXXXXX ; ONLY SET UP FOR 10. FILE TYPES .ENDC $OVTYP = 5. ; FILE TYPE FOR OVàLAG BIS #WRFM,R3 ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH áBREAKS MOV FLAG,WORK ;CHECK DISK RE-READ COUNT BIC #177774,WORK ;DO 3 RE-READS. CMP #3,WORK BNE DSKRD ;DO ANOTHER RE-READ REH: BIT #BIT8,@SR BNE DATAT JSR %7,DISBUF ;GO SET UP DISK BUFFER. BR LDAT MSTR: TST FLAG BPL .+6 ;UNDER PROGRAM CONTROL JMP EXTPP ;OPERATOR SELECTED PATTERN ADD #2,PATNU ;INC PATTERN INDEX CMP #44,PATNU BNE DATAT ;NOT LAST PATTERN EXIT CLR PATNU ;LAST PATTERN EXIT ; ;THIS IS A RANDOM DATA, RANDOM ADDRESS ;AND RANDOM WORD COUNT ; ;WORD COUNT CAN âFF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLRB RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 ;SET I/O CãERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDISZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = $ROSIZE ; BOOT AREA ******** $FS002 = 0 ; ******** $FS003 = 0 ; ******** $FS004 = 0 ä #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCH IF ANY ERRORS .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: .IFNZ DATUM MOVB #1,DRNEW ; SET BACKWARDS FLAG .ENDC JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINTåBE EQUAL TO OR LESS THAN 1000 WORDS ; RANEX: MOV #-1000,PASSC MOV #1000,%6 BIC #BIT9,FLAG MOV #RANER,HRDER ;SET UP FOR HARD ERROR MOV PRIORITY,@CSR ;SET PRIORITY TO LEVEL 5 WRLG: MOV #3,WORK ;GENERATE RANDOM WORD MOV #OUTBUF,%1 JSR %5,RANDOM BIC #177003,OUTBUF ; MASK FOR WORD LENGTH BEQ WRLG MOV OUTBUF,WRDCT ;SET UP WORD COUNT MOV OUTBUF+2,DMA ;SET UP DAR BIC #177700,DMA BIC #177000,OUTBUF+4 BIT #400,OUTBUF+4 BEQ .+6çOMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DECREMENT (N) AND SPACE FORWARD DEC COUNT(R0) INC NWORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DEC NWORD(R0) è ; ******** $FS005 = 1719. ; TASK FILE AREA - FORCE TYPE 9 TO 16X 2/7/73 $FS006 = 0 ; ******** $FS007 = 0 ; FOR CITGO BATCH IS WITH DATA - TYPE 9.******** $FS008 = 0 ; ******** $FS009 = 0 ; ******** ; $DSIZE = 8192. ; NUMBER OF  BIT .IFF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLRB RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 é DEC OUTBUF+4 MOV OUTBUF+4,TRACK ;SET UP DAE MOV WRDCT,WORK ;GENERATE RANDOM MOV #OUTBUF,%1 ;DATA BUFFER JSR %5,RANDOM MOV #OUTBUF,BUF BIS #BIT8,@DCS ;CLEAR THE DISK WRITE +100 ;WRITE DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK +100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT MOV #INBUF,BUF ;SET UP BUFFER JSR %5,ZBUF ;CLEAR BUFFER AREA READ +100 ;READ DATA BIT #BIT9,@SR BNE .+6 IOêPC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3ë BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF CLRB DRNEW TST COUNT(R0) BGE MSPRA INCB ìSECTORS ON DISK. ******** ; ******** $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS005+$FS006+$FS007+$FS008+$FS009 ; ******** ; ******** ; NOTE: TYPE 9. MUST START ON A 16K SECTOR BOUNDARY FOR RETENION. ******** ; íT BR .+12 MOV PRIORITY,@CSR WAIT JSR %5,COMPARE ;COMPARE OUT BUFFER TO IN BUFFER JSR %5,OVRFLO ;TEST FOR EXTRA DATA BREAKS RANER: BIT #BIT9,FLAG ;CHECK FOR ERROR BEQ EXRAX BIC #BIT9,FLAG JSR %5,CONV DMA MES1 6 JSR %5,CONV TRACK MES1A 2 JSR %5,CONV WRDCT MES3 4 EMT+0 HED6 MES1A MES1 MES3 -1 EXRAX: INC PASSC ;HAVE WE DONE IT 1000 TIMES BNE WRLG ;BRANCH IF NO BIT #BIT11,@SR ;LOOP ON TEST BEQ .+6 ;BRANCH IF YES JMP RANEX ; ;CHECK FOR MULTI DISKî ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGïDRNEW ; SET BACKWARDS FLAG MSPRA: JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 ; OR IN SPACE COMMAND MSPRC1: MOV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER MOV R3,@#MTCOMM ; GIVE COMMAND MSPRC2: RTS PC MSPRC3: BIS #BCKR,R3 ; OR IN BACKSPACE COMMAND BR MSPRC1 MRPRC: MOV ð ******** $FS009 = $DSIZE-$ALOD1-$ALOD2 ; NUMBER OF DATA REA SECTORS. ******** ; ******** .IFL $DSIZE-$ALOD1-$ALOD2 ; ******** XXXXXXXX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; ; FORCE THIS IDS TO BE IN SYSTEM. ******** $BCHID = NDISCS+$SYSFL+1 ; FILE ID FOñ MODE ;IF IN MULTI DISK MODE REPORT "END" ;IF LAST DISK ON SYSTEM HAS BEEN ;EXERCISED. ; ; CLR DMA CLR TRACK BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ REPOEN ;REPORT "END" MOV FLAG,WORK ;WHAT DISK ARE WE ON BIC #177743,WORK ;IF LAST DISK ON SYSTEM CMP WORK,DSKNOR ;REPORT END BEQ REPOEN ;REPORT "END" LAST DISK ADD #4,FLAG ;INC. DISK NO. BR EXTPP ;EXERCISE DISK REPOEN: EMT +1 END ;REPORT END OF PASS BIC #34,FLAG EXTPP: JMP ADTST ;RECYCLE ; ;ENTER DISK HANDLER BY òT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 ó COUNT(R0),R1 BPL MSPRC4 COM R1 MSPRC4: ADD @#MTBCNT,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: .IFNZ DATUM CLRB DRNEW TST COUNT(R0) BGE MSKRA INCB DRNEW ; SET BACKWARDS FLAG MSKRA: .ENDC CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 ôR BATCH FILE $BCHTP = 9. ; BATCH FILE TYPE. '******* $RASIZ = 200. ; NO. OF ENTRIES IN USERS SYMBOL TABLE ; ; IN RASM ; ; NOTE: 4 WORDS/ENTRY $LSDSZ = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; õTHE TRAP INSTRUCTION ;ARGUMENT TO TRAP INSTRUCTION IS TWO ORDER ;BYTE OF THE CONTROL REGISTER. ; DISK: MOV R5,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV DAR,R5 MOV TRACK,R0 BIC #177000,R0 ASH #6,R0 MOV DMA,R1 BIC #177700,R1 ADD R1,R0 MOV R0,(R5) ; LOAD DAR MOV BUF,-(R5) ; LOAD CMA MOV WRDCT,-(R5) ; LOAD WC NEG (R5) ö BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DE÷ .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: ø $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 50. ; MAX NO. OF OBJECT MODULES TO BE ******** ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ; JUST 1 TTY IN SYSTEM ******** ;IN SYSTEM SYSTTY = 0 ù MOV 6(6),%1 MOV -(1),WORK BIC #177600,WORK ;MASK FUNCTION BITS MOV WORK,-(5) ;LOAD FUNCTION REG. MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R5 RTI ;RETURN FROM TRAP ; ; ; ; ; ; ; ;RF11 DISK INTERRUPT HANDLER ;ROUTINE CONTINUES ON ERRORS ; DKINT: BIC #BIT4,@CSR ;CLEAR TRACE BIT TST @DCS ;TEST FOR ERROR BPL INTEXT ;BRANCH IF NO ERROR BIS #BIT9,FLAG ;SET ERROR BIT MOV @DAE,WORK ;REPORT ERROR BIC #177700,WORK ;MASK ADDRúVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DEVNUM(R0),R1 CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ û INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR ü;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTOýESS EXT. BITS. JSR %5,CONV ;CONVERT TO ASCII WORK MES1A 2 EMT+1 HED2 MOV @DCS,WORK ;TEST FOR READ BIC #177770,WORK CMP #4,WORK BNE DELMES ;IF READING REPORT WHICH READ MOV FLAG,WORK BIC #177774,WORK JSR %5,CONV WORK MES13 1 EMT+1 MES13 DELMES: MOV @DAR,WORK ;SET UP LOWER 16 BITS OF ADDR. DEC WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES1 6 EMT+0 MES1A MES1 -1 MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV WORK MES2 6 EMT+1 MES2 BIT #BIT1þ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ADD #MTUIC,R3 ; INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MURE5: RTS PC .ENDC .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; R4 = 0 AND (N) BIT SET ÿMSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: .IFNZ DATUM MOVB #1,DRNEW .ENDC CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIRS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ; 250MS (1/4 SEC.) COUNT FOR TTY ******** ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS TTWTIM4,@DCS ;TEST FOR HARD ERROR BEQ SOFTER ;GO AND CONTINUE SOFT ERROR MOV @DAE,WORK ;FETCH ERROR EXT. BITS SWAB WORK BIC #177400,WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES2A 3 EMT+0 HED5A MES2A -1 BIS #BIT8,@DCS ;CLEAR THE DISK MOV #1000,%6 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR JMP @HRDER ;EXIT HARD ERROR SOFTER: TST @WC ;CHECK FOR X-FER DONE BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@SR BEQ .+6 SUB #2,(6) ;X-FER NOT DONE SIF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 ST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DEVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DEVNUM(R0),R1  = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION WHERE ET UP FOR RETURN BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT10 SET IN SR BIS #BIT0,@DCS ;SET GO AND CONTINUE RTI ;RETURN TO WAIT INSTR. ; ; INTEXT: BIT #BIT13,@SR ;HALT ON COMPLETION FLAG BEQ .+4 HALT ;YES BIT 13 SET IN SR HALT BIT #BIT9,@SR BNE .+6 MOV #774,%6 ;RESET STACK RTI ;EXIT ; ; ;ROUTINE TO SET UP DAR AND DAE ;FROM SR AND CONVERSATION ;ENTER FROM JSR %5,OPDSEL OPDSEL: BIT #BIT7,@SR ;DOES SR CONTAIN TRACK # BNE .+4 RTS %5 MOV @S CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;LOAD WITH BYTE SIGN EXTENDED .IFNZ DATUM ASH #11,R1 .ENDC BPL MTIN2 ; BRANCH IF READY BIT WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ADD #MTUIC,R3  ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE ;* ;* G E N E R A R,R0 ; FETCH SW BIC #177600,R0 MOV R0,TRACK MOV #0,DMA ; USE MOV RATHER THAN CLR FOR PATCHING RTS %5 ;EXIT ; ;ROUTINE TO SETUP DISK BUFFERS ;ADD WORD COUNT TO STARTING DISK ADDRESSES ;COMPARE CALCULATED ADDRESS TO TERMINATING ADDRESS ; DISBUF: MOV WRDCT,R1 ASH #-6,R1 ; CONVERT TO SECTION ADD DMA,R1 MOV TRACK,R2 ASH #6,R2 ADD R1,R2 COMDAR: CMP R2,@DAR (R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 &  ; INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MURE5: RTS PC .ENDC .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; (N) BIT SET IF NO ERRORS, (N) BIT CLEARED IF AN ERROR MTINIT: MOV #7000,MTDEL CMPB NMNEW,NMOLD L S Y S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 24576.+24576. ; TOP OF CORE IN SYSTEM ******** $RASM = 1 ;1 = ASSEMBLER IS INCLUDED, AND THEREFORE ;CREAD MUST INSERT , AFTER ;ASSEMBLER READ REQUESTS .PAGE ;********************************************************************** ;*  BEQ CMDAE BIS #BIT6,FLAG ; CMDAE: ADD DMA,R1 1$: BIT #177700,R1 BEQ 2$ SUB #100,R1 INC TRACK BIC #177700,R1 2$: MOV R1,DMA BIT #BIT6,FLAG ;REPORT ADDRESS ERROR BNE .+4 EXTDR: RTS %7 ;EXIT ERADR: JSR %5,CONV ;CONVERT DMA REG COUNT TO ASCII DMA MES1 6 JSR %5,CONV ;CONVERT TRACK REG COUNT TO ASCII WORK1 MES1A 2 EMT +0 ;REPORT ERROR HED4 MES1A MES1 -1 BIC #BIT6,FLAG CLR DMA ;DISK ADDRESS E 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 .ENDC ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT NEG R5  BNE MTIN6 CMPB DRNEW,DROLD BNE MTIN6 MTINA: MOVB DEVNUM(R0),R3 ; OBTAIN DEVICE NUMBER MOVB R3,NMNEW ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG MOV #7000,MTDEL CLR R4 CMP FUNC ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;********************************************************************** NCR = 0 RROR RE-START PROG. CLR TRACK BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;SWITCH 10 SET IN SR HALT RTS %7 ; ; ; ;ROUTINE TO SELECT DATA PATTERNS FOR TEST ; ;ENTER FROM JSR %5 PASEL ; PASEL: MOV PATNU,%0 ;SET UP PATTERN NUMBER MOV WRDCT,WORK ;SET UP WORK MOV #OUTBUF,%1 ;LOC. OF OUTBUFFER CMP #42,%0 ;TEST FOR RANDOM DATA NUMBER BEQ RANDOM ;GO GENERATE RANDOM DATA FILDAT: MOV PAT0(0),(1)+ ;FILL BUFFER DEC WORK ;DEC. WORK COUNT BNE FILDAT ;LOAD NEXT WORD RTS %5 ;BUFFER  MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR T(R0),#1 ;OPEN COMMAND BEQ MTIN3 .IFZ DATUM BIT #200,R1 ;TEST READY BIT BEQ MTIN2 ; BR IF NOT READY .IFF CMPB NMNEW,NMOLD BNE MTIN4 CMPB DRNEW,DROLD BNE MTIN4 MTIN1: BIT #200,@#MTCOMM ; TEST CUR BIT BNE MTIN3 ; BR IF CUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN1 BR MTIN ; NO CARD READERS IN CITGO ******** .IFNZ NCR ; ******** BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNAL EBCDIC CODE FULL ; ;RANDOM DATA ; ; ;RANDOM DATA GENERATOR SUBROUTINE RANDOM: MOV LONUM,%0 ;SET UP R0 WITH 5 DIGITS LOW MOV HINUM,%4 ;SET UP R1 WITH 5 DIGITS HIGH MOV #7,%3 ;SET UP SHIFT COUNT CLR %2 ;CLEAR R2 SHIFT: ASL %0 ;SHIFT R0 LEFT AND ROL %4 ;ROTATE CARRY INTO LSB OF R1 INTO ROL %2 ;ROTATE CARRY OUT OF R1 INTO R2 DEC %3 ;DECREMENT R3 BNE SHIFT ;CONTINUE SHIFT LOOP ADD LONUM,%0 ;ADDN IN NUMBER TO MAKE X 129 ADC %4 ;PROPOGATE CARRY ADD HINUM,%4 ;ADDN IN NUMBER TO MAKE X 129  MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; 2 . MTIN4: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN3 ; BR IF TUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN4 BR MTIN2 MTIN3: SEN MTIN5: RTS PC ;RETURN MTIN7: MOV #CLEA,@#MTCOMM ; ISSUE CLEAR TO CONTROLLER BR MTINA MTIN6: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN7 DEC MTDEL BNE MTIN6 MTIN2:  ; (029 CARD CODE) $RES = 1 ; TIMER RES. FOR CREAD (=10.0 MSEC.) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THEADC %2 ;PROPOGATE CARRY ADD #1057,%0 ;ADDN LOW CONSTANT ADC %4 ;PROPOGATE CARRIES ADC %2 ;PROPOGATE AGAN ADD #47401,%4 ;ADDN HIGH CONSTANT ADC %2 ;PROPOGATE CARRY ADD #6,%2 ;ADDN HIGHEST CONSTANT ADD %2,%0 ;REPRIME R0 WITH HIGH DIGIT ADC %4 ;PROPOGATE CARRY MOV %0,LONUM ;PUT R0 BACK IN LONUM MOV %0,(1)+ ;HOLD LONUM FOR PROGRAM DEC WORK BEQ EXGEN MOV %4,HINUM ;PUT R1 BACK IN HINUM MOV %4,(1)+ ;HOLD HINUM FOR PROGRAM DEC WORK BNE RANDOM EXGEN: RTS %5 ;RETURN T PR CAN BE RELEASED MTDEQ1: RTS PC .END  MOV #11,R4 BR MTIN5 MTDEL: .WORD 7000 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DA ; TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162OGRAM LONUM: 0 HINUM: 0 ; ; .EVEN ; ;RF11 DATA PATTERNS ; PAT0: 0 PAT1: 177777 PAT2: 134510 PAT3: 043267 PAT4: 100000 PAT5: 107070 PAT6: 070707 PAT7: 052525 PAT10: 125252 PAT11: 177737 PAT12: 004102 PAT13: 136363 PAT14: 063636 PAT15: 000001 PAT16: 100005 PAT17: 000520 PAT20: 030303 ;PAT21 RANDOM DATA ; ; ; ;DATA COMPARISON ROUTINE ;IF AN ERROR OCCURS BETWEEN THE OUT-BUFFER AND ;THE IN-BUFFER AN ERROR WILL BE REPORTED IN THE ;FOLLOWING MANNER ;DATA ERROR XX DAE XXXXXX ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DECREMENT (N) AND SPACE FORWARD DEC COUNT(R0) INC NWORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DETUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 .ENDC ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT  ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CR! DAR XXXXXX GOOD DATA XXXXXX BAD DATA ; ; COMPARE:CLR WORK2 ;WORD COUNT MOV #OUTBUF,SAVE ;SET UP OUTBUFFER POINTER MOV #INBUF,SAV1 ;SET UP IN BUFFER POINTER WRDCMP: CMP @SAVE,@SAV1 ;COMPARE BUFFERS BNE WDERR ;WORD IN ERROR WRDINC: INC WORK2 ;+1 WORD COUNT CMP WRDCT,WORK2 ;IS COMPLETE BUFFER CHECKED BEQ ADAM ;EXIT ROUTINE ADD #2,SAVE ADD #2,SAV1 BR WRDCMP ;COMPARE NEXT WORD ADAM: RTS %5 ;EXIT THIS ROUTINE ; WDERR: BIS #BIT9,FLAG ;SET ERROR BIT MOV DMA,WORK ;FETCH STARTING "C NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF CLRB DRNEW TST COUNT(R0) BGE MSPRA # MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT NEG R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 $S.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .ENDC ; %DISK ADDR MOV TRACK,WORK1 ; ADD WORK2,WORK ;CALCULATE FAILING ADDR 1$: BIT #177700,WORK BEQ 2$ INC WORK1 SUB #100,WORK BR 1$ 2$: MOV FLAG,WORK3 BIC #177743,WORK3 ASH #10,WORK3 BIS WORK3,WORK1 JSR %5,CONV ;CONVERT WORD ADDR TO ASCII WORK MES1 6 JSR %5,CONV ;CONVERT TRACK ADDR TO ASCII WORK1 MES1A 2 MOV @SAVE,WORK ;FETCH GOOD DATA JSR %5,CONV ;CONVERT GOOD DATA TO ASCII WORK MES5 6 MOV @SAV1,WORK ;FE& INCB DRNEW ; SET BACKWARDS FLAG MSPRA: JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 ; OR IN SPACE COMMAND MSPRC1: MOV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER MOV R3,@#MTCOMM ; GIVE COMMAND MSPRC2: RTS PC MSPRC3: BIS #BCKR,R3 ; OR IN BACKSPACE COMMAND BR MSPRC1' ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TAS( ******** .PAGE ;********************************************************************** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 0 ; NO LINE PRINTERS IN CITGO ******** .IFNZ NLP )TCH BAD DATA JSR %5,CONV ;CONVERT TO ASCII WORK MES6 6 MOV FLAG,WORK ;WHICH READ THE BIC #177774,WORK ;ERROR OCCURRED ON JSR %5,CONV WORK MES13 1 EMT +0 ;PRINT MESSAGE HED1 MES13 MES1A MES1 MES5 MES6 -1 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR BR WRDINC ;GO COMPARE NEXT WORD ; ; ; ; ; ; ;ROUTINE TO ZERO DATA INPUT BUFFER ;ZERO BUFFER BEFORE READING ; ZOBUF: MOV #OUTBUF,R4 ; ZERO OUTPUT BUFFER BR * ; INTERRUPT ROUTINE MRPRC: MOV COUNT(R0),R1 BPL MSPRC4 COM R1 MSPRC4: ADD @#MTBCNT,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: .IFNZ DATUM CLRB DRNEW TST COUNT(R0) BGE MSKRA INCB DRNEW ; SET BACKWARDS FLAG MSKRA: .ENDC CLR R5 ;SET I/O COMK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END , ; ******** NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA - ZBUFE ; ZBUF: MOV #INBUF,%4 ;FETCH START OF INBUFFER ZBUFE: MOV #4000,R0 1$: CLR (R4)+ SOB R0,1$ RTS %5 ;EXIT ROUTINE ; ; ; ; ;ROUTINE TO TEST FOR ADDITIONAL DATA TRANSFERS ;ANY DATA TRANSFERRED AFTER WORD COUNT OVERFLOW IS AN ERROR ; ; OVRFLO: MOV WRDCT,%4 ;ADD WORD COUNT ROL %4 ADD #INBUF,%4 CHWRD: CMP R4,#INBUF+10000 ; IS TEST COMPLETE BNE CKNEX ;CHECK NEXT WORD RTS %5 ;TEST IS COMPLETE CKNEX: TST (4)+ ;TEST FOR ZERO WORD BEQ CH.PLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE /; TSKNTR.S07 ; TSKNTR.SO6 18-JUL-73 ; TSKNTR.S05 16-JUL-73 ; TSKNTR.S04 13-JUL-73 ; TSKNTR.S03 12-JUL-73 ; TSKNTR.S02 10-JUL-73 ;************************************************************************ ;* * ;* T A S K E N T E R * ;* * ;* TASK E0BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WOR1WRD ;WORD IS ZERO BIS #BIT9,FLAG ;SET ERROR BIT MOV %4,ACNVX SUB #2,ACNVX JSR %5,CONV ;CONVERT 1 OCTAL TO ASCII ACNVX ;ADDRESS MES4 6 MOV %4,ACNVX SUB #2,ACNVX MOV @ACNVX,ACNVX JSR %5,CONV ;CONVERT OCTAL TO ASCII ACNVX ;DATA MES6 6 EMT +0 ;CALL TYPE OUT ROUTINE HED3 MES4 MES6 -1 BR CHWRD ;FETCH NEXT WORD ; ; ;EXTENDED MEMORY EXERCISER ;THE PROGRAM DETERMINES HOW MUCH MEMORY ;IS ON THE SYSTEM THEN IT ;GENERATES A RANDOM BUFFER THAT SIZE ;AND WRITES2COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) 3NTER WILL INSERT THE FOLLOWING ITEMS IN THE HEADER OF A * ;* LOAD MODULE * ;* 1 TASK NUMBER * ;* 2 PRIORITY * ;* 3 TASK ACCESS STATUS * ;* IN ADDITION TO THE ABOVE, THE FOLLOWING OPTIONAL ENTRIES MAY * ;* BE SET 4D COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 5 AND WRITE CHECKS THE DATA ; EXTMEN: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #340,@CSR ;LOCK UP PRIORITY LEVELS MOV #1000,%6 MOV #MAXREF,4 ;SET UP I/O BUS TRAP MOV #340,6 MOV #17446,SAVE ;SET UP FOR 4K EXREF: TST @SAVE ;REFERENCE MEMORY CMP #177446,SAVE ;TEST FOR GREATER THAN 28K BNE .+6 ;BRANCH IF LESS THAN 32K HALT BR MAXREF ;LAST REFERENCE MADE TO I/O REG. ADD #20000,SAVE ;SET UP FOR NEXT MEMORY REF. BR EXREF ;GO REFERENCE MEMORY ; ;ENTER HERE WHEN I/O BUS ERROR OCCURS ; MAX6 INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: .IFNZ DATUM MOVB #1,DRNEW .ENDC CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB7 * ;* 1 MAXIMUM TASK RUN TIME * ;* 2 TPDR7 & TPAR7 SET TO THE DEVICE PAGE * ;* * ;* AN EXAMPLE OF AN INPUT CARD IS * ;* ACC=BCH; DEV; NAM=LDFILE; PRI=2; TIM=180; TSK=12;END; * ;* THE 'END;' COMMAND MUST BE THE LAST COMMAND * ;* THE OTHER COMMANDS MAY BE IN ANY ORDER8= 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX LINES/PAGE (=CONTROL TAPE. 9REF: MOV #6,4 ;RESTORE I/O BUS TRAP CLR 6 MOV #1000,%6 SUB #20000,SAVE ; SUB #OUTBUF,SAVE ;SET UP NEW WORD COUNT MOV SAVE,SWRDCT ROR SWRDCT MOV SWRDCT,WRDCT MOV #BIT7,@CSR ;SET UP PRIORITY LEVEL MOV #NEWBUF,HRDER ;SET UP FOR HARD ERROR CLR DMA CLR TRACK NEWBUF: MOV WRDCT,WORK ;SET UP FOR RANDOM BUFFER MOV #OUTBUF,%1 JSR %5,RANDOM ;NEW DATA BUFFER GENERATED MOV #OUTBUF,BUF WRITE+100 ;WRITE BUFFER BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK: R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DEVNUM(R0) ;RESTOR RTS PC ;RETURN ; MU; AND ON MORE THAN ONE CARD* ;************************************************************************ ; THE SWITCH REGISTER MUST BE SET AS FOLLOWS ; BATCH TASK = 0 ; BACKGROUND TASK = 1 ; FOREGROUND OR SYSTEM = 2 ; THE ABOVE ARE ONLY TEMPORARY UNTIL KEY SWITCHES ARE INSTALLED ; ; ; ROSLNK ERROR CODES SET IN R3 BEFORE GOING TO RLKER ; ; CODE DEFINITION PRINTS ON TTY ; 60 SUCCESSFUL 0 ; $LPERR = 10. .ENDC ; ******** $RES = 1 ; TIMER RES. FOR CREAD (1/60 SEC.) ******** $100MS = 6. ; MULTIPLER TO GET 100MS OFF $RES ******** $500MS = 30. ; MULTIPLER TO GET 1/2 SEC. OFF $RES. ******** $1SEC = 60. ; MULTIPLER TO GET 1 SEC. OFF $RES. ******** =+100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR NEWBUF ;GO WRITE NEW BUFFER BR NEWBUF-10 ;DISK COMPLETE START AGAIN ; ;BACKGROUND TEST FOR INTERRUPTS ; XWAIT: MOV #RTIX,14 ;SET UP TRACE TRAP CLR 16 MOV #-1000,PASS ;SET UP TIME BASE BIS #BIT4,@CSR ;SET TRACE BIT CLR #0 XINCW: INC XINCW-2 TSTB XINCW-2 BPL XINCW INC PASS BEQ .+4 BR XINCW-4 ;REPORT BACKGROUND TEST TIMED OUT MOV #340,@CSR >REWI: MOV DEVNUM(R0),R1 CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ MURE4 ;BR IF DONE INC R2 ? 61 BAD COMMAND 1 ; 62 BAD ACCESS CODE 2 ; 63 NO END COMMAND 3 ; 64 BAD NAME 4 ; 65 PROIRITY ERROR 5 ; 66 BAD TIME LIMIT 6 ; 67 BAD TASK NUMBER 7 ; 70 IMPROPER KEY SETTING 8 ; 71 MISSING DELIMITER 9 ; 101 DISCIO ERROR A ; 102 DEVICE PAGE UNAVAILABLE B ; 103 PROGRAM SIZE TOO@; DDCGTP.S03 AUG-28-73 ; DDCGTP.S02 ; DDCGTP.SO1 AUG-24-73 ; DDCGTP.S00 AUG-21-73 .TITLE DDCGTP ( D D C GENERAL TEST PROGRAM ) .ENABLE ABS BIT0=1 BIT1=2 BIT2=4 BIT3=10 BIT4=20 BIT5=40 BIT6=100 BIT7=200 BIT8=400 BIT9=1000 BIT10=2000 BIT11=4000 BIT12=10000 BIT13=20000 BIT14=40000 BIT15=100000 R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 NO = 67 ; WRITE=TRAP+3 WRCHECK=TRAP+7 READ=TRA BIC #BIT4,@CSR ;CLEAR TRACE BIT EMT+1 TIMO HALT ; RTIX: RTI ;RF11 POWER FAIL TEST "1 ; DISK ZERO ; WRITE COMPLETE DISK WITH 125252 PATTERN ; REPORT "OK" ;START WRITING THE SAME PATTERN ;WHEN POWER FAIL OCCURS ABORT TRANSFER ;SETUP NEW ENTRY POINT AND HALT ; ;POWER UP AND WRITE CHECK THE DISK FOR ERRORS ; ;***ONLY ONE ERROR IS CONSIDERED ACCEPTABLE*** ; ; PFT1: MOV #1000,%6 ;SET UP STACK JSR %7,POWFAL ;WRITE 125252 ON DISK PFWAT: BIS #BIT8,@DCS ;CLEAR DISK CLR DMA CLR TRACKB;INC IF NOT DONE MURE4: ADD #MTUIC,R3 ; INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MURE5: RTS PC .ENDC .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; (N) BIT SET IF NO ERRORS, (N) BIT CLEARED IF AN ERROR MTINIT: MOV #7000,C LARGE C ; 104 ILLEGAL FILE I.D. D ; 105 FILE ERROR E ; .PAGE ; ROS3 INPUT / OUTPUT CONTROL BLOCK MACRO .MACRO IOCBM DEV,EXTY,EXIT,ETSK,LEV,DATB .WORD 1 .BYTE DEV ;LOGICAL DEVICE NUMBER .BYTE EXTY ;EXIT TYPE .WORD EXIT ;I/O COMPLET .BYTE ETSK ;ERROR TASK .BYTE LEV ;PRIORITY LEVEL .WORD 0,0 DAP+5 ; ; ;DDC DATA TEST PROGRAM ;VECTORS USED IN PROGRAM ;#1 LOC 130,134,140,144,150,154,160,164 DISK INTERRUPT ;#2 LOC 30 EMT (TELETYPE OUTPUT) ;#3 LOC 34 TRAP (DISK HANDLERS) ;#4 LOC 14 TRACE TRAP (USED IN BACKGROUND TEST) ;#5 LOC 20 IOT TRAP (USED IN CALLING BACKGROUND TEST) ; ;I/O ADDRESS POINTERS SR: 177570 ;SWITCH REGIISTER CSR: 177776 ;PROCESSOR STATUS REGISTER TPB: 177566 ;TELETYPE REGISTERS TKB: 177562 TPS: 177564 TKS: 177560 ; ;DISK I/O REGISTERS ; DCS: 177460 ;DE MOV #PFWAT,HRDER ;SET UP FOR HARD ERROR MOV #DOWN,24 ;SET UP POWER FAIL VEC. MOV #340,26 MYBYWR: WRITE +100 BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR MYBYWR BR PFWAT ;ROUTINE TO CHECK DATA AFTER POWER FAIL ; UPCHK: BIS #BIT8,@DCS ;CLEAR THE DISK CLR DMA CLR TRACK MOV #UPCHK,HRDER ;SET UP FOR HARD ERROR CHKDAT: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP FMTDEL MOVB DEVNUM(R0),R3 ; OBTAIN DEVICE NUMBER MOVB R3,NMNEW ; SET CURRENT DEVICE NUMBER CMPB NMNEW,NMOLD BNE MTIN6 CMPB DRNEW,DROLD BNE MTIN6 MTINA: ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEARG ;ERROR PARA / SYSTEM .WORD DATB ;DATA BUFFER ADDRESS .ENDM ; $ROSM = 0 ; *********************************** ; ROS 3 TASK HEADER EQUATES THRD = 0 ; THREAD WORD TASK = 2 ; TASK NUMBER TACC = 4 ; TASK ACCESS STATUS PRIR = 5 ; PRIORITY ENTY = 6 ; ENTRY POINT MTIM = 10 ; MAXIMUM RUN TIME CTIM = 12 ; CURRENT TIME STSZ = 14HISK CONTROL REGISTER WC: 177462 ;WORD COUNT REGISTER CMA: 177464 ;CURRENT ADDRESS REGISTER DAR: 177466 ;LOWER 16 BITS OF DISK ADDRESS DAE: 177470 ;EXTENSION ADDRESS REGISTER DBR: 177472 ;DATA BUFFER REGISTER MA: 177474 ;MAINTENANCE REGISTER ADS: 177476 ;LOOK AHEAD REGISTER VECTOR: 204 ;INTERRUPT VECTOR ADDRESS STATUS: 206 ;DISK INTERRUPT STATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ; ; ; ; ; ; ;RF11 DEDICATE REGISTERS (MEMORY) ; FLAG: 0 ;INTERNAL PROGRAM FLAG RANNUINEW DISK BUFFER BR CHKDAT JMP PFWAT ;GO WAIT FOR ANOTHER ;POWER FAIL ; ;POWER DOWN ROUTINE ;ABORT DISK AND HALT ; ; DOWN: BIS #BIT8,@DCS ;ABORT DISK MOV #UP,24 ;SET POWER FAIL VECTOR HALT ; UP: MOV #DOWN,24 MOV #1000,%6 MOV #-300.,WORK ;SET UP TWENTY SECOND TIMER TIMCNT: RESET INC WORK ;+1 TIMER BNE TIMCNT ;TWO SECONDS NOT UP GO WAIT JMP UPCHK ;GO CHECK DISK ; ; ; ; ; ; ;POWER FAIL TEST #2 ;DISK ZERO ;WRITE COMPLETE DISK WITH 125252 PATTERN ;REPORT "OK" J BACK SPACE FLAG MOV #7000,MTDEL CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 .IFZ DATUM BIT #200,R1 ;TEST READY BIT BEQ MTIN2 ; BR IF NOT READY .IFF CMPB NMNEW,NMOLD BNE MTIN4 CMPB DRNEW,DROLD BNE MTIN4 MTIN1: BIT #200,@#MTCOMM ; TEST CUR BIT BNE MTIN3 ; BR IF CUR BIT IS SET DEC K ; STACK SIZE STAT = 16 ; CPU STATUS STPT = 20 ; STACK POINTER ARGU = 22 ; ARGUEMENT TPDR = 24 ; PAGE DESCRIPTOR REGISTER TPAR = 44 ; PAGE ADDRESS REGISTER PRGH = 64 ; PROGRAM HI ; ; ROS 3 I/O CONTROL BLOCK EQUATES THRD = 0 ; THREAD WORD DEVN = 2 ; DEVICE NUMBER ETYP = 3 ; EXIT TYPE EXIT = 4 ; EXIT ADDRESS LEVL = 7 ; L: 146723 ;RANDOM NUMBER PRIME WRDCT: 0 ;WORKING WORD COUNT TRACK: 0 ;WORKING DAE DMA: 0 ;WORKING DAR PATNU: 0 ;DATA PATTERN INDEX BUF: 0 ;WORKING DATA BUFFER (OUT-IN) TWRDCT: 0 ;TEMP WORD COUNT TDMA: 0 ;TEMP DAR SWRDCT: 0 ;STANDARD WORD COUNT ERCOUNT:0 ;ERROR COUNT FOR MESSAGES. SAVE: 0 SAV1: 0 PASS: 0 DSKNOR: 0 ;NUMBER OF DISKS ON THE SYSTEM HRDER: 0 ;POINTER FOR HARD ERROR PASSC: 0 ; ;RF11 WORK REGISTERS ;(CAN BE CHANGED IN ANY ROUTINE) WOM;WRITE CHECK DISK AND WAIT FOR POWER FAIL ;WHEN POWER COMES BACK WRITE CHECK DISK AGAIN ;AND CHECK FOR ERRORS ;***NO ERRORS SHOULD OCCUR.*** ; ;DO NOT CREATE ANOTHER POWER FAIL UNTIL ;THE ADDRESS REGISTER HAS COMPLETELY CYCLED ;THROUGH. ; PFT2: MOV #1000,%6 ;SET UP STACK JSR %7,POWFAL ;WRITE 125252 ON DISK PWRFL: CLR DMA CLR TRACK MOV #PWRFL,HRDER ;SET UP HARD ERROR MOV #PWRDN,24 ;SET UP POWER FAIL VEC. MOV #340,26 CHKDSK: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT ;WAIT IN BACKGRNMTDEL ; DECREMENT DELAY COUNTER BNE MTIN1 BR MTIN2 . MTIN4: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN3 ; BR IF TUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN4 BR MTIN2 .ENDC MTIN3: SEN RTS PC ;RETURN MTIN7: MOV #CLEA,@#MTCOMM ; ISSUE CLEAR TO CONTROLLER BR MTINA MTIN6: BIT #1,@#MTSTAT ; OPRIORITY LEVEL EROR = 10 ; ERROR CODE DATA = 14 ; DATA BUFFER ; ; ASCII CHARACTER CODES EQSN =075 ; EQUAL SIGN SCOL =073 ; SEMI-COLON COMA =054 ; COMMA RPAR =051 ; RIGHT PARENTHESIS SPAC =040 ; SPACE LPAR =050 ; LEFT PARENTHESIS DOLR = 44 ; DOLLAR SIGN CODE SWR = 177570 ; SWITCH REGISTER TIMLM = 2000 ; TIME LIMIT IN SECONDS ; ; ROS EMTPRK: 0 WORK1: 0 WORK2: 0 WORK3: 0 WORK4: 0 WORK5: 0 BEGIN: RESET CLR R0 ; CLEAR INTERRUPT VECTORS MOV #2,R1 MOV #4,R2 1$: MOV R1,(R0) ; SET INTERRUPT VECTOR TO .+2 CLR R1 ; SET UP HALT ADD R2,R0 ADD R2,R1 CMP #200,R0 ; DONE BNE 1$ ; NO ; BACKGROUND TEST VECTOR MOV #XWAIT,@#20 QOUND BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;CHECK NEXT BUFFER BR CHKDSK BR PWRFL ; ;ROUTINE TO ABORT DISK DURING POWER FAIL ; PWRDN: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #PWRUP,24 ;SET UP RESTART HALT ; PWRUP: MOV #PWRDN,24 ;RESET POWER FAIL VECTOR MOV #1000,%6 MOV #-300.,WORK ;SET UP TWENTY SECOND TIMER XTIMCNT: RESET INC WORK ;+1 TIMER BNE XTIMCNT ;TWO SECONDS NOT UP GO WAIT BR PWRFL ;GO CHECK DISK ; ; ; ; ; ;ROUTINE TO WRITE THE COMPLETE DISK ;WITH 12RTEST TUR BIT BNE MTIN7 DEC MTDEL BNE MTIN6 MTIN2: MOV #11,R4 RTS PC MTDEL: .WORD 7000 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@#MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 S NUMBERS TSKDEF = 10 ; DEFAULT OR BATCH TASK NUMBER ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFINIT = 36 BFENTR = 37 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS EXIT = 4 ;EMT FOR CALL TO MONITOR EXIT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII ASCBINT CLR @#22 ; SET EMT TRAP VECTOR MOV #EMTRP,@#30 ; TTY VECTOR MOV #340,@#32 MOV #DISK,@#34 ; DISK CALLING VECTOR MOV #340,@#36 ; SET UP INTERRUPT VECTORS FOR D.D.C. DISK MOV #130,R0 MOV #132,R1 2$: MOV #DKINT,(R0) ; INTERRUPT ROUTINE MOV #200,(R1) ; PSR ADD R2,R0 ADD R2,R1 CMP #170,R0 ; DONE BNE 2$ ;U5252 PATTERN ;WRITE CHECK AND REPORT ERRORS IF THEY ;OCCUR ;REPORT "OK" AT COMPLETION POWFAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV (6),PASSC MOV #1000,%6 MOV #20,PATNU ;SET UP PATTERN CLR DMA CLR TRACK MOV #2000,SWRDCT ;SETUP WORD COUNT MOV SWRDCT,WRDCT JSR %5,PASEL ;GENERATE DATA BUFFER MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #POWFAL,HRDER WRDNW: WRITE +100 BIT #BIT9,@SR ;CHECK ON HOW TO WAIT BNE .+6 IOT ;BACKGROUND TEST BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK +V ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 W = 17 DISCIO = 23 ;EMT FOR DISC I/O ROUTINE CREAD = 24 ;EMT FOR CARD READER LPRNTR = 25 ;EMT FOR LINE PRINTER CKPT = 27 NOCKPT = 30 ;EMT FOR NO CHECKPOINT ROUTINE GETIME = 31 ;EMT FOR GET TIME GEDATE = 32 ;EMT FOR GET DATE R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = X NO ; SET UP START ADDRESS MOV #167,@#200 ; JMP INSTRUCTION MOV #START,@#202 ; SET UP JUMP INSTRUCTIONS MOV #600,R0 MOV #167,(R0)+ ; JMP MOV #ADT2,(R0)+ ; EXTRANEOUS DATA ALTERATION TEST MOV #167,(R0)+ MOV #ADT3,(R0)+ ; SECTOR ADDRESSING TEST MOV #167,(R0)+ MOV #ADT4,(R0)+ ; TRACK ADDRESSING TEST MOV #167,(R0)+ MOV #ADT5,(R0)+ ;Y100 BIT #BIT9,@SR ; BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR WRDNW ;WRITE NEW BUFFER EMT +1 OK JMP @PASSC ;ROUTINE TO ALLOW THE OPERATOR TO SET BITS ;IN THE I/O REGISTERS VIA THE SWITCH REGISTER ; ;WORD COUNT REGISTER SELWC: MOV @SR,@WC ;MOV SR INTO WORD COUNT REG BR SELWC ; ;CURRENT ADDRESS REGISTER SELCMA: MOV @SR,@CMA ;MOV SR INTO CURRENT ADDR REG BR SELCMA ; ;DISK ADDRESS REGISTER SELDAR: MOV @SR,@DAR ;MOV SR INTO DISZ .ENDC ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT NEG R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) [51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE ; TASK HEADER FOR TSKNTR TSKHD: .WORD 1 ; THREAD .WORD 64. ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE PRIBKG ; PRIORITY .WORD TSKNTR ; ENTRY POINT .WORD 0,0 ; MAX TIME / TIMER .WORD 200 ; \ LOOK AHEAD REGISTER TEST MOV #167,(R0)+ MOV #SPIRAL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR READ MOV #167,(R0)+ MOV #XSPIRL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR WRITE MOV #167,(R0)+ MOV #RANEX,(R0)+ ; DATA PATTERN TEST (WITH OPTIONAL BACKGROUND) CLR R0 ; SET UP JSR PC,SETREG ; REGISTERS HALT START: RESET ;CLEAR THE WORLD MOV #1000,%6 ;SET UP STACK MOV ]K ADDR REG BR SELDAR ; ;DISK ADDRESS EXT AND ERROR REGISTER SELDAE: MOV @SR,@DAE ;MOV SR INTO DISK ADDR EXT REG BR SELDAE ; ;DATA BUFFER REGISTER SELDBR: MOV @SR,@DBR ; MOV SR INTO DATA BUFFER BR SELDBR ; ; ;LOOK AHEAD REGISTER MOVLK: MOV @ADS,%0 ;MOVE LOOK AHEAD RESET RESET BR MOVLK ;INTO REGISTER 0 ; ; ;DISK CONTROL STATUS REGISTER SELDCS: MOV #340,@CSR ;LOCK UP INTERRUPTS MOV #177777,@WC ;SET WORD COUNT -1 WORD MOV #OUTBUF,@CMA ;SET UP CURRENT ADDRESS MOV @SR,@DCS ;MO^ MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM_STACK SIZE .WORD $OVTYP ; CUP STATUS .WORD 0,0 ; STACK POINTER / ARG .BYTE 6 ; SET READ AND WRITE ACCESS .BYTE TSKND-TSKBG/100 ; TPDR 0 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR 3-5 .WORD 0,0 ; TPDR 6-7 .WORD TSKBG,0,0 ; TPAR O-2 .WORD 0,0,0 ; TPAR 3-5 .WORD 0,0 ; TPAR 6-7 . = . + 14 .CSECT `#340,@CSR ;LOCK UP INTERRUPT LEVELS CLR FLAG ;CLEAR PROGRAM FLAG CLR TRACK ;CLEAR TRACK REGISTERS CLR DMA ;CLEAR DAR REGISTERS CLR PATNU ;CLEAR PATTER COUNT MOV #1000,SWRDCT ;SET UP STANDARD WORD COUNT MOV SWRDCT,WRDCT TST @SR BMI CONM ;OPERATE UNDER PROGRAM CONTROL BIS #70000,FLAG JMP ADTST ;ENTER OPERATOR CONVERSATION MODE CONM: EMT +1 ;ASK ABOUT DATA TEST ONLY CON1 JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BNE 2$ ; BRANCH aV SR INTO CONTROL REG BIT #BIT0,@DCS ;IS FUNCTION BITS SET BEQ SELDCS ;FUNCTION BITS NOT SET DKBUSY: TSTB @DCS ;TEST FOR DISK NOT READY BPL DKBUSY ;DISK STILL READY BR SELDCS ;DISK NOT BUSY SELECT NEW CR ; ; ; ; ; ; ; ; ;THIS ROUTINE ENABLES THE OPERATOR TO SELECT A TRACK STATICLY ;THE ROUTINE DOES A ONE WORD READ TO SELECT THE TRACK ;THE OPERATOR MAY CHANGE THE SWITCH REGISTER AT ANY TIME ;SR6-0 EQUALS THE TRACK NUMBER ;SR9-7 EQUALS THE DISK NUMBER ; STAMP: BIS #BIT8,@DCS (R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END cTSKNTC TSKBG: .WORD 0 .BLKW 177 .ASCII / / FWASC: .WORD 0,0,0 ; TEMTORARY ASCII BUFFER .WORD 0 LWASC = . FWRAD: .WORD 0,0,0 ; TEMTORARY RAD50 BUFFER LWRAD = . DACRD: .WORD 80. ; NUMBER OF CHARACTERS TO READ .WORD 0 ; NUMBER ACTUALLY READ FWCRD: .BLKW 40. ; BUFFER LWCRD: .WORD 0 ; LAST WORD OF INPUT TABLE ; TSKNO: .WORD TSKDEF ; TASK NUMBER TSKAC: .BYTE 0 dIF NOT YES BIS #BIT10,FLAG BR 4$ 2$: CMP #67,TEXBUF ; TEST FOR NO BNE CONM ; TRY AGAIN IF NEITHER YES OR NO 4$: EMT +1 CON2 ;ASK ABOUT MULTI DISK MODE JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BEQ 3$ CMP #NO,TEXBUF ; NO BEQ DATTES ; DO NOT ENTER STATIC TEST BR 4$ 3$: BIS #BIT11,FLAG ;SET FLAG TO ENTER STATIC TEST DSKDR: EMT +1 CON3 JSR %7eMOV @SR,WORK1 ;FETCH SR MOV WORK1,WORK BIC #176000,WORK ;MASK THE TRACK AND DISK NO. ROR WORK ROR WORK ROR WORK ROR WORK ROR WORK MOV WORK,@DAE ;DISK EXT. ADDR. REG. LOADED MOV @SR,WORK SWAB WORK ROL WORK ROL WORK ROL WORK BIC #3777,WORK MOV WORK,@DAR ;DISK ADDRESS REG LOADED MOV #INBUF,@CMA ;LOAD CURRENT ADDRESS MOV #177777,@WC ;LOAD WORD COUNT BIS #5,@DCS ;GO AND READ CTBUSY: TSTB @DCS ;TEST FOR CONTROL NOT READY BPL CTBUSY ;WAIT FOR CONTROL NOT READY SRCHG: CMfR2 ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NO WRITE RING CLR R4 ;CLEAR ERROR FLAG MOV NWORD(R0),@#MTWORD ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE COMMAND BR MWRI3 MWRI2: BIS #WEXG,R3 g ; TASK ACCESS STATUS HPRIR: .BYTE 0 ; PRIORITY MAXTM: .WORD 0 ; MAXIMUM TIME DEVPG: .WORD 0 ; DEVICE PAGE FLAG ; ; CARD READER LIST CSIOB: IOCBM 2,2,0,0,3,DACRD TYIOB: IOCBM 0,2,0,0,0,TYMES TYMES: .WORD 14,0 .ASCII /TSKNTR MSG/ TYNUM: .BYTE 40,40 ; SET ERROR NUMBER CODE .BOUND BFBLK1: .WORD 0 ; STATUS CODE .WORD 0 ; ID OF ROS FILE BFNAM: .WORD 0,0 h,NOCHA SUB #1,TEXBUF CMP #10,TEXBUF BLOS DSKDR MOV TEXBUF,DSKNOR ROL DSKNOR ROL DSKNOR ; DSKNOR CONTAINS NUMBER OF DISKS - 1 TIMES 4 BR ASKWC DATTES: EMT +1 CON4 ;ASK UNIT NUMBER JSR %7,NOCHA ;WAIT FOR NO. CMP #10,TEXBUF ;IS NO = O>10 BLOS DATTES ;NO CLC ROL TEXBUF ROL TEXBUF ; PLACE DISK NUMBER IN FLAG BIS TEXBUF,FLAG ASKWC: EMT +1 CON5 ;ASK ABOUT OPTIONAL WORD COUNT JSR %7,ALPHA ;WAIT FOR ANSWER CMP #153,TEXBUF BEQ WCCON ; BR IFiP WORK1,@SR BNE STAMP ;SR HAS CHANGED BR SRCHG ;SR HAS NOT CHANGED ; ; ; ; ; ; ; ;ROUTINE TO REPORT ERROR COUNT AND CONTENTS OF ONE REGISTER ; STAER: JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK ;DATA TO BE CONVERTED MES10 ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII ERCOUNT ;ERROR COUNT TO BE CONVERTED HED5 ;ADDRESS OF MESSAGE 3 EMT +0 ;REPORT MESSAGE HED5A HED5 MES10 -1 RTS %5 ;EXIT ROUTINE ; ;ROUTINE TO REPORT ERROR COUNT AND THE CONTENj ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRWR5 MRWR1: MOV @#MTSTAT,R2 ASH #4,R2 ;PALk ; ELEMENT NAME BFSTAT: .BYTE 0 BFTYPE: .BYTE 1 ; ELEMENT TYPE BFSECT: .WORD 0 ; RELATIVE START SECTOR BFSIZE: .WORD 0 ; LENGTH IN SECTORS .BOUND TXTLST: .WORD 1 .BYTE 1,2 ; DISC / SUSPEND .WORD 0 ; EXIT .BYTE 0,3 ; ERROR / LEVEL TXTERR: .WORD 0,0 ; ERROR WORD / RESERVED .WORD TXTHED ; BUFFER HEADER ADDRESS .WORD l YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPDAR ; ASK ABOUT OPTIONAL DAR BR ASKWC ; ASK AGAIN WCCON: EMT +1 CON6 ;ASK LENGTH OF WC BIC #3,TEXBUF ; MAKE A MULTIPLE OF 4 TST TEXBUF BEQ WCCON CMP #1001,TEXBUF ;IS WORD COUNT>1000 BLOS WCCON ;YES ASK FOR COUNT AGAIN MOV TEXBUF,SWRDCT ;OPERATING WORD COUNT MOV SWRDCT,WRDCT ; OPTIONAL SECTOR ADDRESS **************** OPDAR: EMT +1 CON7 ;ASK ABOUT OPTIOmTS OF TWO REGISTERS ; ; ; STAER1: JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK ;DATA TO BE CONVERTED MES10 ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK1 ;DATA TO BE CONVERT MES10A ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII ERCOUNT ;ERROR COUNT TO BE CONVERTED HED5 ;ADDRESS OF MESSAGE 3 EMT +0 ;REPORT MESSAGE HED5A HED5 MES10 MES10A -1 RTS %5 ;EXIT ROUTINE ; ; ;ROUTINE TO DECODE EMT CALLS ;EMT+1=TYPE ONE LINE OF TEXT nCE ERROR BIT IN SIGN BIT BMI MRWR2 ;BRANCH IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST MOV NWORD(R0),COUNT(R0) ;SAVE COUNT SUB @#MTWORD,COUNT(R0) MOV @#MTSTAT,STATUS(R0) ;SAVE STATUS BR MRWR3 ; ERROR ON LAST WRITE MRWR2: MOV #11,R4 DECB RES1(R0) ;DECREMENT REPEAT COUNT BEQ MRWR3 JSR PC,MTINIT ;INITIALIZE FOR BACK SPACE COMMAND BPL MRWRo 0,0 ; TXTHED: .WORD $BCHID ; FILE I D FOR BATCH FILE .BYTE 0 ; RELATIVE SECTOR TXTR.W: .BYTE 0 .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ OR WRITE TXTCNT: .WORD 40 ; NUMBER OF WORDS TO TRANSFER TXTBK1: .BLKW 40 ; .BOUND DFLIST: .WORD 1 ; "DEFINE FILE" LIST .BYTE 0,0 ; ERROR , ERRTSK .WORD 0 ; IFD .WORD 0 pNAL DAR JSR %7,NOCHA CMP #100,TEXBUF ; 77 MAX SECTOR NUMBER BLOS OPDAR MOV TEXBUF, DMA ;TEMP DAR REGISTER OPPAT: EMT +1 CON8 ;ASK ABOUT DATA PATTERNS JSR %7,NOCHA CMP #23,TEXBUF ;TEST FOR CORRECT NO BLOS OPPAT ;ASK AGAIN CMP #22,TEXBUF BEQ OPWRT ;DATA PATTERN UNDER PROGRAM CONTROL BIS #BIT15,FLAG ;SET PROGRAM FLAG MOV TEXBUF, PATNU ;OPERATOR WANTS TO SELECT DATA CLC ROL PATNU BIC #70000,FLAG ;CLEAR OP MODE BITS IN FLAG OPWRT: EMT +1 CON9 ;ASK ABOUT WRq ;EMT+0=TYPE A SERIES OF LINES EMTRP: MOV (6),%0 CMP #EMT+1,-(0) ;WAS THE CALL EMT+1 BNE TYPS ;NO! TYPE A SERIES OF LINES OF TEXT BR TYP ;YES TYPE ONE LINE OF TEXT ;SUBROUTINE TO OUTPUT ASCII MESSAGE ON TELETYPE PRINTER. TYP: MOV @%6,%0 ;GET ADDRESS THAT CONTAINS MESSAGE ADDRESS ADD #2,@%6 ;SET UP EXIT. MOV @%0,%0 ;ADDRESS OF MESSAGE TO R0. TYPA: MOVB (0)+,TYPDAT ;GET CHARACTER CMPB #100,TYPDAT ;CHECK FOR "@" CHARACTER BNE TYPC ;CRANCH IF NOT "@". RTI ;TERMINATOR CHAR. DONE. r3 ;BRANCH NONE ZERO MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG BIS #BCKR,R3 ; MOV R3,@#MTCOMM ;GIVE COMMAND MRWR5: INC R5 ;SET I/O NOT COMPLETE MRWR3: RTS PC ; .PAGE ; M A G N E T I C T A P E W R I T E F I L E M A R K ; MWEOF: JSR PC,MTINIT BPL MWEOF1 MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 ASR s ; FILE I.D. .WORD 0 ; FILE TYPE .WORD 0 ; # SECTORS IN FILE ; ROSLNK COMMAND LIST RKLCL: .RAD50 /ACC/ ; ACCESS STATUS .RAD50 /DEV/ ; DEVICE PAGE .RAD50 /END/ ; END .RAD50 /NAM/ ; NAME .RAD50 /PRI/ ; PRIORITY .RAD50 /TIM/ ; TIME LIMIT IN SECONDS .RAD50 /TSK/ ; TASK NUMBER .WORD 0 ; ; ROSLNK COMMtITE JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES BEQ $5 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPWCK ; GO ASK ABOUT WRITE CHECK BR OPWRT ; ASK AGAIN $5: BIS #BIT14,FLAG ;YES SET FLAG BIT OPWCK: EMT +1 CON10 ;ASK ABOUT WRITE CHECK JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $6 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPRDuEXIT. TYPC: CMPB #45,TYPDAT ;CHECK FOR "%". BEQ TYPF ;BRANCH IF "%". CMPB #42,TYPDAT ;NOT "%". CHECK FOR "#". BEQ TYPG ;BRANCH IF "#" JSR %7,TYPD ;TYPE CHAR IN TYPDAT BR TYPA TYPD: BIT #BIT14,@SR BNE TYEXIT MOVB TYPDAT,@TPB ;OUTPUT CHARACTER TO PRINTER TSTB @TPS ;WAIT FOR DONE FLAG. BPL .-4 TYEXIT: RTS %7 ;EXIT TYPF: MOVB #15,TYPDAT ;MOVE CARRIAGE RETURN CODE TO TYPDAT JSR %7,TYPD ;GO TYPE CHAR. TYPG: MOVB #12,TYPDAT ;MOVE LF CODE TO TYPDAT. JSR %7,TYPD ;GO TYPE CHAR. BvR2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING CLR R4 ;CLEAR ERROR FLAG BIS #WRFM,R3 ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLwAND PROCESSOR JUMP TABLE RLKJT: .WORD RLACC ; ACCESS STATUS .WORD RLDEV ; DEVICE PAGE .WORD RLEND ; END .WORD RLNAM ; NAME .WORD RLPRI ; PRIORITY .WORD RLTIM ; TIME LIMIT .WORD RLTSK ; TASK NUMBER ; ; TASK ACCESS STATUS MNEMONICS AND ASSOCIATED BIT SETTINGS ACCTB: .RAD50 /BCH/ ; BATCH TASK .WORD 1 .RAD50 /BCF/ ; FLOATING POINT BAx ; GO ASK ABOUT READ BR OPWCK ; ASK AGAIN $6: BIS #BIT13,FLAG ;YES SET FLAG BIT OPRD: EMT +1 CON11 ;ASK ABOUT READ JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $7 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ CHKFLG BR OPRD ; ASK AGAIN $7: BIS #BIT12,FLAG ;SET FLAG TO READ CHKFLG: BIT #70000,FLAG BEQ OPWRT ; GO BACK AND ASK AGAIN IF ALL yR TYPA TYPDAT: 0 ;SUBROUTINE TO OUTPUT A SERIES OF ASCII MESSAGES ON TELETYPE PRINTER TYPS: MOV @%6,%0 ;GET ADDRESS THAT CONTAINS MESSAGE ADDRESS ADD #2,@%6 ;UPDATE TO NEXT MESSAGE ADDRESS MOV @%0,TYPSB ;ADDRESS OF MESSAGE TO TYPSB CMP #-1,TYPSB ;CHECK FOR TERMINATOR BNE TYPSA ;BRANCH IF NOT TERMINATOR. RTI ;TERMINATOR. EXIT TYPSA: EMT +1 ;CALL ON TYP SUB TO TYPE MESSAGE TYPSB: 0 ;ADDRESS OF MESSAGE GOES HERE BR TYPS ;GO PROCESS NEXT MESSAGE ; ; ;OCTAL TO ASCII CONVERT ROUTINEzAG IS NOT SET JSR PC,MWEOF BR MRWEO3 MRWEO1: MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MRWEO2 MOV #11,R4 DECB RES1(R0) ;DECREMENT REPEAT COUNT BEQ MRWEO2 JSR PC,MTINIT ;INITIALIZE FOR BACK SPACE COMMAND BPL MRWEO2 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG BIS #BCKR,R3 ; COMMAND MOV R3,@{TCH TASK .WORD 11 .RAD50 /BKG/ ; BACKGROUND TASK .WORD 2 .RAD50 /BKF/ ; FLOATING POINT BACKGROUND TASK .WORD 12 .RAD50 /FCD/ ; FOREGROUND TASK .WORD 4 .RAD50 /FGF/ ; FLOATING POINT FOREGROUND TASK .WORD 14 .RAD50 /SYS/ ; SYSTEM TASK .WORD 20 .RAD50 /SYF/ ; FLOATING POINT SYSTEM TASK .WORD 30 .WORD 0 ; END FLAG ; BSZTAB: |NO ; ; ; ADTST: BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ EXMFLG ;BRANCH IF NO. EMT +1 MES11 MOV FLAG,ACNVX ROR ACNVX ROR ACNVX MOV ACNVX,R0 ; SET UP DEVICE PAGE REGISTERS JSR PC,SETREG JSR %5,CONV ACNVX MES12 1 EMT +1 MES12 EXMFLG: BIT #BIT10,FLAG ;TEST FOR DATA TEST ONLY BEQ ADT2 ; DO COMPLETE TEST JMP DATAT ;DO DATA TEST ONLY TSTBF: .REPT 40 .WORD -1,-1 .ENDR ;***ADDRE} ; ;ENTER ROUTINE AS FOLLOWS ;JSR%5,CONV ;ADDR#=ADDRESS OF NUMBER TO BE CONVERTED ;ADDR BYTE=LSB OF WHERE ASCII IS GOING ;ASCII#=THE NUMBER OF ASCII CHAR. TO BE CONVERTED ; ; CONV: MOV @(5)+,ACNVX ;VALUE OF # TO BE CONVERTED MOV (5)+,%1 ;ASCII ADDR MOV (5)+,%2 ;# OF ASCII CHAR ADD %2,%1 ACVN: MOV ACNVX,%3 BIC #177770,%3 ;ISOLATE LEAST SIGNIFICANT OCTAL# ADD #60,%3 ;SET UP ASCII# MOVB %3,-(1) ;STORE ASCII CHAR BIC #7,ACNVX ROR ACNVX ;ROTATE OCTAL# ROR ACNVX ROR ACNVX DE~#MTCOMM ;GIVE COMMAND MRWEO3: INC R5 ;SET I/O NOT COMPLETE MRWEO2: RTS PC ; .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: JSR PC,MTINIT BPL MREW1 BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTE;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE SIZES FOR EACH PRIORITY ;THE SIGN BIT IS SET IF THE PRIORITY IS DYNAMIC, I.E. NOT FIXED ;NOR TIME-SLICE. .WORD PRIP01&100000!$PS001 .WORD PRIP02&100000!$PS002 .WORD PRIP03&100000!$PS003 .WORD PRIP04&100000!$PS004 .WORD PRIP05&100000!$PS005 .WORD PRIP06&100000!$PS006 .WORD PRIP07&100000!$PS007 .WORD PRIP08&100000!$PS008 .WORD PRIP09&100€SS ADT2*** ; ;IN THIS TEST WRITE TRACK ZERO WITH ZERO'S ;THEN WRITE ALL ONES IN AN ADDRESS ;CHECK IF WRITING ONES IN THAT ADDRESS ALTERED ;ANY OTHER ADDRESS IN THE TRACK ;FOLLOW THIS PROCEDURE FOR ADDRESS (SECTORS) 1 TO 77 ; ; ADT2: MOV #1000,%6 ;SET UP STACK MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV PATNU,SAVE CLR PATNU CLR TRACK CLR DMA JSR %5,PASEL ;SET UP DATA BUFFER MOV SAVE,PATNU ; ZERO SECTORS 0 TO 37 RFADT: BIS #BIT�C %2 ;-1 FROM ASCII CHAR COUNT BNE ACVN RTS %5 ;EXIT # CONVERTED ACNVX: 0 ;WORK REGISTER ; ;ROUTINE TO HANDLE KEYBOARD CONVERSATION ;ROUTINE ACCEPTS NUM. OR ALPHA CHARACTERS ; NOCHA: MOV #40,TSTCH ;SET UP FOR NUM. CHAR. BR TYST ALPHA: MOV #100,TSTCH ;SET UP FOR ALPHA CHAR TYST: MOV #340,@CSR ;LOCK UP INTERRUPTS CLR TEXBUF ;CLEAR TEXT BUFFER REG TSTFLG: TSTB @TKS ;CHECK FOR FLAG BPL TSTFLG ; MOV @TKB,@TPB ;CHARACTER IN BUFFER TSTB @TPS ;ECHO CHARACTER BPL .-4 CMP #377,@TK‚RED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DECREƒ000!$PS009 .WORD PRIP10&100000!$PS010 .WORD PRIP11&100000!$PS011 .WORD PRIP12&100000!$PS012 .WORD PRIP13&100000!$PS013 .WORD PRIP14&100000!$PS014 .WORD PRIP15&100000!$PS015 .WORD PRIP16&100000!$PS016 .PAGE TSKNTR: ; TASK ENTER MOV #LWCRD,R1 ; SET CHARACTER POINTER SO A CARD WILL BE READ RLKGC: JSR PC,GWORD ; GET NEXT COMMAND MOV #FWASC,-(SP) ; ASCII BUFFER„8,@DCS WRITE 3$: TSTB @DCS ; TEST FOR READY BPL 3$ TST @DCS ;TEST FOR ERROR BPL RFADTY MOV #1,ERCOUNT ;ERROR OCCURRED MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV @DAR,WORK DEC WORK ER1: JSR %5,STAER1 ;REPORT ERROR OCURRED ;****WRD1=CONTROL STATUS REG. AT THE THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR RFADT ;LOOP ON ERROR RFADTY: MOV #40,DMA ; ZERO SECTORS 40 TO 77 RFADTX: BIS #BIT8,@DCS ;CLE…B ;CHECK FOR RUB-OUT BNE CKCH ;EXIT IF NOT RUB-OUT EMT +1 MES8 ;REPORT RUB-OUT ACKNOWLEDGED BIC #7,TEXBUF ROR TEXBUF ROR TEXBUF ROR TEXBUF BR TSTFLG ;GO WAIT FOR NEW CHAR. CKCH: CMP #215,@TKB ;CHECK FOR CARRIAGE RETURN BNE .+4 RTS %7 ;EXIT DELIMITER TYPED BIT TSTCH,@TKB BNE CHOK EMT +1 ;REPORT QUESTION MARK MES7 BR TSTFLG ;WAIT FOR CORRECT CHAR. CHOK: MOV @TKB,WORK BIC #177770,WORK CLC ROL TEXBUF CLC ROL TEXBUF CLC ROL TEXBUF ADD WORK,TEXBUF ;ADD CHAR†MENT (N) AND SPACE FORWARD DEC COUNT(R0) INC NWORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DEC NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) ‡ ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,R2 MOV #RKLCL,R4 ; SET POINTER TO COMMAND LIST RLKA1: TST (R4) ; AT END OF LIST BNE RLKA2 ;YES, BRANCH MOV #61,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLKA2: CMP (R4)+,R2 ;NO, TEST COMMAND BNE RLKA1 ; BRANCH IF NOT A COMMAND SUB ˆAR THE DISK WRITE $4: TSTB @DCS BPL $4 TST @DCS ;TEST FOR ERROR BPL RFRC MOV @DAR,WORK DEC WORK MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV #2,ERCOUNT ;SETUP ERROR COUNT ER2: JSR %5,STAER1 ;REPORT DISK ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. REG AT THE TIME OF THE ERROR **** BR RFADTX ;LOOP ON ERROR RFRC: CLR SAV1 RFRD: CLR SAVE WONWD: MOV #TSTBF,BUF MOV #100,WRDCT MOV S‰ACTER BR TSTFLG ;WAIT FOR NEW CHARACTER TEXBUF: 0 TSTCH: 0 ; ; THIS ROUTINE SETS UP THE D D C DEVICE PAGE REGISTERS ; USAGE; PLACE LOGICAL DISK NUMBER IN R0 AND JSR PC,SETREG ; SETREG: BIC #177770,R0 ; DEV NUMBER 0 THRU 7 ASH #4,R0 ; MULT BY 20 ADD #165300,R0 MOV #10,R1 ; NUMBER OF REGISTERS MOV #DCS,R2 ; FIRST REGISTER ADDRESS 2$: MOV R0,(R2)+ TST (R0)+ SOB Š DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 ASL R1 BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE ‹ #RKLCL,R4 ; DETERMINE COMMAND INDEX SUB #2,R4 ; R4=R4-2 JMP @RLKJT(R4) ; JUMP TO COMMAND PROCESSOR RLKER: MOVB R3,TYNUM+1 ; SET ERROR CODE TO BE PRINTED MOV #TYIOB,-(SP) ; LIST ADDRESS EMT TTYOUT EMT EXIT .PAGE ; PROCESS TASK ACCESS STATUS RLACC: TST R3 ; EQUAL SIGN DELIMITER BNE RLAC1 JSR PC,GWORD ;GET TASK ACCESS STATUS ŒAV1,DMA BIS #BIT8,@DCS WRITE TSTB @DCS ;TEST FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL SUADB ;BRANCH IF NO CONTROL ERROR MOV @DCS,WORK1 MOV SAV1,WORK MOV #3,ERCOUNT ;SETUP ERROR COUNT ER3: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS AT THE TIME OF THE ERROR**** ;****WRD2=DISK ADDR. IN ERROR WHEN TRYING TO WRITE ALL ONES **** BR WONWD ;RE-WRITE WORD SUADB: MOV SAV1,R0 ; COMPUTE BUFFER ADDRESS OF -1 BLOCK ASH #6,R0 AD� R1,2$ RTS PC ; RETURN ; ;ERROR MESSAGE HEADERS ; HED1: .ASCII /%DATA ERR @/ ; HED2: .ASCII /%STATUS ERR @/ ; HED3: .ASCII /%EXTRA BKS @/ ; HED4: .ASCII /%DK ADDR ERR @/ ; HED5A: .ASCII /%@/ ; HED5: .ASCII / ERR CNT @/ ; HED6: .ASCII /%RANEX ERR @/ .PAGE ;MESSAGE TRAILERS ; MES1: .ASCII / DAR @/ ; MES1A: .ASCII / DAE @/ ; MES2: .ASCII / DCS @/ ; MES2A: .ASCII / HRD ERR@/ ; MES3: .ASCII / WRD CNT@/ ; MES4: .ASCIŽDEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(� CMP R3,#1 ; TEST FOR SEMI-COLON BEQ RLAC2 ; RLAC1: MOV #62,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLAC2: MOV #FWASC,-(SP) MOV #FWRAD,-(SP) EMT R50PAK MOV FWRAD,R2 ; PLACE ACCESS CODE IN R2 MOV #ACCTB-2,R4 ; SET POINTER TO TABLE - 2 RLAC3: CMP #30,(R4)+ ; TEST FOR END OF TABLE BEQ RLAC1 ; BRANCH IF AT�D #OUTBUF,R0 MOV R0,WORK4 ; SAVE FOR CLEAN UP MOV #100,R1 2$: MOV #-1,(R0)+ SOB R1,2$ WRCADT: BIS #BIT8,@DCS MOV #10000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SETUP CURRENT ADDR MOV SAVE,DMA ;SETUP DISK ADDRESS WRCHECK TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL CHKBUF ;BRANCH NO DISK ERROR MOV @DCS,WORK1 MOV SAV1,WORK DEC WORK MOV #4,ERCOUNT ;SET UP ERCOUNT ER4: JSR %5,STAER1‘I / WRD ADDR.@/ ; MES5: .ASCII / GD DATA @/ ; MES6: .ASCII / BD DATA @/ ; MES7: .ASCII /?@/ ; MES8: .ASCII '/@' ; MES10: .ASCII / WRD1 @/ ; MES10A: .ASCII / WRD2 @/ ; MES11: .ASCII /%UNIT NO.@/ ; MES12: .ASCII / @/ ; MES13: .ASCII / READ @/ ; TIMO: .ASCII /%CPU BKGRND TIMED OUT@/ ; OK: .ASCII /%OK!@/ ;CONVERSATION TEXT ; ; CON1: .ASCII /%DATA TEST ONLY? @/ ; CON2: .ASCII /%MULTI DK MODE?@/ ; CON3: .ASCII /%# OF DKS 1 TO 10 OCTAL?@/ ; CON4: ’R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; R4 = 0 AND (N) BIT SET IF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE C“ END OF TABLE CMP (R4)+,R2 ; COMPAIR INPUT COMMAND WITH TABLE ENTRY BNE RLAC3 ; TRY NEXT ENTRY IN TABLE MOVB (R4),TSKAC ; SAVE ACCESS CODE JMP RLKGC ; PROCESS NEXT COMMAND ; ; PROCESS DEVICE PAGE COMMAND RLDEV: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLDEV1 MOV #71,R3 ; SET ERROR CODE BR RLKER RLDEV1: INC DEVPG ; SET DEVICE PAGE FLAG” ;REPORT ERROR MOV @DAR,ACNVX ;SET UP DISK ADDR. FOR REPORT JSR %5,CONV ACNVX MES4 6 EMT +1 MES4 ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. IN ERROR DURING WRITE CHECK **** ;****WRD ADDR.=ADDR. WHICH CONTAINS ALL ONES **** BR WRCADT ; CHKBUF: MOV WORK4,R0 ; CLEAR -1 BLOCK IN BUFFER MOV #100,R1 3$: CLR (R0)+ SOB R1,3$ ZEROAD: CLR SAVE ; MOV SAV1,DMA ;SETUP DISK ADDRESS MO.ASCII /%EX. DK?@/ ; CON5: .ASCII /%OPT WRD CNT? @/ ; CON6: .ASCII /%LENGTH (1 TO 1000)?@/ ; CON7: .ASCII /%WRD ADDR?@/ ; CON8: .ASCII /%OPT. DATA PAT. #?@/ ; CON9: .ASCII /%WRITE?@/ ; CON10: .ASCII /%WRITE CHECK?@/ ; CON11: .ASCII /%READ?@/ ; END: .ASCII /%END@/ .EVEN ; .WORD 25252 OUTBUF: .BLKW 4000 ; INBUF: .BLKW 4000 .WORD 25252 .END BEGIN –ONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #12.,R3 ;LEST SHIFT 0&1 INTO 12&13 MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #1000,R3 ;SET INTERRUPT ENABLE BIT ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;LOAD WITH BYT— BR RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS END COMMAND RLEND: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLED2 RLED1: MOV #63,R3 ; SET ERROR CODE JMP RLKER ; BR TO ERROR ROUTINE RLED2: CMP TSKNO,TSKDEF ; IS THIS A BATCH TASK BEQ RLED3 ;******* CHANGE WHEN KEY SWITCH IS INSTALLED ********************** CMP @#SWR,#1 BEQ RLED3 CMP @#SW˜V #OUTBUF,BUF MOV #100,WRDCT ; SET UP WORD COUNT WRITE TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL INDADT MOV #5,ERCOUNT MOV @DCS,WORK1 MOV @DAR,WORK ER5: JSR %5,STAER1 ;****WRD1=CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR ZEROAD ;LOOP ON ERROR INDADT: CMP #77,SAV1 BEQ LP2ADT ;LAST ADDR. CHECKED INC SAV1 JMP RFRD ;CHECK NEXT ADDRESS LP2ADT: BIT #BIT11,@SR ;IS BIT 11™ 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 TYPE FOR OVERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI šE SIGN EXTENDED BGT MTIN2 ;BRANCH IF BIT 7 WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE ›R,#2 BNE RLED1 RLED3: MOV #BFBLK1,-(SP) EMT BFOPEN MOV BFSECT,TXTSEC ; SET TO READ IN TASK HEADER INFO CLRB TXTR.W ; SET READ FLAG JSR PC,TEXTIO MOV TSKNO,TXTBK1+2 ; MOVE TASK NUMBER MOV TSKAC,TXTBK1+4 ; MOVE PRIORITY AND TASK ACCESS STSATUS MOV HPRIR,R2 TSTB PPTAB+$ROSM(R2) ; IS THIS A TIME-SLICING PRIORITY BLE RLD04 ; NO TST œ SET IN SR BEQ ADT3 JMP ADT2 ;BIT 11 SET LOOP ON TEST .PAGE ;***** ADDRESS TEST ***** ; ;WRITE EACH UNIQUE ADDRESS ON ITSELF FOR TRACK 0 ;THEN READ IT BACK AND COMPARE FOR THE ;CORRECT DATA ; ; ADT3: CLR DMA ;CLEAR ACTIVE REG CLR TRACK CLR WORK CLR WORK1 MOV #1000,%6 ;SETUP STACK MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,%0 ;FILL BUFFER WITH COUNT INADB: MOV WORK,(0)+ INC WORK ;+1 COUNT � $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 = $FS005+$FS006+$FS007+$FS008+$FS009 .IFL 8192.-$ALOD1-$ALOD2 XXXXXXXž BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR @MTLAST CLC ROR @MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 Ÿ MAXTM ; YES EXECUTION TIME MUST BE SPECIFIED BLE RLKER RLD04: MOV MAXTM,TXTBK1+10 ; MOVE MAX TIME TST DEVPG BEQ RLED4 ; BR IF DEVICE PAGE NOT DESIRED MOV #102,R3 ; SET ERROR CODE TST TXTBK1+42 ; TEST TPDR 7 BNE RLKER ; BR IF IN USE MOV #77406,TXTBK1+42 ; SET TPDR7 MOV #7600,TXTBK1+62 ; SET TPAR 7 RLED4: INCB TXTR.W  CMP #OUTBUF+10000,R0 BNE INADB ;SET UP NEXT WORD MOV WORK,SAVE WRABF: BIS #BIT8,@DCS ;CLEAR THE DISK WORLD WRITE ;WRITE TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;CONTROL READY TST @DCS ;IS THERE AN ERROR BPL TFBL ;NO ERROR MOV @DCS,WORK ;FETCH CONTENTS OF CONTROL REG MOV #6,ERCOUNT ;SET UP ERROR COUNT ER6: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR WRABF ;RE-WRITE DATA TFBL: MOV SAVE,WORK ADD #4¡X ; 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 = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL ¢ MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END £ ; SET WRITE FLAG JSR PC,TEXTIO MOVB HPRIR,R2 ; LOAD PRIORITY ASL R2 ; GET WORD INDEX MOV BSZTAB-2(R2),R4 ; GET MAX ALLOWED # OF PAGES WITH DYNAMIC BIT MOV R4,R5 ; SAVE DYNAMIC BIT BIC #100000,R4 ; LEAVE ONLY # OF PAGES MOV #103,R3 ; SET ERROR CODE CMP TXTBK1+22,R4 ; PROGRAM SIZE :: MAX ALLOWED BGT RLKER ; ERROR BRANCH ¤0,DMA CMP #10000,WORK BNE INADB-4 CLR WORK CLR DMA CLR WORK1 RDTDN: BIS #BIT8,@DCS ;CLEAR THE DISK READ TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;YES THE CONTROL IS READY TST @DCS ;IS THERE AN ERROR BPL ADRCMP ;NO ERROR MOV #7,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTROL REG. ER7: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTDN ;RE-READ ADRCMP: MOV #OUTBUF,SAVE CMPNEX: CMP @SAVE,WORK1 ¥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 NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ;NO. § TST R5 ; IS THIS PRIORITY "DYNAMIC"? BMI RLED5 MOV R4,TXTBK1+22 ; REPLACE WITH MAX SIZE FOR FIXED PARTITION RLED5: MOV FILID,R5 ; LOAD FILE I.D. MOV #104,R3 ; LOAD ERROR CODE FOR ILLEGAL FILE I.D. CMP R5,#NDISCS+$SYSFL ; MUST BE GREATER THAN SYSTEM RESERVED BLE RLKER1 ; ERROR EXIT CMP R5,#MAXID1 ; I.S. MUST BE <= MAXIMUM ALLOWED BGT RLKER1 ; ¨;IS THE ADDRESS CORRECT BEQ INCCMP ;COMPARE NEXT WORD MOV @SAVE,WORK ;FETCH LOAD ADDRESS MOV #10,ERCOUNT ;SET UP ERROR COUNT ER10: JSR %5,STAER1 ;REPORT COMPARISON ERROR ;****WRD1=DISK ADDR. WANTED **** ;****WRD2=DISK ADDR. RECEIVED **** INCCMP: ADD #2,SAVE INC WORK1 CMP #OUTBUF+10000,SAVE ; IS IT THE LAST ADDRESS IN BUF BNE CMPNEX ;COMPARE NEXT WORD CMP #10000,WORK1 ; IS IT THE LAST ADDRESS OF TRACK BEQ LPADT3 ADD #4000,DMA ; SET UP©OF TELETYPES ;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 ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ªö5?—-rÒ‡—-²Þ‚öU>¿,+·&+÷ $+€·•0Zއ¹~Ò¥úÖ¥ÿÿ¦ê¥) ERROR XXXXX SXXXXX SXXXXX SXXXXX SXXXXX ô¥û¥¦ ¦¦·øÿŽw ï¦Åêÿ w þî…æ´YV~J¦÷à®YÍ €ÿw|ÿ· zÿ·˜Yw â� ø7 ®ÿÅ\ÿ+wVÿ÷Ö¥Pÿ·rYĦf&÷ €ïC÷ >Ì ú÷• JÿÅå ÍæÜ¥÷ .÷ fÿÓ‡˜~¦· ^ÿæ4Y÷à.YÒ÷ÿÿÿ·"Y‡À`â�ÊÅøÊÕ0ƒ ÃE€ƒ ƒ À ô‡ÿÿÿÿ§§§§.§Þ~:§¬«ERROR EXIT MOV R5,DFLIST+6 ; LOAD FILE I.D. INTO LIST ; ******* ************ MOV TXTBK1+ ,R5 ; GET REQUESTED FILE TYPE ; ******* ************ BIC #177600,R5 ; SUPPRESS IFD REQUEST BIT CMP R5,#$OVTYP ; IS IT LEGAL FOR AN OVERLAY ? BNE RLKER1 ; ERROR EXIT ; READY TO "DEFINE" ROS FILE MOVB #5,DFLIST+10 ;LOAD FILE TYPE INTO LIST MOV TX¬ FOR NEXT BUFFER BR RDTDN ;GO READ BUFFER LPADT3: BIT #BIT11,@SR ;LOOP ON TEST? BNE ADT3 ;YES BIT 11 SET IN SR .PAGE ;RF11 TRACK SELECTION TEST ; ;WRITE THE FIRST AND LAST ADDRESS OF EACH TRACK ;WITH THE OCTAL VALUE OF EACH TRACK ;BITS 6 THRU 11 EQUAL TRACK NUMBER ;BITS 0 THRU 5 EQUAL 0 IN FIRST SECTOR OF EACH TRACK ;BITS 0 THRU 5 EQUAL 77 IN LAST SECTOR OF EACH TRACK ; ;AFTER WRITING THE DISK READ EACH ADDRESS ;AND COMPARE DATA FOR THE CORRECT VALUE ; ADT4: CLR DMA ;CLEA­ ;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 ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INP®ó~²§(~*¨w ¨ì×þÿ&  „Ý¥~¢¨6 Ä d7¡Œþa‚ß•àþÿô‹å§ ­å§Zô‹¨VöÿÿÄ <§„ — Jô•å§ß�þÿ���=¨W Á•¡?†r� ß•àþÿÊ 2Á ¶~©¹ §¯TBK1+22,DFLIST+12 ; # OF SECTOR TO DEFINE MOV #DFLIST,-(SP) EMT NOCKPT ; FORCE TO STAY IN CORE DURING I/O EMT DELETE ; FIRST TRY TO DELETE FILE EMT CKPT MOVB DFLIST+2,R2 ; ERROR BYTE BEQ RLD24 ; O.K. MOV #105,R3 CMP #11,R2 ; THIS ERROR IS O.K. BNE RLKER1 ; ERROR EXIT RLD24: MOV #DFLIST,-(SP) EMT NOCKPT EMT °R WORK REGISTERS CLR TRACK CLR OUTBUF CLR OUTBUF+2 CLR OUTBUF+4 CLR OUTBUF+6 MOV #1000,%6 ;SETUP STACK BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #OUTBUF,BUF ;SET CURRENT ADDRESS MOV #4,WRDCT ; SET WORD COUNT INSWT: WRITE ;GO WRITE TSTB @DCS ;IS READY SET BPL .-4 ;YES! WAIT FOR NOT BUSY TST @DCS ;TEST FOR ERROR BPL TSTTK ;NO ERROR GO ON MOV #11,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTENTS OF DCS REG ER11: ±UT/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 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT ²± §ô•å§4Ѝ2 ² Ö ß�þÿw ì÷ Îíö ¶Æe‡öþÿ¶Æeæ÷ DwŽ Ž Ž Ž Ž Ž Ž 6 ¶Øæ&f¦l~’©÷ 倃•À Ìé禶¶æ—þÿß•àþÿ÷ Dý[7 >ý·•6æ¦f�vÂ$ý ‚<§²� 6 ²€6 „ÜÕߕàþÿÆüü~ ª&ÀÒ 7 fÀ À 2 7 ¼ ÊÁ ô•å§¡‡ô•å§ß�þÿ&÷ ç‡ô•å§€œ À Ä <§<§0<§ §0<§§ß�þÿ‡Ÿ•þÿŽŽŽ‡_~‚ªæ—þÿ& ÷ ÿwîß•àþÿÀhü ÜÈ1Šå§7 Tü7 0 7 \ì0 ÆHüW  ‡ñ‹¨ ±Šå§Šþÿf÷ ¨åw¢ñŠå§ûw Zê €Ýp7 Jü³ DEFINE ; DEFINE FILE EMT CKPT ; ALLOW SWAPPING TSTB DFLIST+2 ; ERROR BNE RLKER1 ; ERROR EXIT ; NOW TRANSFER BATCH ELEMENT TO THE ROS FILE JSR R5,REGSAV ; NEED TABLE POINTERS BELOW MOV BFSECT,R0 ; INIT RELATIVE READ SECTOR # CLR R1 ; INIT RELATIVE WRITE SECTOR MOV DFLIST+6,R2 ; WRITE FILE I.D. RLD30: CLRB TXTR.W ; SET TO READ ´JSR %5,STAER ;REPORT ERROR OCCURRED ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR INSWT ;GO RE-WRITE TSTTK: CMP #7777,OUTBUF ; TEST FOR LAST ADDRESS BEQ INSRD ;GO READ THE DATA BIT #77,OUTBUF ; IS IT SECTOR NUMBER ZERO BNE MVNEM ;NO BIS #77,OUTBUF ; YES, SET UP FOR LAST SECTOR IN TRACK BIS #77,OUTBUF+2 BIS #77,OUTBUF+4 BIS #77,OUTBUF+6 ADD #77,DMA BR INSWT ;GO WRITE MVNEM:µ = 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 (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ¶m‚æ—þÿß•X~úªàþÿœå§Á y«Ê«Ê«Ê«Ê«Ê«"«:«p«p«Ê«Ê«Ê«p«Ÿ“þÿ&÷ Àß•àþÿÖ J"2 �<§w ¼ûA7 ¶û7 ’ 7 ¾ë�Áeƨûfffffffff  ~r«‡ð‹¨ð•ýÿå§ð•å§Ÿ“þÿ&&÷ Jæ€ß•àþÿð•å§2 Â�â«W"Âåø1f÷ `úŸ•þÿw z鎇cÖ«öÕ€„~ê«6Šw Léæ—þÿ €j€Á‘ 7 0ûc‚À <§€ ß•àþÿœå§Âå  S / -Âå2Lð•å§Ÿ“þÿBœ  ƒ§AC ÄÃû;ß•àþÿÓ~b¬W"5ò § r§ ò§ §²` §L2 §ÉÀ � †1 ð‹¨ð•å§Ÿ“þÿ&&÷ ,å€ · MOV R0,TXTSEC ; SET UP READ SECTOR MOV #$BCHID,TXTHED ; SET UP READ I.D. JSR PC,TEXTIO ; GO READ OR WRITE WITH "TXTLST" MOV R1,TXTSEC ; SET UP WRITE SECTOR MOV R2,TXTHED ; WRITE FILE I.D. INCB TXTR.W ; SET TO WRITE JSR PC,TEXTIO ; GO READ OR WRITE WITH "TXTLST INC R0 ; INC SECTOR NUMBER INC R1 ; INC SECTOR NUMBER ¸ INC OUTBUF ;INC. TO NEXT TRACK INC OUTBUF+2 INC OUTBUF+4 INC OUTBUF+6 CLR DMA INC TRACK ;INC. DAE REG. BR INSWT ;GO WRITE ; ;READ THE FIRST AND LAST ADDRESS OF EACH TRACK ;AND VERIFY IT HAS THE CORRECT DATA INSRD: CLR DMA ;CLEAR WORK REG. CLR TRACK CLR SAVE BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #INBUF,BUF ;SET UP CURRENT ADDR MOV #4,WRDCT ; SET UP WORD COUNT RDTKS: READ ;READ DATA TSTB @DCS ;CHECK¹ ;TYPED IN A LINE .PAGE ;*********************************************************************** ;* ** ;* SEGMENT REGISTER ADDRESSES REQUIRED BY THE PROGRAMS WHEN ** ;* IMPLEMENTED ON AN 11/45 OR 11/25, EITHER WITH SEGMENTATION. ** ;* ** .IFNZ $KT11C ;* ;* K E R N E L S E G M E N T R E G I S T E R S ;* $KPºß•àþÿ0Šå§Ÿ•þÿvw ~臅 … … õÅ %~Ú¬ð•þÿå§ðw Zè×þÿ&  „Ý=7¡Dú:‚ß•àþÿ­å§5ô•å§¡ ‡ß�þÿæ�&÷ x䂃• #Ä <§„ Ê �œ Á ¹ §± §´Šå§ß�þÿ¶w úç-~R­ö އö—þÿæ÷ FüwŽ Ž Ž 6 æŠþÿ7 ôÿ÷ xùn÷ ‚ékÄnùÄ  Ã÷ ØÿíÂ`ò §!÷—!âß•àþÿ÷ ¶ÿÜ�§¸~Ê­W Lƒw.ùr§² §òe§ § EÜW­å§7 ùŠþÿÕw‘þøµŠå§‚ ·�öø·øøÉñ @œÀEÿÀ @`ÀeB·°·Fÿ& fB ~B®·œ·2ÿF€ 6 vœ �‚ƒ„…þÀ–®ÂÃàƒ Ò»CMP R0,TRASEC ; HAVE WE PASSED LAST SECTOR ? BLT RLD30 ; MORE SECTORS TO GO MOV R1,BFSIZE ; # OF SECTORS USED UP IN LOAD MODULE ; NOW INITIALIZE ALL RELEVANT TASK AND PRIORITY TABLES JSR R5,REGPOP ; RESTORE TABLE POINTERS ASR R2 ; PRIORITY WAS SHIFTED ABOVE MOVB R2,TPRTY+$ROSM(R1) ; PRIORITY CLRB TSTAT+$ROSM(R1) ; TASK STATUS CLRB IOSTAT+$ROSM(R1); CLEAR IT'S I/O S¼ FOR READY BPL .-4 ;CONTROL NOT READY TST @DCS ;IS THERE AN ERROR BPL CMPDTK ;NO ERROR MOV #12,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTENTS OF DCS ER12: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTKS ;GO RE-READ CMPDTK: CMP SAVE,INBUF ;IS DATA CORRECT BEQ CMNETK ;YES SETUP FOR NEXT WORD MOV SAVE,WORK1 ;CORRECT ADDRESS MOV INBUF,WORK ;INCORRECT DATA MOV #13,ERCOUNT ;SET UP ERROR COUNT ER13: JSR %5,STAER½AR0 = 772340 ; $KPAR1 = 772342 ; $KPAR2 = 772344 ;KERNEL $KPAR3 = 772346 ; PAGE $KPAR4 = 772350 ; ADDRESS $KPAR5 = 772352 ; REGISTERS $KPAR6 = 772354 ; $KPAR7 = 772356 ; ; $KPDR0 = 772300 ; $KPDR1 = 772302 ; $KPDR2 = 772304 ;KERNEL $KPDR3 = 772306 ; PAGE¾— ú‡7 „À7d7l‡÷þÿv÷Eàÿp·j·d· ^÷ Pøþæ¯~º®Bø÷ "üÂô®—"¯—"& ¦’$Ò� øŠÒ.Ò(Ê ÷ 8÷wŠþZZß$¯ßà‡· ìÿß2¯ù}~2¯ß$¯Àf¯”vÿß‹tÿý€ùß‹tÿý€À“¯”vÿß‹tÿý€ùò THIS IS COLOSSUS. ROS IS DEAD. YOU MUST R E B O O T !æVP÷~ª¯àPP&×-&²‚€È ÷e?ð �6 °È €¶Èeø¬ÿÿôîð�÷¶ö‚ª÷•[¶üÿ÷ŠSû& Æå Û¦ö*~"°ÚO÷àÒOw å€È%ð•ÿÿ¿TATUS MOVB ; INIT # PAGES IN OVERLAY ASL R1 ; WORD INDEX MOV DFLIST+6,R0 ; INIT FILE I.D. TSTB DFLIST+10 ; WAS AN IFD REQUESTED BPL RLD25 ;NO LEAVE AS FILE I.D. MOV DFLIST+4,R0 ;YES REPLACE WITH IFD FOR CORE DIRECTORY BIS #100000,R0 ; FLAG AS AN IFD RLD25: MOV R0,IFD+$ROSM(R1); PUT ONE IN THE TABLE CLR HEADER+$ROSM(R1); SHOW TASK READY TOÀ1 ;REPORT SELECTION ERROR ;****WRD1=TRACK ADDR. WANTED **** ;****WRD2=TRACK ADDR. RECEIVED **** CMNETK: CMP #7777,SAVE ; IS IT THE LAST ADDRESS BEQ LPTSK ;END OF TEST BIT #77,SAVE ; IS IT ADDRESS ZERO OF THE TRACK BEQ ZRBIT ;NO! SETUP FOR LAST ADDR INC SAVE ;INC FOR TRACK NO. CLR DMA ; SET UP DAR INC TRACK ;INC TRACK BR RDTKS ;GO READ ZRBIT: BIS #77,SAVE ; SET UP FOR LAST SECTOR IN TRACK ADD #77,DMA BR RÁ $KPDR4 = 772310 ; DESCRIPTOR $KPDR5 = 772312 ; REGISTERS $KPDR6 = 772314 ; $KPDR7 = 772316 ; ;* ;* U S E R S E G M E N T R E G I S T E R S ;* $UPAR0 = 777640 ; $UPAR1 = 777642 ; $UPAR2 = 777644 ;USER $UPAR3 = 777646 ; PAGE $UPAR4 = 777650 ; ADDRESS $UPAR5 = 777652 ; REGISTERS $UPAR6 = 77765ÂÈ%ÿÿœÁEðÿÁ Cw ·  Áe²BA  ûJ³&²É6 w Ìä0œF²W²€ ð‹F²"$·ŠÐôÇ~š°‰À:÷å2ȬÿÿôœÁEðÿW íÁ 9&²1&² æ7*O ðŠW²ÔÀ À À fÁ²`÷àO7�vBABW¬ÿùñŠöCEqœ8~±J°&²É…7ØNœó‹æœ& ‹€÷ ¤û & Â5@Î& ÷ B÷Ö ÂŒ€Ó ÂŒ€ûÜÓ$ÂŒ€&&fû …„€A¶÷“è÷ æ«ÁB~б²`BA¥W¬ÿúJ°&²É÷ Àñ—À²Á÷à@NÐ Á üÿ ÷Š˜wúþwüäܱ�~²Ã RUN ASR R1 ; RETURN TO BYTE INDEX CMP R1,@#TASKS+$ROSM; TASKS = MAX(TASKS,TASKNO) BLE RLD26 MOV R1,@#TASKS+$ROSM RLD26: MOV #$TKFLS+$ROSM,-(SP) ; MUST WRITE OUT CURRENT VERSION EMT SDRITE EMT EXIT ; RLKER1: JMP RLKER ; ERROR EXIT .PAGE ; PROCESS NAME COMMAND RLNAM: TST R3 ; EQUAL SIGN DELIMITER BNE RLNAM1 ; NO BRANCH ÄDTKS ;GO READ LAST ADDR OF TK LPTSK: BIT #BIT11,@SR ;IS BIT 11 SET IN SR BEQ ADT5 ; YES, LOOP ON TEST JMP ADT4 .PAGE ;RF11 LOOK AHEAD TEST ;WRITE ONE WORD UPON RECEIPT OF ;NOT READY READ THE LOOK AHEAD ;REGISTER IT SHOULD CONTAIN THE ;ADDRESS +1 ; ADT5: CLR DMA ;CLEAR REGISTERS CLR TRACK CLR SAVE MOV #1000,%6 ;SETUP STACK MOV #4,WRDCT ; SET UP FOR MINIMUM X-FER MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS WRADT5: MOV ADS,R0 Å4 ; $UPAR7 = 777656 ; ; $UPDR0 = 777600 ; $UPDR1 = 777602 ; $UPDR2 = 777604 ;USER $UPDR3 = 777606 ; PAGE $UPDR4 = 777610 ; DESCRIPTOR $UPDR5 = 777612 ; REGISTERS $UPDR6 = 777614 ; $UPDR7 = 777616 ; .ENDC .PAGE ;**************************************************************** INEG B D EN . 0 00 4 KWBL .: UFNB I ;0 00 4 KWBL .F:BUUT O ; ENEV . / D@EN/%I CIAS .D:EN ;/ ?@ADRE/%I CIAS .1:N1CO ;/ ?@CKHE CTERI%W /IISC.A: 10ON C; @/E?ITWR/%I CIAS .9:ON C; @/#?. AT PTADA. PT%O /IISC.A: N8CO ;/ ?@DRADD WR/%I CIAS .7:ON C; @/)?0010O T(1H GTEN%L /IISC.A: N6CO ;/ @T?CND WRT OP/%I CIAS .5:ON C; @/K? DX.%E /IISC.A: N4CO ;/ ?@ALCT O10O T 1KS DOF# /%I CIAS .3:ON C; @/E?OD MDKI LTMU/%I CIAS .2:ON C; @/Ç JSR PC,GWORD ; GET NAME OF BFUP FILE CMP #1,R3 ; SEMI-COLON DELIMITER BEQ RLNAM2 ; YES BRANCH RLNAM1: MOV #64,R3 ; SET ERROR CODE JMP RLKER ; ERROR EXIT RLNAM2: MOV #FWASC,-(SP) ; ASCII BUFFER ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,BFNAM ; SAVE NAME MOV FWRAD+2,BFNAM+2 JMP RLKGC ; GO PROCEÈ ; PLACE ADDRESS OF LOOK AHEAD REG IN RO BIS #BIT8,@DCS ;CLEAR THE DISK WRITE ;WRITE 1$: MOV (%0),@#WORK ;FETCH LOOK AHEAD TSTB @DCS ; IS THE CONTROLLER BUSY BPL 1$ ;CONTROL STILL BUSY TST @DCS ;IS THERE AN ERROR BPL LPADT5 ;NO DISK ERRORS MOV #14,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH DCS FOR REPORT ER14: JSR %5,STAER ;REPROT CONTROL ERROR ;****WRD1=DISK CONTROL REG AT THE TIME OF THE ERROR **** BR WRADT5 ;LOOP ON ERROR LPADT5: MOV DMA,WORK1 ;IÉ****** ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;********************************************************? LYONT ES TTADA/%I CIAS .1:ON C; ;T EX TONTISAERNVCO ; / !@OK/%I CIAS .K: O; @/UT OEDIM TNDGRBKU CP/%I CIAS .O:IM T; @/D EA R/ I CIAS .3:S1ME ;/ @/ I CIAS .2:S1ME ;/ .@NOT NI%U /IISC.A: 11ES M; @/2 RD W /IISC.A: 0AS1ME ;/ @D1WR / I CIAS .0:S1ME ;' /@ 'IISC.A: S8ME ;/ ?@ /IISC.A: S7ME ;/ @TADAD B /IISC.A: S6ME ;/ @TADAD G /IISC.A: S5ME ;/ .@DRADD WR / I CIAS .4:ES M; @/NT CRD W /IISC.A: S3ME ;/ R@ERD HR / I CIAS .A:S2ME ;/ @CS D >þËSS NEXT COMMAND .PAGE ; PROCESS PRIORITY RLPRI: TST R3 ; EQUAL SIGN BEQ RLPR2 RLPR1: MOV #65,R3 ; SET ERROR CODE BR RTIM6 RLPR2: JSR PC,GWORD CMP #1,R3 ; TEST FOR SEMI-COLON BNE RLPR1 MOV #FWASC,-(SP) EMT ASCBIN MOV (SP)+,R2 ; R2 = BINARY NUMBER TST (SP)+ ; CLEAR STACK TST R2 BLT RLPR1 ÌS LOOK AHEAD CORRECT CMP WORK1,WORK BEQ INCADS ;LOOK AHEAD OK DEC WORK ;COMPARE FOR ADDRESS+1 CMP WORK1,WORK ; BEQ INCADS ;BRANCH IF EQUAL INC WORK MOV #15,ERCOUNT ER15: JSR %5,STAER1 ;REPORT LOOK AHEAD INCORRECT ;****WRD1=DISK ADDR. WANTED FROM LOOK AHEAD REG. **** ;****WRD2=DISK ADDR. RECEIVED FROM DISK LOOK AHEAD REG. **** BR WRADT5 ;LOOP ON ERROR INCADS: CMP #3777,DMA ;IS IT THE LAST ADDR. BEQ XLPADT5 ;LAST ADDRESS EXIT INC DMA ;+1 DMA BR WRADT5 ;CHECK NEXT ADDRESS XLÍ************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNAL EBCDIC CODE ; (029 CARD CODE) $RES = 1 /IISC.A: S2ME ;/ @AE D /IISC.A: 1AES M; @/R DA / I CIAS .1:ES M; RSLEAITRE AGSSME ; GEPA . / @RR EEXAN%R /IISC.A: D6HE ;/ @NT CRR E / I CIAS .5:ED H; @//%I CIAS .A:D5HE ;/ @RR EDRADK %D /IISC.A: D4HE ;/ @KS BRAXT%E /IISC.A: D3HE ;/ @RR EUSATST/%I CIAS .2:ED H; @/R ERA AT%D /IISC.A: D1HE ;S ERADHEE AGSSMER ROER ;; RNTURE; PC S RT $ ,2R1 B SO + R0 T TS )+R2,(R0 V MO : 2$ SSREDD AERSTGIRET RSFI; :þÏ ; BRANCH IF NEGATIVE CMP R2,#NPRIOR BGT RLPR1 ; BR IF TOO HIGH MOVB R2,HPRIR ; SAVE PRIORITY JMP RLKGC ; GO TO PROCESS NEXT COMMAND .PAGE ; PROCESS TIME LIMIT COMMAND RLTIM: TST R3 BNE RTIM1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON DELIMITER ? BEQ RTIM2 ;YES, CONTINUE RTIM1: MOV #66,R3 ; SET ERROR CODE BR ÐPADT5:BIT #BIT11,@SR ;LOOP ON TEST BNE ADT5 ;YES LOOP ON TEST BIT 11 SET .PAGE ; SPIRAL TESTS ; ;WRITE THE LAST WORD OF TRACK ZERO ;AND THE FIRST WORD OF TRACK ONE ;USING ONE WORD X-FERS ;DATE = 52525 SPIRAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SETUP STACK MOV #100,WRDCT ; SET WORD COUNT TO 100 CLR TRACK MOV #77,DMA ; LAST SECTOR OF TRACT ZERO MOV #100,R0 ; SET UP DATA Ñ ; TIMER RES. FOR CREAD (=10.0 MSEC.) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C2 ,RCS#D V MO S ERSTGIREF OERMBNU; R10,#1 V MO R00,3065#1 D AD 20Y BLTMU; 0 ,R#4 H AS 7RUTH0 ERMBNUV DE; R00,7777#1 C BI: EGTRSE ; G REET,SPC R JS D AN R0N IERMBNUK IS DALICOG LCELA P E;AGUS ; RSTEISEG RGEPAE ICEV DC D D E THP UTSSEE INUTROS HI T; ;0 : CHST T0 : UFXBTE ERCTRAHA CEW NOR FITWA ;G FLST TBR R TEACARCHD AD ;UFXBTEK,OR WDD A UFXBTEL RO C CL F BUEX TOL R LC C UFXBTEL RO C CL K OR,W7077176þÓ RTIM6 RTIM2: MOV #FWASC,-(SP) ; ASCII STRING ADDRESS EMT ASCBIN ; DECIMAL ASCII TO BINARY MOV (SP)+,R4 ; PLACE CONVERTED NUMBER IN R4 TST (SP)+ TST R4 BEQ RTIM4 ; BR IF ZERO CMP R4,#TIMLM BPL RTIM1 ; BRANCH IF OVER TIME LIMIT MOV R4,MAXTM ; SAVE TIME LIMIT RTIM3: JMP RLKGC ; PROCESS NEXT COMMAND RTIM4: CMP @#SWR,#2 Ô MOV #OUTBUF,R1 1$: MOV #52525,(R1)+ SOB R0,1$ MOV #OUTBUF,BUF WRITE ;WRITE LAST ADDR TK ZERO TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL1 MOV #16,ERCOUNT MOV @DCS,WORK ER16: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL1: CLR DMA INC TRACK WRITE ;WRITE FIRST ADDR. TK 1 TSTB @DCS ;WAIT FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL2 MÕ / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 #IC B RKWOB,TK @OV MK:HO C. ARCHT ECRRCOR FOT AI;W LGTFTSR B S7ME K AR MONTIESQUT OREP;R +1T EM K HO CNE B KB@TH,TCTST BI D PETYR TEMILIDET XI;E %7S RT 4 .+E BN N URET RGEIARRCAR FOK ECCH ;KB@T5,21 #MP CH:KC C. ARCHW NER FOT AI WGO ;G FLST TBR F BUEX TOR R UFXBTER RO F BUEX TOR R UFXBTE7, #IC B EDDGLEOWKNACT OUB-RUT OREP;R 8 ES M +1T EM T OUB-RUT NOF IITEX ;H KC CNE B UT-OUB ROR FCKHE;CB TK,@77#3P CM 4 .-L BP R TEACARCHO CH;E PS@TB ST T ERFFBUN IERCTRAHA;CB TP,@KB@TV MO ; LG2þ× ; FOREGROUND OR SYSTEM TASK BEQ RTIM3 ; BR IF YES RTIM5: MOV #70,R3 ; SET ERROR CODE RTIM6: JMP RLKER ; ERROR EXIT .PAGE ; PROCESS TASK NUMBER COMMAND RLTSK: TST R3 BNE RTSK1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON BEQ RTSK2 ;YES, BRANCH RTSK1: MOV #67,R3 ; SET ERROR CODE BR GWDER ; ERROR ROUTINE ;*************** CØOV #17,ERCOUNT MOV @DCS,WORK ER17: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL2: MOV #200,WRDCT ; SET UP FOR 2 SECTOR X-FER DEC TRACK MOV #77,DMA MOV #INBUF,BUF ; READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL3 MOV #20,ERCOUNT MOV @DCS,WORK ER20: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL3: MOV Ù = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS -TFTSL BP G LA FOR FCKHE;C KS@TB ST TG:FLST TG RER FEUF BXTTER EACL ;F BUEX TLR C TSUPRRTEINP UCKLO ;SR@C0,34 #OV MT:YS TR HA CHALP AOR FUPT SE ;CHST,T00#1V MO: HALP AT YS TBR . ARCH. UM NOR FUPT SE ;CHST,T40 #OV MA:CHNO ;S ERCTRAHA CHALP AOR. UM NTSEPCC ANETIOU;R ONTISAERNVCOD ARBOEY KLENDHAO TNETIOU;R ;R TEISEG RRKWO ; 0X:NVAC EDRTVEON C #ITEX ;5 %TS R VNACE BN T UNCOR HA CIISC AOMFR1 ;- %2C DE X NVACR RO X NVACR RO # ALCT OTETARO ;X NVACR RO X NVAC7, #IC B ARCHI CIASE ORST ;) (1,-.þÛHANGE WHEN KEY SWITCH IS INSTALLED ********** RTSK2: CMP @#SWR,#2 ; FOREGROUND OR SYSTEM ? BEQ RTSK3 ; BR IF YES CMP @#SWR,#1 ; BACKGROUND ? BNE RTIM5 ;NO, BRANCH RTSK3: MOV #FWASC,-(SP) EMT ASCBIN ; CONVERT ASCII STRING TO BINARY MOV (SP)+,R4 TST (SP)+ CMP R4,#TASMAX ; WITHIN SYSTEM LIMITS BGT RTSK1 CMP R4,#OVTMIN BLÜ #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR CMPX1 2$: BEQ CMPX1 ;COMPARE SECOND WORD MOV #21,ERCOUNT ;SETUP ERROR COUNT MOV INBUF,WORK ;INCORRECT DATA MOV #52525,WORK1 ;CORRECT DATA ER21: JSR %5,STAER1 ;REPORT ADDR 377 HAE BAD DATA ;****WRD1=THE DATA THAT SHOULD HAVE BEEN IN ADDR. 3777**** ;****WRD2=THE DATA READ FROM ADDR. 3777**** BR SPIRAL ;LOOP ON ERÝ C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;********************************************************************** ;* %3B OV M I#CIASP UET;S %30,#6D AD # ALCT ONTCAFINIIG SSTEA LTELASO;I3 ,%707717 #IC B %3X,NVACV MO: VNAC %12, %DD A ARCHI CIASF O;# %2+,5) (OV M DRADI CIAS ;1 ,%)+(5V MO D TEERNVCOE BTO# F OUEAL;VX NVAC+,5)@(V MO: NVCO ;; EDRTVEON CBEO TR.HA CIISC AOFR BEUM NHE=TI#CIAS ;G INGOS IIISC AREHE WOFB LSE=YT BDRAD ;D TEERNVCOE BTOR BEUM NOFS ESDRAD#=DRAD ;V ON,C%5SR;J WSLOOL FASE INUTROR TEEN ;; NETIOU RRTVEON CIISC ATOL TAOC ;; ;E AGSSMET EX NSSCERO PGO ;S YP TBR E ER HESGOE AGSSMEF O*þßT RTSK1 MOV R4,TSKNO ; SAVE TASK NUMBER JMP RLKGC ; PROCESS NEXT COMMAND .PAGE ; GET NEXT WORD FROM ROSLNK 3 CONTROL CARDS ; ; INPUT: RO = FWA OF TASK HEADER ; R1 = CHARACTER POINTER ; ; R2 IS USED AS A CHARACTER POINTER TO THE ASCII BUFFER ; ; OUTPUT: THE WORD WILL BE PLACED IN (TMASC) AND R3 WILL INDICATE DELIMITER ; R3 = 0 EQUAL SIGN ; R3 = 1 SEMI-COLON ; R3 = 2 COMMA ; R3 = 3 RIGHT PARENTHESIS àROR CMPX1: MOV #100,R0 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR LPSPI1 2$: BEQ LPSPI1 ;BRANCH IF DATA OK MOV #22,ERCOUNT ;SETUP ERROR COUNT MOV #52525,WORK1 ;CORRECT DATA MOV INBUF+2,WORK ;DATA READ FROM ADDR0 TK1 ER22: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WDR2=THE DATA READ FROMADDR.0 OF TRACK 1 **** SPIL5: JMP SPIRAL LPSPI1: BIT #BIT11,@SR ;LOOP ON TEST? BNE á ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P SSREDD;A 0 : SBYP TE AGSSMEE YP TTOB SUP TYN OLLCA ;1 +MT EA:PSTY ITEX. ORATINRMTE ; TI R R.TONAMIER TOT NIFH NCRA;B SAYP TNE B ORATINRMTER FOK ECCH ;SBYP,T-1 #MP C SBYP TTOE AGSSMEF OSSREDD;AB PSTY0,@%V MO S ESDRADE AGSSMET EX NTOE ATPD;U %6,@#2D AD S ESDRADE AGSSMES INTAON CATTHS ESDRADT GE ;0 ,%%6 @OV MS:YP TR TEINPRE YPETEL TONS GESAES MIISC AOFS IEER S AUTTPOUO TNETIOUBRSU ;0 : ATPDTY PATYR B R.HA CPETYO ;G PDTY7, %SR J T.DAYP TTOE OD CLFE OV;MT DAYP,T12 #VBMO: PGTY R.HA CPETYO ;G&þã; GWORD: MOV R2,-(SP) MOV R4,-(SP) MOV #FWASC+6,R2 MOV #20040,R3 ; 2 SPACE CODES MOV R3,-(R2) MOV R3,-(R2) MOV R3,-(R2) GWD1: CMP #LWCRD,R1 ; IS CARD BUFFER EMPTY BEQ GWD3 ; BR IF AT END MOVB (R1)+,R4 ; GET CHARACTER CMP R4,#SPAC ; SPACE ? BEQ GWD1 ; YES BRANCH CLR R3 ; R3 = 0 ä SPIL5 .PAGE ; SPIRAL TEST EXT. ; ;WRITE TWO WORDS OF DATA ;STARTING WITH THE LAST ADDRESS OF TRACK0 ;DATA PATTERN = 25252 ;THEN READ THE DATA DOING ONE WORD ;X-FERS XSPIRL: BIS #BIT8,@DCS ; CLEAR MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SET UP STACK MOV 200,R0 ; SET UP 2 SECTORS OF DATA MOV #OUTBUF,R1 1$: MOV #25252,(R1)+ SOB R0,1$ MOV #200,WRDCT ; SET WORD COUNT FOR 2 SECTORS MOV #OUTBUFå# 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = PDTY7, %SR J ATPDTYO TDECON URET RGEIARRCAE OV;MT DAYP,T15 #VBMO: PFTY ITEX ;7 %TS RT:XIYE T4 .-L BP . AGFLE ON DOR FITWA ;S TP @TBTS R TEINPRO TERCTRAHA CUTTPOU ;PB@TT,DAYP TVBMO T XIYE TNE B SR,@14IT#BT BI: PDTY PATYR B ATPDTYN IARCHE YP;T PDTY7, %SR J #" "IFH NCRA;B PGTYQ BE . #" "OR FCKHE C"."%T NO ;ATPDTY2,#4B MP C "."%F ICHANBR ;F YP TEQ B "."%R FOK ECCH ;ATPDTY5,#4B MP CC:YP T. ITEX. NEDO. ARCHR TONAMIER;T I RT . @" "OT NIFH NCRA;C PCTYE BN R TEACARCH" "@R FOK ECCH ;ATPDTY"þç CMP R4,#EQSN ; = ? BEQ GWEX ; YES INC R3 ; R3 = 1 CMP R4,#SCOL ; ; ? BEQ GWEX ; YES INC R3 ; R3 = 2 CMP R4,#COMA ; , ? BEQ GWEX ; YES INC R3 ; R3 = 3 CMP R4,#RPAR ; ) ? BNE GWD7 ; NO GWEX: MOV (SP)+,R4 MOV (SP)+,R2 RTS è,BUF ;SET UP CMA CLR TRACK ;SET UP DISK ADDR. MOV #77,DMA WRITE ;WRITE DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X1SPIL ;BRANCH IF NO ERROR MOV @DCS,WORK MOV #23,ERCOUNT ;SET UP ERROR COUNT ER23: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X1SPIL: MOV #100,WRDCT ; SET UP FOR 100 WORD X-FER CLR TRACK é 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 0,10 #PBCM R TEACARCHT GE ;ATPDTY+,0) (VBMO: PATY 0. RTOE AGSSMEF OSSREDD;A %00,@%V MO . ITEXP UET;S %6,@#2D AD S ESDRADE AGSSMES INTAON CATTHS ESDRADT GE ;0 ,%%6 @OV MP:TY R.TEINPRE YPETEL TONE AGSSMEI CIAST PUUT OTOE INUTROUB;S XTTEF ONELIE ONE YP TES;Y YP TBR T EX TOFS NELIF OESRISEA E YP TO!;N PSTYE BN 1 T+EML AL CHE TAS;W) (0,-+1MT#EP CM 0 ,%6) (OV MP:TREM ESIN LOFS IEER S APETY0=T+EM ;T EX TOFE IN LNE OPETY1=T+EM ;S LLCAT EME ODEC DTOE INUTRO ;; ;E INUTROT XI;E %5S RT 1 - þë PC GWD7: MOVB R4,(R2)+ ; NO, PLACE CHARACTER IN TEMB CMP #LWASC,R2 ; COMPAIR CHAR POINTER WITH END OF TABLE BNE GWD1 ; NO MOV #71,R3 ; SET ERROR CODE BR GWDER GWD3: ; INSERT ROS CARD READ COMMAND MOV #CSIOB,-(SP) EMT CREAD ; READ A CARD MOV #FWCRD,R1 ; RESET CHARACTER POINTER CMP @R1,#DOLR ; ROS 3 CONTROL CARD BNE GWD1ìMOV #77,DMA ; SET UP DAR MOV #INBUF,BUF ;SET UP CMA READ ;READ DAR 3777 TSTB @DCS ;TEST FOR NOT READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X2SPIL ;BRANCH IF NO ERROR MOV #24,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG ER24: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE THE ERROR **** BR XSPIRL X2SPIL: MOV #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INí ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; 0AS1ME 0 S1ME 5 ED H 5AED H GESAES MRTPORE ;0 +MT E 3 GESAES MOFS ESDRAD ; D5HE D TEERNVCOE BTOT UNCOR ROER ; NTOURC E IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A A 10ES M RTVEON CBEO TTADA ; K1OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A 0 S1ME D TEERNVCOE BTOA AT;D K OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS: R1AEST ;; ;S ERSTGIREO TWF OTSENNTCOE THD ANT UNCOR ROERT OREP RTOE INUTRO ;; NETIOU RITEX ;5 %TS R -1 0 S1ME 5 ED H 5Aþï MOV #63,R3 ; SET ERROR CODE GWDER: JMP RLKER ; ERROR TSKND: ; REGSAV: MOV R4,-(SP) ; RK PUSHED BY "JSR" MOV R3,-(SP) ; SAVE REST MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ; ; REGPOP: TST (SP)+ ; POP UNNEEDED R5 MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 ðBUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR X3SPIL 2$: MOV #25,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV OUTBUF,WORK ;DATA DATA ER25: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR.3777 OF TRACK 0 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 3777 OF TRACK 0 **** BR XSPIRL X3SPIL: INC TRACK ; SET UP TO READ FIRST SECTOR OF TRACK 1 CLR DMA READ ;READ Dñ ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX LINES/PAGE (=CONTROL TAPE. $LPERR = 10. .PAGE ;*********************************************************************** ;* ** ;* MACROS TO SATISFY THE DIRECTIVES PRED H GESAES MRTPORE ;0 +MT E 3 GESAES MOFS ESDRAD ; D5HE D TEERNVCOE BTOT UNCOR ROER ; NTOURC E IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A 0 S1ME D TEERNVCOE BTOA AT;D K OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS: ERTA S; ERSTGIREE ONF OTSENNTCOD ANT UNCOR ROERT OREP RTOE INUTRO ;; ;; ;; ;; EDNGHA COT NAS HSR ;G CHSRR B EDNGHA CAS HSR ;P AMSTE BN R @S1,RKWOP CM: HGRC SY ADRET NOL RONTCOR FOT AI;W SYBUCTL BP Y ADRET NOL RONTCOR FOT ES;T CS@DB ST TY:USþ RTS R5 ; TEXTIO: MOV #TXTLST,-(SP) EMT NOCKPT ; STAY IN CORE DURING I/O EMT DISCIO ; READ OR WRITE EMT CKPT ; ALLOW SWAP OUT TST TXTERR ; ANY ERRORS BNE LDR05 RTS PC LDR05: MOV #105,R3 ; LOAD ERROR CODE JMP RLKER .END ôATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X4SPIL ;BRANCH IF NO ERROR MOV #26,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG. ER26: JSR %5,STAER ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X4SPIL: MOV #100,R0 MOV #INBUF+100,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR LPXSPIL ; BR IF õESENT IN PALRES ** ;* (OUR VERSION OF PAL11R) BUT NOT PRESENT IN MACRO-11R. ** ;* ** .MACRO .REF A,B,C,D,E,F,G,H,I,J .IRP X, .GLOBL X .ENDM .ENDM .REF .MACRO .DEF A,B,C,D,E,F,G,H,I,J .REF A,B,C,D,E,F,G,H,I,J .ENDM .DEF ; ; ; ; MACRO DEF. FOR QUEUES ; .MACRO .QUE A,B,C .BOöÌý•^ŒÄñ•ÏÄö}œÍÄŒÄñ•ÏÄﱊËÄý• ŒÄñ• Š~’ÇÏÄå1ŠÏÄwjþý• ŒÄ1ŠËÄñ• Ïħý• ŒÄñ• ÏÄ 1ŠËÄ@ÖÄwtþñ‹ÓÄw&ÿý•ŒÄñŠÓÄwÿ‰Á�8ÁEðÿEÅ DšÄô•@ÖÄ Ê €fœÄã~ Èæ÷ ’çÖ DŸŠÄ+ÄÅ€¡|¡ n¡ *¡-ƒÃeƒl¡.ñ‹ÌÄB¦ÎEÀ–,I†²  ‘Ê €Ê5@Ä =‘ŒÄCšÄó•Ê5@@wˆ~‚ÈRÎÄ• ñ•ÏÄîý•^ŒÄñ•ÏÄ2 ïò äò Ê Þ�à ñ‹ÌÄ ±ŠÌÄÄ•\ñ•ÏÄñ’ÍÄÐÄ’Î1ŠÌIJ  ‘1‘ÍÄÄ•\ñ•ÏÄÁñ‹ÎÄÀ±ŠÎÄfœÄ÷ d~úÈ"çÖ ¸½Š†Ä½=‘ŒÄñ• ÏÄfšÄ÷ çÖ ²Ä•=‘ŒÄñ•ÏÄTB CD EA RND AGO ;S DC,@#5S BI T UNCOD OR WADLO ;WC,@777717 #OV M SSREDD ANTREUR CADLO ;MA@CF,BUIN #OV M EDADLOG RES ESDRADK IS;DR DA,@RKWOV MO K OR,W7737 #IC B RKWOL RO K OR WOL R RKWOL RO K OR WABSW K OR,WSR @OV M EDADLO. EG RR.DD AT.EXK IS;DE DA,@RKWOV MO K OR WOR R RKWOR RO K OR WOR R RKWOR RO K OR WOR R O. NSKDID ANK ACTRE THK AS;MK OR,W006017 #IC B RKWO1,RKWOV MO R SCHET;F1 RKWOR,@SV MO S DC,@T8BI #IS BP:AMST ;R BEUM NSKDIE THS ALQU E-7R9;S ERMBNUK ACTRE THS ALQU E-0R6;S METIþøALL DATA OK 2$: MOV #27,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV INBUF,WORK ;DATA DATA ER27: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 0 OF TRACK 1 **** X5SPIL: JMP XSPIRL LPXSPIL:BIT #BIT11,@SR ;LOOP ON TEST? BNE X5SPIL .PAGE CLRREG: CLR DMA ;CLEAR WORD ADDRESS CLR TRACK ;CLEAR TRACK ADDRESS ; ; DATAT: MOV SWRDCT,WRDCT MOV #LDAT,HRDER ;SETUP FOR ùUND .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 = 177776 .IFZ $1145 MOVB #340,@#PSR .ENDC .IFNZ $úò€÷ :È 4·•Â6œw ,Ì4‚Á W÷ z<àÄ4àÄ·•þ5‡&÷ &÷ bØÄüØÄ4ØÄÀeØÄ4àÄ·•Ô5€‡fÁ Á �`D`Ä �‡‚ñ•ÊÄñ‹ÓÄCDžÄô•ð1ŠÑÄñ‹ÇÄ1Šz~bÊÏÄ@ÔÄ 4 �¡ ñ• ÏÄ=‘ŒÄfœÄæýÕ@ˆÄ÷ åÖ J@ÖÄ 3 1ŠÎÄ1ŠÌÄñ•ÏÄDŸŠÄÄAË5@Ä =‘†ÄfšÄæÝñ•ÓÄñ•P~ÚÊ ÏÄý•ŒÄfžÄæðÏÃ�Y ANT AERSTGIREH TCWI SHE TGEANCHY MAR TORAPE OHE;T CKRA THE TCTLESEO TADRED OR WNE O AESDOE INUTROE TH ;Y CLTITA SCKRA T ACTLESEO TORATEROPE THS LEABENE INUTROS HI;T ; ; ;; ;; ;; CRW NET ECEL SSYBUT NOK IS;D CSLDSER B DYEA RLLTI SSKDI ;Y USKB DPL B DYEA ROT NSKDIR FOT ES;T CS@DB ST TY:USKB DT SET NOS IT BONTINCFU ;S DCEL SEQ B ET STSBIN IOCTUN FIS ;CS@D0,IT#BT BI G REL RONTCOO NT ISRV MO ;CS@DR,@SV MO S ESDRADT ENRRCUP UET;SA CM,@UFTBOU #OV M RDWO1 -NTOU CRDWOT SE ;WC,@777717 þüHARD ERROR MOV #340,@CSR ;LOCK UP PROCESSOR PRIORITY JSR %5,PASEL ;SET UP DATA BUFFERS LDAT: JSR %5,OPDSEL ;SET UP DISK ADDRESS BIT #BIT14,FLAG ;TEST FOR WRITE BEQ SLH ;TEST FOR WRITE CHECK MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER WRITE +100 ;WRITE WITH INT. ENABLED BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT BNE WRWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR SLH WRWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG SLH: BIT #BIT13,FLAG ;TEST FOR WRITE CHECK BEQ Eý1145 SPL 7 .ENDC ; ; SET INTERRUPT LOCKOUT .ENDM ; þÓù³ŠÐÄÅÅ AŸŒÄ7ŠÃùóŠÊÄwüó‹ÇÄ@ÔÄ@ÖÄð÷hù÷fù7 dùœÄ ô5@r•qŒ• ò5€r•jò5r•ø~RËfô5 r•„êôU r•=ŠˆÄ=ІÄ�œr•p� wù÷ ²B   ÂeàÄÅ Å @ÀeØÄÅeàÄÄ÷ Î:JÒ  Ä ÷·•H4÷ ´ñ‹ÇÄ!ñœÇÄÇÄñœÈÄí~ÊËÈÄñœÉÄÉÄ EÅ µÔÄÔĵÖÄÖÄ·•4æ÷ Nþƒó•ÿÿÇÄ3ŠÈÄ3ŠÉÄ ·•ø3õ}�ŒÄfœÄæ÷ ŒãÖ 3ŠÐćó‹ÑÄñ³ŠÑÄ÷ ì×-ZøæŽÄ÷ þÙ‡ ~BÌÁ�~øEÅ =ІıŠÒÄ7Šnø@ÖÄðý•^ŒÄñ•Ïć¦ö�Š3÷Õà‚3‡f&Á�@øÁ � ±ŠÓÄ„�‡R #OV M TSUPRRTEINP UCKLO ;SR@C0,34 #OV MS:DCEL SR TEISEG RUSATSTL RONTCOK IS;D ;; 0ERSTGIREO NT;I LKOV MBR T SERE T SERE D EAAHK OO LVEMO ;0 ,%DS@AV MO: LKOV MR TEISEG RADHE AOKLO ;; ;R DBEL SR B ERFFBUA AT DTOINR SOV M ;BR@DR,@SV MO: BRLDSE ERSTGIRER FEUF BTADA ;; AELDSER B EG RXT EDRADK IS DTOINR SOV;ME DA,@SR @OV ME:DAEL SR TEISEG RORRR END AXT ESSREDD ASKDI ;; ARLDSER B EG RDRADK IS DTOINR SOV;MR DA,@SR @OV MR:DAEL SR TEISEG RSSREDD ASKDI ;; MALCSER B EG RDRADT ENRRCUO þSH ;TEST FOR READ MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER MOV #340,@CSR WRCHECK +100 ;WRITE CHECK WITH INT. ENABLE BIT #BIT9,@SR ;FINDOUT HOW TO WAIT FOR INT. BNE WCWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR ESH WCWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG ESH: BIT #BIT12,FLAG ;TEST FOR READ BEQ REH ;CHECK BUFFER MOV #INBUF,BUF ;SETUP OUTPUT BUFFER BIC #3,FLAG ;CLEAR RE-READ COUNT DSKRD: MOV #340,@CSR JSR %5,ZBUF ;CLEAR BUFFER INC FLAG READ +~ºÌÿÿý~2Íÿÿ„~ªÍ ~"ÎNT ISRV MO ;MA@CR,@SV MO: MALCSE ERSTGIRES ESDRADT ENRRCU ;; WCEL SBR G RET UNCOD OR WTOINR SOV;M WC,@SR @OV MC:LWSE ERSTGIRET UNCOD OR;W ;R TEISEG RCHITSWE THA VIS ERSTGIREO I/E THN ;I TSBIT SEO TORATEROPE THW LOALO TNETIOU;R C SSPA @MP J OK 1 +MT E ERFFBUW NEE ITWR ;W DNWRR B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN ; R @S9,IT#BT BI 0 10 +CKHERC W ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T ES TNDOUGRCKBA ; OT I +6 .NE B ITWAO TOW Hþ100 ;READ + INT ENABLE BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT. BNE RDWAIT ;WAIT WITH WAIT INSTRUCTION IOT BR ELH RDWAIT: MOV PRIORITY,@CSR ;SET UP PRIORITY WAIT ;WAIT FOR FLAG ELH: BIT #BIT12,@SR BNE ADRD JSR %5,COMPARE ;COMPARE OUTBUFFER TO INBUFFER ADRD: JSR %5,OVRFLO ;TEST FOR EXTRA DATE BREAKS MOV FLAG,WORK ;CHECK DISK RE-READ COUNT BIC #177774,WORK ;DO 3 RE-READS. CMP #3,WORK BNE DSKRD ;DO ANOTHER RE-READ REH: BIT #BIT8,@SR BNE DATAT JSR %7,DISBUF ;GO SET UP DI‘~šÎÿÿÿÿÿÿÿÿ!~Ïÿÿÿÿÿÿÿÿÿÿª~ŠÏÿÿTULSA �~Ðÿÿ2222@2@ ŠdONK ECCH ;SR,@T9BI #IT B 00+1E ITWR: NWRD WR DEHRL,FAOW#PV MO S ESDRADT ENRRCUP UET;SF BUF,BUUT#OV MO R FEUF BTADAE ATEREN;GL SEPA5, %SR J CTRD,WCTRDSWV MO T UNCOD OR WUPET;ST DCWR,S0020 #OV M CKRA TLR C MA DLR C RNTEAT PUPT SE ;NUAT,P20 #OV M %60,00#1V MO C SSPA),(6V MO K IS DHE TARLE;CS DC,@T8BI #IS BL:FAOW PN IOETPLOM CAT" OK "RTPORE ;R CUOC ; EYTHF IRSROERT OREP RND ACKHE CTERI;W RNTEAT P525212H IT;W SKDIE ETPLOM CHE TTERI WTOE INUTRO ;; ;; ;; SKDIK ECCHO ;G FLWR PBR T AI WGOþSK BUFFER. BR LDAT MSTR: TST FLAG BPL .+6 ;UNDER PROGRAM CONTROL JMP EXTPP ;OPERATOR SELECTED PATTERN ADD #2,PATNU ;INC PATTERN INDEX CMP #44,PATNU BNE DATAT ;NOT LAST PATTERN EXIT CLR PATNU ;LAST PATTERN EXIT ; ;THIS IS A RANDOM DATA, RANDOM ADDRESS ;AND RANDOM WORD COUNT ; ;WORD COUNT CAN BE EQUAL TO OR LESS THAN 1000 WORDS ; RANEX: MOV #-1000,PASSC MOV #1000,%6 BIC #BIT9,FLAG MOV #RANER,HRDER ;SET UP FOR HARD ERROR MOV PRIORITY,@CSR ;SET PRIORITY TO LEVEL 5 WRLG: MO ŽŽd’’’2û~zДÿÿ°ÒðÞÿÿV~òМÿÿ…›~jÑ……………©~âÑP UOT NDSONEC SWO;T NTMCTI XNE B R METI1 ;+ RKWOC IN T SERE: NTMCTI XR METID ONEC STYENTWP UET;SK OR,W0.30#-V MO 6 ,%0010 #OV M ORCTVEL AI FEROW PETES;R4 ,2DNWR#PV MO: UPWR P; LTHA T ARSTREP UET;S4 ,2UPWR#PV MO K IS DHE TARLE;CS DC,@T8BI #IS BN:RDPW ;L AI FEROW PNGRIDUK IS DRTBO ATOE INUTRO ;; L RFPWR B SKKDCHR B ERFFBUT EX NCKHE;CF BUIS,D%7R JS T AI W SR@CY,ITORRI POV M 12.+R B NDOUGRCKBAN IITWA ; OT I +6 .NE B SR,@T9BI #IT B 00+1K ECCHWR: SKKDCH 260,34 #OV M C.VEL AI Fýý V #3,WORK ;GENERATE RANDOM WORD MOV #OUTBUF,%1 JSR %5,RANDOM BIC #177000,OUTBUF ;MASK FOR WORD LENGTH=1K BEQ WRLG MOV OUTBUF,WRDCT ;SET UP WORD COUNT MOV OUTBUF+2,DMA ;SET UP DAR ADD WRDCT,DMA BCS WRLG MOV OUTBUF+2,DMA BIC #177774,OUTBUF+4 MOV OUTBUF+4,TRACK ;SET UP DAE MOV WRDCT,WORK ;GENERATE RANDOM MOV #OUTBUF,%1 ;DATA BUFFER JSR %5,RANDOM MOV #OUTBUF,BUF BIS #BIT8,@DCS ;CLEAR THE DISK WRITE +100 ;WRITE DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@Cÿÿÿw�Èÿÿ 2222ÿÿÑ~ZÒÿÿW~ÒÒÝ~JÓd~ÂÓEROW PUPT SE ;24N,RDPW #OV M ORRR ERDHAP UET;SR DEHRL,RFPW #OV M CKRA TLR C MA DLR CL:RFPW SKDIN O525212E ITWR ;ALWFPO7, %SR J CKTA SUPT SE ;%60,00#1V MO: T2PF ;. GHOUHR;T EDCLCYY ELETPLOM CAS HERSTGIRES ESDRADE TH ;L TIUNL AI FEROW PERTHNO ATEEACRT NOO ;D ;* **R.CUOCD ULHO SRSROERO *N** ;S ORRR EOR FCKHE CND;A INGA ASKDIK ECCHE ITWRK AC BESOM CEROW PENWH ;L AI FEROW POR FITWAD ANK IS DCKHE CTERI;W K""OT OREP;R RNTEAT P525212H IT WSKDIE ETPLOM CTERI;W ROZEK IS;D #2T ES TILFAR WEPO ;; ;ùýSR WAIT WRCHECK +100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT MOV #INBUF,BUF ;SET UP BUFFER JSR %5,ZBUF ;CLEAR BUFFER AREA READ +100 ;READ DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %5,COMPARE ;COMPARE OUT BUFFER TO IN BUFFER JSR %5,OVRFLO ;TEST FOR EXTRA DATA BREAKS RANER: BIT #BIT9,FLAG ;CHECK FOR ERROR BEQ EXRAX BIC #BIT9,FLAG JSR %5,CONV DMA MES1 6 JSR %5,CONV TRACK MES1A 2 JSR %5,Cì~:Ôs~²Ôû~*Õ‚; ;; ;K IS DCKHE CGO ;K CHUPP JM ITWAO GUPT NOS NDCOSEO TW ;T CNIM TNE B ERIM T+1 ;K OR WNC I ETES RT:CNIM TR METID ONEC STYENTWP UET;SK OR,W0.30#-V MO 6 ,%0010 #OV M 24N,OW#DV MO: UP ;T AL H ORCTVEL AI FEROW PET;S 24P,#UV MO K IS DRTBO;AS DC,@T8BI #IS BN:OW D; ;T AL HND ASKDIT ORAB ;E INUTRON OW DEROW;P ; ILFAR WEPO ; R HEOTANR FOT AI WGO ;T WAPFP JM T DAHK CBR R FEUF BSKDIW NEP UET;SF BUIS,D%7R JS T AI W SR@CY,ITORRI POV M 12.+R B OT I +6 .NE B SR,@T9BI #IT B 00õýONV WRDCT MES3 4 EMT+0 HED6 MES1A MES1 MES3 -1 EXRAX: INC PASSC ;HAVE WE DONE IT 1000 TIMES BNE WRLG ;BRANCH IF NO BIT #BIT11,@SR ;LOOP ON TEST BEQ .+6 ;BRANCH IF YES JMP RANEX ; ;CHECK FOR MULTI DISK MODE ;IF IN MULTI DISK MODE REPORT "END" ;IF LAST DISK ON SYSTEM HAS BEEN ;EXERCISED. ; ; CLR DMA CLR TRACK BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ REPOEN ;REPORT "END" MOV FLAG,WORK ;WHAT DISK ARE WE ON BIC #177743,WORK ;IF LAST DISK ON SYSTEM CMP ~¢Õ ~Ö‘~’Ö~ ×+1K ECCHWR: ATKDCH ORRR ERDHAR FOP UET;SR DEHRK,CHUP #OV M CKRA TLR C MA DLR C SKDIE THR EACL ;CS@D8,IT#BS BI: HKPC U; ILFAR WEPOR TEAFA AT DCKHE CTOE INUTRO ;T WAPFR B WRBYMYR B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI 0 10 +TERI WR:YWYB M6 ,240#3V MO . EC VILFAR WEPOP UET;S4 ,2WNDO #OV M ORRR ERDHAR FOP UET;SR DEHRT,WAPF #OV M CKRA TLR C MA DLR C SKDIR EACL ;CS@D8,IT#BS BI: ATFW PK IS DON2 2525 1TERI;WL FAOW,P%7R JS K ñýWORK,DSKNOR ;REPORT END BEQ REPOEN ;REPORT "END" LAST DISK ADD #4,FLAG ;INC. DISK NO. BR EXTPP ;EXERCISE DISK REPOEN: EMT +1 END ;REPORT END OF PASS BIC #34,FLAG EXTPP: JMP ADTST ;RECYCLE ; ;ENTER DISK HANDLER BY THE TRAP INSTRUCTION ;ARGUMENT TO TRAP INSTRUCTION IS TWO ORDER ;BYTE OF THE CONTROL REGISTER. ; DISK: MOV DAR,R5 ; SET UP TO LOAD DISK REG MOV TRACK,R0 BIC #177000,R0 ASH #6,R0 MOV DMA,R1 BIC  ~‚×(~ú×°~rØ7~êØACSTP UET;S6 ,%0010 #OV M1:FT P; ;* **LEABPTCEACD REDESION CISR ROERE ONY NL*O** ;; RSROERR FOK IS DHE TCKHE CTERI WND AUPR WEPO ;; LTHAD ANT INPOY TRENW NEP TUSE ;R FENSRA TRTBO ARSCUOCL AI FEROW PENWH ;N ERTTPAE AM SHE TNGTIRI WRTTA;S K""OT OREP R ;N ERTTPA2 2525 1THWIK IS DTELEMPCOE ITWR; ROZEK IS D ;1 "STTEL AI FEROW P11RF ; TI RX:TI R; LTHA O IM T +1MT E IT BCERA TARLE;CR CS,@T4BI #IC B SR@C0,34 #OV M UT OEDIM TSTTED UNROKGAC BRTPORE ;4 W-NCXIR B +4 .EQ B SSPAC IN W NCXIL BPíý #177700,R1 ADD R1,R0 MOV R0,(R5) ; LOAD DAR MOV BUF,-(R5) ; LOAD CMA MOV WRDCT,-(R5) ; LOAD WC NEG (R5) MOV (6),%4 MOV -(4),WORK ; BIC #177600,WORK ;MASK FUNCTION BITS MOV WORK,-(5) ;LOAD FUNCTION REG. RTI ;RETURN FROM TRAP ; ; ; ; ; ; ; ;RF11 DISK INTERRUPT HANDLER ;ROUTINE CONTINUES ON ERRORS ; DKINT: BIC #BIT4,@CSR ;CLEAR TRACE BIT TST @DCS ;TEST FOR ERROR BPL INTEXT ;BRANCH IF NO ERROR ¿~bÙF~ÚÙÎ~RÚU~ÊÚ 2 W-NCXIB ST T -2CWIN XNC IW:NCXI #0R CL T BIE ACTRT SE ;SR@C4,IT#BS BI E AS BMETIP UET;SS AS,P0010#-V MO 6 1LR C APTRE ACTRP UET;S4 ,1IXRT #OV MT:AIXW ;S PTRUERNT IOR FSTTED UNROKGAC;B ; INGA ARTTA STELEMPCOK IS;D0 -1UFWBNER B ERFFBUW NEE ITWRO ;G UFWBNER B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI A AT DCKHE CTERI;W 00+1CKHERC W ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI R FEUF BTERI;W 00éý  BIS #BIT9,FLAG ;SET ERROR BIT MOV @DAE,WORK ;REPORT ERROR BIC #177700,WORK ;MASK ADDRESS EXT. BITS. JSR %5,CONV ;CONVERT TO ASCII WORK MES1A 2 EMT+1 HED2 MOV @DCS,WORK ;TEST FOR READ BIC #177770,WORK CMP #4,WORK BNE DELMES ;IF READING REPORT WHICH READ MOV FLAG,WORK BIC #177774,WORK JSR %5,CONV WORK MES13 1 EMT+1 MES13 DELMES: MOV @DAR,WORK ;SET UP LOWER 16 BITS OF ADDR. DEC WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES1 6 EMT+0 MES1A MES1 -1"Ý~BÛd~ºÛì~2Üs~ªÜ+1TERI W UF,BUFTBOU #OV M EDATEREN GERFFBUA AT DEW;NM DOAN,R%5R JS 1 ,%UFTBOU #OV M ERFFBUM DOAN ROR FUPT SE ;RKWOT,DCWRV MO: UFWBNE CKRA TLR C MA DLR C ORRR ERDHAR FOP UET;SR DEHRF,BUEW#NV MO L VELEY ITORRI PUPT SE ;SR@C7,IT#BV MO T DCWRT,DCWR SOV M CTRDSWR RO T DCWR,SVESAV MO T UNCOD OR WEW NUPT SE ;VESAF,BUUT#OB SU ; E AV,S0000#2B SU 6 ,%0010 #OV M 6LR C APTRS BUO I/E ORSTRE ;4 6, #OV MF:REAX M; RSCUOCR ROERS BUO I/N HE WREHER TEEN ;; RYMOMEE NCREFEREO ;G EFXR EBR . EF RRYMOMET åý$ MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV WORK MES2 6 EMT+1 MES2 BIT #BIT14,@DCS ;TEST FOR HARD ERROR BEQ SOFTER ;GO AND CONTINUE SOFT ERROR MOV @DAE,WORK ;FETCH ERROR EXT. BITS SWAB WORK BIC #177400,WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES2A 3 EMT+0 HED5A MES2A -1 BIS #BIT8,@DCS ;CLEAR THE DISK MOV #1000,%6 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR JMP @HRDER ;EXIT HARD ERROR SOFTER: TST @WC ;CHECK FOR X-FER DONE &û~"Ý‚~šÝ ~ÞEX NOR FUPT SE ;VESA0,0020 #DD A G.REO I/O TDEMAE NCREFERET AS;L EFXRMAR B LTHA K 32N HA TSSLEF ICHANBR ;6 .+E BN K 28N HA TERATRE GOR FSTTE ;VESA6,4477#1P CM Y OREM MCEENEREF;R VESA @ST TF:REEX 4KR FOP UET;SE AV,S4674#1V MO 6 0,34 #OV M APTRS BUO I/P UET;S4 F,REAX#MV MO 6 ,%0010 #OV M LSVELEY ITORRI PUPK OC;LR CS,@40#3V MO K IS DHE TARLE;CS DC,@T8BI #IS BN:MEXT E; TADAE THS CKHE CTERI WND AESITWRD AN ;E IZ SATTHR FEUF BOMNDRAA S TERANEGE ;T IENTHM TEYS SHE TONS ;I RYMOMEH UC MOW HESáý( BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@SR BEQ .+6 SUB #2,(6) ;X-FER NOT DONE SET UP FOR RETURN BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT10 SET IN SR BIS #BIT0,@DCS ;SET GO AND CONTINUE RTI ;RETURN TO WAIT INSTR. ; ; INTEXT: BIT #BIT13,@SR ;HALT ON COMPLETION FLAG BEQ .+4 HALT ;YES BIT 13 SET IN SR HALT BIT #BIT9,@SR BNE .+6 MOV #774,%6 ;RESET STACK RTI ;EXIT ; ; ;ROUTINE TO SET UP DAR AND DAE ;FROM SR AND CONVERSATION ;ENTER FROM JSR %5,OPD*‘~ŠÞÿÿ~ߪªªª q>·§²@q¸Æ¦)ÅÅeJ Îxÿ ‡ Î N Í ÃŠüÍ ÷ <ÂåÂ%!÷ ~zß,„cÍ À‹ëéÑ�øj‹ŠË‹þ€ÃœÀ`ÃEÿ ‡·&Í ÄÍ ÃÄPÇ÷ êÿÍ À‹â„ †ÀÄ „cL|ß÷ê÷õwZÿÁÂê‰ É‹þ€Óòßrœß· îÿõpÿ®7INRMTEDEM RAOGPRE TH ;R SECIEREXY OREM MEDNDTEEX ; ;; RDWOT EX NCHET;F RDHW CBR 1 - S6ME 4 ES M D3HE E INUTROT OUE YP TLLCA ;0 +MT E 6 S6ME A AT;D X NVAC I CIASO TALCT ORTVEON;C NVCO5, %SR J VXCN,AVXCN@AV MO X NVAC2, #UB S VXCN,A%4V MO 6 4 ES M SSREDD;A X NVAC I CIASO TALCT O 1RTVEON;C NVCO5, %SR J VXCN,A#2B SU X NVAC4, %OV M IT BORRR EET;SG LA,FT9BI #IS B ROZES IRDWO ;D WRCHQ BE D OR WROZER FOT ES;T )+(4T TS: EXKN CE ETPLOM CIST ES;T %5S RT D OR WXTNEK ECCH ;X NEÝý,SEL OPDSEL: BIT #BIT7,@SR ;DOES SR CONTAIN TRACK # BNE .+4 RTS %5 MOV @SR,R0 ; FETCH SW BIC #177600,R0 MOV R0,TRACK ADD R0,DMA RTS %5 ;EXIT ; ;ROUTINE TO SETUP DISK BUFFERS ;ADD WORD COUNT TO STARTING DISK ADDRESSES ;COMPARE CALCULATED ADDRESS TO TERMINATING ADDRESS ; DISBUF: ADD WRDCT,DMA ;ADD WORD COUNT TO LOWER 16 BITS BCC COMDAR INC TRACK ;OVERFLOW ADD ONE TO TRACK COMDAR: CMP DMA,@DAR ;COMPARE LOWER 16 BITS BEQ CMDACKE BN E ETPLOM CSTTES ;I0 00+2UFNB#I4, %MP CD:WRCH %4F,BUIN #DD A %4L RO T UNCOD OR WDD;A4 ,%CTRD WOV MO:FLVR O; ;R ROERN AISW LORFVE ONTOU CRDWOR TEAFD REERSFANTRA AT DNY;A RSFENSRA TTADAL NAIOITDD AOR FSTTEO TNETIOU;R ;; ;; UFNZR B RDWOE THR EACL ;+ 4) (LR CR:EACL NETIOU RITEX ;5 %TS R RDWOT EX NROZE ;R EACLE BN E ETPLOM CNETIOU RHE TIS ;0020F+BUIN,#%4P CM: UFNZ ERFFBUINF ORTTA SCHET;F4 ,%UFNB#IV MO: UFZB ;; NGDIEA RREFOBER FEUF BROZE ;R FEUF BUTNP ITADAO ER ZTOE INUTRO ;; Ùý0E BIS #BIT6,FLAG ; CMDAE: MOV @DAE,WORK1 ;FETCH EXT. ADDR BITS BIC #177740,WORK1 ;MASK TRACK AND DISK ADDR MOV FLAG,WORK ;SET UP DISK ADDRESS BIC #177743,WORK ADD TRACK,WORK BIC #177740,WORK CMP WORK,WORK1 ;ARE THEY EQUAL BNE ERADR ;ERROR IN DAE REG TSTB FLAG ;CHECK FOR LAST DISK BUFFER BPL EXTCME CLR DMA ;CLEAR LOWER 16 BITS CLR TRACK ;CLEAR EXT. ADDR. BITS. BIC #200,FLAG ADD #2,(6) ;INC STOCK POINTER MOV SWRDCT,WRDCT BR EXTDR ;EXIT EXTCME: BIC #177774,WORK1 ;MASK ;; ;; ;; RDWOT EX NREPAOM CGO ;C INRD WBR R SINT SE0 1IT BLTHAS YE ; LTHA 4 .+Q BE R ROERN OLTHA ;SR,@10IT#BT BI 1 - S6ME 5 ES M S1ME A S1ME 3 S1ME 1 ED H GESAES MNTRI;P +0T EM 1 3 S1ME K OR W NVCO5, %SR J OND REURCC OORRR;E RKWO4,7777#1C BI E THD EA RCHHI;WK OR,WAGFLV MO 6 6 ES M RKWO I CIASO TRTVEON;C NVCO5, %SR J TADAD BAH TCFE ;RKWO1,AV@SV MO 6 5 ES M RKWO I CIASO TTADAD OO GRTVEON;C NVCO5, %SR J TADAD OO GCHET;FK OR,WVESA @OV M 2 1AES M K1OR WÕý4 EXT. TRACK BITS CMP #3,WORK1 ;COMPARE FOR LAST TRACK BNE AKH ;NOT LAST TRACK EXIT MOV @DAR,WORK ;FETCH LOWER 16 BITS OF ADDRESS ADD WRDCT,WORK ;WILL DISK OVERFLOW BCC AKH BIS #200,FLAG MOV @DAR,WRDCT ;DISK WILL OVERFLOW COM WRDCT ;SET UP NEW WORD COUNT INC WRDCT ;MAKE TWO'S COMP. AKH: MOV @DAE,TRACK BIC #177774,TRACK ;MASK TRACK BITS MOV @DAR,DMA ;LOWER 16 BITS OF ADDRESS BIT #BIT6,FLAG ;REPORT ADDRESS ERROR BNE .+4 EXTDR: RTS %7 ;EXIT ERADR: JSR %5,CONV ;CONVERT DMA REG IISC ATOR DD ACKRA TRTVEON;C NVCO5, %SR J 6 S1ME K OR W IISC ATOR DD ARDWOT ERNVCO ;V ON,C%5R JS 1 RKWO3,RKWOS BI 3 RKWO3,7477#1C BI 3 RKWOG,LA FOV M K1OR WNC I EDNTMERENC IBEE DAD ULHO;S +6 .CC B DRADG INILFAE ATULLCCA ;RKWO2,RKWOD AD ; 1 RKWOK,ACTRV MO R DD ASKDIG INRTTA SCHET;FK OR,WMA DOV M IT BORRR EET;SG LA,FT9BI #IS BR:ERWD ;E INUTROS HI TITEX ;5 %TS RM:DA AD OR WXTNEE ARMPCO ;P CMRD WBR 1 AV,S#2D AD E AV,S#2D AD E INUTROT XI;E AMADQ BE D KEECCHR FEUF BTELEMPCOS ;I2 RKWOÑý8 COUNT TO ASCII DMA MES1 6 JSR %5,CONV ;CONVERT TRACK REG COUNT TO ASCII WORK1 MES1A 2 EMT +0 ;REPORT ERROR HED4 MES1A MES1 -1 BIC #BIT6,FLAG CLR DMA ;DISK ADDRESS ERROR RE-START PROG. CLR TRACK BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;SWITCH 10 SET IN SR HALT RTS %7 ; ; ; ;ROUTINE TO SELECT DATA PATTERNS FOR TEST ; ;ENTER FROM JSR %5 PASEL ; PASEL: MOV PATNU,%0 ;SET UP PATTERN NUMBER MOV WRDCT,WORK ;SET UP WORK MOV #OUTBUF,%1 ;LOC. OF OUTBUFFER T,DCWRP CM T UNCOD OR W+1 ;2 RKWOC IN: NCDIWR ORRR EIND OR;W RRDE WNE B RSFEUF BREPAOM;C1 AV@SE,AV@SP CM: MPDCWR ERNTOI PERFFBUN IUPT SE ;V1SAF,BUIN #OV M ERNTOI PERFFBUUT OUPT SE ;VESAF,BUUT#OV MO T UNCOD OR;W K2OR WLR:CREPAOM C; ;A AT DAD BXXXXXXA AT DODGOX XXXX XAR DXXXXXXE DAX XORRR ETADA ;R NEAN MNGWILOOL;F E THN IEDRTPOREE BLLWIR ROERN AERFFBUN- IHE;T ND AERFFBUT-OUE THN EETWBES URCC OORRR EANF ;I NETIOU RONISARMPCOA AT;D ;; ;A AT DOMNDRA1 T2PA ;3 3030 00:T2PA 200500: 17AT PÍý<CMP #42,%0 ;TEST FOR RANDOM DATA NUMBER BEQ RANDOM ;GO GENERATE RANDOM DATA FILDAT: MOV PAT0(0),(1)+ ;FILL BUFFER DEC WORK ;DEC. WORK COUNT TST WORK ;TEST FOR LAST WORK BNE FILDAT ;LOAD NEXT WORD RTS %5 ;BUFFER FULL ; ;RANDOM DATA ; ; ;RANDOM DATA GENERATOR SUBROUTINE RANDOM: MOV LONUM,%0 ;SET UP R0 WITH 5 DIGITS LOW MOV HINUM,%4 ;SET UP R1 WITH 5 DIGITS HIGH MOV #7,%3 ;SET UP SHIFT COUNT CLR %2 ;CLEAR R2 SHIFT: ASL %0 ;SHIFT R0 LEFT AND ROL %4 ;ROTATE CARRY INTO LSB OF5 0000 16:T1PA 010000: 15AT P6 6363 04:T1PA 636313: 13AT P2 1004 02:T1PA 377717: 11AT P2 2525 10:T1PA 252505: T7PA 070707: T6PA 707010: T5PA 000010: T4PA 673204: T3PA 104513: T2PA 777717: T1PA 00:AT P; NSERTTPAA AT D11RF ;; ENEV . ; ;0 : UMIN H0 : UMON LM RAOGPRT N URET;R %5S RT: ENXG EM DOAN RNE B RKWOC DE M RAOGPRR FOM NUHID OL;H )+(14, %OV M UMIN HINK AC BR1T PU ;UMIN,H%4V MO N GEEXQ BE K OR WEC D AMGRRO POR FUMON LLDHO ;+ 1),(%0V MO M NULON ICKBA0 RUT;PM NULO0, %OV MÉýÅý R1 INTO ROL %2 ;ROTATE CARRY OUT OF R1 INTO R2 DEC %3 ;DECREMENT R3 BNE SHIFT ;CONTINUE SHIFT LOOP ADD LONUM,%0 ;ADDN IN NUMBER TO MAKE X 129 ADC %4 ;PROPOGATE CARRY ADD HINUM,%4 ;ADDN IN NUMBER TO MAKE X 129 ADC %2 ;PROPOGATE CARRY ADD #1057,%0 ;ADDN LOW CONSTANT ADC %4 ;PROPOGATE CARRIES ADC %2 ;PROPOGATE AGAN ADD #47401,%4 ;ADDN HIGH CONSTANT ADC %2 ;PROPOGATE CARRY ADD #6,%2 ;ADDN HIGHEST CONSTANT ADD %2,%0 ;REPRIME R0 WITH HIGH DIGIT ADC %4 ;PROPOGATE CARRY