ASMB,Q,R,C
      HED SWTCH - SWSG1, 7900 DISK DRIVER SEGMENT 
      NAM SWSG1,5,10 92067-16514 REV.2001 791018
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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.       *
******************************************************************
      SPC 2 
****************************************
* 
*     NAME:       SWSG1 
*     SOURCE:     92067-18514 
*     BINARY:     92067-16514 
*     WRITTEN BY: KFH, JJC
* 
****************************************
* 
* 
*  ENTRY POINTS 
* 
      ENT \DSK0,\STD0 
      ENT \INP0,\INT0 
      ENT \GDMA,\RDMA 
      ENT \FLGT 
* 
* 
*  EXTERNAL ENTRY POINTS
* 
      EXT \SWTM 
      EXT $LIBR,$LIBX 
      EXT \TDLU,\TSUB,\DFTR,\DNTR,\D#ST,\D#WT 
      EXT \INIT,\LNTH 
      EXT \CVAS,\CLEN,\DSPL,\BLIN 
      EXT \DSUB,\XOUT,\BUFA 
      EXT \BOOT,\TMT,\LU2 
      EXT \TRAK,\SECT 
* 
* 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
BEG0  LDA P96       SET #SECTORS/TRACK
      STA \D#ST 
      MPY M100
      STA \D#WT     AND THE #WORDS/TRACK
      LDB \DSUB          SEGMENT'S ENTRY POINT
      ADB \TMT      OFFSET INTO TRACK MAP TABLE BUFFER
      LDA B,I       GET FIRST WORD  OF SUCHANNEL'S ENTRY
      STA \DFTR     SET STARTING TRACK
      ADB P8        POSITION TO SECOND WORD OF SUBCH'S ENTRY
      LDA B,I       AND GET ITS 
      STA \DNTR     # OF TRACKS 
      JMP \SWTM     RETURN
      SPC 3 
TEMP  BSS 3         TEMP FOR INTIALIZATION
* 
M100  OCT 100 
B177  OCT 177 
M440  OCT 440 
M0100 OCT 10000 
M0600 OCT 60000     VERIFY OPCODE 
M1776 OCT 177600
M7700 OCT 177700
* 
N10   DEC -10 
* 
P10   DEC 10
P2    DEC 2 
P4    DEC 4 
P8    DEC 8 
P9    DEC 9 
P12   DEC 12
P14   DEC 14
P15   DEC 15
P16   DEC 16
P17   DEC 17
P18   DEC 18
P25   DEC 25
P96   DEC 96
* 
\INP0  OCT 101000   INITIALIZE, WRITE PROTECT COMMAND BITS
\INT0  OCT 100000       "                        "    " 
      SKP 
* 
*                                   INSERT CHNL NO. IN INSTRUCTION
* 
*  THE STDSK SUBROUTINE SETS THE CURRENT DISK CHANNEL 
*  NOS. IN THE I/O INSTRUCTIONS.
* 
* 
\STD0 NOP 
      LDA \TDLU      SAVE TARGET DISK CHANNEL 
      STA TEMP1 
      LDA #DATA    GET # WORDS TO BE CONFIGURED 
      LDB HPDSK    GET ADDRESS OF INSTR ADDR LIST 
STDS1 STA TEMP2     SAVE NO. OF INSTRUCTIONS
STDS2 LDA B,I       GET INSTRUCTION 
      AND M7700     ISOLATE INSTRUCTION CODE
      IOR TEMP1     INSERT CHANNEL NO.
      STA B,I       SET INSTRUCTION IN CODE 
      INB           INCR INSTRUCTION ADDRESS
      ISZ TEMP2     SKIP - DONE WITH SET
      JMP STDS2     CONFIGURE NEXT INSTRUCTION
