; DDCGTP.S07 11-SEP-73 ; 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 $@ @8P@.j ,@xvrtp02468:<>},&@m,L@ H ``% %,r@`Q ULX,@ZM``%x_@B,@_fC_E_F_>G_G,@_I_lK 7 -, A7 7 7  Up,0AwvX 8%kU%7&,VA.X %k%7U>X 0,|Ar; MAGTAP.326 30-JUL-73 ; MAGTAP.325 ; 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 ;*************************************************; MT4T.02 8-MAY-73 ; MT4T.01 2-MAY-73 ; MT3T.16 1-MAY-73 ; MT3T.15 27-APR-73 .TITLE $$TS30 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: R4 = %4 R5 = %5 SP = %6 PC = %7 SREQ = 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 ;PRO %lfw w WX ,A%Lw Dw @]<h`X %k,,A%7$oX E %x,A>:*X h%@,BX R%% Uw ,:BEpX *%k%7U@O,`BX %k%7|U X$,B %kd%7\U5pz5b,BrWh7 7  ,w jjV,BWW5BBw,B,C ********************* ;* 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 R .WORD 0 TST A BNE A+2 .ENDC TST ERROR(R0) BEQ D JMP MTESE .IFEQ EX-3 B: CLR A RTS PC .ENDC .BOUND C: .WORD 1 ; THREAD .BYTE 4,EX ; MAGTAP, EXIT TYPE .IFEQ EX-3 .WORD B-REL ; RETURN ADDRESS FOR EXIT 3 .IFF .WORD 0 .ENDC .WORD DN,0,0 ; DEVICE N CESSOR STATUS REGISTER TPB: 177566 ;TELETYPE 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 ST,DC,jCxX7 7 7 w ,C. Unh bV,CV w  \U82,C ,,\ XT>w 7 8,D7 2B"@$U p,(D  w Nte,NDX7@C~UX,tD  ,Dw pw jVWW@ B~,D7 tr`XOUTINE PERFORMS THE ** ;* FOLLOWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) ** ;* 3 READ ** ;* 4 WRITE ** ;* 5 WRITE FILE MARK ** ;* 6 REWIND UMBER ERROR WORD SYSTEM .WORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ; ; ; ; ; ; ;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 ^@P0 * ,DLVNw %?8 2wn, E5wN7 x7 7 S,2EXX %h,XEU w ",~Ee %7 7 7 ,Eh@vUVP J l,E>tw hLWt@$ ~ ,E7PwN8w  $%@5,F7 x7 w UX@, 8,F  Z,bw -L! DP!,FH 4w %,5?$ 7 !, GU?e?5w7  @,FGx7 7 XU,lGD@  w ,GEteEB`  ~,Gw % b%?\7 V PLe,G _x5U xw 8w :,H@7 ? ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* CALL MAGTAP(IADDR(LIST)) ** ;* TSKEND-TSTACK/100 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR3 - 5 .WORD 0,77406 ; TPDR 6 - 7 .WORD 0,0,0 ; TPAR 0 - 2 .WORD 0,0,0 ; TPAR 3 - 5 .WORD 0,7600 ; TPAR 6 - 7 . = . + 12. .CSECT MTTES REL = . TSTACK: .BLKW 200 MGTS: MOV #1000,MTRCC ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ  ; 14 & 16 ARE NEEDED FOR ODT BEQ 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 @XUU~,*HX w " D,PH7  w g,vH ?hx r ,Hfw @h%UU~ ,HpwzUUvw @%UU~ ,HLUUVwPw w5U,Ixw (w X*~,4IX7 ? ,ZIw @7 ?h,I xw @h%,I*~ *ww  ** ;* 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 ** ;* +1 MTESTE MOV #4,R4 ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,2$: MOV #DKINT,(R0) ; INTERRUPT 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)+  ^w ,In@RhT7 L( ")DILw t ,>J@h%*~ *ww , ,dJw57 7 Jx/,Jw 2w vx5@XC5Rl,JhH5 `Xd2G5,J(>56*h:E(,Jw 8 E55,"Kw 0w E %53,HK  w\e%$7 j,nKE6LzXw ,KJE* 0 RETURN ERROR PARAMETER (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 ** ;* 6,0,0 ; REWIND LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,! ; JMP MOV #ADT3,(R0)+ ; 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 #1"$  EzE 5,K    `ZvXw XRU ,K*C5, G5-,Lhw $E5,,Lw (w 5Ew *@aWw ,RL(@mWw &@WUWmWaWW 5n,xLw7 7 5E-,LexXElwff&N,L`EtVE@` NB  ,LwVEPLE rU>,M,E&w  D@mWWE4,6M % # +26 COUNT ** ;* +30 STATUS ** ;* +32 -BACKSPACE FLAG REPEAT COUNT ** ;* +34 RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: $3,200,0 ; READ LMAC 1,1,MWRIN,7,0,51 ; SPACE MT175: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,-2 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LMAC 3,1,MWRIN,3,200,0 ; READ MT200: LMAC 3,0,MWRIN,7,0,2 ; SPACE RECORD LMAC 3,0,MWRIN,3,200,0 ; READ LMAC 2,3,MWRIN,11,0,0 BR MTEND MTESE: NOP ; USE FOR ERROR BREAK POINT MTEND: %37,(R0)+ ; JMP 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 #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 &Ew D@WW,\M w D@aWmWaWw D@#,MuWuW5@|~Ew D@,MWFWWUR5<t 9,M>5(5U5 g,M 55E/,NE7PWtmtO,@NB`  U@5@e5,fN7  eEw5@w ,N*@aWw F@mW8WmWaWE@v7 z7 ,Nt5Fh^zX%"8O,N hPN' ** ;* ** ;* 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 EMT 4 ; EXIT ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 37 .WORD 0 .BLKW 200 . = . + 200 TSKEND: .END ) 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 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 * D B m8D ,Nm4B e/D B eOB e`D 7 1,$O7  HF8qUU,JOBgP07 Xh/,pO -eeU,Om5 @,OdE]|vw fD@aWw \F@mW,OPZw LD@WBJw <D@W,P:E4w &D@WWWmWaWWW5f,.PXh ~D eh,TP!x U7w jVW,,zP7w jV+ ** ;* 10 ILLEGAL I/O FUNCTION 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 ** ;* ,; MT5T.02 8-MAY-73 ; MT5T.01 2-MAY-73 ; MT3T.16 1-MAY-73 ; MT3T.15 27-APR-73 .TITLE $$TS35 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: -;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 %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. .W,WWW,,PUfVPNJ&v r,P%&le `$7 " ,PJXD@:7 62"Q07 ,Q7  &Xw XC5,8QG5 ,^QQ7 U ,Q  lEfXwp8,Q02R4 RN_6EM,Q_80:7 p5P5P$*QRXVTR,"S U7 7 *S/ =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.04.72 ** ;* ** ;* 0 .WORD 0 TST A BNE A+2 .ENDC TST ERROR(R0) BEQ D JMP MTESE .IFEQ EX-3 B: CLR A RTS PC .ENDC .BOUND C: .WORD 1 ; THREAD .BYTE 4,EX ; MAGTAP, EXIT TYPE .IFEQ EX-3 .WORD B-REL ; RETURN ADDRESS FOR EXIT 3 .IFF .WORD 0 .ENDC .WORD DN,0,0 ; DEVICE N1CMP #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 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 2SЬD,HS̬C5 UD,nS7 7 hSG5|r c,SwUjSlSd],S w `7 X7 RSdTV,S2.G5& *,TUTT  z,,TU 7 7 ,RTw fX.TC5V,xTG5|r X4,T\hTbL\DV<,TPN*0X,3 GULF ELECTRONIC SYSTEMS ** ;* ** ;********************************************************************** ; .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 FORO4UMBER ERROR WORD SYSTEM .WORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 5BIC #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 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,TEXBUF6",T5U @<8Eh,U27 .7 *7 &7 "7 ,6Uw w w EhU,,\U-w D@Ww 6@HWp,UFWHWWw D@Ww F@Ww ,U6@HWFWHWWW%.e,U7L@F%<"4 53,U@    ,Ve7 %w,A,@VB`"Ee0E7 7 7  3,fV @|7 p7S2 = 0 MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERROR PARAMETER SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14H .PAGE ; TASK HEADER .WORD 1 ; THREAD .WORD 5 ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD MGTS-REL ; ENTRY .WORD 100,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD 0 ; CPU STATUS .WORD 0 ; STACK POINTER .WORD 0 ; ARG .BYTE 6 .BYTE E ;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 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 F,Vxtt%j WEL7 H7 D7 ,V@%J=2@W4pEP,Vjw w w mTEt,Ve @ C~%DATA ERR @%STAT],$WUS ERR @%EXTRA BKS @%DK ADDR ERR @%@ A,JW ERR CNT @%RANEX ERR @ DAR @ !,pWDAE @ DCS @ HRD ERR@ W,WRD CNT@ WRD ADDR.@ GD DATA,W @ BD DATA @?@/@ WRD1 @ ,W WRD2 @%UNIT NO.@ @ READ @%CPU BK,XGRND TIMED OUT@%OK!@%DATA TEST ONLY? @G. ;KPAR6 VALUE FOR 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""""""" """""""""""""""""""""""""""""""""""""""""""DDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADD7B B B B B C.{ f.K FoQ8}dӋ H+T}  $T} ( X.{ Jg ^Zf h\l vj p  $DnffffffffffffffFDDDDDDDa ͋,L  B8w&B ` % & }&*C$$Βe E%>k  aʋaՀ$ & * P$ ΋Ί   ΋   d Ί  ( 1'u  Q$f $5@ U C΋ Cb M΋U@ U &  B" .&0 M &0 & M 0 &I 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 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 A,.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@iK = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 ;COMMAND REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 172520 ; STATUS REGISTER MTCOMM LTSKEND-TSTACK/100 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR3 - 5 .WORD 0,77406 ; TPDR 6 - 7 .WORD 0,0,0 ; TPAR 0 - 2 .WORD 0,0,0 ; TPAR 3 - 5 .WORD 0,7600 ; TPAR 6 - 7 . = . + 12. .CSECT MTTE5 REL = . TSTACK: .BLKW 200 MGTS: MOV #1000,MTRCC ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ MNSWER 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 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 REGIN; DDCGTP.S08 TEST DDC SET IN BYTE 0 OF SW REG , BACKGROUND BYTE 1 OF S ; DDCGTP.S07 11-SEP-73 ; 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=1000O= 172522 ; COMMAND 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 = P MTESTE MOV #4,R4 ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,QSTERS 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 ;***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 ADDRESR0 BIT13=20000 BIT14=40000 BIT15=100000 R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 SREQ = 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 TESS40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 ; INTERRUPT ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF T6,0,0 ; REWIND LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,US (SECTORS) 1 TO 77 ; ; ADT2: MOV #1000,%6 ;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 OCVT) ; ;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 ;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 RWREWINDING MTUIC = 10000 ; 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 X3,200,0 ; READ LMAC 1,1,MWRIN,7,0,51 ; SPACE MT175: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,-2 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LMAC 3,1,MWRIN,3,200,0 ; READ MT200: LMAC 3,0,MWRIN,7,0,2 ; SPACE RECORD LMAC 3,0,MWRIN,3,200,0 ; READ LMAC 2,3,MWRIN,11,0,0 BR MTEND MTESE: NOP ; USE FOR ERROR BREAK POINT MTEND: YCURRED 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 ;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 ZEGISTER VECTOR: 204 ;INTERRUPT VECTOR ADDRESS STATUS: 206 ;DISK INTERRUPT STATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ; ; ; ; ; ; ;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 ;ERRO[ENABLE CLEA = 10000 ; 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 EMT 4 ; EXIT ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 37 .WORD 0 .BLKW 200 . = . + 200 TSKEND: .END ]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 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^R 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) WORK: 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) ; HA_ .IFF MTLAST: .PACK MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE .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 `; THIS TASK READS CARDS AND PRINTS THE CARD CONTENT ON THE LINE PRINTER ; .TITLE TASK62 ( CARD READER AND LINE PRINTER TEST TASK ) .DEF TASK62 ; ; ROS I/O LIST MACRO .MACRO IOLIST DEV,EXTY,XIT,ETSK,LEV,DATB .LIST MEB .WORD 1 ; THREAD .BYTE DEV ; LOGICAL DEVICE NUMBER .BYTE EXTY ; EXIT TYPE .WORD XIT ; I/O COMPLETE .BYTE ETSK a 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 #7,R0 ADD #OUTBUF,R0 MOV R0,WORK4 ; SAVE FOR CLEAN UP MOV #100,R1 2$: MOV #-1,(R0)+ SOB R1,2$ WRCADT: BIS #bLT 3$: ADD R2,R0 ADD R2,R1 CMP #14,R0 ; 14 & 16 ARE NEEDED FOR ODT BEQ 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 INTERRc ; CURRENT UNIT NUMBER .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 d ; ERROR TASK .BYTE LEV ; PRIORITY LEVEL .WORD 0,0 ; ERROR PAR / SYSTEM .WORD DATB ; DATA BUFFER ADDRESS .WORD 0,0 ; SYSTEM .NLIST MEB .ENDM ; END OF I/O LIST MACRO ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 CREAD = 24 LPRNTR = 25 ; TASK62: T10: MOV #CRLST,-(SP) EMT CREAD MOV #CRLST,ReBIT8,@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 ;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 TfUPT VECTORS FOR D.D.C. DISK MOV @#SREQ,R0 ; GET DISK NUMBER FROM BIC #177770,R0 ; BITS 0-2 OF SWITCH REGISTER ASH #2,R0 ; MULT BY4 ADD #130,R0 ; ADD IN VECTOR ADDRESS FOR UNIT 0 MOV R0,R1 ADD #2,R1 2$: MOV #DKINT,(R0) ; INTERRUPT ROUTINE MOV #200,(R1) ; PSR ADD R2,R0 ADD R2,R1 CMP #170,R0 ; DONE BNE g;REWIND MULTIPLE UNITS .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 h0 MOVB 3(R0),R1 ; GET EXIT TYPE CMP #2,R1 BEQ T60 ; BR IF 2 CMP #1,R1 BNE T30 ; BR IF NOT 1 T20: CMP (R0),#1 BNE T20 BR T60 T30: CMP #3,R1 BEQ T40 ; BR IF 3 HALT T40: INC T80 T50: TST T80 BNE T50 T60: MOV #LPLST,-(SP) EMT LPRNTR MOV #LPLST,R0 MOVB iHE 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 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 j2$ ; 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)+ ; SECTOR ADDRESSING TEST MOV #137,(R0)+ ; JMP MOV #ADT4,(R0)+ ; TRACK ADDRESSING TEST MOV #137,(R0)+ k ;SKIP +-N FILES .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 .Wl3(R0),R1 ; GET EXIT TYPE CMP #2,R1 BEQ T65 ; BR IF 2 CMP #1,R1 BNE T35 ; BR IF NOT 1 T25: CMP (R0),#1 BNE T25 BR T65 T35: CMP #3,R1 BEQ T45 ; BR IF 3 HALT T45: INC T80 T55: TST T80 BNE T55 T65: BR T10 T70: CLR T80 RTS PC T80: .WORD 0 CRLST: IOLIST 2,2,T70,0,0,DATA m 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 SET IN SR BEQ ADT3 JMP ADT2 ;BIT 11 SET LOOP ON TEST .PAGE ;***** ADDRESS TEST ***** ; ;WRITE EACH UNIQUE ADDRESS ON ITSELF FOR TRACKn; 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,(R0)+ ; DATA PATTERN TEST (WITH OPTIONAL BACKGROUND) MOV @#SREQ,R0 ; SET UP UNIT NUMBER MOV #DCS,R2 ; SET FIRSoORD 1 .IFZ FOROS2 .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 LPLST: IOLIST 2,2,T70,0,0,DATA DATA: .WORD 120,0 .BLKW 50 .END TASK62 q 0 ;THEN READ IT BACK AND COMPARE FOR THE ;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 rT REGISTER ADDRESS JSR PC,SETREG ; REGISTERS MOV @#SREQ,R0 SWAB R0 MOV #RDCS,R2 JSR PC,SETREG 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 s .ENDM ; .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, Rt; THIS TASK WRITES TO DISK .TITLE TASK64 ( DISC WRITE TEST TASK ) .DEF TASK64 ; ROS I/O LIST MACRO .MACRO IOLIST DEV,EXTY,XIT,ETSK,LEV,DATB .LIST MEB .WORD 1 ; THREAD .BYTE DEV ; LOGICAL DEVICE NUMBER .BYTE EXTY ; EXIT TYPE .WORD XIT ; I/O COMPLETE .BYTE ETSK ; ERROR TASK .BYTE LEV ; PRIORITY LEVELuUP 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 #40,DMA CMP #10000,WORK BNE INADv;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 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 wETURN ; IS DEVICE TYPE = 4 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 x .WORD 0,0 ; ERROR PAR / SYSTEM .WORD DATB ; DATA BUFFER ADDRESS .WORD 0,0 ; SYSTEM .NLIST MEB .ENDM ; END OF I/O LIST MACRO ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 EXITN = 4 TTYOUT = 13 TTYIN = 14 DISCIO = 23 DEFINE = 51 ; TASK64: ; FILE I D S10: MOV #TYOUT1,-(SP) EMT TTYOUT MOV #TYIyB-4 CLR WORK CLR WORK1 CLR DMA 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.zCMP #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 %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 { R1,RES2(R0) BLE 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 |NL,-(SP) EMT TTYIN JSR PC,CNV BLT S10 MOVB R1,DFLIST+6 ; SAVE FILE I D MOVB R1,DATA ; FILE TYPE OR PARTITION S20: MOV #TYOUT2,-(SP) EMT TTYOUT MOV #TYINL,-(SP) EMT TTYIN JSR PC,CNV BLT S20 MOVB R1,DFLIST+10 ; SAVE FILE TYPE ; UNIT NUMBER S30: MOV #TYOUT3,-(SP) EMT TTYOUT MOV } AT THE TIME OF THE ERROR **** BR RDTDN ;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 ;~= 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 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  ; BR IF NOT INC 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 PR#TYINL,-(SP) EMT TTYIN JSR PC,CNV BLT S30 MOVB R1,DILST+2 ; EXIT TYPE S40: MOV #TYOUT4,-(SP) EMT TTYOUT MOV #TYINL,-(SP) EMT TTYIN JSR PC,CNV BLT S40 CMP #3,R1 BLT S40 MOVB R1,DILST+3 MOV #DFLIST,-(SP) EMT DEFINE TSTB DFLIST+2 BEQ T10 S50: MOV #TYOUT5,-(SP) INC SECTOR NUMBER CMP #100,DMA ; 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 ; 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 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 OGRAM STATUS REG. SPL 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 EMT TTYOUT EMT EXITN T10: MOV #DILST,-(SP) EMT DISCIO MOV #DILST,R0 MOVB 3(R0),R1 ; GET EXIT TYPE CMP #2,R1 BEQ T60 ; BR IF 2 CMP #1,R1 BNE T30 ; BR IF NOT 1 T20: CMP (R0),#1 BNE T20 BR T60 T30: CMP #3,R1 BEQ T40 ; BR IF 3 BR S50 T40: INC T80 T50: TS;AND COMPARE DATA FOR THE CORRECT VALUE ; 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,ERCOUN 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 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 2(SP),@(SP)+ ; QUEUE THE 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 COUT T80 BNE T50 T60: BR T10 T70: CLR T80 RTS PC ; T80: .WORD 0 ; CNV: MOVB INNUM,R1 SUB #60,R1 BLT CNV1 CMP #7,R1 BGT CNV1 ASH #3,R1 MOVB INNUM+1,R0 SUB #60,R0 BLT CNV1 CMP #11,R0 BGT CNV1 ADD R0,R1 RTS PC CNV1: SEN ; SET ERROR FLAG RTS PC ; T ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT 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 ; 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 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 NT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE 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) ; .BOUND TYOUT1: IOLIST 0,2,0,0,0,O1MG O1MG: .WORD 16,0 .ASCII /INPUT FILE I D/ .BOUND TYOUT2: IOLIST 0,2,0,0,0,O2MG O2MG: .WORD 20,0 .ASCII /INPUT FILE TYPE / .BOUND TYOUT3: IOLIST 0,2,0,0,0,O3MG O3MG: .WORD 22,0 .ASCII /INPUT UNIT NUMBER / .BOUND TYOUT4: IOLIST 0,2,0,0,0,O4MG O4MG: .WORD 12,0 .ASCII /EXIT TYPE / .BOUND TYOUT5: IOLIST 0,2,0,0,0,O5MG O5MG: .WORD 14,0 .ASCII /TASK64 ER #77,OUTBUF+6 ADD #77,DMA 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 $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 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 ROUTINE CMPB RES2(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 ROR/ .BOUND TYINL: IOLIST 0,2,0,0,0,INMG INMG: .WORD 2,0 INNUM: .WORD 0,0 .BOUND DFLIST: .WORD 1 .BYTE 0,0 ; ERROR CODE / ERROR TASK .WORD 0 ; RESERVED .WORD 0 ; FILE I D .BYTE 0,0 ; FILE TYPE (PARTITION) / RESERVED .WORD 20 ; NUMBER OF SECTORS .BOUND DILST: IOLIST 1,2,T70,0,0,DATA DATA: .WORD 0 .BYTE 0,1 ; SET UP WORD COUNT RDTKS: READ ;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 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 ;***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 ;;RETURN TO CALLE- MTEX1: 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 PA; SCFLAG / INOUT .WORD 0,0,0 ; RES / RES / RES .WORD 0 ; RLSECT .WORD 200 ; NWORD .ASCII / TEST DATA FOR SYSTEM TEST TASK64 PROGRAM 1 / .ASCII / TEST DATA FOR SYSTEM TEST TASK64 PROGRAM 2 / .ASCII /TEST DATA FOR SYSTEM TEST TASK64 PROGRAM/ .EVEN .END TASK64 ;INCORRECT DATA MOV #13,ERCOUNT ;SET UP ERROR 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 ; ADT2: MOV #1000,%6 ;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,WORKR'S CAN GO MOV @#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 .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: .IFZ FOROS2 JSR R5,SAVE .IFF $SAVE .ENDC SPL 5 TST NMTREQ BMI MTEYIT .IFZ 4t:L,  `Y !, eUz ,$;zv5wD3,JwGK $pT@=$0| b Z7 T7$4hM *%447K($N *%:55(7' %,*% \      ߕ wjX,EFGHIJKLM :NOPQRST ; SET UP FOR LAST SECTOR IN TRACK 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 1 ;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 ;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,$KT11C 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) MO+,  zz,zf& m&F, %U $  a0 ,4a ^  ^rT,ZrVrT  &)0 ,  ? ߐ6 e , e @f w@f 6 ,ߐ ,  &f,%U  F  #4,WRDCT ; SET UP FOR MINIMUM X-FER 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,SERCOUNT ;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 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,ERV @#MTSTAT,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) ;PLA,> & Jf errV2R,dT2& `  2 e  T, ) XR6 , , E@f&fP~7 ,7  f&f&,"& &  B 0e,HW @w T   ,n   &fw, 5 :2 1, 8 (" e 5TAER ;REPROT CONTROL ERROR ;****WRD1=DISK CONTROL 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. **** ;*COUNT ;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 #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 MOVCE TASK NUMBER 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 N,5 5@  &  ,]<] e5   Z {,, &f ,R   d ^Q,xw    ,7 .wF $w<,w  #c#  ,w " & !n!!!*""F8 L!!!"*""<,T\ w  c,z ***WRD2=DISK ADDR. RECEIVED FROM DISK LOOK AHEAD 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 ; #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 ;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 **** ;****WREXT LIST ADDRESS .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 [D YpRD ,K H W   A0 W , ;0 & < 0F,-UH)  -,-7 $ i,8  0Pw ,^TfG  eE,w & ww  xv@,T R   6P7P=,   w & & t, && > %& 8, 7ԩ ;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 #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 MD2=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 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 ;RETURN 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 .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ  $x,B  TfG w  y,h z,  P T d N,  Hw x X 7z7t F,  UR  7P, T p` .  ,!TU R 7  j ^,&!Pt  EUU Rz,L!  7PT p`7N,r!   Pt  UR _,! 7Pt F7P ,!UR0OV #100,R0 ; SET UP DATA 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 ;C@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 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; 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 (SP)+  7N D ,!  U_TRU Tv, "5@P  p 7 ,0" PWt T x,V"  U  U R ,|"     f8,"E  HE@UR ),"  E ERPR5P," e 35,# /tRUA 0\ ,,:#  5R  6X#5P>,`# $ ONTROL STILL BUSY TST @DCS BPL SPIL2 MOV #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 O AND COMPARE FOR THE ;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 WOR 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 ; R5P ,# & ^ wuQ i,#EQ_Vp  _T0 ,#LP74 .7 (7 ""# ) I#,$ &B&R),:$R) &' \7 503,`$ tЄ ,$f&VTRF'&&&&& ,$ M) F L ,$ DP'зϷπF,$<G50 CF THE ERROR **** BR SPIRAL SPIL3: MOV #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 K,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 #40,DMA CMP #10000,WORK BNE INADB-4 CLR WORK CLR WSET 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 ENTERED AFTER Dww*,%F &*R) !,D%50F U<ڂ,j% w 7 R)fi"% w  #0e,,%&t70π EU6G,%&t7 π EU6%,%&fWtEAWt E`c,&v&f# &' l,D&WtE@`$Wt΀ EV,j&`v x&f&|,& &' WtE@`7$8΀ON ERROR CMPX1: MOV #100,R0 1$: 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. ORK1 CLR DMA 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 ERA 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 ASH #4,&Et7`(ζEU,&&f& &' Wt,'E@`7$̀Et7`ͶE ('U,D' h,d' 2*' '',+w ×& w6 7!r,.+R) R)m)i ' ],T+R)ߐ4*W  !,z+S *r < fb' 6'w,+1'b' ; ;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 #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)ROR **** BR RDTDN ;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 ,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 MOVBR)4)2 74*7,+4* ߐɷw 8 e,+e Lwv  |,, 6 &&f :k,8,  i7 ,^,7 zfv,, '  6 6p,,×7 7  7 ,, R)!!R)ߐ&& ?z,,R) J`'1'b',-1'`'ߐH& ,B-w6—#+ SOB R0,1$ MOV #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 X CMP #100,DMA ; 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 #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 ; R0& T1R)7 7 ,h-7 7 7 0 W  ) R),-lf ;wR)w |P7 M$-R) y-H.H.H.H.H.-H.-,--H.H.H.-& . 7\) L,-)R)R)&& z?,.R).W"1f $D.w cd.c,t.cT.d.t.Uw TR,. Ew  !7 |m,. &'  R)  k D g,.HdR)1SPIL: MOV #100,WRDCT ; SET 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 X2THE CORRECT VALUE ; 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 = 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 ;BB `'X ,'], / MW"I `'r`',2/`'b'`b'2 b'2 b'& Lr,X/b'2 b'2 b' 1 $,~/)R)&& > 0R)v,/Bŷ71 ĕ=1N2  4,d7w T4 W<;35;;A;pV,7+' & -U5,70 )C `0  ,7 ;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: 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 EIVED FROM DISK LOOK AHEAD 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 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) DEC NWOR5c,7@;A<& & N & ,"8&b2 b2 ( 4`2,H8 `2a  b2f D,n8`D` %I2R2YD2 ,81P2F2(1N2@T2wX2>765\2,8.`24   N2=1f2,8@1  J@V2wZ27^2,9b23 1M21K2N2D1A5@<,,9 =1f1R2 N21f2!,R9ÝO2 A17I2w0A,x9F2@T2wX2d@V2w BIT #400,OUTBUF+4 BEQ .+6 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 +10 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 #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 D(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 INZ2XT,9R7 P 5@;w< 5;,9|5;x5 ;U;=1=1 ,9;pw Bteb2 @e`2e,:b2 :J   ,6:F23F2F2G2G2H2H2 E T2T2$\:V2V2X2X2Z2Z2`2`2b2b2,z:\2\2^2^2 F23G23H2 ,:}1f2 : 3O2P2,:P2 -1 \E =1,:Q27L@V2wZ2^1N2v(;f& R20 ;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,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 I ; SET UP DATA 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 TSCB 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 ; ,4; w    & D ĥ+ ĥY,Z;-ĥ   D0 Wq,; a   vw v u ;w t& & & L wj; ;<; <; <;<;+<;<;<;<;<;<;<;<; <;"<;$<;&<;F 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 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: JMPT @DCS BPL SPIL2 MOV #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 INTERRUPT ROUTINE MRPRC: MOV COUNT(R0),R1 MOV @#MTBCNT,R2 ; PLACE CONTROLLER REGISTER IN R3 BIT #40000,@#MTSTAT ; TEST END OF FILE BIT BEQ MSPRC4 DEC R2 ; DO NOT COUNT THE E.O.F. AS A RECORD MSPRC4: TST R1 BMI MSPRC5 ; BR IF COUNT IS NEGATIVE NEG R2 MSPRC5: MOV R2,COUNT(R0) SUB R2,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC (<;*<;,<;.<;0<;2<;4<;6<;8<;:<;<<~;><|<@<z<B<x<D<v<F<t,H<  y &'  f,n< U0 ,<ffffffffo,==) ERROR XXXXXJ#= XXXXXX XXXXXX XXXXXX XXXXXX ?,======w @~,= w *춅f ,> h 7^ -UL,6>) w  7 $,\>rBf Bw = 7 7 ,>,-(R5) ; LOAD WC NEG (R5) 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 #100,R0 1$: 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 OFIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: =f& C V  ,>A)f 6/$,>=  &> 0 E  ? &f&MWh,(ǀ@,N 8V2R)r4*x,t 4.   r'e' ,,0?'d w 0? Օ+ W,V? d 0B` e0  w |?%Օ- ҋ,? 0& ;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 MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV 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 #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, 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 MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: .IFNZ DATUM MOVB #1,DRNEW   g,?UUU ,,?.0Ŀ&괟t,@B tδȴ*(@@68@{$<@8@:@ V@] X@[ Z@Y \@W ^@U `@Y a@U b@T c@Sd@f@,@@*jk`AoC@ $C &C (C *C,,C 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 BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@1$ MOV #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  .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 LIST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIN,CId\ RCJ77 7CsrK7 ^,KwBW JDw jT,K2,w R& ww P؞U,KTLJ_ BI ,K5,-456 (L ewR-w-l@L(TL ك vtE0P(,vLEPd ZQ PWf},L & " &J$JK  ,LB ), &!"1 WD,%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 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 ;PROPOGIND 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 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 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 ; TEST TUR BIT BNE MTIN7 DEC MTDEL BNE MTIN6 MTIN2: MOV #11,R4 RTS PC MTDEL: .WORD 7000 ; .PAGE ; PLACE BUFFER,Lf X 2ww ܱ5Ա,Mαw 058,4M57 w@J w0ZM1~l&dMYzMzM%,NdAA!A,*N0PRRR&PNbNbN@,Nw . w & w w ,Of օ1 F %|,wH 7 7> Q (Q7y&Q7 PN  pNx,Qz `r ŜE `Z-\9$QRHr@e < Rb-^: , Mv, RM 1 wj 8`RlFR PN *\R  m,RR   w$3 7(RwDS%RDCMP: 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 DISK ADDR MOV TRACK,WORK1 ; ADD WORK2,WORK ;CALCULATE FAILING ADDR 1$: BIT #177700,WORK BEQ 2$ INC WORK1 SUB #100,WORK &T ; ;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: 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' 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 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE (bSx#&RjSp@ &Rzw$*R\PN p z B L & S. @ N <0S,,S& D L 2Dw œE@J,RS"Nl3 Հŀ #,xS1w   1 D,Sw 1S  * ,SEWq Ca 3 B e  ŜB,SEq eB 7 D r 8p"T epN.C 0 ;8 i,,T4Ks Հ,RTs ) BR 1$ 2$: MOV FLAG,WORK3 BIC #177743,WORK3 SWAB 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 ;FETCH 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 * BEQ .+6 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 #B+ 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 ,@"NlBE^xThVVVW TV+hVVWV8-4VVW V/VVW VF-"VVWV.VV WV-VV WVVV W VnVV WVVV WVVVWVt2VVW V3LVVW - 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 ZBUFE ; ZBUF: MOV #INBUF,%4 ;FETCH START OF INBUFFER ZBUFE: MOV #4000,R0 1$: CLR (R4)+ SOB R0,1$ RTS %5 ;EXIT ROUTINE ; ;.IT9,@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,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 ; MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END 0VPJVVW V:?VVW"V4;VV!W$V}VVW&V{V VW(V=HVVW*VlCVVW,VuVVW.VZYVVW0VqVVW2VNkVVW4VflVVW6V`/VV0W8V`YVV0W:VgVV3W x1 ; ; ;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 CHWRD ;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 2 ;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 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 ; ;3Bt:>~X Z VcVV!W@V^/VV"WwBV^)VV#WvDV^!VV$WuFV^VV%WtHV^VV&WsJVWVV'WrLVUVV(WqNVSVV)WpPV_*VV*WoRVD`VV+WnTVMVV,WmVVN VV-WlXVNVV.Wk5SUB #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 WRITES 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 6ENTER DISK HANDLER BY 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 7 gg @\g}~  `Y  eUz;zv5wD3wG[~XK T@=0| bZ7 T74hM *%447K(N *~%:55(7' *% \      ߕwjEFGHIJKLMNOPQ~HRST8ZVOVV/Wj\V OVV0Wi^VCVV1Wp`V?rVV2WobVdCVV3WdVjarVV4WmfV aVV5WlhVUVV6WkjV?VV7WjlVlDVV8WinVO"VV9WhpV1VV:W_rV/VV;W^tVaVVWczVja\VV?Wb|VDWVW@Wa~VrVWAW`VdCzVWBWWVj_VVWCW^,TwTwZ 5f&F U,Ta  ?EVv,TV7W 7V}@WtEE,T ~<hf,"U`&E\EatE&,HUEt`EU֋,nU tE E=CT 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+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 >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 MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV WORK MES2 6 EM?   )~ XR6   E@f&fP~7 7  f{~&f&& &  B 0eW @w T      &f~w 5 :2  8 (" e 55@ 5   &  ]~<] e5   Z  &f  @t`*,U EU &&77,U 0C~eE&U0 (U w LѦ ^s,DWN L;hMH*Ka@i NNsq*jWN%le@R8xXC^_p 8*WHw lD\@sP@L R@&@A&`;*WMm'NO',N'sdM'L fM' M(` *W"N2'4!;`@49p(:<})_MQ;Mp&6*W^MW^0Xs8@YYqT@Y!T6NYe;hfp*X?fY'[g4"?;}G'4* ` R)s' BX'LXX~^ABR 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 XINERR JSR PC,BCKGRD BR XINCW-4 ;REPORT BACKGROUND TEST TIMED OUT XINERR: MOV #340,@CSR BIC #BIT4,@CSR ;CLEAR TRACE BIT EMT+1 TIMO HALT ; RTIX: RTI ; RDCS = 177460 RWC = RDCS + 2 RCMA = RDCSBT+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 BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@SR BEQ .+6 SUB #2,C  d ^w |~   7 .F $,>Z0  HXsJX3 Z,dZXX3 ZX`Xs\X3 ^X E + 4 RDAR = RDCS + 6 RDAE = RDCS + 10 MTS = 172520 MTC = MTS + 2 MTBRC = MTS + 4 MTCMA = MTS + 6 ; BCKGRD: MOV R1,SAVR1 ; SAVE R1 TSTB RDCS ; READY BEQ DATUM MOV #400,@#RDCS ; CLEAR MOV #-200,@#RWC ; SET WORD COUNT MOV #RFBUF,@#RCMA ; SET INPUT ADDRESS INC DFADD ; SET DISK ADDRESS MOV DFADD,R1 MOV R1,@#RDAR BIC #1777F(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,OPDSEL OPDSEL: BIT #BIT7,@SR ;DOES SR CONTAIN TRACK # BNE .+4 RTS G 0Pw T;~`fG  ew & ww  xv@T R   6P7P  U~ w & &  && > %& 7 $ TV~P fG w  z,  P T d  Hw x X 7z7t F UR x~  7PT p` .  TU R 7 Hhq  ,Z w0w  $ HXM`XLX >,ZʀJX  hq  ,ZM`X2LX eLX  2NX,ZXX)&  XX,"[& f&XX `X,H[  LXe(LX Fʀy,n[  wVsJX`X3 XX3 ZX,[hqs\X3 ^X  M 3 HXY,[  M ^X%^X X z M`,[Y `w,Y N V3 ^XY&,\\d | MC fJXI74,R1 MOV R1,@#RDAE MOV #5,@#RDCS ; READ MOV SAVR1,R1 DATUM: CLR MTC BIT #1,@#MTS ; TAPE UNIT READY 1$: BNE 2$ RTS PC 2$: BIT #2000,@#MTS BEQ 3$ MOV #240,1$ RTS PC 3$: MOV #1000,@#MTC ; CLEAR MOV @#OUTBUF,@#MTCMA ; SET BUFFER ADDRESS MOV #-10000,@#MTBRC ; SET BYTE COUNT MOV #5,@#MTC J%5 MOV @SR,R0 ; FETCH SW BIC #177600,R0 BIC #177,TRACK BIS 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 K j Pt  EU~@!U R  7PT p`7   Pt  UR  7Pt F7~!P UR0 7N D   U_TRU T5@P  p 7 ~0" PWt T   U  U R      fE ~"  HE@UR   E ERPR5P e L`XLX ?,,\~ɀ  dX  ^X,^X ,R\d 2  wf&f[,x\f& VYZXAaes!\XB3 bX D! c,\! 3 VY bX % !3 VY  ^ĕ ,\ R  s!\X5ЕsZXVYA,\  3 VY bX 5o,]  6 & `3 XY ,6] @,\]& 5 55 Yu,] 3dX    fX),]Y\&d fVYM ; GIVE WRITE COMMAND RTS PC DFADD: .WORD 0 ; DISK ADDRESS SAVR1: .WORD 0 RFBUF: .BLKW 204 ; RF11 INPUT BUFFER .PAGE ;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 #10N ADD R1,R2 INC R2 MOV R2,WORK1 ; SET UP WORK1 IN CASE OF AN ERROR COMDAR: CMP R2,@DAR BEQ CMDAE BIS #BIT6,FLAG CMDAE: BIT #177700,R1 BEQ 2$ SUB #100,R1 ADD #1,TRACK ; USE ADD RATHER THAN INC FOR TEST PATCHING BIT #177000,TRACK BEQ 1$ CLR TRACK CLR R1 ADD #2,(6) ; INC STACK POINTER 1$: BIC #177700,R1 2$: O3 /tR~ #UA 0\ ,  5R  6X#5P $ R5P  & D~#^ wuQ EQ_Vp  _T0 LP74 .7 (7 " ) ~$I &B&R)R) &' \7 503 tЄ ~$f&VTRF'&&&&& M) F L P,]B e^00Q,]& zԅVYwwwy ^, ^VY@aAa !B@JX`Xw ,0^f CqBa fX,V^ 5 f ԅ|^1 7  Z 82UCHKDAT: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW 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 CHECKV %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 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 COUWEt7`(ζEU~&&f& &' WtE@`7$̀Et7`ͶEU f~X' ''~'~H(X,`l Z,`&f& # ,"aW <7Ξwʞ7 ƞ7 ž P],Haw76 &f,na& F5 7x= ,a:7 p 3 0el +D,alCt 7*w&",a7EP6 b  ,b],:bEU0~E|UvEjUP,`bdEbU\ EPY DISK ; ; ; ; ; ; ;POWER FAIL TEST #2 ;DISK ZERO ;WRITE COMPLETE DISK WITH 125252 PATTERN ;REPORT "OK" ;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 #PWRDZNT 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 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 [~(~8) ~)~(*\U@JEHU2,bBw 7 7М   Db ,b  5qb W !5  ,b ^V NNEJ  5,bqbw ܇U.,c`,6c<,\c,c$pcccc ,cc,c$pdd>dd ,d]N,24 ;SET UP POWER FAIL VEC. MOV #340,26 CHKDSK: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT ;WAIT IN BACKGROUND 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 ;T^ ;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 PROGRAM 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: 1252_/~*w ×l~+& w6 7!rR) R)m)i ' ]R)ߐ4*W  !S *r < ~+ fb' 6'1'b' R)4)2 74*74* ߐɷw 8 ee Lwv ~, 6 &&f : `a,4d=,Zd,d,d,d,d,eX,>e0,de ,e,ecNccdaWO SECONDS NOT UP GO WAIT BR PWRFL ;GO CHECK DISK ; ; ; ; ; ;ROUTINE TO WRITE THE COMPLETE DISK ;WITH 125252 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 #b52 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 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,@SAV1c i7 7 zfv~, '  6 6×7 7  7  R)!!R)ߐ&& ?M~,R) J`'1'b'1'`'ߐH& w6—#& T1R)7 7 7 7 ~p-7 0 W  ) R)lf ;wR)w |P7 MR) y-H.H.H.H.H.-H.--H.H.H.-& x~- . 7\) )R)R)&& z?R)dBdddd:exe$e r,e E w"OJ E `w,O @7bK`K xK XK efg,fT 0R)vBŷ$ D,h $  R) ,iR)3Xne?,Di33e e  w`,ji e wA ^w(Z,i L1R) 1 'Y'V7 -,i e zGeBeY'/,i   Eeʋ  ,j w~E <,(j    Y'ҁw_,Nj Be 8mINTERRUPTS MOV #177777,@WC ;SET WORD COUNT -1 WORD MOV #OUTBUF,@CMA ;SET UP CURRENT ADDRESS MOV @SR,@DCS ;MOV 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 SWITCnE 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 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 TEoptrv22,20@2:~ 20B2X90D2; w nl   G2&W~2F·@w f , "·w B & pwG25T2X2F2ЀF2 xw  ~3 B  H2H25V2Z2F21F2w EE O2D2 I2DN2 |31O2wJ34~35&545N5`5n5|555555J2WJ2H@T2wX24D\2w`2, p&8,tj 4 w%e l ,j U 22 w,jz 4 e3 0 e,j  fע׬R) , k bCe w6,2k `  R)w: 5-컛,Xk1ڻ R)!,~k|0& & VY' LʕR) ,k `'p'b'p'`' @C,kY'  Be   E,ke  AqH REGISTER AT ANY TIME ;SR6-0 EQUALS THE TRACK NUMBER ;SR9-7 EQUALS THE DISK NUMBER ; STAMP: BIS #BIT8,@DCS MOV @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 rST 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 CHWRD ;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 @ACs -m=1  1 N2wf2  =1=1~4F2 & w && w @T2wX2 )& 9  1F2 `2 e`2 ~x4`2F2& XX25T21G2e`2& 2Z25V2 w1H2F2J2f2 $ @V2wZ2B^2O~4wb2E5 , N1 wN21J2 1N2Q2 1N21Q2U1N2J2^1~h5N2}L21N2J2 1 N21N2w 11t ͕AW,lwEA)A*E ,j~8765\2.`24   N2=1f2@1  J@V2wZ27^2b23 1M21K2N2D1A5~(9@ =1f1R2 N21f2Ý|ee,Zo8f @  Ble K,oR)G :ff bt ,o`$ G ' ʋ &b' t,ob' 12 R)ʕw,o `'b'`'f5f R) Z,pDwv B ,fuf,>pf ͟)R)wBR)w& ,dpܕ*eCafQr ,preC DEr r,peɕER) f' n,p5 ' f' Z  }5 MES10 MES10A -1 RTS %5 ;EXIT ROUTINE ; ; ;ROUTINE TO DECODE EMT CALLS ;EMT+1=TYPE ONE LINE OF TEXT ;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 CHAR~ET 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+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 COMO2 A17I2w0F2@T2wX2d@V2wZ2XT(~9R7 P 5@;w< 5;|5;x5 ;U;=1=1;pw Bteb2 @e`2eb2 <~::J   F23F2F2G2G2H2H2 E T2T2V2V2X2X2Z2Z2`2`2b2b2\2\2^2^2 $~:F23G23H2 }1f2 : 3O2P2P2 -1 \E =1Q27L@V2wZ2^~;1N2f& R2 w le,p  e  r  e,"q  ʴ ;HqK"LqH 3,hq !"$,q'(+-.03569:@9 0/STUV,rWXY _,(%\"Z -JKLMNOPQ $,4r*];^R ! ,Zr +ABCDEFGH .)[<#I ,r ? ACTER CMPB #100,TYPDAT ;CHECK FOR "@" CHARACTER BNE TYPC ;CRANCH IF NOT "@". RTI ;TERMINATOR CHAR. DONE. EXIT. 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 TYPDPLETE 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 XINERR JSR PC,BCKGRD BR XINCW-4 ;REPORT BACKGROUND TEST TIMED OUT XINERR: MOV #340,@CSR BIC #BIT4,@CSR ;CLEAR TRACE BIT EMT+1 TIMO HALT ; RTIX: RTI ; RDCS: .WORD 0 ; STATUS RWC: .WORD 0    & D ĥ+ ĥ-ĥ   D0 Wq7~; a   vw v w t& & & L w *~;  y &'  f~p< U0 ffffffffF "eR~<R)R)E f f >,r "r ,rf-U@NF 8 sD,́6   (s 7 ,(s5 $F  & ,NsUE0{^svߋt$(tsߋtx BPT ERROR  gg @\gY,t%䋢܋ 7 w2,8tċ|w 7s~w  Q,^t 7w (w zĝP7AT JSR %7,TYPD ;GO TYPE CHAR. TYPG: MOVB #12,TYPDAT ;MOVE LF CODE TO TYPDAT. JSR %7,TYPD ;GO TYPE CHAR. BR 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 T ; WORD COUNT RCMA: .WORD 0 ; CURRENT MEMORY ADDRESS RDAR: .WORD 0 ; DISK ADDRESS RDAE: .WORD 0 ; DISK ADDRESS EXTENSION MTS = 172520 MTC = MTS + 2 MTBRC = MTS + 4 MTCMA = MTS + 6 ; BCKGRD: MOV R1,SAVR1 ; SAVE R1 TSTB @RDCS BEQ DATUM MOV #400,@RDCS ; CLEAR MOV #-17600,@RWC ; SET WORD COUNT MOV #RFBUF,@RCMA ; SET ADDRESS I $*f77  e ~`=`>==) ERROR XXXXX XXXXXX XXXXXX XXXXXX XXXXXX =====~=w @ w *춅f  h 7^ -U) w ~P> 7 rBf Bw = 7 7 =f& C V  A)f 6/~>=  7o k ,t0{|!tJwF T9,t& |v@ D) A ,t &DCc  w \w  w  ,t' 7  &w \,uw wXw w  fw  ,Buw 7 wtwhw + %;E,hu es wh$` ~  =w ,upc \ w dU w \N w T w L ,uw T 72 w F7+ w >7% 7 ~6,u~ tw7   ww (b,v ww w A YPSB: 0 ;ADDRESS OF MESSAGE GOES HERE BR TYPS ;GO PROCESS NEXT MESSAGE ; ; ;OCTAL TO ASCII CONVERT ROUTINE ; ;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 UNC DFADD ; SET DISK ADDRESS MOV DFADD,R1 MOV R1,@RDAR ; SET DISK ADDRESS MOV #5,@RDCS ; READ COMMAND MOV SAVR1,R1 DATUM: CLR MTC BIT #1,@#MTS ; TAPE UNIT READY 1$: BNE 2$ RTS PC 2$: BIT #2000,@#MTS BEQ 3$ MOV #240,1$ RTS PC 3$: MOV #1000,@#MTC ; CLEAR MOV @#OUTBUF,@#MTCMA ; SET B 0 E  &f&M'd w ~@?0? Օ+  d 0B` e0  w %Օ- ҋ 0&  UC~?UU ,.0Ŀ&괟B tδȴ*@6~0@8@:@f@J~@ B`,&v % w| 7Z,Lvwrwh E 7swh,rv} E tsP s',vIw H-:% w  =w ,v@78 s=w "&e,v0w ,w %@w k, we=w @w ww,0ww=w  w & w T,VwAe0w ,w rlpw 0Z,|w`- X\7sV DU F,w$w &?w >7 P ASCII# MOVB %3,-(1) ;STORE ASCII CHAR BIC #7,ACNVX ROR ACNVX ;ROTATE OCTAL# ROR ACNVX ROR ACNVX DEC %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 FUFFER ADDRESS MOV #-10000,@#MTBRC ; SET BYTE COUNT MOV #5,@#MTC ; GIVE WRITE COMMAND RTS PC DFADD: .WORD 0 ; DISK ADDRESS SAVR1: .WORD 0 .PAGE ;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 CONSI@*jkoA~ A ~A~B/~Bw :,w7%7 70    w *%0 %7s,wE `  1 W ֆ,x m7 y,xdxrx|xxRuzzx:xux6yZvyyyHyz vONxv>vrvw0www8w|ut,bxt7fD \ 7,xX7R%JF >8w %,x,=w D w < w 4w ,xww   7m,xmw w , y%/w \  ,Fy<  L es  OR FLAG BPL TSTFLG ; MOV @TKB,@TPB ;CHARACTER IN BUFFER TSTB @TPS ;ECHO CHARACTER BPL .-4 CMP #377,@TKB ;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: MOVDERED ACCEPTABLE*** ; ; PFT1: MOV #1000,%6 ;SET UP STACK JSR %7,POWFAL ;WRITE 125252 ON DISK PFWAT: BIS #BIT8,@DCS ;CLEAR DISK CLR DMA CLR TRACK 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 M~C@,CId7,{t!s w w Jw @e,{%ĕts75 ssw ,{Bw .e` w ;w ĝg,{sw wsf&f},| 4sC,>|ts 77Z,d|w r5j,|e悅Y  <ts ! MOV #DCS,R2 ; FIRST REGISTER ADDRESS 2$: MOV R0,(R2)+ TST (R0)+ SOB 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 @/ ;S NOT UP GO WAIT JMP UPCHK ;GO CHECK DISK ; ; ; ; ; ; ;POWER FAIL TEST #2 ;DISK ZERO ;WRITE COMPLETE DISK WITH 125252 PATTERN ;REPORT "OK" ;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 #PWŀ Eb7 [@!~Ft4e 41   +5% z2 lm l m 44 e~8G  $&' lހe&f ބ w fWt5? @w EVC~Gwa@ CTC AV@DX@wZ@w\@ 5"CwZ@swWf & @P@DR@C ` ~(H` K $  ,|%& &e N @ e0/,|w &  s,| p7l`\E,"} w   w ,H}׭" ^w Uw swV,n} nj  7,sXRs-M,}P Dw@ 78 %(q,}!  %??,}  w N%w r,~77w Z e0w ,w q,,~w p MES2: .ASCII / DCS @/ ; MES2A: .ASCII / HRD ERR@/ ; MES3: .ASCII / WRD CNT@/ ; MES4: .ASCII / 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: .ASCIRFL,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 BACKGROUND 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 8@`@B ) %W ffff  @ T@TCl~HRC a@  T@wܟ5VC wRwB@BEp Bmd@ $ b@ u`@wVw~Iw ƫīff w ?@ 52"C5*Cb@ "CB^@ E Cw B:C2r~I2r"C r*C  Lt"Ct*C"Cw: Ta@ wSRC-FI!XASPM..CFRB"<9,ss,@@ fw," BE 7*7Z8&9 wQ,I /%DATA TEST ONLY? @/ ; CON2: .ASCII /%MULTI DK MODE?@/ ; CON3: .ASCII /%# OF DKS 1 TO 10 OCTAL?@/ ; CON4: .ASCII /%EX. DK?@/ ; CON5: .ASCII /%OPT WRD CNT? @/ ; CON6: .ASCII /%LENGTH (1 TO 1000)?@/ ; CON7: .ASCII /%WRD ADDR?@/ ; CON8: .ASCII /%OPT. DATA PAT. #?@/ ; CON9: .ASCII /%WRITE?@/ ; CON10: .ASCII /%WRITE CHECK?@/ ; CON11: .ASCII /%READ?@/ ; END: .ASCII /%END@/ .EVEN ; .WORD 25252 OUTBUF: .BLKW 4000 ; INBUF: .BLKW 4000 .WORD 25252  INC WORK ;+1 TIMER BNE XTIMCNT ;TWO SECONDS NOT UP GO WAIT BR PWRFL ;GO CHECK DISK ; ; ; ; ; ;ROUTINE TO WRITE THE COMPLETE DISK ;WITH 125252 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 EMw  K D7!HF ~J;BEW<q B5 2 - Dw0 A!1 f $ۄL 7B -UR ~J) (G LE7 ځDww  CPC>J77 7]~pKC7 ^wBW JDw j2,w R& ww P؞TLJ_~K BI 5,-䲤hl9,ހ&9 wxh$&9 wB,$h?,J&9W  whn,p&9 w,hP&,9W  wh,&9 w`,h&9,.W  w$hO,T .END BEGIN #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 +100 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 ; ;456  ewR-w- ك~`L vtE0PEPd ZQ PWf & " &J$JK B ), &!t~L"1 Wf X 2ww ܱ5Աαw 05857 w~PM@J w01~YzMzMH~M&9W  w,zh,0&9 wh,,Ƃd&9 w,h&9 L,wLh,8&9W  w,^h&9W , wh),D&9 w,Ѓhx&9 w,lh77 PN  pNxz `r ŜE `Z-\RHr@e ~R < b-^: , MM 1 wj 8`R PN   m~xRR   w$3 7wDSbSxjSp@ &Rzw\PNG~R p z B L . @ N <0S& D L 2Dw œE@"Nl3 Հt~hSŀ 1CURRENT ADDRESS REGISTER SELCMA: MOV @SR,@CMA ;MOV SR INTO CURRENT ADDR REG BR SELCMA ; ;DISK ADDRESS REGISTER SELDAR: MOV @SR,@DAR ;MOV SR INTO DISK 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 RdAA!A0PRRR~@NbNbN@O~Nw . w & w w f օ1 ~0OF %?%;  5 "NE ;* -U%׳) H^w w x& ~O|0 vw,&9W  w0h,B&9  9,h w7 h/,D&9  , w7 >h,ڄ&9   ,w^7 h,&&9 w$:,Lh THIS BUFj,rFER OF DATA WILL BE USED TO TEST THE M/,AGNETIC TAPE 62CSECONDw   1 Dw 1S  * EWq Ca 3 B e ~S ŜBEq eB 7 D r 8p epN.C 0 ;8 4Ks Հs ~XT@"NlBEhTZ 5f&F Ua  ?E~TVV7W 7V}@WtEE ~<hf`&E\EatEN~HUEtEGISTER 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 ;MOV 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 T f Ձwtp  p Հ"N@ x.N$&' Հ &L ,wL+~ Pwjwb |7@ nP7PN     @ }@"N` M=~PM o72`M hMzM7 PtPN   Z @P\ z  hD !~Q$ N D1ŀ"N&& w" dM7 7 )&  7 w>wH 7 7p~Q (Q LINE OF THE W,RITE, REWIND, AND READ TEST 62 CHARACTERS.INPUT BUFFER2?,@  ," BE 7*7Zy&8&9 w,8hl,^&9 wxhi$&9 wB+,h,ʉ&9W  wh,&9 w_,`EU֋ tE Et` EU &&77 ~U0C~eE&U0   LѦ ^+8-/F-.-t23PJ:?4;=lCZYNkfl`~8V`^^^^^_D`NNO O?dCja aU?lDOab ajaDWrdCj_,~V!0033  ~(WRACK ;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 MOV @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 #1777 PN  pNxz `r ŜE `Z-\RHr@e ~R < b-^: , MM 1 wj 8`R PN   m~xRR   w$3 7wDSbSxjSp@ &Rzw\PNG~R p z B L . @ N <0S& D L 2Dw œE@"Nl3 Հt~hSŀ 1hP&!,<9W  wh ,b&9 w`y,h&9,W  w$h,Ԋ&9W  ws,hZ, 0&9 wh,Fd&9 w,lh&9 ,wLh=,N L;hMH*Ka@i NNsqN%le@R8xXC^_p Hw lD\@s~WP@L R@&@A&`;Mm'NO',N'sdM'L fM' M(` "N2'4!;`@49p(:<})_MQ;Mp&^MW^0Xs8@YYqT@Y!T6NYeI~X;hfp?fY'[g4"?;}G'4* ` R)s''~X~^~Y\7777,@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: CMP 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 HED5w   1 Dw 1S  * EWq Ca 3 B e ~S ŜBEq eB 7 D r 8p epN.C 0 ;8 4Ks Հs ~XT@"NlBEhTZ 5f&F Ua  ?E~TVV7W 7V}@WtEE ~<hf`&E\EatEN~HUEt&9W  w,ދh&9W P, wh),*D&9 w1,Phx&9 wq,vlhV,&9W  w0h>,Œ&9  , w7 h,D&9  A,4 w7 >hK,Z L/P 1 PARITY ERROR L/P 1 NOT READY L/P 1 ABORTEDfXX&f&f  7~Y0     h :& ̦NX ˞NX %Uj~YFʹ)0 HX$  e& w>0  HXsJX3 XX3 ZX`Xs~pZ\X3 ^X hq   w0w  $ HXM`XLX ʀJX  hq  M`X2LX ~ZeLX  ;ADDRESS OF MESSAGE 3 EMT +0 ;REPORT MESSAGE HED5A HED5 MES10 -1 RTS %5 ;EXIT ROUTINE ; ;ROUTINE TO REPORT ERROR COUNT AND THE CONTENTS 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`EU֋ tE Et` EU &&77 ~U0C~eE&U0   LѦ ^+8-/F-.-t23PJ:?4;=lCZYNkfl`~8V`^^^^^_D`NNO O?dCja aU?lDOab ajaDWrdCj_,~V!0033  ~(W&9   +,w^7 h,&9 w$,̍h THIS BUF,FER OF DATA WILL BE USED TO TEST THE M,AGNETIC TAPE 62CSECOND LINE OF THE WN,>RITE, REWIND, AND READ TEST 62 CHARACTedERS.INPUT BUFFERu,@ f.Ay Fh&@g8@ 2NXXX)&  XX& f&XX `X  LXe(~`[LX Fʀ  wVsJX`X3 XX3 ZXhqs\X3 ^X  M 3 HXY  M ^X%^X X z'~[ MY `w,Y N V3 ^XY&\d | MC fJX`XLX ~ɀ  dX  ^X,~P\^Xd 2  wf&ff& VYZXAaes!\XB3 bX D! ! 3 VY bX % !3 VY  ^ĕ ~\ R  s! 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 ;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 N L;hMH*Ka@i NNsqN%le@R8xXC^_p Hw lD\@s~WP@L R@&@A&`;Mm'NO',N'sdM'L fM' M(` "N2'4!;`@49p(:<})_MQ;Mp&^MW^0Xs8@YYqT@Y!T6NYeI~X;hfp?fY'[g4"?;}G'4* ` R)s''~X~^~YP\,ƒ .! %8*x, %  8R,  $V܅ww w  *V6,8Q  ȋmȕË Zj,^8X 70 6]6,EWt`D%,  Հ u 7*,Г ./wNwL t# ȋf,ȕË 5 * y, ?,B  icȕe5 52\X5ЕsZXVY  3 VY bX 5  6 & `3 XY  ~@]@& 5 55 Y 3dX    fXY\&~]d fVYB e^00& zԅVYwVY@aAa !B@JX`Xw ~0^f CqBa fX 5 f ԅ1 7 % f8~^ TO R0. TYPA: MOVB (0)+,TYPDAT ;GET CHARACTER CMPB #100,TYPDAT ;CHECK FOR "@" CHARACTER BNE TYPC ;CRANCH IF NOT "@". RTI ;TERMINATOR CHAR. DONE. EXIT. 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,T L/P 1 PARITY ERROR L/P 1 NOT READY L/P 1 ABORTEDfXX&f&f  7~Y0     h :& ̦NX ˞NX %Uj~YFʹ)0 HX$  e& w>0  HXsJX3 XX3 ZX`Xs~pZ\X3 ^X hq   w0w  $ HXM`XLX ʀJX  hq  M`X2LX ~ZeLX ,h Ë  <*$' *,  fȥȥp wm ,  ,ڔ Q * 7,H 5$ 5$ 5 ,& e  D  Z,L \ w 7 N*=H,rw7& 2%,V,,܅  wz w1 ,T20 ,$6 w0e^6 &  *-U&:ȸ7 &fΕ~ __W __& & & w*џ P|0V& P  H 7 < 6 2 Q~_P`W _7 w V߀-U`f Ɓ DE@!p(aŠ~`Ԕw ގe! ee  w ހ-Uf ~Ɓ`  ŋWm~`e YPDAT ;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. BR 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 2NXXX)&  XX& f&XX `X  LXe(~`[LX Fʀ  wVsJX`X3 XX3 ZXhqs\X3 ^X  M 3 HXY  M ^X%^X X z'~[ MY `w,Y N V3 ^XY&\d | M JX`XLX ~ɀ  dX  ^X,e~P\^Xd 2  wf&ff& VYZXAaes!\XB3 bX D! ! 3 VY bX % !3 VY  ^ĕ ~\ R  s! ,J"p!t AC: #  ? \ ILL CMD!  ILL PAR! ,NON-QUIESCENT EN DS$QU*XX0XT,ڗTMDTFRECM$AS:LD@IDLFLZTCFPT,ITBRXBEX. w,&."7 * D,L S#     ,r  !Ļ EȻW,,  !  ee e Q Š@(>82l ~a&f& # W <7Ξwʞ7 ƞ7 ž P]w76 &f&:~xa F5 7x= :7 p 3 0el +DlCt 7*w&"7EP~a6  EU0~E|UvEjUPdEb~hbU +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 ROUTINE ; ;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\X5ЕsZXVY  3 VY bX 5  6 & `3 XY  ~@]@& 5 55 Y 3dX    fXY\&~]d fVYB e^00& zԅVYwVY@aAa !B@JX`Xw ~0^f CqBa fX 5 f ԅ1 7 % f8~^   ,  F,! 7ptpx*, & &&  , 0R&W,WBWA ,0b !  ,Vj x*,|"R0é04e  p,>7 t7 r7 pajc dG,ș  h ,W,5 3!0 ,!)!,& %! yߕR4Ru,:ߕRR\ EPU@JEHUBw 7 7М   Db   5qb W !5  ^V ~bNNEJ  5qbw ܇U.k~Xc$pcccc ~c$pdd>dd ~Hd 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 DEC %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 TEXT6 w0e^6 &  *-U&:ȸ7 &fΕ~ __W __& & & w*џ P|0V& P  H 7 < 6 2 Q~_P`W _7 w V߀-U`f Ɓ DE@!p(aŠ~`Ԕw ގe! ee  w ހ-Uf ~Ɓ`  ŋWm~`e  ,`  R&& & &  &), HH:MM:SS MM/DD/YY 5, &e I p,ҚW, ! : ,w(W, ! ,;E7Pd"DDԝԝ   ,,f2",$2lL F-& %,J @   < N,p  ~d_~8e~ecNccdBdddd:exe  BUFFER REG TSTFLG: TSTB @TKS ;CHECK FOR FLAG BPL TSTFLG ; MOV @TKB,@TPB ;CHARACTER IN BUFFER TSTB @TPS ;ECHO CHARACTER BPL .-4 CMP #377,@TKB ;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 TSee e Q Š@(>82l ~a&f& # W <7Ξwʞ7 ƞ7 ž P]w76 &f&:~xa F5 7x= :7 p 3 0el +DlCt 7*w&"7EP~a6  EU0~E|UvEjUPdEb~hbU@   $,   & & +&& / !,L   &  y ||7 |  F- , @@&(@^$؝fk& !%, ENTER FILE/ELEMENT NAME: J,L  FILE NOT FOUND, REENTE rR: 8,v FILE NOT CONTIGIOUS, REENTER~(f6   Y'wBBew  we ~~f e rllw`ZX p m BTY'Ee5e& U~gT:Ce4To  e0e  tp(043e&ʋ   R) ~~g 1R) e8f v D wFBe2e+e ZUX V ~B wTFLG ;WAIT FOR CORRECT CHAR. CHOK: MOV @TKB,WORK BIC #177770,WORK CLC ROL TEXBUF CLC ROL TEXBUF CLC ROL TEXBUF ADD WORK,TEXBUF ;ADD CHARACTER 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: MOV R0,R1 BIC #177774,R0 ASH #4,R0 ; MULT BY 20 BIC #177773,R1 ; ADD IN THE 400 f eeEw((4  7 Jw  2  4 ( b el p e8 w U  e:e (t h~f %w U   $"eA$ E f   t t: ]! FILE TRANSFERED, NEXT: x,+ ERROR - VALUE . TASK DޠID $EXIT.9,( F ```& , "&7B X,477$7$7$|  6 S,Z$ e   P 7 ,`) 2967 7k, | wv D e-,̡w! Z4 RBC,DT DKBF,x  ~hʕ& wB wbew(Y'  Y' Ae E E~hWe  Cݕ*E f' EŠpeʋwEWE) f >$ ~h $  R) R)3Xne33e e  w e~pi wA ^w( L1R) 1 'Y'V7 e zGeBeY'    ASH #6,R1 ; WORD OFFSET ADD R1,R0 ; IF DISK 4-7 ADD #165300,R0 MOV #10,R1 ; NUMBER OF REGISTERS MOV #DCS,R2 ; FIRST REGISTER ADDRESS 2$: MOV R0,(R2)+ TST (R0)+ SOB 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 @/ e~R , K1 IEU     &wt Q$fR v  $ ta(x~  &> f er   X te ~o   Ļ_  % %/x7 w Ȼw~ E"ȻB e0 %>  h%>h͘͘xlexlͰpp - > , do,.   n&j!,."  p  s^,ԣp   , o,jf&CCTQ$ wM, <7 7 7 j   ,F tt  x,l6 ( 3   "  ,P)eD z,:~ R  J  B w" ~iEeʋ  w~E <    Y'ҁw Be 8~`j& 4 w%e l  U 22 wz 4 e~j3 0 e  fע׬R)  bCe w `  R)w: ~Pk5-1ڻ R)|0& & VY' LʕR) `'p'b'p'`' @ ; 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: .ASCII / WRD ADDR.@/ ; MES5: .ASCII / GD DATA @/ ; MES6: .ASCII / BD DATA @/ ; MES7: .ASCII /?@/ ; MES8: .ASCII '/@' ; MES10: .ASCII / WRD1 @/ ; MES10A: .ASCII / WRD2 @/ ;  ~.D ZELIIAITINM TEYS SSCDIS RO*~@,,, ,,,@v ~~2J),ޤ   $  "+,  . Dd^  7L1-a,*t   >,P D f ,v te e  v74,<e 7!#"",¥,eH, H 7 j t7=,^ -R@7 J7e 7 H/s,4W µ 0 0  e,ZE `7µ 0lCm~kY'  Be   Ee  A ͕AwEA)A*ECl~@le  A hw ޺w кW   \ʕw ҇ < ʕY'~lw ee3   R) wʕY'6 @4*  Y'ee  ~0m & ȭ D'2  R) & L b' B3b'  C & few2 @4* 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: .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: .ASCII0~Ueq~EŜ   e 3 * w ^2 >       @~"H?wыO?wыV?w` C .  jfw pfw vfw |fwA`  w w w w~lA` E'f  %  e  d 7   ӝ%,0@@  n(,j a( j7 j,̦7 &  t7  -z,@7 r7e 7 pN 'W ,P&'^  M;,> B &' %Z,d&'4 D; |B A w`,  B f ^ P7  ,j^D 6: &' $e 7 3,֧X  e E ,  e7\ 7Z J Z~m PE!ʕwY'ʕ D'& ZwY' ew ↀ R) Іʆ~ nw Ў&WR) TR) 66 ee8f D rb  en~n ewtE4Y' e f&  -Ct # & &b' ~o0b'ʕR) 1' 2,`p &    z', R J 9@B,E ` V BEC[,\ mv ^ ! 2 ! |lH,&8Xl,@8Xlw  ee  0,f񆗢   7  , R7 6wJ , w ZR)G~o :ff bt `$ G ' ʋ &b' b' 12 R)ʕw `'b'`'~pf5f R) Dwv B ,fuf ͟)R)wBR)w& ܕ*eCa,~xpfQr reC DEr reɕER) f' n5 ' f' Z~p  le  e  r  e  ʴ H  ~iEeʋ  w~E <    Y'ҁw Be 8~`j& 4 w%e l  U 22 wz 4 e~j3 0 e  fע׬R)  bCe w `  R)w: ~Pk5-1ڻ R)|0& & VY' LʕR) `'p'b'p'`' @ p~ e- E3  `x($ * %dJ7 Dw8EBD 7 9 7 .7R ~ROERD EA RRYTOECIR DSCDI ADREY ORCTREDIT ENEMELE IL FCHAT-BORRR ESCDI-0 1000 0 6 4605 0 597::123 72N-JA2- 0 ~B EEFR CTJEOB E.AM.N H THNGLE ORCTSE METI E AT D USATST PETY E AM N IT ARST ~ EDATRE C NTMELE E > X XX X X X X XXXX XX XXXX X DDm DQ$ ,ة tw  Dd ` ,DQ$ |D @ @D dQ$Dd ,$, D JQ$DdD ,JDQ$ 37 7 W- .,p DDdm 7 7 ɥɥ,DD]F  e  , V N@|m v ,⪀ e= &<T7I j, e@ r@L~! B,,.W p;W 8 2Y +,T 5 ~hq !"$'(+-.03569:@9 0/STUVWXY _,(%\"Z -JKLMNOPQ $*];^R ! ~Xr +ABCDEFGH .)[<#I ? "~r f-U@NF 8D,́6 5 $Cm~kY'  Be   Ee  A ͕AwEA)A*ECl~@le  A hw ޺w кW   \ʕw ҇ < ʕY'~lw ee3   R) wʕY'6 @4*  Y'ee  ~0m & ȭ D'2  R) & L b' B3b'  C & few2 @4* XX X XX X~X XXXX XX XXXXF  ************************************************************************IN Y/ N Y/ ~NENO0= THNGLE CEVIDE PETY ORCTSE >D IF R.DIE OR CT ECOTPR VESACK LEFIL CAGILO LEFI T ARSTD ILE~FIHD TELEDE E ITWR ADRE EEFRECVDNOCTPOSEUGLAJUUNYJMAPRRAMAEBNFJA TADAM SYR FOM SYM ASIC(~OLMBSY ADLO CTJEOB E# ,zW!W! wEW!  t, n7x*ÝtQ,ƫ% x)^w N R,7W7ZJ nwL>= ^7 ,Vww 41R1é ,8U1p1 _ _ ,^>j!7 wwQ$ w,,((( ,,,&A,f&M  e,Ьmm-: 0&t7 ,ee F  &~Hs UE0{^svߋtߋtx BPT ERROR }}}X~sH7% 7 ~~ tw7   ww (b ww w ~vA B` % w| 7wrwh E 7swh} E tsP .~vsIw H-:% w  =w @78 s=w "&e0w ,w %R)G~o :ff bt `$ G ' ʋ &b' b' 12 R)ʕw `'b'`'~pf5f R) Dwv B ,fuf ͟)R)wBR)w& ܕ*eCa,~xpfQr reC DEr reɕER) f' n5 ' f' Z~p  le  e  r  e  ʴ H н~lX~~]h~ (>,   7r,? 5|Ћ#BwJY, ` 7<@5.0 @ j,0e    ,V D 1,| m#e#!,  E mn,ȯ7y 7e,0#0 E , w  r :w rwȰ@w k~we=w @w www=w  w & w TAe0w ,w rlpw 0`-p~w X\7sV DU $w &?w >7 w 7%7 70    w *%0 %7E x~w`  1 W ֆ m7 y,xdxrx|xxRuzzxux6yZvyyyHyz vv>vrvw0www8w|utt7~pxfD \ 7X7R%JF >8w %,=w D w < w 4w w~hq !"$'(+-.03569:@9 0/STUVWXY _,(%\"Z -JKLMNOPQ $*];^R ! ~Xr +ABCDEFGH .)[<#I ? "~r f-U@NF 8D,́6 5 $~Nx~~?~ lܰA,R>R_`@, ROSLOD IIA # ROSLOD PASS #1 ",END  ROSLOD PASS #2 BEGIN ERR:OR # ,DP **** ROSLOD LOAD MAP **** **** LO[jAD ELEMENT [,vLODTMP] **** / / : Cz,********** ELEMENT TITLE: [] SEC2#´TION ENTRY OFFSET SIZE TOw   ~x7mw w %/w \  <  L es W~`y !sB !s=L !64s4 s <!4st4 s %. w F  @w @ % ~y% w  ww  D  &C@AEPA&fw w /w w dw ~Pz  ` E ` ue  ] w \w 7DU9F  &~Hs UE0{^svߋtߋtx BPT ERROR }} }X~sH k, "********** ,, UNRESOLVED REFERENCES ,R `x*, 2! G&&dv@,OBJECT LOAD SYMBOLIC,*ASM SYM FOR SYM DATA JANFEBMARAPRMA,PYJUNJULAUGSEPOCTNOVDECFREE READ vWRITE DELETED Ew v7X!z~z7E w psw Z׭ڄU7I~@{w DpŝhŝdEwJw w>t!s w w Jw @e%ĕts7~{5 ssw Bw .e` w ;w ĝsw wsf&f y~0|4sts 77w r5je悅Yw wXw ~(uw  fw  w 7 wtwhw + %;E es wh$` ~  =w pc \ w dU ~uw \N w T w Lw T 72 w F7+ w >7% 7 ~~ tw7   ww (b ww w ~vA B` % w| 7wrwh E 7swh} E tsP .~vsIw H-:% w  =w @78 s=w "&e0w ,w %0~~@~ȶ~{,HFILE ID START a,FILE LOGICAL FILE CKSAVE PROTEC@,T CORE DIR. IFD > SECTOR ,TYPE DEVICE LENGTH 0=NONE Y/N R, Y/N I**************************,F**************************************l******** f v k,~FXXXXX XXXXXX XXX XXX XXX,XXX XXXXXX X X XXXX , > ELEMENT , CREATED START I , NAME   <ts !f~|%& &e N @ e0w &  s p7l`\E'~ } w   w ׭" ^w Uw swV nj  7,sXRs-P ~} Dw@ 78 %(!  %??  w N%w 77~~w Z e0w ,w w p Cå å$ נA@w k~we=w @w www=w  w & w TAe0w ,w rlpw 0`-p~w X\7sV DU $w &?w >7 w 7%7 70    w *%0 %7E x~w`  1 W ֆ m7 y,xdxrx|xxRuzzxux6yZvyyyHyz vv>vrvw0www8w|utt7~pxfD \ 7X7R%JF >8w %,=w D w < w 4w wP~hص~C ` `~/S CEENEREF REDLVSOREUN **********"  >~U<LTATOE IZ SETFSOFY TREN ONTIEC S][: LEIT TNTMELE E**********C : TYPE STATUS DATE '< TIME SECTOR LENGTH ,^H .NAME. OBJECT FREE 0,2-JAN-72 23:17:59 005466 000100 ,-DISC ERROR-BATCH FILE ELEMENT DIRE0CTORY READ ,DISC DIRECTORY READ ERROR 7.,7 9 7 DBE,(À8wD7 Jd% * $(,Nx` 3E -e  l,t w ~e W" p, "Ew  DȻ 7q,wn   N~~ e` ~  Ëנe ee e ѐ  @(¾¾2@ ROSODm~TBErr *;/\ $G._<^,OWEBP@>SRC-FI!XASPMCFRB @ ~x~ w   ~x7mw w %/w \  <  L es W~`y !sB !s=L !64s4 s <!4st4 s %. w F  @w @ % ~y% w  ww  D  &C@AEPA&fw w /w w dw ~Pz  ` E ` ue  ] w \w 7DU9 / / ****] MPDTLO [NTMEp~)LE EADLO* ** *****P MAD OA LODSLRO* ** *P #ORRR E N GIBE2 #SSPAD LOOS RD EN1 #SSPAD LOOS R #IA ID ~LOOS R~}@~? NN ,  !f&}, f&E lj,2 Y~E ,XdYNE H3,~ 8 ,~ w ,d X ( \ d0c,ą E 8* ,  ( v ,8t xj n` d(Y,t!s w w Jw @e%ĕts7~{5 ssw Bw .e` w ;w ĝsw wsf&f y~0|4sts 77w r5je悅Y~/~0~(~ 7 d  ,e   % 2, f'E A`w w",Ś w w A`wf,| wfv wfp wfj  .$, Ɓ C `w?Vыw?Oыw?H ,FƊ   ,l   > 2^ ,w *3  e  ŜE(ƀqe‡,J2~,$v@,,, ,&9W  w$'~Hh&9W  wh0&9 wh?~d&9 wh&9 wLh.~8&9W  wh&9W  wh)~D&9 whx&9 wlh  <ts !f~|%& &e N @ e0w &  s p7l`\E'~ } w   w ׭" ^w Uw swV nj  7,sXRs-P ~} Dw@ 78 %(!  %??  w N%w 77~~w Z e0w ,w w p Cå å$ נA~wrw  8~,r w  E 0#0e7 y7nm~ E  !#e#m  D   H~]  e @ 0.5@<7 `JwB#Ћ,,J&8@ ,*ROS DISC SYSTEM ,INITIALIZED .  ppͰf$$lxelẍ́ͬ(Bh>%h  >%},d0 e BȻ"E w,Ȼ w7 x/% %M$  _ Ļ   ` &9W '~( w0h&9   w7 h~D&9   w7 >h&9   w^7 ~h&9 w$h THIS BUFFER OF DATA WILL BE USED TO TE~ST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTER  N~~ e` ~  Ëנe ee e ѐ  @(@ ROSOD~TBE *;/\ $G._<^,OWEBP@>SRC-FI!XASPMCFRB @ ~x~e  wlX8lX8&0~l| !2 !^ v m\ CEBV ` EB@9 J R ~z   & p`> ]    w w`7. j&n B @~  * 7 V 7 ( 7 Z 7\ 7e  E e  X 7 e$ 'ȧ~&: 6 D ^j  7 P ^ f B  w`A B| .|5 ?r7 Ю~j  >(   -O e e 777  & Vw X~ B<7 @` hw !!!!!\ eP e  evf&f en7!2- # 7!~ ew J w  R w 4  e&! e  eh~e7E 0-#P7 :t]&S.INPUT BUFFERT~~{~~p ~h" BE 7*7Z8&9 whl&~9 wxh&9 wBh&9W  ~Xwh&9 whP&9W  w ~Ёh&9 w`h;D 4'&% '&P~{ B M  ^'&PW ' Np7 e7r7 @z- 7 t ئ~8 &  7j 7j a( jn @ @00l  µ7` `~>Ee 0 0  µ W/H7 e7J7 @R- ^7t j7  H ~(He,""#7! e<0-# ee7 t~&0 :-mme  M&f&,,, (((,w Q$wx~w7 !j>__ 1 p1U é1R14 w wV7 ^ =>L~wn JZ7W7R Nw ^)x %tÝ*x7n W!Ew ~3W!W! #E  5 + Y2 @  ~~`~؈" BE 7*7Z8&9 wh^~Pl&9 wxh&9 wB&9W  w$'~Hh&9W  wh0&9 wh?~d&9 wh&9 wLh.~8&9W  wh&9W  wh)~D&9 whx&9 wlh7v  e et p~ f D    t1-L7  ^dD. " ~\$    wB J R ~:z DeP)  "~   3( 6 tt    j 7 7 7 <w Q$CT~\C&fjo ,   p^s 8W ;pW ,B !L~@r @e~  j I7T<& =e v  m|@N V   e   FD]D~ɥɥ 7 7 mDdD W- 7  73 Q$D  DDdQ$J D , Dd ~tQ$d D@ @ D| Q$D ` Dd  wt  Q$D DmDZ w  ~Jw6 7 R  7    e!h~ȉ&9W  wh&9 whP&9~@W  wh&9 w`h&9W  ~w$h&9W  wh0&9 w~0hd&9 wh"&9W '~( w0h&9   w7 h~D&9   w7 >h&9   w^7 ~h&9 w$h THIS BUFFER OF DATA WILL BE USED TO TE~ST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTER p " .!j&n  ~S .~l~9od   (~ xBFDK DTBCR e  wlX8lX8&0~l| !2 !^ v m\ CEBV ` EB@9 J R ~z   & p`> ]    w w`7. j&n B @~  * 7 V 7 ( 7 Z 7\ 7e  E e  X 7 e$ 'ȧ~&: 6 D ^j  7 P ^ f B  w`A B| %&9 wLhM~&9W  wh&9W  wh~ )D&9 whx&9 wlh~&9W  w0h&9   w7 h~D&9   w7 >h&S.INPUT BUFFERT~~{~~p 4Z !w-e D v~w | 7 7692 )`7  P  e $ 6 |7$7$7$8~W7 B7&"  &``` F (.ITEX $ID DSKTA . UEAL V -ORRR E~n + T:EX ND,REFENSRA TLEFI : ERNTEE RS,OUGITION COT NLEFI R:TEENRE, NDOU FOT NLEFI   E:H~AM NNTMELE/ELEFIR TEEN ;D 4'&% '&P~{ B M  ^'&PW ' Np7 e7r7 @z- 7 t ئ~8 &  7j 7j a( jn @ @00l  µ7` `~>Ee 0 0  µ W/H7 e7J7 @R- ^7t j7  H ~(He,""#7! e<)&9   w^7 :~h&9 w$h THIS BUFFER OF DATA WIH~LL BE USED TO TEST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS.INPUT BUFFER~x{~*@  ~~`~؈" BE 7*7Z8&9 wh^~Pl&9 wxh&9 wBП~X~~{h~7v  e et p~ f D    t1-L7  ^dD. " ~\$    wB J R ~:z DeP)  "~   3( 6 tt    j 7 7 7 <w Q$CT~\C&fjo ,   p^s -~h~ L~XB=~А.h~ȉ&9W  wh&9 whP&9~@W  wh&9 w`h&9W  ~w$h&9W  wh0&9 w~0hd&9 wh~^x~-u@ ~^ F- |7 ||   &   L /& &+& &   $ ~  @   <   @  p " .!j&n  ~S .~l~9od   (~ xBFDK DTBCR 1!~H.Ay Fh@d~0~8@w~ .! %8* %2&9 wLhM~&9W  wh&9W  wh~ )D&9 whx&9 wlh~&9W  w0h&9   w7 h~D&9   w7 >h% &F- Ll2~o~2f   ԝԝDd7PE ~; ! ,W(w : ! ,W I e& ~ Y /YDDM/ M S :SMMH: H & & & & &4Z !w-e D v~w | 7 7692 )`7  P  e $ 6 |7$7$7$8~W7 B7&"  &``` F (.ITEX $ID DSKTA . UEAL V -ORRR E~n + T:EX ND,REFENSRA TLEFI : ERNTEE RS,OUGITION COT NLEFI R:TEENRE, NDOU FOT NLEFI   E:H~AM NNTMELE/ELEFIR TEEN 5  8R  $V܅w~(w w  *VQ  ȋmȕË Z8X 70 6]6EWt`D%~  Հ u 7* ./wNwL t# ȋȕË 5 *~  ?  icȕe5 5 Ë  <*$' * Y~ fȥȥp wm ŀ  6&9   w^7 :~h&9 w$h THIS BUFFER OF DATA WIH~LL BE USED TO TEST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS.INPUT BUFFER~x{~R  RRߕR4R0~ߕy !% &!)!, 0!3 5,W h  d cja~p7 r7 t7 >p e40é0R"*x j @~K ! b AWBW,W&R0 & &&  *xptȘ~p7  !  ,    ! ,WП~X~~{h~9 Q * H a~5$ 5$ 5  e  D  Z \ w 7 N*=Hw7& 2~2%,V,܅  wz wX~~pT2[:~h~ L~XB=~АȻE Ļ!     S#P~ D *7 ". .EXXBBRITPTFTCZFLLID@LD:AS$CMREFDTTMؗ~XT0XX*QU$DS ENT ENSCIEQUN-NO R!PAL IL D!CML IL ? C: A`~~Z~^x~-u@ ~^ F- |7 ||   &   L /& &+& &   $ ~  @   <   @ =Z~~` AC:  ? ILL CMD! ILL PAR! NON-QUIESCENT EN DS$QU*XX0XT~ؗTMDTFRECM$AS:LD@IDLFLZTCFPTITBRXBEX. ."7 * D ~PS#      !Ļ EȻ>!~H.Ay Fh@d~0~8@w~ .! %8* %[2Tp~~Xw zw  ܅,V,%2~2 &7wH=*N7 w \ Z  D e  5 5$ 5$~a H * Q  % &F- Ll2~o~2f   ԝԝDd7PE ~; ! ,W(w : ! ,W I e& ~ Y /YDDM/ M S :SMMH: H & & & & &W,  !    ,  ! 7p~Ștpx* & &&  0R&W,WBWA b ! K~@ j x*"R0é04e  p>7 t7 r7 p~ajc d  h W,5 3!0 ,!)!& %! yߕ~0R4RߕRR   R  8R  $V܅w~(w w  *VQ  ȋmȕË Z8X 70 6]6EWt`D%~  Հ u 7* ./wNwL t# ȋȕË 5 *~  ?  icȕe5 5 Ë  <*$' * Y~ fȥȥp wm ŀ