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 / r01e.pa < prev    next >
Text File  |  1992-09-18  |  10KB  |  457 lines

  1. /R01E.PA RL02 DEV E DRIVES 0 & 1 FOR OS78V4
  2.  
  3. /RL2E: RL02 DEVICE E NON-SYSTEM HANDLER
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /COPYRIGHT  (C)  1977, 1984 BY DIGITAL EQUIPMENT CORPORATION
  13. /
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /
  23. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  24. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  25. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  26. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  27. /
  28. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  29. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  30. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  31. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  32. /
  33. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  34. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  35. /DIGITAL.
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /
  46. /RL02 DEVICE E NON-SYSTEM HANDLER
  47.  
  48.  
  49.     VERSION="B&77
  50.  
  51.     NOCHK=    0 / 0 = No ctrl c check, 1 = check
  52.  
  53. /NOTES:
  54. /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED.
  55.  
  56. /EDIT HISTORY:
  57. /9-NOV-77 CREATION
  58. /10-MAY-79 MODIFIED FOR RL02 SUPPORT
  59. /DEC 80 ADAPTED FOR OS/78 V4 (DRIVE 2 & 3 ADDED)
  60. / 13-aug-84 added ctrl c conditional
  61.  
  62. /INSTRUCTIONS THAT GENERATE CONSTANTS
  63.  
  64. AC0001=CLA IAC
  65. AC0002=CLA CLL CML RTL
  66. AC0003=CLA CLL CML IAC RAL    /*
  67. AC0004=CLA CLL IAC RTL        /*
  68. AC0006=CLA CLL CML IAC RTL    /*
  69. AC0100=CLA IAC BSW        /*
  70. AC2000=CLA CLL CML RTR
  71. AC3777=CLA CLL CMA RAR
  72. AC4000=CLA CLL CML RAR
  73. AC5777=CLA CLL CMA RTR
  74. AC6000=CLA CLL CML IAC RTR    /*
  75. AC7775=CLA CLL CMA RTL
  76. AC7776=CLA CLL CMA RAL
  77.  
  78. /* USE ONLY ON VT-78 AND PDP-8E,F,M,A
  79.  
  80. /ID CODE AT START OF BAD BLOCK LIST (BBL)
  81.     ID=123
  82.  
  83. /BAD BLOCK LIST FORMAT:
  84. /(TRACK 0 SECTOR 16)
  85. /WORD    CONTENTS
  86. /0    ID (IDENTIFICATION CODE)
  87. /1    BAD BLOCK NUMBERS (ASCENDING ORDER)
  88. /...    ...
  89. /10    0 (LIST TERMINATOR)
  90. /RL01 DEFINITIONS
  91.  
  92. RLIOT=6600
  93. RLDC=RLIOT 0    /CLEAR DEVICE
  94. RLSD=RLIOT 1    /SKIP IF DONE
  95. RLMA=RLIOT 2    /LOAD MEM ADDR
  96. RLCA=RLIOT 3    /LOAD REGISTER "A"
  97. RLCB=RLIOT 4    /LOAD REG "B" AND EXECUTE
  98. RLSA=RLIOT 5    /LOAD SECTOR ADDR
  99.         /RLIOT 6 UNUSED
  100. RLWC=RLIOT 7    /LOAD WORD COUNT
  101. RRER=RLIOT 10    /READ ERROR REG
  102. RRWC=RLIOT 11    /READ WORD COUNT
  103. RRCA=RLIOT 12    /READ REG "A"
  104. RRCB=RLIOT 13    /READ REG "B"
  105. RRSA=RLIOT 14    /READ SECTOR ADDR
  106. RRSI=RLIOT 15    /READ SILO BYTE
  107.         /RLIOT 16 UNUSED
  108. RLSE=RLIOT 17    /SKIP IF ERROR
  109. /RLCB FUNCTION BITS:
  110.     RLMT=0    /MAINTENANCE MODE
  111.     RLRE=1    /RESET DRIVE ERRORS
  112.     RLST=2    /READ STATUS REGS INTO SILO
  113.     RLSK=3    /SEEK
  114.     RLRH=4    /READ HEADER
  115.     RLWR=5    /WRITE
  116.     RLRD=6    /READ
  117.     RLRN=7    /READ WITH NO HEADER CHECK
  118. /BIT DEFINITIONS IN REGISTERS:
  119. BYTE=1000    /BYTE TRANSFER MODE
  120. /HEADER BLOCK FOR USE BY "BUILD"
  121.  
  122.     *0
  123.     -2        /- NR DEVICES PER HANDLER
  124.  
  125. /FORMAT OF ENTRIES IN HEADER BLOCK:
  126. /WORD    DESCRIPTION
  127. /0    GROUP NAME (4 CHAR)
  128. /2    DEVICE NAME (4 CHAR)
  129. /4    DCB WORD FOR AN RL02, DIRECTORY DEVICE
  130. /5    OFFSET TO ENTRY POINT, 2-PAGE INDICATOR
  131. /6    0 (UNUSED WORD)
  132. /7    0 TO REPRESENT NON-SYSTEM DEVICE
  133.  
  134. DEVICE R01E;DEVICE R20E;4370;R20E&177+4000;0;0
  135. DEVICE R01E;DEVICE R21E;4370;R21E&177+4000;0;0
  136. /DEVICE RL2E;DEVICE R22E;4370;R22E&177+4000;0;0
  137. /DEVICE RL2E;DEVICE R23E;4370;R23E&177+4000;0;0
  138. /HANDLER CODE
  139.  
  140.     *200        /FIRST PAGE
  141.  
  142. GO,    0        /ONCE-ONLY CODE.
  143.             /ADDRESS OF 2ND PAGE STORED HERE.
  144. BBL,    TAD JMPX    /NEXT 11 OCTAL LOCATIONS ARE
  145.             /REPLACED BY THE BAD BLOCK LIST
  146.             /WHEN IT IS READ IN
  147.             /FROM REQUESTED DRIVE.
  148.             /ONCE-ONLY CODE: PREVENT EXE-
  149.             /CUTION MORE THAN ONCE.
  150.     DCA ONCE
  151. LOOP,    TAD LIST    /RELOCATE LOCATIONS CONTAINING
  152.     SNA        /RELATIVE ADDRESSES TO MAKE THEM
  153. JMPX,    JMP BEGIN    /ABSOLUTE. LOCATION LIST IS TERM-
  154.             /INATED BY ZERO.
  155.     TAD GO        /RELOCATE VALUE IN LIST.
  156.     DCA ONLY    /"ONLY" IS NOW TEMP STORAGE.
  157.     ISZ LOOP
  158.     TAD GO        /RELOCATE ADDRESS(VALUE).
  159.     TAD I ONLY
  160.     DCA I ONLY
  161.     JMP LOOP    /CONTINUE UNTIL DONE.
  162. LIST,    ABBL-MAIN    /LIST OF RELATIVE ADDRESSES OF
  163.             /RELOCATABLE ADDRESSES.
  164.     ATRANS-MAIN
  165.     ACURTK-MAIN
  166.     BBLOCK-MAIN
  167.     BSECT-MAIN
  168.     BTRACK-MAIN
  169.     BHALF-MAIN
  170.     BDRIVE-MAIN
  171.     BASE-MAIN
  172.     BERROR-MAIN
  173.     0        /TERMINATOR.
  174. /PERFORM TRANSFER, READING IN BBL IF NECESSARY
  175.  
  176. BEGIN,    AC2000    
  177.     DCA I ACURTK    /FORCE IGNORANCE OF CURRENT
  178.             /TRACK IN CASE OPERATION IS
  179.             /TO A DIFFERENT DRIVE.
  180.             /(2000 IS AN ILLEGAL TRACK)
  181.     TAD DRIVE    /HAS DRIVE CHANGED FROM LAST CALL?
  182.     CIA
  183.     TAD CURDRV
  184.     SNA CLA
  185.     JMP I ATRANS    /NO, DO TRANSFER.
  186.     TAD DRIVE    /YES, REMEMBER CHANGE AND
  187.     DCA CURDRV    /READ IN BAD BLOCK LIST.
  188.     JMS I GO    /CALL TRANSFER SUBROUTINE
  189.         0        /TRACK=0
  190.         16        /SECTOR=16
  191.         -11        /WC=-LIST LENGTH
  192. ABBL,        BBL-MAIN    /MA="BBL"
  193. ARLRD,        RLRD    /FUNCTION=READ INTO FIELD 0
  194.     TAD I ABBL    /IS BBL VALID?
  195.     TAD CHECK    /-ID.
  196.     SNA CLA
  197.     JMP I ATRANS    /YES, DO TRANSFER.
  198. ERROR,    AC4000        /HANDLER ERROR RETURN.
  199.     SKP
  200. DONE,    ISZ ARG        /NORMAL HANDLER RETURN.
  201. RTN,    CIF CDF        /RETURN TO CALLING FIELD.
  202.     JMP I ARG
  203. /SECTOR TRANSFER SUBROUTINE
  204.  
  205. HALF,    0        /TRANSFER ONE PAGE.
  206.     JMS I GO    /CALL TRANSFER SUBROUTINE
  207. TRACK,        0        /TRACK
  208. SECTOR,        0        /SECTOR
  209. A7600,        7600    /-WORD COUNT
  210. MA,        0        /MEMORY ADDRESS
  211. FNC,        0        /FUNCTION WORD
  212.     TAD A200    /INCREMENT MEMORY ADDRESS.
  213.     TAD MA
  214.     DCA MA
  215.     ISZ SECTOR    /INCREMENT SECTOR ADDRESS.
  216.     ISZ SECTOR    /(2:1 INTERLEAVE)
  217.     TAD A7600    /DECREMENT PAGE COUNT.
  218.     TAD PAGES
  219.     SNA
  220.     JMP DONE    /TAKE NORMAL HANDLER RETURN
  221.             /WHEN PAGE COUNT REACHES ZERO.
  222.     DCA PAGES    /ELSE CONTINUE TRANSFER.
  223.     JMP I HALF
  224.  
  225. START,    DCA DRIVE    /SAVE DRIVE NUMBER.
  226.     TAD DRIVE    /FIND ENTRY ADDR IN
  227.     CLL RTL        /ORDER TO TRANSFER
  228.     TAD TADX    /CALLING ADDR TO "ARG".
  229.     DCA .+1
  230.     TAD
  231.     DCA ARG
  232.     TAD I ARG    /GET ARGUMENTS
  233.             /FUNCTION WORD
  234.     AND A4070    /READ-WRITE, FIELD
  235.     SPA
  236.     TAD A3777    /IF WRITE, -1
  237.     TAD ARLRD    /CONVERT FUNCTION TO RL01
  238.             /FUNCTION WORD.
  239.     DCA FNC
  240.     TAD I ARG    /FUNCTION WORD
  241.     RAL
  242.     AND A7600    /PAGES IN BITS [7600];
  243.             /0 MEANS 40.
  244.     DCA PAGES
  245.     ISZ ARG
  246.     TAD I ARG    /MA
  247.     DCA MA
  248.     ISZ ARG
  249.     TAD I ARG    /BLOCK
  250.     DCA BLOCK
  251.     ISZ ARG
  252.     RDF        /SAVE CALLING FIELD
  253.     TAD ACIDF    /FOR RETURN.
  254.     DCA RTN
  255. ACIDF,    CIF CDF 00    /CHANGE TO CURRENT FIELD.
  256.     TAD A7600    /RETURN TO MONITOR IF USER
  257. IFNZRO    NOCHK < KRS >    /TYPES CTRL,C.
  258. IFZERO    NOCHK < NOP >
  259.     TAD A175
  260.     SNA CLA
  261.     KSF
  262. ONCE,    JMP ONLY    /ELSE START ONCE-ONLY CODE
  263.             /AT "ONLY". "ONCE" GETS CHANGED
  264.             /TO "JMP BEGIN" BY ONCE-ONLY CODE.
  265.     JMP I A7600    /CALL MONITOR UPON CTRL,C.
  266.  
  267.     /ENTRY POINTS FOR HANDLER
  268.  
  269. ARG,            /BASE POINTER TO ENTRY
  270. R20E,    VERSION        /ENTRY POINTS FOR HANDLER MUST BE KEPT TOGETHER
  271.     CLA
  272.     JMP START
  273. TADX,    TAD ARG        /AND THESE CONSTANTS INTERLEAVED IN ORDER TO MAKE
  274.  
  275. R21E,    VERSION        /THE DRIVE SELECTION ALGORITHM WORK.
  276.     AC0001
  277.     JMP START
  278. A175,    175
  279.  
  280. R22E,    VERSION
  281.     AC0002
  282.     JMP START
  283. A3777,    3777
  284.  
  285. R23E,    VERSION
  286.     AC0003
  287.     JMP START
  288.  
  289.  
  290.  
  291. /CONSTANTS
  292.  
  293. ATRANS,    TRANS-MAIN
  294. ACURTK,    CURTRK-MAIN
  295. CHECK,    -ID
  296. A200,    200
  297. A4070,    4070
  298.  
  299. /VARIABLES
  300.  
  301. DRIVE,    0
  302. PAGES,    0
  303. BLOCK,    0
  304.  
  305.     ZBLOCK 377-.    /UNUSED: "ONLY" MUST BE AT 377!
  306.  
  307. CURDRV,            /CURRENT DRIVE (INITIALLY INVALID
  308.             /TO FORCE READ-IN OF BAD BLOCK LIST).
  309. ONLY,    JMS GO        /ONCE-ONLY CODE TO PUT ADDRESS
  310.             /OF "MAIN" INTO "GO".
  311.             /REUSED AS CURRENT DRIVE.
  312.     *400        /SECOND PAGE
  313.  
  314. MAIN,    0        /TRANSFER UP TO ONE PAGE.
  315.     AC7775        /INITIALIZE FOR 3 TRIES.
  316.     DCA ERRCNT
  317.     TAD MAIN    /SAVE ADDRESS OF ARGS.
  318.     DCA MAINSV
  319.     TAD I MAIN    /CALCULATE CYLINDER AND
  320.             /SURFACE FROM TRACK.
  321.             /1ST ARG=TRACK.
  322.     CLL RAR
  323.     DCA CYL
  324.     RTR
  325.     DCA SURF
  326.     JMS TRKCMP    /IF ON TRACK, DO TRANSFER.
  327. RETRY,    TAD MAINSV    /OFF TRACK: SEEK TO TRACK.
  328.     DCA MAIN    /RESTORE ADDRESS OF ARGS.
  329.     RLDC        /CLEAR CONTROLLER REGISTERS.
  330. SEEK,    IAC        /AC=CLEAR DRIVE REGISTERS
  331.             /FUNCTION (AC=SEEK FUNCTION
  332.             /WHEN CALLED FROM BELOW).
  333.     JMS IO        /DO RL01 FUNCTION.
  334.     TAD HEADER
  335.     JMS IO        /READ NEXT HEADER FROM DISK.
  336.     RRSI        /GET HEADER BYTE #1.
  337.     BSW
  338. B377,    AND B3        /THIS INSTRUCTION IS ALSO USED
  339.             /AS A CONSTANT.
  340.     DCA CURTRK    /BITS [3] OF CURRENT TRACK.
  341.     RRSI        /GET HEADER BYTE #2.
  342.     AND B377    /THIS SHOULD BE DONE BY HARDWARE!
  343.     CLL RTL        /BITS [774] OF CURRENT TRACK.
  344.     TAD CURTRK
  345.     DCA CURTRK
  346.     JMS TRKCMP    /IF ON TRACK, DO TRANSFER.
  347.     TAD CURTRK    /OFF TRACK: CONSTRUCT DIFFERENCE
  348.     CLL RAR        /WORD FOR SEEK.
  349.     CIA
  350.     TAD CYL
  351.     SMA
  352.     JMP AROUND
  353.     CIA
  354.     SKP
  355. AROUND,    TAD B4000    /SET DIRECTION BIT IF TO HIGHER
  356.             /CYLINDER ADDRESS.
  357.     TAD SURF
  358.     RLCA        /LOAD DIFFERENCE WORD.
  359.     AC0002        /PREPARE AC FOR SEEK FUNCTION.
  360.     JMP SEEK    /SEEK.
  361. TRKCMP,    0        /IF ON TRACK, DO TRANSFER.
  362.     TAD CURTRK    /COMPARE CURRENT TRACK AND
  363.     CIA        /DESIRED TRACK.
  364.     TAD I MAIN    /1ST ARG=TRACK.
  365.     SZA CLA
  366.     JMP I TRKCMP    /DIFFERENT: SEEK.
  367.     ISZ MAIN    /ON TRACK: DO TRANSFER.
  368.     TAD CYL
  369.     TAD SURF
  370.     RLCA        /LOAD DISK ADDRESS OF TRACK.
  371.     TAD I MAIN    /2ND ARG=SECTOR.
  372.     BSW
  373.     RLSA        /LOAD SECTOR ADDRESS.
  374.     ISZ MAIN
  375.     TAD I MAIN    /3RD ARG=WORD COUNT.
  376.     RLWC        /LOAD WORD COUNT.
  377.     ISZ MAIN
  378.     TAD I MAIN    /4TH ARG=MA.
  379.     RLMA        /LOAD MA.
  380.     ISZ MAIN
  381.     TAD I MAIN    /5TH ARG=FUNCTION.
  382.     JMS IO        /DO RL01 FUNCTION.
  383.     ISZ MAIN
  384.     JMP I MAIN    /RETURN FROM TRANSFER SUBROUTINE.
  385. TRANS,    TAD BASE    /DO TRANSFER.
  386.             /INITIALIZE BAD BLOCK MAPPING.
  387.     DCA MAPPER
  388. MAP,    TAD I MAPPER    /DO BAD BLOCK MAPPING.
  389.             /GET BAD BLOCK IF ANY.
  390.     SNA        /DONE? (0 TERMINATES)
  391.     JMP MAPPED    /YES.
  392.     STL CIA        /NO, 13-BIT NEGATE.
  393.     TAD I BBLOCK    /SUBTRACT FROM CURRENT BLOCK.
  394.     SZL CLA        /IS BAD BLOCK GREATER (UNSIGNED)?
  395.     JMP MAPPED    /YES, MAPPING IS DONE.
  396.     ISZ MAPPER    /NO, MAP AROUND THIS BAD BLOCK
  397.             /AND TRY NEXT.
  398. NEXT,    ISZ I BBLOCK    /WILL NEVER SKIP.
  399.     JMP MAP        /CONTINUE MAPPING UNTIL DONE.
  400. MAPPED,    TAD I BBLOCK    /CALCULATE SECTOR FROM BLOCK.
  401.     AND B3
  402.     CLL RTL
  403.     DCA I BSECT
  404.     TAD I BBLOCK    /TEST BLOCK FOR LEGALITY: LEGAL
  405.     TAD B10        /BLOCKS ARE 0-7770
  406.     SZL CLA
  407.     JMP I BERROR
  408.     TAD I BBLOCK    /CALCULATE TRACK FROM BLOCK.
  409.     RTR
  410.     AND B1777
  411.     IAC
  412.     DCA I BTRACK
  413.     JMS I BHALF    /TRANSFER 1ST HALF OF BLOCK.
  414.     JMS I BHALF    /TRANSFER 2ND HALF OF BLOCK.
  415.     JMP NEXT    /CONTINUE WITH NEXT BLOCK.
  416. IO,    0        /DO RL01 FUNCTION.
  417.     BSW
  418.     TAD I BDRIVE
  419.     BSW        /PUT DRIVE INTO BITS [300].
  420.     RLCB        /DO RL01 COMMAND.
  421.     RLSD        /WAIT UNTIL DONE.
  422.     JMP .-1
  423.     RLSE        /ANY ERRORS?
  424.     JMP I IO    /NO, RETURN.
  425.     ISZ ERRCNT    /YES, TRY AGAIN?
  426.     JMP RETRY    /YES.
  427.     JMP I BERROR    /TAKE ERROR RETURN WHEN 3
  428.             /TRIES HAVE BEEN DONE.
  429.  
  430. /DATA
  431. BBLOCK,    BLOCK-MAIN
  432. BSECT,    SECTOR-MAIN
  433. BTRACK,    TRACK-MAIN
  434. BHALF,    HALF-MAIN
  435. BDRIVE,    DRIVE-MAIN
  436. BERROR,    ERROR-MAIN
  437. BASE,    BBL+1-MAIN    /START OF BBL FOR MAPPING.
  438. MAPPER,    0
  439. MAINSV,    0        /SAVED "MAIN" VALUE.
  440. CURTRK,    0
  441. HEADER,    BYTE RLRH
  442. SURF,    0
  443. CYL,    0
  444. ERRCNT,    0
  445. B777,    777        /THIS MAY NOT BE REQUIRED FOR RL02
  446. B4000,    4000
  447. B4010,    4010        /THIS MAY NOT BE REQUIRED FOR RL02
  448. B10,    10
  449. B1777,    1777
  450.     ZBLOCK 577-.    /UNUSED.
  451.  
  452. B3,    3        /THIS CONSTANT MUST BE AT
  453.             /LAST LOC OF 2ND PAGE.
  454.  
  455. $
  456.  
  457.