* 
      LDA TEMP1     DONE WITH COMMAND CHANNEL?
      CPA \TDLU 
      RSS 
      JMP STDS3     YES 
      LDA #CMND     GET # COMMAND INSTRUCTIONS
      ISZ TEMP1     STEP TO COMMAND CHANNEL 
      JMP STDS1     GO CONFIGURE
* 
STDS3 LDA N10       CLEAR THE BAD TRACK 
      STA TEMP      TABLE 
      LDB \FLGT     GET ADDRESS OF TABLE
      CCA 
      STA TEMP+2    SET TO NO BAD TRACKS
STDS4 STA B,I       SET TO -1 FOR NO ENTRY
      INB           STEP TABLE ADDRESS
      ISZ TEMP      DONE? 
      JMP STDS4     NO, DO NEXT ONE 
      STA B,I 
      JMP \STD0,I   RETURN
* 
* 
#DATA ABS I/OTB-I/OTC     # DATA INSTRUCTIONS 
#CMND ABS I/OTC-I/OTD     # COMMAND INSTRUCTIONS
HPDSK DEF I/OTB,I         ADDR OF I/O INSTRUCTION LIST
TEMP1 NOP 
TEMP2 NOP 
*                                         ADDRESS OF BAD TRACK TABLE
\FLGT DEF \STD0+1         WHICH OVERLAYS 10 WORDS OF \STD0
      SKP 
* 
*  GTDMA ALLOCATES A DMA CHANNEL FOR SWTCH
* 
\GDMA NOP 
CKDMA LDB INTBA     ADDR OF INT TABLE 
      INB 
WTDMA LDA B,I       CHECK WITH INTERRUPTS ON
      SZA           IS DMA CH 7 FREE??
      JMP WTDMA       NOPE-WAIT WITH INTS ON
* 
      JSB $LIBR     TURN OFF INTS. & CHECK AGAIN
      NOP 
      CLF 0 
      LDB INTBA 
      INB 
      LDA B,I       IS IT REALLY FREE?? 
      SZA,RSS 
      JMP GOTIT       YES-GO GRAB IT
      JSB INTON       NOPE-IT GOT AWAY-TRY AGAIN
      JMP CKDMA     RETRY-W/ INTS ON
* 
GOTIT LDA B777
      STA B,I       STUFF 777B IN INT TABL FOR SWTCH
      LDA USMAP     USER MAP TO DMA CH 7
      XMA           SET IT UP 
      JSB INTON     TURN ON INTS&RETURN TO MAIN 
      JMP \GDMA,I   RETURN
* 
      SPC 3 
* 
*  RLDMA RELEASES THE DMA CHANNEL 
* 
\RDMA NOP 
      JSB $LIBR     TURN OFF INTS.
      NOP 
      CLF 0 
* 
      LDB INTBA 
      INB 
* 
      LDA B,I       GET PSEUDO ID SEG ADDR. 
      CPA B777      SWTCH BETTER HAVE IT
      CLA           OK-SO GIVE IT BACK
      STA B,I       IF NOT-BAD NEWS,BUT LEAVE IT
      JSB INTON     TURN ON INTS & RETURN TO MAIN 
      JMP \RDMA,I   RETURN
* 
* 
      SPC 3 
* 
B777  OCT 777 
USMAP OCT 100001    CTRL WRD: USER > PORT B MAP 
* 
INTBA EQU 1654B 
      SPC 5 
* 
*     THE DRIVER ENTERS HERE AFTER 10 TRIES HAVE FAILED TO INITILIZE A
*     TRACK.
* 
INIER JSB INTON     TURN INTERRUPTS BACK ON 
      LDA STATB     GET STATUS AND
      AND M440      MASK SEEK CHECK CHECK AND END OF CYLINDER 
      SZA,RSS       BITS - IF NOT SET CONTINUE
      JMP INIE0     WITH BAD TRACK ROUTINE
