*DECK OVLCALL
IDENT OVLCALL
*
SST
IPARAMS
*#
*1DC OVLCALL
*
* 1. PROC NAME AUTHOR DATE
* OVLCALL E. GEE 76/08/04
*
* 2. FUNCTIONAL DESCRIPTION.
*
* THIS ROUTINE LOADS OVERLAYS AND TRANSFERS CONTROL TO THEM
*
* 3. METHOD USED.
*
* 3 WD PARM BLOCK SET UP TO LOAD THE OVERLAY.
* LOADREQ MACRO IS USED TO CALL LDR
* JUMP IS MADE TO ENTRY ADDRESS (PROVIED BY LDR) IN OVERLAY
*
* 4. ENTRY PARAMETERS.
*
* OVLNAME LEVEL NUMBERS OF THE REQUESTED OVERLAY
* WITH OPTIONAL OVERSIZE FLAG
* (VFD 47/0,1/F,6/L1,6/L2 WHERE )
* (F = 1 IF OVERSIZE PRIMARY OVERLAY )
* (L1 = PRIMARY LEVEL NUMBER, OR 1 IF SEC. )
* (L2 = SECONDARY LEVEL NUMBER, OR 0 IF PRI.)
*
* 5. EXIT PARAMETERS.
*
* THE OVERLAY SHOULD BEGIN WITH A PRGM STATEMENT (INSTEAD OF A
* PROC STATEMENT).
*
* AFTER THE OVERLAY HAS FINISHED EXECUTION, A JUMP MUST BE MADE
* TO ADDRESS RJMAIN IN THIS ROUTINE, WHICH WILL THEN CAUSE A
* RETURN TO WHERE THE OVERLAY WAS CALLED.
*
* 6. COMDECKS CALLED.
* DUMPFLG INPARU MACDEF OVERLAY OVLSTAT
* STATTAB
*
* 7. ROUTINES CALLED.
* LOADREQ LOAD OVERLAY MACRO
* OMSG ISSUE DAYFILE MESSAGE
* OTIME GET SYSTEM RTIME
* RDUMP DUMP FIELD LENGTH
* XTRACE RECORD CALL
*
* 8. DAYFILE MESSAGES.
*
* *OVERLAY NOT LOADED* THIS DAYFILE MESSAGE IS ISSUED WHEN
* THE OVERLAY THAT IS TO BE LOADED WILL OVERWRITE ANOTHER
* OVERLAY STILL EXECUTING OR WHEN A FATAL ERROR OCCURRED
* AND THE OVERLAY COULD NOT BE LOADED
*
* PARAMETERS REQUIRED FOR THE OVERLAY SHOULD BE PASSED THROUGH
* LABELED COMMON BLOCK PARAMP (COMDCCK PARAMP) FOR PRIMARY
* OVERLAYS AND LABELED COMMON BLOCK PARAMS (COMDECK PARAMS)
* FOR SECONDARY OVERLAYS.
* THE LEVELS OF THE OVERLAY SHOULD BE STORED IN LABELED COMMON
* BLOCK OVERLAY (COMDECK OVERLAY).
*
* IT IS ASSUMED BY THIS ROUTINE THAT ALL OVERLAYS ARE IN THE
* SYSTEM LIBRARY.
*
*
* * * * * * * * * * * W A R N I N G * * * * * * * * * * * * * * *
*
* THE OVERLAYS ARE LOADED INTO FIXED SIZE BUFFERS (IN BLANK
* COMMON). THEREFORE, THE SIZE OF THE OVERLAYS CANNOT EXCEED THE
* SIZE OF THE BUFFERS.
* NORMAL PRIMARY OVERLAY MUST NOT EXCEED PRIMARY
*CALL OPSIZE
* SECONDARY OVERLAY MUST NOT EXCEED SECONDARY
*CALL OSSIZE
* AND OVERSIZED PRIMARY MUST NOT EXCEED COMBINED
*CALL OSIZE
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
*#
EXT RDUMP DUMP FIELD LENGTH
EXT OMSG ISSUE DAYFILE MESSAGE
EXT OTIME
EXT PRIBUF LOAD ORIGIN OF PRIMARY OVERLAYS
EXT SECBUF LOAD ORIGIN OF SECONDARY OVERLAY
EXT ENDOVL LIMIT OF OVERLAY AREA
EXT XTRACE STORE RETURN ADDRESS
ENTRY OVLCALL
ENTRY RJMAIN
RETADDR BSSZ 2 STORAGE FOR RETURN ADDRESSES
ADDRPTR VFD 60/RETADDR PTR FOR STORING NEXT RETURN ADDR
IPARAMS
NOS EQU 1 NOS OPERATING SYSTEM
*CALL MACDEF
LOADREQ SPACE 4,7
*** LOADREQ - CALL SYSTEM LOADER VIA PPU.
*
*
* LOADREQ PLIST,RECALL
*
* ENTRY *PLIST* = FWA OF PARAMETER LIST.
* CALLS SYS=.
PURGMAC LOADREQ
LOADREQ MACRO P,R,F
IFC EQ, F ,2
* NORMAL CALL
SYSTEM LDV,R,P
SKIP 8D
SX1 P
IFC EQ, F DATA ,2
* LOAD OVERLAY AS DATA
RJ =XLOD=
SKIP 4
IFC EQ, F CMM ,2
* LOAD OVERLAY VIA CMM
RJ =XCMM.LDV
SKIP 1
A ERR UNKNOWN PARAM - F
ENDM
*CALL INPARU
047300
*CALL OVLSTAT
047500
*CALL OVERLAY
*CALL DUMPFLG
*
LEVELS BSSZ 2 LEVEL NUMBERS OF LOADED PRIMARY AND
SECONDARY. LEVELS+1 = (VFD 12/7777B,48/0)
IF LOADED PRIMARY IS OVERSIZED.
*CALL STATTAB
*
DEBUG1 IFEQ DEBUG,1
*
* OVLFLAG USES BITS 0-2 (0 = RIGHTMOST) TO REPRESENT THE SIX
* STATES OF OVERLAYS IN NIP.
*
* BIT
* STATE 2 1 0 CONDITION
*
* 1 0 0 0 NO OVERLAYS LOADED
* 2 1 0 0 PRIMARY OVERLAY LOADED ONLY
* 3 0 1 1 PRIMARY AND SECONDARY LOADED, PRIMARY LAST
* 4 1 1 0 PRIMARY AND SECONDARY LOADED, PRIMARY FIRST
* 5 0 1 0 SECONDARY OVERLAY LOADED ONLY
* 6 1 0 1 PRIMARY LOADED WITH NO ROOM FOR SECONDARY
*
*
NAMEBUF BSSZ 200 BUFFER FOR STORING OVL PROGRAM NAMES
BEGBUF EQU NAMEBUF FWA OF BUFFER
ENDBUF EQU NAMEBUF+199 LWA+1 OF BUFFER
CURRENT VFD 60/BEGBUF POINTER TO CURRENT WORD
DEBUG1 ENDIF
OVLCALL SUBR = ENTRY/EXIT
*
DEBUG5 IFEQ DEBUG,1
SX1 XOVLC
RJ XTRACE
DEBUG5 ENDIF
STAT1 IFEQ STAT,1
SA1 ST$NOC INCREMENT TOTAL NUMBER OF CALLS TO OVLCALL
SX6 1
IX6 X6+X1
SA6 ST$NOC
STAT1 ENDIF
* GET LEVEL NUMBERS
MX0 -6 MASK FOR SECONDARY OVERLAY NUMBER L2
SA1 OVLNAME L1, L2 AT RIGHTMOST 12 BITS
BX5 -X0*X1 SECONDARY OVERLAY NUMBER L2 ONLY
SB3 X5 (B3)= L2 OF CALLED OVERLAY
SB1 1
LX1 -6
BX5 -X0*X1
SB2 X5 (B2) = L1
*
* SAVE RETURN ADDRESS
*
SA3 ADDRPTR (X3)=CURRENT WD TO STORE RETURN ADDR
SA2 OVLCALL X2 = JUMP INSTR BACK TO CALLING PROG
BX6 X2
SA6 X3 STORE RETURN ADDR IN RETADDR
LX1 -7 OVERSIZE FLAG TO SIGN POSITION
SX7 X3+B1 INCR RET ADDR PTR INTO NEXT WD
SA7 A3
*
* SET UP PARAMETER WORD FOR CALLING OVERLAY
*
BX5 X1 KEEP OVERLAY SIZE FLAG
LX1 1 L1, L2 OF OVERLAY IN LEFTMOST 12 BITS.
MX4 12
BX1 X4*X1 CLEAR REST OF THE WORD
SA3 PARMOVL GET CALL PARAMETER CONSTANT
BX6 X1+X3 ADD IN L1, L2
SB4 B2-B1 OFFSET TO OVLSTAT TABLE FOR PRI OVERLAY
SX4 PRIBUF FOR PRIMARY, X4 = FWA = PRIBUF
IFEQ DEBUG,1
SX2 ENDOVL X2 = LWA = ENDOVL (ASSUMING OVERSIZED)
NG X5,OVLSEC1 OVERSIZED PRIMARY
SX2 SECBUF FOR NORMAL PRIMARY, X2 = LWA = SECBUF
ENDIF
EQ B3,B0,OVLSEC1 NORMAL SIZE PRIMARY
DEBUG4 IFEQ DEBUG,1
BX4 X2 IF SECONDARY, X4 = FWA = SECBUF
DEBUG4 ELSE
SX4 SECBUF IF SECONDARY, X4 = FWA = SECBUF
DEBUG4 ENDIF
SB4 B3+PRINUM-1 OFFSET TO OVLSTAT TABLE FOR SEC OVERLAY
IFEQ DEBUG,1,1
SX2 ENDOVL IF SECONDARY, X2 = LWA = ENDOVL
OVLSEC1 BSS 0
BX6 X6+X4 SET FWA IN PARAMETER
IFEQ DEBUG,1
LX2 18
BX6 X6+X2 SET LWA IN PARAMETER
ENDIF
*
* B1, B2, B3, B4, X5, X6 MUST BE RESERVED DURING DEBUG/STAT
*
* B1 = 1
* B2 = L1 (PRIMARY LEVEL NUMBER) FOR CURRENT REQUEST
* B3 = L2 (SECONDARY LEVEL NUMBER) FOR CURRENT REQUEST
* B4 = ENTRY INDEX FOR OVLNAMP TABLE
* X5 NEGATIVE IF CURRENT REQUEST IS FOR OVERSIZED OVL.
* X6 = PARAMETER WORD (OVLADR1) SET UP FOR CURRENT REQ.
*
DEBUG2 IFEQ DEBUG,1
*
* SET FLAG TO INDICATE OVERLAY LOADED
*
SX7 B1 OVERLAY-LOADED BIT
SA2 OVLFLAG
SX4 5 MASK TO DETERMINE IF PRI OVL LOADED
PL X5,SMALLA
NZ X2,ABTNIP IF LARGE, ERROR IF ANY LOADED
BX7 X4 SET STATE
SX4 B0 FAKE LATER CHECKING AND SETTING
SMALLA NE B3,B0,SETSEC
*
* CHECK IF PRIMARY OVERLAY CAN BE LOADED
*
BX3 X2*X4 MASK OFF PRIMARY-OVERLAY-LOADED BITS
NZ X3,ABTNIP IF ANOTHER PRI OVL STILL EXECUTING
*
* SET PRIMARY-OVERLAY-LOADED BIT
*
NZ X2,SETFLAG IF SECONDARY OVERLAY ALREADY LOADED
BX7 X4-X7 SET BIT 2 TO INDICATE PRI OVL LOADED
EQ SETFLAG
*
* CHECK IF SECONDARY OVERLAY CAN BE LOADED
*
SETSEC BX3 X2-X4
ZR X3,ABTNIP NO ROOM FOR SECONDARY
LX7 1 SHIFT FOR CHECKING SEC-OVL-LOADED BIT
BX3 X2*X7 MASK OFF SECONDARY-OVERLAY-LOADED BIT
NZ X3,ABTNIP IF ANOTHER SEC OVL STILL EXECUTING
*
* SET SECONDARY-OVERLAY-LOADED BIT
*
SETFLAG BX7 X7+X2 SET BIT TO INDICATE OVL LOADED
SA7 OVLFLAG
DEBUG2 ENDIF
* 043800
* STATISTICS COUNT IF STAT IS ON 043900
* 044000
IFNE STAT,1,1
IFEQ DEBUG,1
SA1 OVLNAMP+B4
MX0 -18 MASK FOR CALL COUNT
BX7 -X0*X1 (X7)=OLD CALL COUNT
BX4 X0*X1 (X4) = REST OF WORD = OVERLAY NAME
ENDIF
IFEQ STAT,1
SX7 X7+B1 INCREMENT CALL COUNT
BX7 -X0*X7 PREVENT OVERFLOW
BX7 X7+X4 RESTORE STAT ENTRY
SA7 A1
ENDIF
IFEQ DEBUG,1
SA2 CURRENT (X2)=CURRENT WORD TO STORE OVLNAME
BX7 X4 X7 = OVERLAY NAME
SA3 OVLCALLX (X3)=RETURN ADDR
SA7 X2 SET OVERLAY NAME
LX7 X3
SA7 X2+B1 SET RETURN ADDR
SB6 A7+B1 INCR CURRENT ADDR
SB5 ENDBUF
LT B6,B5,NOTEND IF CURRENT GR ENDBUF
SB6 BEGBUF SET CURRENT TO BEGBUF
NOTEND SX7 B6
SA7 A2
ENDIF
*
* CHECK IF OVERLAY ALREADY LOADED
*
SA2 LEVELS LOADED PRIMARY OVERLAY
SA3 A2+B1 LOADED SECONDARY OVERLAY
EQ B3,B0,PRI CURRENT IS PRIMARY OVERLAY
BX2 X3 CURRENT IS SECONDARY OVERLAY
PRI BX4 X2-X6
MX0 12
BX4 X0*X4 LEVEL NUMBERS COMPARED
ZR X4,JUMPX CURRENT IS SAME TO THE LOADED
BX4 X3-X0 CHECK OVERSIZE FLAG IN X3
MX7 0
NZ X4,OVLSEC4 LOADED PRIMARY IS NORMAL IF ANY
SA7 A2 CLEAR PRIMARY IF LOADED IS OVERSIZED
SA7 A3 CLEAR OVERSIZE FLAG
OVLSEC4 PL X5,OVLSEC3 CURRENT IS NORMAL SIZE LOAD
BX7 X0 FLAG IN LEVELS+1 IF CURRENT IS OVERSIZED
SA7 A3
OVLSEC3 SA6 OVLADR1 SET UP OVERLAY 2ND PARAMETER WORD
MX0 42 MASK FOR OVLNAME
SA1 B4+OVLNAMP
BX7 X0*X1 X7 = OVERLAY NAME
SA7 A6+B1 SET UP 3RD PARAMETER FOR LOADER
STAT2 IFEQ STAT,1
SA1 STIMEP PARAMETER BLOCK FOR CALLING OTIME
RJ OTIME GET RTIME VALUE BEFORE CALL
STAT2 ENDIF
*
* LOAD OVERLAY
*
*IF,-DEF,MSS
LOADREQ OVLADR,RCL
*ENDIF
*IF,DEF,MSS FOR CDC INTERNAL USE ONLY
SA2 OVLADR2 OVLNAME IN X2
SA3 OVLADR1 EXTRACT THE LEVELS
MX4 12
BX3 X4*X3 L1/L2 IS THE FIRST 12 BITS
LX3 12
BX1 X2+X3 OVLNAME/L1/L2 WORD
RJ =XFOL.LOV
MX4 42
SA2 OVLADR1 STORE FWA INTO PARAM BLOCK
BX2 X4*X2
SX3 B7 RETURNED FWA
BX7 X2+X3
SA7 A2
*ENDIF FOR CDC INTERNAL USE ONLY
STAT3 IFEQ STAT,1
SA1 ST$NOL INCREMENT TOTAL NUMBER OF OVERLAY LOADS
SX6 1
IX6 X6+X1
SA6 ST$NOL
SA1 ETIMEP PARAMETER BLOCK FOR CALLING OTIME
RJ OTIME GET RTIME VALUE AFTER CALL
SA1 STIME STARTING RTIME VALUE
MX0 24D MASK FOR RTIME MILLESECOND VALUE
BX1 -X0*X1 CLEAR SECONDS FIELD
SA2 ETIME ENDING RTIME VALUE
BX2 -X0*X2 CLEAR SECONDS FIELD
IX6 X2-X1 ELAPSED TIME FOR SWAPIN
SA1 ST$LOL LARGEST TIME SPENT IN OVLCALL
IX5 X1-X6 DETERMINE IF LATEST TIME INTERVAL IS LARGER
PL X5,OVLSEC5 IF PREVIOUS TIME INTERVAL WAS LARGER
SA6 ST$LOL SAVE NEW LARGEST TIME INTERVAL
OVLSEC5 SA3 ST$TOL PREVIOUS CUMULATIVE VALUE
IX6 X3+X6 NEW CUMULATIVE VALUE
SA6 ST$TOL
STAT3 ENDIF
SX7 B0
SA7 OVLNAME CLEAR OVLNAME IN OVERLAY COMMON BLK
SA2 OVLADR1 X2 = RETURNED PARAMETER WORD
MX4 6
BX7 X2
LX4 54
BX4 X4*X2 SECONDARY LEVEL NUMBER OF THE LOAD
SB5 B0
ZR X4,SVLVL PRIMARY
SB5 1 SECONDARY
SVLVL SA7 LEVELS+B5 SAVE LOADED PARAMETER WORD
JUMPX SB6 X2 ENTRY POINT ADDRESS IN B6
* JUMP TO OVERLAY
*
JP B6 ENTRY POINT ADDR IN B6
*
* RETURN TO CALLING PROGRAM
*
RJMAIN BSS 0
DEBUG3 IFEQ DEBUG,1
*
* CLEAR FLAG OF LAST OVERLAY LOADED
*
SX6 B0 USED TO CLEAR OVLFLAG
SA1 OVLFLAG
LX1 57 CHECK PRIMARY-OVL-LOADED-FIRST BIT
NG X1,PRIFIRST IF PRI OVL LOADED FIRST
LX1 2 CHECK IF PRI OVL ALSO LOADED
PL X1,CLRFLAG IF ONLY SEC OVL LOADED
SX6 2 CLEAR PRI-OVL-LOADED BIT
EQ CLRFLAG
PRIFIRST LX1 1 CHECK IF SEC OVL ALSO LOADED
PL X1,CLRFLAG IF ONLY PRI OVL LOADED
SX6 4 CLEAR SEC-OVL-LOADED BIT
CLRFLAG SA6 A1
DEBUG3 ENDIF
SA1 ADDRPTR X1 = ADDR FOR STORING NEXT RET ADDR
SX6 X1-1 X6 = ADDR CONTAINING CURRENT RET ADDR
SA6 A1
SB2 X6
JP B2 JUMP TO RETADDR TO RETURN
IFEQ DEBUG,1
ABTNIP SX6 DOVLCAL1 REASON CODE FOR DUMPING FL
SA6 DMPFLG
RJ RDUMP DUMP NIP-S FIELD LENGTH
SA1 MSGADDR
RJ OMSG ISSUE DAYFILE MESSAGE
ABORT ABORT SINCE OVERLAY WAS NOT LOADED
MSG DIS ,*OVERLAY NOT LOADED*
MSGADDR VFD 60/MSG PTR TO DAYFILE MESSAGE
BSSZ 1
XOVLC DATA L*OVLCL*
TEMP BSS 1
ENDIF
STAT4 IFEQ STAT,1
EXT OTIME
STIMEP VFD 60D/STIME
ETIMEP VFD 60D/ETIME
STIME BSS 1 START TIME FOR COMPARING SWAPIN TIME DELAY
ETIME BSS 1 END TIME FOR COMPARING SWAPIN TIME DELAY
STAT4 ENDIF
END