ASMB,A,B,L,C
      HED 7900/7901 CARTRIDGE DISC DIAGNOSTIC FOR 2100 SERIES 
*     7900/7901 CARTRIDGE DISC DIAGNOSTIC FOR 2100 SERIES COMPUTERS 
* 
*         CONFIGURATION ADDRESS = 100B
* 
*         STARTING ADDRESS = 2000B
* 
*         SWITCH REGISTER DURING CONFIGURATION
*         BITS 0-5  SELECT CODE FOR THE I/O CHANNEL CONTAINING THE
*                   DATA  INTERFACE FOR THE DISC
*                   THE COMMAND CHANNEL INTERFACE BOARD IS THE NEXT 
*                   HIGHER SELECT CODE
*         BITS 6-13 SPARES
*         BIT  14   SET TO ZERO FOR DMA CHANNEL 6 
* 
*         SWITCH REGISTER DURING EXECUTION
* 
*         BIT  0    NOT USED
*         BIT  1    SKIP TO END OF SECTION ONCE WHEN SET
*         BIT  2    IF SET TO ONE,ALTER CYLINDER TABLE AND/OR 
*                   PATTERN TABLE AND/OR SELECT HEADS 
*                   AND/OR CHANGE UNIT REMOVAL THRESHOLD
*                   AND/OR ALTER UNIT TABLE 
*         BIT  3    IF SET TO ONE,EXECUTE OPERATOR DESIGN PROGRAM 
*         BIT  4    IF SET TO ONE, EXECUTE WRITE
*                   ADDRESS PART OF S1
*         BIT  5    IF SET TO ONE,SHORTEN TEST IN S2,S3,S4 AND S5 
*         BIT  6    IF SET TO ONE,RESTRICT CYLINDER SELECTION 
*         BIT  7    IF SET TO ONE,REPEAT LAST SECTION 
*         BIT  8    SUPPRESS SPACES,PRINT H65 INDEPENDENT OF BIT 10 
*                   IF ERROR OCCURS.
*         BIT  9    IF SET TO ONE,HALT AFTER EACH SECTION OF THE
*                   PROGRAM 
*         BIT  10   IF SET TO ONE,ALL NON-ERROR MESSAGES FOR THE
*                   TELEPRINTER WILL BE SUPPRESSED,EXCEPT CURRENT 
*                   OPERATION MESSAGES AND H51
*         BIT  11   IF SET TO ONE,ALL MESSAGES FOR THE TELEPRINTER
*                   WILL BE SUPPRESSED
*         BIT  12   IF SET TO ONE, PRINT TIMING MESSAGES
*                   IN S2 AND S4
*         BIT  13   IF SET TO ONE,LOOP ON LAST STEP 
*         BIT  14   IF SET TO ZERO,PROGRAM HALTS AFTER EACH ERROR 
*         BIT  15   IF SET TO ONE,PROGRAM WILL COME TO AN ORDERLY 
*                   HALT AT THE END OF CURRENT STEP 
* 
      ORG 100B
      JMP CNFIG,I        CONFIGURE PROGRAM
      ORG 105B     TO DEFINE ENDING ADDRESS FOR SIO DUMP
      DEF PEND     ENDING LOCATION OF PROGRAM 
      ORG 126B
      OCT 151302    DSN=151302,REV=1805    (1-10-78)
      ORG 130B
* 
*     CURRENT OPERATION (LOOP ADDRESS)
* 
COPR  NOP 
      STA STEPN     CAPTURE RETURN
      JMP COPR,I      ADDRESS 
