ASMB,A,B         770223  REV.1708  DSN 111104 
      HED 12732A/12733A FLEXIBLE DISC DIAGNOSTIC
* 
      ORG 0 
* 
*     NAME  : MFLEX 
*     SOURCE: 12732-18003 
*     BINARY: 12732-16003 
*     PROGMR: H.L.CLAWSON 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      SKP 
      ORG 0 
      SUP 
*     GENERAL OPERATING PROCEDURE 
* 
*         A. LOAD DIAGNOSTIC CONFIGURATOR.
*         B. (HALT 102077) CONFIGURE PROGRAM INPUT DEVICE,
*            CONSOLE DEVICE, & LINE PRINTER (IF AVAILABLE). 
*            LOAD DIAGNOSTIC PROGRAM WITH CONFIGURATOR LOADER.
*         C. (HALT 102077) SET P-REG = 100B.
*            SET S-REG BITS 5-0 = SC OF DISKETTE (CONTROL CHANNEL). 
*            PRESS RUN. 
*         D. (HALT 102074) LOAD S-REG WITH OPTIONS. PRESS RUN.
*         *****  S-REGISTER OPTIONS  *****
* 
*                   15 = HALT AT END OF EACH TEST 
*                   14 = SUPPRESS ERROR HALTS 
*                   13 = LOOP ON LAST TEST
*                   12 = LOOP ON DIAGNOSTIC 
*                        (SUPPRESS ALL OPERATOR INTERVENTION) 
*                   11 = SUPRESS ERROR MESSAGES 
*                   10 = SUPRESS NON-ERROR MESSAGES 
*                    9 = GO TO USER CONTROL SECTION 
*                        (ABORT CURRENT OPERATION)
*                    8 = SUPPRESS OPERATOR INTERVENTION TESTS 
*                    7 = ECHO CONSOLE I/O ON LINE PRINTER 
*                    6 = SPARE
*                    5 = ENABLE FORMAT & MARK COMMANDS
*                    4 = ENABLE FORMAT & MARK COMMANDS
*                    3 = GO TO OPDSN INPUT SECTION
*                        (ABORT CURRENT OPERATION)
*                    2 = ALTER PATTERNS IN 'TRAK' 
*                    1 = ENABLE FORMAT & MARK COMMANDS
*                    0 = ENABLE FORMAT & MARK COMMANDS
*         NOTE: STANDARD RUN SHOULD BE WITH S-REG = 0 
* 
*         TO RESTART WITHOUT RECONFIGURATING, SET P-REG = 2000B,
*            THEN GO TO D.
*         TO RECONFIGURE GO TO C. 
* 
*         GENERAL COMPUTER HALTS
* 
*         1020XX    E OR H  000 TO 067
*         1060XX    E OR H  100 TO 167
*         1030XX    E OR H  200 TO 267
*         1070XX    E OR H  300 TO 367
* 
*         CONTROL PROGRAM HALT MESSAGES 
* 
*         102077    END OF DIAG (A = PASS COUNT)
*         102076    END OF TEST (A = TEST XXXXXX) 
*         102075    USER SELECTION REQUEST
*         102074    SELECT CODE INPUT COMPLETE
*         102073    USER SELECT CODE ERROR
*         106077    TRAP CELL HALT
* 
* 
* 
*     USER CONTROL SECTION
* 
*     SWITCH REGISTER BIT 9 IS SENSED AT THE END OF EACH TEST.
*     IF SET THE COMPUTER HALTS 102075. THE USER MAY THEN 
*     SELECT A TEST SEQUENCE BY ENTERING BITS IN THE
*     A REGISTER. EACH BIT SET WILL CAUSE ONE TEST TO EXECUTE.
*     BITS 0-15 OF A CORRESPOND TO TESTS 0-15.
*     CLEAR A TO RUN STANDARD SEQUENCE OF TESTS.
* 
      HED PROGRAM ORGANIZATION CHART
