OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.26/] [fp/] [implementation/] [mmix/] [sim.mms] - Diff between revs 15 and 270

Only display areas with differences | Details | Blame | View Log

Rev 15 Rev 270
% 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
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.