Trailing-Edge
-
PDP-10 Archives
-
BB-JR93K-BB_1990
-
10,7/galaxy/glxlib/glxots.mac
There are 31 other files named glxots.mac in the archive. Click here to see a list.
TITLE GLXOTS - Primary Module for GALAXY Runtime System
SUBTTL Irwin L. Goverman/ILG/PJT/DPM 14-Apr-88
;
;
; COPYRIGHT (c) 1975,1976,1977,1978,1979,1980,1981,1982,
; 1983,1984,1985,1986,1987
; DIGITAL EQUIPMENT CORPORATION
; ALL RIGHTS RESERVED.
;
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE
; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
; SOFTWARE OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR
; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO
; AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
;
; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE
; WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT
; BY DIGITAL EQUIPMENT CORPORATION.
;
; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY
; DIGITAL.
SEARCH GLXMAC ;LOAD COMMON DEFINITIONS
PROLOG(GLXOTS,OTS) ;
OTSEDT==14 ;MODULE EDIT
;The purpose of this module is to provide a common access mechanism
; for the GALAXY object time system. When the library is loaded correctly
; this module starts at location VORG, defined in GLXMAC.
; The only code in this module is the library dispatch vector
; which is used to find routines and variables in the library.
;
; In the case of the library being loaded as a .REL file,
; this module generates no code, since there is no need for an
; dispatch vector
SUBTTL Table of Contents
; TABLE OF CONTENTS FOR GLXOTS
;
;
; SECTION PAGE
; 1. Table of Contents......................................... 2
; 2. Internal Loading Instructions............................. 3
; 3. Library Dispatch Vector................................... 4
SUBTTL Revision history
COMMENT \
005 Make GLXLIB run execute-only.
Change entry vectors to include PORTAL instructions. That
will clear PUBLIC mode and set CONCEALED mode. This allows
execute-only operation.
006 Restructure GLXLIB
1) Do compatibility check here instead of GLXINT.
2) Create data pages here instead of GLXINT.
3) Rework CDO macro. Don't PUSHJ to the the unimplemented
stopcode since this may not work if execute-only.
4) Create new stopcodes and global symbols so that any module
may call them. The stopcodes are:
.UNRTN::STOPCD(UNR,HALT,,<Unimplemented routine executed>)
.OBRTN::STOPCD(OBR,HALT,,<Obsolete routine executed>)
.OORTN::STOPCD(OOR,HALT,,<OTS only routine executed>)
007 4/6/81 Add "start address" for beginning of dispatch table.
012 10462 Change $STOP to STOPCD.
14-Nov-86 /BAH
013 10616 Change K%SOUT references to OUTSTRs to avoid ill mem
refs if GLXLIB hasn't been initialized yet.
14-Apr-88 /DPM
014 10671 Move setup of .JBVER here from GLXVER so only the OTS has
to have library's version number. Setting .JBVER in
GLXVER made problems for other programs to have their
own version numbers.
23-Jun-89 /RCB
\ ;End of revision history
SUBTTL Check for neccessity of this module
;Since GLXOTS is the first module loaded, define the start of the data space
$GDATA D%BEG,0 ;First location in the data pages
$DATA OTSDAT,0 ;Dummy data slot for OTS
SUBTTL Library Dispatch Vector
; This vector is used by all non-OTS modules to dispatch to the
; proper routines in the OTS.
;
IFN GLXPURE,< ;;IF OTS
DEFINE CDO (X),< ;;MACRO TO DEFINE ENTRY POINTS
IFB <X>,<PORTAL .UNRTN> ;;UNIMPLEMENTED ROUTINES
IFNB <X>,< ;;FOR DEFINED ENTRY POINTS...
GLOB X ;;DECLARE GLOBAL SYMBOM
PORTAL X ;;POINT TO ENTRY
> ;;END OF IFNB <X> CONDITIONAL
> ;;END OF CDO MACRO
> ;;END OF IFN GLXPURE CONDITIONAL
IFE GLXPURE,< ;;IF LINKABLE LIBRARY
DEFINE CDO (X),< ;;MACRO TO DEFINE ENTRY POINTS
IFNB <X>,<GLOB X> ;;DECLARE SYMBOL GLOBAL
> ;;END OF CDO MACRO
> ;;END OF IFE GLXPURE CONDITIONAL
DEFINE NT(X),< ;;MACRO TO ALLOW GLXINI LOCAL ENTRIES
CDO X ;;GLXOTS MACRO IS LIKE CDO
> ;;END NT MACRO
LSTOF. ;TURN OFF LISTING
GLXOTS::LIBVEC ;DEFINE ENTRY VECTOR
LSTON. ;TURN ON LISTING
.UNRTN::STOPCD (UNR,HALT,,<Unimplemented routine executed>) ;++ NON-EXISTENT ROUTINES
.OBRTN::STOPCD (OBR,HALT,,<Obsolete routine executed>) ;++ ANCIENT ROUTINES
.OORTN::STOPCD (OOR,HALT,,<OTS only routine executed>) ;++ SHOULD NEVER HAPPEN
IFN GLXPURE,<
.ORG 137
EXP GLXVRS ;SETUP VERSION NUMBER OF GLXLIB.EXE
.ORG
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1971,1987. ALL RIGHTS RESERVED.
\;END COPYRIGHT MACRO
>
SUBTTL Object Time System -- Initial startup
; Here from GLXINI (the bootstrap module). This code is only needed if
; the user acceses the library as an OTS high segment.
;
; Create the library's data pages. On TOPS-10, this requires 2 PAGE. UUOs.
; The first to create the page fault handler's data page just below the high
; segment origin. The second create the actual data pages referenced by all
; GLXLIB modules. On TOPS-20, there is no page fault handler. Creating the
; data pages requires touching each page. A BLT (through a call to .ZCHNK)
; does this nicely.
;
; Once the data pages have been created, OTS initialization is completed
; by calling I%INIT in GLXINT.
;
OTSINI:
IFE GLXPURE,< ;IF LINKABLE LIBRARY
PUSHJ P,.OORTN ;HOW DID WE GET HERE ??
> ;END OF IFE GLXPURE CONDITIONAL
IFN GLXPURE,< ;IF OTS
HLRZ TF,S1 ;GET VERSION # LOADED GY GLXINI
CAIE TF,%%.GLX ;SKEW ?
JRST OTSERR ;YES
HRRZS S1 ;STRIP OFF VERSION
PUSH P,S1 ;SAVE S1
PUSH P,S2 ;SAVE S2
PUSHJ P,CREDAT ;CREATE THE PAGES
POP P,S2 ;RESTORE S2
POP P,S1 ;RESTORE S1
SETOM OTSDAT ;INDICATE GETSEG OCCURED
PJRST I%INIT ;COMPLETE INITIALIZATION
OTSERR:
TOPS10 <
OUTSTR OTSETX ;PRINT ERROR MESSAGE
EXIT 1, ;STOP JOB
JRST .-1 ;DON'T CONTINUE
> ;END TOPS10
TOPS20 <
HRROI S1,OTSETX ;POINT TO TEXT
PSOUT ;PRINT ERROR MESSAGE
HALTF ;STOP JOB
JRST .-1 ;DON'T CONTINUE
> ;END TOPS20
OTSETX: ASCIZ |? GLXLIB version skew; recompile this program|
SUBTTL Object Time System -- Data page creation
CREDAT:
TOPS10 < ;TOPS-10 ONLY
MOVEI TF,D%END## ;GET LAST PAGE LOCATION
ADR2PG TF ;CONVERT TO A PAGE NUMBER
HRLI TF,.PAGCA ;SET UP PAGE. UUO FUNCTION
PAGE. TF, ;READ PAGE ACCESS CODES
TXO TF,PA.GNE ;CAN'T - ASSUME NOT THERE AND TRY CREATE
TXNN TF,PA.GNE ;PAGE EXIST ?
POPJ P, ;YES - ASSUME ALL PAGES THERE AND RETURN
MOVE TF,[.PAGCD,,S1] ;SET UP PAGE. UUO
MOVEI S1,D%END##-D%BEG ;GET NUMBER OF WORDS IN THE DATA PAGES
TXZE S1,PAGSIZ-1 ;FRACTION OF A PAGE ?
ADDI S1,PAGSIZ ;YES - ROUND UP
ADR2PG S1 ;CONVERT TO PAGE NUMBER
MOVNS S1 ;MAKE NEGATIVE REPEAT COUNT
MOVEI S2,D%BEG ;GET STARTING DATA PAGE ADDRESS
ADR2PG S2 ;CONVERT TO A PAGE NUMBER
PAGE. TF, ;CREATE THE LIBRARY DATA PAGES
SKIPA ;CAN'T CREATE IN CORE
POPJ P, ;RETURN
CAIE TF,PAGLE% ;WAS ERROR CORE LIMIT EXCEEDED?
JRST CREERR ;NO, JUST GO DOWN THE TUBES
MOVE TF,[.PAGCD,,S1] ;YES, LET'S TRY TO CREATE ON DISK
TXO S2,PA.GCD ;LITE CREATE ON DISK BIT
PAGE. TF, ;LET'S TRY AGAIN
SKIPA ;OH WELL, WE TRIED
POPJ P, ;LET'S PROCEED AND SEE WHAT HAPPENS
CREERR: OUTSTR [ASCIZ |? GLXOTS - Library data page create failed|]
$HALT ;STOP
JRST .-1 ;DON'T CONTINUE
> ;END OF TOPS-10 CONDITIONAL
TOPS20 < ;TOPS-20 ONLY
XMOVEI S1,D%BEG-D%END## ;GET LENGTH OF PAGE PAGES
XMOVEI S2,D%END## ;POINT TO LAST DATA WORD
$CALL .ZCHNK ;ZAP ALL WORDS
POPJ P, ;RETURN
> ;END OF TOPS-20 CONDITIONAL
> ;END OF IFN GLXPURE CONDITIONAL
SUBTTL End
OTS%L:
IFN GLXPUR<
END GLXOTS>
IFE GLXPUR<
END>