*         ******************************************* 
*         *         CONFIGURATOR            100B    * 
*         *            LINKAGE TABLE                * 
*         *         CONTROL LINKAGE                 * 
*         *         DATA STORAGE           1777B    * 
*         ******************************************* 
*         *         EXECUTIVE CONTROL      2000B    * 
*         *         TABLE OF I/O INSTRUCTIONS       * 
*         *         STANDARD DIAGNOSTICS   3777B    * 
*         ******************************************* 
*         *         OPERATOR DESIGN        4000B    * 
*         *         GENERAL ROUTINES       5777B    * 
*         ******************************************* 
*         *         OPDSN SYNTAX CHECK     6000B    * 
*         *         DISKETTE ROUTINES     11577B    * 
*         ******************************************* 
*         *         OPDSN USER PROGRAM    11600B    * 
*         *                               12077B    * 
*         ******************************************* 
*         *         I/O BUFFERS           12100B    * 
*         *                               N6477B    * 
*         ******************************************* 
*         *         DIAGNOSTIC            N6500B    * 
*         *            CONFIGURATOR       N7777B    * 
*         ******************************************* 
* 
* 
* 
*         N = 1 FOR  8K MEMORY
*             3 FOR 16K MEMORY
*             5 FOR 24K MEMORY
*             7 FOR 32K MEMORY
* 
      HED CONFIGURATOR LINKAGE TABLE
A     EQU 0         A REGISTER REFERENCE
B     EQU 1         B REGISTER REFERENCE
SW    EQU 1         SWITCH REGISTER REFERENCE 
INTP  EQU 0         INTERRUPT CHANNEL REFERENCE 
DMAH  EQU 6         DMA HIGH CHANNEL
DMAL  EQU 2         DMA LOW CHANNEL 
DMA6  EQU 6         DMA CHANNEL 6 
DMA7  EQU 7         DMA CHANNEL 7 
CC    EQU 10B       DISKETTE COMMAND CHANNEL
DC    EQU 11B       DISKETTE DATA CHANNEL 
CH    EQU 10B       INTERFACE TEST CHANNEL
* 
* 
      ORG 2 
      HLT 77B       DISKETTE LOADER ROM JUMPS HERE
      JMP CFIG,I    GO TO CONFIGURATION SECTION 
* 
* 
      ORG 100B
* 
      JMP CFIG,I    GO TO CONFIGURATION SECTION 
FAINL BSS 1         FAST INPUT (PHOTO READER) 
SLOPL BSS 1         SLOW OUTPUT (LIST)
FAOPL BSS 1         FAST OUTPUT (DUMP OR PUNCH) 
SLINL BSS 1         SLOW INPUT (KEYBOARD) 
FWAM  DEF ZZZZZ     FIRST WORD OF AVBL. MEMORY
LWAM  BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         NOT USED (MAG TAPE) 
OTMC  BSS 1         1 MILL SEC TIME OUT COUNT 
SCFI  BSS 1         SELECT CODE OF FAST INPUT DEVICE
SCSO  BSS 1         SELECT CODE OF SLOW OUTPUT DEVICE 
SCFO  BSS 1         SELECT CODE OF FAST OUTPUT DEVICE 
SCSI  BSS 1         SELECT CODE OF SLOW INPUT DEVICE
CPTO  BSS 1         COMPUTER TYPE/OPTIONS 
USSC  BSS 1         USER CARD TYPE AND SELECT CODE
MEMO  BSS 1         MEMORY SIZE AND TYPE
      BSS 1 
TMRR  BSS 1         1 MILL SEC TIMER
SWRC  BSS 1         CONFIGURATOR SWITCH CK PTR
I2AS  BSS 1         INTEGER TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII CONVERSION
DSNL  OCT 111104    DIAGNOSTIC SERIAL NUMBER
FMTRL BSS 1         FORMATTER 
* 
* 
* 
CFIG  DEF ZCONF     CONFIGURATION SECTION 
MSGC  DEF ZMSGC     MESSAGE WITH NO HALT
MSGH  DEF ZMSGH     MESSAGE WITH HALT 
ERMS  DEF ZERMS     ERROR MESSAGE 
SWRT  DEF ZSWRT     SWITCH REGISTER CHECK ROUTINE 
TSTN  OCT 0         CURRENT TEST NUMBER 
EXRT  DEF ZEXRT     RETURN TO CONTROL PROGRAM 
      NOP           RESERVED