* 
      LDB ER43A     STORE SUBCHANNEL # IN MESSAGE 
      JSB ESUB
      LDA P15       ELSE SEND BAD SPECIFICATION 
      LDB ERR43 
      JSB \DSPL     "INVALID DISC SPECIFICATIONS" 
      JMP \XOUT      TERMINATE SWTCH
* 
INIE0 LDA \INIT     SAVE THE \INIT
      STA TEMP2     FLAG WORD 
      LDA DFCYF     SET COMMAND 
      STA \INIT     TO FLAG TRACK DEFECTIVE 
      CLE           AND 
      LDB \BUFA     CALL
      JMP DISK0+1   DRIVER
* 
INIEH ISZ TEMP+2    BAD TRACK HEADER PRINTED YET
      JMP INIES     YES - SKIP
* 
      JSB \BLIN 
      LDA P10 
      LDB \TSUB     GET SUBCHANNEL
      ADB BLK0      ADD ASC BLANK 0 
      STB EMES1-1   SET IN MESSAGE
      LDB EMES1     SEND THE
      JSB \DSPL     MESSAGE 
* 
INIES LDA \TRAK     GET TRACK ADDRESS 
      CMA,INA       SET NEGATIVE FOR DECIMAL CONVERSION 
      LDB P2
      STB \CLEN      FOR \CVAS
      LDB ALBUF     SET BUFFER ADDRESS
      JSB \CVAS     CONVERT THE NUMBER
      LDA P4        AND 
      LDB ALBUF     SEND
      JSB \DSPL     THE TRACK NUMBER
* 
*     TRACK IS NOW FLAGGED AND REPORTED  IT IS NOW ENTERED IN THE 
*     BAD TRACK TABLE.
* 
      LDA \LU2      SHOULD IT BE ENTERED IN TABLE?
      SZA,RSS 
      JMP DISK0,I   NO, RETURN NOW
      LDA TEMP2 
      STA \INIT     RESTORE IT
      LDA \TRAK     GET THE TRACK 
      ALF,ALF 
      RAR 
      ADA \DSUB 
      STA TEMP1     AND SAVE
      LDB \FLGT     GET THE BAD TRACK TABLE ADDRESS 
      LDA N10       ALLOW 10 ENTRIES
      STA TEMP+1    SET COUNTER 
INIE1 LDA B,I       GET ENTRY 
      SSA           NEGATIVE? 
      JMP INIET     YES - USE THIS ONE
* 
      INB           NO ALREADY USED 
      ISZ TEMP+1    STEP COUNT  10 YET? 
      JMP INIE1     NO - TRY NEXT ONE 
* 
      LDB ER41A     STORE SUBCHANNEL # IN MESSAGE 
      JSB ESUB
      LDA P17 
      LDB ERR41 
      JSB \DSPL     "LIMIT OF 10 BAD TRACKS EXDEEDED" 
      JMP \XOUT      AND TERMINATE SWTCH
* 
INIET LDA TEMP1     GET SUBCHANNEL/TRACK
      STA B,I       SET IN TABLE
      JMP DISK0,I   GO FINISH INITILIZATION.
* 
DFCYF OCT 100400
ALBUF DEF *+1 
      BSS 2 
EMES2 ASC 10,BAD TRACKS PLATTER 
EMES1 DEF EMES2 
BLK0  ASC 1, 0
* 
ERR41 DEF *+1 
      ASC 17,LIMIT OF 10 BAD TRACKS EXCEEDED
ER41A DEF ERR41+17
ERR43 DEF *+1 
      ASC 15,INVALID DISC SPECIFICATIONS
ER43A DEF ERR43+15
      HED DISC DRIVE I/O INSTRUCTION ADDRESSES
I/OTB DEF DSK51     DATA CHANNEL
      DEF DSK52 
      DEF DSK53 
      DEF DSK54 
      DEF DSK55 
      DEF DSK56 
      DEF DSK57 
      DEF DSK58 
      DEF DSK59 
      DEF DSK60 
      DEF DSK61 
      DEF DSK62 
      DEF DSK63 
      DEF DSKDR 