* 
A     EQU 0        A REGISTER ADDRESS 
B     EQU 1        B REGISTER ADDRESS 
CC    EQU 0        THIS SYMBOL IS USED AT ALL PLACES
*                                  WHERE THE COMMAND CHANNEL NUMBER 
*                                  IS STORED
CH    EQU 0         THIS SYMBOL IS USED AT ALL
*                                   PLACES WHERE BOTH CHANNELS ARE
*                                   STORED IN BASIC I/O 
DC    EQU 0        THIS SYMBOL IS USED AT ALL 
*                                  PLACES WHERE THE DATA CHANNEL
*                                  NUMBER IS STORED 
DMAC  EQU 2        DMA CONTROL CHANNEL
DMAD  EQU DMAC+4   DMA INTERRUPT CHANNEL
SIOLO EQU 102B     ENTRY ADDRESS FOR SIO LIST OUTPUT
SIOFO EQU 103B      ENTRY ADDRESS FOR FAST OUTPUT 
* 
SZREF EQU 0        APPEARS WHERE A REFERENCE DEPENDS
*                                  ON THE SECTOR SIZE.
* 
MSIZE EQU 117B      MEMORY SIZE 
TMR   EQU 121B      LINK TO ONE MSEC TIME DELAY 
I2ASC EQU 123B      LINK TO INTEGER TO ASCII CONV.
O2ASC EQU 124B      LINK TO OCTAL TO ASCII CONV.
* 
ATTN  BSS 1 
BILD  BSS 1 
BPTRA BSS 1 
BUFAD BSS 1        PRIMARY BUFFER ADDRESS 
BUFAE BSS 1        SECONDARY BUFFER ADDRESS 
CC7   OCT 0 
CCHAR BSS 1 
CCNT  BSS 1 
CH13  NOP 
CLOAD BSS 1 
COPRN NOP 
CPNT  BSS 1 
CPONT BSS 1 
CSAVE BSS 1 
CSTOR BSS 1 
CYL   BSS 1         CYLINDER NUMBER 
CYLX  BSS 1 
DC14  OCT 0 
DFLT  BSS 1 
DMRF  BSS 1        DMA ERROR INDICATOR
ELOC  BSS 1         LAST ERROR NUMBER 
ERR   BSS 1         NUMBER OF ERRORS
FIRST BSS 1         USED IN S4
FL6   BSS 1 
FSAVE BSS 1 
GLOB1 BSS 1 
GLOB2 BSS 1 
GLOB3 BSS 1 
GLOB4 BSS 1 
GLOB5 BSS 1 
GLOB6 BSS 1 
HDON  OCT 0 
HEAD  BSS 1        BITS 6 - 0 HEAD NUMBER 
HFLAG OCT 0 
IFRST BSS 1 
ISR   BSS 1 
LABEL BSS 1 
LABLC OCT 0 
LBLP1 BSS 1 
LBLP2 BSS 1 
LCNT  BSS 1 
LOCAL BSS 1 
LWAM  BSS 1         LAST WORD OF AVAILABLE MEMORY 
MAX   DEC 20        NO. OF ERRORS FOR UNIT REMOVAL
MDFLG BSS 1         SET TO 14B FOR MULTI-DRIVE
NEWBD OCT 0   INDICATE IF TESTING NEW BOARD 
NI    BSS 1 
NUMP  DEC 1 
OPCNT BSS 1 
OPSRT BSS 1 
PASS  BSS 1        PASS NUMBER STORED HERE
PCNT  BSS 1 
PCNTA BSS 1 
PFLAG BSS 1 
PLOAD BSS 1 
PSAVE NOP 
PSTOR BSS 1 
S400  DEF S40 
S40   BSS 4 
S4BUG BSS 1 
S6CNT BSS 1 
SAV6  BSS 1 
SECTN BSS 1        CURRENT SECTION NUMBER 
SECTR BSS 1        SECTOR WHERE CURRENT OPERATION 
*                                  WILL START 
SFLAG BSS 1 
SHTAS BSS 1 
STAUS BSS 1        DEVICE STATUS STORED HERE
STEPN OCT 0 
STRF  BSS 1        ERROR POINTER OR ZERO IF NO
SVCTA BSS 1         USED TO TIME SEEKS IN S2 AND S4 
TEMP1 BSS 1 
TEMP2 BSS 1 
TEMP3 BSS 1 
UNITS DEF UNITA 
UNITA OCT 0 
      BSS 3 