* 
* 
DBD   EQU FWAM      START OF OUTPUT BUFFER
DBDI  NOP           START OF INPUT BUFFER 
DBCO  NOP           BUFFER SIZE 
ERLIM DEC 10        MAX NO. OF ERRORS OUTPUT BY 'COMPARE' 
COMCH OCT 10        DISKETTE COMMAND CHANNEL
DATCH OCT 11        DISKETTE DATA CHANNEL 
CHAN  OCT 6         CURRENT DMA CHANNEL 
TRACK DEC 67        NO. OF GOOD TRACKS
ZEOLC NOP           PASS COUNT
RETRY NOP           NUMBER OF RETRIES PERMITTED 
COP   NOP           CURRENT DISKETTE OPERATION
STATW NOP           LAST STATUS RETURNED
STEXP NOP           EXPECTED STATUS 
MASK  NOP           STATUS MASK 
CSEC  NOP           CURRENT SECTOR(TRACK X 30 + SECTOR) 
DRIV. NOP           CURRENT DRIVE 
CMOD. NOP           DMA/NON-DMA FLAG (104B=DMA) 
PATRN EQU * 
      OCT 033066
      OCT 033066
      OCT 125252
      OCT 052525
      OCT 106615
      OCT 106615
      OCT 155555
      OCT 155555
      OCT 133333
      OCT 133333
      OCT 143306
      OCT 143306
RN1   NOP           RANDOM OCTAL PATTERN
RN2   NOP 
PATNE DEF * 
* 
      HED DISKETTE COMMAND CODES
* 
*     DISKETTE COMMAND CODES
* 
READ  OCT 000000    READ A BLOCK OF SECTORS 
WRT   OCT 100000    WRITE A BLOCK OF SECTORS
VRF   OCT 040000    VERIFY A BLOCK OF SECTORS 
SEK   OCT 140000    SEEK A TRACK AND SECTOR 
FMT   OCT 140036    FORMAT A TRACK
STEPT OCT 147637    STEP IN ONE TRACK 
BAD   OCT 147677    MARK A TRACK DEFECTIVE
DUMPS OCT 147737    DUMP A SECTOR 
STSRQ OCT 147777    REQUEST STATUS
UNDF  OCT 140037    UNDEFINED COMMAND 
* 
PASSW OCT 127207    DISKETTE CONTROLLER PASSWORD
* 
      SKP 
* 
* 
* 
*     DISKETTE STATUS WORD
* 
*     P 0 0 0 EEEE 0 T S R W C DD 
* 
* 
*     P: POWER OFF OR DRIVE NOT READY 100000 B
* 
*     EEEE: 
*     0000  NO ERROR                  000000 B
*     0001  NO DRIVE POWER            000400 B
*     0010  DOOR OPEN                 001000 B
*     0011  NO DISC IN DRIVE          001400 B
*     0100  INVALID COMMAND           002000 B
*     0101  SECTOR NOT FOUND          002400 B
*     0110  TRACK NOT FOUND           003000 B
*     0111  CHECKWORD ERROR           003400 B
*     1000  DATA OVERRUN              004000 B
*     1001  VERIFY ERROR              004400 B
* 
* 
*     T:  TRANSFER COMPLETE           000100 B
* 
*     S:  SEEK COMPLETE               000040 B
* 
*     R:  DRIVE NOT READY             000020 B
* 
*     W:  WRITE PROTECTED DISC        000010 B
* 
*     C:  DISKETTE CHANGE             000004 B
* 
*     DD: DRIVE NUMBER               3,2,1,0 B
* 
      HED  OPDSN UTILITY COMMANDS - IMMEDIATE EXECUTION ONLY
* 
STTBP EQU * 
* 
      ASC 2,LP      LIST PROGRAM
      ASC 1,
LP.P  DEF LP
* 
      ASC 2,LPP     LIST PROGRAM ON LINE PRINTER
      ASC 1,
LPP.P DEF LPP 
* 
      ASC 2,EP      ERASE OPDSN PROGRAM 
      ASC 1,
EPP   DEF EP
* 
      ASC 2,GO      EXECUTE OPDSN PROGRAM 
      ASC 1,
GOP   DEF GO
* 
      ASC 2,DBRK    REPLACE OCTAL WORDS 
      ASC 1,II      FIRST & LAST WORDS
DBRKP DEF DBRK
* 
      HED  OPDSN PROGRAM STATEMENTS - MAY BE EXECUTED IMMEDIATELY 
* 
XLIMP EQU * 
* 
      ASC 2,CB      COMPARE INPUT AND OUTPUT BUFFERS
      ASC 1,II      NO. OF WORDS, NO. OF ERRORS 
CB.P  DEF CB
* 
      ASC 2,CBP     COMPARE BUFFERS - ERRORS ON PRINTER 
      ASC 1,II      NO. OF WORDS, NO. OF ERRORS 
CBP.P DEF CBP 
* 
      ASC 2,LO      LIST OUTPUT BUFFER
      ASC 1,II      FIRST & LAST WORDS
LO.P  DEF LO
* 
      ASC 2,LOP     LIST OUTPUT BUFFER ON PRINTER 
      ASC 1,II      FIRST & LAST WORDS
