IDENT 6DC,MSFW PERIPH BASE MIXED SST TITLE 6DC - CONCURRENT PP OVERLAY LOADER. *COMMENT 6DC - CONCURRENT PP OVERLAY LOADER. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. 6DC SPACE 4,10 *** 6DC - CONCURRENT PP OVERLAY LOADER. * * J. M. MAREK. 85/11/01. SPACE 4,20 *** *6DC* LOADS 16-BIT OVERLAYS INTO CONCURRENT PPS (CPP). IT IS * EXPECTED THAT THE ONLY CPP SUBROUTINE TO CALL *6DC* WILL BE * THE PERIPHERAL LIBRARY LOADER (PLL) IN PP RESIDENT. *6DC* IS * LOADED INTO THE DRIVER OVERLAY AREA WHEN A CPP PROGRAM ISSUES * A *SETMS* REQUEST. *6DC* PROVIDES THE STANDARD DRIVER ENTRY * POINTS, *RDS*, *WDS*, AND *EMS*. * * WHEN IT IS CALLED AT *RDS*, IT EXAMINES THE PARAMETERS IN * *T5* - *T7*. IF THE PARAMETERS SPECIFY LOADING A CM RESIDENT * 16-BIT PP PROGRAM, *6DC* COMPLETES THE LOAD, PERFORMING THE * NECESSARY PACKING, AND RETURNS TO THE CALLER. IF A MASS * RESIDENT PROGRAM IS REQUESTED, *RDS* ISSUES AN ERROR LOG * MESSAGE AND RETURNS AN ERROR STATUS (-1) TO THE CALLER. IF * *T5* - *T7* DO NOT SPECIFY A 16-BIT LOAD, *6DC* HANGS THE * CPP. * * WHEN *6DC* IS CALLED AT *WDS*, IT ALSO HANGS THE *CPP*. * * WHEN IT IS CALLED AT *EMS*, IT SIMPLY RETURNS TO THE CALLER. * * NOTE. DURING EXECUTION *6DC* DESTROYS ITS PRESET CODE. * DRIVER PRESET SHOULD NEVER BE SPECIFIED WITHOUT DRIVER LOAD. SPACE 4,10 *** ENTRY CONDITIONS. * * CM RESIDENT 16-BIT OVERLAY. * (T5 - T7) = 2/ ,4/ 10,18/ *RPL* ADDRESS,12/ LENGTH * * MS RESIDENT OVERLAY. (NOT SUPPORTED) * (T5 - T7) = 2/ ,4/ 14,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 (A) = BUFFER ADDRESS FOR SECTOR. * * EXIT (A) = 0 IF TRANSFER COMPLETE. * = ERROR CODE IF ERROR OCCURRED. RDS6 EQU WDS1 RDS7 LDM PLLA GET OVERLAY NAME STM RDSB LDM PLLB STM RDSB+1 LDC RDSA+ERLN ISSUE ERROR LOG MESSAGE RJM DFM LDML RDS GET RETURN ADDRESS STDL CM LCN 1 SET ERROR FLAG LJM 0,CM RETURN RDS. LDD T5 CHECK 16-BIT LOAD BIT SHN 21-11 RDS1 PJN RDS6 IF NOT 16-BIT LOAD SHN 21-10-21+11 MJN RDS7 IF MS RESIDENT OVERLAY SHN 21-5-21+10 GET RPL HEADER SCN 77 LMD T6 CRD CM ADN 1 SET FWA OF OVERLAY STD T6 SHN -14 STD T5 LDD CM+1 GET LOAD ADDRESS LPN 17 SHN 14 LMD CM+2 ZJN RDS2 IF ZERO LEVEL OVERLAY STDL LA RDS2 STML 2,LA LDDL LA ADN 5 SET FWA OF OVERLAY CODE STDL CM+2 SOD T7 COMPUTE THE NUMBER OF BYTES SHN 4 BYTES = WORDS(15)/4 AND TRUNCATED SBD T7 SHN -2 ADDL CM+2 COMPUTE THE LAST BYTE ADDRESS STDL T7 SHN -15 NJN RDS1 IF OVERLAY WRAPS MEMORY LDD CM BUILD NORMAL OVERLAY HEADER STI LA LDD CM+1 SCN 77 STM 1,LA LDN 1 STM 3,LA LDD CM+4 STM 4,LA LDN 4 STD T4 * START THE MAIN LOOP WITH THESE INITIAL CONDITIONS - * * (T4) = 4. * (T5 - T6) = FWA OF THE OVERLAY IN CM. * (T7) = LAST BYTE ADDRESS+1 OF THE OVERLAY IN PP MEMORY. * (CM+2) = FWA OF THE OVERLAY CODE. * (LA) = LOAD ADDRESS OF THE OVERLAY. * GET 15 16-BIT BYTES. RDS3 LDD T5 READ THE NEXT 4 WORDS SHN 14 LMD T6 CRM BUF,T4 STD T6 SHN -14 STD T5 LDC BUF STD CM * LOAD 12 BITS FROM THE FIRST BYTE AND 4 FROM THE NEXT. RDS4 LDI CM SHN 4 STIL CM+2 AOD CM LDI CM SHN -8D RAIL CM+2 AODL CM+2 SBDL T7 PJN RDS5 IF LAST BYTE * LOAD 8 BITS FROM THE CURRENT BYTE AND 8 FROM THE NEXT. LDI CM SHN 8D SCN 77 STIL CM+2 AOD CM LDI CM SHN -4 RAIL CM+2 AODL CM+2 SBDL T7 PJN RDS5 IF LAST BYTE * LOAD 4 BITS FROM THE CURRENT BYTE AND 12 BITS FROM THE NEXT. LDI CM LPN 17 SHN 12D STIL CM+2 AOD CM LDI CM RAIL CM+2 AODL CM+2 SBDL T7 PJN RDS5 IF LAST BYTE * CHECK FOR MORE DATA. AOD CM SBK BUF+4*5 MJP RDS4 IF 4 WORDS HAVE NOT BEEN PROCESSED UJP RDS3 GET 4 MORE WORDS RDS5 LDML RDS GET RETURN ADDRESS STDL CM LDN 0 LJM 0,CM RETURN RDSA DATA H* 6DC -* RDSB DATA C* XXX IS MASS RESIDENT.* BUF BSS 0 * BSS 4*5 PRS SPACE 4,10 ** PRS - PRESET. * * CALLS SLI. 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 *,BUF+4*5 .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