I/OTC DEF DSK01     COMMAND CHANNEL 
      DEF DSK02 
      DEF DSK03 
      DEF DSK04 
      DEF DSK05 
      DEF DSK07 
      DEF DSK08 
      DEF DSK09 
      DEF DSK10 
      DEF DSK11 
      DEF DSK16 
      DEF DSK17 
      DEF DSK18 
      DEF DSK19 
      DEF DSK20 
I/OTD EQU * 
      HED 7900 I/O DISC DRIVER
*     THE DISKD SUBROUTINE IS THE MAIN DISC INPUT/OUTPUT DRIVER.
*     IT SETS UP THE COMPLETE TRANSFER AND READS OR WRITES
*     \LNTH WORDS ON THE DISC.  IT WAITS UNTIL THE TRANSFER 
*     IS COMPLETE.  STATUS IS DONE AFTER EACH TRANSFER FOR WRITE
*     PROTECT ERRORS THE OPERATOR IS ASKED TO TURN ON THE SWITCH. 
*     FOR DEFECTIVE CYLINDER ERRORS THE IRRECOVERABLE ERROR ERR40 IS
*     TAKEN.  FOR NOT READY ERRORS THE OPERATOR IS NOTIFIED.
*     FOR OTHER ERRORS TEN TRIES ARE MADE.  IF THE ERROR STILL EXIST
*     AND:
* 
*     A - IF THE INIT FLAG IS SET GO TO INIER 
* 
*     B - ELSE NOTIFY OPERATOR AND TERMINATE
* 
*     CALLING SEQUENCE
* 
*     \LNTH = NEGATIVE # WORDS TO TRANSMIT
*     B = CORE ADDRESS
*     E = 1 FOR READ
*     E = 0 FOR WRITE 
* 
*     RETURN - ALWAYS NORMAL--REGS. MEANINGLESS 
      SPC 3 
\DSK0 EQU * 
DISK0 NOP 
      RBL,ERB       SET THE READ/WRITE BIT
      STB MADDR     AND SAVE THE ADDRESS
      LDA \TRAK 
      ADA \DFTR      ADD FIRST TRACK TO RELATIVE TRACK
      STA T#AC0     SAVE ABSOLUTE TRACK 
      LDB \TSUB     GET SUBCHANNEL NUMBER 
      CLE,ERB       B IS UNIT  NOT E IS HIGH HEAD BIT 
      STB UN#IT     SAVE UNIT NUMBER
      LDA M0600     GET PRIMARY VERIFY OPCODE 
      ADA B         ADD IN THE UNIT 
      STA V#CMD     SAVE CONFIGURED VERIFY COMMAND
      ADB M0100     SET COMMANDS
      LDA \INIT     ADD INIT FLAG TO WRITE
      ADA B         COMMAND 
      STA W#CMD     AND SET WRITE COMMAND 
      ADB M0100     READ
      STB R#DCM     SET READ
      ADB M0100 
      STB S#EKC     SEEK
      CLA,SEZ,CLE,RSS              IF E = 0 
      INA           SET HEAD 2
      LDB \SECT     GET SECTOR
      BRS           B IS ACTUAL SECTOR
      STB H#AD      SAVE
      ADB NSEC      SUBTRACT NUMBER ON A SIDE 
      SSB,RSS       IF POSITIVE 
      STB H#AD      RESET SECTOR
      ELA           MOVE IN LOW HEAD BIT
      ALF,ALF       ROTATE
      ADA H#AD      AND ADD THE SECTOR
      STA H#AD      SAVE HEAD/SECTOR ADDRESS
      JSB $LIBR     KILL THE INTERRUPT SYSTEM 
      NOP 
      CLF 0           ******  CLF 0 
* 
RTRY  LDA N10       RESET 10 TRY COUNTER
      STA EDCNT 
