COPYRT
COMMON
SSOVL
IDENT SSOVL
ENTRY SSOVL
ENTRY SSOVL
SYSCOM B1
SSOVL TITLE SSOVL - LOAD *SSEXEC* OVERLAYS.
*COMMENT LOAD *SSEXEC* OVERLAYS.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
*CALL COMCMAC
SPACE 4,30
*** SSOVL - LOAD *SSEXEC* OVERLAYS.
*
* SSOVL(OVLLEV,XFRADR); ( *SYMPL* CALL )
*
* ENTRY (OVLLEV) = OVERLAY LEVEL. THE FORMAT IS -
* 48/ 0, 6/ PRIMARY LEVEL, 6/ SECONDARY
* LEVEL.
*
* (XFRADR) = TRANSFER ADDRESS, ENTRY TO OVERLAY.
* IF 0, ENTER OVERLAY AT ENTRY POINT ADDRESS.
* ELSE, ENTER OVERLAY AT SPECIFIED ABSOLUTE
* ADDRESS.
*
* EXIT THE RETURN ADDRESS IS PLACED IN THE OVERLAY.
* CONTROL TRANSFERS TO THE OVERLAY.
*
* USES A - 1, 2, 5, 6.
* B - 1, 6, 7.
* X - 0, 1, 2, 5, 6, 7.
*
* CALLS FOL.LOV.
*
* NOTES IT IS ASSUMED THAT THE ENTRY POINT ADDRESS OF EACH
* OVERLAY CONTAINS (IN BITS 47-30) THE ADDRESS OF THE
* ROUTINE TO BE EXECUTED. THIS MODIFICATION IN OVERLAY
* DESIGN IS DONE TO HANDLE *SYMPL* PROCEDURES.
*
* DAYFILE MESSAGE * OVERLAY NOT FOUND.*
SSOVL SUBR ENTRY/EXIT
SSOVL0 BSS 0 ENTRY FROM *RCOVL*
SB1 1
SX6 A1 PARAMETER LIST ADDRESS
SA2 A1+B1
SA3 X2 GET *XFRADR* PARAMETER
BX7 X3
SA7 XFRADR SAVE TRANSFER ADDRESS
SA6 OVLPARAM
* DETERMINE IF REQUESTED OVERLAY IS PRIMARY OR SECONDARY.
* IF IT IS ALREADY LOADED, SKIP THE LOAD.
SA1 X1 LEVEL OF REQUESTED OVERLAY
MX7 -6
BX0 -X7*X1 EXTRACT SECONDARY LEVEL NUMBER
ZR X0,OVL.1 IF PRIMARY OVERLAY REQUESTED
SX0 B1
OVL.1 BSS 0
SA5 X0+OVLLEV LEVEL OF CURRENT OVERLAY
SA2 X0+OVLEPTA
SB7 X2 CURRENT OVERLAY ENTRY POINT ADDRESS
BX6 X1-X5
ZR X6,OVL1 IF OVERLAY IS ALREADY IN FL
BX6 X1
SA6 A5 SAVE OVERLAY LEVEL
NZ X0,OVL.2 IF SECONDARY LOAD
MX6 0
SA6 OVLLEV+1 CLEAR SECONDARY LEVEL NUMBER
OVL.2 BSS 0
* LOAD THE OVERLAY.
RJ =XFOL.LOV CALL OVERLAY LOADER
NG B7,OVL3 IF OVERLAY NOT FOUND
SA2 OVLC INCREMENT OVERLAY COUNTER
SX6 X2+B1
SA6 A2
SX6 B7 ENTRY POINT ADDRESS
SA6 X0+OVLEPTA SAVE ENTRY POINT ADDRESS
* SET UP RETURN ADDRESS AND ENTER THE OVERLAY.
OVL1 BSS 0
SA2 SSOVL GET RETURN ADDRESS
BX6 X2
SA5 B7 GET ADDRESS TO PROCEDURE
LX5 30
SB7 X5 ENTRY POINT ADDRESS TO PROCEDURE
SA6 B7 PLACE RETURN ADDRESS
SB7 B7+B1 ADVANCE TO TRANSFER ADDRESS
SA1 OVLPARAM PARAMETER LIST ADDRESS
SA2 XFRADR
ZR X2,OVL2 IF TRANSFER TO ENTRY POINT
SB7 X2 TRANSFER ADDRESS
OVL2 SA1 X1+2 ADVANCE PARAMETER POINTER
JP B7 SIMULATED CALL TO PROGRAM
OVL3 MESSAGE MADDR ISSUE ERROR MESSAGE
ABORT ABORT
*CALL COMXOVL
MADDR DATA 40C OVERLAY NOT FOUND.
XFRADR BSSZ 1 SAVED TRANSFER ADDRESS
OVLEPTA BSSZ 2 ENTRY POINT ADDRESS OF CURRENT OVERLAY
OVLLEV BSSZ 2 LEVEL NUMBER OF CURRENT OVERLAY
OVLPARAM BSSZ 1 ADDRESS TO CALLER PARAMETER LIST
RSOVL TITLE RSOVL - REPLACE CURRENT OVERLAY.
** RSOVL - REPLACE CURRENT OVERLAY.
*
* RSOVL(OVLLEV,XFRADR); ( *SYMPL* CALL )
*
* ENTRY (OVLLEV) = OVERLAY LEVEL. THE FORMAT IS -
* 48/ 0, 6/ PRIMARY LEVEL, 6/ SECONDARY
* LEVEL.
*
* (XFRADR) = TRANSFER ADDRESS, ENTRY TO OVERLAY.
* IF 0, ENTER OVERLAY AT ENTRY POINT ADDRESS.
* ELSE, ENTER OVERLAY AT SPECIFIED ABSOLUTE
* ADDRESS.
* *SSOVL* MUST HAVE BEEN CALLED PREVIOUSLY TO LOAD
* THE PRIMARY OVERLAY.
*
* EXIT (A1) = *FWA* OF PARAMETER LIST.
*
* CALLS SSOVL
*
* NOTES *RSOVL* CAN BE CALLED ONLY TO GO FROM ONE SECONDARY
* OVERLAY TO ANOTHER SECONDARY OVERLAY. THE CURRENT
* SECONDARY OVERLAY IS REPLACED BY THE REQUESTED
* SECONDARY OVERLAY. *RSOVL* CANNOT BE USED TO GO
* FROM ONE PRIMARY OVERLAY TO ANOTHER PRIMARY OVERLAY.
RSOVL SUBR ENTRY/EXIT
EQ SSOVL0 ALTERNATE ENTRY TO *SSOVL*
END