UNITC OCT 1 
UNIT  OCT 0 
VAL1  BSS 1 
VAL2  BSS 1 
VALUE BSS 1 
WCNT  BSS 1        POSITIVE WORD COUNT FOR
*                                  CURRENT OPERATION
WD0   DEF * 
WD1   BSS 1 
WD2   BSS 1 
WD3   BSS 1 
WD4   BSS 2 
CVT3  EQU WD1 
CVT1  EQU WD2 
CVT2  EQU WD3 
CVT   DEF WD1 
      SKP 
D0    DEC 0 
B1    DEC 1 
D1    EQU B1
D2    DEC 2 
CRLFL EQU D2
BIT1  EQU D2
D3    DEC 3 
B3    EQU D3
D4    DEC 4 
BIT2  EQU D4
B4    EQU D4
D5    DEC 5 
D6    DEC 6 
D7    DEC 7 
B7    EQU D7
D8    DEC 8 
BIT3  EQU D8
B10   EQU D8
D9    DEC 9 
B11   EQU D9
D10   DEC 10
D11   DEC 11
D12   DEC 12
B14   EQU D12 
D13   DEC 13
B15   EQU D13 
D14   DEC 14
B16   EQU D14 
D15   DEC 15
B17   EQU D15 
BIT4  DEC 16
B20   EQU BIT4
D16   EQU BIT4
D17   DEC 17
B21   EQU D17 
D18   DEC 18
B22   EQU D18 
D19   DEC 19
B23   EQU D19 
D20   DEC 20
B24   EQU D20 
B25   DEC 21
D21   EQU B25 
B26   DEC 22
D22   EQU B26 
D23   DEC 23
B27   EQU D23 
B30   DEC 24
D24   EQU B30 
D25   DEC 25
B31   EQU D25 
B32   DEC 26
D26   EQU B32 
D27   DEC 27
B33   EQU D27 
D28   DEC 28
B34   EQU D28 
D29   DEC 29
B35   EQU D29 
D30   DEC 30
B36   EQU D30 
B37   DEC 31
D31   EQU B37 
B40   DEC 32
BIT5  EQU B40 
D32   EQU B40 
B41   DEC 33
D33   EQU B41 
B42   DEC 34
D34   EQU B42 
B43   DEC 35
D35   EQU B43 
B44   DEC 36
D36   EQU B44 
B45   DEC 37
D37   EQU B45 
B46   DEC 38
D38   EQU B46 
B47   DEC 39
B51   DEC 41
B52   DEC 42
B53   DEC 43
B54   DEC 44
B55   DEC 45
D45   EQU B55 
B56   DEC 46
D46   EQU B56 
B57   DEC 47
D47   EQU B57 
B60   DEC 48
D48   EQU B60 
B61   DEC 49
D49   EQU B61 
B62   DEC 50
D50   EQU B62 
D51   DEC 51
B64   DEC 52
D52   EQU B64 
B65   DEC 53
D53   EQU B65 
B66   DEC 54
D54   EQU B66 
B67   DEC 55
D55   EQU B67 
B70   DEC 56
D56   EQU B70 
B71   DEC 57
D57   EQU B71 
B100  DEC 64
BIT6  EQU B100
B103  DEC 67
B104  DEC 68
B105  OCT 105 
D72   DEC 72
D95   DEC 95
B142  OCT 142 
D106  DEC 106 
BIT7  OCT 200 
BIT8  OCT 400 
B401  OCT 401 
BIT9  OCT 1000
BIT10 OCT 2000
B2011 OCT 2011
A2400 OCT 2400
BIT11 OCT 4000
A4400 OCT 4400
BIT12 OCT 10000 
BIT13 OCT 20000 
C0001 OCT 20001 
C1440 OCT 21440 
C7461 OCT 27461 
BIT14 OCT 40000 
E2001 OCT 42001 
BIT15 OCT 100000
B7777 OCT 17777 
BB    OCT 20040 
B2060 OCT 20060 
CRLF  OCT 6412
D7777 OCT 37777 
H7777 OCT 77777 
HA    OCT 40400 
HB    OCT 1400
HC    EQU BIT8
JMPI  OCT 126000
JSB1  JSB R1,I
MEM   OCT 70000 
NN    OCT 47000 
P7400 OCT 177400
P7700 OCT 177700
THLT2 OCT 106002
HLTC  OCT 102010
YY    OCT 13400 
B77   OCT 77
B177  OCT 177 
B377  OCT 377 
B1777 OCT 1777
B3777 OCT 3777
D128  EQU BIT7
D129  DEC 129 
D202  DEC 202 
D203  DEC 203 
D256  EQU BIT8
D384  DEC 384 
D512  EQU BIT9
B6000 OCT 6000
D1024 EQU BIT10 
PAGE8 OCT 16000 
MM1   DEC -1
MM2   DEC -2
MM3   DEC -3
MM4   DEC -4
MM5   OCT -5
MM6   DEC -6
MM7   DEC -7
MM8   DEC -8
MM10  DEC -10 
MM13  DEC -13 
MM16  DEC -16 
MM31  DEC -31 
MM48  OCT -60 
MM56  OCT -70 
MM58  OCT -72 
MM64  EQU P7700 
MM105 DEC -105
M124  DEC -124
M175  DEC -175
M256  EQU P7400 
MM512 DEC -512
MM650 DEC -650
M1024 DEC -1024 
M3000 DEC  -3000
M7936 DEC -7936 
* 
* 
ASCD0 ASC 1,.0
ASCZZ ASC 1,00
UPD   ASC 1,U/
LRD   ASC 1,L/
BPTR  DEF BUFB     WRITE BUFFER 
BPTR1 DEF BUFB+128
BPTS  DEF  BUFB+1024 READ BUFFER
BPTO  DEF BUFB+2048 
DMACW ABS 120000B+DC
      SKP 