LOP.P DEF LOP 
* 
      ASC 2,LI      LIST INPUT BUFFER 
      ASC 1,II      FIRST & LAST WORDS
LI.P  DEF LI
* 
      ASC 2,LIP     LIST INPUT BUFFER ON PRINTER
      ASC 1,II      FIRST & LAST WORDS
LIP.P DEF LIP 
* 
      ASC 2,EX      EXIT OPDSN - RETURN TO STANDARD TESTS 
      ASC 1,
EXP   DEF EX
* 
      ASC 2,TEST    EXECUTE TEST
      ASC 1,I       TEST NUMBER(0-15) 
TESTP DEF TEST
* 
      ASC 2,DBFK   FILL BUFFER WITH ALTERNATING PATTERN 
      ASC 1,KK      OCTAL PATTERN 
DBFKP DEF DBFK
* 
SPSP  EQU *+1 
      ASC 2,DB      FILL BUFFER WITH RANDOM DATA
      ASC 1,
DBP   DEF DB
* 
      ASC 2,DBSZ    PRINT OUTPUT BUFFER SIZE
      ASC 1,
DBSZP DEF DBSZ
* 
      ASC 2,MSG     OUTPUT 4-CHAR MESSAGE 
      ASC 1,AA
MSGP  DEF MSG 
* 
      ASC 2,DLY     DELAY 
      ASC 1,I       I: MILLISECONDS 
DLYP  DEF TMRR,I
      HED OPDSN PROGRAM STATEMENTS - DISKETTE CONTROL 
* 
      ASC 2,FALL    FORMAT DISK 
      ASC 1,II      NO. OF PATTERNS, OFFSET 
FALLP DEF FALL      (S-REG BITS 1,2,4, & 5 MUST BE SET) 
* 
      ASC 2,WD      WRITE 
      ASC 1,I       I: WORD COUNT (I<0: ALL OF DISC)
WDP   DEF WD        (I=-1: SEQUENTIAL DATA - ALL OF DISC) 
* 
      ASC 2,RD      READ
      ASC 1,IA      I: WORD COUNT (I<0: ALL OF DISC)
*                                   (I=-1: SEQUENTIAL DATA - ALL OF DISC) 
RDP   DEF RD        A:C=COMPARE BUFFERS 
* 
      ASC 2,VRFY    VERIFY (READ WITH CLOSE TOLERANCE)
      ASC 1,IA      I: WORD COUNT (I<0: ALL OF DISC)
*                                   (I=-1: SEQUENTIAL DATA - ALL OF DISC) 
VRFYP DEF VRFY      A:C=COMPARE BUFFERS 
* 
      ASC 2,SK      SEEK TRACK & SECTOR 
      ASC 1,II      TRACK,SECTOR
SKP   DEF SK
* 
      ASC 2,MOVE    ADVANCE/BACKSPACE SECTORS 
      ASC 1,I       I: SECTOR COUNT 
MOVEP DEF MOVE      I>0:ADVANCE   I<0:BACKSPACE 
*                                   I=0:POSITION TO LAST DATA TRANSFER
* 
      ASC 2,RAND    RANDOM SEEK, READ, & WRITE
      ASC 1,IA      I: ITERATION COUNT
RANDP DEF RAND      A:W=SEEK RANDOM SECTOR, THEN WRITE
*                                       RANDOM DATA, READ, & COMPARE BUFFERS
*                                     R=SEEK RANDOM SECTOR & READ SEQ. DATA 
*                                       (MUST FOLLOW WRIT -1 COMMAND) 
*                                     Z=SEEK RANDOM SECTOR & READ 0 SECTORS 
*                                       (PHYSICALLY POSITIONS HEAD) 
*                                     D=SEEK RANDOM SECTOR, THEN WRITE
*                                       RANDOM DATA, DUMP, & COMPARE BUFFERS
*                                     S=SEEK RANDOM SECTOR (NO HEAD MOVEMENT) 
* 
      ASC 2,STAT    PRINT LAST STATUS 
      ASC 1,
STATP DEF STAT
* 
      ASC 2,ST      STATUS REQUEST COMMAND
      ASC 1,KK      EXPECTED STATUS, MASK 
STP   DEF ST        PRINT IF MASKED STATUS NOT = EXPECTED 
* 
      ASC 2,SD      SET UP DRIVE XXXXXX 
      ASC 1,I       DRIVE NUMBER
SDP   DEF SD
* 
                                                                                                                                                                                                                      