DSK16 STF 1         SET FLAG FOR STATUS 
      JSB STATC     GO DO STATUS
      AND M100      CHECK READY BIT 
      SZA           IF SET
      JMP NRERR     GO TELL THE MAN 
* 
      LDA T#AC0     SET TRACK TO A
      JSB SEEK      AND SEEK THE RECORD 
      LDB MADDR     SET THE CORE ADDRESS TO B 
      LDA R#DCM     SET FOR READ
      SSB,RSS       WRITE?
      LDA W#CMD     YES - RESET TO WRITE
DSK01 CLC 1         SET UP COMMAND
DSK02 OTA 1         SEND COMMAND
DSK51 STF 0         SET FOR WRITE 
      CLE,SSB       READ? 
DSK52 STC 0,C       YES / RESET FOR READ
      LDA DSKDR     GET DMA WORD
      OTA 7         ASSIGN DMA
      CLC 3         SET FOR ADDRESS 
      OTB 3         SEND ADDRESS
      LDA \LNTH     SET LENGTH
      STC 3         SET FOR LENGTH
      OTA 3         SEND IT 
      STC 7,C       START DMA 
DSK03 STC 1,C       START DRIVE 
      CLC 7 
      JSB STATC     GET STATUS
      STA STATB     SAVE
      LDA STATB 
      SLA 
      JMP ERRCH     CHECK ERROR STATUS
* 
      LDB MADDR     CHECK IF READ OR WRITE
      SSB 
      JMP NVRFY     DON'T VERIFY ON READS 
* 
VERFY LDA T#AC0     GET THE TRACK ADDRESS 
      JSB SEEK      RESEEK FOR THE VERIFY 
      LDB \D#ST     GET # SEC/TRK FOR VERIFY
      RBR           CONVERT TO 128 WD SECTORS 
      LDA V#CMD     GET THE VERIFY COMMAND
DSK18 CLC 1         RESET COMMAND CHANNEL 
DSK62 OTB 0         SEND THE SECTOR COUNT 
DSK63 STC 0,C       OUT IT GOES 
DSK19 OTA 1         OUTPUT DE' CMD WORD 
DSK20 STC 1,C       START DRIVE 
      JSB STATC     WAIT FOR CMD DONE&GET STATUS
      STA STATB     SAVE STATUS 
      SLA           IF ERROR BIT SET
      JMP ERRCH       THEN CHECK ERROR STATUS 
* 
NVRFY LDA \BOOT     ARE WE BOOTING UP?
      SZA,RSS 
      JMP DISKR     NO,CONTINUE 
      LDA \TDLU      GET TARGET CHANNEL = DEST. CHANNEL 
      LSL 6         SET UP S REG. FOR BOOT EXT. 
      OTA 1           SYS DISC IN BITS 11-6 
      LDA DSKDR     SET UP DMA SEL CODE FOR BOOT
      OTA 6           SET BITS 15 & 13 TOO
      CLB           MUST CLEAR THE MPFT 
      LFB 
      CLC 0,C       SIMULATE A
      CLF 1           PRESET ON FRONT PANEL 
      LDA M2055,I   GET STARTING ADDRESS
      DJP A,I       WELL SAID-JMP TO RTE-IV BOOT
* 
M2055 OCT 2055
M2011 OCT 2011
M1742 EQU 1742B 
* 
DISKR JSB INTON     OK, SO TURN ON INTERRUPTS 
      LDA \INIT     CHECK IF MAY HAVE BEEN
      ALF,ALF       FLAGGING A DEFECTIVE
      SLA           TRACK, SO RETURN
      JMP INIEH     TO REPORT IT
      JMP DISK0,I   ELSE RETURN 
* 
ERRCH RAL,CLE,ERA   CLEAR SIGN BIT
      CPA P9        WRITE PROTECT ERROR? (BITS 3,0) 
      RSS 
      CPA M2011     DATA PROTECT SWITCH ON? (BITS 10,3,0) 
      JMP WRPTM     YES - GO TELL 'EM 