* 
* 
*     BASE PAGE LINKS AND POINTERS
* 
* 
.E6   DEF E6
ADDOI DEF ADDO
ADDRS DEF INTPT+1 
CNFIG DEF INIT
CRLFI DEF CRLF
DDD   DEF D0
EFER  DEF FER 
EFERC DEF FERC
ELER  DEF LER 
ERHTI DEF ERHLT 
FCYKI DEF FCYCK 
FTR   DEF FTRBN 
GETNI DEF GETN
JE6   JMP .E6,I 
LONG  DEF JP65C 
OPDNI DEF OPDSN 
P001A DEF J001A 
P002A DEF J002A 
P003A DEF J003A 
P004A DEF J004A 
P005A DEF J005A 
P013A DEF JP13A 
P013B DEF JP13B 
P023A DEF JP23A 
P024A DEF JP24A 
P027A DEF JP27A 
P033A DEF JP33A 
P037A DEF JP37A 
P037B DEF JP37B 
P040A DEF JP40A 
P040B DEF JP40B 
P041A DEF JP41A 
P042A DEF JP42A 
P047A DEF JP47A 
P047B DEF JP47B 
P047C DEF JP47C 
P050A DEF JP50A 
P050B DEF JP50B 
P051A DEF JP51A 
P051B DEF JP51B 
P051C DEF JP51C 
P051D DEF JP51D 
P052A DEF JP52A 
P052B DEF JP52B 
P052C DEF JP52C 
P052D DEF JP52D 
P052E DEF JP52E 
P052F DEF JP52F 
P053A DEF JP53A 
P053B DEF JP53B 
P054A DEF JP54A 
P054B DEF JP54B 
P056A DEF JP56A 
P057A DEF JP57A 
P064A DEF JP64A 
P064B DEF JP64B 
P065A DEF JP65A 
P065B DEF JP65B 
P065E DEF JP65E 
P070A DEF JP70A 
PO72A DEF JP72A 
PATR  DEF PATTR 
PATTI DEF GLOB4     USED IN PCHK
PCHKI DEF PCHK
PCOPI DEF PCOPR 
PFMI  DEF FMI 
PPT1  JSB TV1,I 
PPT2  JSB TV2,I 
PPT4  JSB TV4,I 
PPT5  JSB TV5,I 
PPT6  JSB TV6,I 
PPT7  JMP OPDNI,I 
PPT8  JSB TV8,I 
PPT9  JSB TV9,I 
PPT10 JSB TV10,I
PPT13 JSB TV13,I
PPT14 JMP TV14,I
PPT15 JSB TV15,I
R1    DEF RETRN 
RNCHI DEF RNCH
RNSCI DEF RNSC
SHORT DEF JP65D 
SKIPI DEF SKIP
ST32I DEF STP32 
ST35I DEF STP35 
THRUI DEF THRU
TRT   DEF TRTBP 
TV1   DEF TVP1
TV2   DEF TVP2
TV4   DEF TVP4
TV5   DEF TVP5
TV6   DEF TVP6
TV8   DEF TVP8
TV9   DEF TVP9
TV10  DEF TVP10 
TV13  DEF TVP13 
TV14  DEF TVP14 
TV15  DEF TVP15 
VAL   DEF VALUE 
WADI  DEF WADR
WADRI DEF WADRA 
* 
* 
SECT  DEF *,I       * 
      DEF S1         *
      DEF S2          * 
      DEF S3           *
      DEF S4            * 
      DEF S5             *
