mirror of
https://github.com/PDP-10/its.git
synced 2026-04-15 16:20:21 +00:00
282 lines
5.2 KiB
Plaintext
282 lines
5.2 KiB
Plaintext
typenames (char,int,float,double);
|
||
memnames (reg,auto,ext,stat,param,label,intlit,floatlit,string,
|
||
ix0,ix1,ix2,ix3,ix4,ia,iq);
|
||
regnames (x0,x1,x2,x3,x4,a,q,f);
|
||
size 1(char),4(int,float),8(double);
|
||
align 1(char),4(int,float),8(double);
|
||
class x(x0,x1,x2,x3,x4), r(a,q);
|
||
conflict (a,f),(q,f);
|
||
saveareasize 16;
|
||
pointer p0(1), p1(4);
|
||
offsetrange p1 (,);
|
||
returnreg q(char,int,p0,p1), f(double);
|
||
type int(r), char(r), float(f), double(f), p0(r), p1(x);
|
||
|
||
.sw: a,,1[x4];
|
||
+p0: -p0: +i:-i:&:^: .OR: -p0p0:<<: >>: r,M,1;
|
||
+p1: M,M,x; x,r,1; x,intlit,1;
|
||
-p1: x,r,1; x,intlit,1;
|
||
=+i: =&: =^: =OR: M,r,1;
|
||
*i: /i: q,M,q[a];
|
||
+d: -d: *d: /d: f,M,f;
|
||
%: q,M,a[q];
|
||
=<<: =>>: M,a,q; M,q,a;
|
||
&u0: auto|ext|stat|string|ia|iq,,r;
|
||
&u1: M,,x;
|
||
.BNOT: .ic: .ci: r,,1;
|
||
-ui: M,,r;
|
||
.cf: .cd: .if: .id: a,,f;
|
||
.fc: .dc: .fi: .di: f,,q;
|
||
.fd: M,,f;
|
||
.df: -ud: f,,1;
|
||
.ip0: .p0i: r,,1; M,,r;
|
||
.ip1: .p0p1: r,,x; M,,x;
|
||
.p1i: .p1p0: x,,r; M,,r;
|
||
++bi: M,,1;
|
||
++ai: M,,a[q];
|
||
M,,q[a];
|
||
++ap1: --ap1: M,M,x;
|
||
==i: !=i: <i: >i: <=i: >=i:
|
||
==p0: !=p0: <p0: >p0: <=p0: >=p0: r,M,M;
|
||
==d: !=d: <d: >d: <=d: >=d: f,M,M;
|
||
==p1: !=p1: <p1: >p1: <=p1: >=p1: x,M,M;
|
||
|
||
macros
|
||
|
||
+i: " AD#R #S"
|
||
-i: " SB#R #S"
|
||
*i: " MPY #S"
|
||
/i: %: " DIV #S"
|
||
+d: " DFAD #S"
|
||
-d: " DFSB #S"
|
||
*d: " DFMP #S"
|
||
/d: " DFDV #S"
|
||
=+i: " AS#S #R"
|
||
&: " AN#F #S"
|
||
=&: " ANS#S #F"
|
||
^: " ER#F #S"
|
||
=^: " ERS#S #F"
|
||
.OR: " OR#F #S"
|
||
=OR: " ORS#S #F"
|
||
|
||
>>:
|
||
(,intlit,): " #FRS %o(#'S)"
|
||
(,~intlit,): " LXL5 #S\n #FRS 0,5"
|
||
|
||
<<:
|
||
(,intlit,): " #FLS %o(#'S)"
|
||
(,~intlit,): " LXL5 #S\n #FLS 0,5"
|
||
|
||
=>>:
|
||
" LD#R #F
|
||
#RRS 0,#SL
|
||
ST#R #F"
|
||
|
||
=<<:
|
||
" LD#R #F
|
||
#RLS 0,#SL
|
||
ST#R #F"
|
||
|
||
+p0:
|
||
(,~intlit,): " #FRS 16\n AD#F #S\n #FLS 16"
|
||
(,intlit,): " ADL#R %co(#'S)"
|
||
|
||
-p0:
|
||
(,~intlit,): " #FRS 16\n SB#F #S\n #FLS 16"
|
||
(,intlit,): " SBL#R %co(#'S)"
|
||
|
||
+p1:
|
||
(M,M,): " LXL#R #S\n ADLX#R #F"
|
||
(x,r,): " #SLS 18\n ST#S .TEMP\n ADX#F .TEMP"
|
||
(x,intlit,): " EAX#R %o(#'S),#R"
|
||
|
||
-p1:
|
||
(,r,): " #SLS 18\n ST#S .TEMP\n SBX#F .TEMP"
|
||
(,intlit,): " EAX#R -%o(#'S),#R"
|
||
|
||
-ui: " LC#R #F"
|
||
-ud: " FNEG"
|
||
++bi: " AOS #F"
|
||
++ai: " LD#R #F\n AOS #F"
|
||
|
||
++ap1:
|
||
" LDX#R #F
|
||
EAX5 %o(#'S),#1
|
||
STX5 #F"
|
||
|
||
--ap1:
|
||
" LDX#R #F
|
||
EAX5 -%o(#'S),#1
|
||
STX5 #F"
|
||
|
||
.BNOT: " ER#F =-1"
|
||
&u0:
|
||
(ia|iq,,r):
|
||
"%if(%o(#'F), AD#F %co(#'F)\n,)\"
|
||
(ia,,q): " LLR 36"
|
||
(iq,,a): " LLR 36"
|
||
(auto|stat,,r):
|
||
" EA#R %n(#3,0)
|
||
%if(%o(#'F), AD#R %co(#'F)\n,)\"
|
||
(ext|string,,r):
|
||
" EA#R #F"
|
||
|
||
&u1: " EAX#R #F"
|
||
|
||
==i: " CMP#F #S\n TZE #R"
|
||
!=i: " CMP#F #S\n TNZ #R"
|
||
<i: " CMP#F #S\n TMI #R"
|
||
>i: " CMP#F #S\n TZE *+2\n TPL #R"
|
||
<=i: " CMP#F #S\n TZE #R\n TMI #R"
|
||
>=i: " CMP#F #S\n TPL #R"
|
||
|
||
==d: " DFCMP #S\n TZE #R"
|
||
!=d: " DFCMP #S\n TNZ #R"
|
||
<d: " DFCMP #S\n TMI #R"
|
||
>d: " DFCMP #S\n TZE *+2\n TPL #R"
|
||
<=d: " DFCMP #S\n TZE #R\n TMI #R"
|
||
>=d: " DFCMP #S\n TPL #R"
|
||
|
||
==p0: " CMP#F #S\n TZE #R"
|
||
!=p0: " CMP#F #S\n TNZ #R"
|
||
<p0: " CMP#F #S\n TZE *+2\n TNC #R"
|
||
>p0: " CMP#F #S\n TZE *+2\n TRC #R"
|
||
<=p0: " CMP#F #S\n TZE #R\n TNC #R"
|
||
>=p0: " CMP#F #S\n TRC #R"
|
||
|
||
==p1: " CMPX#F #S\n TZE #R"
|
||
!=p1: " CMPX#F #S\n TNZ #R"
|
||
<p1: " CMPX#F #S\n TZE *+2\n TNC #R"
|
||
>p1: " CMPX#F #S\n TZE *+2\n TRC #R"
|
||
<=p1: " CMPX#F #S\n TZE #R\n TNC #R"
|
||
>=p1: " CMPX#F #S\n TRC #R"
|
||
|
||
-p0p0: " SBL#F #S\n #FRL 16"
|
||
|
||
.cc:
|
||
(auto,,): " EA#R 0,7\n"
|
||
(stat,,): " EA#R .STAT\n"
|
||
(ia,,q): " STA .TEMP\n LDQ .TEMP\n"
|
||
(iq,,a): " STQ .TEMP\n LDA .TEMP\n"
|
||
(auto|stat|indirect,,):
|
||
"%if(%o(#'F), AD#R %co(#'F)\n,)\
|
||
TSX5 .CTO#R"
|
||
(ext|string,,): " LD#R #F\n #RRL 27"
|
||
(r,,r): " EA#R 0,#FL\n #RRL 18"
|
||
(r,,auto|stat|indirect|string):
|
||
" EAX5 0,#FL\n"
|
||
(r,,auto): " EA#F 0,7\n"
|
||
(r,,stat): " EA#F .STAT\n"
|
||
(r,,auto|stat):
|
||
"%if(%o(#'R), AD#F %co(#'R)\n,)\
|
||
TSX4 .#FTOC"
|
||
(r,,string): " EA#F #R\n TSX4 .#FTOC"
|
||
(r,,ext): " #FLS 27\n ST#F #R\n #FRL 27"
|
||
(q,,ia):
|
||
"%if(%o(#'R), ADA %co(#'R)\n,)\
|
||
TSX4 .ATOC"
|
||
(a,,iq):
|
||
"%if(%o(#'R), ADQ %co(#'R)\n,)\
|
||
TSX4 .QTOC"
|
||
.ii:
|
||
(r,,M): " ST#F #R"
|
||
(M,,r): " LD#R #F"
|
||
(r,,r): " LLR 36"
|
||
.ff:
|
||
(f,,M): " FSTR #R"
|
||
(M,,f): " FLD #F"
|
||
.dd:
|
||
(f,,M): " DPSTR #R"
|
||
(M,,f): " DPLD #F"
|
||
.p0p0:
|
||
(r,,r): " LLR 36"
|
||
(r,,M): " ST#F #R"
|
||
(M,,r): " LD#R #F"
|
||
.p1p1:
|
||
(x,,x): " EAX#R 0,#F"
|
||
(x,,M): " STZ #R\n STX#F #R"
|
||
(M,,x): " LDX#R #F"
|
||
(x,,q): " EAQ 0,#F"
|
||
(q,,x): " EAX#R 0,QU"
|
||
(M,,q): " LDQ #F"
|
||
(q,,M): " STQ #R"
|
||
|
||
.ci: "\"
|
||
.ic: " AN#F =O377,DL"
|
||
|
||
.p0p1: .ip1:
|
||
(r,,x): " EAX#R 0,#FU"
|
||
(M,,x): " LDX#R #F"
|
||
|
||
.p1p0: .p1i:
|
||
(x,,r): " EA#R 0,#F"
|
||
(M,,r): " LD#R #F"
|
||
|
||
.ip0: .p0i:
|
||
(M,,r): " LD#R #F"
|
||
(r,,r): "\"
|
||
|
||
.fd: " FLD #F"
|
||
.df: " FRD"
|
||
|
||
.cf: .cd: .if: .id:
|
||
" LDQ 0,DL
|
||
LDE =35B25,DU
|
||
FNO"
|
||
|
||
.fi: .di: " UFA =71B25,DU"
|
||
.fc: .dc:
|
||
" UFA =71B25,DU
|
||
ANQ =O377,DL"
|
||
|
||
hd:
|
||
"$ GMAP
|
||
SYMREF .PROLG,.EPILG,.TEMP,.LSIWT,.TSWIT
|
||
SYMREF .CTOA,.CTOQ,.ATOC,.QTOC"
|
||
|
||
en: " SYMDEF #0"
|
||
ex: " SYMREF #0"
|
||
st: ".I#0 EQU *"
|
||
rt: " TRA .EPILG"
|
||
go: " TRA #R"
|
||
l: ".L#0 EQU *"
|
||
lc: " ZERO .L#0"
|
||
|
||
p:
|
||
"*
|
||
* FUNCTION %m(#1)
|
||
*
|
||
%i(#1) TSX0 .PROLG
|
||
ZERO .FS#0"
|
||
ca:
|
||
" TSX1 #F
|
||
ZERO #1/4,#0"
|
||
ep:
|
||
" TRA .EPILG
|
||
.FS#0 EQU #1/4"
|
||
|
||
ls:
|
||
" TSX5 .LSWIT
|
||
ZERO #R,#0"
|
||
ts:
|
||
" TSX5 .TSWIT
|
||
ZERO #0,#5
|
||
TRA #R"
|
||
|
||
o: "#1"
|
||
co: "=V20/#1,16/0"
|
||
|
||
ln: "%flush().N#0 EQU *"
|
||
eq: "%flush()#0 EQU *"
|
||
in: "%flush() DEC #0"
|
||
ad0: ad1: "%flush() ZERO #R"
|
||
sc: "%flush() ZERO .S#0"
|
||
end: "%flush() END"
|
||
f: "%flush() DEC %ff(#0)"
|
||
nf: "%flush() DEC -%ff(#0)"
|
||
d: "%flush() DEC %dd(#0)"
|
||
nd: "%flush() DEC -%dd(#0)"
|
||
al1: "%flush()\"
|
||
al2: "%flush() EVEN"
|
||
im: da: pu: pd: "\"
|
||
|