* 
      CPA P25       DEFECTIVE CYLINDER?  (BITS 4,3,0) 
      JMP DISBM 
* 
      AND M100      ISOLATE READY BIT 
      SZA           READY?
      JMP NRERR     NO - GO TELL USER 
* 
      CLA           YES, TRY TO RECOVER 
      JSB SEEK      SEEK TO CYLINDER 0
      ISZ EDCNT     INCREMENT # TRIES 
      JMP DSK16     NOT TEN YET GO TRY AGAIN
* 
      LDA \INIT     10 TIMES  IN INIT PHASE?
      CPA \INT0 
      JMP INIER     YES GO TO INIT ERROR ROUTINE
* 
* 
      JSB INTON     TURN THE INTERRUPTS BACK ON 
      LDA \TRAK     INSERT THE TRACK IN THE MESSAGE 
      CMA,INA       NEGATE FOR \CVAS
      LDB P2
      STB \CLEN 
      LDB ER22A 
      JSB \CVAS 
      LDB ER22B     STORE SUBCHANNEL # IN MESSAGE 
      JSB ESUB
      LDA P18 
      LDB ERR22 
      JSB \DSPL     "PARITY OR DATA ERROR  TRACK XXX"
      LDA \INIT     DETERMINE ACTION TO TAKE
      ALF,ALF 
      RAR 
      SLA           IF WRITE PROTECT BIT SET,THEN 
      JMP \XOUT      TRACKS WERE BEING WRITTEN, SO EXIT 
      LDA \INIT     IF INITIALIZE BIT SET, THEN 
      SSA 
      JMP INIER+1   GO TO INIT ERROR ROUTINE
      JMP \XOUT      ELSE TERMINATE SWTCH 
* 
* 
DISBM JSB INTON     ON INTERRUPTS!
      LDA \INIT     IF DEFECTIVE CYLINDER 
      ALF,ALF       IS BEING FLAGGED BY 
      SLA           INIER 
      JMP INIEH     IGNORE ERROR, GO REPORT TRACK 
* 
      RAL           IF WRITE PROTECT SET, THEN
      SLA           THE SYSTEM IS BEING WRITTEN 
      JMP IRERR     AND THAT'S IRRECOVERABLE! 
* 
      LDA \INIT     IF INITIALIZE BIT SET, THEN 
      SSA 
      JMP INIER+1   GO FLAG IT DEFECTIVE
* 
IRERR LDA \TRAK     INSERT TRACK # IN MESSAGE 
      CMA,INA 
      LDB P2
      STB \CLEN 
      LDB ER40A 
      JSB \CVAS 
      LDB ER40B     STORE SUBCHANNEL # IN MESSAGE 
      JSB ESUB
      LDA P18 
      LDB ERR40 
      JSB \DSPL     "DEFECTIVE CYLINDER - TRACK XXX"
      JMP \XOUT      AND EXIT 
* 
* 
NRERR JSB INTON     INTERRUPTS ON 
      JSB \BLIN     DISC NOT READY
      LDB MS33A 
      JSB ESUB      STORE SUBCHANNEL # IN MESSAGE 
      LDA P14 
      LDB MES33     TELL 'EM
      JSB \DSPL     "READY DISC AND PRESS RUN"
      JSB $LIBR     TURN OFF
      NOP 
      CLF 0            *******  CLF 0 
DSK56 LIA 0         GET STATUS TO A 
      HLT 33B       PAUSE 
      JMP RTRY      ON RESTART, RETRY 