* 
* 
*         THE FOLLOWING WORDS AND EQUATES DETERMINE THOSE 
*     STATUSES, COMMANDS, SIZES, ETC. THAT MIGHT
*     VARY BECAUSE OF DESIGN CHANGES
* 
* 
CYCHK OCT 060000   CYCLIC CHECK COMMAND 
CYPP  EQU D203     NUMBER OF CYLINDERS PER PACK 
DFTB  EQU BIT8     DEFECTIVE TRACK BIT FOR ADDRESSES
LCYL  EQU 202      LAST CYLINDER
PALT  OCT 130000   ALTERNATE POSITION COMMAND 
POSIT OCT 030000   POSITION COMMAND 
READC EQU BIT13     READ COMMAND
RFINE OCT 050000
SCPT  EQU B30       NUMBER OF SECTORS PER TRACK 
WPCYL DEC 6144      WORDS PER CYLINDER (=TRPC*SCPT*WORDS PER
*                                   SECTOR (128 FOR HP 7900)) 
STATS EQU D0        STATUS COMMAND
TRPC  EQU D2       NUMBER OF TRACKS PER CYLINDER
WRILB EQU BIT9     WRITE LOCKOUT BIT FOR ADDRESSES
WRITA OCT 110000   WRITE ADDRESS COMMAND
WRITC EQU BIT12     WRITE COMMAND 
* 
*                         BIT0      ANY ERROR BIT 
*                         BIT1     DATA ERROR BIT 
PBBIT EQU BIT2      DRIVE BUSY BIT
FLBIT EQU BIT3      FLAGGED CYLINDER BIT
*                         BIT4      ADDRESS ERROR BIT 
*                         BIT5      END OF CYLINDER BIT 
NRBIT EQU BIT6      NOT READY BIT 
*                         BIT7     NOT USED 
*                         BIT8      SEEK CHECK BIT
*                         BIT9      ENABLE INITIALIZATION BIT 
*                         BIT10     SURFACE PROTECT BIT 
*                         BIT11     DRIVE UNSAFE BIT
*                         BIT12     NOT USED
*                         BIT13     OVERRUN ERROR BIT 
*                         BIT14     FIRST SEEK BIT
*                         BIT15     NOT USED
* 
* 
SCST  EQU D8        SECTOR WHERE SECOND THIRD STARTS
SCLT  EQU D16      SECTOR WHERE LAST THIRD STARTS 
WCFT  EQU BIT10+SZREF WORD COUNT FOR FIRST THIRD
WCLT  EQU BIT10+SZREF WORD COUNT FOR LAST THIRD 
* 
NFFB  OCT 177777
      HED RAND
