ASMB,R,B,L,C   2883/4 DVR31 - 24226 REV E 03.04.74
      HED DOS-M/DOS-III 2883 EXTENDED STORAGE DISC DRIVER  24226E 
      NAM DVR31,0 
* 
      ENT I.31,C.31 
* 
*     THIS DRIVER WILL SUPPORT 1 TO 4 ISS DISC DRIVES ( 2-2883'S
*     AND 2-2884'S).  THE SECOND 2883/4 PAIR WILL REQUIRE A SECOND
*     DISC INTERFACE KIT (12565A) WHICH MUST BE INSTALLED IN THE
*     TWO I/O SLOTS IMMEDIATELY AFTER THE FIRST INTERFACE.
* 
*     BASE PAGE LOCATION NSPCY (116) DETERMINES SUBCHANNEL SIZE.
*     SUBCHANNEL SIZE MAYBE 115 SECTORS (FOUR PER DRIVE) OR 230 
*     SECTORS (TWO PER DRIVE).  THE SECOND 2883/4 PAIR MAYBE USED 
*     ONLY WHEN SUBCHANNEL SIZE IS SPECIFIED AS 230 SECTORS.  THE 
*     SIZE IS DETERMINED AT SYSGEN TIME BY THE DISC TYPE SPECIFIED
*     2883 - 115 SECTORS/TRACK , 2883B - 230 SECTORS/TRACK. 
* 
*     ON ANY GIVEN SYSTEM ALL SUBCHANNELS MUST BE THE SAME SIZE.
* 
*     AN ACCUMULATIVE ERROR COUNT IS MAINTAINED IN LOCATIONS
*     ERROR AND ERROR+1.
* 
* 
*     THE DRIVER WILL SUPPORT THE FOLLOWING I/O REQUESTS: 
* 
* 
*   * READ/WRITE
* 
*         JSB EXEC
*         DEF *+7 
*         DEF RCODE      REQUEST CODE = 1/2 
*         DEF CONWD      DOS CONTROL WORD - SEE BELOW 
*         DEF BUFFR      I/O BUFFER 
*         DEF LENGT      BUFFER LENGTH
*         DEF TRACK      TRACK NUMBER (0-199) 
*         DEF SECTR      SECTOR NUMBER (0-114 OR 0-229) 
* 
*     A READ OR WRITE MAY SPAN MORE THAN ONE TRACK. TRACK SWITCHING 
*     WILL BE PERFORMED AS SPECIFIED IN THE CONTROL WORD. 
* 
*         READ CONTROL WORD FUNCTION CODE (BITS 12-6) 
* 
*              BIT 12 = 1, BACKWARD TRACK INCREMENT 
*                     = 0, FORWARD TRACK INCREMENT
* 
*         WRITE CONTROL WORD FUNCTION CODE (BITS 12-6)
* 
*              BIT 12 = 1, BACKWARD TRACK INCREMENT 
*                     = 0, FORWARD TRACK INCREMENT
*              BIT 08 = 1, OMIT CYCLIC CHECK AFTER WRITE
*                     = 0, PERFORM CYCLIC CHECK 
* 
* 
*   * CLEAR 
* 
*         JSB EXEC
*         DEF *+3 
*         DEF RCODE      REQUEST CODE = 3 
*         DEF CONWD      DOS CONTROL WORD BITS 12-6 ALL ZERO
* 
* 
*   * TRACK FORMAT
* 
*     TRACK SWITCHING WILL NOT BE PERFORMED WHEN FORMATTING THE 
*     DISC.  ALL SECTORS ACCESSED BY A HEAD ON A TRACK MUST BE
*     FORMATTED AT THE SAME TIME.  CONSULT THE INTERFACE KIT
*     MANUAL FOR THE FORMAT OF THE DATA BUFFER USED TO FORMAT THE 
*     DISC. 
* 
*         JSB EXEC
*         DEF *+7 
*         DEF RCODE      REQUEST CODE = 3 
*         DEF CONWD 
*         DEF BUFFR      I/O BUFFER 
*         DEF LENGT      BUFFER LENGTH
*         DEF TRACK      TRACK NUMBER 
*         DEF SECTR      SECTOR NUMER 
* 
* 
*         TRACK FORMAT CONTROL WORD 
* 
*              BITS 15-6 MUST BE 0700 
* 
      SKP 
* 
ERROR OCT 0         RUNNING ERROR COUNT MS PART 
      OCT 0                             LS PART 
* 
* 
*     INITIATOR ENTRY AND REQUEST PREPROCESSING 
* 
* 
* 
I.31  DEF D.END 
      CCA           PATCH CONTINUATOR EXIT
      ADA I.31      / 
      STA C.31      / 
      LDB CRFLG     SET SUBCHANNEL
      LDA SYSSC     / 
      SZB           / 
      LDA CUDSC     / 
      STA REQSC     / 
      LDB NSPCY     COMPLUTE DRIVE #, SELECT CODE 
      BLF,BLF       / AND HEAD OFFSET - FIRST SET 
      ELB           / E=0 FOR 115, E=1 FOR 230
      SEZ,RSS       COMPUTE DRIVE # = SUBCHANNEL/ 
      ARS           / #SUBCHANNELS PER DRIVE
      ARS           / 
      STA DRIVE     / 
      AND B01       COMPUTE SELECT CODE 
      ADA EQT03,I   / 
      AND M77       / 
      STA SCODE     / 
      LDA REQSC     COMPUTE HEAD OFFSET 
      AND M3        / 
      SEZ           / 
      AND M1        / 
      LDB A         / 
      RAL,RAL       / 
      ADA B         / 
      SEZ           / 
      RAL           / 
      STA EQT12,I   / 
* 
      LDA EQT09,I   GET REQUEST CODE
      ERA,SLA       WRITE OR CONTROL REQ? 
      JMP I.WRT      -YES 
* 
      LDB STC       LOAD CONTROL FOR READ 
      LDA RDCMD     LOAD READ COMMAND 
      JMP I.SET 
* 
I.WRT LDA WRCMD     LOAD WRITE COMMAND
      LDB STF       LOAD CONTROL FOR WRITE
      SEZ,RSS       CONTROL REQUEST?
      JMP I.SET      -NO
      LDA EQT09,I   GET CONTROL PARAMETER 
      AND IOMSK     MASK OFF LUN# 
      CPA WACMD     WRITE ADDRESS REQUEST?
      JMP I.SET      -YES 
      AND FCODE     IS IT CLEAR?
      SZA           / 
      JMP IVCMP     /-NO, REJECT IT 
CLEAR LDA EQT06,I   IS DEVICE BUSY? 
      SZA,RSS       / 
      JMP ICOMP     / NO, SO JUST BUG OUT 
      JSB STAT      CLEAR DMA BY GETTING STATUS 
      LDA EQT04,I   CLEAR DEVICE STATUS 
      AND LHALF     / I/O INSTRUCTIONS ARE OK 
      STA EQT04,I   / 
ICOMP LDA .4        SET IMMEDIATE COMPLETION
      CLB           CLEAR XLOG
      STB EQT14,I   / 
      STB EQT06,I   CLEAR INTERRUPT PENDING 
      JMP CEXIT     EXIT
* 
I.SET STB IOCTL     SET READ/WRITE CONTROL
      STA EQT17,I   STORE I/O COMMAND 
      JSB CNFGR     CONFIGURE I/O INSTRUCTIONS
      JSB STAT      GET STATUS
      AND B04       IS DEVICE READY 
      SZA           / 
      JMP NRCMP     / NO, EXIT NOT READY
      LDB M400      SET FOWARD INCREMENT
      LDA EQT09,I   IS BIT 12 SET FOR JBIN
      ALF,SLA         READ/WRITE? 
      LDB LHALF        YES, SET BACKWARD INC
      STB NXTTR    SAVE FOR COMPUTING NEXT TRACK
* 
      CLB           IS CYCLIC CHECK DESIRED? (IE
      ALF,SLA        IS BIT 8 OF CONWD CLEAR?)
      CCB              NO , CYCLC=-1
      STB CYCLC        YES, CYCLC= 0
* 
      LDA N10       SET RETRY COUNT 
      STA EQT05,I   / 
      JMP START     START I/O REQUEST 
      SKP 
* 
* 
*     CONTINUATOR ENTRY AND EXITS 
* 
* 
C.31  NOP 
      CPA EQT06,I   WAITING FOR THIS SELECT CODE? 
      RSS           / -YES
      JMP CEXIT       -NO, EXIT 
      JSB STAT      CHECK STATUS
      SLA           / 
      JMP CEXIT     / POSITIONER BUSY 
      CLA           CLEAR INTERRUPT PENDING FLAG
      STA EQT06,I   / 
      JMP WAIT,I    TRANSFER TO CONTINUATION POINT
      SPC 2 
WAIT  NOP           WAIT FOR INTERRUPT
      LDA SCODE     SET INT PENDING 
      INA           / 
      STA EQT06,I   / 
      CLA           OPERATION INITIATED OR CONTINUED
      RSS 
NRCMP LDA .3        NOT READY EXIT
      RSS 
IVCMP LDA .2        INVALID CONTROL EXIT
CEXIT ISZ C.31      INC RETURN
RQCMP CLB           CLEAR SYS/USER FLAG 
      STB CRFLG     / 
      LDB EQT11,I   SET B TO XLOG 
      SSB           / 
      CMB,INB       / 
      JMP C.31,I    EXIT
      SKP 
* 
* 
*     REQUEST SETUP PROCESSING
* 
* 
START LDB EQT10,I   GET TRIPLET ADDRESS 
      LDA B,I       GET TRACK/SECTOR
      AND LHALF     / 
      STA EQT15,I   SAVE TRACK
      STA SCR1      / 
      XOR B,I       / 
      STA EQT16,I   SAVE SECTOR 
      INB           GET BUFFER ADDRESS
      LDA B,I       / 
      STA EQT13,I   / 
      INB           GET CHAR/WORD COUNT 
      LDA B,I       / 
      SSA,RSS       / 
      CMA,INA,RSS   / 
      ARS           / 
      SZA,RSS       / 
      CCA           / 
      STA EQT14,I   / 
      LDA EQT16,I   CHECK IF TRANSFER GOES BEYOND 
      CMA,INA       / END OF CYLINDER 
      ADA NSPCY     / 
      ALF,ALF       / 
      RAR           / 
      ADA EQT14,I   / 
      STA SCR2      / SAVE A FOR TSONE UPDATE 
*                                   / IF A .GE. 0, A = # OF WORDS 
*                                   / LEFT ON CYLINDER
*                                   / IF A .LT. 0, A = # OF WORDS 
*                                   / LEFT IN BUFFER
      SSA,RSS       / 
      JMP C.IO      REQUEST OK DO IT
C.MOR CMA,INA       SET UP TRIPLETS FOR NEXT TIME 
      STA B,I       / SET NEW COUNTS
      ADA EQT14,I   / 
      STA EQT14,I   / 
      ADB N1        / NEXT BUFFER ADDRESS 
      CMA,INA       / 
      ADA EQT13,I   / 
      STA B,I       / 
      ADB N1        / NEXT TRACK
      LDA EQT15,I   / 
      ADA NXTTR     / 
      STA B,I       / 
      SKP 
* 
* 
*     REQUEST EXECUTION 
* 
* 
C.IO  JSB SEEK      SEEK TRACK/SECTOR 
      LDB EQT17,I   WAIT FOR SEEK TO COMPLETE IF
      CPB WACMD     / FORMATTING DISC 
      JSB WAIT      / 
      LDB EQT13,I   LOAD BUFFER ADDRESS 
      LDA EQT17,I   LOAD READ/WRITE COMMAND 
      CPA RDCMD     IS THIS A READ? 
      ADB MSIGN      -YES, INCLUDE DIRECTION BIT
WCR1  CLC DMAL      OUTPUT BUFFER ADDRESS TO WCR
WCR2  OTB DMAL
      LDB EQT14,I   LOAD BUFFER LENGTH (-WORDS) 
IOCTL NOP           = STF FOR WRITE, STC FOR READ 
      JSB RDWRT     EXECUTE DATA TRANSFER 
      JSB ANLYZ     CHECK STATUS
      LDA EQT17,I   WAS REQUEST DATA WRITE? 
      CPA WRCMD     / 
      RSS           / 
      JMP DONE?     / NO, SKIP CYCLIC CHECK TEST
      LDB CYCLC     WAS CYCLIC CHECK REQUESTED? 
      SZB           / 
      JMP DONE?     / NO, SKIP IT 
      JSB SEEK      * 
      LDA EQT14,I   * 
      CMA,INA       *  CONVERT BUFFER LENGTH
      ADA .127      *    TO 
      ALF,ALF       *  SECTOR COUNT 
      RAL           * 
      AND RHALF     * 
DC6   OTA DC        OUTPUT SECTOR COUNT 
DC7   STC DC,C        TO DATA CHANNEL 
      LDA CHCMD     LOAD CHECK DATA COMMAND 
      JSB CMND
      JSB WAIT      WAIT FOR INTERRUPT
      JSB ANLYZ     CHECK STATUS
DONE? LDA SCR2      IS REQUEST COMPLETE?
      SSA           / 
      JMP START     / NO, DO ANOTHER I/O
      ALF,ALF       SET TRACK/SECTOR ONE PAST 
      RAL           / CURRENT TRANSFER IN 
      AND RHALF     / BASE PAGE FOR DISC MONITOR
      CMA,INA       / (TSONE) 
      ADA NSPCY     / 
      CPA NSPCY     / 
      LDA NXTTR     / 
      ADA SCR1      / 
      STA TSONE     / 
      CLA           SET REQUEST COMPLETE OK 
      JMP RQCMP     EXIT
SCR1  OCT 0 
SCR2  OCT 0 
      SKP 
* 
* 
*     USEFUL ROUTINES 
* 
* 
* 
*     OUTPUT A REGISTER AS DISC COMMAND 
* 
DRIVE OCT 0 
CMND  NOP           OUTPUT A REGISTER AS A COMMAND
      IOR DRIVE     INCLUDE DRIVE # IN I/O COMMAND
CC1   CLC CC        MAKE SURE CMND CHNL CLEAR 
CC2   OTA CC        OUTPUT DISC COMMAND 
CC3   STC CC,C        TO COMMAND CHANNEL
      JMP CMND,I
* 
*     SEEK TO TRACK/SECTOR
* 
SEEK  NOP           SEEK TRACK/SECTOR 
      LDA EQT16,I 
      LDB NSPTK 
      JSB DVMOD     DIVIDE BY 23
      ADB EQT12,I   FORM HEAD NUMBER
      BLF,BLF       ROTATE TO UPPER 8 BITS
      ADB A         SECTOR# IN A
      LDA EQT15,I   LOAD TRACK NUMBER 
      ALF,CLE,ALF    AND ROTATE TO LO 8 BITS
DC1   OTA DC        OUTPUT TRACK# 
DC2   STC DC,C        TO DATA CHANNEL 
      LDA SKCMD     LOAD SEEK COMMAND 
      JSB CMND
DC3   SFS DC        WAIT UNTIL TRACK# ACCEPTED
      JMP *-1 
      NOP           GIVE LOUSY CONTROLLER XTRA CYCLE
DC4   OTB DC        OUTPUT HEAD/SECTOR
DC5   STC DC,C        TO DATA CHANNEL 
DC12  SFS DC        MAKE SURE HD/SCTR ACCEPTED
      JMP *-1 
      JMP SEEK,I
* 
*     DATA TRANSFER FOR READ/WRITE
* 
RDWRT NOP 
WCR3  STC DMAL      OUTPUT WORD COUNT TO WCR
WCR4  OTB DMAL
DMA2  STC DMAH,C    START DMA 
DMA3  CLC DMAH      INHIBIT DMA INTERRUPT 
      JSB CMND
      JSB WAIT      WAIT FOR INTERRUPT
      JMP RDWRT,I   DATA TRANSFER COMPLETE
* 
*     GET DISC STATUS 
* 
STAT  NOP           EXITS WITH STAT ROTATED R2 IN A 
DMA4  STF DMAH      TURN DMA OFF
DC8   STC DC,C      SET DATA CHANNEL TO SEND STATUS 
      LDA STCMD     OUTPUT STATUS COMMAND 
      JSB CMND      / 
DC9   SFS DC        STATUS SET? 
      JMP *-1        -NO
DC10  LIA DC        GET STATUS FROM DATA CHANNEL
      AND RHALF     * 
      STA DSTAT     * UPDATE STATUS 
      LDA EQT04,I   * IN EQT TABLE
      AND LHALF     * 
      IOR DSTAT     * 
      STA EQT04,I   * 
      CLB           CLEAR #BDTR IF FIRST SEEK 
      RAR,RAR       * 
      SLA           * 
      STB #BDTR     * 
      JMP STAT,I    RETURN
* 
*     ANALYZE DISC STATUS 
* 
ANLYZ NOP 
      LDA DSTAT     GET STATUS
      SLA,RSS       ANY ERROR?
      JMP ANLYZ,I    -NO, EXIT
      LDB EQT17,I   TRYING TO FLAG DEFECTIVE CYL? 
      CPB WACMD 
      JMP ANLYZ,I    -YES, IGNORE STATUS
      RAR,RAR       FLAGGED CYL?
      RAR,SLA 
      JMP A.FLG      -YES 
      ISZ ERROR+1   INC RUNNING ERROR COUNT 
      RSS           / YES, YOU GET AN EXTRA RETRY 
      ISZ ERROR     / EVERY FEW BILLION ERRORS
      ISZ EQT05,I   INCREMENT ERROR RETRY COUNT 
      JMP A.TRY     GO EXECUTE RETRY
      LDA DSTAT     A=3 IF DATA ERROR 
      AND M3         =1 FOR ANY OTHER ERROR 
      LDB REQSC 
      STB RONBF 
      LDB EQT16,I 
      STB RONBF+2 
      LDB EQT15,I   LOAD VIOLATING TRACK NUMBER 
      STB RONBF+1 
      JMP RQCMP     GO TO COMPLETION EXIT 
* 
A.TRY LDA RCCMD     OUTPUT RECALIBRATE CMND 
      JSB CMND
      JSB WAIT      WAIT FOR INTERRUPT
      JMP C.IO      GO RESTART OPERATION
* 
A.FLG RAR,SLA,RAL   DEFECTIVE CYLINDER? 
      JMP A.DCY      -YES 
* 
      HLT 31B        -NO, WRITE TO PROTECTED TRACK
      CLA           CONTINUE - SETS GOOD COMPLETION 
      JMP RQCMP 
* 
A.DCY JSB SEEK
      LDB DFALT 
WCR5  CLC DMAL      OUTPUT BUFFER ADDRESS TO WCR
WCR6  OTB DMAL
      LDA RACMD     GET READ ADDRESS COMMAND
      LDB N2        SET FOR 2-WORD READ 
DC11  STC DC,C
      JSB RDWRT 
      LDA DFALT+1   GET ALTERNATE 
      AND RHALF     CYLINDER NUMBER 
      ALF,ALF 
      STA EQT15,I 
      ISZ #BDTR 
      JMP C.IO      GO RE-INITIATE OPERATION
* 
*     CONFIGURE I/O INSTRUCTIONS
* 
CNFGR NOP 
      LDB DCTBL     CONFIGURE DISC INTERFACE INST 
      LDA B,I       / 
      CMA,INA       / 
      ADA IO01      / 
      ADA SCODE     / 
      STA TEMP2     / 
      LDA N19       / 
      JSB SETIO     / 
      LDA B,I       CONFIGURE DMA INSTRUCTIONS
      CMA,INA       / 
      ADA IO01      / 
      ADA CHAN      / 
      STA TEMP2     / 
      LDA N10       / 
      JSB SETIO     / 
      LDA DMACW     SET DMA TO DISC 
DMA1  OTA DMAH      / 
      JMP CNFGR,I   EXIT
SCODE OCT 0 
* 
SETIO NOP 
      STA TEMP1 
STNXT LDA B,I       GET I/O CMND
      ADA TEMP2     INCLUDE CURRENT CHNL# 
      STA B,I 
      INB 
      ISZ TEMP1 
      JMP STNXT 
      JMP SETIO,I 
* 
DVMOD NOP           DIVIDE A BY B 
      STB TEMP1       B = QUOTIENT
      CMB,INB         A = REMAINDER 
      STB TEMP2 
      CLB,RSS 
      INB 
      ADA TEMP2 
      SSA,RSS 
      JMP *-3 
      ADA TEMP1 
      JMP DVMOD,I 
      HED  ** CONSTANT AND VARIABLE STORAGE AREA ** 
* 
* 
* WARNING: THE FOLLOWING 4 CONSTANTS ARE SET
*            BY THE DISC-RESIDENT BOOTSTRAP.
*            CHECK THE BOOTSTRAP BEFORE 
*            MAKING ANY CHANGES 
* 
STC   STC DC,C      READ CONTROL
STF   STF DC        WRITE CONTROL 
DMACW OCT 120000    DMA CONTROL WORD
NSPTK DEC 0         NUMBER SECTORS/HEAD 
MSPTK DEC 0         NEG. NUMBER SECTORS/HEAD
D.END EQU STF       LAST INSTR. TO BE CONFIGURED
IO01  OTA 0         THIS INSTRUCTION MUST NOT BE
*                                   CONFIGURED BY THE BOOTSTRAP 
* 
SKCMD OCT 030000    SEEK COMMAND
RDCMD OCT 040000    READ COMMAND
WRCMD OCT 050000    WRITE COMMAND 
CHCMD OCT 100000    CHECK DATA COMMAND
STCMD OCT 010000    STATUS COMMAND
RCCMD OCT 020000    RECALIBRATE COMMAND 
RACMD OCT 060000    READ ADDRESS COMMAND
WACMD OCT 070000    WRITE ADDRESS COMMAND 
* 
MSIGN EQU CHCMD 
N19   DEC -19 
M400  OCT 400 
B04   OCT 20
FCODE OCT 17700 
* 
DFALT DEF *+1,I 
      BSS 2         READ ADDRESS BUFFER 
DSTAT OCT 0         DEVICE STATUS 
REQSC OCT 0         REQUESTED SUBCHANNEL
TEMP1 NOP 
TEMP2 NOP 
NXTTR OCT 0         TRACK INCREMENT CONSTANT
CYCLC NOP           CYCLIC CHECK FLAG 
* 
DCTBL DEF *+1,I 
      DEF DC1 
      DEF DC2 
      DEF DC3 
      DEF DC4 
      DEF DC5 
      DEF DC6 
      DEF DC7 
      DEF DC8 
      DEF DC9 
      DEF DC10
      DEF DC11
      DEF DC12
      DEF STC 
      DEF STF 
      DEF IOCTL 
      DEF DMACW 
* 
      DEF CC1 
      DEF CC2 
      DEF CC3 
* 
      DEF DMA1
      DEF DMA2
      DEF DMA3
      DEF DMA4
* 
      DEF WCR1
      DEF WCR2
      DEF WCR3
      DEF WCR4
      DEF WCR5
      DEF WCR6
* 
      HED  ** SYSTEM BASE PAGE COMMUNICATION AREA **
* 
*  SYSTEM BASE PAGE CONSTANTS 
* 
#     EQU 53B 
N10   EQU #-10
N2    EQU #-2 
N1    EQU #-1 
.2    EQU #+2 
.3    EQU #+3 
.4    EQU #+4 
.127  EQU #+16
M1    EQU #+1 
M3    EQU #+3 
M77   EQU #+15
.177  EQU #+16
RHALF EQU #+17      OCT 377 
LHALF EQU #+18      OCT 177400
IOMSK EQU #+20
B01   EQU 55B 
B02   EQU 57B 
* 
A     EQU 0 
B     EQU 1 
* 
DC    EQU 0         DATA CHANNEL (HIGH PRIORITY)
CC    EQU 1         COMMAND CHANNEL (LOW PRIORITY)
DMAL  EQU 2 
DMAH  EQU 6 
* 
* 
*  I/O MODULE/DRIVE COMMUNICATION 
* 
.     EQU 100B
EQT01 EQU .+67
EQT02 EQU .+68
EQT03 EQU .+69
EQT04 EQU .+70
EQT05 EQU .+71
EQT06 EQU .+72
EQT07 EQU .+73
EQT08 EQU .+74
EQT09 EQU .+75
EQT10 EQU .+76
EQT11 EQU .+77
EQT12 EQU .+78
EQT13 EQU .+79
EQT14 EQU .+80
EQT15 EQU .+81
EQT16 EQU .+82
EQT17 EQU .+83
* 
NSPCY EQU .+14      # SECTORS/CYLINDER
RONBF EQU .+22
SYSSC EQU .+45      SYSTEM SUBCHANNEL 
CUDSC EQU .+49      USER SUBCHANNEL 
CRFLG EQU .+50      REQUEST FLAG, 0 = SYSTEM, 1 = USER
TSONE EQU .+60      LAST DISC TRACK/SECTOR ADDRESSED + 1
CHAN  EQU .+111 
#BDTR EQU .+151 
* 
      END 
                    