* 
* 
WRPTM JSB INTON 
      JSB \BLIN     WRITE PROTECT SWITCH IS ON
      LDB MS32A     STORE SUBCHANNEL # IN MESSAGE 
      JSB ESUB
      LDA P18 
      LDB MES32 
      JSB \DSPL     "TURN OFF DISC PROTECT - PRESS RUN" 
      JSB $LIBR     OFF AGAIN 
      NOP 
      CLF 0           *******  CLF 0
      HLT 32B       WAIT FOR IT 
      JMP RTRY      AND DO IT AGAIN 
* 
      SPC 3 
* 
*                   TURNS THE INTERRUPT SYSTEM BACK ON
* 
INTON NOP 
DSK17 CLF 1 
      JSB $LIBX 
      DEF INTON 
      SPC 2 
*                   SEEK ROUTINE
SEEK  NOP 
DSK57 OTA 0         SEND TRACK
DSK58 STC 0,C       SET DATA TO SHOW TRACK SEND 
      ALF,ALF       TRACK TO HIGH A 
      ADA UN#IT     ADD THE UNIT NUMBER 
      LDB S#EKC     GET SEEK COMMAND
DSK09 CLC 1         SET UP COMMAND CHANNEL
DSK10 OTB 1         SEND COMMAND
DSK11 STC 1,C       TELL CONTROLLER 
      LDB H#AD      GET HEAD/SECTOR ADDRESS 
DSK59 SFS 0         READY?
      JMP DSK59     WAIT
* 
DSK60 OTB 0         SEND HEAD/SECTOR
DSK61 STC 0,C       START 
      JSB STATC     GET STATUS
      JMP SEEK,I    RETURN
      SPC 2 
* 
*                   WAIT AND STATUS ROUTINE 
STATC NOP 
DSK04 SFS 1         WAIT FOR FLAG 
      JMP DSK04 
* 
      STF 7         CLEAR DMA 
DSK05 CLC 1         CLEAR CONTROLLER
DSK53 STC 0,C       SET DATA FOR
      LDA UN#IT     STATUS
DSK07 OTA 1         SEND STATUS REQUEST 
DSK08 STC 1,C       START 
DSK54 SFS 0         WAIT FOR
      JMP DSK54     STATUS
* 
DSK55 LIA 0,C       GET STATUS AND
      JMP STATC,I   RETURN
      SPC 3 
MADDR NOP           MEMORY ADDRESS FOR CURRENT TRANSFER 
EDCNT NOP           ERROR COUNT FOR CURRENT TRANSFER
STATB NOP 
NSEC  DEC -24 
W#CMD OCT 010000
UN#IT NOP 
H#AD  NOP 
S#EKC OCT 030000    THE FOLLOWING CMDS ARE TO BE CONFIGURED 
R#DCM OCT 020000
DSKDR OCT 120000    MUST BE CONFIGURED
T#AC0 NOP 
V#CMD OCT 060000    VERIFY CMD - MUST BE CONFIGURED 
      SKP 
* 
ESUB  NOP 
      CLA,INA       SET FOR 1 WORD
      STA \CLEN      CONVERSION 
      LDA \TSUB     GET CURRENT SUBCHANNEL #
      CMA,INA       NEGATIVE FOR DECIMAL CONVERSION 
      JSB \CVAS 
      JMP ESUB,I
* 
      SPC 5 
ERR22 DEF *+1 
      ASC 18,PARITY OR DATA ERROR  TRACK XXXX 
ER22A DEF ERR22+15
ER22B DEF ERR22+18
* 
ERR40 DEF *+1 
      ASC 18,DEFECTIVE CYLINDER -  TRACK XXXX 
ER40A DEF ERR40+15
ER40B DEF ERR40+18
* 
MES33 DEF *+1 
      ASC 14,READY DISC AND PRESS RUN 
MS33A DEF MES33+14
* 
MES32 DEF *+1 
      ASC 18,TURN OFF DISC PROTECT - PRESS RUN
MS32A DEF MES32+18
* 
END   EQU * 
* 
      END BEG0
* 
* 
END   EQU * 
      END BEG0
                                                                                                                                                                                                                                          