* 
* 
* 
*     RANDOM NUMBER GENERATOR 
* 
*         THIS ROUTINE GENERATES BIT PATTERNS FOR 
*     THE DISK DIAGNOSTIC.  NO CLAIM IS MADE FOR
*     STATISTICAL RANDOMNESS. 
* 
*         EXITS WITH PATTERN IN A,
*         B UNCHANGED,
* 
* 
* 
RAND  NOP 
      LDA BASE     LOAD BASE
      ADA PRIME    SUBTRACT THE PRIME 
      SSA          SKIP IF STILL POSITIVE 
      LDA BASE     OOPS, BASE NOT BIG ENOUGH
      CLE,ELA      DOUBLE BASE OR REMAINDER 
      STA BASE     FOR NEXT TRY 
      JMP RAND,I
* 
PRIME DEC -31069
*                                   THIS PRIME NUMBER LOOPS EVERY 
*                                   31068 TIMES IN ITS RECIPROCAL 
*                                   EXPANSION 
BASE  ABS 034521B 
      HED SEEK,SEES,SEEH,STAT,COMMD,DADO,WAITD
* 
* 
*         ROUTINES TO DO COMMONLY REQUIRED OPERATIONS.
* 
* 
SEEK  NOP 
      LDB B44       CURRENT OPERATION CODE
      LDA CYL      PUT CYLINDER NUMBER OUT BEFORE 
      JSB DADO     GIVING THE COMMAND 
      LDA POSIT    LOAD COMMAND FOR POSITION
SEEK1 JSB COMMD     ISSUE COMMAND 
      JSB WAITD 
      LDA HEAD
      IOR HDON      SELECT SURFACE
      ALF,ALF      HEAD NUMBER TO LEFT HALF 
      IOR SECTR    PLUG IN SECTOR NUMBER
      JSB DADO      OUTPUT HEAD-SECTOR
      JSB WAITD 
      JMP SEEK,I
* 
* 
SEES  NOP 
SEEH  EQU SEES
      LDB B15       CURRENT OPERATION CODE
      LDA CYL      LOAD CYLINDER NUMBER 
      JSB DADO     PUT OUT ON DATA CHANNEL
      LDA SEES
      STA SEEK
      LDA PALT     LOAD ALTERNATE POSITION COMMAND
      JMP SEEK1 
* 
* 
STAT  NOP                STATUS CHECK ROUTINE 
      LDA STATS    LOAD THE DCU STATUS COMMAND
DC23  STC DC,C     SET UP DATA CHANNEL FOR INPUT
      LDB COPRN     DON'T CHANGE CURRENT OPERATION
      JSB COMMD    OUTPUT COMMAND 
      NOP      ALLOW SOME TIME
      CLA,INA 
DC15  SFS DC       BACK YET?
      JSB  TMR,I    NO- DELAY 1 MS
DC12  SFC DC       STATUS SHOULD BE BACK
      JMP  STABK      AFTER 1 MS
      JSB PCOP     PRINT CURRENT OPERATION MESSAGE
E12   JSB ERROR     NO DC FLAG WHILE CHECKING STATUS
      JSB ADDOI,I 
*                                  FALLOUT OKAY 
STABK EQU * 
DC01  LIA DC
      AND NFFB
      STA STAUS    SAVE STATUS
      JMP STAT,I   RETURN STATUS IN A 
* 
* 
COMMD NOP 
      IOR UNIT     PLUG IN UNIT NUMBER
CC01  OTA CC
CC02  CLC CC       MAKE SURE ENCODE IS ZERO 
CC03  STC CC,C     NOW SET ENCODE 
      STB COPRN     SET UP CURRENT OPERATION NUMBER 
      JMP COMMD,I 
* 
* 
DADO  NOP 
DC02  OTA DC
DC03  STC DC,C
      JMP DADO,I
* 
* 
WAITD NOP                WAIT ON DATA CHANNEL 
      LDA MM16     ALLOW A SHORT COUNT
