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 / rd51sy.pa < prev    next >
Text File  |  1992-09-18  |  8KB  |  385 lines

  1. /RD51SY.PA OS/78 V4 RD51 SYSTEM HANDLER
  2. /
  3. /
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /COPYRIGHT  (C)  1982 BY DIGITAL EQUIPMENT CORPORATION
  11. /
  12. /
  13. /
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  22. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  23. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  24. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  25. /
  26. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  27. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  28. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  29. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  30. /
  31. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  32. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  33. /DIGITAL.
  34. /
  35. /
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44.  
  45. /9-MAR-83
  46. /
  47. /    VER 001
  48. /
  49. /THE RD51 CONTROLLER FOR THE DECMATE II OPERATES ON BLOCK NUMBERS, IT
  50. /PERFORMS ANY NECESSARY MAPPING TO CYLINDER, SURFACE AND SECTOR WITHIN A
  51. /LOGICAL VOLUME.
  52. /AS OS8 IS LIMITED TO 4096 BLOCKS, THIS IS THE LIMIT USED IN THIS HANDLER.
  53. /
  54. /
  55.     DEVCOD=700    /RD51 DEVICE CODE
  56. /
  57. /
  58. RDSR=6001+DEVCOD    /SKIP ON DATA TRANSFER REQ. CLEAR IF SET
  59. RDSC=6002+DEVCOD    /SEND COMMAND TO RD CONTROLLER
  60. RDSD=6003+DEVCOD    /SKIP ON COMMAND DONE, CLEAR FLAG IF SET
  61. RDTD=6004+DEVCOD    /TRANSFER DATA TO-FROM RD<->AC
  62.             /DIRECTION DETERMINED BY COMMAND IN PROGRESS
  63. RDWE=6005+DEVCOD    /SET-CLEAR INTERRUPT ENABLE WITH AC<11>
  64. RDSE=6006+DEVCOD    /SKIP ON ERROR, CLEAR FLAG IF SET
  65. /
  66. /
  67. /SOME DEFINITIONS
  68. /
  69.     MINUS3=CLA CLL CMA RTL
  70.     AC4000=CLA CLL CML RAR
  71. /
  72. /THE ONLY COMMANDS AVAILABLE THROUGH THIS HANDLER ARE :
  73. /    :READ_A_BLOCK    : PERFORMED AS READ THEN EMPTY BUFFER
  74. /    :WRITE_A_BLOCK    : PERFORMED AS FILL BUFFER THEN WRITE.
  75. /FOR BOTH OF THESE AN INITIAL SET_VOLUME_AND_BLOCK COMMAND IS ISSUED.
  76. /THE FORM OF THE COMMAND IS :- RDSC WITH AC=1 /IOT "SEND_COMMAND"
  77. /FOLLOWED BY SENDING THREE WORDS :-
  78. /        WORD #1 - AC<8:11> VOLUME # (1 - 15), DEFINED
  79. /                   IN THE MOUNT COMMAND
  80. /        WORD #2 - AC<00:11> LOW ORDER BLOCK NUMBER
  81. /        WORD #3 - AC<04:11> HIGH ORDER BLOCK NUMBER
  82. /
  83. /AS THE SIZE OF EACH VOLUME IS LIMITED BY OS78 TO A 12-BIT BLOCK NUMBER
  84. /THE LOW ORDER BLOCK NUMBER ABOVE IS THE BLOCK NUMBER WITHIN A VOLUME
  85. /THE HIGH ORDER BLOCK NUMBER  CAN BE ONLY 0 
  86. /
  87.  
  88. VERSION=0161    /VERSION = A1
  89.  
  90. AC0001=CLL CLA IAC
  91. AC0002=CLL CLA CML RTL
  92. AC0006=CLL CLA CML IAC RTL
  93. AC4000=CLL CLA CML RAR
  94. AC3777=CLL CLA CMA RAR
  95. AC7775=CLL CLA CMA RTL
  96.  
  97.     /    HEADER BLOCK
  98.     /RL02 DEVICE # IS ??
  99.  
  100.     *0
  101.     -1
  102.     DEVICE RDSY
  103.     DEVICE SYS
  104.     4270                /MULTI-TYPE RX HANDLER
  105.     SYS&177+6000            /TWO PAGE HANDLER
  106.     0                /UNUSED
  107.     7777                /SIZE OF RX50 = 770 DECIMAL
  108.     STBOOT-NDBOOT            /-SIZE 
  109. XR=    10
  110. ZR=    11
  111.     RELOC    200        /WINCHESTER BOOT LOADS INTO 200 FIELD 0
  112. STBOOT=    .
  113.     ZBLOCK 10        /FOR DISK ID STUFF
  114.     TAD    MOV1        /MOVE THE DATA AT 400 TO FIELD 2
  115.     DCA    XR        /SET UP AUTO INDEX
  116.     TAD    K7577
  117.     DCA    ZR        /ADDRESS TO MOVE IT TO
  118. XR1,    TAD I    XR        /GET A WORD
  119.     JMS    SAVE
  120.     JMP    XR1
  121.     CLL CLA IAC        /SET VOLUME AND BLOCK
  122.     RDSC
  123.     JMS    LOAD
  124.     TAD    K66        /BLOCK 66
  125.     JMS    LOAD
  126.     JMS    LOAD
  127.     RDSD            /NOW WAIT FOR DONE
  128.     JMP    .-1
  129.     CLL CLA IAC RTL        /AC=4 FOR A READ
  130.     RDSC
  131.     RDSD
  132.     JMP    .-1
  133.  
  134.     CDF    10
  135.     TAD    K7577
  136.     DCA    ZR    
  137.     TAD    KK25
  138.     RDSC
  139. XR2,    JMS    LOAD        /GET THE DATA
  140.     JMS    SAVE
  141.     JMP    XR2
  142.     CDF    20
  143.     TAD    K7577        /NOW LOAD UP FIELD 2
  144.     DCA    ZR
  145. XR3,    JMS    LOAD        /GET THE DATA
  146.     JMS    SAVE
  147.     JMP    XR3        /AND DO IT AGAIN    
  148.     RDSD
  149.     JMP    .-1            
  150.     CIF CDF
  151.     JMP I    .+1
  152.     7605            /GO START THE SYSTEM HANDLER
  153.  
  154. MOV1,    377
  155. K66,    66            /BLOCK 66 OF DISK
  156. K7577,    7577
  157. KK25,    25
  158.  
  159. LOAD,    0
  160.     DCA    XR
  161.     RDSR
  162.     JMP    .-1
  163.     TAD    XR
  164.     RDTD            /VOLUME NUMBER
  165.     JMP I    LOAD
  166.  
  167. SAVE,    0
  168.     DCA I    ZR        /SAVE IT
  169.     TAD    ZR        /SEE IF DONE
  170.     IAC
  171.     SNA CLA            /SKIP FI DONE
  172.     ISZ    SAVE
  173.     JMP I    SAVE
  174.  
  175. NDBOOT=    .
  176.  
  177. /
  178. /RETRIES ARE BUILT IN TO THE CONTROLLER.
  179. /
  180.  
  181.  
  182.     / CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS
  183.  
  184.  
  185.     RELOC
  186.     *0200
  187.     RELOC    7600
  188.  
  189.     /USUALLY THE FIRST 7 LOCATIONS ARE FILLED WITH A ZBLOCK 7
  190.     /ALTHOUGH THESE COMMANDS ARE COMPILED WITH THE HANDLER THE
  191.     /SYSTEM WILL OVER WRITE THESE LOCATIONS WITH THE SAME INFORMATION
  192.     /THIS WAS DONE FOR CONVIENCE
  193.  
  194.     JMS    SYS    /CALL SYSTEM HANDLER
  195.     5000        /WRITE 10 PAGES -- 5 BLOCKS
  196.     0000        /START AT MEM ADDRESS 0
  197.     0033        /PUT INFO INTO SYSTEM SCRATCH AREA BLK 33
  198.     CLA HLT
  199.     CIF CDF 10    /CHANGE FIELD TO 1
  200.     JMP    7667    /THIS JMP IS A CALL TO LOAD THE KEYBOARD MONITOR
  201.  
  202.     /ENTRY
  203.  
  204. SYS,    VERSION
  205.     CLL CLA
  206. L12,    12
  207.     3        /!!REQUIRED AT 7612!! TO SHOW OS78 2 PAGE HANDLER
  208.     RDF        /GET FIELD OF CALLING ROUTINE
  209.     TAD    LLCDF0    /MAKE A CDF OUT OF IT
  210.     DCA    RESTOR    /PUT IT BACK, GO TO I/O ROUTINE ON PAGE 2
  211.     JMP    RSTART    /GO CALL SECOND PAGE, IOTYP FALLS THRU TO HERE
  212.  
  213. IOTYP,    0
  214. LLCDF0,    CDF 0
  215. LM12,    -12
  216. L6,    6
  217.     *7640
  218.  
  219. RSTART,    TAD    SYS    /HAS THE CALL ADDRESS
  220.             /FLOPPY HAD DENISTY AND UNIT INFORMATION
  221. RESTOR,    HLT        /SET DATA FIELD TO CALLING ROUTINE
  222.     CIF 20        /!! CDF,CIF OR CID MUST BE AT 7642
  223.     JMP    PAGE2    /FOR FRTS TO WORK
  224.  
  225.  
  226.  
  227.  
  228.     ZBLOCK    7744-.    /!! 7743 IS THE LAST USABLE LOCATION
  229.             /7744-7777 IS USED BY THE MONITOR
  230.     / SECOND PAGE
  231.  
  232.     RELOC
  233.     *0400
  234.     RELOC    7600
  235. /
  236. /  FETCH ARGUMENTS, ETC.
  237. /
  238. PAGE2,    DCA    FETCH    /ENTER WITH ARGUMENT LIST ADDR IN AC
  239.     RDF        /SAFE HERE?
  240.     TAD    LCDIF0    /SET UP EXIT TO CALLER
  241.     DCA    EXFLD
  242.     AC4000        /SET UP TO PUT R/W BIT TO LINK
  243.     TAD I    FETCH    /FIRST ARGUMENT HAS FIELD FOR TRANSFER
  244.     AND    L70    /KEEPING ONLY FIELD
  245.     TAD    LCDF0    /MAKE CDF TO TRANSFER FIELD
  246.     DCA    BUFCDF    /PLACE IN LINE FOR SILO LOOP
  247.     TAD    K3    /SET UP TO DO READ OR WRITE DEPENDANT ON LINK
  248.     SNL        /SKIP IF DOING A WRITE
  249.     CLL IAC        /3=WRITE 4= READ
  250.     DCA    FN
  251.     TAD I    FETCH    /MAKE CONTROL COUNT FOR TRANSFER
  252.     RAL
  253.     AND    K7600    /COUNT OF WORDS
  254.     CIA        /0 FOR WHOLE FIELD
  255.     DCA    BC
  256.     ISZ    FETCH    /NEXT ARGUMENT
  257.     TAD I    FETCH    /BUFFER ADDRESS
  258.     DCA    BUF
  259.     ISZ    FETCH    /NEXT
  260.     TAD I    FETCH    /BLOCK ADDRESS
  261.     ISZ    FETCH    /MOVING POINTER TO ERROR EXIT
  262.     DCA    LREC    /SAVE BLOCK #
  263.     CLL CLA IAC RTL    /AC=4
  264.     AND    FN    /DETERMINE IF READ OR WRITE FUNCTION
  265.     SZA CLA        /SKIP IF WRITE
  266.     JMP    STREAD    /GO DO A READ
  267.  
  268. /
  269. /WRITE FALL THROUGH
  270. /
  271.  
  272. TOP,    TAD    K4    /AC TO READ BIT
  273.     AND    FN    /AGAIN CHECK THE FUNCTION FOR THE SILO COMMAND
  274.     SZA CLA        /SKIP IF WRITE FUNCTION
  275.     TAD    K23    /MAKE EMPTY BUFFER COMMAND FOR READ
  276.     TAD    K2
  277.     RDSC        /SEND THE COMMAND
  278.     TAD    DENSW    /BYTE COUNT FOR A SECTOR
  279.     DCA    RDWC    /SAVE IT FOR THE TRANSFER LOOP
  280.     CLL        /MAKE SURE LINK IS CLEARED FOR THE READ
  281. BUFCDF,    HLT        /DATA BUFFER FIELD
  282. TRLOOP,    JMS    WAIT    /WAIT FOR A WORD
  283.     SKP        /TR SEEN
  284.     JMP    ERROR    /ERROR FLAG FROM CONTROLLER
  285.     TAD I    BUF    /GET A CHARACTER
  286.     RDTD        /TRANSFER IT
  287.     SZL        /SKIP IF A READ COMMAND
  288.     JMP    INCWC    /GO UPDATE THE WORD COUNT
  289.     DCA    TEMP    /SAVE THE AC FOR NOW.
  290.     TAD    FN    /SEE IF A WRITE FUNCTION IN WHICH CASE LEAVE THE BUFFER
  291.             /AS IS BECAUSE THE RD INSTRUCTIONS CLEAR THE AC
  292.     AND    K4    /MASK THE READ BIT
  293.     SNA CLA        /SKIP IF READ FUNCTION
  294.     JMP    .+3    /WAS A WRITE. LEAVE THE BUFFER ALLONE
  295.     TAD    TEMP
  296.     DCA I    BUF    /STORE THE DATA READ FROM THE DISK
  297.     ISZ    BUF    /MOVE BUFFER POINTER (IT MAY SKIP)
  298. L70,    70        /AND 70 WON'T BOTHER THE AC IF IT DOESN'T SKIP
  299.     ISZ    BC
  300.     SKP
  301.     STL        /SO THE BUFFER DOES'T CHANGE ON HALF PAGE
  302. K7600,
  303. INCWC,    7600
  304.     ISZ    RDWC    /UPDATE THE WORD COUNT
  305.     JMP    TRLOOP    /AND DO IT AGAIN
  306.     JMS    WAIT    /NOW WAIT FOR DONE
  307.     JMP    ERROR    /TR SEEN. ERROR CONDITION
  308.     TAD    BC    /LOOP CONTROL TO FINISH READ.
  309.     SZA CLA        /SKIP IF ALL DONE
  310.     JMP    STREAD    /GO PERFORM THE WRITE OPERATION
  311.     CLL CLA IAC RTL    /AC=4 FOR READ
  312.     AND    FN    /MASK THE CURRENT FUNCTION
  313.     SZA CLA        /SKIP IF IT IS A WRITE
  314.     JMP    EXIT    /ALL DONE
  315.     STL        /SET FOR READ
  316. /
  317. /MIDDLE OF MAIN LOOP
  318. /
  319.  
  320. STREAD,    CLA IAC        /SET VOLUME AND BLOCK
  321.     RDSC        /AND DO THE COMMAND
  322.     JMS    WAIT    /WAIT FOR TR
  323.     SKP        /TR SEEN
  324.     JMP    ERROR    /DID NOT WANT TO SEE DONE
  325.     RDTD        /VOLUME NUMBER TO RD
  326.     JMS    WAIT    /WAIT FOR TR
  327.     SKP        /TR SEEN
  328.     JMP    ERROR
  329.     TAD    LREC    /THE LOW ORDER TWELVE BITS OF BLOCK NUMBER
  330.     RDTD        /SEND IT TO THE INTERFACE
  331.     JMS    WAIT
  332.     SKP        /TR SEEN. SEND THE FINAL PART OF SET VOLUME COMMAND
  333.     JMP    ERROR    /DONE SEEN TO EARLY
  334.     RDTD        /ALWAYS ZERO
  335.     JMS    WAIT
  336.     JMP    ERROR
  337.     TAD    FN
  338.     RDSC
  339.     JMS    WAIT
  340.     JMP    ERROR
  341.     ISZ    LREC    /POINT TO NEXT RECORD.
  342.     SNL CLA        /SEE IF THERE IS MORE TO DO
  343.     JMP    TOP    /GO BACK AND DO IT
  344. EXIT,    ISZ    FETCH    /UPDATE THE RETURN
  345. EXFLD,    HLT        /USER FIELD
  346.     JMP I    FETCH    /AND EXIT
  347.  
  348.  
  349. FETCH,    0
  350. BC,    0
  351. FN,    0
  352. RDWC,    0        /BLOCK WORD COUNT
  353. BUF,    0
  354.  
  355.  
  356. LREC,    0        /LOW WORD OF BLOCK NUMBER
  357. K2,    2
  358. K3,    3
  359. K4,    4
  360. TEMP,    0        /TEMP STORAGE FOR DATA FROM CONTROLLER
  361. K23,    23        /NEEDED TO MAKE FILL  OR EMPTY COMMAND
  362. LCDIF0,    6203        /CIF CDF 0
  363. LCDF0,    CDF    0
  364. DENSW,    7400
  365.  
  366. /
  367. /WAIT FOR A FLAG FROM THE WINCHESTER
  368. /
  369.  
  370. WAIT,    0
  371.     RDSR
  372.     SKP        /NOT TR
  373.     JMP I    WAIT
  374.     RDSD        /NOW FOR DONE
  375.     JMP    WAIT+1    /NOT YET
  376.     ISZ    WAIT    /DONE SET UP RETURN TO CALLER +2
  377.     RDSE        /NOW TEST FOR THE ERROR FLAG
  378.     JMP I    WAIT    /NO ERROR FLAG
  379. ERROR,    AC4000        /TAKE THE ERROR EXIT
  380.     JMP    EXFLD    /AND RETURN TO CALLER
  381.  
  382.  
  383.     $$$$$
  384.     
  385.