JMP WTGP1 YES-REPORT ERROR JSB LPCK CHECK FOR LP CLEAR JMP WTGAP,I EXIT WTGP1 EQU * CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT ERROR DEF E036 -GAP FAILED JMP WTGAP,I EXIT * * * * ROUTINE TO BACK SPACE FILE * BSFWF NOP LDB BSF BACK SPACE FILE JSB OCMMD OUTPUT COMMAND JSB FLGWT WAIT FOR OPERATION TO FINISH JSB EFCK CHECK FOR EF MARK JMP BSFWF,I EXIT * * ROUTINE TO FOREWARD SPACE FILE * FSFWF NOP LDB FSF LOAD FORWARD SPACE FILE JSB OCMMD OUTPUT COMMAND JSB FLGWT WAIT FOR OPERATION TO FINISH JSB LPCK CHECK FOR LP CLEAR JSB EFCK CHECK FOR EF MARK JMP FSFWF,I EXIT * * * WRITE FILE MARK ROUTINE * WRTFM NOP JSB FPCK CHECK FOR NO WRITE RING LDB WFM LOAD WRITE FILE MARK JSB OCMMD OUTPUT COMMAND JSB FLGWT WAIT FOR OPERATION TO FINISH JSB EFCK CHECK EF SET JSB LPCK CHECK FOR LP CLEAR JMP WRTFM,I EXIT * CHECK FILE MARK AT END OF READ * SEE TEST 34 7970/181 P33 * * ROUTINE TO CHECK FOR EOT * CALL: * JSB EOTCK * JMP * (EOT BIT NOT SET) * . * . * EOTCK NOP LDA MSKET LOAD EOT MASK JSB BITCK IS IT SET? JMP EOT01 YES-GO CHECK LP NOT SET ISZ EOTCK NO-ADJUST RETURN JMP EOTCK,I EXIT EOT01 EQU * JSB LPCK CHECK LP NOT SET JMP EOTCK,I EXIT * * * ROUTINE TO CHECK EOT AND REWIND IF EOT BIT IS SET * CALL: * JSB EOTRW * EOTRW NOP JSB EOTCK IS EOT BIT SET? JSB LPREW YES-REWIND UNIT JMP EOTRW,I EXIT * * * ROUTINE TO * SETUP COMPARISON BUFFER FLUXX NOP LDA .1 SINGLE PATTERN SEQUENCE LDB HLFRQ PATTERN S.A.(1600 FLUX REVERSALS) JSB FILL,I DEF FLUX1 DEC 100 BUFFER LENGTH DEF FLUX2 ERROR RETURN FLUX1 EQU * FLUX2 EQU * ERROR RETURN JMP FLUXX,I EXIT HLFRQ DEF HALFQ HALFQ OCT 125125 * * BUFFER COMPARE ROUTINE * * COMPR NOP * NEED A ROUTINE TO GIVE BAD AND GOOD WORD AND WORD COUNT LDA BUFLG SET THE COMPARE WORD COUNTER LDB INBFL GET INPUT BUFFER LENGTH CPA B ARE THEY EQUAL? JMP COMP6 YES-CONTINUE CLB SETUP EXPECTED STATUS JSB ERMS,I NO-REPORT ERROR DEF E050 JMP COMP6 E050 EQU * ASC 11,E050 REC LENGTH ERROR/ COMP6 EQU * LDA BUFLG LOAD BUFFER LENGTH CMA,INA MAKE IT NEGATIVE STA COUNT STORE IT IN COUNT LDA FWAM SET THE BUFFER POINTER STA TMP1 -FOR THE OUT PUT BUFFER LDB INBUF SET THE POINTER FOR THE STB TMP2 -INPUT BUFFER ENT05 LDA TMP1,I GET THE OUTPUT WORD AND CPA TMP2,I -COMPARE IT TO INPUT JMP ENT04 LDB BUFLG GET RECORD LENGTH ADB COUNT GET WORD COUNT INB GET CORRECT WORD COUNT * NOTE NUMBER WILL PRINT OUT IN OCTAL RBL MULTIPLY BY 2 FOR BYTE COUNT STB COMP3 JSB MS,I REPORT BYTE IN ERROR DEF COMP7 RETURN DEF H101 POINTER TO MESSAGE COMP3 NOP BYTE IN ERROR H101 EQU * ASC 12,H101 TAPE BYTE COUNT #/ COMP7 EQU * * LDB TMP2,I GET BAD WORD STB COMP2 LDA TMP1,I LOAD GOOD WORD STA COMP1 JSB MS,I ERROR MESSAGE DEF COMP5 RETURN DEF H067 POINTER TO MESSAGE COMP2 NOP BAD WORD COMP1 NOP GOOD WORD H067 EQU * ASC 19,H067 DATA WORD IS= # AND SHOULD BE= #/ COMP5 EQU * CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT DATA TRANSFER ERROR DEF E062 JSB ERRCK CHECK FOR READ AND WRITE ERRORS COMP4 EQU * JMP COMPR,I EXIT ENT04 ISZ TMP1 ADVANCE THE BUFFER POINTERS ISZ TMP2 ISZ COUNT INCREMENT THE WORD COUNTER JMP ENT05 COMPARE THE NEXT LOCATIONS JMP COMP4 EXIT E062 EQU * ASC 08,E062 DATA ERROR/ * * RANDOM NUMBER GENERATOR * RAND NOP LDA BASE LOAD THE BASE ADA PRIME SUBTRACT THE PRIME SSA SKIP IF IT'S STILL POSITIVE LDA BASE THE BASE ISN'T BIG ENOUGH CLE,ELA DOUBLE THE BASE OR REMAINDER STA BASE -FOR THE NEXT TRY JMP RAND,I SPC 1 PRIME DEC -31069 BASE ABS 034512B SKP * * ROUTINE TO FILL OUTPUT BUFFER WITH BIT PATTERN * * CALLING SEQUENCE (NOTE VARIABLE BUFFER LENGTH) * JSB FILL,I * "A" CONTAINS THE NUMBER OF PATTERNS IN THE SEQUENCE * "B" CONTAINS THE S.A. OF THE PATTERN SEQUENCE * DEF RETURN TO USER * DEF BUFFER LENGTH * DEF ERROR RETURN * . * . * RTN EQU * * LIMITATIONS: * NOTE BUFFER STARTING ADDRESS = FWA * MAXIMUM LENGTH OF BUFFER=1/2(LWA-FWA) * .FILL NOP BEGIN STB .PATT STORE ADDRESS OF BIT PATTERN STB TMP1 CMA,INA GET NEG OF BIT PATTERN REPEAT # STA AREG SAVE THE NUMBER OF PATTERNS STA CNT1 SET THE PATTERN SEQUENCE COUNT LDA .FILL INA SETUP LOCATION OF BUFFER LENGTH LDB A,I GET BUFFER LENGTH STB TMP2 STORE IT INA LDB A,I GET ERROR RETURN STB ERRRT STORE IT LDA .FILL,I STA .FILL ADJUST USER RETURN LDB TMP2 LOAD BUFFER LENGTH SSB IS IT POSITIVE? JMP FILL2 NO-REPORT BUFFER TOO LONG LDA BFMAX GET MAX BUFFER SIZE INA ADD ONE CMA,INA GET NEG OF LWA ADB A ADD A TO B REG. SSB,RSS IS IT POSITIVE ? JMP FILL2 YES-ERROR * NO OK CONTINUE LDA TMP2 GET BUFFER STA BUFLG AND SETUP BUFFER LENGTH CMA,INA MAKE IT NEGATIVE STA COUNT SETUP COUNTER LDA FWAM GET BUFFER STARTING LOCATION MORE EQU * LDB TMP1,I STB A,I START FILLING ISZ TMP1 INCREMENT BIT PATTERN LOCATION INA INCREMENT BUFFER ADDRESS ISZ CNT1 INCREMENT PATTERN COUNTER JMP ENT00 LDB AREG GET NUMBER OF PATTERNS IN SEQUENCE STB CNT1 RESET # OF PATTERN IN SEQUENCE LDB .PATT RELOAD BIT PATTERN ADDRESS STB TMP1 SETUP TEMPORARY ADDRESS ENT00 ISZ COUNT IS BUFFER FULL? JMP MORE NO- GO GET NEXT PATTERN JMP .FILL,I YES-RETURN TO USER .PATT NOP POINTER TO BIT PATTERN CNT1 NOP BIT PATTERN SEQUENCE COUNTER ERRRT NOP ERROR RETURN FILL2 EQU * CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT ERROR DEF E061 JMP ERRRT,I ERROR RETURN E061 EQU * ASC 11,E061 BUFFER TOO LONG/ * * * ** DATA BIT PATTERNS ** SPC 1 * SINGLE ROTATING BIT PATTERN TSRB DEF *+1 OCT 002001 OCT 010000 OCT 020100 OCT 100002 OCT 004004 OCT 000420 OCT 000040 OCT 040200 OCT 001010 * TRACK SAWTOOTH PATTERN TSAW DEF *+1 OCT 177773 OCT 175352 OCT 145212 OCT 005010 OCT 000000 * CHANNEL SAWTOOTH PATTERN CSAW DEF *+1 OCT 177577 OCT 037437 OCT 007407 OCT 001401 OCT 000377 * POINTER TO ALL 1'S ALL1 DEF *+1 OCT 177777 * POINTER TO ALL 2'S ALL2 DEF *+1 OCT 022222 * * UNISL- ROUTINE TO SELECT TAPE UNIT * * CALL: * A REG. UNIT # * JSB UNISL * * * IE: * JMP OFF * . * . * . *OFF EQU * * UNISL NOP STA AREG SAVE A REG.=UNIT # LDB AREG ADB ATSEL GET ADDRESS OF SELECT COMMAND LDA B,I GET COMMAND JSB AOTA OUTPUT COMMAND JSB STATS GET STATUS AND MSKCR IS COMMAND REJECT BIT SET? SZA,RSS JMP UNI03 NO-CONTINUE CLB SETUP EXPECTED STATUS JSB ERMS,I YES-REPORT ERROR DEF E027 JMP UNI04 UNI03 EQU * LDA RECNO GET THE CURRENT RECORD # LDB .RECU LOAD POINTER TO RECORD TABLE ADB UNIT COMPUTE POSITION IN TABLE STA B,I SAVE RECORD COUNT LDA AREG GET CURRENT UNIT # STA UNIT SAVE IT LDB .RECU GET POINTER TO RECORD TABLE ADB UNIT COMPUTE TABLE ADDRESS LDA B,I GET NEW RECORD COUNT STA RECNO SAVE IT FOR NEXT TEST UNI04 EQU * JSB STATS GET STATUS AND MSKOL CHECK OFFLINE BIT SZA IS IT ZERO? JMP UNI02 NO- EXIT OFFLINE ISZ UNISL YES-ADJUST RETURN FOR ON-LINE UNI02 EQU * JMP UNISL,I EXIT ROUTINE * * * RECORD NUMBER TABLE-CONTAINS CURRENT RECORD BY UNIT * .RECU DEF *+1 POINTER TO TABLE RECU0 NOP RECORD COUNT FOR UNIT 0 RECU1 NOP RECORD COUNT FOR UNIT 1 RECU2 NOP RECORD COUNT FOR UNIT 2 RECU3 NOP RECORD COUNT FOR UNIT 3 * * * * SUBROUTINE VARBF - FILLS OUTPUT WITH RANDOM DATA * - BUFFER LENGTH IS ALSO RANDOM *CALL: * JSB VARBF * * VARBF NOP JSB RANLG GET RANDOM BUFFER LENGTH JSB RADBF FILL BUFFER WITH RANDOM DATA JMP VARBF,I EXIT * * * SUBROUTINE ERRCK - CHECKS READ AND WRITE ERROR FLAGS *CALL: * JSB ERRCK * * ERRCK NOP LDA RDERR CHECK READ AND WRITE FLAGS ADA WRERR SZA,RSS IS IT ZERO? JMP ERRCK,I YES-EXIT LDA RDERR CHECK READ ERROR FLAG SZA,RSS IS IT NON ZERO? JMP ERK05 NO-GO CHECK WRITE ERROR FLAG CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT READ ERROR DEF E066 POINTER TO MESSAGE ERK05 EQU * LDA WRERR CHECK WRITE ERROR FLAG SZA,RSS IS IT NON ZERO? JMP ERK11 NO-CONTINUE CLB SETUP EXPECTED STATUS JSB ERMS,I YES-REPORT WRITE ERROR DEF E065 POINTER TO MESSAGE ERK11 EQU * JMP ERRCK,I EXIT * E065 EQU * ASC 09,E065 WRITE ERROR/ E066 EQU * ASC 08,E066 READ ERROR/ * * * * SUBROUTINE RADBF-FILLS BUFFER WITH RANDOM #S * -BUFFER LENGTH IS VARIBLE * -LENGTH=BUFLG *CALL: * JSB RADBF * * RADBF NOP LDA FWAM SETUP START OF BUFFR STA TMP1 LDA BUFLG GET BUFFER LENGTH CMA,INA MAKE IT NEGATIVE STA CNTR SETUP LOOP COUNTER RADB1 EQU * JSB RAND GET RANDOM NUMBER STA TMP1,I ISZ TMP1 INCREMENT STORAGE ADDRESS ISZ CNTR INCREMENT COUNTER JMP RADB1 LOOP IF COUNTER NOT = 0 JMP RADBF,I EXIT * * * SUBROUTINE RANLG- SETUP TO MAKE BUFLG VARIABLE * *CALL: * JSB RANLG * * RANLG NOP RANG1 EQU * JSB RAND GET RANDOM LENGTH SSA IS IT POSITIVE? CMA NO-MAKE IT POSITIVE STA BUFLG SETUP BUFFER LENGTH CMA,INA MAKE A NEGATIVE LDB BFMAX GET MAX BUFFER ADB A SUBTRACT SSB IS IT POSITIVE? JMP RANG1 NO-GO GET A NEW RANDOM # JMP RANLG,I EXIT * * * SUBROUTINE DATFG- REPORTS ERROR WHEN CONTROLLER LOSES * - DATA FLAG. *CALL: - NOTE ALSO CLEARS CONTROLLER * JSB DATFG * * DATFG NOP JSB CLEAR CLEARS CONTROLLER CLB SETUP EXPECTED STATUS JSB ERMS,I DEF E144 JMP DATF3 E144 EQU * ASC 10,E144 LOST DATA FLAG/ DATF3 EQU * JMP DATFG,I EXIT * * * SUBROUTINE BITCK - USES MASK IN A REGISTER *CALL: - TO CHECK BIT/OR BITS IN STATUS * LDA MASK * JSB BITCK * JMP * * BITCK NOP STA MASK SAVE A REG. MASK JSB STATS GET STATUS AND MASK CHECK BIT PATTERN CPA MASK ARE THE BITS SET? JMP BTCK1 YES-GO TO BIT SET RETURN ISZ BITCK NO- ADJUST RETURN ADDRESS BTCK1 EQU * JMP BITCK,I EXIT * * * * KCORE ROUTINE- DETERMINES MAX BUFFER LENGTH * KCORE NOP LDA LWAM GET LAST WORD AVAILABLE ADA .M1 LDB FWAM GET FIRST WORD AVAILABLE CMB,INB NEG NEGATIVE IN B REG ADA B ADD THEM AND MSK77 ARS DIVIDE A BY 2 STA BFMAX STORE MAX BUFFER SIZE ADA FWAM ADD ADDRESS OF FWAM STA DBDI SAVE INPUT STARTING ADDRESS JMP KCORE,I RETURN * * * DMAC1 ROUTINE TO CHECK COMPUTER FOR DMA * -DMAFG=0 NO DMA * -DMAFG=1 1 CHANNEL DMA * -DMAFG=2 2 CHANNEL DMA DMACK NOP CLA STA DMAFG CLEAR DMA FLAG LDA CPTO LOAD COMPUTER TYPE AND OPTIONS AND .200 MASK OUT DMA1 ONLY SZA,RSS IS IT ZERO? JMP DMA11 YES-EXIT LDA .1 NO STA DMAFG SET DMA FLAG DMA11 EQU * * * DMAC2 ROUTINE TO CHECK COMPUTER FOR * -DMA 2 CHANNELS * LDA CPTO LOAD COMPUTER TYPE AND OPTIONS AND .4 MASK OUT 2 CHANNEL DMA SZA,RSS IS IT ZERO? JMP DMA21 YES-EXIT LDA .2 NO STA DMAFG SETUP DMA FLAG DMA21 EQU * JMP DMACK,I RETURN * * * CHECK SWITCH REGISTER ROUTINE * * CALL * LDB * JSB SWRC,I * P+1 * P+2 * .SWRG NOP LDA SKPSW LOAD SKIP SWITCH REG FLAG SZA IS IT ZERO? JMP .SWR1 NO-FLAG SET-SKIP OVER LIA SW LOAD SWITCH REGISTER AND B MASK OUT UNWANTED BITS SZA,RSS ANY BITS SET? .SWR1 EQU * ISZ .SWRG NO RETURN P+2 JMP .SWRG,I YES- EXIT * * * * LPCK- CHECKS LP BIT IN STATUS * WORD IS NOT SET AFTER A FORWORD *CALL: MOTION COMMAND HAS BEEN EXECUTED * JSB LPCK * * LPCK NOP LDA MSKLP JSB BITCK IS UNIT STILL AT LP? JMP LPCK1 YES-REPORT ERROR LPCK2 JMP LPCK,I NO-EXIT LPCK1 EQU * CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT ERROR DEF E103 JMP LPCK2 E103 EQU * ASC 06,E103 LP SET/ * * * IBTB-CHECKS THAT IB BIT IS SET. *CALL: * JSB IBTB * * IBTB NOP LDA MSKIB LOAD INTERFACE BUSY BIT JSB BITCK IS THE BIT SET? JMP IBTB1 YES-EXIT LDB MSKIB NO-REPORT ERROR JSB ERMS,I REPORT ERROR DEF E164 * IBTB1 EQU * JMP IBTB,I EXIT * * * FPCK-REPORTS ERROR IS FILE PROTECT BIT IS * SET (NO WRITE RING). * *CALL: * JSB FPCK * * FPCK NOP LDA MSKFP JSB BITCK IS FILE PROTECT BIT SET? JMP FPCK1 YES-REPORT NO WRITE RING FPCK2 EQU * JMP FPCK,I EXIT FPCK1 EQU * CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT NO WRITE RING DEF E042 JMP FPCK2 EXIT * * * WRITES A RECORD USING A SINGLE DATA PATTERN *CALL: * LDA * LDB * JSB WT00 * * WT00 NOP STA WT002 LDA .1 SINGLE PATTERN SEQUENCE JSB FILL,I GO FILL OUTPUT BUFFER DEF WT001 NORMAL RETURN WT002 NOP BUFFER LENGTH DEF WT001 ERROR RETURN WT001 EQU * JSB SIOW,I WRITE A RECORD JSB BSRWF BACKSPACE THE RECORD LDA WT00 RETURN ADDRESS CPA .T15 IS CALL FROM ST 5/6 IN TEST15? RSS YES JMP WT003 NO - SKIP 31 MS DELAY LDA .37 MAX DELAY FOR BS REC TO STOP JSB TMRR,I WT003 JSB SIOR,I READ THE RECORD JSB COMPR IS IT CORRECT- JMP WT00,I EXIT SUBROUTINE .T15 DEF T15RT RET ADD IN TEST15(DEC) * HDMS1 EQU * ASC 09,7970-13181 DIAG./ ENDBP EQU * END OF BASE PAGE * * * * * SKP ORG PAG06 * SKIP TO NEXT PAGE OF MEMORY ******************************** * * * HDMS2 EQU * ASC 09,7970-13183 DIAG./ * IOID EQU * DEF STA1 COMMAND CHANNEL STATS DEF OCMD1 COMMAND CHANNEL OCMMD DEF OCMD2 COMMAND CHANNEL OCMMD DEF CLEA1 COMMAND CHANNEL CLEAR DEF FLGW1 COMMAND CHANNEL FLGWT DEF .RD06 COMMAND CHANNEL .READ DEF .WR06 COMMAND CHANNEL .WRIT DEF CMD COMMAND CHANNEL DEF RWSL1 COMMAND CHANNEL RWSLO-T49 DEF CLRC2 COMMAND CHANNEL CLRCH DEF AOTA1 COMMAND CHANNEL AOTA DEF LON14 COMMAND CHANNEL LONGW DEF LOR15 COMMAND CHANNEL LONGR DEF FGCK1 COMMAND CHANNEL CH CHECK DEF OTCD5 COMMAND CHANNEL OUTCD DEF T0205 COMMAND CHANNEL TEST 02 DEF T1002 COMMAND CHANNEL TEST 10 DEF WTDM4 COMMAND CHANNEL WTDMA DEC -1 IOID2 EQU * DEF DTA DATA CHANNEL DEF .RD01 DATA CHANNEL .READ DEF .RD02 DATA CHANNEL .READ DEF .RD03 DATA CHANNEL .READ DEF .RD04 DATA CHANNEL .READ DEF .RD14 DATA CHANNEL .READ DEF .WR17 DATA CHANNEL .WRIT DEF .WR01 DATA CHANNEL .WRIT DEF .WR02 DATA CHANNEL .WRIT DEF .WR04 DATA CHANNEL .WRIT DEF .WR05 DATA CHANNEL .WRIT DEF RGP01 DATA CHANNEL RDGAP DEF RGP02 DATA CHANNEL RDGAP DEF RGP03 DATA CHANNEL RDGAP DEF RGP06 DATA CHANNEL RDGAP DEF RGP07 DATA CHANNEL RDGAP DEF DMP09 DATA CHANNEL DMAUP DEF CWDMA DATA CHANNEL DMA CONTROL DEF T0406 DATA CHANNEL TEST 04 DEF T0408 DATA CHANNEL TEST 04 DEF CLRC1 DATA CHANNEL CLRCH DEF T0404 DATA CHANNEL TEST 04 DEF T0603 DATA CHANNEL TEST 6 DEF T0604 DATA CHANNEL TEST 6 DEF T1005 DATA CHANNEL TEST 10 DEF T1007 DATA CHANNEL TEST 10 DEF T1009 DATA CHANNEL TEST 10 DEF T1104 DATA CHANNEL TEST 11 DEF LONG1 DATA CHANNEL LONGW DEF LONG3 DATA CHANNEL LONGW DEF LONG4 DATA CHANNEL LONGW DEF LON12 DATA CHANNEL LONGW DEF LOR01 DATA CHANNEL LONGR DEF LOR03 DATA CHANNEL LONGR DEF LOR04 DATA CHANNEL LONGR DEF LOR14 DATA CHANNEL LONGR DEF CRC1 DATA CHANNEL CRCC DEF FGCK3 DATA CHANNEL CH CHECK DEF SIO27 DATA CHANNEL SIOCR DEF SIO29 DATA CHANNEL SIOCR DEF T1503 DATA CHANNEL TEST 15 DEF T1508 DATA CHANNEL TEST 15 DEC -1 TSTD EQU * DEF TST.0 BASIC I/O ( DATA + COMMAND CH) DEF TST01 INITIAL CLEAR CONTROLLER + UNIT DEF TST02 BEGINING OF TAPE (BOT) CHECK DEF TST03 COMMAND REJECT TEST DEF TST04 REWIND AND WRITE COMMAND EXECUTE DEF TST05 GAP COMMAND TEST DEF TST06 FILE MARK COMMAND TEST DEF TST07 MULTI-FILE MARK TEST DEF TST08 INITIAL WRITE-READ TEST DEF TST09 125125 WRITE-READ TEST DEF TST10 FORCE DATA AND TIMING ERROR STAT DEF TST11 RECORD SPACING TEST DEF TST12 FILE SPACING TEST DEF TST13 CLEAR TIME CHECK DURING MOTION DEF TST14 INTERRCORD GAP TEST