mirror of
https://github.com/PDP-10/its.git
synced 2026-04-25 03:45:11 +00:00
Edit SAIL files to be like the originals from ITS.
Rename according to SAIL file C.LIB[C,SYS]. Fix E stuff and remove trailing ^C and ^@s.
This commit is contained in:
413
src/c/cmac.insert
Normal file
413
src/c/cmac.insert
Normal file
@@ -0,0 +1,413 @@
|
||||
;
|
||||
; PDP-10 ITS IMPLEMENTATION OF CMAC MACHINE
|
||||
;
|
||||
; ALAN SNYDER
|
||||
; 17 APRIL 1977
|
||||
;
|
||||
|
||||
; C EXTERNAL VARIABLE NAMES ARE PREFIXED WITH "Z" IN ORDER
|
||||
; TO AVOID CONFLICTS WITH STANDARD SYMBOLS
|
||||
|
||||
; STATIC VARIABLES ARE REFERENCED BY SYMBOLS OF THE FORM
|
||||
; I1234. STRING LITERALS ARE REFERENCED BY SYMBOLS OF THE
|
||||
; FORM S1234. INTERNAL LABELS ARE IMPLEMENTED USING SYMBOLS
|
||||
; OF THE FORM L1234.
|
||||
|
||||
RELOCATABLE
|
||||
.MLLIT==1
|
||||
|
||||
A==1 ; "A" REGISTER
|
||||
B==2 ; "B" REGISTER
|
||||
T==3 ; SCRATCH REGISTER
|
||||
L==14 ; STACK FRAME POINTER
|
||||
M==15 ; PARAMETER LIST POINTER
|
||||
P==17 ; STACK TOP POINTER
|
||||
|
||||
RADIX 10.
|
||||
|
||||
; STUFF FOR STATISTICS GATHERING
|
||||
|
||||
%MOVE==0 ; COUNT OF MOVE INSTRUCTIONS
|
||||
%OPR==0 ; COUNT OF OPERATE INSTRUCTIONS
|
||||
%JUMP==0 ; COUNT OF CONDITIONAL JUMP INSTRUCTIONS
|
||||
%CONT==0 ; COUNT OF CONTROL INSTRUCTIONS
|
||||
%KEY==0 ; COUNT OF MISCELLANEOUS KEYWORD MACROS
|
||||
%DATA==0 ; SIZE OF STATIC DATA AREA
|
||||
|
||||
DEFINE INFORM A,B
|
||||
IF2,[ PRINTX / A = B
|
||||
/]
|
||||
TERMIN
|
||||
|
||||
; END OF STATISTICS STUFF
|
||||
|
||||
DEFINE LAUTO R,OFFSET ; LOAD AUTO VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R,OFFSET(L)
|
||||
TERMIN
|
||||
|
||||
DEFINE LEXTRN R,NAME ; LOAD EXTERNAL VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R,Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE LSTAT R,N ; LOAD STATIC VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R,I!N
|
||||
TERMIN
|
||||
|
||||
DEFINE LLIT R,N ; LOAD INTEGER LITERAL
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R,[!N!]
|
||||
TERMIN
|
||||
|
||||
DEFINE LPARM R,N ; LOAD PARAMETER
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R,N(M)
|
||||
TERMIN
|
||||
|
||||
DEFINE LVPTR R1,R2 ; LOAD VIA POINTER
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R1,(R2)
|
||||
TERMIN
|
||||
|
||||
DEFINE LREG R1,R2 ; LOAD FROM REGISTER
|
||||
%MOVE==%MOVE+1
|
||||
MOVE R1,R2
|
||||
TERMIN
|
||||
|
||||
DEFINE STAUTO R,OFFSET ; STORE INTO AUTO VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEM R,OFFSET(L)
|
||||
TERMIN
|
||||
|
||||
DEFINE STEXTN R,NAME ; STORE INTO EXTERNAL VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEM R,Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE STSTAT R,N ; STORE INTO STATIC VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEM R,I!N
|
||||
TERMIN
|
||||
|
||||
DEFINE STPARM R,N ; STORE INTO PARAMETER
|
||||
%MOVE==%MOVE+1
|
||||
MOVEM R,N(M)
|
||||
TERMIN
|
||||
|
||||
DEFINE STVPTR R1,R2 ; STORE VIA POINTER
|
||||
%MOVE==%MOVE+1
|
||||
MOVEM R1,(R2)
|
||||
TERMIN
|
||||
|
||||
DEFINE LAAUTO R,OFFSET ; LOAD ADDRESS OF AUTO VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEI R,OFFSET(L)
|
||||
TERMIN
|
||||
|
||||
DEFINE LAEXTN R,NAME ; LOAD ADDRESS OF EXTERNAL VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEI R,Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE LASTAT R,N ; LOAD ADDRESS OF STATIC VARIABLE
|
||||
%MOVE==%MOVE+1
|
||||
MOVEI R,I!N
|
||||
TERMIN
|
||||
|
||||
DEFINE LAPARM R,N ; LOAD ADDRESS OF PARAMETER
|
||||
%MOVE==%MOVE+1
|
||||
MOVEI R,N(M)
|
||||
TERMIN
|
||||
|
||||
DEFINE LASTRG R,N ; LOAD ADDRESS OF STRING LITERAL
|
||||
%MOVE==%MOVE+1
|
||||
MOVEI R,S!N
|
||||
TERMIN
|
||||
|
||||
DEFINE CMINUS R ; ARITHMETIC MINUS
|
||||
%OPR==%OPR+1
|
||||
MOVN R,R
|
||||
TERMIN
|
||||
|
||||
DEFINE CNOT R ; BITWISE NEGATION
|
||||
%OPR==%OPR+1
|
||||
SETCA R,
|
||||
TERMIN
|
||||
|
||||
DEFINE CADD ; INTEGER ADDITION
|
||||
%OPR==%OPR+1
|
||||
ADD A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE CSUB ; INTEGER SUBSTRACTION
|
||||
%OPR==%OPR+1
|
||||
SUB A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE CMUL ; INTEGER MULTIPLICATION
|
||||
%OPR==%OPR+1
|
||||
IMUL A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE CDIV ; INTEGER DIVISION
|
||||
%OPR==%OPR+1
|
||||
MOVE T,B
|
||||
IDIV A,B
|
||||
MOVE B,T
|
||||
TERMIN
|
||||
|
||||
DEFINE CMOD ; INTEGER REMAINDER
|
||||
%OPR==%OPR+1
|
||||
MOVE T,B
|
||||
IDIV A,B
|
||||
MOVE A,B
|
||||
MOVE B,T
|
||||
TERMIN
|
||||
|
||||
DEFINE CLS ; LEFT SHIFT
|
||||
%OPR==%OPR+1
|
||||
LSH A,(B)
|
||||
TERMIN
|
||||
|
||||
DEFINE CRS ; RIGHT SHIFT
|
||||
%OPR==%OPR+1
|
||||
MOVN T,B
|
||||
LSH A,(T)
|
||||
TERMIN
|
||||
|
||||
DEFINE CAND ; BITWISE AND
|
||||
%OPR==%OPR+1
|
||||
AND A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE COR ; BITWISE OR
|
||||
%OPR==%OPR+1
|
||||
IOR A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE CXOR ; BITWISE XOR
|
||||
%OPR==%OPR+1
|
||||
XOR A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE PINC ; POINTER INCREMENT
|
||||
%OPR==%OPR+1
|
||||
ADD A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE PDEC ; POINTER DECREMENT
|
||||
%OPR==%OPR+1
|
||||
SUB A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE PSUB ; POINTER SUBTRACT
|
||||
%OPR==%OPR+1
|
||||
SUB A,B
|
||||
TERMIN
|
||||
|
||||
DEFINE JNULL N ; JUMP IF NULL POINTER
|
||||
%JUMP==%JUMP+1
|
||||
JUMPE A,L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JNNULL N ; JUMP IF NON-NULL POINTER
|
||||
%JUMP==%JUMP+1
|
||||
JUMPN A,L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JEQ N ; JUMP IF EQUAL
|
||||
%JUMP==%JUMP+1
|
||||
CAMN A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JNE N ; JUMP IF NOT EQUAL
|
||||
%JUMP==%JUMP+1
|
||||
CAME A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JLT N ; JUMP IF LESS THAN
|
||||
%JUMP==%JUMP+1
|
||||
CAMGE A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JGT N ; JUMP IF GREATER THAN
|
||||
%JUMP==%JUMP+1
|
||||
CAMLE A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JLE N ; JUMP IF LESS THAN OR EQUAL
|
||||
%JUMP==%JUMP+1
|
||||
CAMG A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE JGE N ; JUMP IF GREATER THAN OR EQUAL
|
||||
%JUMP==%JUMP+1
|
||||
CAML A,B
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE HEAD ; HEADER MACRO
|
||||
%KEY==%KEY+1
|
||||
TERMIN
|
||||
|
||||
DEFINE CEND ; END MACRO
|
||||
%KEY==%KEY+1
|
||||
INFORM [TOTAL NO. OF INSTRUCTIONS]\%MOVE+%OPR+%JUMP+%CONT
|
||||
INFORM [STATIC DATA AREA]\%DATA
|
||||
INFORM [NO. OF MOVE INSTRUCTIONS]\%MOVE
|
||||
INFORM [NO. OF OPERATE INSTRUCTIONS]\%OPR
|
||||
INFORM [NO. OF CONDITIONAL JUMPS]\%JUMP
|
||||
INFORM [NO. OF OTHER CONTROL INSTRUCTIONS]\%CONT
|
||||
INFORM [NO. OF OTHER KEYWORD MACROS]\%KEY
|
||||
END
|
||||
TERMIN
|
||||
|
||||
DEFINE CENTRY NAME ; DECLARE ENTRY NAME
|
||||
%KEY==%KEY+1
|
||||
.GLOBAL Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE CEXTRN NAME ; DECLARE EXTERNAL NAME
|
||||
%KEY==%KEY+1
|
||||
.GLOBAL Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE PURE ; BEGIN PURE STUFF
|
||||
%KEY==%KEY+1
|
||||
TERMIN
|
||||
|
||||
DEFINE IMPURE ; BEGIN IMPURE STUFF
|
||||
%KEY==%KEY+1
|
||||
TERMIN
|
||||
|
||||
DEFINE CEQU NAME ; DEFINE EXTERNAL SYMBOL
|
||||
%KEY==%KEY+1
|
||||
Z!NAME:
|
||||
TERMIN
|
||||
|
||||
DEFINE LABDEF N ; DEFINE LABEL
|
||||
%KEY==%KEY+1
|
||||
L!N:
|
||||
TERMIN
|
||||
|
||||
DEFINE STATIC N ; DEFINE STATIC VARIABLE
|
||||
%KEY==%KEY+1
|
||||
I!N:
|
||||
TERMIN
|
||||
|
||||
DEFINE STRDEF N ; DEFINE STRING CONSTANT
|
||||
%KEY==%KEY+1
|
||||
S!N:
|
||||
TERMIN
|
||||
|
||||
DEFINE LINNUM N ; LINE NUMBER MACRO
|
||||
%KEY==%KEY+1
|
||||
TERMIN
|
||||
|
||||
DEFINE ADCON NAME ; DEFINE ADDRESS CONSTANT
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+1
|
||||
Z!NAME
|
||||
TERMIN
|
||||
|
||||
DEFINE SADCON N ; DEFINE STATIC ADDRESS CONSTANT
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+1
|
||||
I!N
|
||||
TERMIN
|
||||
|
||||
DEFINE INTCON I ; DEFINE INTEGER CONSTANT
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+1
|
||||
I
|
||||
TERMIN
|
||||
|
||||
DEFINE LABCON N ; DEFINE LABEL CONSTANT
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+1
|
||||
L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE STRCON N ; DEFINE STRING CONSTANT
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+1
|
||||
S!N
|
||||
TERMIN
|
||||
|
||||
DEFINE CZERO N ; DEFINE BLOCK OF ZEROES
|
||||
%KEY==%KEY+1
|
||||
%DATA==%DATA+N
|
||||
BLOCK N
|
||||
TERMIN
|
||||
|
||||
DEFINE PROLOG FNO,FNAME ; DEFINE FUNCTION PROLOG
|
||||
%CONT==%CONT+1
|
||||
Z!FNAME:
|
||||
PUSH P,L
|
||||
PUSH P,M
|
||||
MOVE M,A
|
||||
HRRZI L,-3(P)
|
||||
ADDI P,FS!FNO-1
|
||||
TERMIN
|
||||
|
||||
DEFINE EPILOG FNO,FSIZ ; DEFINE FUNCTION EPILOG
|
||||
%CONT==%CONT+1
|
||||
JRST EPILG" ; USE AUX ROUTINE
|
||||
FS!FNO==FSIZ ; MAKE SYMBOL FOR PROLOG
|
||||
TERMIN
|
||||
|
||||
DEFINE CCALL NARGS,ARGP,NAME ; CALL FUNCTION
|
||||
%CONT==%CONT+1
|
||||
HRRZI A,ARGP(L) ; SET UP ARG PTR
|
||||
HRLI A,-NARGS ; SET UP NARGS
|
||||
PUSHJ P,Z!NAME ; DO THE CALL
|
||||
TERMIN
|
||||
|
||||
DEFINE CALREG NARGS,ARGP,REG ; CALL FUNCTION VIA POINTER
|
||||
%CONT==%CONT+1
|
||||
MOVE T,REG
|
||||
HRRZI A,ARGP(L) ; SET UP ARG PTR
|
||||
HRLI A,-NARGS ; SET UP NARGS
|
||||
PUSHJ P,(T) ; DO THE CALL
|
||||
TERMIN
|
||||
|
||||
DEFINE CRETRN ; RETURN
|
||||
%CONT==%CONT+1
|
||||
JRST EPILG"
|
||||
TERMIN
|
||||
|
||||
DEFINE CGOTO N ; UNCONDITIONAL JUMP
|
||||
%CONT==%CONT+1
|
||||
JRST L!N
|
||||
TERMIN
|
||||
|
||||
DEFINE LSWITCH N,DEFLT ; LIST SWITCH
|
||||
%CONT==%CONT+1
|
||||
MOVE T,[-N,,.+5]
|
||||
CAMN A,(T)
|
||||
JRST @N(T)
|
||||
AOBJN T,.-2
|
||||
JRST L!DEFLT
|
||||
TERMIN
|
||||
|
||||
DEFINE ELSWIT N,DEFLT
|
||||
TERMIN
|
||||
|
||||
DEFINE TSWITCH LO,HI,DEFLT ; TABLE SWITCH
|
||||
%CONT==%CONT+1
|
||||
SUB A,[LO]
|
||||
JUMPL A,L!DEFLT
|
||||
CAILE A,HI-LO
|
||||
JRST L!DEFLT
|
||||
JRST @.+1(A)
|
||||
TERMIN
|
||||
|
||||
DEFINE ETSWIT LO,HI,DEFLT
|
||||
TERMIN
|
||||
Reference in New Issue
Block a user