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 / r1cd.pa < prev    next >
Text File  |  1992-09-18  |  12KB  |  537 lines

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