6DD 
          IDENT  6DD,MSFW 
          PERIPH
          BASE   MIXED
          SST 
          TITLE  6DD - CONCURRENT PP MS OVERLAY LOADER. 
*COMMENT  6DD - CONCURRENT PP MS OVERLAY LOADER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 6DD      SPACE  4,10 
***       6DD - CONCURRENT PP MS OVERLAY LOADER.
* 
*         S. L. BETH.        86/08/14.
          SPACE  4,20 
***       *6DD* LOADS MS OVERLAYS INTO CONCURRENT PPS (CPP).  IT IS 
*         EXPECTED THAT THE ONLY CPP SUBROUTINE TO CALL *6DD* WILL BE 
*         THE PERIPHERAL LIBRARY LOADER (PLL) IN PP RESIDENT.  *6DD* IS 
*         LOADED INTO THE DRIVER OVERLAY AREA WHEN A CPP PROGRAM ISSUES 
*         A *SETMS* REQUEST FOR A 12 BIT MS OVERLAY LOAD.  6DD PROVIDES 
*         THE STANDARD DRIVER ENTRY POINTS, *RDS*, *WDS*, AND *EMS*.
* 
*         WHEN IT IS CALLED AT *RDS*, IT ISSUES A CALL TO *1MA* TO AID
*         THE LOAD.  *1MA* WILL READ THE DISK AND PASS THE DATA TO
*         *6DD* VIA THE MESSAGE BUFFER. 
* 
*         WHEN *6DD* IS CALLED AT *WDS*, IT HANGS THE *CPP*.
* 
*         WHEN IT IS CALLED AT *EMS*, IT SIMPLY RETURNS TO THE CALLER.
* 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         MS RESIDENT OVERLAY.
*         (T5 - T7) = 6/ ESTO,12/  TRACK,12/  SECTOR
* 
*         MS READ.  (NOT SUPPORTED) 
*         (T5 - T7) = 3/0, 9/  ESTO,12/  TRACK,12/  SECTOR
 COMMON   SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMPIOU 
*CALL     COMSMSC 
*CALL     COMSMSP 
          EJECT 
**        ENTRY POINT TRANSFERS.
  
  
          ORG    MSFW 
  
          CON    PRS         PRESET ADDRESS 
  
  
 RDS      CON    0           ENTRY
          UJN    RDS.        ENTER DRIVER 
  
  
 WDS      CON    0           ENTRY
          UJN    WDS.        ENTER DRIVER 
 EMS      SPACE  4,10 
**        EMS - END MASS STORAGE OPERATION. 
* 
*         EXIT   (A) = 0. 
  
  
 .EMS     SUBR               ENTRY/EXIT 
          LDN    0
          STM    CHRV 
          UJN    .EMSX       RETURN 
 WDS      SPACE  4,10 
**        WDS - WRITE SECTOR. 
* 
*         *WDS* HANGS THE PP WHEN IT IS CALLED. 
* 
*         ENTRY  (A) = BUFFER ADDRESS FOR SECTOR. 
  
  
 WDS.     MONITOR  HNGM      HANG THE PP
 WDS1     UJN    WDS.        CONTINUE HANGING 
 RDS      SPACE  4,10 
**        RDS - READ SECTOR.
* 
*         ENTRY  (LA) = BUFFER ADDRESS FOR SECTOR.
* 
*         EXIT   (A) = 0 IF TRANSFER COMPLETE.
*                    .LT O, IF ERROR OCCURRED.
  
  
 RDS.     LDD    IA 
          STM    RDSB+4 
          LDN    0
          STD    T4 
          STD    CM+1 
          LDD    T5          CLEAR RECORD TYPE DATA 
          LPC    377
          STD    T5 
          LDD    MA          CALL *1MA* TO ASSIST IN THE LOAD 
          CWM    RDSB,ON
          STD    CM 
          CWD    T4 
          MONITOR  RPPM 
          LDDL   LA          SET LOAD ADDRESS 
          STML   RDSA 
 RDS1     PAUSE 
          LDD    MA 
          ADN    1
          CRD    CM 
          LDD    CM          CHECK FOR DATA READY 
          SHN    21-13
          MJN    RDS2        IF ERROR IN LOAD 
          SHN    13-12
          MJN    RDS3        IF EOR ENCOUNTERED 
          ZJN    RDS1        IF DATA NOT READY
          LDD    MA          READ DATA
          ADN    2
          CRM    **,CM
 RDSA     EQU    *-1
          LDD    CM          ADVANCE READ ADDRESS 
          SHN    2
          ADD    CM 
          RAML   RDSA 
          LDN    0           INDICATE READY FOR NEXT BLOCK
          STD    CM 
          LDD    MA 
          ADN    1
          CWD    CM 
          UJN    RDS1        LOOP FOR MORE DATA 
  
 RDS2     LDML   RDS         SET RETURN ADDRESS 
          STDL   CM 
          LCN    1           SET ERROR FLAG 
          LJM    0,CM        RETURN 
  
 RDS3     LDML   RDS         SET RETURN ADDRESS 
          STDL   CM 
          LDN    0           INDICATE READ COMPLETE 
          LJM    0,CM        RETURN 
  
  
 RDSB     VFD    18/3L1MA,6/0,12/11,24/0
 PRS      SPACE  4,10 
**        PRS - PRESET. 
* 
*         MACROS BLI. 
  
  
 PRS      LDC    PRSA        GET TABLE OF LONG INSTRUCTIONS 
          STD    CM+4 
          LDD    T3          PRESERVE *T3*
          STD    CM+3 
 PRS1     LDI    CM+4        GET NEXT INSTRUCTION ADDRESS 
          ZJN    PRS2        IF END OF LIST 
          STD    T3 
          BLI    T3          BUILD LONG INSTRUCTION 
          AOD    CM+4 
          UJN    PRS1        PROCESS NEXT INSTRUCTION 
  
 PRS2     LDD    CM+3        RESTORE *T3* 
          STD    T3 
          LDC    SMSX        ENSURE PRESET IS NOT RE-EXECUTED 
          STM    MSFW 
          LJM    SMSX        RETURN 
  
  
 PRSA     BSS    0
          LIST16
  
 .1       MAX    *
 .1       SET    .1+4-MSFW   CHECK FOR OVERFLOW 
 .1       SET    .1/5 
 .1       SET    MSFW+.1*5
 .2       SET    PPFW-5-*-5  BYTES AVAILABLE BEFORE OVERFLOW
          ERRNG  PPFW-5-.1   DRIVER OVERFLOWS INTO *PPFW*-5 
          END 
