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

  1. /RX50SY.PA OS/78 V4 RX50 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. VERSION=0262    /VERSION = B2
  45.  
  46. AC0001=CLL CLA IAC
  47. AC0002=CLL CLA CML RTL
  48. AC0006=CLL CLA CML IAC RTL
  49. AC4000=CLL CLA CML RAR
  50. AC3777=CLL CLA CMA RAR
  51. AC7775=CLL CLA CMA RTL
  52.  
  53.     /
  54.     /    DEVICE IOT EQUATES
  55.     /
  56.  
  57. LCD=6751                /LOAD COMMAND
  58. XDR=6752                /TRANSFER DATA
  59. STR=6753                /SKIP IF READY TO TRANSFER
  60. SER=6754                /SKIP ON ERROR
  61. SDN=6755                /SKIP ON DONE
  62. INIT=6757
  63.  
  64.     /    HEADER BLOCK
  65.     /RX50 DEVICE # IS 30
  66.  
  67.     *0
  68.     -1
  69.     DEVICE RX50
  70.     DEVICE SYS
  71.     4300                /MULTI-TYPE RX HANDLER
  72.     SYS&177+6000            /TWO PAGE HANDLER
  73.     0                /UNUSED
  74.     DECIMAL
  75.     767                /SIZE OF RX50 = 770 DECIMAL
  76.     OCTAL
  77.     STBOOT-NDBOOT+12        /-SIZE (+12 FOR GAP)
  78.     /
  79.     / PRIMARY BOOT
  80.     /
  81.  
  82.     NOPUNCH
  83.  
  84.     *20
  85.  
  86. READ,    TAD    UNIT        /TRY NEXT COMBINATION OF DENSITY AND UNIT
  87.     TAD    CON360        /ADDING IN 360
  88.     AND    CON420        /KEEPING ONLY 420 BITS
  89.     DCA    UNIT        /CYCLES 400,420,0,20,400.......
  90.     AC0006            /COMMON TO READ DISK
  91.     TAD    UNIT        /UNIT AND DENSITY
  92.     LCD            /COMMAND TO CONTROLLER
  93.     AC0001            /TO SET SECTOR AND TRACK TO 1
  94.     JMS    LOAD        /SECTOR TO CONTROLLER, LEAVES AC ALONE
  95.     JMS    LOAD        /AND TRACK
  96. LITRAL,    7004            /LEAVING A 2 IN AC SERVES AS A LITERAL
  97. START,    SDN            /HAS DONE COME UP? CODE STARTS HERE!
  98.     JMP    LOAD+1        /NO, GO CHECK FOR READY TO TRANSFER
  99.     SER            /SKIP ON ERROR, TRY ANOTHER DENSITY ECT.
  100.     SNA            /AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP
  101.     JMP    READ        /START-UP, GO SET UP UNIT, THEN READ TO SILO
  102.     TAD    UNIT        /AC ALREADY 2, PUT IN UNIT, DENSITY
  103.     LCD            /TO EMPTY THE SILO
  104.     TAD    UNIT        /SET UP LOC 60 FOR OLD SECONDARY BOOT
  105.     AND    CON360        /KEEPING ONLY DENSITY BIT
  106.     TAD    LITRAL        /ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS
  107.     DCA    RX1SAV        /OLD SECONDARY BOOT MOVES IT TO HANDLER
  108. CON360,    0360            /LITERAL; EXECUTES IN LINE AS A NO-OP
  109.                 /FALLS INTO NEXT PAGE OF LISTING
  110.     JMS    LOAD        /GRAB NEXT ITEM FROM SILO
  111.     DCA    2        /TRADITION; SECONDARY BOOT STARTS AT 2
  112.     ISZ    50        /INCREMENT LOAD ADDRESS
  113.     JMP    47        /GO BACK FOR ANOTHER
  114.  
  115.     /
  116.     /SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOC 47 IS LOADED,
  117.     /THEN CONTROL PASSES TO SECONDARY BOOT
  118.  
  119. LOAD,    0        /SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER
  120.     STR        /IS RX READY
  121.     JMP    START    /NO, PERHAPS DONE WITH SILO, OR ERROR
  122.     XDR        /YES,DATA IN OR OUT;IF DATA TO CONTROLLER,AC UNCHANGED
  123.     JMP I    LOAD    /NO MAGIC, JUST EXIT FROM SUBROUTINE
  124.  
  125.     /
  126.     /61 GOES TO SECONDARY BOOT
  127.     /61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY
  128.     /
  129.  
  130. CON420,            /USE IT TO HOLD 420 LITERAL TO START OUT
  131. RX1SAV,    420        /UNIT^20+7004 TO GO TO SYS HANDLER
  132. UNIT,    20        /<DENSITY^400>+<UNIT^20> THAT BOOTED OK
  133.  
  134.     ENPUNCH
  135.  
  136.     /
  137.     /SECONDARY BOOT
  138.     /
  139.  
  140.     RELOC 2        /SECTION LOADING OVER PRIMARY BOOT 2 - 47
  141.  
  142.     STBOOT=.
  143.  
  144.     0000        /SAVE ROOM FOR DISK ID.
  145.     0000
  146.     0000
  147.     0000
  148.     0000
  149.     0000
  150.     0000
  151.     0000
  152.  
  153.     /
  154.     /ONLY-ONCE CODE AFTER FIRST SECTOR IS TRANSFERED
  155.     /
  156.  
  157.     /SET UP AUTO INDEX REGISTERS
  158.  
  159. XR,    61        /CONTINUE TO LOAD FIRST SECTOR AT 62
  160. YR,    DAT02        /POINTER TO DATA AREA FOR NOW
  161. ZR,    0        /ACCOUNT FOR THIS LOCATION USED BY MOVE
  162.  
  163.     /
  164.     /SECTOR DONE, SETUP FOR NEXT
  165.     /
  166.  
  167. NEXSEC,    JMP    ONCE    /END OF FIRST SECTOR, DO SET-UP CODE
  168.     CDF    0    /DATA FIELD HERE TO USE AUTO INCR REGISTERS
  169.     TAD I    YR    /GET DATA FIELD FOR PLACEMENT
  170.     SMA        /SKIP IF MORE TO DO
  171.     JMP    MOVE2    /MOVE SECOND HALF OF BLOCK 66 TO FIELD 2
  172.     DCA    XFIELD    /PLACE IN LINE TO SET DATA FIELD
  173.     AC0006        /GET AC OF 6 TO SET UP FLOPPY READ
  174.     TAD    UNIT    /ADD DENSITY AND UNIT
  175.     LCD
  176.     TAD I    YR    /SECTOR FOR NEXT READ
  177.     JMS    LOAD    /LOAD LEAVES AC ALONE
  178.     TAD I    YR    /TRACK-SECTOR FOR NEXT READ
  179.     JMS    LOAD    /LOAD REMAINS FROM PRIMARY BOOT
  180.     TAD I    YR    /ADDRESS - TRACK - 1 FOR NEXT READ
  181.             /FALL TO HANGGG WITH AC NON0 TO SHWO READ
  182.     /
  183.     /THE FOLLOWING TWO LOCATIONS MUST MATCH PRIMARY BOOT
  184.     /
  185.  
  186. HANGGG,    SDN        /!! REQUIRED AT 33!! SKIP IF DONE
  187.     JMP    LOAD+1    /NO, GO CHECK FOR TRANSFER READY
  188.  
  189.     /SORT OUT ERROR, SILO DONE, READ DONE
  190.  
  191.     SER        /SKIP IF ERROR
  192.     SKP        /IS GOOT, CHECK WHETHER READ OR SILO
  193.     HLT        /******* FATAL ERROR *******
  194.     SNA        /SKIP IF READY TO SILO (AC HAS LOAD ADDR)
  195.     JMP    NEXSEC    /DONE WITH SILO AC=0 GOTO NEXT SECTOR
  196.     DCA    XR    /USE AUTO INCR TO LOAD CORE
  197.     JMP    OVRFLW    /GO TO LOCATIONS NOT FITTING UNDER 47
  198.  
  199.     /CODE TO EMPTY SILO INTO CORE
  200.  
  201. XFIELD,    CDF    0    /FIELD FOR TRANSFER PLACED HERE
  202.     JMS    LOAD    /LOAD REMAINS FROM PRIMARY BOOT
  203.     DCA I    XR    /PLACE NEXT WORD
  204.     JMP    XFIELD    /WHEN THIS LOCATION IS PLACED, SECONDARY BOOT
  205.             /TAKES CONTROL, CONTINUE FIRST SECTOR AT 62
  206.  
  207.     /PRIMARY BOOT LOCATIONS 50-61 REMAIN INTACT
  208.  
  209.     STATUS=.        /REUSE FOR TEMPORY
  210.  
  211.     /REST OF SECONDARY BOOT
  212.  
  213.     RELOC 62        /SECTION LOADING 62 - 213
  214.  
  215.     /LOCATIONS NO FITTING WITHIN 2-47 SPACE
  216.  
  217. OVRFLW,    XDR        /FETCH READ STATUS FOR LATER
  218.     DCA    STATUS    /TO FIGURE OUT IF A DOUBLE SIDED FLOPPY
  219.     AC0002        /CODE FOR SILO OPERATION
  220.     TAD    UNIT    /UNIT AND DENSITY
  221.     LCD        /SET TO EMPTY SILO
  222.     JMP    XFIELD    /GO TO SILO UNLOADING LOOP
  223.  
  224. ONCE,    JMS    MOVE1    /TO MOVE SECOND HALF OF BLOCK 0 TO 07600 ON.
  225.     JMS    NEXSEC    /DESTROY LINKAGE TO ONCE ONLY CODE
  226. MOVE1,    0        /MOVE 214-413 TO 7600-7777
  227.     TAD    MOV1
  228.     DCA    ZR
  229.     TAD    K7577
  230.     DCA    XR
  231.     TAD I    ZR    /FROM
  232.     DCA I    XR    /TO
  233.     TAD    XR    /TEST DONE
  234.     IAC        /ENDS AT 7777
  235.     SZA CLA
  236.     JMP    .-5
  237.     JMP I    MOVE1
  238.  
  239. MOVE2,    CLA CMA        /MOVING FROM 10000-10177
  240.     DCA    ZR
  241.     TAD    K7577    /TO27600-27777
  242.     DCA    XR
  243. MOVE3,    CDF 10
  244.     TAD I    ZR
  245.     CDF 20
  246.     DCA I    XR
  247.     TAD    XR
  248.     IAC
  249.     SZA CLA
  250.     JMP    MOVE3
  251.     TAD    K12
  252.     CDF 0
  253.     JMP    EBOOT
  254.  
  255.     /DOUBLE DENSITY LOADING DATA
  256.  
  257. DAT02,    1374        /MAKE 400_UNIT WHEN ADDED TO 70X4
  258.     CDF 10
  259.     11        /LOAD BLOCK 66
  260.     6-11        /SECTOR 11 TRACK 6
  261.     7600-6-1
  262. K12,    12        /MARKER TO STOP WHOLE THING, ALSO LITERAL 12
  263.  
  264.     /I/O DONE GO TO HANDLER
  265.  
  266. EBOOT,    CLA
  267.     TAD    UNIT    /REST OF CONTROL WORD
  268.     DCA I    MAGIC    /TO BOOTYP OF SYSTEM HANDLER
  269.     JMP I    L7605    /START SYSTEM
  270.  
  271. MAGIC,    BOOTYP
  272. L7605,    7605
  273. K7577,    7577
  274. MOV1,    213
  275.     NDBOOT=.
  276.     / CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS
  277.  
  278. QUO=7750        /QUOTIENT FOR DIVIDE == TRACK
  279. REMD=7751        /REMAINDER FOR DIVIDE == SECTOR
  280. REC=7752        /CURRENT LOGICAL SECTOR NUMBER
  281. RETRY=7753        /RETRIES COUNT
  282.  
  283.     RELOC
  284.     *0200
  285.     RELOC    7600
  286.  
  287.     /USUALLY THE FIRST 7 LOCATIONS ARE FILLED WITH A ZBLOCK 7
  288.     /ALTHOUGH THESE COMMANDS ARE COMPILED WITH THE HANDLER THE
  289.     /SYSTEM WILL OVER WRITE THESE LOCATIONS WITH THE SAME INFORMATION
  290.     /THIS WAS DONE FOR CONVIENCE
  291.  
  292.     JMS    SYS    /CALL SYSTEM HANDLER
  293.     5000        /WRITE 10 PAGES -- 5 BLOCKS
  294.     0000        /START AT MEM ADDRESS 0
  295.     0033        /PUT INFO INTO SYSTEM SCRATCH AREA BLK 33
  296.     CLA HLT
  297.     CIF CDF 10    /CHANGE FIELD TO 1
  298.     JMP    7667    /THIS JMP IS A CALL TO LOAD THE KEYBOARD MONITOR
  299.  
  300.     /ENTRY
  301.  
  302. SYS,    VERSION
  303.     CLL CLA
  304. L12,    12
  305.     3        /!!REQUIRED AT 7612!! TO SHOW OS78 2 PAGE HANDLER
  306.     TAD    LM6
  307.     DCA    RETRY
  308.     RDF        /GET FIELD OF CALLING ROUTINE
  309.     TAD    LLCDF0    /MAKE A CDF OUT OF IT
  310.     DCA    RESTOR    /PUT IT BACK, GO TO I/O ROUTINE ON PAGE 2
  311.     JMP    RSTART    /GO CALL SECOND PAGE, IOTYP FALLS THRU TO HERE
  312.  
  313. IOTYP,    0
  314. LLCDF0,    CDF 0
  315. BOOTYP,    0        /!!MUST BE AT 7623 GETS HIT BY SECONDARY BOOT
  316. LM12,    -12
  317. L6,    6
  318. LM6,    -6
  319.     *7635
  320.  
  321. RSTART,    AC3777        /MAKE A WORD WITH DENSITY AND UNIT BITS ONLY
  322.     AND    BOOTYP    /FOR CONSTRUCTING LCD ARGUMENTS
  323.     DCA    IOTYP    /ALSO SHUTS OFF PATH TO ONCE-ONLY CODE!
  324.     TAD    SYS    /AC HAS THE CALL ADDR
  325. RESTOR,    HLT        /SET DATA FIELD TO CALLING ROUTINE
  326.     CIF 20        /!! CDF,CIF OR CID MUST BE AT 7642
  327.     JMP    PAGE2    /FOR FRTS TO WORK
  328.  
  329. /
  330. / ERROR RECOVERY ROUTINE
  331. / RETRACT HEAD TO TRACK 0
  332. / RETRY HANDLER CALL FROM SCRATCH
  333. /
  334.  
  335. RECOVR,    TAD    L6    /DO A READ
  336.     TAD    IOTYP    /ADD DRIVE NUMBER
  337.     LCD        /LOAD IT
  338.     STR
  339.     JMP    .-1
  340.     CLA IAC        /READ SECTOR 1
  341.     XDR
  342.     STR
  343.     JMP    .-1
  344.     CLL CLA        /TRACK 0
  345.     XDR
  346.     SDN        /WAIT FOR OPERATION TO FINISH
  347.     JMP    .-1
  348.     SER        /CLEAR ANY ERROR CONDITIONS
  349.     NOP
  350.     JMP    RSTART    /RETRY LAST OPERATION 
  351.  
  352.     *7677
  353.  
  354.     / CALL WITH AC <> 0 TO DO DIVIDE
  355.     / CALL WITH AC = 0 TO DO I/O RETRY (WHOLE OPERATION)
  356.  
  357. DIVSUB,    0
  358.     SKP        /!!FAULTY USR CALL DOES JMS HERE (7700)!!
  359.     HLT        /****************************************
  360.     SNA CLA        /SKIP IF REALLY A DIVIDE REQUEST
  361.     JMP    RECOVR    /NO, IT WAS AN ERROR RETRY!!
  362.     RAR
  363.     DCA    SAVL    /SAVE THE LINK
  364.     DCA    QUO    /CLEAR DIVIDE QUOTIENT
  365.     TAD    REC    /THIS FOR TRACK-SECTOR
  366. DIVLOO,    ISZ    QUO    /MAIN DIVIDE BY 12 TO GET TRACK
  367.     TAD    LM12    /DIVIDE BY 12 TO GET TRACK
  368.     SMA        /SKIP IF DONE
  369.     JMP    DIVLOO
  370.     TAD    L12    /REMAINDER 0-11
  371.     DCA    REMD    /USE AS TEMPORY UNTIL FINAL VALUE
  372.     TAD    REMD    /*2 FOR INTERLEAVE
  373.     TAD    REMD
  374.     CLL IAC        /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0
  375.     TAD    LM12    /DIVIDE BY 12 TO GET SECTOR
  376.     SMA SZA        /SKIP IF DONE
  377.     JMP    .-2
  378.     TAD    L12    /RESTORE POSITIVE VALUE TO BE SECTOR
  379.     DCA    REMD
  380.     SNL CLA
  381.     ISZ    REMD    /COMPENSATE FOR ODD SECTOR
  382.     TAD    SAVL    /RESTORE LINK
  383.     CLL RAL
  384.     CIF 20        /GO BACK TO OTHER PAGE
  385.     JMP I    DIVSUB    
  386.  
  387. SAVL,    0
  388.  
  389.     ZBLOCK    7744-.    /!! 7743 IS THE LAST USABLE LOCATION
  390.             /7744-7777 IS USED BY THE MONITOR
  391.     / SECOND PAGE
  392.  
  393.     RELOC
  394.     *400
  395.     RELOC    7600
  396. /
  397. /  FETCH ARGUMENTS, ETC.
  398. /
  399. PAGE2,    DCA    FETCH    /ENTER WITH ARGUMENT LIST ADDR IN AC
  400.     RDF        /SAFE HERE?
  401.     TAD    LCDIF0    /SET UP EXIT TO CALLER
  402.     DCA    EXFLD
  403.     AC4000        /SET UP TO PUT R/W BIT TO LINK
  404.     TAD I    FETCH    /FIRST ARGUMENT HAS FIELD FOR TRANSFER
  405.     AND    L70    /KEEPING ONLY FIELD
  406.     TAD    LCDF0    /MAKE CDF TO TRANSFER FIELD
  407.     DCA    BUFCDF    /PLACE IN LINE FOR SILO LOOP
  408.     CML RTL        /0=WRITE, 2=READ
  409.     DCA    FN
  410.     TAD I    FETCH    /MAKE CONTROL COUNT FOR TRANSFER
  411.     RAL
  412.     AND    L7600    /COUNT OF WORDS
  413.     CIA        /0 FOR WHOLE FIELD
  414.     DCA    BC
  415.     ISZ    FETCH    /NEXT ARGUMENT
  416.     TAD I    FETCH    /BUFFER ADDRESS
  417.     DCA    BUF
  418.     ISZ    FETCH    /NEXT
  419.     TAD I    FETCH    /BLOCK ADDRESS
  420.     ISZ    FETCH    /MOVING POINTER TO ERROR EXIT
  421.     CDF    0    /INDIRECT TO FIRST PAGE FOR CONSTANTS
  422.     DCA I    LREC    /SAVE BLOCK #
  423.     CLA IAC        /DIVSUB WANTS A NON ZERO AC FOR DIVIDE
  424. LCDIF0,    CIF CDF 0    /GO BACK TO FIRST PAGE
  425.     JMS    DIVSUB    /SET UP TRACK AND SECTOR
  426.     AC0002
  427.     AND    FN    /SPLIT READ AND WRITE
  428.     SZA CLA        /WRITE SKIPS
  429.     JMP    STREAD    /READ STARTS IN MIDDLE OF LOOP
  430.             /WRITE FALLS TO NEXT LISTING PAGE
  431. /WRITE FALLS THRU TO THIS LOOP
  432.  
  433. /  TOP OF MAIN LOOP
  434.  
  435. TOP,    TAD    FN    /SET SILO TO LOAD-UNLOAD
  436.     JMS    LDCMD    /COMMAND TO CONTROLLER
  437.     TAD    DENSW    /MAKE SILOCOUNT TO 7400
  438.     DCA    FLPWC
  439.     CLL        /FOR HALF BLOCK TRANSFERS
  440. BUFCDF,    HLT        /CDF TO BUFFER FIELD PLACED HERE
  441. TRLOOP,    JMS    WAIT    /WAIT UNTIL READY TO PASS DATA
  442.     SKP        /STR NORMAL RETRUN
  443.     JMP    ERROR    /ERROR TRY AGAIN
  444.     TAD I    BUF    /IN CASE OF WRITE, FETCH A WORD
  445.     XDR        /TO OR FROM AC
  446.     SZL
  447.     JMP    INCWC
  448.     DCA I    BUF    /PLACE WORD FOR READ, WRITE REPLACES SAME
  449.     ISZ    BUF    /MOVE BUFFER POINTER, (MAY SKIP)
  450. L70,    70
  451.     ISZ    BC    /FOR HALF PAGE
  452.     SKP
  453.     STL
  454. INCWC,    CLA
  455.     ISZ    FLPWC    /DONE YET
  456.     JMP    TRLOOP
  457.     JMS    WAIT    /WAIT FOR SDN
  458.     JMP    ERROR
  459.     TAD    BC    /LOOP CONTROL TO FINISH READ
  460.     SZA CLA
  461.     JMP    STREAD
  462.     AC0002        /SET AC = 2
  463.     AND    FN    /IF BC = 0 AND DOING A READ THEN WERE DONE
  464.     SZA CLA
  465.     JMP    EXIT
  466.     STL
  467.  
  468. /
  469. /  MIDDLE OF MAIN LOOP
  470. /
  471. STREAD,    TAD    FN    /READ STARTS HERE
  472.     TAD    L4    /TURN SILO COMMAND INTO READ-WRITE COMMAND
  473.     JMS    LDCMD    /I/O COMMAND TO CONTROLLER
  474.     JMS    WAIT    /WAIT FOR STR
  475.     SKP
  476.     JMP    ERROR
  477.     TAD I    LREMD    /PRECOMPUTED SECTOR #; LDCMD SET FIELD TO 0
  478.     XDR
  479. L7600,    7600        /CLEAR AC, AND IS LITERAL
  480.     JMS    WAIT    /WAIT FOR STR
  481.     SKP
  482.     JMP    ERROR
  483.     TAD I    LQUO    /TRACK #
  484.     XDR        /TRACK # IS ALWAYS NON0 !!
  485.     ISZ I    LREC    /MOVE TO NEXT RECORD NUMBER
  486. BACKER,    CDF CIF 0    /GO BACK TO FIRST PAGE
  487.     JMS    DIVSUB    /FOR TRACK AND SECTOR AC=0 SAYS RETRY
  488.     JMS    WAIT    /WAIT FOR SDN
  489.     JMP    ERROR
  490.     SNL CLA
  491.     JMP    TOP    /STILL MORE
  492. EXIT,    ISZ    FETCH    /KICK TO OK EXIT
  493. EXFLD,    HLT        /CDF CIF TO CALLER
  494.     JMP I    FETCH    /OUT
  495. /  LDCMD  SUBROUTINE
  496.  
  497. FLPWC=.            /ENTRY POINT A SAFE COUNT TEMPORARY
  498. LDCMD,    0        /CALL TO GIVE COMMAND TO CONTROLLER
  499. LCDF0,    CDF    0    /INDIRECTS BACK TO FIRST PAGE
  500.     TAD I    LIOTYP    /PUT IN UNIT, DENSITY, HEAD
  501.     LCD        /COMMAND
  502.     JMP I    LDCMD
  503.  
  504. WAIT,    0
  505.     STR        /TEST XFER FLAG
  506.     SKP
  507.     JMP I    WAIT    /IF XFER FLAG SET GOTO CALLER +1
  508.     SDN        /TEST DONE FLAG
  509.     JMP    WAIT+1    /LOOP UNTIL STR OR SDN HAVE COMPLETED
  510.     ISZ    WAIT    /DONE SET SET UP RETURN TO CALLER +2
  511.     SER        /SKIP IF AN ERROR
  512.     JMP I    WAIT    /RETURN
  513. ERROR,    CDF    0
  514.     CLA
  515.     ISZ I    LRETRY    /TRIED ENOUGH TIMES ALREADY?
  516.     JMP    BACKER    /TO DIVSUB WITH AC=0 TO RETRY !!!!!
  517.     AC4000        /HARD ERROR, GIVE BACK MINUS RESULT
  518.     JMP    EXFLD
  519.  
  520. /
  521. /  VARIABLES ETC.
  522. /
  523. BUF,    0        /POINTER TO CALLER'S BUFFER
  524. FETCH,    0        /POINTER TO CALL
  525. BC,    0        /CONTROL COUNT, WORDS TO TRANSFER
  526. FN,    0        /0 FOR WRITE, 2 FOR READ
  527. DENSW,    7400
  528. /
  529. /  LITERALS
  530. /
  531. L4,    4
  532. LIOTYP,    IOTYP        /POINTERS BACK TO FIRST PAGE
  533. LRETRY,    RETRY
  534. LQUO,    QUO
  535. LREC,    REC
  536. LREMD,    REMD
  537.  
  538.