home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / r1ab.pa < prev    next >
Text File  |  1992-09-18  |  12KB  |  536 lines

  1. /R1AB.PA RL02 DRIVE 1 DEV A & B NON-SYSTEM HANDLER FOR OS78 V4
  2.  
  3. /RL20: RL02 DRIVE 0 NON-SYSTEM HANDLER
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /
  13. /COPYRIGHT  (C)  1977, 1981, 1984 BY DIGITAL EQUIPMENT CORPORATION
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /
  23. /
  24. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  25. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  26. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  27. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  28. /
  29. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  30. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  31. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  32. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  33. /
  34. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  35. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  36. /DIGITAL.
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /
  46. /
  47. /RL02 DRIVE 0 NON-SYSTEM HANDLER
  48.  
  49.  
  50. VERSION="B&77^100!61        //V4 OS78 IS B1
  51.  
  52. NOCHK=    0    / 0 = No ctrl c test, 1 = test
  53.  
  54. /NOTES:
  55. /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED.
  56.  
  57. /EDIT HISTORY:
  58. /13-OCT-77 CREATION
  59. /10-MAY-79 MODIFY FOR RL02 SUPPORT
  60. /DEC 80 MODIFY TO SUPPORT DRIVES 2 & 3
  61. /13-AUG-84 ADDED CTRL C CHECK CONDITIONAL
  62.  
  63. /INSTRUCTIONS THAT GENERATE CONSTANTS
  64.  
  65. AC0001=CLA IAC
  66. AC0002=CLA CLL CML RTL
  67. AC0003=CLA CLL CML IAC RAL    /*
  68. AC0004=CLA CLL IAC RTL        /*
  69. AC0006=CLA CLL CML IAC RTL    /*
  70. AC0100=CLA IAC BSW        /*
  71. AC2000=CLA CLL CML RTR
  72. AC3777=CLA CLL CMA RAR
  73. AC4000=CLA CLL CML RAR
  74. AC5777=CLA CLL CMA RTR
  75. AC6000=CLA CLL CML IAC RTR    /*
  76. AC7775=CLA CLL CMA RTL
  77. AC7776=CLA CLL CMA RAL
  78.  
  79. /* USE ONLY ON VT-78 AND PDP-8E,F,M,A
  80.  
  81. /ID CODE AT START OF BAD BLOCK LIST (BBL)
  82.     ID=123
  83.  
  84. /BAD BLOCK LIST FORMAT:
  85. /WORD    CONTENTS
  86. /0    ID (IDENTIFICATION CODE)
  87. /1    BAD BLOCKS FOR DEVICE A (ASCENDING ORDER)
  88. /...    ...
  89. /10    0 (TERMINATOR FOR LIST A)
  90. /11    BAD BLOCKS FOR DEVICE B (ASCENDING ORDER)
  91. /...    ...
  92. /20    0 (TERMINATOR FOR LIST B)
  93. /21    BAD BLOCKS FOR DEVICE C (ASCENDING ORDER)
  94. /...    ...
  95. /30    0 (TERMINATOR FOR LIST C)
  96. /31    BAD BLOCKS FOR DEVICE D (ASCENDING ORDER)
  97. /...    ...
  98. /40    0 (TERMINATOR FOR LIST D)
  99.  
  100. / DEFINITIONS
  101.  
  102. RLIOT=6600
  103. RLDC=RLIOT 0    /CLEAR DEVICE
  104. RLSD=RLIOT 1    /SKIP IF DONE
  105. RLMA=RLIOT 2    /LOAD MEM ADDR
  106. RLCA=RLIOT 3    /LOAD REGISTER "A"
  107. RLCB=RLIOT 4    /LOAD REG "B" AND EXECUTE
  108. RLSA=RLIOT 5    /LOAD SECTOR ADDR
  109.         /RLIOT 6 UNUSED
  110. RLWC=RLIOT 7    /LOAD WORD COUNT
  111. RRER=RLIOT 10    /READ ERROR REG
  112. RRWC=RLIOT 11    /READ WORD COUNT
  113. RRCA=RLIOT 12    /READ REG "A"
  114. RRCB=RLIOT 13    /READ REG "B"
  115. RRSA=RLIOT 14    /READ SECTOR ADDR
  116. RRSI=RLIOT 15    /READ SILO BYTE
  117.         /RLIOT 16 UNUSED
  118. RLSE=RLIOT 17    /SKIP IF ERROR
  119. /RLCB FUNCTION BITS:
  120.     RLMT=0    /MAINTENANCE MODE
  121.     RLRE=1    /RESET DRIVE ERRORS
  122.     RLST=2    /READ STATUS REGS INTO SILO
  123.     RLSK=3    /SEEK
  124.     RLRH=4    /READ HEADER
  125.     RLWR=5    /WRITE
  126.     RLRD=6    /READ
  127.     RLRN=7    /READ WITH NO HEADER CHECK
  128. /BIT DEFINITIONS IN REGISTERS:
  129. BYTE=1000    /BYTE TRANSFER MODE
  130.  
  131. /LOGICAL DEVICE (RELATIVE) ENTRY POINTS FOR RL02 HANDLERS:
  132.  
  133. /DEVICE        A    B    C    D    E
  134. /DRIVE    0    117    113    106    77    145
  135. /    1    120    114    107    100    151
  136. /    2    121    115    110    101    155
  137. /    3    122    116    111    102    161
  138.  
  139.  
  140.  
  141. /OS78 V4 RELEASE DIVIDES THE DRIVES INTO THREE LOGICAL DRIVES OF TWO
  142. /LOGICAL DEVICES EACH. ENTRY POINTS REMAIN THE SAME AS ABOVE.
  143.  
  144. /    HANDLER        DEVICES
  145.  
  146. /    R0AB        A & B   DRIVE 0
  147. /    R0CD        C & D
  148.  
  149. /    R1AB        A & B    DRIVE 1
  150. /    R1CD        C & D
  151.  
  152. /    R01E        DRIVE 0 DEV E, DRIVE 1 DEV E (THE "THIRD" DRIVE)
  153. /HEADER BLOCK FOR USE BY "BUILD"
  154.  
  155.     *0
  156.     -2        /- NUMBER OF LOGICAL DEVICES PER HANDLER
  157.  
  158. /FORMAT OF ENTRIES IN HEADER BLOCK:
  159. /WORD    DESCRIPTION
  160. /0    GROUP NAME (4 CHAR)
  161. /2    DEVICE NAME (4 CHAR)
  162. /4    DCB WORD FOR AN RL02 (TYPE 37); IS A DIRECTORY DEVICE.
  163. /5    OFFSET TO ENTRY POINT; 2-PAGE INDICATOR.
  164. /6    0 (UNUSED WORD)
  165. /7    0 TO REPRESENT NON-SYSTEM DEVICE
  166.  
  167.     DRIVE=1
  168.  
  169.  
  170.  
  171. DEVICE R1AB;DEVICE R21A;4370;RLA&177+4000;0;0
  172. DEVICE R1AB;DEVICE R21B;4370;RLB&177+4000;0;0
  173. /DEVICE R1CD;DEVICE R21C;4370;RLC&177+4000;0;0
  174. /DEVICE R1CD;DEVICE R21D;4370;RLD&177+4000;0;0
  175.  
  176. /HANDLER CODE
  177.         *200        /FIRST PAGE
  178.  
  179. /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE
  180. GO,    0        /ADDR OF MAIN
  181.  
  182. BBL,    /-----BOUNDARY OF BAD BLOCK LIST-----
  183.     /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST
  184.     /READ IN BAD BLOCK LIST (BBL)
  185.     /SAVE CALLING DATA FIELD
  186.  
  187.     RDF
  188.     TAD OOCDF
  189.     DCA BACK
  190. OOCDF,    CDF 00        /SET TO CURRENT FIELD
  191. /REPLACE ONCE-ONLY JUMP INSTRUCTION
  192.     TAD JMPSET
  193.     DCA ONCE
  194. LOOP,    TAD LIST    /RELOCATE CROSS-PAGE REFERENCES;
  195.             /SCAN "LIST" FOR RELATIVE LOCATIONS
  196.             /OF VALUES TO BE RELOCATED
  197.     SNA        /0 ACTS AS TERMINATOR
  198.     JMP OUT
  199.     TAD GO        /RELOCATE RELATIVE ADDRESS
  200.     DCA ONLY    /"ONLY" IS NOW TEMP STORAGE
  201.     ISZ LOOP    /NEXT VALUE
  202.     TAD GO
  203.     TAD I ONLY    /RELOCATE THE CONTENTS
  204.     DCA I ONLY
  205.     JMP LOOP    /CONTINUE UNTIL DONE
  206.  
  207. /LIST OF RELATIVE ADDRESSES TO MODIFY
  208.  
  209. LIST,    BARG-MAIN
  210.     ABLOCK-MAIN
  211.     BBBL-MAIN
  212.     AMA-MAIN
  213.     ASECT-MAIN
  214.     ATRACK-MAIN
  215.     MA-MAIN
  216.     AERROR-MAIN
  217.     
  218.     ZBLOCK 10+DRIVE    /POSITION ENTRY POINTS TO BE UNIQUE FOR EACH
  219.             /LOGICAL DEVICE. MUST HAVE AT LEAST ONE 0
  220.             /HERE FOR TERMINATOR TO LIST.
  221. OUT,    JMS I GO    /READ BAD BLOCK LIST
  222. OK,    CLA        /COULD TAKE THESE NEXT 2 OUT SINCE BBL READ-IN
  223. BACK,    CDF        /IS INITIALIZED TO THE SAME THING. (THIS IS 1 SHOT)
  224. JMPSET,    JMP SET        /SETUP FOR TRANSFER
  225.  
  226.     /END OF ONCE ONLY CODE. OK MUST BE HIGHER THAN 41 FOR RETURN
  227.  
  228.  
  229. /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE
  230. /CALCULATE TRACK AND SECTOR FROM BLOCK.
  231.  
  232. / - - - ! - - - ! - - - ! - - -
  233. / 0-6 BECOME CYL    !  8-11 BECOME SECTOR, AFTER FUDGING TO SKIP FOR E DEVICE
  234. /            !
  235. /        7 BECOMES THE "HEAD" BIT (1=UPPER)
  236.  
  237. MAPPED,    TAD I ABLOCK
  238.     RTR
  239.     RTR
  240.     AND A377
  241.     TAD OFFSET    /DEVICE OFFSET (0 OR 400)
  242.     DCA I ATRACK
  243.     TAD I ABLOCK    /CALCULATE SECTOR FROM BLOCK
  244.     AND A17        /SECTOR CODE
  245.     CLL RTL
  246.     TAD A7751
  247.     SPA
  248.     TAD A47
  249.     BSW
  250.     DCA I ASECT
  251. /TRANSFER 1ST PAGE OF BLOCK
  252.     JMS I GO
  253.     TAD A200    /INCREMENT MA
  254.     TAD I AMA
  255.     DCA I AMA
  256. /INCREMENT SECTOR
  257.     TAD A200
  258.     TAD I ASECT
  259.     DCA I ASECT
  260. /TRANSFER 2ND PAGE OF BLOCK
  261.     JMS I GO
  262.     TAD A200    /INCREMENT MA
  263.     TAD I AMA
  264.     DCA I AMA
  265. /CONTINUE WITH NEXT BLOCK
  266.     JMP NEXT
  267.  
  268.  
  269. /ENTRY POINT FOR DEVICE D    
  270.  
  271. RLD,    VERSION
  272.     CLA CLL
  273.     TAD RLD
  274.     DCA RLB
  275.     AC0004        /TRACK OFFSET WILL BE 1400
  276. CENT,    TAD A10
  277.     JMP START    /SKIP AROUND RLA ENTRY POINT
  278.  
  279. /ENTRY POINT FOR DEVICE C    
  280.  
  281. RLC,    VERSION
  282.     CLA CLL
  283.     TAD RLC
  284.     DCA RLB
  285.     JMP CENT    /TRACK OFFSET WILL BE 1000
  286.  
  287. /ENTRY POINT FOR DEVICE B    
  288.  
  289. RLB,    VERSION
  290.     AC0004        /TRACK OFFSET WILL BE 400
  291.     JMP START    /SKIP AROUND RLA ENTRY POINT
  292. OFFSET,    0        /TRACK OFFSET FOR DEVICE (0 OR 400)
  293.  
  294. /ENTRY POINT FOR DEVICE A    
  295.  
  296. RLA,    VERSION
  297. A7600,    7600        /=CLA
  298.     TAD RLA        /TRANSFER CALLING ADDR
  299.     DCA RLB
  300. START,    BSW        /SET OFFSET TO 0 IF DEV A, 400 IF DEV B
  301.     DCA OFFSET
  302.     TAD A7600    /RETURN TO KEYBOARD MONITOR
  303. IFNZRO    NOCHK < KRS >    /IF CTRL,C TYPED
  304. IFZERO    NOCHK < NOP >
  305.     TAD A175    /-CTRL,C
  306.     SNA CLA
  307.     KSF
  308. ONCE,    JMP ONLY    /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS
  309.             /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION
  310.             /IS DONE AND THE BAD BLOCK LIST IS READ IN.
  311. ACDIF,    CIF CDF 00
  312.     JMP I A7600    /CALL KB MONITOR
  313.  
  314. /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE
  315. SET,    TAD OFFSET    /INITIALIZE MAPPING (BELOW)
  316.     BSW
  317.     CLL RAL        /0=DEV A, 10=B, 20=C, 30=D
  318.     TAD BASE
  319.     DCA MAP
  320.     TAD RLB        /ADDR OF ARGS
  321.     JMS I GO    /SETUP (AC NON-ZERO)
  322. /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT
  323. MAP,    TAD        /INITIALIZED ABOVE
  324.     SNA        /0 TERMINATES LIST
  325.     JMP MAPPED
  326.     STL CIA        /13-BIT NEGATE
  327.     TAD I ABLOCK    /COMPARE WITH BLOCK
  328.     SZL CLA
  329.     JMP MAPPED    /BAD BLOCK IS ABOVE CURRENT BLOCK
  330.     ISZ MAP        /TRY NEXT BAD BLOCK ALSO
  331. NEXT,    ISZ I ABLOCK    /INCREMENT CURRENT BLOCK NUMBER,
  332.             /EITHER DURING
  333.             /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER
  334.             /OF TWO SECTORS (PAGES) WITH MORE TO GO
  335.     JMP MAP        /CONTINUE MAPPING
  336.     JMP I AERROR    /ERROR ON BLOCK OVERFLOW
  337.  
  338.  
  339. /DATA
  340.  
  341. A10,    10
  342. A17,    17
  343. A47,    47
  344. A175,    175
  345. A200,    200
  346. A377,    377
  347. A7751,    7751
  348. BASE,    TAD BBL+1
  349. ABLOCK,    BLOCK-MAIN
  350. AMA,    MA-MAIN        /RELATIVE ADDR OF MA
  351. ASECT,    SECTOR-MAIN
  352. ATRACK,    TRACK-MAIN
  353. AERROR,    ERROR-MAIN
  354.  
  355.  
  356. ZBLOCK 377-.
  357.  
  358. /ONCE-ONLY CODE AT END OF PAGE
  359. ONLY,    JMS GO        /SET UP CROSS-PAGE LINK USED ON INITIALIZATION.
  360.             /2ND PAGE IN LOC "GO"
  361.     *400
  362. /2ND PAGE OF HANDLER
  363.  
  364. /SUBROUTINE TO SETUP AND TRANSFER
  365. /AC=0 FOR TRANSFER ELSE SETUP
  366. MAIN,    0
  367.     SNA
  368.     JMP TRANS
  369. /GET HANDLER ARGUMENTS
  370. SETUP,    DCA BARG    /ADDR OF HANDLER ARGS
  371.     AC4000        /SET "OLDTRK" TO INVALID TRACK
  372.     DCA OLDTRK    /TO FORCE READING NEXT HEADER.
  373.     TAD B7600    /SET FOR FULL PAGE TRANSFERS
  374.     DCA WC        /(WAS SMALLER FOR BBL READ)
  375.     TAD I BARG    /NOW GET HANDLER ARGUMENTS
  376.             /FUNCTION WORD
  377. /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT
  378. B377,    AND B4070    /CONVERT TO RLCB FORMAT
  379.     SPA
  380.     TAD B3777
  381.     TAD BRLRD
  382.     DCA FNC
  383.     TAD I BARG    /FUNCTION WORD
  384.     RAL        /CONVERT TO PAGE COUNT IN BITS [7600]
  385.     AND B7600
  386.     DCA PAGES
  387.     ISZ BARG
  388.     TAD I BARG    /MA
  389.     DCA MA
  390.     ISZ BARG
  391.     TAD I BARG    /BLOCK
  392.     DCA BLOCK
  393.     ISZ BARG
  394. /SAVE CALLING FIELD FOR RETURN
  395.     RDF
  396.     TAD BCDIF
  397.     DCA BRTN
  398. /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK
  399. BCDIF,    CIF CDF 00
  400. /GET DEVICE OFFSET FROM 1ST PAGE
  401.     TAD I BBBL    /CHECK FOR BBL VALIDITY -
  402.     TAD CHECK    /1ST LOC OF BBL CONTAINS AN
  403.     SZA CLA        /IDENTIFICATION CODE ("ID")
  404.     JMP ERROR    /TAKE ERROR RETURN FROM HANDLER
  405.             /IF BBL IS INVALID.
  406.     JMP I MAIN
  407. /TRANSFER ONE OR MORE PAGES TO/FROM DISK
  408. /GET INTERPAGE ARGUMENTS
  409. /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS
  410. TRANS,    AC7775        /AC=-3
  411.     DCA ERRCNT
  412. /CALCULATE CYLINDER AND SURFACE FROM TRACK
  413.     TAD TRACK
  414.     CLL RAR
  415.     DCA CYL
  416.     RTR
  417.     DCA SURF
  418. /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER
  419.     JMS TRKCMP
  420. /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK
  421. /RESET DRIVE (FUNCTION=1)
  422. RETRY,    RLDC        /CLEAR CONTROLLER, AC
  423. /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW
  424. SEEK,    IAC        /AC=(1 OR 3)
  425.     JMS IO        /RESET DRIVE OR SEEK
  426. /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK
  427.     TAD HEADER
  428.     JMS IO        /READ NEXT HEADER
  429.     RRSI        /GET HEADER BYTE #1
  430.     BSW
  431.     AND B3
  432.     DCA OLDTRK    /SAVE 2 LSB
  433.     RRSI        /GET HEADER BYTE #2
  434.     AND B377    
  435.     CLL RTL
  436.     TAD OLDTRK    /ADD IN MSB
  437.     DCA OLDTRK
  438. /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER
  439.     JMS TRKCMP
  440. /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK
  441. /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE
  442.     SPA        /IF POSITIVE, LINK WILL BE SET
  443.     CLL CIA        /IF NEGATIVE, CLEAR LINK
  444.     RAR        /DELETE SURFACE, INCLUDE DIRECTION
  445.     TAD SURF    /ADD SURFACE
  446.     RLCA        /LOAD DIFFERENCE WORD
  447.     AC0002        /PREPARE FOR SEEK
  448. /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK
  449. /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL
  450. /SEEK UNRELIABILITY
  451.     JMP SEEK
  452. /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED)
  453. /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC=
  454. /REQUESTED-OLD, AND LINK=1
  455. TRKCMP,    0
  456.     TAD OLDTRK    /CALCULATE DIFFERENCE
  457.     CIA
  458.     TAD TRACK
  459.     STL        /LINK MUST BE SET WHEN
  460.             /DIFFERENCE IS POSITIVE.
  461.     SZA
  462.     JMP I TRKCMP    /DIFFERENT; RETURN
  463. /ON TRACK: DO TRANSFER
  464. /LOAD ALL REGISTERS
  465.     TAD SECTOR
  466.     RLSA
  467.     TAD WC
  468.     RLWC
  469.     TAD SURF
  470.     TAD CYL
  471.     RLCA
  472.     TAD MA
  473.     RLMA
  474. /DO THE READ OR WRITE
  475.     TAD FNC
  476.     JMS IO
  477. /COUNT REQUESTED NUMBER OF PAGES
  478.     TAD B7600
  479.     TAD PAGES
  480.     SNA
  481.     JMP DONE
  482.     DCA PAGES
  483.     JMP I MAIN    /RETURN FOR MORE
  484. /SUBROUTINE TO DO THE ACTUAL I/O
  485. IO,    0        /AC=MODE,FIELD,FUNCTION
  486.     TAD BDRIVE
  487.     RLCB        /DO THE OPERATION
  488.     RLSD        /WAIT UNTIL DONE
  489.     JMP .-1
  490.     RLSE        /TEST FOR I/O ERROR(S)
  491.     JMP I IO    /NONE; RETURN
  492.  
  493. /IF ERROR, RETRY TWICE
  494.     ISZ ERRCNT    /MORE RETRIES LEFT?
  495.     JMP RETRY    /YES
  496. /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN
  497. /WITH AC=4000
  498. ERROR,    AC4000
  499.     SKP
  500. /NORMAL RETURN FROM HANDLER
  501. DONE,    ISZ BARG    /SKIP ERROR RETURN
  502. BRTN,    CIF CDF 00    /RETURN TO CALLING FIELD
  503.             /BBL READ: NOP (FIELD 0)
  504.     JMP I BARG    /RETURN TO CALLING PROGRAM
  505. DLAY,    0        /***
  506. /DATA
  507. BLOCK,    0
  508. TRACK,    0        /BBL READ: TRACK 0
  509. WC,    -41        /BBL READ: -BBL LENGTH
  510. SECTOR,    1400        /BBL READ: SECTOR 14
  511. CYL,    0
  512. SURF,    0
  513. ERRCNT,    0        /COUNT OF RETRIES
  514. OLDTRK,    2000        /FORCE INITIAL SEEK
  515. PAGES,    200        /BBL READ: ONE PAGE
  516. FNC,    RLRD        /BBL READ: READ FUNCTION
  517.  
  518. /RELOCATED RELATIVE ADDRESSES
  519. BARG,    OK-MAIN        /BBL READ: RETURN FROM READ
  520.             /ADDRESS OF HANDLER ARGUMENTS
  521. MA,    BBL-MAIN    /BBL READ: ADDR OF BBL
  522. BBBL,    BBL-MAIN
  523.  
  524. B3,    3
  525. B3777,    3777
  526. B7600,    7600
  527. BRLRD,    RLRD
  528. HEADER,    BYTE RLRH
  529. BDRIVE,    DRIVE^100    /DRIVE BITS FOR RLCB
  530. CHECK,    -ID
  531.  
  532. /THIS CONSTANT MUST BE AT END OF PAGE
  533.     ZBLOCK 577-.
  534. B4070,    4070
  535. $
  536.