% Stripped-Down Simulator for MMIX, derived from MMIX-SIM
|
% Stripped-Down Simulator for MMIX, derived from MMIX-SIM
|
% To run it on a program like "foo bar"
|
% To run it on a program like "foo bar"
|
% first say "mmix -Dfoo.mmb foo bar"
|
% first say "mmix -Dfoo.mmb foo bar"
|
% then "mmix sim foo.mmb"
|
% then "mmix sim foo.mmb"
|
|
|
% I apologize for lack of comments; they're in the book though
|
% I apologize for lack of comments; they're in the book though
|
|
|
t IS $255
|
t IS $255
|
lring_size IS 256 % octabytes in the local register ring
|
lring_size IS 256 % octabytes in the local register ring
|
|
|
LOC Data_Segment
|
LOC Data_Segment
|
Global LOC @+8*256
|
Global LOC @+8*256
|
g GREG Global % base of 256 global registers
|
g GREG Global % base of 256 global registers
|
Local LOC @+8*lring_size
|
Local LOC @+8*lring_size
|
l GREG Local % base of lring_size local registers
|
l GREG Local % base of lring_size local registers
|
GREG @
|
GREG @
|
IOArgs OCTA 0,BinaryRead
|
IOArgs OCTA 0,BinaryRead
|
Chunk0 IS @
|
Chunk0 IS @
|
|
|
LOC #100
|
LOC #100
|
PREFIX :Mem:
|
PREFIX :Mem:
|
head GREG % address of first chunk
|
head GREG % address of first chunk
|
curkey GREG % KEY(head)
|
curkey GREG % KEY(head)
|
alloc GREG % address of next chunk to allocate
|
alloc GREG % address of next chunk to allocate
|
Chunk IS #1000 bytes per chunk, is power of 2
|
Chunk IS #1000 bytes per chunk, is power of 2
|
addr IS $0
|
addr IS $0
|
key IS $1
|
key IS $1
|
test IS $2
|
test IS $2
|
newlink IS $3
|
newlink IS $3
|
p IS $4 % LINK(p)=head
|
p IS $4 % LINK(p)=head
|
t IS :t
|
t IS :t
|
|
|
KEY IS 0
|
KEY IS 0
|
LINK IS 8
|
LINK IS 8
|
DATA IS 16
|
DATA IS 16
|
nodesize GREG Chunk+3*8 pad with 8 zero bytes
|
nodesize GREG Chunk+3*8 pad with 8 zero bytes
|
mask GREG Chunk-1
|
mask GREG Chunk-1
|
|
|
:MemFind ANDN key,addr,mask
|
:MemFind ANDN key,addr,mask
|
CMPU t,key,curkey
|
CMPU t,key,curkey
|
PBZ t,4F
|
PBZ t,4F
|
BN addr,:Error
|
BN addr,:Error
|
SET newlink,head
|
SET newlink,head
|
1H SET p,head
|
1H SET p,head
|
LDOU head,p,LINK
|
LDOU head,p,LINK
|
PBNZ head,2F
|
PBNZ head,2F
|
SET head,alloc
|
SET head,alloc
|
STOU key,head,KEY
|
STOU key,head,KEY
|
ADDU alloc,alloc,nodesize
|
ADDU alloc,alloc,nodesize
|
JMP 3F
|
JMP 3F
|
2H LDOU test,head,KEY
|
2H LDOU test,head,KEY
|
CMPU t,test,key
|
CMPU t,test,key
|
BNZ t,1B
|
BNZ t,1B
|
3H LDOU t,head,LINK
|
3H LDOU t,head,LINK
|
STOU newlink,head,LINK
|
STOU newlink,head,LINK
|
SET curkey,key
|
SET curkey,key
|
STOU t,p,LINK
|
STOU t,p,LINK
|
4H SUBU t,addr,key
|
4H SUBU t,addr,key
|
LDA $0,head,DATA
|
LDA $0,head,DATA
|
ADDU $0,t,$0
|
ADDU $0,t,$0
|
POP 1,0
|
POP 1,0
|
PREFIX :
|
PREFIX :
|
|
|
res IS $2
|
res IS $2
|
arg IS res+1
|
arg IS res+1
|
|
|
ss GREG % rS
|
ss GREG % rS
|
oo GREG % rO
|
oo GREG % rO
|
ll GREG % 8*rL
|
ll GREG % 8*rL
|
gg GREG % 8*rG
|
gg GREG % 8*rG
|
aa GREG % rA
|
aa GREG % rA
|
ii GREG % rI
|
ii GREG % rI
|
uu GREG % rU
|
uu GREG % rU
|
cc GREG % rC
|
cc GREG % rC
|
|
|
lring_mask GREG 8*lring_size-1
|
lring_mask GREG 8*lring_size-1
|
:GetReg CMPU t,$0,gg
|
:GetReg CMPU t,$0,gg
|
BN t,1F
|
BN t,1F
|
LDOU $0,g,$0
|
LDOU $0,g,$0
|
POP 1,0
|
POP 1,0
|
1H CMPU t,$0,ll
|
1H CMPU t,$0,ll
|
ADDU $0,$0,oo
|
ADDU $0,$0,oo
|
AND $0,$0,lring_mask
|
AND $0,$0,lring_mask
|
LDOU $0,l,$0
|
LDOU $0,l,$0
|
CSNN $0,t,0
|
CSNN $0,t,0
|
POP 1,0
|
POP 1,0
|
|
|
:StackStore GET $0,rJ
|
:StackStore GET $0,rJ
|
AND t,ss,lring_mask \S82
|
AND t,ss,lring_mask \S82
|
LDOU $1,l,t
|
LDOU $1,l,t
|
SET arg,ss
|
SET arg,ss
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
STOU $1,res,0 M[rS]<-l[rS]
|
STOU $1,res,0 M[rS]<-l[rS]
|
ADDU ss,ss,8
|
ADDU ss,ss,8
|
PUT rJ,$0
|
PUT rJ,$0
|
POP
|
POP
|
:StackLoad GET $0,rJ
|
:StackLoad GET $0,rJ
|
SUBU ss,ss,8 \S83
|
SUBU ss,ss,8 \S83
|
SET arg,ss
|
SET arg,ss
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDOU $1,res,0
|
LDOU $1,res,0
|
AND t,ss,lring_mask
|
AND t,ss,lring_mask
|
STOU $1,l,t
|
STOU $1,l,t
|
PUT rJ,$0
|
PUT rJ,$0
|
POP
|
POP
|
:StackRoom SUBU t,ss,oo idiom in \S81,\S101,\S102
|
:StackRoom SUBU t,ss,oo idiom in \S81,\S101,\S102
|
SUBU t,t,ll
|
SUBU t,t,ll
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
PBNZ t,1F
|
PBNZ t,1F
|
GET $0,rJ
|
GET $0,rJ
|
PUSHJ res,StackStore
|
PUSHJ res,StackStore
|
PUT rJ,$0
|
PUT rJ,$0
|
1H POP
|
1H POP
|
|
|
* The main loop
|
* The main loop
|
loc GREG % where the simulator is at
|
loc GREG % where the simulator is at
|
inst_ptr GREG % where the simulator will be next
|
inst_ptr GREG % where the simulator will be next
|
inst GREG % the current instruction being simulated
|
inst GREG % the current instruction being simulated
|
resuming GREG % are we resuming an instruction in rX?
|
resuming GREG % are we resuming an instruction in rX?
|
|
|
Fetch PBZ resuming,1F \S60 (main simulation loop)
|
Fetch PBZ resuming,1F \S60 (main simulation loop)
|
SUBU loc,inst_ptr,4
|
SUBU loc,inst_ptr,4
|
LDTU inst,g,8*rX+4
|
LDTU inst,g,8*rX+4
|
JMP 2F
|
JMP 2F
|
1H SET loc,inst_ptr
|
1H SET loc,inst_ptr
|
SET arg,loc
|
SET arg,loc
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDTU inst,res,0
|
LDTU inst,res,0
|
ADDU inst_ptr,loc,4
|
ADDU inst_ptr,loc,4
|
2H CMPU t,loc,g
|
2H CMPU t,loc,g
|
BNN t,Error loc>=Data_Segment
|
BNN t,Error loc>=Data_Segment
|
|
|
op GREG % opcode of the current instruction
|
op GREG % opcode of the current instruction
|
xx GREG % X field of the current instruction
|
xx GREG % X field of the current instruction
|
yy GREG % Y field of the current instruction
|
yy GREG % Y field of the current instruction
|
zz GREG % Z field of the current instruction
|
zz GREG % Z field of the current instruction
|
yz GREG % YZ field of the current instruction
|
yz GREG % YZ field of the current instruction
|
f GREG % packed information about the current op
|
f GREG % packed information about the current op
|
xxx GREG % X field times 8
|
xxx GREG % X field times 8
|
x GREG % result, or X operand
|
x GREG % result, or X operand
|
y GREG % Y operand
|
y GREG % Y operand
|
z GREG % Z operand
|
z GREG % Z operand
|
xptr GREG % location where x should be stored
|
xptr GREG % location where x should be stored
|
exc GREG % arithmetic exceptions
|
exc GREG % arithmetic exceptions
|
|
|
Z_is_immed_bit IS #1
|
Z_is_immed_bit IS #1
|
Z_is_source_bit IS #2
|
Z_is_source_bit IS #2
|
Y_is_immed_bit IS #4
|
Y_is_immed_bit IS #4
|
Y_is_source_bit IS #8
|
Y_is_source_bit IS #8
|
X_is_source_bit IS #10
|
X_is_source_bit IS #10
|
X_is_dest_bit IS #20
|
X_is_dest_bit IS #20
|
Rel_addr_bit IS #40
|
Rel_addr_bit IS #40
|
Mem_bit IS #80
|
Mem_bit IS #80
|
|
|
Info IS #1000
|
Info IS #1000
|
Done IS Info+8*256
|
Done IS Info+8*256
|
info GREG Info % base address for master info table
|
info GREG Info % base address for master info table
|
c255 GREG 8*255
|
c255 GREG 8*255
|
c256 GREG 8*256
|
c256 GREG 8*256
|
|
|
MOR op,inst,#8
|
MOR op,inst,#8
|
MOR xx,inst,#4
|
MOR xx,inst,#4
|
MOR yy,inst,#2
|
MOR yy,inst,#2
|
MOR zz,inst,#1
|
MOR zz,inst,#1
|
0H GREG -#10000
|
0H GREG -#10000
|
ANDN yz,inst,0B
|
ANDN yz,inst,0B
|
SLU xxx,xx,3
|
SLU xxx,xx,3
|
SLU t,op,3
|
SLU t,op,3
|
LDOU f,info,t
|
LDOU f,info,t
|
SET x,0
|
SET x,0
|
SET y,0
|
SET y,0
|
SET z,0
|
SET z,0
|
SET exc,0
|
SET exc,0
|
AND t,f,Rel_addr_bit
|
AND t,f,Rel_addr_bit
|
PBZ t,1F
|
PBZ t,1F
|
PBEV f,2F Convert rel to abs, \S70
|
PBEV f,2F Convert rel to abs, \S70
|
9H GREG -#1000000
|
9H GREG -#1000000
|
ANDN yz,inst,9B xyz
|
ANDN yz,inst,9B xyz
|
ADDU t,yz,9B
|
ADDU t,yz,9B
|
JMP 3F
|
JMP 3F
|
2H ADDU t,yz,0B
|
2H ADDU t,yz,0B
|
3H CSOD yz,op,t
|
3H CSOD yz,op,t
|
SL t,yz,2
|
SL t,yz,2
|
ADDU yz,loc,t
|
ADDU yz,loc,t
|
1H PBNN resuming,Install_X Install operands \S71
|
1H PBNN resuming,Install_X Install operands \S71
|
LDOU y,g,8*rY Install special operands \S127
|
LDOU y,g,8*rY Install special operands \S127
|
LDOU z,g,8*rZ
|
LDOU z,g,8*rZ
|
BOD resuming,Install_Y
|
BOD resuming,Install_Y
|
0H GREG #C1<<56+(x-$0)<<48+(z-$0)<<40+1<<16+X_is_dest_bit
|
0H GREG #C1<<56+(x-$0)<<48+(z-$0)<<40+1<<16+X_is_dest_bit
|
SET f,0B Change to ORI instruction
|
SET f,0B Change to ORI instruction
|
LDOU exc,g,8*rX
|
LDOU exc,g,8*rX
|
MOR exc,exc,#20
|
MOR exc,exc,#20
|
JMP XDest
|
JMP XDest
|
Install_X AND t,f,X_is_source_bit
|
Install_X AND t,f,X_is_source_bit
|
PBZ t,1F
|
PBZ t,1F
|
SET arg,xxx
|
SET arg,xxx
|
PUSHJ res,GetReg
|
PUSHJ res,GetReg
|
SET x,res
|
SET x,res
|
1H SRU t,f,5
|
1H SRU t,f,5
|
AND t,t,#f8
|
AND t,t,#f8
|
PBZ t,Install_Z
|
PBZ t,Install_Z
|
LDOU x,g,t Set x from third op, \S79
|
LDOU x,g,t Set x from third op, \S79
|
Install_Z AND t,f,Z_is_source_bit
|
Install_Z AND t,f,Z_is_source_bit
|
PBZ t,1F
|
PBZ t,1F
|
SLU arg,zz,3
|
SLU arg,zz,3
|
PUSHJ res,GetReg
|
PUSHJ res,GetReg
|
SET z,res
|
SET z,res
|
JMP Install_Y
|
JMP Install_Y
|
1H CSOD z,f,zz Z_is_immed_bit
|
1H CSOD z,f,zz Z_is_immed_bit
|
AND t,op,#f0
|
AND t,op,#f0
|
CMPU t,t,#e0
|
CMPU t,t,#e0
|
PBNZ t,Install_Y
|
PBNZ t,Install_Y
|
AND t,op,#3 Set z as immediate wyde, \S78
|
AND t,op,#3 Set z as immediate wyde, \S78
|
NEG t,3,t
|
NEG t,3,t
|
SLU t,t,4
|
SLU t,t,4
|
SLU z,yz,t
|
SLU z,yz,t
|
SET y,x
|
SET y,x
|
Install_Y AND t,f,Y_is_immed_bit
|
Install_Y AND t,f,Y_is_immed_bit
|
PBZ t,1F
|
PBZ t,1F
|
SET y,yy
|
SET y,yy
|
SLU t,yy,40
|
SLU t,yy,40
|
ADDU f,f,t
|
ADDU f,f,t
|
1H AND t,f,Y_is_source_bit
|
1H AND t,f,Y_is_source_bit
|
BZ t,1F
|
BZ t,1F
|
SLU arg,yy,3
|
SLU arg,yy,3
|
PUSHJ res,GetReg
|
PUSHJ res,GetReg
|
SET y,res (end of \S71)
|
SET y,res (end of \S71)
|
1H AND t,f,X_is_dest_bit
|
1H AND t,f,X_is_dest_bit
|
BZ t,1F
|
BZ t,1F
|
XDest CMPU t,xxx,gg Install X as dest, \S80
|
XDest CMPU t,xxx,gg Install X as dest, \S80
|
BN t,3F
|
BN t,3F
|
LDA xptr,g,xxx
|
LDA xptr,g,xxx
|
JMP 1F
|
JMP 1F
|
2H ADDU t,oo,ll
|
2H ADDU t,oo,ll
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
STCO 0,l,t
|
STCO 0,l,t
|
INCL ll,8
|
INCL ll,8
|
PUSHJ res,StackRoom
|
PUSHJ res,StackRoom
|
3H CMPU t,xxx,ll
|
3H CMPU t,xxx,ll
|
BNN t,2B
|
BNN t,2B
|
ADD t,xxx,oo
|
ADD t,xxx,oo
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
LDA xptr,l,t
|
LDA xptr,l,t
|
1H AND t,f,Mem_bit
|
1H AND t,f,Mem_bit
|
PBZ t,1F
|
PBZ t,1F
|
ADDU arg,y,z
|
ADDU arg,y,z
|
CMPU t,op,#A0
|
CMPU t,op,#A0
|
BN t,2F
|
BN t,2F
|
CMPU t,arg,g
|
CMPU t,arg,g
|
BN t,Error
|
BN t,Error
|
2H PUSHJ res,MemFind
|
2H PUSHJ res,MemFind
|
1H SRU t,f,32
|
1H SRU t,f,32
|
PUT rX,t
|
PUT rX,t
|
PUT rM,x
|
PUT rM,x
|
PUT rE,x
|
PUT rE,x
|
0H GREG #30000
|
0H GREG #30000
|
AND t,aa,0B
|
AND t,aa,0B
|
ORL t,U_BIT<<8 enable underflow trip
|
ORL t,U_BIT<<8 enable underflow trip
|
PUT rA,t
|
PUT rA,t
|
0H GREG Done
|
0H GREG Done
|
PUT rW,0B
|
PUT rW,0B
|
RESUME
|
RESUME
|
|
|
MulU MULU x,y,z
|
MulU MULU x,y,z
|
GET t,rH
|
GET t,rH
|
STOU t,g,8*rH
|
STOU t,g,8*rH
|
JMP XDone
|
JMP XDone
|
|
|
Div DIV x,y,z
|
Div DIV x,y,z
|
JMP 1F
|
JMP 1F
|
DivU PUT rD,x
|
DivU PUT rD,x
|
DIVU x,y,z
|
DIVU x,y,z
|
1H GET t,rR
|
1H GET t,rR
|
STO t,g,8*rR
|
STO t,g,8*rR
|
JMP XDone
|
JMP XDone
|
|
|
Cswap LDOU z,g,8*rP
|
Cswap LDOU z,g,8*rP
|
LDOU y,res,0
|
LDOU y,res,0
|
CMPU t,y,z
|
CMPU t,y,z
|
BNZ t,1F
|
BNZ t,1F
|
STOU x,res,0
|
STOU x,res,0
|
JMP 2F
|
JMP 2F
|
1H STOU y,g,8*rP
|
1H STOU y,g,8*rP
|
2H ZSZ x,t,1
|
2H ZSZ x,t,1
|
JMP XDone
|
JMP XDone
|
|
|
BTaken ADDU cc,cc,4
|
BTaken ADDU cc,cc,4
|
PBTaken SUBU cc,cc,2
|
PBTaken SUBU cc,cc,2
|
SET inst_ptr,yz
|
SET inst_ptr,yz
|
JMP Update
|
JMP Update
|
|
|
Go SET x,inst_ptr
|
Go SET x,inst_ptr
|
ADDU inst_ptr,y,z
|
ADDU inst_ptr,y,z
|
JMP XDone
|
JMP XDone
|
|
|
PushGo ADDU yz,y,z
|
PushGo ADDU yz,y,z
|
PushJ SET inst_ptr,yz
|
PushJ SET inst_ptr,yz
|
CMPU t,xxx,gg
|
CMPU t,xxx,gg
|
PBN t,1F
|
PBN t,1F
|
SET xxx,ll
|
SET xxx,ll
|
SRU xx,xxx,3
|
SRU xx,xxx,3
|
INCL ll,8
|
INCL ll,8
|
PUSHJ 0,StackRoom
|
PUSHJ 0,StackRoom
|
1H ADDU t,xxx,oo
|
1H ADDU t,xxx,oo
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
STOU xx,l,t
|
STOU xx,l,t
|
ADDU t,loc,4
|
ADDU t,loc,4
|
STOU t,g,8*rJ
|
STOU t,g,8*rJ
|
INCL xxx,8
|
INCL xxx,8
|
SUBU ll,ll,xxx
|
SUBU ll,ll,xxx
|
ADDU oo,oo,xxx
|
ADDU oo,oo,xxx
|
JMP Update
|
JMP Update
|
|
|
Pop SUBU oo,oo,8
|
Pop SUBU oo,oo,8
|
BZ xx,1F
|
BZ xx,1F
|
CMPU t,ll,xxx
|
CMPU t,ll,xxx
|
BN t,1F
|
BN t,1F
|
ADDU t,xxx,oo
|
ADDU t,xxx,oo
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
LDOU y,l,t
|
LDOU y,l,t
|
1H CMPU t,oo,ss
|
1H CMPU t,oo,ss
|
PBNN t,1F
|
PBNN t,1F
|
PUSHJ 0,StackLoad
|
PUSHJ 0,StackLoad
|
1H AND t,oo,lring_mask
|
1H AND t,oo,lring_mask
|
LDOU z,l,t
|
LDOU z,l,t
|
AND z,z,#ff
|
AND z,z,#ff
|
SLU z,z,3
|
SLU z,z,3
|
1H SUBU t,oo,ss
|
1H SUBU t,oo,ss
|
CMPU t,t,z
|
CMPU t,t,z
|
PBNN t,1F
|
PBNN t,1F
|
PUSHJ 0,StackLoad actually gamma=beta possible here!
|
PUSHJ 0,StackLoad actually gamma=beta possible here!
|
JMP 1B
|
JMP 1B
|
1H ADDU ll,ll,8
|
1H ADDU ll,ll,8
|
CMPU t,xxx,ll
|
CMPU t,xxx,ll
|
CSN ll,t,xxx
|
CSN ll,t,xxx
|
ADDU ll,ll,z
|
ADDU ll,ll,z
|
CMPU t,gg,ll
|
CMPU t,gg,ll
|
CSN ll,t,gg
|
CSN ll,t,gg
|
CMPU t,z,ll
|
CMPU t,z,ll
|
BNN t,1F
|
BNN t,1F
|
AND t,oo,lring_mask
|
AND t,oo,lring_mask
|
STOU y,l,t
|
STOU y,l,t
|
1H LDOU y,g,8*rJ
|
1H LDOU y,g,8*rJ
|
SUBU oo,oo,z
|
SUBU oo,oo,z
|
4ADDU inst_ptr,yz,y
|
4ADDU inst_ptr,yz,y
|
JMP Update
|
JMP Update
|
|
|
Save BNZ yz,Error \S102
|
Save BNZ yz,Error \S102
|
CMPU t,xxx,gg
|
CMPU t,xxx,gg
|
BN t,Error
|
BN t,Error
|
ADDU t,oo,ll
|
ADDU t,oo,ll
|
AND t,t,lring_mask
|
AND t,t,lring_mask
|
SRU y,ll,3
|
SRU y,ll,3
|
STOU y,l,t
|
STOU y,l,t
|
INCL ll,8
|
INCL ll,8
|
PUSHJ 0,StackRoom
|
PUSHJ 0,StackRoom
|
ADDU oo,oo,ll
|
ADDU oo,oo,ll
|
SET ll,0
|
SET ll,0
|
1H PUSHJ 0,StackStore
|
1H PUSHJ 0,StackStore
|
CMPU t,ss,oo
|
CMPU t,ss,oo
|
PBNZ t,1B
|
PBNZ t,1B
|
SUBU y,gg,8
|
SUBU y,gg,8
|
4H ADDU y,y,8
|
4H ADDU y,y,8
|
1H SET arg,ss \S103
|
1H SET arg,ss \S103
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
CMPU t,y,8*(rZ+1)
|
CMPU t,y,8*(rZ+1)
|
LDOU z,g,y
|
LDOU z,g,y
|
PBNZ t,2F
|
PBNZ t,2F
|
SLU z,gg,56-3
|
SLU z,gg,56-3
|
ADDU z,z,aa
|
ADDU z,z,aa
|
2H STOU z,res,0
|
2H STOU z,res,0
|
INCL ss,8
|
INCL ss,8
|
BNZ t,1F
|
BNZ t,1F
|
CMPU t,y,c255
|
CMPU t,y,c255
|
BZ t,2F
|
BZ t,2F
|
CMPU t,y,8*rR
|
CMPU t,y,8*rR
|
PBNZ t,4B
|
PBNZ t,4B
|
SET y,8*rP
|
SET y,8*rP
|
JMP 1B
|
JMP 1B
|
2H SET y,8*rB
|
2H SET y,8*rB
|
JMP 1B
|
JMP 1B
|
1H SET oo,ss
|
1H SET oo,ss
|
SUBU x,oo,8
|
SUBU x,oo,8
|
JMP XDone
|
JMP XDone
|
|
|
Unsave BNZ xx,Error \S104
|
Unsave BNZ xx,Error \S104
|
BNZ yy,Error
|
BNZ yy,Error
|
ANDNL z,#7
|
ANDNL z,#7
|
ADDU ss,z,8
|
ADDU ss,z,8
|
SET y,8*(rZ+2)
|
SET y,8*(rZ+2)
|
1H SUBU y,y,8
|
1H SUBU y,y,8
|
4H SUBU ss,ss,8 \S105
|
4H SUBU ss,ss,8 \S105
|
SET arg,ss
|
SET arg,ss
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDOU x,res,0
|
LDOU x,res,0
|
CMPU t,y,8*(rZ+1)
|
CMPU t,y,8*(rZ+1)
|
PBNZ t,2F
|
PBNZ t,2F
|
SRU gg,x,56-3
|
SRU gg,x,56-3
|
SLU aa,x,64-18
|
SLU aa,x,64-18
|
SRU aa,aa,64-18
|
SRU aa,aa,64-18
|
JMP 1B
|
JMP 1B
|
2H STOU x,g,y
|
2H STOU x,g,y
|
3H CMPU t,y,8*rP
|
3H CMPU t,y,8*rP
|
CSZ y,t,8*(rR+1)
|
CSZ y,t,8*(rR+1)
|
CSZ y,y,c256
|
CSZ y,y,c256
|
CMPU t,y,gg
|
CMPU t,y,gg
|
PBNZ t,1B
|
PBNZ t,1B
|
PUSHJ 0,StackLoad
|
PUSHJ 0,StackLoad
|
AND t,ss,lring_mask
|
AND t,ss,lring_mask
|
LDOU x,l,t
|
LDOU x,l,t
|
AND x,x,#ff
|
AND x,x,#ff
|
BZ x,1F
|
BZ x,1F
|
SET y,x
|
SET y,x
|
2H PUSHJ 0,StackLoad
|
2H PUSHJ 0,StackLoad
|
SUBU y,y,1
|
SUBU y,y,1
|
PBNZ y,2B
|
PBNZ y,2B
|
SLU x,x,3
|
SLU x,x,3
|
1H SET ll,x
|
1H SET ll,x
|
CMPU t,gg,x
|
CMPU t,gg,x
|
CSN ll,t,gg
|
CSN ll,t,gg
|
SET oo,ss
|
SET oo,ss
|
PBNZ uu,Update
|
PBNZ uu,Update
|
BZ resuming,Update
|
BZ resuming,Update
|
JMP AllDone
|
JMP AllDone
|
|
|
Get CMPU t,yz,32
|
Get CMPU t,yz,32
|
BNN t,Error
|
BNN t,Error
|
STOU ii,g,8*rI
|
STOU ii,g,8*rI
|
STOU cc,g,8*rC
|
STOU cc,g,8*rC
|
STOU oo,g,8*rO
|
STOU oo,g,8*rO
|
STOU ss,g,8*rS
|
STOU ss,g,8*rS
|
STOU uu,g,8*rU
|
STOU uu,g,8*rU
|
STOU aa,g,8*rA
|
STOU aa,g,8*rA
|
SR t,ll,3
|
SR t,ll,3
|
STOU t,g,8*rL
|
STOU t,g,8*rL
|
SR t,gg,3
|
SR t,gg,3
|
STOU t,g,8*rG
|
STOU t,g,8*rG
|
SLU t,zz,3
|
SLU t,zz,3
|
LDOU x,g,t
|
LDOU x,g,t
|
JMP XDone
|
JMP XDone
|
|
|
Put BNZ yy,Error
|
Put BNZ yy,Error
|
CMPU t,xx,32
|
CMPU t,xx,32
|
BNN t,Error
|
BNN t,Error
|
CMPU t,xx,rC
|
CMPU t,xx,rC
|
BN t,PutOK
|
BN t,PutOK
|
CMPU t,xx,rF
|
CMPU t,xx,rF
|
BN t,1F
|
BN t,1F
|
PutOK STOU z,g,xxx
|
PutOK STOU z,g,xxx
|
JMP Update
|
JMP Update
|
1H CMPU t,xx,rG
|
1H CMPU t,xx,rG
|
BN t,Error
|
BN t,Error
|
SUB t,xx,rL
|
SUB t,xx,rL
|
PBP t,PutA
|
PBP t,PutA
|
BN t,PutG
|
BN t,PutG
|
PutL SLU z,z,3 \S98, PUT rL
|
PutL SLU z,z,3 \S98, PUT rL
|
CMPU t,z,ll
|
CMPU t,z,ll
|
CSN ll,t,z
|
CSN ll,t,z
|
JMP Update
|
JMP Update
|
0H GREG #40000
|
0H GREG #40000
|
PutA CMPU t,z,0B \S100, PUT rA
|
PutA CMPU t,z,0B \S100, PUT rA
|
BNN t,Error
|
BNN t,Error
|
SET aa,z
|
SET aa,z
|
JMP Update
|
JMP Update
|
PutG SRU t,z,8
|
PutG SRU t,z,8
|
BNZ t,Error
|
BNZ t,Error
|
CMPU t,z,32
|
CMPU t,z,32
|
BN t,Error
|
BN t,Error
|
SLU z,z,3
|
SLU z,z,3
|
CMPU t,z,ll
|
CMPU t,z,ll
|
BN t,Error
|
BN t,Error
|
JMP 2F
|
JMP 2F
|
1H SUBU gg,gg,8
|
1H SUBU gg,gg,8
|
STCO 0,g,gg
|
STCO 0,g,gg
|
2H CMPU t,z,gg
|
2H CMPU t,z,gg
|
PBN t,1B
|
PBN t,1B
|
SET gg,z
|
SET gg,z
|
JMP Update
|
JMP Update
|
|
|
Resume SLU t,inst,40 \S125
|
Resume SLU t,inst,40 \S125
|
BNZ t,Error
|
BNZ t,Error
|
LDOU inst_ptr,g,8*rW
|
LDOU inst_ptr,g,8*rW
|
LDOU x,g,8*rX
|
LDOU x,g,8*rX
|
BN x,Update
|
BN x,Update
|
SRU xx,x,56
|
SRU xx,x,56
|
SUBU t,xx,2
|
SUBU t,xx,2
|
BNN t,1F
|
BNN t,1F
|
PBZ xx,2F
|
PBZ xx,2F
|
SRU y,x,28 rop=1 (RESUME_CONT)
|
SRU y,x,28 rop=1 (RESUME_CONT)
|
AND y,y,#f
|
AND y,y,#f
|
SET z,1
|
SET z,1
|
SLU z,z,y
|
SLU z,z,y
|
ANDNL z,#70cf
|
ANDNL z,#70cf
|
BNZ z,Error
|
BNZ z,Error
|
1H BP t,Error
|
1H BP t,Error
|
SRU t,x,13
|
SRU t,x,13
|
AND t,t,c255
|
AND t,t,c255
|
CMPU y,t,ll
|
CMPU y,t,ll
|
BN y,2F
|
BN y,2F
|
CMPU y,t,gg
|
CMPU y,t,gg
|
BN y,Error
|
BN y,Error
|
2H MOR t,x,#8
|
2H MOR t,x,#8
|
CMPU t,t,#F9 RESUME
|
CMPU t,t,#F9 RESUME
|
BZ t,Error
|
BZ t,Error
|
NEG resuming,xx
|
NEG resuming,xx
|
CSNN resuming,resuming,1
|
CSNN resuming,resuming,1
|
JMP Update
|
JMP Update
|
|
|
Sync BNZ xx,Error
|
Sync BNZ xx,Error
|
CMPU t,yz,4
|
CMPU t,yz,4
|
BNN t,Error
|
BNN t,Error
|
JMP Update
|
JMP Update
|
|
|
Trip SET xx,0
|
Trip SET xx,0
|
JMP TakeTrip
|
JMP TakeTrip
|
|
|
Trap STOU inst_ptr,g,8*rWW
|
Trap STOU inst_ptr,g,8*rWW
|
0H GREG #8000000000000000
|
0H GREG #8000000000000000
|
ADDU t,inst,0B
|
ADDU t,inst,0B
|
STOU t,g,8*rXX
|
STOU t,g,8*rXX
|
STOU y,g,8*rYY
|
STOU y,g,8*rYY
|
STOU z,g,8*rZZ
|
STOU z,g,8*rZZ
|
SRU y,inst,6
|
SRU y,inst,6
|
CMPU t,y,4*11
|
CMPU t,y,4*11
|
BNN t,Error
|
BNN t,Error
|
LDOU t,g,c255
|
LDOU t,g,c255
|
0H GREG @+4
|
0H GREG @+4
|
GO y,0B,y
|
GO y,0B,y
|
JMP SimHalt
|
JMP SimHalt
|
JMP SimFopen
|
JMP SimFopen
|
JMP SimFclose
|
JMP SimFclose
|
JMP SimFread
|
JMP SimFread
|
JMP SimFgets
|
JMP SimFgets
|
JMP SimFgetws
|
JMP SimFgetws
|
JMP SimFwrite
|
JMP SimFwrite
|
JMP SimFputs
|
JMP SimFputs
|
JMP SimFputws
|
JMP SimFputws
|
JMP SimFseek
|
JMP SimFseek
|
JMP SimFtell
|
JMP SimFtell
|
|
|
:GetArgs GET $0,rJ
|
:GetArgs GET $0,rJ
|
SET y,t
|
SET y,t
|
SET arg,t
|
SET arg,t
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDOU z,res,0 z = virtual address of buffer
|
LDOU z,res,0 z = virtual address of buffer
|
SET arg,z
|
SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
SET x,res x = physical address of buffer
|
SET x,res x = physical address of buffer
|
STO x,IOArgs
|
STO x,IOArgs
|
SET xx,Mem:Chunk
|
SET xx,Mem:Chunk
|
AND zz,x,Mem:mask
|
AND zz,x,Mem:mask
|
SUB xx,xx,zz xx = bytes from x to chunk end
|
SUB xx,xx,zz xx = bytes from x to chunk end
|
ADDU arg,y,8
|
ADDU arg,y,8
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDOU zz,res,0 zz = size of buffer
|
LDOU zz,res,0 zz = size of buffer
|
STOU zz,IOArgs+8
|
STOU zz,IOArgs+8
|
PUT rJ,$0
|
PUT rJ,$0
|
POP
|
POP
|
|
|
GREG @
|
GREG @
|
:SimInst LDA t,IOArgs
|
:SimInst LDA t,IOArgs
|
JMP DoInst
|
JMP DoInst
|
SimFinish LDA t,IOArgs
|
SimFinish LDA t,IOArgs
|
SimFclose GETA $0,TrapDone
|
SimFclose GETA $0,TrapDone
|
:DoInst PUT rW,$0
|
:DoInst PUT rW,$0
|
PUT rX,inst
|
PUT rX,inst
|
RESUME
|
RESUME
|
|
|
SimFopen PUSHJ 0,GetArgs
|
SimFopen PUSHJ 0,GetArgs
|
ADDU xx,Mem:alloc,Mem:nodesize
|
ADDU xx,Mem:alloc,Mem:nodesize
|
STOU xx,IOArgs % we'll copy the file name here
|
STOU xx,IOArgs % we'll copy the file name here
|
SET x,xx
|
SET x,xx
|
1H SET arg,z
|
1H SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDBU t,res,0
|
LDBU t,res,0
|
STBU t,x,0
|
STBU t,x,0
|
INCL x,1
|
INCL x,1
|
INCL z,1
|
INCL z,1
|
PBNZ t,1B
|
PBNZ t,1B
|
GO $0,SimInst
|
GO $0,SimInst
|
3H STCO 0,x,0 % clean up the copied string
|
3H STCO 0,x,0 % clean up the copied string
|
CMPU z,xx,x
|
CMPU z,xx,x
|
SUB x,x,8
|
SUB x,x,8
|
PBN z,3B
|
PBN z,3B
|
JMP TrapDone
|
JMP TrapDone
|
|
|
TrapDone STO t,g,8*rBB "RESUME 1" works this way
|
TrapDone STO t,g,8*rBB "RESUME 1" works this way
|
STO t,g,c255
|
STO t,g,c255
|
JMP Update
|
JMP Update
|
|
|
SimFread PUSHJ 0,GetArgs
|
SimFread PUSHJ 0,GetArgs
|
SET y,zz number of bytes to read
|
SET y,zz number of bytes to read
|
1H CMP t,xx,y
|
1H CMP t,xx,y
|
PBNN t,SimFinish
|
PBNN t,SimFinish
|
STO xx,IOArgs+8 oops, we must cross chunk bdry
|
STO xx,IOArgs+8 oops, we must cross chunk bdry
|
SUB y,y,xx
|
SUB y,y,xx
|
GO $0,SimInst
|
GO $0,SimInst
|
BN t,1F
|
BN t,1F
|
ADD z,z,xx
|
ADD z,z,xx
|
SET arg,z
|
SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
STOU res,IOArgs
|
STOU res,IOArgs
|
STO y,IOArgs+8
|
STO y,IOArgs+8
|
ADD xx,Mem:mask,1
|
ADD xx,Mem:mask,1
|
JMP 1B
|
JMP 1B
|
1H SUB t,t,y
|
1H SUB t,t,y
|
JMP TrapDone
|
JMP TrapDone
|
|
|
SimFgets PUSHJ 0,GetArgs
|
SimFgets PUSHJ 0,GetArgs
|
CMP t,xx,zz
|
CMP t,xx,zz
|
PBNN t,SimFinish easy if all in one chunk
|
PBNN t,SimFinish easy if all in one chunk
|
SET y,zz remaining buf size
|
SET y,zz remaining buf size
|
SET yy,0 bytes successfully read so far
|
SET yy,0 bytes successfully read so far
|
1H ADD t,xx,1
|
1H ADD t,xx,1
|
STO t,IOArgs+8 null character spills off end
|
STO t,IOArgs+8 null character spills off end
|
GO $0,SimInst
|
GO $0,SimInst
|
BN t,TrapDone
|
BN t,TrapDone
|
ADD yy,yy,t
|
ADD yy,yy,t
|
CMP $0,t,xx
|
CMP $0,t,xx
|
SET t,yy
|
SET t,yy
|
PBNZ $0,TrapDone
|
PBNZ $0,TrapDone
|
ADDU z,z,xx
|
ADDU z,z,xx
|
SET arg,z
|
SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
SUBU x,x,1
|
SUBU x,x,1
|
LDBU t,x,xx look at last byte read
|
LDBU t,x,xx look at last byte read
|
CMP t,t,#0a is it newline?
|
CMP t,t,#0a is it newline?
|
BZ t,1F
|
BZ t,1F
|
SUB y,y,xx
|
SUB y,y,xx
|
SET x,res
|
SET x,res
|
STOU x,IOArgs
|
STOU x,IOArgs
|
STO y,IOArgs+8
|
STO y,IOArgs+8
|
ADD xx,Mem:mask,1
|
ADD xx,Mem:mask,1
|
CMP t,xx,y
|
CMP t,xx,y
|
BN t,1B
|
BN t,1B
|
GO $0,SimInst
|
GO $0,SimInst
|
BN t,TrapDone
|
BN t,TrapDone
|
2H ADD t,yy,t
|
2H ADD t,yy,t
|
JMP TrapDone
|
JMP TrapDone
|
1H SET t,0
|
1H SET t,0
|
STBU t,res,0
|
STBU t,res,0
|
JMP 2B
|
JMP 2B
|
|
|
SimFgetws PUSHJ 0,GetArgs
|
SimFgetws PUSHJ 0,GetArgs
|
ADD y,zz,zz remaining buf size (bytes)
|
ADD y,zz,zz remaining buf size (bytes)
|
CMP t,xx,y
|
CMP t,xx,y
|
PBNN t,SimFinish easy if all in one chunk
|
PBNN t,SimFinish easy if all in one chunk
|
SET yy,0 wydes successfully read so far
|
SET yy,0 wydes successfully read so far
|
1H ADD zz,xx,3
|
1H ADD zz,xx,3
|
SR zz,zz,1 wydes in current chunk, plus 1
|
SR zz,zz,1 wydes in current chunk, plus 1
|
STO zz,IOArgs+8 null character spills off end
|
STO zz,IOArgs+8 null character spills off end
|
GO $0,SimInst
|
GO $0,SimInst
|
BN t,TrapDone
|
BN t,TrapDone
|
ADDU yy,yy,t
|
ADDU yy,yy,t
|
SUB zz,zz,1
|
SUB zz,zz,1
|
CMP $0,t,zz
|
CMP $0,t,zz
|
SET t,yy
|
SET t,yy
|
PBNZ $0,TrapDone
|
PBNZ $0,TrapDone
|
ADD z,z,xx
|
ADD z,z,xx
|
SET arg,z
|
SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
SUBU x,x,2
|
SUBU x,x,2
|
LDWU t,x,xx look at last wyde read
|
LDWU t,x,xx look at last wyde read
|
CMP t,t,#0a is it newline?
|
CMP t,t,#0a is it newline?
|
BZ t,1F
|
BZ t,1F
|
SUB y,y,xx
|
SUB y,y,xx
|
SET x,res
|
SET x,res
|
STOU x,IOArgs
|
STOU x,IOArgs
|
SR t,y,1
|
SR t,y,1
|
STO t,IOArgs+8
|
STO t,IOArgs+8
|
ADD xx,Mem:mask,1
|
ADD xx,Mem:mask,1
|
ANDN y,y,1
|
ANDN y,y,1
|
CMP t,xx,y
|
CMP t,xx,y
|
BN t,1B
|
BN t,1B
|
GO $0,SimInst
|
GO $0,SimInst
|
BN t,TrapDone
|
BN t,TrapDone
|
2H ADD t,yy,t
|
2H ADD t,yy,t
|
JMP TrapDone
|
JMP TrapDone
|
1H SET t,0
|
1H SET t,0
|
STWU t,res,0
|
STWU t,res,0
|
JMP 2B
|
JMP 2B
|
|
|
SimFwrite IS SimFread yes it works!
|
SimFwrite IS SimFread yes it works!
|
|
|
SimFputs SET xx,0 this many bytes written
|
SimFputs SET xx,0 this many bytes written
|
SET z,t virtual address of string
|
SET z,t virtual address of string
|
1H SET arg,z
|
1H SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
SET t,res physical address of string
|
SET t,res physical address of string
|
GO $0,DoInst
|
GO $0,DoInst
|
BN t,TrapDone
|
BN t,TrapDone
|
BZ t,1F
|
BZ t,1F
|
ADD xx,xx,t
|
ADD xx,xx,t
|
ADDU z,z,t
|
ADDU z,z,t
|
AND t,z,Mem:mask
|
AND t,z,Mem:mask
|
BZ t,1B
|
BZ t,1B
|
1H SET t,xx
|
1H SET t,xx
|
JMP TrapDone
|
JMP TrapDone
|
|
|
SimFputws SET xx,0 this many wydes written
|
SimFputws SET xx,0 this many wydes written
|
SET z,t virtual address of string
|
SET z,t virtual address of string
|
1H SET arg,z
|
1H SET arg,z
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
SET t,res physical address of string
|
SET t,res physical address of string
|
GO $0,DoInst
|
GO $0,DoInst
|
BN t,TrapDone
|
BN t,TrapDone
|
BZ t,1F
|
BZ t,1F
|
ADD xx,xx,t
|
ADD xx,xx,t
|
2ADDU z,t,z
|
2ADDU z,t,z
|
AND t,z,Mem:mask
|
AND t,z,Mem:mask
|
BZ t,1B
|
BZ t,1B
|
1H SET t,xx
|
1H SET t,xx
|
JMP TrapDone
|
JMP TrapDone
|
|
|
SimFseek IS SimFclose
|
SimFseek IS SimFclose
|
SimFtell IS SimFclose
|
SimFtell IS SimFclose
|
|
|
GREG @
|
GREG @
|
1H BYTE "Warning: ",0
|
1H BYTE "Warning: ",0
|
2H BYTE " at location ",0
|
2H BYTE " at location ",0
|
3H BYTE #a,0
|
3H BYTE #a,0
|
T0 BYTE "TRIP",0
|
T0 BYTE "TRIP",0
|
T1 BYTE "integer divide check",0
|
T1 BYTE "integer divide check",0
|
T2 BYTE "integer overflow",0
|
T2 BYTE "integer overflow",0
|
T3 BYTE "float-to-fix overflow",0
|
T3 BYTE "float-to-fix overflow",0
|
T4 BYTE "invalid floating point operation",0
|
T4 BYTE "invalid floating point operation",0
|
T5 BYTE "floating point overflow",0
|
T5 BYTE "floating point overflow",0
|
T6 BYTE "floating point underflow",0
|
T6 BYTE "floating point underflow",0
|
T7 BYTE "floating point division by zero",0
|
T7 BYTE "floating point division by zero",0
|
T8 BYTE "floating point inexact",0
|
T8 BYTE "floating point inexact",0
|
TripType OCTA T0,T1,T2,T3,T4,T5,T6,T7,T8
|
TripType OCTA T0,T1,T2,T3,T4,T5,T6,T7,T8
|
SimHalt CMP t,zz,1
|
SimHalt CMP t,zz,1
|
BZ inst,Exit t=0 on normal exit
|
BZ inst,Exit t=0 on normal exit
|
BNZ t,Error
|
BNZ t,Error
|
CMPU t,loc,#90
|
CMPU t,loc,#90
|
BNN t,Error Halt 1 from loc<#90 gives warning
|
BNN t,Error Halt 1 from loc<#90 gives warning
|
LDA t,1B
|
LDA t,1B
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
SR x,loc,1
|
SR x,loc,1
|
LDA t,TripType
|
LDA t,TripType
|
LDOU t,t,x
|
LDOU t,t,x
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
LDA t,2B
|
LDA t,2B
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
LDOU x,g,8*rW
|
LDOU x,g,8*rW
|
SUBU x,x,4
|
SUBU x,x,4
|
SRU arg,x,32
|
SRU arg,x,32
|
PUSHJ res,OutTetra
|
PUSHJ res,OutTetra
|
SET arg,x
|
SET arg,x
|
PUSHJ res,OutTetra
|
PUSHJ res,OutTetra
|
LDA t,3B
|
LDA t,3B
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
LDOU t,g,c255
|
LDOU t,g,c255
|
JMP TrapDone
|
JMP TrapDone
|
|
|
Error NEG t,22 catch-22
|
Error NEG t,22 catch-22
|
Exit TRAP 0,Halt,0
|
Exit TRAP 0,Halt,0
|
|
|
s IS $1
|
s IS $1
|
0H GREG #0008000400020001
|
0H GREG #0008000400020001
|
:OutTetra MOR t,$0,0B
|
:OutTetra MOR t,$0,0B
|
SLU s,t,4
|
SLU s,t,4
|
XOR t,s,t
|
XOR t,s,t
|
0H GREG #0f0f0f0f0f0f0f0f
|
0H GREG #0f0f0f0f0f0f0f0f
|
AND t,t,0B
|
AND t,t,0B
|
0H GREG #0606060606060606
|
0H GREG #0606060606060606
|
ADDU t,t,0B
|
ADDU t,t,0B
|
0H GREG #0000002700000000
|
0H GREG #0000002700000000
|
MOR s,0B,t
|
MOR s,0B,t
|
0H GREG #2a2a2a2a2a2a2a2a
|
0H GREG #2a2a2a2a2a2a2a2a
|
ADDU t,t,0B
|
ADDU t,t,0B
|
ADDU s,t,s
|
ADDU s,t,s
|
STOU s,g,c255
|
STOU s,g,c255
|
GETA t,OctaArgs
|
GETA t,OctaArgs
|
TRAP 0,Fwrite,StdErr
|
TRAP 0,Fwrite,StdErr
|
POP 0
|
POP 0
|
|
|
O IS Done-4
|
O IS Done-4
|
LOC Info
|
LOC Info
|
JMP Trap+@-O; BYTE 0,5,0,#0a TRAP
|
JMP Trap+@-O; BYTE 0,5,0,#0a TRAP
|
FCMP x,y,z; BYTE 0,1,0,#2a FCMP
|
FCMP x,y,z; BYTE 0,1,0,#2a FCMP
|
FUN x,y,z; BYTE 0,1,0,#2a FUN
|
FUN x,y,z; BYTE 0,1,0,#2a FUN
|
FEQL x,y,z; BYTE 0,1,0,#2a FEQL
|
FEQL x,y,z; BYTE 0,1,0,#2a FEQL
|
FADD x,y,z; BYTE 0,4,0,#2a FADD
|
FADD x,y,z; BYTE 0,4,0,#2a FADD
|
FIX x,0,z; BYTE 0,4,0,#26 FIX
|
FIX x,0,z; BYTE 0,4,0,#26 FIX
|
FSUB x,y,z; BYTE 0,4,0,#2a FSUB
|
FSUB x,y,z; BYTE 0,4,0,#2a FSUB
|
FIXU x,0,z; BYTE 0,4,0,#26 FIXU
|
FIXU x,0,z; BYTE 0,4,0,#26 FIXU
|
FLOT x,0,z; BYTE 0,4,0,#26 FLOT
|
FLOT x,0,z; BYTE 0,4,0,#26 FLOT
|
FLOT x,0,z; BYTE 0,4,0,#25 FLOTI
|
FLOT x,0,z; BYTE 0,4,0,#25 FLOTI
|
FLOTU x,0,z; BYTE 0,4,0,#26 FLOTU
|
FLOTU x,0,z; BYTE 0,4,0,#26 FLOTU
|
FLOTU x,0,z; BYTE 0,4,0,#25 FLOTUI
|
FLOTU x,0,z; BYTE 0,4,0,#25 FLOTUI
|
SFLOT x,0,z; BYTE 0,4,0,#26 SFLOT
|
SFLOT x,0,z; BYTE 0,4,0,#26 SFLOT
|
SFLOT x,0,z; BYTE 0,4,0,#25 SFLOTI
|
SFLOT x,0,z; BYTE 0,4,0,#25 SFLOTI
|
SFLOTU x,0,z; BYTE 0,4,0,#26 SFLOTU
|
SFLOTU x,0,z; BYTE 0,4,0,#26 SFLOTU
|
SFLOTU x,0,z; BYTE 0,4,0,#25 SFLOTUI
|
SFLOTU x,0,z; BYTE 0,4,0,#25 SFLOTUI
|
FMUL x,y,z; BYTE 0,4,0,#2a FMUL
|
FMUL x,y,z; BYTE 0,4,0,#2a FMUL
|
FCMPE x,y,z; BYTE 0,4,rE,#2a FCMPE
|
FCMPE x,y,z; BYTE 0,4,rE,#2a FCMPE
|
FUNE x,y,z; BYTE 0,1,rE,#2a FUNE
|
FUNE x,y,z; BYTE 0,1,rE,#2a FUNE
|
FEQLE x,y,z; BYTE 0,4,rE,#2a FEQLE
|
FEQLE x,y,z; BYTE 0,4,rE,#2a FEQLE
|
FDIV x,y,z; BYTE 0,40,0,#2a FDIV
|
FDIV x,y,z; BYTE 0,40,0,#2a FDIV
|
FSQRT x,0,z; BYTE 0,40,0,#26 FSQRT
|
FSQRT x,0,z; BYTE 0,40,0,#26 FSQRT
|
FREM x,y,z; BYTE 0,4,0,#2a FREM
|
FREM x,y,z; BYTE 0,4,0,#2a FREM
|
FINT x,0,z; BYTE 0,4,0,#26 FINT
|
FINT x,0,z; BYTE 0,4,0,#26 FINT
|
MUL x,y,z; BYTE 0,10,0,#2a MUL
|
MUL x,y,z; BYTE 0,10,0,#2a MUL
|
MUL x,y,z; BYTE 0,10,0,#29 MULI
|
MUL x,y,z; BYTE 0,10,0,#29 MULI
|
JMP MulU+@-O; BYTE 0,10,0,#2a MULU
|
JMP MulU+@-O; BYTE 0,10,0,#2a MULU
|
JMP MulU+@-O; BYTE 0,10,0,#29 MULUI
|
JMP MulU+@-O; BYTE 0,10,0,#29 MULUI
|
JMP Div+@-O; BYTE 0,60,0,#2a DIV
|
JMP Div+@-O; BYTE 0,60,0,#2a DIV
|
JMP Div+@-O; BYTE 0,60,0,#29 DIVI
|
JMP Div+@-O; BYTE 0,60,0,#29 DIVI
|
JMP DivU+@-O; BYTE 0,60,rD,#2a DIVU
|
JMP DivU+@-O; BYTE 0,60,rD,#2a DIVU
|
JMP DivU+@-O; BYTE 0,60,rD,#29 DIVUI
|
JMP DivU+@-O; BYTE 0,60,rD,#29 DIVUI
|
ADD x,y,z; BYTE 0,1,0,#2a ADD
|
ADD x,y,z; BYTE 0,1,0,#2a ADD
|
ADD x,y,z; BYTE 0,1,0,#29 ADDI
|
ADD x,y,z; BYTE 0,1,0,#29 ADDI
|
ADDU x,y,z; BYTE 0,1,0,#2a ADDU
|
ADDU x,y,z; BYTE 0,1,0,#2a ADDU
|
ADDU x,y,z; BYTE 0,1,0,#29 ADDUI
|
ADDU x,y,z; BYTE 0,1,0,#29 ADDUI
|
SUB x,y,z; BYTE 0,1,0,#2a SUB
|
SUB x,y,z; BYTE 0,1,0,#2a SUB
|
SUB x,y,z; BYTE 0,1,0,#29 SUBI
|
SUB x,y,z; BYTE 0,1,0,#29 SUBI
|
SUBU x,y,z; BYTE 0,1,0,#2a SUBU
|
SUBU x,y,z; BYTE 0,1,0,#2a SUBU
|
SUBU x,y,z; BYTE 0,1,0,#29 SUBUI
|
SUBU x,y,z; BYTE 0,1,0,#29 SUBUI
|
2ADDU x,y,z; BYTE 0,1,0,#2a 2ADDU
|
2ADDU x,y,z; BYTE 0,1,0,#2a 2ADDU
|
2ADDU x,y,z; BYTE 0,1,0,#29 2ADDUI
|
2ADDU x,y,z; BYTE 0,1,0,#29 2ADDUI
|
4ADDU x,y,z; BYTE 0,1,0,#2a 4ADDU
|
4ADDU x,y,z; BYTE 0,1,0,#2a 4ADDU
|
4ADDU x,y,z; BYTE 0,1,0,#29 4ADDUI
|
4ADDU x,y,z; BYTE 0,1,0,#29 4ADDUI
|
8ADDU x,y,z; BYTE 0,1,0,#2a 8ADDU
|
8ADDU x,y,z; BYTE 0,1,0,#2a 8ADDU
|
8ADDU x,y,z; BYTE 0,1,0,#29 8ADDUI
|
8ADDU x,y,z; BYTE 0,1,0,#29 8ADDUI
|
16ADDU x,y,z; BYTE 0,1,0,#2a 16ADDU
|
16ADDU x,y,z; BYTE 0,1,0,#2a 16ADDU
|
16ADDU x,y,z; BYTE 0,1,0,#29 16ADDUI
|
16ADDU x,y,z; BYTE 0,1,0,#29 16ADDUI
|
CMP x,y,z; BYTE 0,1,0,#2a CMP
|
CMP x,y,z; BYTE 0,1,0,#2a CMP
|
CMP x,y,z; BYTE 0,1,0,#29 CMPI
|
CMP x,y,z; BYTE 0,1,0,#29 CMPI
|
CMPU x,y,z; BYTE 0,1,0,#2a CMPU
|
CMPU x,y,z; BYTE 0,1,0,#2a CMPU
|
CMPU x,y,z; BYTE 0,1,0,#29 CMPUI
|
CMPU x,y,z; BYTE 0,1,0,#29 CMPUI
|
NEG x,0,z; BYTE 0,1,0,#26 NEG
|
NEG x,0,z; BYTE 0,1,0,#26 NEG
|
NEG x,0,z; BYTE 0,1,0,#25 NEGI
|
NEG x,0,z; BYTE 0,1,0,#25 NEGI
|
NEGU x,0,z; BYTE 0,1,0,#26 NEGU
|
NEGU x,0,z; BYTE 0,1,0,#26 NEGU
|
NEGU x,0,z; BYTE 0,1,0,#25 NEGUI
|
NEGU x,0,z; BYTE 0,1,0,#25 NEGUI
|
SL x,y,z; BYTE 0,1,0,#2a SL
|
SL x,y,z; BYTE 0,1,0,#2a SL
|
SL x,y,z; BYTE 0,1,0,#29 SLI
|
SL x,y,z; BYTE 0,1,0,#29 SLI
|
SLU x,y,z; BYTE 0,1,0,#2a SLU
|
SLU x,y,z; BYTE 0,1,0,#2a SLU
|
SLU x,y,z; BYTE 0,1,0,#29 SLUI
|
SLU x,y,z; BYTE 0,1,0,#29 SLUI
|
SR x,y,z; BYTE 0,1,0,#2a SR
|
SR x,y,z; BYTE 0,1,0,#2a SR
|
SR x,y,z; BYTE 0,1,0,#29 SRI
|
SR x,y,z; BYTE 0,1,0,#29 SRI
|
SRU x,y,z; BYTE 0,1,0,#2a SRU
|
SRU x,y,z; BYTE 0,1,0,#2a SRU
|
SRU x,y,z; BYTE 0,1,0,#29 SRUI
|
SRU x,y,z; BYTE 0,1,0,#29 SRUI
|
BN x,BTaken+@-O; BYTE 0,1,0,#50 BN
|
BN x,BTaken+@-O; BYTE 0,1,0,#50 BN
|
BN x,BTaken+@-O; BYTE 0,1,0,#50 BNB
|
BN x,BTaken+@-O; BYTE 0,1,0,#50 BNB
|
BZ x,BTaken+@-O; BYTE 0,1,0,#50 BZ
|
BZ x,BTaken+@-O; BYTE 0,1,0,#50 BZ
|
BZ x,BTaken+@-O; BYTE 0,1,0,#50 BZB
|
BZ x,BTaken+@-O; BYTE 0,1,0,#50 BZB
|
BP x,BTaken+@-O; BYTE 0,1,0,#50 BP
|
BP x,BTaken+@-O; BYTE 0,1,0,#50 BP
|
BP x,BTaken+@-O; BYTE 0,1,0,#50 BPB
|
BP x,BTaken+@-O; BYTE 0,1,0,#50 BPB
|
BOD x,BTaken+@-O; BYTE 0,1,0,#50 BOD
|
BOD x,BTaken+@-O; BYTE 0,1,0,#50 BOD
|
BOD x,BTaken+@-O; BYTE 0,1,0,#50 BODB
|
BOD x,BTaken+@-O; BYTE 0,1,0,#50 BODB
|
BNN x,BTaken+@-O; BYTE 0,1,0,#50 BNN
|
BNN x,BTaken+@-O; BYTE 0,1,0,#50 BNN
|
BNN x,BTaken+@-O; BYTE 0,1,0,#50 BNNB
|
BNN x,BTaken+@-O; BYTE 0,1,0,#50 BNNB
|
BNZ x,BTaken+@-O; BYTE 0,1,0,#50 BNZ
|
BNZ x,BTaken+@-O; BYTE 0,1,0,#50 BNZ
|
BNZ x,BTaken+@-O; BYTE 0,1,0,#50 BNZB
|
BNZ x,BTaken+@-O; BYTE 0,1,0,#50 BNZB
|
BNP x,BTaken+@-O; BYTE 0,1,0,#50 BNP
|
BNP x,BTaken+@-O; BYTE 0,1,0,#50 BNP
|
BNP x,BTaken+@-O; BYTE 0,1,0,#50 BNPB
|
BNP x,BTaken+@-O; BYTE 0,1,0,#50 BNPB
|
BEV x,BTaken+@-O; BYTE 0,1,0,#50 BEV
|
BEV x,BTaken+@-O; BYTE 0,1,0,#50 BEV
|
BEV x,BTaken+@-O; BYTE 0,1,0,#50 BEVB
|
BEV x,BTaken+@-O; BYTE 0,1,0,#50 BEVB
|
PBN x,PBTaken+@-O; BYTE 0,3,0,#50 PBN
|
PBN x,PBTaken+@-O; BYTE 0,3,0,#50 PBN
|
PBN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNB
|
PBN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNB
|
PBZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBZ
|
PBZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBZ
|
PBZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBZB
|
PBZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBZB
|
PBP x,PBTaken+@-O; BYTE 0,3,0,#50 PBP
|
PBP x,PBTaken+@-O; BYTE 0,3,0,#50 PBP
|
PBP x,PBTaken+@-O; BYTE 0,3,0,#50 PBPB
|
PBP x,PBTaken+@-O; BYTE 0,3,0,#50 PBPB
|
PBOD x,PBTaken+@-O; BYTE 0,3,0,#50 PBOD
|
PBOD x,PBTaken+@-O; BYTE 0,3,0,#50 PBOD
|
PBOD x,PBTaken+@-O; BYTE 0,3,0,#50 PBODB
|
PBOD x,PBTaken+@-O; BYTE 0,3,0,#50 PBODB
|
PBNN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNN
|
PBNN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNN
|
PBNN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNNB
|
PBNN x,PBTaken+@-O; BYTE 0,3,0,#50 PBNNB
|
PBNZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBNZ
|
PBNZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBNZ
|
PBNZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBNZB
|
PBNZ x,PBTaken+@-O; BYTE 0,3,0,#50 PBNZB
|
PBNP x,PBTaken+@-O; BYTE 0,3,0,#50 PBNP
|
PBNP x,PBTaken+@-O; BYTE 0,3,0,#50 PBNP
|
PBNP x,PBTaken+@-O; BYTE 0,3,0,#50 PBNPB
|
PBNP x,PBTaken+@-O; BYTE 0,3,0,#50 PBNPB
|
PBEV x,PBTaken+@-O; BYTE 0,3,0,#50 PBEV
|
PBEV x,PBTaken+@-O; BYTE 0,3,0,#50 PBEV
|
PBEV x,PBTaken+@-O; BYTE 0,3,0,#50 PBEVB
|
PBEV x,PBTaken+@-O; BYTE 0,3,0,#50 PBEVB
|
CSN x,y,z; BYTE 0,1,0,#3a CSN
|
CSN x,y,z; BYTE 0,1,0,#3a CSN
|
CSN x,y,z; BYTE 0,1,0,#39 CSNI
|
CSN x,y,z; BYTE 0,1,0,#39 CSNI
|
CSZ x,y,z; BYTE 0,1,0,#3a CSZ
|
CSZ x,y,z; BYTE 0,1,0,#3a CSZ
|
CSZ x,y,z; BYTE 0,1,0,#39 CSZI
|
CSZ x,y,z; BYTE 0,1,0,#39 CSZI
|
CSP x,y,z; BYTE 0,1,0,#3a CSP
|
CSP x,y,z; BYTE 0,1,0,#3a CSP
|
CSP x,y,z; BYTE 0,1,0,#39 CSPI
|
CSP x,y,z; BYTE 0,1,0,#39 CSPI
|
CSOD x,y,z; BYTE 0,1,0,#3a CSOD
|
CSOD x,y,z; BYTE 0,1,0,#3a CSOD
|
CSOD x,y,z; BYTE 0,1,0,#39 CSODI
|
CSOD x,y,z; BYTE 0,1,0,#39 CSODI
|
CSNN x,y,z; BYTE 0,1,0,#3a CSNN
|
CSNN x,y,z; BYTE 0,1,0,#3a CSNN
|
CSNN x,y,z; BYTE 0,1,0,#39 CSNNI
|
CSNN x,y,z; BYTE 0,1,0,#39 CSNNI
|
CSNZ x,y,z; BYTE 0,1,0,#3a CSNZ
|
CSNZ x,y,z; BYTE 0,1,0,#3a CSNZ
|
CSNZ x,y,z; BYTE 0,1,0,#39 CSNZI
|
CSNZ x,y,z; BYTE 0,1,0,#39 CSNZI
|
CSNP x,y,z; BYTE 0,1,0,#3a CSNP
|
CSNP x,y,z; BYTE 0,1,0,#3a CSNP
|
CSNP x,y,z; BYTE 0,1,0,#39 CSNPI
|
CSNP x,y,z; BYTE 0,1,0,#39 CSNPI
|
CSEV x,y,z; BYTE 0,1,0,#3a CSEV
|
CSEV x,y,z; BYTE 0,1,0,#3a CSEV
|
CSEV x,y,z; BYTE 0,1,0,#39 CSEVI
|
CSEV x,y,z; BYTE 0,1,0,#39 CSEVI
|
ZSN x,y,z; BYTE 0,1,0,#2a ZSN
|
ZSN x,y,z; BYTE 0,1,0,#2a ZSN
|
ZSN x,y,z; BYTE 0,1,0,#29 ZSNI
|
ZSN x,y,z; BYTE 0,1,0,#29 ZSNI
|
ZSZ x,y,z; BYTE 0,1,0,#2a ZSZ
|
ZSZ x,y,z; BYTE 0,1,0,#2a ZSZ
|
ZSZ x,y,z; BYTE 0,1,0,#29 ZSZI
|
ZSZ x,y,z; BYTE 0,1,0,#29 ZSZI
|
ZSP x,y,z; BYTE 0,1,0,#2a ZSP
|
ZSP x,y,z; BYTE 0,1,0,#2a ZSP
|
ZSP x,y,z; BYTE 0,1,0,#29 ZSPI
|
ZSP x,y,z; BYTE 0,1,0,#29 ZSPI
|
ZSOD x,y,z; BYTE 0,1,0,#2a ZSOD
|
ZSOD x,y,z; BYTE 0,1,0,#2a ZSOD
|
ZSOD x,y,z; BYTE 0,1,0,#29 ZSODI
|
ZSOD x,y,z; BYTE 0,1,0,#29 ZSODI
|
ZSNN x,y,z; BYTE 0,1,0,#2a ZSNN
|
ZSNN x,y,z; BYTE 0,1,0,#2a ZSNN
|
ZSNN x,y,z; BYTE 0,1,0,#29 ZSNNI
|
ZSNN x,y,z; BYTE 0,1,0,#29 ZSNNI
|
ZSNZ x,y,z; BYTE 0,1,0,#2a ZSNZ
|
ZSNZ x,y,z; BYTE 0,1,0,#2a ZSNZ
|
ZSNZ x,y,z; BYTE 0,1,0,#29 ZSNZI
|
ZSNZ x,y,z; BYTE 0,1,0,#29 ZSNZI
|
ZSNP x,y,z; BYTE 0,1,0,#2a ZSNP
|
ZSNP x,y,z; BYTE 0,1,0,#2a ZSNP
|
ZSNP x,y,z; BYTE 0,1,0,#29 ZSNPI
|
ZSNP x,y,z; BYTE 0,1,0,#29 ZSNPI
|
ZSEV x,y,z; BYTE 0,1,0,#2a ZSEV
|
ZSEV x,y,z; BYTE 0,1,0,#2a ZSEV
|
ZSEV x,y,z; BYTE 0,1,0,#29 ZSEVI
|
ZSEV x,y,z; BYTE 0,1,0,#29 ZSEVI
|
LDB x,res,0; BYTE 1,1,0,#aa LDB
|
LDB x,res,0; BYTE 1,1,0,#aa LDB
|
LDB x,res,0; BYTE 1,1,0,#a9 LDBI
|
LDB x,res,0; BYTE 1,1,0,#a9 LDBI
|
LDBU x,res,0; BYTE 1,1,0,#aa LDBU
|
LDBU x,res,0; BYTE 1,1,0,#aa LDBU
|
LDBU x,res,0; BYTE 1,1,0,#a9 LDBUI
|
LDBU x,res,0; BYTE 1,1,0,#a9 LDBUI
|
LDW x,res,0; BYTE 1,1,0,#aa LDW
|
LDW x,res,0; BYTE 1,1,0,#aa LDW
|
LDW x,res,0; BYTE 1,1,0,#a9 LDWI
|
LDW x,res,0; BYTE 1,1,0,#a9 LDWI
|
LDWU x,res,0; BYTE 1,1,0,#aa LDWU
|
LDWU x,res,0; BYTE 1,1,0,#aa LDWU
|
LDWU x,res,0; BYTE 1,1,0,#a9 LDWUI
|
LDWU x,res,0; BYTE 1,1,0,#a9 LDWUI
|
LDT x,res,0; BYTE 1,1,0,#aa LDT
|
LDT x,res,0; BYTE 1,1,0,#aa LDT
|
LDT x,res,0; BYTE 1,1,0,#a9 LDTI
|
LDT x,res,0; BYTE 1,1,0,#a9 LDTI
|
LDTU x,res,0; BYTE 1,1,0,#aa LDTU
|
LDTU x,res,0; BYTE 1,1,0,#aa LDTU
|
LDTU x,res,0; BYTE 1,1,0,#a9 LDTUI
|
LDTU x,res,0; BYTE 1,1,0,#a9 LDTUI
|
LDO x,res,0; BYTE 1,1,0,#aa LDO
|
LDO x,res,0; BYTE 1,1,0,#aa LDO
|
LDO x,res,0; BYTE 1,1,0,#a9 LDOI
|
LDO x,res,0; BYTE 1,1,0,#a9 LDOI
|
LDOU x,res,0; BYTE 1,1,0,#aa LDOU
|
LDOU x,res,0; BYTE 1,1,0,#aa LDOU
|
LDOU x,res,0; BYTE 1,1,0,#a9 LDOUI
|
LDOU x,res,0; BYTE 1,1,0,#a9 LDOUI
|
LDSF x,res,0; BYTE 1,1,0,#aa LDSF
|
LDSF x,res,0; BYTE 1,1,0,#aa LDSF
|
LDSF x,res,0; BYTE 1,1,0,#a9 LDSFI
|
LDSF x,res,0; BYTE 1,1,0,#a9 LDSFI
|
LDHT x,res,0; BYTE 1,1,0,#aa LDHT
|
LDHT x,res,0; BYTE 1,1,0,#aa LDHT
|
LDHT x,res,0; BYTE 1,1,0,#a9 LDHTI
|
LDHT x,res,0; BYTE 1,1,0,#a9 LDHTI
|
JMP Cswap+@-O; BYTE 2,2,0,#ba CSWAP
|
JMP Cswap+@-O; BYTE 2,2,0,#ba CSWAP
|
JMP Cswap+@-O; BYTE 2,2,0,#b9 CSWAPI
|
JMP Cswap+@-O; BYTE 2,2,0,#b9 CSWAPI
|
LDUNC x,res,0; BYTE 1,1,0,#aa LDUNC
|
LDUNC x,res,0; BYTE 1,1,0,#aa LDUNC
|
LDUNC x,res,0; BYTE 1,1,0,#a9 LDUNCI
|
LDUNC x,res,0; BYTE 1,1,0,#a9 LDUNCI
|
JMP Error+@-O; BYTE 0,1,0,#2a LDVTS
|
JMP Error+@-O; BYTE 0,1,0,#2a LDVTS
|
JMP Error+@-O; BYTE 0,1,0,#29 LDVTSI
|
JMP Error+@-O; BYTE 0,1,0,#29 LDVTSI
|
SWYM 0; BYTE 0,1,0,#0a PRELD
|
SWYM 0; BYTE 0,1,0,#0a PRELD
|
SWYM 0; BYTE 0,1,0,#09 PRELDI
|
SWYM 0; BYTE 0,1,0,#09 PRELDI
|
SWYM 0; BYTE 0,1,0,#0a PREGO
|
SWYM 0; BYTE 0,1,0,#0a PREGO
|
SWYM 0; BYTE 0,1,0,#09 PREGOI
|
SWYM 0; BYTE 0,1,0,#09 PREGOI
|
JMP Go+@-O; BYTE 0,3,0,#2a GO
|
JMP Go+@-O; BYTE 0,3,0,#2a GO
|
JMP Go+@-O; BYTE 0,3,0,#29 GOI
|
JMP Go+@-O; BYTE 0,3,0,#29 GOI
|
STB x,res,0; BYTE 1,1,0,#9a STB
|
STB x,res,0; BYTE 1,1,0,#9a STB
|
STB x,res,0; BYTE 1,1,0,#99 STBI
|
STB x,res,0; BYTE 1,1,0,#99 STBI
|
STBU x,res,0; BYTE 1,1,0,#9a STBU
|
STBU x,res,0; BYTE 1,1,0,#9a STBU
|
STBU x,res,0; BYTE 1,1,0,#99 STBUI
|
STBU x,res,0; BYTE 1,1,0,#99 STBUI
|
STW x,res,0; BYTE 1,1,0,#9a STW
|
STW x,res,0; BYTE 1,1,0,#9a STW
|
STW x,res,0; BYTE 1,1,0,#99 STWI
|
STW x,res,0; BYTE 1,1,0,#99 STWI
|
STWU x,res,0; BYTE 1,1,0,#9a STWU
|
STWU x,res,0; BYTE 1,1,0,#9a STWU
|
STWU x,res,0; BYTE 1,1,0,#99 STWUI
|
STWU x,res,0; BYTE 1,1,0,#99 STWUI
|
STT x,res,0; BYTE 1,1,0,#9a STT
|
STT x,res,0; BYTE 1,1,0,#9a STT
|
STT x,res,0; BYTE 1,1,0,#99 STTI
|
STT x,res,0; BYTE 1,1,0,#99 STTI
|
STTU x,res,0; BYTE 1,1,0,#9a STTU
|
STTU x,res,0; BYTE 1,1,0,#9a STTU
|
STTU x,res,0; BYTE 1,1,0,#99 STTUI
|
STTU x,res,0; BYTE 1,1,0,#99 STTUI
|
STO x,res,0; BYTE 1,1,0,#9a STO
|
STO x,res,0; BYTE 1,1,0,#9a STO
|
STO x,res,0; BYTE 1,1,0,#99 STOI
|
STO x,res,0; BYTE 1,1,0,#99 STOI
|
STOU x,res,0; BYTE 1,1,0,#9a STOU
|
STOU x,res,0; BYTE 1,1,0,#9a STOU
|
STOU x,res,0; BYTE 1,1,0,#99 STOUI
|
STOU x,res,0; BYTE 1,1,0,#99 STOUI
|
STSF x,res,0; BYTE 1,1,0,#9a STSF
|
STSF x,res,0; BYTE 1,1,0,#9a STSF
|
STSF x,res,0; BYTE 1,1,0,#99 STSFI
|
STSF x,res,0; BYTE 1,1,0,#99 STSFI
|
STHT x,res,0; BYTE 1,1,0,#9a STHT
|
STHT x,res,0; BYTE 1,1,0,#9a STHT
|
STHT x,res,0; BYTE 1,1,0,#99 STHTI
|
STHT x,res,0; BYTE 1,1,0,#99 STHTI
|
STO xx,res,0; BYTE 1,1,0,#8a STCO
|
STO xx,res,0; BYTE 1,1,0,#8a STCO
|
STO xx,res,0; BYTE 1,1,0,#89 STCOI
|
STO xx,res,0; BYTE 1,1,0,#89 STCOI
|
STUNC x,res,0; BYTE 1,1,0,#9a STUNC
|
STUNC x,res,0; BYTE 1,1,0,#9a STUNC
|
STUNC x,res,0; BYTE 1,1,0,#99 STUNCI
|
STUNC x,res,0; BYTE 1,1,0,#99 STUNCI
|
SWYM 0; BYTE 0,1,0,#0a SYNCD
|
SWYM 0; BYTE 0,1,0,#0a SYNCD
|
SWYM 0; BYTE 0,1,0,#09 SYNCDI
|
SWYM 0; BYTE 0,1,0,#09 SYNCDI
|
SWYM 0; BYTE 0,1,0,#0a PREST
|
SWYM 0; BYTE 0,1,0,#0a PREST
|
SWYM 0; BYTE 0,1,0,#09 PRESTI
|
SWYM 0; BYTE 0,1,0,#09 PRESTI
|
SWYM 0; BYTE 0,1,0,#0a SYNCID
|
SWYM 0; BYTE 0,1,0,#0a SYNCID
|
SWYM 0; BYTE 0,1,0,#09 SYNCIDI
|
SWYM 0; BYTE 0,1,0,#09 SYNCIDI
|
JMP PushGo+@-O; BYTE 0,3,0,#2a PUSHGO
|
JMP PushGo+@-O; BYTE 0,3,0,#2a PUSHGO
|
JMP PushGo+@-O; BYTE 0,3,0,#29 PUSHGOI
|
JMP PushGo+@-O; BYTE 0,3,0,#29 PUSHGOI
|
OR x,y,z; BYTE 0,1,0,#2a OR
|
OR x,y,z; BYTE 0,1,0,#2a OR
|
OR x,y,z; BYTE 0,1,0,#29 ORI
|
OR x,y,z; BYTE 0,1,0,#29 ORI
|
ORN x,y,z; BYTE 0,1,0,#2a ORN
|
ORN x,y,z; BYTE 0,1,0,#2a ORN
|
ORN x,y,z; BYTE 0,1,0,#29 ORNI
|
ORN x,y,z; BYTE 0,1,0,#29 ORNI
|
NOR x,y,z; BYTE 0,1,0,#2a NOR
|
NOR x,y,z; BYTE 0,1,0,#2a NOR
|
NOR x,y,z; BYTE 0,1,0,#29 NORI
|
NOR x,y,z; BYTE 0,1,0,#29 NORI
|
XOR x,y,z; BYTE 0,1,0,#2a XOR
|
XOR x,y,z; BYTE 0,1,0,#2a XOR
|
XOR x,y,z; BYTE 0,1,0,#29 XORI
|
XOR x,y,z; BYTE 0,1,0,#29 XORI
|
AND x,y,z; BYTE 0,1,0,#2a AND
|
AND x,y,z; BYTE 0,1,0,#2a AND
|
AND x,y,z; BYTE 0,1,0,#29 ANDI
|
AND x,y,z; BYTE 0,1,0,#29 ANDI
|
ANDN x,y,z; BYTE 0,1,0,#2a ANDN
|
ANDN x,y,z; BYTE 0,1,0,#2a ANDN
|
ANDN x,y,z; BYTE 0,1,0,#29 ANDNI
|
ANDN x,y,z; BYTE 0,1,0,#29 ANDNI
|
NAND x,y,z; BYTE 0,1,0,#2a NAND
|
NAND x,y,z; BYTE 0,1,0,#2a NAND
|
NAND x,y,z; BYTE 0,1,0,#29 NANDI
|
NAND x,y,z; BYTE 0,1,0,#29 NANDI
|
NXOR x,y,z; BYTE 0,1,0,#2a NXOR
|
NXOR x,y,z; BYTE 0,1,0,#2a NXOR
|
NXOR x,y,z; BYTE 0,1,0,#29 NXORI
|
NXOR x,y,z; BYTE 0,1,0,#29 NXORI
|
BDIF x,y,z; BYTE 0,1,0,#2a BDIF
|
BDIF x,y,z; BYTE 0,1,0,#2a BDIF
|
BDIF x,y,z; BYTE 0,1,0,#29 BDIFI
|
BDIF x,y,z; BYTE 0,1,0,#29 BDIFI
|
WDIF x,y,z; BYTE 0,1,0,#2a WDIF
|
WDIF x,y,z; BYTE 0,1,0,#2a WDIF
|
WDIF x,y,z; BYTE 0,1,0,#29 WDIFI
|
WDIF x,y,z; BYTE 0,1,0,#29 WDIFI
|
TDIF x,y,z; BYTE 0,1,0,#2a TDIF
|
TDIF x,y,z; BYTE 0,1,0,#2a TDIF
|
TDIF x,y,z; BYTE 0,1,0,#29 TDIFI
|
TDIF x,y,z; BYTE 0,1,0,#29 TDIFI
|
ODIF x,y,z; BYTE 0,1,0,#2a ODIF
|
ODIF x,y,z; BYTE 0,1,0,#2a ODIF
|
ODIF x,y,z; BYTE 0,1,0,#29 ODIFI
|
ODIF x,y,z; BYTE 0,1,0,#29 ODIFI
|
MUX x,y,z; BYTE 0,1,rM,#2a MUX
|
MUX x,y,z; BYTE 0,1,rM,#2a MUX
|
MUX x,y,z; BYTE 0,1,rM,#29 MUXI
|
MUX x,y,z; BYTE 0,1,rM,#29 MUXI
|
SADD x,y,z; BYTE 0,1,0,#2a SADD
|
SADD x,y,z; BYTE 0,1,0,#2a SADD
|
SADD x,y,z; BYTE 0,1,0,#29 SADDI
|
SADD x,y,z; BYTE 0,1,0,#29 SADDI
|
MOR x,y,z; BYTE 0,1,0,#2a MOR
|
MOR x,y,z; BYTE 0,1,0,#2a MOR
|
MOR x,y,z; BYTE 0,1,0,#29 MORI
|
MOR x,y,z; BYTE 0,1,0,#29 MORI
|
MXOR x,y,z; BYTE 0,1,0,#2a MXOR
|
MXOR x,y,z; BYTE 0,1,0,#2a MXOR
|
MXOR x,y,z; BYTE 0,1,0,#29 MXORI
|
MXOR x,y,z; BYTE 0,1,0,#29 MXORI
|
SET x,z; BYTE 0,1,0,#20 SETH
|
SET x,z; BYTE 0,1,0,#20 SETH
|
SET x,z; BYTE 0,1,0,#20 SETMH
|
SET x,z; BYTE 0,1,0,#20 SETMH
|
SET x,z; BYTE 0,1,0,#20 SETML
|
SET x,z; BYTE 0,1,0,#20 SETML
|
SET x,z; BYTE 0,1,0,#20 SETL
|
SET x,z; BYTE 0,1,0,#20 SETL
|
ADDU x,x,z; BYTE 0,1,0,#30 INCH
|
ADDU x,x,z; BYTE 0,1,0,#30 INCH
|
ADDU x,x,z; BYTE 0,1,0,#30 INCMH
|
ADDU x,x,z; BYTE 0,1,0,#30 INCMH
|
ADDU x,x,z; BYTE 0,1,0,#30 INCML
|
ADDU x,x,z; BYTE 0,1,0,#30 INCML
|
ADDU x,x,z; BYTE 0,1,0,#30 INCL
|
ADDU x,x,z; BYTE 0,1,0,#30 INCL
|
OR x,x,z; BYTE 0,1,0,#30 ORH
|
OR x,x,z; BYTE 0,1,0,#30 ORH
|
OR x,x,z; BYTE 0,1,0,#30 ORMH
|
OR x,x,z; BYTE 0,1,0,#30 ORMH
|
OR x,x,z; BYTE 0,1,0,#30 ORML
|
OR x,x,z; BYTE 0,1,0,#30 ORML
|
OR x,x,z; BYTE 0,1,0,#30 ORL
|
OR x,x,z; BYTE 0,1,0,#30 ORL
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNH
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNH
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNMH
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNMH
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNML
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNML
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNL
|
ANDN x,x,z; BYTE 0,1,0,#30 ANDNL
|
SET inst_ptr,yz; BYTE 0,1,0,#41 JMP
|
SET inst_ptr,yz; BYTE 0,1,0,#41 JMP
|
SET inst_ptr,yz; BYTE 0,1,0,#41 JMPB
|
SET inst_ptr,yz; BYTE 0,1,0,#41 JMPB
|
JMP PushJ+@-O; BYTE 0,1,0,#60 PUSHJ
|
JMP PushJ+@-O; BYTE 0,1,0,#60 PUSHJ
|
JMP PushJ+@-O; BYTE 0,1,0,#60 PUSHJB
|
JMP PushJ+@-O; BYTE 0,1,0,#60 PUSHJB
|
SET x,yz; BYTE 0,1,0,#60 GETA
|
SET x,yz; BYTE 0,1,0,#60 GETA
|
SET x,yz; BYTE 0,1,0,#60 GETAB
|
SET x,yz; BYTE 0,1,0,#60 GETAB
|
JMP Put+@-O; BYTE 0,1,0,#02 PUT
|
JMP Put+@-O; BYTE 0,1,0,#02 PUT
|
JMP Put+@-O; BYTE 0,1,0,#01 PUTI
|
JMP Put+@-O; BYTE 0,1,0,#01 PUTI
|
JMP Pop+@-O; BYTE 0,3,rJ,#00 POP
|
JMP Pop+@-O; BYTE 0,3,rJ,#00 POP
|
JMP Resume+@-O; BYTE 0,5,0,#00 RESUME
|
JMP Resume+@-O; BYTE 0,5,0,#00 RESUME
|
JMP Save+@-O; BYTE 20,1,0,#20 SAVE
|
JMP Save+@-O; BYTE 20,1,0,#20 SAVE
|
JMP Unsave+@-O; BYTE 20,1,0,#02 UNSAVE
|
JMP Unsave+@-O; BYTE 20,1,0,#02 UNSAVE
|
JMP Sync+@-O; BYTE 0,1,0,#01 SYNC
|
JMP Sync+@-O; BYTE 0,1,0,#01 SYNC
|
SWYM x,y,z; BYTE 0,1,0,#00 SWYM
|
SWYM x,y,z; BYTE 0,1,0,#00 SWYM
|
JMP Get+@-O; BYTE 0,1,0,#20 GET
|
JMP Get+@-O; BYTE 0,1,0,#20 GET
|
JMP Trip+@-O; BYTE 0,5,0,#0a TRIP
|
JMP Trip+@-O; BYTE 0,5,0,#0a TRIP
|
|
|
Done AND t,f,X_is_dest_bit % doubly defined but OK
|
Done AND t,f,X_is_dest_bit % doubly defined but OK
|
BZ t,1F
|
BZ t,1F
|
XDone STOU x,xptr,0
|
XDone STOU x,xptr,0
|
1H GET t,rA
|
1H GET t,rA
|
AND t,t,#ff
|
AND t,t,#ff
|
OR exc,exc,t
|
OR exc,exc,t
|
AND t,exc,U_BIT+X_BIT Check for trip, \S123
|
AND t,exc,U_BIT+X_BIT Check for trip, \S123
|
CMPU t,t,U_BIT
|
CMPU t,t,U_BIT
|
PBNZ t,1F branch unless underflow is exact
|
PBNZ t,1F branch unless underflow is exact
|
0H GREG U_BIT<<8
|
0H GREG U_BIT<<8
|
AND t,aa,0B
|
AND t,aa,0B
|
BNZ t,1F branch if underflow is enabled
|
BNZ t,1F branch if underflow is enabled
|
ANDNL exc,U_BIT ignore U if exact and not enabled
|
ANDNL exc,U_BIT ignore U if exact and not enabled
|
1H PBZ exc,Update
|
1H PBZ exc,Update
|
SRU t,aa,8
|
SRU t,aa,8
|
AND t,t,exc
|
AND t,t,exc
|
PBZ t,4F
|
PBZ t,4F
|
SET xx,0 Initiate a trip, \S124
|
SET xx,0 Initiate a trip, \S124
|
SLU t,t,55
|
SLU t,t,55
|
2H INCL xx,1
|
2H INCL xx,1
|
SLU t,t,1
|
SLU t,t,1
|
PBNN t,2B
|
PBNN t,2B
|
SET t,#100
|
SET t,#100
|
SRU t,t,xx
|
SRU t,t,xx
|
ANDN exc,exc,t
|
ANDN exc,exc,t
|
TakeTrip STOU inst_ptr,g,8*rW
|
TakeTrip STOU inst_ptr,g,8*rW
|
SLU inst_ptr,xx,4
|
SLU inst_ptr,xx,4
|
INCH inst,#8000
|
INCH inst,#8000
|
STOU inst,g,8*rX
|
STOU inst,g,8*rX
|
AND t,f,Mem_bit
|
AND t,f,Mem_bit
|
PBZ t,1F
|
PBZ t,1F
|
ADDU y,y,z
|
ADDU y,y,z
|
SET z,x
|
SET z,x
|
1H STOU y,g,8*rY
|
1H STOU y,g,8*rY
|
STOU z,g,8*rZ
|
STOU z,g,8*rZ
|
LDOU t,g,c255
|
LDOU t,g,c255
|
STOU t,g,8*rB
|
STOU t,g,8*rB
|
LDOU t,g,8*rJ
|
LDOU t,g,8*rJ
|
STOU t,g,c255
|
STOU t,g,c255
|
4H OR aa,aa,exc
|
4H OR aa,aa,exc
|
0H GREG #0000000800000004 Update the clocks, \S128
|
0H GREG #0000000800000004 Update the clocks, \S128
|
Update MOR t,f,0B $2^{32}$mems + oops
|
Update MOR t,f,0B $2^{32}$mems + oops
|
ADDU cc,cc,t
|
ADDU cc,cc,t
|
ADDU uu,uu,1
|
ADDU uu,uu,1
|
SUBU ii,ii,1
|
SUBU ii,ii,1
|
AllDone PBZ resuming,Fetch
|
AllDone PBZ resuming,Fetch
|
CMPU t,op,#F9 RESUME
|
CMPU t,op,#F9 RESUME
|
CSNZ resuming,t,0
|
CSNZ resuming,t,0
|
JMP Fetch
|
JMP Fetch
|
|
|
OctaArgs OCTA Global+8*255,8
|
OctaArgs OCTA Global+8*255,8
|
Infile IS 3
|
Infile IS 3
|
Main LDA Mem:head,Chunk0
|
Main LDA Mem:head,Chunk0
|
ADDU Mem:alloc,Mem:head,Mem:nodesize
|
ADDU Mem:alloc,Mem:head,Mem:nodesize
|
GET t,rN
|
GET t,rN
|
INCL t,1
|
INCL t,1
|
STOU t,g,8*rN
|
STOU t,g,8*rN
|
LDOU t,$1,8 argv[1]
|
LDOU t,$1,8 argv[1]
|
STOU t,IOArgs
|
STOU t,IOArgs
|
LDA t,IOArgs
|
LDA t,IOArgs
|
TRAP 0,Fopen,Infile
|
TRAP 0,Fopen,Infile
|
BN t,Error
|
BN t,Error
|
1H GETA t,OctaArgs
|
1H GETA t,OctaArgs
|
TRAP 0,Fread,Infile
|
TRAP 0,Fread,Infile
|
BN t,9F
|
BN t,9F
|
LDOU loc,g,c255
|
LDOU loc,g,c255
|
2H GETA t,OctaArgs
|
2H GETA t,OctaArgs
|
TRAP 0,Fread,Infile
|
TRAP 0,Fread,Infile
|
LDOU x,g,c255
|
LDOU x,g,c255
|
BN t,Error
|
BN t,Error
|
SET arg,loc
|
SET arg,loc
|
BZ x,1B
|
BZ x,1B
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
STOU x,res,0
|
STOU x,res,0
|
INCL loc,8
|
INCL loc,8
|
JMP 2B
|
JMP 2B
|
9H TRAP 0,Fclose,Infile
|
9H TRAP 0,Fclose,Infile
|
SUBU loc,loc,8
|
SUBU loc,loc,8
|
STOU loc,g,c255 place to UNSAVE
|
STOU loc,g,c255 place to UNSAVE
|
SUBU arg,loc,8*13
|
SUBU arg,loc,8*13
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDOU inst_ptr,res,0 Main
|
LDOU inst_ptr,res,0 Main
|
SET arg,#90 Get ready to UNSAVE, \S162
|
SET arg,#90 Get ready to UNSAVE, \S162
|
PUSHJ res,MemFind
|
PUSHJ res,MemFind
|
LDTU x,res,0
|
LDTU x,res,0
|
SET resuming,1 RESUME_AGAIN
|
SET resuming,1 RESUME_AGAIN
|
CSNZ inst_ptr,x,#90
|
CSNZ inst_ptr,x,#90
|
0H GREG #FB<<24+255 UNSAVE $255
|
0H GREG #FB<<24+255 UNSAVE $255
|
STOU 0B,g,8*rX
|
STOU 0B,g,8*rX
|
SET gg,c255
|
SET gg,c255
|
JMP Fetch
|
JMP Fetch
|
|
|
LOC Global+8*rK; OCTA -1
|
LOC Global+8*rK; OCTA -1
|
LOC Global+8*rT; OCTA #8000000500000000
|
LOC Global+8*rT; OCTA #8000000500000000
|
LOC Global+8*rTT; OCTA #8000000600000000
|
LOC Global+8*rTT; OCTA #8000000600000000
|
LOC Global+8*rV; OCTA #369c200400000000
|
LOC Global+8*rV; OCTA #369c200400000000
|
|
|
LOC U_Handler
|
LOC U_Handler
|
ORL exc,U_BIT
|
ORL exc,U_BIT
|
JMP Done
|
JMP Done
|
|
|