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

  1. /RL1.PA RL01 DRIVE 1 NON-SYSTEM HANDLER
  2. /
  3. /
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /COPYRIGHT  (C)  1977, 1984 BY DIGITAL EQUIPMENT CORPORATION
  12. /
  13. /
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  23. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  24. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  25. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  26. /
  27. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  28. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  29. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  30. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  31. /
  32. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  33. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  34. /DIGITAL.
  35. /
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45.  
  46. /RL01 DRIVE 1 NON-SYSTEM HANDLER
  47.  
  48.     VERSION="B&77
  49.  
  50.     NOCHK=    0 / 0 = No check for ctrl c, 1 = check
  51.  
  52. /NOTES:
  53. /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED.
  54.  
  55. /EDIT HISTORY:
  56. / 13-OCT-77 CREATION
  57. / 13-AUG-84    added ctrl c check switch
  58.  
  59. /INSTRUCTIONS THAT GENERATE CONSTANTS
  60.  
  61. AC0001=CLA IAC
  62. AC0002=CLA CLL CML RTL
  63. AC0003=CLA CLL CML IAC RAL    /*
  64. AC0004=CLA CLL IAC RTL        /*
  65. AC0006=CLA CLL CML IAC RTL    /*
  66. AC0100=CLA IAC BSW        /*
  67. AC2000=CLA CLL CML RTR
  68. AC3777=CLA CLL CMA RAR
  69. AC4000=CLA CLL CML RAR
  70. AC5777=CLA CLL CMA RTR
  71. AC6000=CLA CLL CML IAC RTR    /*
  72. AC7775=CLA CLL CMA RTL
  73. AC7776=CLA CLL CMA RAL
  74.  
  75. /* USE ONLY ON VT-78 AND PDP-8E,F,M,A
  76.  
  77. /ID CODE AT START OF BAD BLOCK LIST (BBL)
  78.     ID=123
  79.  
  80. /BAD BLOCK LIST FORMAT:
  81. /WORD    CONTENTS
  82. /0    ID (IDENTIFICATION CODE)
  83. /1    BAD BLOCKS FOR DEVICE A (ASCENDING ORDER)
  84. /...    ...
  85. /20    0 (TERMINATOR FOR LIST A)
  86. /21    BAD BLOCKS FOR DEVICE B (ASCENDING ORDER)
  87. /...    ...
  88. /40    0 (TERMINATOR FOR LIST B)
  89.  
  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 RL (TYPE 26) 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.     DRIVE=1
  135.  
  136. DEVICE RL1;DEVICE RL1A;4260;RLA&177+4000;0;0
  137. DEVICE RL1;DEVICE RL1B;4260;RLB&177+4000;0;0
  138. /HANDLER CODE
  139.     *200        /FIRST PAGE
  140.  
  141. /DATA
  142.  
  143. A17,    17
  144. A47,    47
  145. A175,    175
  146. A200,    200
  147. A377,    377
  148. A7751,    7751
  149. BASE,    TAD BBL+1
  150. ABLOCK,    BLOCK-MAIN
  151. AMA,    MA-MAIN        /RELATIVE ADDR OF MA
  152. ASECT,    SECTOR-MAIN
  153. ATRACK,    TRACK-MAIN
  154. AERROR,    ERROR-MAIN
  155.  
  156. /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE
  157. SET,    TAD OFFSET    /INITIALIZE MAPPING (BELOW)
  158.     BSW
  159.     CLL RTL        /(0 OR 20: DEVICE A OR B)
  160.     TAD BASE
  161.     DCA MAP
  162.     TAD RLB        /ADDR OF ARGS
  163.     JMS I GO    /SETUP (AC NON-ZERO)
  164. /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT
  165. MAP,    TAD        /INITIALIZED ABOVE
  166.     SNA        /0 TERMINATES LIST
  167.     JMP MAPPED
  168.     STL CIA        /13-BIT NEGATE
  169.     TAD I ABLOCK    /COMPARE WITH BLOCK
  170.     SZL CLA
  171.     JMP MAPPED    /BAD BLOCK IS ABOVE CURRENT BLOCK
  172.     ISZ MAP        /TRY NEXT BAD BLOCK ALSO
  173. NEXT,    ISZ I ABLOCK    /INCREMENT CURRENT BLOCK NUMBER,
  174.             /EITHER DURING
  175.             /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER
  176.             /OF TWO SECTORS (PAGES) WITH MORE TO GO
  177.     JMP MAP        /CONTINUE MAPPING
  178.     JMP I AERROR    /ERROR ON BLOCK OVERFLOW
  179.     ZBLOCK 240+DRIVE-.    /UNUSED
  180.  
  181. /ENTRY POINT FOR DEVICE B
  182.  
  183. RLB,    VERSION
  184.     AC0004        /TRACK OFFSET WILL BE 400
  185.     JMP START    /SKIP AROUND RLA ENTRY POINT
  186. OFFSET,    0        /TRACK OFFSET FOR DEVICE (0 OR 400)
  187.  
  188. /ENTRY POINT FOR DEVICE A
  189.  
  190. RLA,    VERSION
  191. A7600,    7600        /=CLA
  192.     TAD RLA        /TRANSFER CALLING ADDR
  193.     DCA RLB
  194. START,    BSW        /SET OFFSET TO 0 IF DEV A, 400 IF DEV B
  195.     DCA OFFSET
  196.     TAD A7600    /RETURN TO KEYBOARD MONITOR
  197. IFNZRO    NOCHK < KRS >    /IF CTRL,C TYPED
  198. IFZERO    NOCHK < NOP >
  199.     TAD A175    /-CTRL,C
  200.     SNA CLA
  201.     KSF
  202. ONCE,    JMP ONLY    /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS
  203.             /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION
  204.             /IS DONE AND THE BAD BLOCK LIST IS READ IN.
  205. ACDIF,    CIF CDF 00
  206.     JMP I A7600    /CALL KB MONITOR
  207. /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE
  208. GO,    0        /ADDR OF MAIN
  209. /-----BOUNDARY OF BAD BLOCK LIST-----
  210. BBL,
  211. /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST
  212. /READ IN BAD BLOCK LIST (BBL)
  213. /SAVE CALLING DATA FIELD
  214.     RDF
  215.     TAD OOCDF
  216.     DCA BACK
  217. OOCDF,    CDF 00        /SET TO CURRENT FIELD
  218. /REPLACE ONCE-ONLY JUMP INSTRUCTION
  219.     TAD JMPSET
  220.     DCA ONCE
  221. LOOP,    TAD LIST    /RELOCATE CROSS-PAGE REFERENCES;
  222.             /SCAN "LIST" FOR RELATIVE LOCATIONS
  223.             /OF VALUES TO BE RELOCATED
  224.     SNA        /0 ACTS AS TERMINATOR
  225.     JMP OUT
  226.     TAD GO        /RELOCATE RELATIVE ADDRESS
  227.     DCA ONLY    /"ONLY" IS NOW TEMP STORAGE
  228.     ISZ LOOP    /NEXT VALUE
  229.     TAD GO
  230.     TAD I ONLY    /RELOCATE THE CONTENTS
  231.     DCA I ONLY
  232.     JMP LOOP    /CONTINUE UNTIL DONE
  233.  
  234. /LIST OF RELATIVE ADDRESSES OF RELATIVE VALUES
  235.  
  236. LIST,    BARG-MAIN
  237.     ABLOCK-MAIN
  238.     BBBL-MAIN
  239.     AMA-MAIN
  240.     ASECT-MAIN
  241.     ATRACK-MAIN
  242.     MA-MAIN
  243.     AERROR-MAIN
  244.     0        /TERMINATOR
  245.  
  246.     ZBLOCK    BBL+40-.    /UNUSED (IN BBL BUFFER)
  247.  
  248. /ONCE-ONLY CODE CONTINUES
  249. OUT,    JMS I GO    /READ BAD BLOCK LIST
  250. /-----BOUNDARY OF BAD BLOCK LIST-----
  251. OK,    CLA        /ERROR RETURN (IGNORE)
  252. BACK,    CDF        /RESTORE CALLING FIELD
  253. JMPSET,    JMP SET        /SETUP FOR TRANSFER
  254.  
  255. /END OF ONCE-ONLY CODE
  256. /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE
  257. /CALCULATE TRACK AND SECTOR FROM BLOCK
  258. MAPPED,    TAD I ABLOCK
  259.     RTR
  260.     RTR
  261.     AND A377
  262.     TAD OFFSET    /DEVICE OFFSET (0 OR 400)
  263.     DCA I ATRACK
  264.     TAD I ABLOCK    /CALCULATE SECTOR FROM BLOCK
  265.     AND A17        /SECTOR CODE
  266.     CLL RTL
  267.     TAD A7751
  268.     SPA
  269.     TAD A47
  270.     BSW
  271.     DCA I ASECT
  272. /TRANSFER 1ST PAGE OF BLOCK
  273.     JMS I GO
  274.     TAD A200    /INCREMENT MA
  275.     TAD I AMA
  276.     DCA I AMA
  277. /INCREMENT SECTOR
  278.     TAD A200
  279.     TAD I ASECT
  280.     DCA I ASECT
  281. /TRANSFER 2ND PAGE OF BLOCK
  282.     JMS I GO
  283.     TAD A200    /INCREMENT MA
  284.     TAD I AMA
  285.     DCA I AMA
  286. /CONTINUE WITH NEXT BLOCK
  287.     JMP NEXT
  288.  
  289. /ONCE-ONLY CODE AT END OF PAGE
  290.     ZBLOCK 377-.    /UNUSED
  291. ONLY,    JMS GO        /EXECUTED ONCE ONLY; STORES ADDR OF
  292.             /2ND PAGE IN LOC "GO"
  293.     *400
  294. /2ND PAGE OF HANDLER
  295.  
  296. /SUBROUTINE TO SETUP AND TRANSFER
  297. /AC=0 FOR TRANSFER ELSE SETUP
  298. MAIN,    0
  299.     SNA
  300.     JMP TRANS
  301. /GET HANDLER ARGUMENTS
  302. SETUP,    DCA BARG    /ADDR OF HANDLER ARGS
  303.     AC2000        /SET "OLDTRK" TO INVALID TRACK
  304.     DCA OLDTRK    /TO FORCE READING NEXT HEADER.
  305.     TAD B7600    /SET FOR FULL PAGE TRANSFERS
  306.     DCA WC        /(WAS SMALLER FOR BBL READ)
  307.     TAD I BARG    /NOW GET HANDLER ARGUMENTS
  308.             /FUNCTION WORD
  309. /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT
  310. B377,    AND B4070    /CONVERT TO RLCB FORMAT
  311.     SPA
  312.     TAD B3777
  313.     TAD BRLRD
  314.     DCA FNC
  315.     TAD I BARG    /FUNCTION WORD
  316.     RAL        /CONVERT TO PAGE COUNT IN BITS [7600]
  317.     AND B7600
  318.     DCA PAGES
  319.     ISZ BARG
  320.     TAD I BARG    /MA
  321.     DCA MA
  322.     ISZ BARG
  323.     TAD I BARG    /BLOCK
  324.     DCA BLOCK
  325.     ISZ BARG
  326. /SAVE CALLING FIELD FOR RETURN
  327.     RDF
  328.     TAD BCDIF
  329.     DCA BRTN
  330. /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK
  331. BCDIF,    CIF CDF 00
  332. /GET DEVICE OFFSET FROM 1ST PAGE
  333.     TAD I BBBL    /CHECK FOR BBL VALIDITY -
  334.     TAD CHECK    /1ST LOC OF BBL CONTAINS AN
  335.     SZA CLA        /IDENTIFICATION CODE ("ID")
  336.     JMP ERROR    /TAKE ERROR RETURN FROM HANDLER
  337.             /IF BBL IS INVALID.
  338.     JMP I MAIN
  339. /TRANSFER ONE OR MORE PAGES TO/FROM DISK
  340. /GET INTERPAGE ARGUMENTS
  341. /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS
  342. TRANS,    AC7775        /AC=-3
  343.     DCA ERRCNT
  344. /CALCULATE CYLINDER AND SURFACE FROM TRACK
  345.     TAD TRACK
  346.     CLL RAR
  347.     DCA CYL
  348.     RTR
  349.     DCA SURF
  350. /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER
  351.     JMS TRKCMP
  352. /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK
  353. /RESET DRIVE (FUNCTION=1)
  354. RETRY,    RLDC        /CLEAR CONTROLLER, AC
  355. /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW
  356. SEEK,    IAC        /AC=(1 OR 3)
  357.     JMS IO        /RESET DRIVE OR SEEK
  358. /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK
  359.     TAD HEADER
  360.     JMS IO        /READ NEXT HEADER
  361.     RRSI        /GET HEADER BYTE #1
  362.     BSW
  363.     AND B3
  364.     DCA OLDTRK    /SAVE 2 LSB
  365.     RRSI        /GET HEADER BYTE #2
  366.     AND B377    /HARDWARE SHOULD DO THIS
  367.     CLL RTL
  368.     TAD OLDTRK    /ADD IN MSB
  369.     DCA OLDTRK
  370. /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER
  371.     JMS TRKCMP
  372. /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK
  373. /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE
  374.     SPA        /IF POSITIVE, LINK WILL BE SET
  375.     CLL CIA        /IF NEGATIVE, CLEAR LINK
  376.     RAR        /DELETE SURFACE, INCLUDE DIRECTION
  377.     TAD SURF    /ADD SURFACE
  378.     RLCA        /LOAD DIFFERENCE WORD
  379.     AC0002        /PREPARE FOR SEEK
  380. /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK
  381. /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL01
  382. /SEEK UNRELIABILITY
  383.     JMP SEEK
  384. /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED)
  385. /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC=
  386. /REQUESTED-OLD, AND LINK=1
  387. TRKCMP,    0
  388.     TAD OLDTRK    /CALCULATE DIFFERENCE
  389.     CIA
  390.     TAD TRACK
  391.     STL        /LINK MUST BE SET WHEN
  392.             /DIFFERENCE IS POSITIVE.
  393.     SZA
  394.     JMP I TRKCMP    /DIFFERENT; RETURN
  395. /ON TRACK: DO TRANSFER
  396. /LOAD ALL REGISTERS
  397.     TAD SECTOR
  398.     RLSA
  399.     TAD WC
  400.     RLWC
  401.     TAD SURF
  402.     TAD CYL
  403.     RLCA
  404.     TAD MA
  405.     RLMA
  406. /DO THE READ OR WRITE
  407.     TAD FNC
  408.     JMS IO
  409. /COUNT REQUESTED NUMBER OF PAGES
  410.     TAD B7600
  411.     TAD PAGES
  412.     SNA
  413.     JMP DONE
  414.     DCA PAGES
  415.     JMP I MAIN    /RETURN FOR MORE
  416. /SUBROUTINE TO DO THE ACTUAL I/O
  417. IO,    0        /AC=MODE,FIELD,FUNCTION
  418.     TAD BDRIVE
  419.     RLCB        /DO THE OPERATION
  420.     RLSD        /WAIT UNTIL DONE
  421.     JMP .-1
  422.     RLSE        /TEST FOR I/O ERROR(S)
  423.     JMP I IO    /NONE; RETURN
  424. /IF ERROR, RETRY TWICE
  425.     ISZ ERRCNT    /MORE RETRIES LEFT?
  426.     JMP RETRY    /YES
  427. /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN
  428. /WITH AC=4000
  429. ERROR,    AC4000
  430.     SKP
  431. /NORMAL RETURN FROM HANDLER
  432. DONE,    ISZ BARG    /SKIP ERROR RETURN
  433. BRTN,    CIF CDF 00    /RETURN TO CALLING FIELD
  434.             /BBL READ: NOP (FIELD 0)
  435.     JMP I BARG    /RETURN TO CALLING PROGRAM
  436. /DATA
  437. BLOCK,    0
  438. TRACK,    0        /BBL READ: TRACK 0
  439. WC,    -41        /BBL READ: -BBL LENGTH
  440. SECTOR,    1400        /BBL READ: SECTOR 14
  441. CYL,    0
  442. SURF,    0
  443. ERRCNT,    0        /COUNT OF RETRIES
  444. OLDTRK,    2000        /FORCE INITIAL SEEK
  445. PAGES,    200        /BBL READ: ONE PAGE
  446. FNC,    RLRD        /BBL READ: READ FUNCTION
  447. /RELOCATED RELATIVE ADDRESSES
  448.  
  449. BARG,    OK-MAIN        /BBL READ: RETURN FROM READ
  450.             /ADDRESS OF HANDLER ARGUMENTS
  451. MA,    BBL-MAIN    /BBL READ: ADDR OF BBL
  452. BBBL,    BBL-MAIN
  453.  
  454. B3,    3
  455. B3777,    3777
  456. B7600,    7600
  457. BRLRD,    RLRD
  458. HEADER,    BYTE RLRH
  459. BDRIVE,    DRIVE^100    /DRIVE BITS FOR RLCB
  460. CHECK,    -ID
  461.  
  462. /THIS CONSTANT MUST BE AT END OF PAGE
  463.     ZBLOCK 577-.
  464. B4070,    4070
  465. $
  466.