Trailing-Edge
-
PDP-10 Archives
-
decuslib10-05
-
43,50337/09/simrpa.mac
There are 3 other files named simrpa.mac in the archive. Click here to see a list.
SUBTTL Definitions used chiefly in the run time system
SALL
SEARCH SIMMAC,SIMMCR
RUNIV SIMRPA RTS parameters and definitions ;[104]
COMMENT;
AUTHOR: Lars Enderin 1973-1974
PURPOSE: Definition of macros, constants, and symbols used in run time
system modules and a few compiler modules.
Must be assembled together with SIMMAC and SIMMCR before
assembling any RTS module.
;
IF1,<END>
PRINTX UPDATES: [14 22 12,24,41,44,61,62,63,104,166,225,242,243,244,247,273,304] 12-Apr-78/LE
SUBTTL MACRO DEFINITIONS
;Access to low segment variables
DEFINE LOWADR(A)<
IFNB <A>,<XLOW=A>
IFB <A>,<XLOW=XIAC>
HRRZ XLOW,.JBOPS
>
DEFINE SETLOW(A)<
IFNB <A>,<XLOW=A>
IFB <A>,<XLOW=XIAC>
>
;Miscellaneous macros
DEFINE IFNONE(A)<CAIN A,NONE>
DEFINE TRIMSTACK <SUB XPDP,[1,,1]>
DEFINE ERRMAC(A)<IRP A,<
DEFINE A'ERR(N,MSG)<
RTSERR <N+Q'A'ENO>
IFN QDEBUG,<NOP [ASCIZ/
MSG
/]
>> ;;[41] To continue after a RTS error
DEFINE A'ERC(C,N,MSG)<
RTSERR <C>,<N+Q'A'ENO>
IFN QDEBUG,<NOP [ASCIZ/
MSG
/]
>>>>
DEFINE RIGHTHALF(A)<
SIZE(Q,A)
IFN <Q-^D18>,<Q==0>
IFN <%'A-^D35>,<Q==0>
IFE <Q>,
<CFAIL A is not right half>
>
DEFINE SAVEALLACS(y)<;;[242]
EXCH X16,.JBOPS
q==YUUOAC
IFNB <y>,<q==y>;;[242]
ST X17,q+X17(X16)
LI X17,q(X16)
BLT X17,q+X15(X16)
L X17,X16
EXCH X17,.JBOPS
ST X17,q+X16(X16)
L X17,q+X17(X16)
PURGE q
>
;-- Macros for SIMDDT interface ---;
DEFINE CALLOW <SETZM YDSCSW(XLOW)> ;;Allow ^C - REENTER
DEFINE CDEFER <AOS YDSCSW(XLOW)> ;;Defer call to SIMDDT to obj.code ret.
DEFINE CENABLE <SOS YDSCSW(XLOW)>
DEFINE CFORBID <HRROS YDSCSW(XLOW)>
;[41]
;Macro for retrieval of inserted value
;from SIMDDT at error recovery
DEFINE NEWVALUE(X)=<
LOWADR
L X,YDSIAR(XLOW)
>
SUBTTL Register assignments
XSAC= 1 ; System ac - parameters to RTS
XTAC= 2 ; (Additional) parameter to some RTS routines
XZBI= 3 ; (New) block instance pointer
XADR= 4 ; Code address
XX= 5 ; Temporary pointer
XZ= 6 ; Temporary pointer
XI= 7 ; Temporary ac
XJ= 10 ; Temporary ac
XK= 11 ; Temporary ac
XL= 12 ; Temporary ac
XM= 13 ; Temporary ac
XN= 14 ; Temporary ac
XRAC= XWAC1 ; Result accumulator (returned by thunk or procedure etc.)
XRAC1= XRAC+1 ; Extension of result (long real,etc)
XXPRL= XSAC ; Prefix level of a class
XXZBI= XSAC ; Block instance as parameter
XXZPC= XSAC ; Prototype pointer
XZAC= XSAC ; Points to acs object
XZPC= XSAC ; REF(ZPC)
XZCP= XSAC ; REF(ZCP)
XZDR= XX ; REF(ZDR)
XXZ= XZBI ; Block instance pointer as parameter
XOUT= XADR ; Exit address
XLOW= XIAC ; Standard register for access to low segment static area
;Registers used by OCIN and IO:
XSPEC= X10 ;Pointer run runswitch area record ZSW
XBASE= X11 ;Base register to dynamic area
XBYTE= X12 ;Current byte from a file specification
XNAME= X13 ;Current name from a file specification
XBUF= X14 ;Pointer to current input buffer
;[61]
XBH= XWAC5 ;Pointer to buffer area
XCC= XWAC4 ;Character count
XIP= XWAC6 ;Byte pointer for Image
XSW= X14 ;Copy of flags for file object
;Base address register for SIMDDT module:
XDBAS= X14
SUBTTL SWITCHES
;Common switches used by OCIN and IO:
DSW(SWIND,YOCSW,36,XLOW) ;On if indirect specification file being read
DSW(SWTTY,YOCSW+1,36,XLOW) ;On if specification file is being read from tty
DSW(SWSYSR,YOCSW+2,36,XLOW) ;On if sysin has been read
DSW(SWSYSE,YOCSW+3,36,XLOW) ;On if end of file occurred on sysin
DSW(SWSYST,YOCSW+4,36,XLOW) ;On if sysin from tty
DSW(SWSYSI,YOCSW+5,36,XLOW) ;On if sysin was an indirect file
DSW(SWERR,YOCSW+6,36,XLOW) ;On if error in DSK SPECIFICATION FILE
DSW(SWGSW,YOCSW+7,36,XLOW) ;On if global switch, off if local
DSW(SWSWERR,YOCSW+10,36,XLOW) ;On if error during switch handling
DSW(SWHLP,YOCSW+11,36,XLOW) ;On if help message typed
DSW(SWSYSD,YOCSW+12,36,XLOW) ;On if sysin not from disk or tty
DSW(SWCRLF,YOCSW+13,36,XLOW) ;On if cr-lf is wanted in tty message
DSW(SWTR,YOCSW+14,36,XLOW) ;On if text record being scanned
DSW(SWLOK,YOCSW+15,36,XLOW) ;On if lookup being performed
DSW(SWGC,YOCSW+16,36,XLOW) ;On if garbage collection performed
QSWNO=^D15 ;Number of switches
DEFINE ZEROSW=<
SETZM X0,YOCSW(XLOW)
HRLI X0,YOCSW(XLOW)
HRRI X0,YOCSW+1(XLOW)
BLT X0,YOCSW+QSWNO-1(XLOW)
>
;Switches used in SA and SADEB
;[247]
DSW (SAGCPE,YSASW,0) ;On if i/o error on gcp.tmp
DSW (SWGCTE,YSASW,1) ;On if test output from gc
DSW (SWGCT2,YSASW,2) ;On if output on tty
DSW (SWGCT3,YSASW,3) ;On if output on sysout
DSW (SWGCT4,YSASW,4) ;On if gc runtime and low seg limit
; should be logged
SUBTTL RDINIT, definitions for Random Drawing [243]
DEFINE RDINIT(e)< ;;[243]
SEARCH SIMMAC,SIMMCR
EXTERN .YFARG,.YFADR ;;[205]
SALL
RTITLE RD'e
ENTRY .RD'e
ERRMAC RD
MACINIT
DEFINE XX(N)<
DEFINE ARG'N<N-1(XTAC)>
>
XX 1
XX 2
XX 3
XX 4
XX 5
SYN ARG1,RESULT
DEFINE RAND(N)<;;Basic drawing [1,2^35-1]
;;The random seed at @ARG'n is updated
L X0,@ARG'N
SKIPGE ;;Shift out sign bit if seed is negative
ADD [377777777777]
TRO 1 ;;Make odd always
MUL X0,[QMULTIPLIER]
ST X1,@ARG'N ;;Next seed value
TLZ X1,400K ;;Ignore sign (treat as pos number [1,2^35-1])
>
DEFINE MAKEREAL(N<1>)< ;;(0,2^35) to (0,1.0) floating point
FLTR X0,X1
FSC X0,N-44
>
DEFINE AR(A,B)<OFFSET(ZAR'A)+2(XWAC'B)>
DEFINE ARTEST(A,B)<
HLRZ XWAC'A,OFFSET(ZARSUB)(XWAC'B)
CAIE XWAC'A,QTSTAR
>
QMULTIPLIER==1
REPEAT ^D15,<QMULTIPLIER==QMULTIPLIER*5>;RESULT IS 5**15
QTSTAR==(<QREAL>B<%ZARTYP>+1B<%ZARSUB>)
>;;End RDINIT
SUBTTL Macro definitions used by SA and SADEB
DEFINE TEXT(T)<;; Output text t on tty
IFN QDEBUG,<
IFONA SWGCT2
>
OUTSTR [ASCIZ /T/]
IFN QDEBUG,<
IF
IFOFFA SWGCT3
GOTO FALSE
THEN
LI X2,[ASCIZ /T/]
EXEC SAPDTO
FI
>
>
DEFINE RTEXT(T)<;; Output <CR><LF>'t
IFN QDEBUG,<
IFONA SWGCT2
>
OUTSTR [ASCIZ /
'T/]
IFN QDEBUG,<
IF
IFOFFA SWGCT3
GOTO FALSE
THEN
LI X2,[ASCIZ /
'T/]
EXEC SAPDTO
FI
>
>
DEFINE RRTEXT(T)<;; Output <CR><LF><CR><LF>t
IFN QDEBUG,<
IFONA SWGCT2
>
OUTSTR [ASCIZ /
'T/]
IFN QDEBUG,<
IF
IFOFFA SWGCT3
GOTO FALSE
THEN
LI X2,[ASCIZ /
'T/]
EXEC SAPDTO
FI
>
>
SUBTTL CONSTANTS
.JBOPS= 135 ; Right half will contain base of static low segment data
;[14 22 15] ZYQ from 0 to 217
QFORER==215 ;Error number for library error
QILLUUO==216 ;Error number for illegal UUO
QRFAIL==217 ;Error number for RFAIL
QIOLP= ^D60 ; Default value of linesperpage
QPDLEN= 100 ; Length of pushdown stack
QXALEN= QNAC ; Length of extended accumulator area
QPOLMI= 2000 ; Min data pool length
QSALIM=2*QNAC+2 ;Reserve this space at end of pool
QZERLG=400 ;Number of words in ZER record, default.
QZERNO=1 ;Number of ZER records allocated initially, default.
;[304] Length of SIMDDT program
;***AUBEG
KI10,<QDSLG=15000>
KA10,<QDSLG=15050>
;***AUEND
QDSLGA=^D118+2*<%ZACSVA+4>;Length of additional data area
;Entry point offsets for SIMDDT
QDSINB= 10 ;Breakpoint
QDSINC= 12
QDSINE= 13 ;Error
QDSINR= 11 ;REENTER
QDSINI= 2 ;Initialise
QDSINS= 12 ;Remove any old breakpoints (on restart)
;[41] Define continuation codes used in RTSERR calls and in SIMDDT
QDSCON== 1 ;Continue with no arguments
QDSNIN== 2 ;Continue with new integer argument in YTXARG(XLOW)
QDSNIM== 3 ;Continue with new image read from tty
;Origins of error codes
DEFINE ERRCODE(N0,A)<..N==0
IFNB <N0>,<..N=N0>
IRP A,<
Q'A'ENO=..N
>
PURGE ..N
>
; Note!!! the following numbers must match those in SIMEDS.DOC !!!
ERRCODE QRTSE0,OC
ERRCODE 21,CP
ERRCODE 35,CS
ERRCODE 51,IO
ERRCODE 100,PH
ERRCODE 120,RD
ERRCODE 135,SA
ERRCODE 143,SS
ERRCODE 143,SU
ERRCODE 154,TX
;Common constants for OCIN and IO:
DV.TTY==1B14_-^D18
DV.DSK==1B1_-^D18
DV.MTA==1B13_-^D18
DV.TTA==1B4_-^D18
DV.TTU==1B5_-^D18
DV.DTA==1B11_-^D18
DV.DIR==1B15_-^D18
;[105] Data modes
.IOASL==0 ;ASCII
.IOASL==1 ;ASCII line
.IOPIM==2 ;Packed image
.IOIMG==10 ;Image
.IOIBM==13 ;Image binary
.IOBIN==14 ;(Blocked) binary
.IOIDP==15 ;Image dump
.IODPR==16 ;Dump as records without core buffering
.IODMP==17 ;Dump one record without core buffering
;Error codes for FORTRAN library functions, given in ac field of error instruction+1
ER%LIB==10 ;Normal library error, has message pointed to by next instr
ER%APR== 2 ;Faked apr trap, no message (arithmetic overflow in limiting cases)
;Bit masks for interrupt conditions
AP.REN=400000 ;Repetitive enable
AP.ILM= 20000 ;Illegal memory reference
AP.NXM= 10000 ;Non-existent memory (detects NONE)
AP.FOV= 100 ;Floating-point overflow
AP.AOV= 10 ;Arithmetic overflow
SUBTTL RUN TIME RECORDS
; ZFS record (file specification table entry)
DF ZFSLNK,-1,18,17 ;Link to next iospec entry
DF ZFSNAM,0,36,35 ;Sixbit logical device name
DF ZFSDEV,1,36,35 ;Sixbit physical device name
DF ZFSSIZ,2,18,17 ;Initial file size (blocks)
DF ZFSLIM,2,18,35 ;Max file size (blocks)
DF ZFSIML,3,18,17 ;Max image length for a directfile
DF ZFSFLG,3,18,35 ;Flag bits, e g access mode
DF ZFSAPP,3,1,35 ;Mode append
DF ZFSSUB,3,1,34 ;On if this entry has sub-file directory
DF ZFSWDB,3,1,31 ;[24] See ZFIWDB
DF ZFSNUM,3,1,32 ;[24] See ZFINUM
DF ZFSRON,3,1,33 ;[24] See ZFIRON
DF ZFSWLR,3,3,33 ;[24] Combines ZFSWDB,-NUM,-RON
DF ZFSFIL,4,36,35 ;Sixbit file name
DF ZFSEXT,5,18,17 ;Sixbit file extension
DF ZFSBUF,5,18,35 ;Number of buffers
DF ZFSPT,6,9,8 ;Protection code
DF ZFSPRJ,7,18,17 ;Project number
DF ZFSPRG,7,18,35 ;Programmer number
DF ZFSADR,7,36,35 ;Address to SFD block
DF ZFSARG,10,36,35 ;Argument
DF ZFSSCN,11,36,35
DF ZFSPPN,12,36,35 ;PPN in case of SFD
DF ZFSSFD,13,36,35 ;Name of sub-file directory
QFSLNG=11 ;Length of ZFS record without sfd:S
; ZFI RECORD (FILE OBJECT)
DF ZFISPC,2,36,35 ;FIRST WORD OF TEXT VARIABLE FOR FILE PARAMETER
DF ZFIFTR,2,17,35 ;POINTER TO FILE NAME RECORD
DF ZFIFLN,2,17,18 ;LENGTH OF FILE SPECIFICATION RECORD
DF ZFIIMG,4,36,35 ;FIRST WORD OF TEXT VARIABLE FOR IMAGE
DF ZFIICP,5,18,35 ;CURRENT POSITION
DF ZFIOPN,6,1,0 ;OPEN FAG
DF ZFIIF,6,1,1 ;INFILE FLAG
DF ZFIOF,6,1,2 ;OUTFILE AND PRINTFILE FLAG
DF ZFIPF,6,1,3 ;PRINTFILE FLAG
DF ZFIDF,6,1,4 ;DIRECTFILE FLAG
DF ZFIIN,6,1,5 ;THIS FILE CAN DO INPUT
DF ZFIOUT,6,1,6 ;THIS FILE CAN DO OUTPUT
DF ZFISFD,6,1,7 ;This file has a SFD record
DF ZFIDE,6,1,8 ;This file has an extended enter block
DF ZFIAPP,6,1,9 ;Append mode for this file
DF ZFIEND,6,1,10 ;Temporary end of file flag
DF ZFIECT,6,1,11 ;Eject has been done
DF ZFIFO,6,1,12 ;First output flag
DF ZFINB,6,1,13 ;Next sequential block should be read
;(Directfile only)
DF ZFIWDB,6,1,14 ;[24] Images on word boundary in the file
DF ZFINUM,6,1,15 ;[24] File is line numbered (implies ZFIWDB)
DF ZFIRON,6,1,16 ;[24] Access:RONLY
DF ZFIWLR,6,3,16 ;[24] Combines ZFIWDB,-NUM,-RON
DF ZFILBO,6,1,17 ;[44] Last call was to BREAKOUTIMAGE
DF ZFIFND,6,1,18 ;[61] On when no dialogue is wanted on file
; initialization (FIND??FILE called)
DF ZFIPGT,6,1,19 ;[63] On when OUTPUT or INPUT proc in progress on file
DF ZFINLE,6,1,20 ;[105] No lookup or enter should be done
DF ZFIBNW,6,1,21 ;[105] Buffers not wanted
DF ZFICHN,10,4,12 ;Channel number associated with this file object
;Placed in ac position for use in uuo's
DF ZFIBUF,10,18,35 ;Number of buffers
DF ZFIKAR,11,36,35 ;Device characteristics file status and type information
DF ZFITTY,11,1,14 ;Device is a tty
DF ZFIMTA,11,1,13 ;Device is a magtape
DF ZFIDSK,11,1,1 ;Device is a DSK
DF ZFITA,11,1,4 ;TTY is controlling the job
DF ZFITU,11,1,5 ;TTY is in use as a user terminal
DF ZFIDTA,11,1,11 ;Device is a dec tape
DF ZFIDIN,11,1,16 ;This device can do input
DF ZFIDOU,11,1,17 ;This device can do output
DF ZFISTI,12,36,35 ;Initial file status
DF ZFIDMO,12,4,35 ;[61] Data mode, part of status
DF ZFIUWC,12,1,31 ;[61] Use word count when computing size of data in buffer
DF ZFISYN,12,1,30 ;[61] On if synchronous input is wanted (stop on each buf)
DF ZFIDVN,13,36,35 ;Sixbit device name
DF ZFIOBH,14,18,17 ;Address of output buffer header block
DF ZFIIBH,14,18,35 ;Address of input buffer header block
;The following information is used in lookup or enter
DF ZFIFIL,15,36,35 ;File name (sixbit)
DF ZFIEXT,16,18,17 ;File extension
DF ZFID1,16,12,35 ;File creation date
DF ZFIPT,17,9,8 ;File protection
DF ZFIMOD,17,4,12 ;Data mode
DF ZFITIM,17,12,25 ;Creation time of day
DF ZFID2,17,12,35 ;User supplied date
DF ZFIPRJ,20,18,17 ;Project number
DF ZFIPRG,20,18,35 ;Programmer number
DF ZFIARG,20,36,35 ;Link to ZYS record when SFD
DF ZFINAM,21,36,35 ;Logical file name
DF ZFIPPN,22,36,35 ;Save area for ppn between lookup's
DF ZFIBFS,23,36,35 ;Buffer size for this file
QFILNG= 24 ;Length of file object
; ZFI class ZIF - infile object
DF ZIFEND,7,36,35 ;Endfile flag (byte pointer definition)
DSW ZIFEND,7,36 ;Switch definition
QIFLNG= 24 ;Length of infile object
; ZFI CLASS ZOF - Outfile object
DF ZOFBLK,24,18,17 ;No of blocks written
DF ZOFLIM,24,18,35 ;Max no of blocks
QOFLNG= 25 ;Length of outfile object
; ZOF CLASS ZPF - printfile object
DF ZPFSP,25,18,17 ;Spacing
DF ZPFLP,25,18,35 ;Linesperpage
DF ZPFLL,26,18,17 ;Last printed line
DF ZPFLIN,26,18,35 ;Line
QPFLNG= 27 ;Length of printfile object
; ZFI CLASS ZDF - directfile object
DF ZDFEND,7,36,35 ;Endfile flag - same position as for infile !!
DSW ZDFEND,7,36 ;Switch definition
DF ZDFIML,24,18,17 ;Max image length
DF ZDFLIM,24,18,35 ;Max valid ZDFLOC (last written record number)
DF ZDFWCT,25,18,17 ;Buffer word count ;[5]RTS
DF ZDFLOC,25,18,35 ;LOCATION
DF ZDFMOD,26,1,0 ;On if outimage has been done on directfile buffer
DF ZDFOUT,26,1,1 ;On if outimage was done last, not inimage
DF ZDFBLK,26,18,35 ;Number of written or read physical
;blocks during one inimage or one outimage
QDFLNG= 27 ;Length of directfile object
; CLASS ZBH - buffer header
DF ZBHLEN,0,18,17 ;Buffer area length
DF ZBHFRE,0,1,0 ;Occupied flag
DF ZBHLNK,0,17,35 ;Link to next buffer area
DF ZBHCON,0,1,18 ;Consecutive buffer area flag
DF ZBHUSE,1,1,0 ;Buffer ring use bit
DF ZBHZBU,1,18,35 ;Current buffer
DF ZBHBUP,2,36,35 ;Byte pointer for current buffer
DF ZBHCNT,3,36,35 ;Count of remaining characters in current buffer
; Class ZSW - runswitch record
DF ZSWDEV,0,36,35 ;Device in sixbit
DF ZSWFIL,1,36,35 ;File name in sixbit
DF ZSWEXT,2,18,17 ;Extension in sixbit
DF ZSWPPN,4,36,35 ;PPN
; Class ZBU - I/O buffer
DF ZBUSTA,4,18,35 ;File status when monitor finished buffer processing
DF ZBUUSE,5,1,0 ;Buffer use bit - indicates active data
DF ZBUSIZ,5,17,17 ;Buffer data area size (incl. the next word)
DF ZBUZBU,5,18,35 ;Address of next buffer in buffer ring
DF ZBUWCT,6,18,35 ;Number of actual data words in buffer
DF ZBUDAT,7,36,35 ;Buffer data area
; Declaration of ZYS used as SFD block*
DF ZYSARG,2,36,35 ;Argument
DF ZYSP1,4,36,35 ;PPN
DF ZYSSFD,5,36,35 ;First SFD name
; Declarations of ZXB used as extended lookup block
DF ZXBLG,1,18,35 ;Length of ZXB record
DF ZXBARG,2,36,35 ;Argument
DF ZXBP2,3,36,35 ;PPN or if left half=0 a pointer to sfd-block
DF ZXBFIL,4,36,35 ;File name
DF ZXBEXT,5,18,17 ;Extension
DF ZXBPRT,6,36,35 ;Protection etc
DF ZXBPT,6,9,8 ;[61] Protection field
DF ZXBLNG,7,36,35 ;File length in words
DF ZXBLEN,12,36,35 ;Estimated file length
DF ZXBALC,13,36,35 ;Allocated file length
Q==<OFFSET(ZBHFRE)>
ASSERT <IFN %ZBHFRE,<CFAIL ZBHFRE BIT NOT FIRST AS ASSUMED>>
OPDEF FREE [SKIPL Q]
OPDEF NOTFREE [SKIPGE Q]
OPDEF IFFREE [SKIPGE Q]
QZDRZPB=1B17-OFFSET(ZDRZPB)
SUBTTL SUBROUTINE DECLARATIONS
; Procedure summary
; =================
DEFINE PROCINIT(A)=<
QOCIN== 1
QOCIO== 2
QIO== 4
QIONF= 10
QOCEP= 20 ;;[61]
QALL= QIO+QIONF+QOCEP+QOCIN+QOCIO ;;[61]
QRTSYM= 777
Q==Q'A ;;Defines current module
DEFINE X(N,E,D,U,O)<
%U==0 ;;Defines using modules
IRP U,<%U==%U+Q'U>
IFN <QRTSYM-Q'D>,< ;;Not in the transfer vector
IFN <Q&%U>,<IFE <<Q'D>&Q>,<EXTERN E>> ;;Entry not in current module
IFN <<Q'D>&Q>,<IFN <Q'D-%U>,<INTERN E>> ;;Entry in current module
;;and used in other modules
>
IFN <Q&%U>,< ;;Used in this module, define opcode
IFB <O>,<
OPDEF N [PUSHJ XPDP,E]
>
IFNB <O>,<
OPDEF N [O E]
> >
>;;END X
;; CALL FORMAT: X(name,entry point,defining module,using modules[,opcode])
X(COPYSPEC,.OCIN6,OCIN,<OCIN,IONF>) ;;Copies information from ZFD to ZFI
X(CREATEFILE,.IOCF,IONF,<OCIN,IONF>) ;;Allocates buffers
X(ERRFILE,.IOERF,OCIO,<OCIN,IO>) ;;Same as FILEERROR
;;but file ref in XWAC1
X(FILEENTER,.IOENT,IONF,<OCIN,IONF>) ;;Enters a file
X(FILEERROR,.IOFER,OCIO,IONF) ;;Types standard error text
;;and logical name on tty
X(FILELOOKUP,.IOLOK,IONF,<OCIN,IONF>) ;;LOOKUP a file
X(FINDLOGICAL,.OCINJ,OCIN,<OCIN,IONF>) ;;Retrieves logical name
;;from a file spec
X(FIXSWITCH,.OCINF,OCIN,<OCIN,IONF>) ;;Scans and processes a number of
;;switches
X(FREEBUFF,.OCINC,OCIO,<OCIN,IO>) ;;Frees a buffer area
X(GETBUFF,.OCIN7,OCIN,<OCIN,IONF>) ;;Finds a free i/o buffer
X(GETBYTE,.OCING,OCIO,<OCIN,OCIO,IONF>) ;;Fetches next byte from YOCBUF,
;;skips line feed
X(GETCHANNEL,.OCIN8,OCIO,<OCIN,IONF>) ;;LOCATES A FREE CHANNEL IN YIOCHTB
X(GETNAME,.OCIN1,OCIO,<OCIN,IO,IONF>) ;;Packs next symbol in XNAME
X(GETREST,.OCINH,OCIO,OCIN) ;;Same as GETNAME but first byte
;;already in XBYTE
X(GETSPEC,.OCINB,OCIN,<OCIN,IONF>) ;;Unpacks a file specification into ZFD
X(LEGAL,.OCLA,OCIO,<OCEP,OCIO>) ;;[61] Skip if (X1) is a legal address
X(LINKBUFF,.OCIND,OCIO,<OCIN,IONF>) ;;Links a buffer ring
X(OUTENTER,.OCINI,OCIN,<OCIN,IONF>) ;;Enters an out- or printfile
;;possibly in append mode
X(OUTOCT,.OCOO,OCIO,<IONF,OCIO,OCEP>) ;;[61] Types last 3 octal digits of X0
X(PRINTFILE,.OCIN9,OCIO,<OCIO,OCIN>) ;;[61] Prints a file spec on tty
X(PRINTSPEC,.OCINE,IONF,<OCIN,IONF>) ;;Prints the entire file spec on tty
X(REOPEN,OCINK,RTSYM,IO) ;;Reopens a file already used
X(SETUPFILE,IOCOM,RTSYM,IO) ;;Performs all common file actions
X(SPECCOPY,.OCINZ,OCIN,<OCIN,IONF>) ;;[225] Copies spec to YOCBUF from
;; any input source
X(TTYSPEC,.OCINY,OCIN,<OCIN,IONF>) ;;[225] Gets specification line from TTY
X(TYPENAME,.OCIN2,OCIO,ALL) ;;Prints the contents of X0 in sixbit
;;on tty
X(TYPESPEC,.IOTYS,OCIO,ALL) ;;[61] Type entire file spec
X(TYPDEC,.OCDT,OCIO,<OCIO,OCEP>) ;;[61] Output X0 in decimal
X(TYPOCT,.OC8T,OCIO,<OCIO,OCEP>) ;;[61] Output X0 in octal
OPDEF OP [HRLI]
OPDEF OPZ [HRLZI]
QCHN==OFFSET(ZFICHN)
DEFINE FILOP(OP,X,Y)<
IFB <Y>,<HLL X,QCHN(XWAC1)>
IFNB <Y>,<HLL X,QCHN(Y)>
TLO X,(<OP>)
XCT X
>
DEFINE IOCHECK(X,Y,M)<
IFB <M>,<HRRI X,740000>
IFNB <M>,<HRRI X,M>
FILOP(STATZ,X,Y)
>
IFE QDEC20,<OPDEF PBOUT [OUTCHR X1]> ;;[225]
PURGE %U,Q,QIO,QIONF,QOCIN,QOCIO,QRTSYM
> ;End of PROCINIT
SUBTTL Prototypes and symbol tables for system classes
QFIEBL== -3 ;Default EBL of file classes
QFIDLE==2-QFIEBL ;Corresponding display length
;[63] Add ZCPPTA field
DEFINE DCLASS(NAM,ZCP,GCI,PTA,PRL,BLE,DLE,SBL,EBL,NRP,PL,KDP,PAR)<
DEFINE D%'NAM<
IFG <NAM-400K>,<EXTERN NAM'%S,NAM'%I,NAM'%M,NAM'%Y,NAM'%D>
IFNB <ZCP>,<
IF1,<IFNDEF .'ZCP,<EXTERN .'ZCP>>
Z .'ZCP
>
IFB <ZCP>,<Z>
BYTE (1)KDP(3)GCI(1)PTA(13)0(18)NAM'%S ;[63]
Z NAM'%I ;; INNER
XWD SBL,PRL
.'NAM:: XWD BLE,NAM'%M ;;Block length,map
XWD EBL,NAM'%Y ;;Effective block level, symbol table
XWD NRP,DLE ;;No of params,display length
BYTE (1)PAR(17)0(18)NAM'%D ;; Declaration coding
IFNB <PL>,<
PL ;;Formal param. descriptor
>
IFG <NAM-400K>,<
IFN <<.-.'NAM>-<NAM'%E-NAM>>,<CFAIL INCONSIST. PROT. FOR NAM>
>>
DEFINE E%'NAM<
IFNB <ZCP>,<
IF1,<IFNDEF .'ZCP,<EXTERN .'ZCP>>
Z .'ZCP
>
IFB <ZCP>,<Z>
BYTE (1)KDP(3)GCI(1)PTA(13)0(18)0 ;;[63]
Z 0 ;; INNER
XWD SBL,PRL
.'NAM:: XWD BLE,0 ;;Block length,map
XWD EBL,0 ;;Effective block level, symbol table
XWD NRP,DLE ;;No of params,display length
BYTE (1)PAR(17)0(18)0 ;; Declaration coding
IFNB <PL>,<
PL ;;Formal param. descriptor
>
IFG <NAM-400K>,<
IFN <<.-.'NAM>-<NAM'%E-NAM>>,<CFAIL INCONSIST. PROT. FOR NAM>
>>>
DEFINE DZSMCL(SN,RN,SA)<
SIXBIT/SN/
N==0
IRPC SN,<N==N+1>
IFL <N-7>,<Z>
IFNB <SA>,<N==SA>
IFB <SA>,<N==.+1>
RN'%Y:: <QSYSCL>B<%ZSMTYP>+N
>
;[14 22 12] Define ZSDSPI codes
SCALAR<Q,QIMAIN,QISYSIN,QISYSOUT,QIFIRST,QILAST,QISUC,QIPRED,QIPREV,QIEVTIME,QINEXTEV,QITIME,QICURRENT>
;[14 22 12] Define SPI field in DZSD macro
DEFINE DZSD(NAM,SPI,TYP,MOD,KND,OFS,ZCP)<
S==0
IFNB <SPI>,<S==SPI>
K==QSIMPLE
IFNB <KND>,<K==KND>
M==QDECLARED
IFNB <MOD>,<M==MOD>
N==0
IRPC NAM,<N==N+1>
IFG <N-^D12>,<PRINTX NAM too long>
Q==0
IFG <N-6>,<Q==1B0>
Q==Q+<S>B<%ZSDSPI>+<TYP>B<%ZSDTYP>+<M>B<%ZSDMOD>+<K>B<%ZSDKND>+OFS
EXP Q
SIXBIT/NAM/
IFE <TYP-QREF>,<
IFB <ZCP>,<PRINTX REF quantity should have qualif>
Z ZCP
>>
DEFINE SYSCLASS<
X<CLPB,SUSI,SSLG,SUPS,IOFI>>
DEFINE X(A)<..N==0
IRP A,<Q'A==..N
..N==..N+1>>
SYSCLASS
;;=== RTS standard prototype definitions ===;;
DCLASS(SSST,,,1,0,ZBI%S,3+.SIMVL-1,0,.SIMLV,,,1) ;=== SIMSET ===;
DCLASS(SSLG,,QSSLG,0,0,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>) ;=== LINKAGE ===;
DCLASS(SSHD,SSLG,QSSLG,0,1,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>) ;=== HEAD ===;
DCLASS(SSLK,SSLG,QSSLG,0,1,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>) ;=== LINK ===;
DCLASS(SUSI,SSST,QSUSI,1,1,ZSU%S,3+.SIMVL-1,0,.SIMLV,,,1) ;=== SIMULATION ===;
DCLASS(SUPS,SSLK,QSUPS,0,2,ZPS%S,3+.SIMVL,.SIMLV,<.SIMLV-1>) ;=== PROCESS ===;
DCLASS(SUMA,SUPS,QSUPS,0,3,ZPS%S,3+.SIMVL,.SIMLV,<.SIMLV-1>) ;=== MAIN PROGRAM =;
;--- ZFP for text parameter ---
PTX==<QTEXT>B<%ZTDTYP>+<QSIMPLE>B<%ZPDKND>+<QVALUE>B<%ZFPMOD>
PTX==PTX+OFFSET(ZFISPC)
DCLASS(IOFI,,QIOFI,1,,QFILNG,QFIDLE,-2,QFIEBL,1,<PTX>,,1) ;=== FILE ===;
DCLASS(IOIN,IOFI,QIOFI,1,1,QIFLNG,QFIDLE,-2,QFIEBL,,Z,,1) ;=== INFILE ===;
DCLASS(IOOU,IOFI,QIOFI,1,1,QOFLNG,QFIDLE,-2,QFIEBL,,Z,,1) ;=== OUTFILE ===;
DCLASS(IOPF,IOOU,QIOFI,1,2,QPFLNG,QFIDLE,-2,QFIEBL,,Z,,1) ;=== PRINTFILE ===;
DCLASS(IODF,IOFI,QIOFI,1,1,QDFLNG,QFIDLE,-2,QFIEBL,,Z,,1) ;=== DIRECTFILE ===;
SUBTTL GLOBAL VARIABLES
DEFINE STATIC(A,N)<
A= Q
IFB <N>,<Q==Q+1>
IFNB <N>,<Q==<N>+Q>>
Q==0
;Static low segment area definition
;----------------------------------
STATIC(YACSAV,20);[242] Accumulator save area for .OCSW
STATIC(YOCGS) ; Address of GETSEG routine
STATIC(YEDOFL) ; Number of edit overflows (accumulated)
STATIC(YIOLP) ; Linesperpage (default)
STATIC(YIOSAV) ; Save a value-type quantity here over storage allocation
STATIC(YJOBNO) ; Job number
STATIC(YDAYTM) ;Time of day at program start
STATIC(YRUNTM) ;Accumulated run time at prog start
;Variables used by SU (Simulation)
QLARGE=377777777777
STATIC(YSUNE) ;Address of NEXTEV routine
STATIC(YSULEV) ;Instruction to load SIMULATION block level to XSAC.
STATIC(YZERNO) ;Number of ZER records to be allocated initially.
STATIC(YZERLG) ;Number of words in a ZER record.
STATIC(YBATCH)
DSW SBATCH,YBATCH,36 ;On for a batch job
;SIMDDT area (not relocated by gc)
;---------------------------------
STATIC(YDSBCOM)
STATIC(YDSBSAV)
STATIC(YDSINC,4)
STATIC(YDSWIT)
DSW(YDSACT,YDSWIT,0) ;SIMDDT active
STATIC(YDSEAD)
STATIC(YDSENR)
STATIC(YDSZLA)
STATIC(YDSZLN)
STATIC(YDSNOG)
DSW SWNOGC,YDSNOG,36 ;On if garbage collection not allowed
STATIC(YDSLOAD) ;Address of DSLOAD routine
STATIC(YDSCAD) ;Approx. user address at ^C - .REENTER
STATIC(YOCOBLK,3) ;Open block for loading SIMDDT
;Make sure YSYSIN is at offset 61 OCTAL
QOBJAD==4 ;Number of words for YOBJAD
Q..==61-QOBJAD
;-- Note! we have some slack here if q. gt 0, otherwise move some declarations
Q.==Q..-Q
IFL Q.,<PRINTX Incorrect offset for YSYSIN>
IFG Q.,<Q==Q..>
PURGE Q.,Q..
;--- Object pointers collected here ---
;--------------------------------------
STATIC(YOBJAD,QOBJAD) ; Used by some RTS routines to save object addresses
; prior to calling garbage collector.
; The area is zero when not in use
QNGP=Q
STATIC(YSYSIN) ; REF(Infile) - points to standard sysin file obj
STATIC(YSYSOU) ; REF(Printfile) - points to standard sysout file obj
STATIC(YCSZAC) ; Address of newly created acs - set to zero
; when it has been copied to a display record.
; SIMDDT save area to be relocated by gc
; --------------------------------------
STATIC(YDSIAC)
STATIC(YDSCFO) ;Current file object
STATIC(YDSDFO) ;Display file object
STATIC(YDSSXCB) ;DS[2] save area for current pointer
STATIC(YDSRXCB) ;DS[2] save area for reset of current pointer
STATIC(YDSIFO) ;[41] SIMDDT input file object
STATIC(YDSBA1,1) ;[242] Saves possible SIMDDT base from (re)START of prog
STATIC(YDSDUM,2) ;[41]
STATIC(YDPATH) ;[244] Zero or pointer to default path block (NOTE not SIMDDT)
STATIC(YDSBAS)
STATIC(YDSTXT)
STATIC(YDSREF)
STATIC(YDSUFO) ;USE file object
STATIC(YDSIOT) ;Text object used by SIMDDT internally
STATIC(YDSXCB) ;Save XCB over USE command in SIMDDT
STATIC(YOCXCB) ;Saved main block address for SIMDDT and SAGC
STATIC(YSUPCP) ;Saves process address over possible garbage collection
STATIC(YSUSCP) ; --- " ---
STATIC(YSUPFT) ; --- " ---
STATIC(YSUPAC) ; --- " ---
QNGP=Q-QNGP ;Number of standard global pointers
STATIC(YIOBUF) ;Address to start of iobufs/end of iospec
STATIC(YIOCHT,20);Channel table
STATIC(YIOSPC) ;Start address of iospec table
STATIC(YIOZFS) ;Pointer to iospec entry during file object generation
STATIC(YTTIB) ;Address to tty input buffer
STATIC(YTTOB) ;Address to tty output buffer
;--- Variables used in SA to handle the storage pool ---
;-------------------------------------------------------
;;;;;;;
STATIC(YSASTA,0) ;Start of gcp.tmp dump record area
;;;;;;;
STATIC(YSATIM) ;Tim fixed runtime in millisec. updated at start of program
; before and after garbage collection
STATIC(YSAGCT) ; " Accumulated runtime for garbage collections
STATIC(YSAGCN) ; " Number of garbage collections
STATIC(YSADEA) ;Deallocation pointer
STATIC(YSATAU) ;TAU Float time between garbage collections
STATIC(YSAFES) ;F^ " estimate of active memory
STATIC(YSAFLA) ;FLAST " Last Ff^
STATIC(YSARES) ;R^ " estimate of allocation rate
STATIC(YSABES) ;B^ " estimate of garbage collection cost
STATIC(YSAR) ;R " allocation rate
STATIC(YSAA) ;A " accounting dependent parameter
STATIC(YSAL) ;L fixed storage pool area
STATIC(YSABOT) ; Start of storage pool.
STATIC(YSATOP) ; First free location of storage pool.
STATIC(YSALIM) ; Upper limit of storage pool.
; Space will however be reserved for a maximal acs object
; over and above that limit.
;;;;;;;
STATIC(YSAEND,0) ;End of gcp.tmp dump record area
;[273] Rename cells for virtual core handling
STATIC(YSANWA)
;STATIC(YSABH) ; Gcp.tmp buffer header address
STATIC(YSASW) ; Switch word with sagcpe (on if gcp.tmp error)
;[273]
STATIC(YSANWB)
;STATIC(YSAIMP) ;LOCAL IMAGE POINTER FOR DUMP ON SYSOUT
;[273]
STATIC(YSAFRZ) ;Do not relocate below address in this cell
;STATIC(YSAILC) ;ZTVLNG,,ZTVCP for local image
;[273]
STATIC(YSANWC)
;STATIC(YSAIBP) ;Local image byte pointer
STATIC(YSAZSU) ;Start of chain of SIMULATION blocks used
; in garbage collector
;;;;;;;
STATIC(YSANIN) ; A value of -1 specifies no initialisation of a newly
; allocated object. Any other value specifies that
; all allocated data words shall have this initial value
STATIC(YSAREL) ;If the storage pool must be moved, this is the
;quantity to be added to YSABOT.
STATIC(YSASAV,20);Save area for garbage collector
STATIC(YUUOAC,20);Save area for UUO handler.
;Data areas for OCIN:
STATIC(YOCSW,QSWNO) ;Switch area
STATIC(YOCRET) ;Return address to user program
STATIC(YOCSIN) ;Address to iospec entry for sysin
STATIC(YOCSOU) ;" " " sysout
STATIC(YOCBF1) ;Save area for buffer pointer during reading of indirect file
STATIC(YOCBF2) ;Save area for buffer pointer during reading of help file
STATIC(YOCBFN) ;Argument of global buffers switch if less 32
STATIC(YOCBFS) ;Argument of global buffers switch if not less 32
STATIC(YOCBST) ;Start adress of first i/o buffer
STATIC(YOCFD,7) ;Static ZFD record
STATIC(YOCFIL) ;Argument for global switch files
STATIC(YOCBUF,24);File specification buffer
STATIC(YOCBUE) ;Last word of buffer
STATIC(YOCINF) ;Indirect file name
STATIC(YOCPNT) ;Pointer to YOCBUF
;Variables used by TX
STATIC(YTXBN) ; Count of characters
STATIC(YTXBPE) ;Buffer pointer
STATIC(YTXBP) ; Buffer pointer
STATIC(YTXSGN) ; Sign information
STATIC(YTXTP) ; Buffer pointer
STATIC(YTXEXP) ; Used to save exponent in text editing
STATIC(YTXLT) ; Default "lowered ten" value in run time floating
; point fields. May be changed by TXLT.
; Used by the editing procedures
STATIC(YXACAD) ; Address of extended accumulators
STATIC(YFOXCB) ; XCB saved here over call to FORTRAN subroutine
STATIC(YTXDUM,3) ;Slack
STATIC(YOCUFL) ;[62] Count of underflows
STATIC(YDSCSW,1) ;Switch controlling ^C - REENTER:
; Negative: Cannot stop here
; Zero: May stop here
; Positive: Wait until return to object code
YTXB=YOCBUF ; LOCAL BUFFER IN TEXT HANDLING
STATIC(YTXZTV,2); Global text variable used as dummy argument in text
; and as save area for the text variable to be copied in TXCY
;---- Pushdown stack ----- should be last. ---;
;---------------------------------------------;
STATIC(YPDL,5) ;Space for a few error entries
STATIC(YOBJRT,QPDLEN) ; Actual push down stack - return address to SIMULA
; code will always be at this position
QPDEXT= 5 ;Number of additional cells in pdl - used on pdl ofl
STATIC(YPDEXT,QPDEXT) ;Pdl extension
STATIC(YDUMMY,0) ;Extra cells start here
;====== N O T E !!!!!!!!! ========;
;=== Put new entries here to minimize recompilations. Reorder later ===;
STATIC(YIOSIZ) ;Size switch arg if given in NEW
STATIC(YSASTE) ;Core allocation step length
STATIC(YSAHSZ) ;(Max) size of high segment
STATIC(YHEPPN) ;Standard ppn for help files, e g SIMRTS.HLP
STATIC(YDEPPN) ;Standard ppn for SIMDDT
STATIC(YRTPPN) ;Standard ppn for RTS
STATIC(YRTHGH) ;Hiseg name (initial)
STATIC(YOCGSB,0);GETSEG block for hiseg
STATIC(YOCDEV) ;Hiseg device
STATIC(YOCHNM) ;Hiseg name
STATIC(YZERO,2) ;Fill
STATIC(YOCPPN) ;ppn for GETSEG
STATIC(YZERO,1) ;Fill
STATIC(YOCREN) ;Saves .JBREN over OCGS
STATIC(YDSL35) ;Switch set by inimage if first word is a
;line number
;Used by SIMDDT
DSW SWLB35,YDSL35,36
STATIC(YDSIGS) ;Save area for break character pointer
;Set by inimage and used by SIMDDT
STATIC(YDSIAR) ;[41] New integer arg to continue after error
STATIC(YDSCLOSE) ;[41] Switch used by OCEP and SIMDDT to control closing of files
DSW (SDSCLO,YDSCLOSE,36) ;[41]
STATIC(YDSCRA) ;[41] switch used by SIMDDT and OCSP0
DSW (YDSSUP,YDSCRA,36) ;[41]
STATIC(YOCTXT,8) ;[225] Space for directory name or other string
..N==40-Q+YDUMMY
IFL <..N>,<CFAIL RPA static area exhausted>
STATIC(YDUM1,<..N>)
STATIC(YLOW) ; Start of dynamic core area
YCSWK1=YTXBN ;Work area for CS module
YCSWK2=YCSWK1+1
YCSWK3=YCSWK2+1
; ZFD record (SFD information)
DF ZFDDEV,YOCFD,36,35
DF ZFDFIL,YOCFD+1,36,35
DF ZFDEXT,YOCFD+2,18,17
DF ZFDPT,YOCFD+3,9,8
DF ZFDPRJ,YOCFD+4,18,17
DF ZFDPRG,YOCFD+4,18,35
DF ZFDPNT,YOCFD+5,36,35
DF ZFDSFD,YOCFD+6,36,35
END