WALP  EQU * 
DC04  SFC DC
      JMP WAITD,I 
      SSA,INA 
      JMP WALP
      JSB PCOP     PRINT CURRENT OPERATION MESSAGE
DC13  SFS DC       CHECK FOR FLAG NOW 
      JMP E63 
E11   JSB ERROR     LATE DC FLAG
      JMP *+2 
E63   JSB ERROR     NO DC FLAG
      JSB ADDOI,I 
      JMP WAITD,I 
      HED WAITS,WAIH,WAIS 
* 
*     THE WAITS ROUTINE WAITS FOR UP TO 105 MILLISECONDS
*     FOR THE COMMAND CHANNEL FLAG.  WHEN THE FLAG SETS,
*     WAITS CALLS STAT FOR THE STATUS 
* 
WAITS NOP 
      LDA MM105 
WAX   EQU * 
      STA LCNT     SET EXTRA CLOCK COUNTER
WASD  EQU * 
      CLA,INA 
      JSB TMR,I     ONE MSEC TIME DELAY 
CC05  SFS CC       SKIP IF SEEK DONE
      JMP WASQ
CC15  LIA CC        GET ATTENTION FOR POSSIBLE CHECK
      STA ATTN
      LDA LCNT      CALCULATE 
      ADA D106       TIME SPENT BEFORE FLAG SET,
      ADA SVCTA       ADD TO ACCUMULATED AMOUNT 
      STA SVCTA        AND SAVE IT
      JSB STAT     CALL FOR STATUS
      JMP WAITS,I 
* 
WASQ  EQU * 
      ISZ LCNT      SKIP WHEN TIMED OUT 
      JMP WASD     KEEP LOOPING 
      JSB MC       WIPE OUT THE CARDS 
      JSB PCOP     PRINT CURRENT OPERATION MESSAGE
E10   JSB ERROR     NO CC FLAG
      JSB ADDOI,I 
      JMP WAITS,I  RETURN 
* 
* 
*         WAIH ALLOWS ENOUGH TIME FOR HEAD
*     SWITCHING TO OCCUR. 
* 
WAIH  NOP 
      LDA WAIH     LOAD RETURN ADDRESS
      STA WAITS    SAVE FOR RETURN
      LDA MM2      ALLOW TWO MILLISECONDS 
      JMP WAX 
* 
* 
*         WAIS ALLOWS TIME FOR SECTOR SWITCHING TO
*     OCCUR.
* 
WAIS  EQU WAIH
      HED FSEEK,FSEEH,FSEES 
*     FSEEK,FSEEH,FSEES 
*      PERFORM  JSB SEEK OR SEEH
*               JSB WAITS OR WAIH 
*               JSB WCHK
*      WITH EXPECTED STATUS = 0 
* 
FSEEK NOP 
      JSB SEEK      PERFORM SEEK
      JSB WAITS     WAIT FOR SEEK TO COMPLETE 
      LDA ATTN      CHECK ATTENTION 
      JSB GETNI,I   DETERMINE BIT NUMBER
      RSS           OK SO FAR 
      JMP *+3       ERROR - NONE SET
      CPB UNIT      CORRECT UNIT
      JMP ATTEN     OK
      JSB PCOP      START ERROR REPORT
      LDA B21 
      STA ELOC
      JSB FPRNT     E21 MISSING OR DUP. ATTENTION 
      JSB ADDOI,I 
ATTEN EQU * 
FSK   LDA SHTAS 
      STA FSAVE     SAVE STATUS-EXPECTED FOR OTHER
      CLA            OPERATION
      STA SHTAS     EXPECTED STATUS FOR SEEK IS 0 
      JSB WCHK      CHECK STATUS
      LDA FSAVE 
      STA SHTAS     RESTORE EXPECTED STATUS 
      JMP FSEEK,I 
FSEES EQU * 
FSEEH NOP 
      JSB SEEH      SWITCH HEADS
      JSB WAIH      WAIT FOR HEADS TO SWITCH
      LDA FSEEH 
      STA FSEEK 
      JMP FSK 
                                                        