Diff for /gforth/arch/misc/prim.fs between versions 1.7 and 1.8

version 1.7, 2002/03/21 13:10:37 version 1.8, 2002/03/25 15:35:54
Line 1 Line 1
   
   
   0 [IF]
   Ideas/Todo
   
   - x! x@ is only used in key.fs, we could do (emit), (key)...
     as primtives and than drop x! and x@
   
   [THEN]
   
 UNLOCK  UNLOCK
 >ENVIRON  >ENVIRON
 \ true SetValue PrimTrace  \ true SetValue PrimTrace
   
 LOCK  LOCK
   
   UNLOCK
   also assembler definitions
   
   X has? PrimTrace [IF]
   : dout PC+6 X , accu X ,
          *accu X , txd X ,
          PC+4 X , jmp X ,
          X , 0 X , ;
   [ELSE]
   : dout drop ;
   [THEN]
   
   LOCK
   
 \ pie primitives  \ pie primitives
   
 $20 allot  $20 allot
Line 123  End-Label Line 145  End-Label
 [THEN]  [THEN]
   
   
 Code: :docol    sym docol  Code: :docol    
 \? PrimTrace    "0" , tx ,                  ': dout
                 RP , accu ,                  RP , accu ,
                 #1 , sub ,                  #1 , sub ,
                 accu , RP ,                  accu , RP ,
Line 135  Code: :docol sym docol Line 157  Code: :docol sym docol
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code: :docon    sym docon  Code: :docon    
 \? PrimTrace    "1" , tx ,                  '1 dout
                 #0 , add ,                  #0 , add ,
                 W , shr ,                  W , shr ,
                 #2 , add ,                  #2 , add ,
Line 148  Code: :docon sym docon Line 170  Code: :docon sym docon
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code: :dovar    sym dovar  Code: :dovar
 \? PrimTrace    "2" , tx ,                  '2 dout
                 W , accu ,                  W , accu ,
                 #4 , add ,                  #4 , add ,
                 accu , t0 ,                  accu , t0 ,
Line 160  Code: :dovar sym dovar Line 182  Code: :dovar sym dovar
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code: :douser   sym douser  Code: :douser   
 \? PrimTrace    "3" , tx ,                  '3 dout
                 #0 , add ,                  #0 , add ,
                 W , shr ,                  W , shr ,
                 #2 , add ,                  #2 , add ,
Line 175  Code: :douser sym douser Line 197  Code: :douser sym douser
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code: :dodefer  sym dodefer  Code: :dodefer  
 \? PrimTrace    "4" , tx ,                  '4 dout
                 #0 , add ,                  #0 , add ,
                 W , shr ,                  W , shr ,
                 #2 , add ,                  #2 , add ,
Line 184  Code: :dodefer sym dodefer Line 206  Code: :dodefer sym dodefer
                 "Next1" , jmp ,                  "Next1" , jmp ,
 end-code  end-code
   
 Code: :dofield  sym dofield  Code: :dofield
 \? PrimTrace    "5" , tx ,                  '5 dout
                 #0 , add ,                  #0 , add ,
                 W , shr ,                  W , shr ,
                 #2 , add ,                  #2 , add ,
Line 200  Code: :dofield sym dofield Line 222  Code: :dofield sym dofield
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code: :dodoes   sym dodoes  Code: :dodoes
 \? PrimTrace    "6" , tx ,                  '6 dout
                 RP , accu ,                  RP , accu ,
                 #1 , sub ,                  #1 , sub ,
                 accu , RP ,                  accu , RP ,
Line 224  end-code Line 246  end-code
 Code: :doesjump  Code: :doesjump
 end-code  end-code
   
 Code !          sym !  Code execute
 \? PrimTrace    "A" , tx ,                  'E dout
                   SP , accu ,
                   *accu , W ,
                   #1 , add ,
                   accu , SP ,
                   "Next1" , jmp ,
   end-code
   
   Code ;s
                   '; dout
                   RP , accu ,
                   #1 , add ,
                   accu , RP ,
                   #1 , sub ,
                   *accu , IP ,
                   "Next" , jmp ,
   end-code
   
   Code !
                   '! dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 237  Code !  sym ! Line 278  Code !  sym !
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code @          sym @  Code @
 \? PrimTrace    "B" , tx ,                  '@ dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
                 *accu , shr ,                  *accu , shr ,
Line 248  Code @  sym @ Line 289  Code @  sym @
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code x!         sym x!  Code x!
 \? PrimTrace    "C" , tx ,                  'X dout
                 SP , accu ,                  SP , accu ,
                 *accu , dstx ,                  *accu , dstx ,
                 #1 , add ,                  #1 , add ,
Line 259  Code x!  sym x! Line 300  Code x!  sym x!
                 "xmov" , jmp ,                  "xmov" , jmp ,
 end-code  end-code
                                   
 Code x@         sym x@  Code x@
 \? PrimTrace    "D" , tx ,                  'x dout
                 SP , accu ,                  SP , accu ,
                 *accu , srcx ,                  *accu , srcx ,
                 accu , dstx ,                  accu , dstx ,
                 "xmov" , jmp ,                  "xmov" , jmp ,
 end-code  end-code
   
 Code execute    sym execute  Code ?branch
 \? PrimTrace    "E" , tx ,                  '? dout
                 SP , accu ,  
                 *accu , W ,  
                 #1 , add ,  
                 accu , SP ,  
                 "Next1" , jmp ,  
 end-code  
   
 Code ;s         sym ;s  
 \? PrimTrace    "F" , tx ,  
                 RP , accu ,  
                 #1 , add ,  
                 accu , RP ,  
                 #1 , sub ,  
                 *accu , IP ,  
                 "Next" , jmp ,  
 end-code  
   
 Code ?branch    sym ?branch  
 \? PrimTrace    "?" , tx ,  
                 #0 , add ,                  #0 , add ,
                 IP , shr ,                  IP , shr ,
                 accu , t0 ,                  accu , t0 ,
                 #1 , add ,                  #1 , add ,
                 accu , add ,                  accu , add ,
                 accu , IP ,                  accu , IP ,
                 SP , accu ,                  SP , accu ,
                 accu , 1 m ,                  *accu , t1 ,
                 #1 , add ,                  #1 , add ,
                 accu , SP ,                  accu , SP ,
                 1 r , accu ,                  t1 , accu ,
                 pc+4 , jz ,                  pc+4 , jz ,
                 sym no-branch  
                 "Next" , jmp ,                  "Next" , jmp ,
 \? PrimTrace    "+" , tx ,                  '~ dout
                 t0 , accu ,                  t0 , accu ,
                 *accu , accu ,                  *accu , accu ,
 Label >branch   sym branch-o  Label >branch
                 IP , add ,                  IP , add ,
                 #2 , sub ,                  #2 , sub ,
                 sym branch-to  
                 accu , IP ,                  accu , IP ,
                 "Next" , jmp ,                  "Next" , jmp ,
 Label "branch"  >branch ,  Label "branch"  >branch ,
 end-code  end-code
   
 Code branch     sym branch  Code branch
 \? PrimTrace    "/" , tx ,                  'b dout
                 #0 , add ,                  #0 , add ,
                 IP , shr ,                  IP , shr ,
                 *accu , accu ,                  *accu , accu ,
Line 324  Code branch sym branch Line 344  Code branch sym branch
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code (loop)     sym (loop)  Code (loop)     
                   'l dout
                 #0 , add ,                  #0 , add ,
                 IP , shr ,                  IP , shr ,
                 *accu , t0 ,                  *accu , t0 ,
Line 347  Code (loop) sym (loop) Line 368  Code (loop) sym (loop)
                 "branch" , jmp ,                  "branch" , jmp ,
 end-code  end-code
                                   
 Code xor        sym xor  Code xor
 \? PrimTrace    "H" , tx ,                  'x dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 361  Code xor sym xor Line 382  Code xor sym xor
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code or         sym or  Code or 
 \? PrimTrace    "I" , tx ,                  'o dout 
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 375  Code or  sym or Line 396  Code or  sym or
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code and        sym and  Code and
 \? PrimTrace    "J" , tx ,                  'a dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 389  Code and sym and Line 410  Code and sym and
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code +          sym +  Code +          
 \? PrimTrace    "K" , tx ,                  '+ dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 403  Code +  sym + Line 424  Code +  sym +
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code -          sym -  Code -          
 \? PrimTrace    "L" , tx ,                  '- dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 417  Code -  sym - Line 438  Code -  sym -
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 2/         sym 2/  Code 2/         
 \? PrimTrace    "M" , tx ,                  '/ dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
Line 433  Code 2/  sym 2/ Line 454  Code 2/  sym 2/
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 0=         sym 0=  Code 0=         
                   '° dout
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
                 ZF , accu ,                  ZF , accu ,
Line 445  Code 0=  sym 0= Line 467  Code 0=  sym 0=
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 0<>        sym 0<>  Code 0<>        
                   '% dout
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
                 ZF , accu ,                  ZF , accu ,
Line 456  Code 0<> sym 0<> Line 479  Code 0<> sym 0<>
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code =          sym =  Code =          
                   '= dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 472  Code =  sym = Line 496  Code =  sym =
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code u<         sym u<  Code u<         
                   '< dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 488  Code u<  sym u< Line 513  Code u<  sym u<
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 1+         sym 1+  Code 1+         
                   'p dout
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
                 #1 , add ,                  #1 , add ,
Line 498  Code 1+  sym 1+ Line 524  Code 1+  sym 1+
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code cell+      sym cell+  Code cell+      
                   'P dout
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
                 #2 , add ,                  #2 , add ,
Line 508  Code cell+ sym cell+ Line 535  Code cell+ sym cell+
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 8<<        sym 8<<  Code 8<<        
 \? PrimTrace    "T" , tx ,                  '{ dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
Line 527  Code 8<< sym 8<< Line 554  Code 8<< sym 8<<
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code 8>>        sym 8>>  Code 8>>        
 \? PrimTrace    "T" , tx ,                  '{ dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
 Label c-even@   *accu , shr ,  Label c-even@   *accu , shr ,
Line 547  Label c-even@ *accu , shr , Line 574  Label c-even@ *accu , shr ,
 Label "c-even@" c-even@ ,  Label "c-even@" c-even@ ,
 end-code  end-code
   
 Code c@         sym c@  Code c@         
                   'c dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
                 *accu , shr ,                  *accu , shr ,
Line 560  Code c@  sym c@ Line 588  Code c@  sym c@
                 t0 , *accu ,                  t0 , *accu ,
                 "Next" , jmp ,                  "Next" , jmp ,
   
 Code 2*         sym 2*  Code 2*         
 \? PrimTrace    "N" , tx ,                  '* dout
                 SP , accu ,                  SP , accu ,
                 *accu , accu ,                  *accu , accu ,
                 accu , add ,                  accu , add ,
Line 571  Code 2*  sym 2* Line 599  Code 2*  sym 2*
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code >r         sym >r  Code >r         
 \? PrimTrace    "O" , tx ,                  'R dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 584  Code >r  sym >r Line 612  Code >r  sym >r
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code r>         sym r>  Code r>         
 \? PrimTrace    "P" , tx ,                  'r dout
                 RP , accu ,                  RP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 597  Code r>  sym r> Line 625  Code r>  sym r>
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code sp@        sym sp@  Code sp@        
 \? PrimTrace    "Q" , tx ,                  's dout
                 SP , accu ,                  SP , accu ,
                 accu , add ,                  accu , add ,
                 accu , t0 ,                  accu , t0 ,
Line 609  Code sp@ sym sp@ Line 637  Code sp@ sym sp@
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code sp!        sym sp!  Code sp!        
                   'S dout
                 #0 , add ,                  #0 , add ,
                 SP , accu ,                  SP , accu ,
                 *accu , shr ,                  *accu , shr ,
Line 617  Code sp! sym sp! Line 646  Code sp! sym sp!
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code rp@        sym rp@  Code rp@        
 \? PrimTrace    "R" , tx ,  
                 RP , accu ,                  RP , accu ,
                 accu , add ,                  accu , add ,
                 accu , t0 ,                  accu , t0 ,
Line 640  Code rp! sym rp! Line 668  Code rp! sym rp!
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code drop       sym drop  Code drop
 \? PrimTrace    "S" , tx ,                  'd dout 
                 SP , accu ,                  SP , accu ,
                 #1 , add ,                  #1 , add ,
                 accu , SP ,                  accu , SP ,
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code lit        sym lit  Code lit        
 \? PrimTrace    "#" , tx ,                  '# dout
                 IP , shr ,                  IP , shr ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 662  Code lit sym lit Line 690  Code lit sym lit
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code dup        sym dup  Code dup        
                   'u dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , sub ,                  #1 , sub ,
Line 671  Code dup sym dup Line 700  Code dup sym dup
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code I          sym r@  Code r@         
                   'I dout
                 RP , accu ,                  RP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 SP , accu ,                  SP , accu ,
Line 681  Code I  sym r@ Line 711  Code I  sym r@
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code over       sym over  Code over       
                   'v dout
                 SP , accu ,                  SP , accu ,
                 #1 , add ,                  #1 , add ,
                 *accu , t0 ,                  *accu , t0 ,
Line 691  Code over sym over Line 722  Code over sym over
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code swap       sym swap  Code swap       
                   'w dout
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 702  Code swap sym swap Line 734  Code swap sym swap
                 "Next" , jmp ,                  "Next" , jmp ,
 end-code  end-code
   
 Code d+         sym d+  Code d+         
                 SP , accu ,                  SP , accu ,
                 *accu , t0 ,                  *accu , t0 ,
                 #1 , add ,                  #1 , add ,
Line 782  Code /modstep ( ud c R: u -- ud-?u 0/1 ) Line 814  Code /modstep ( ud c R: u -- ud-?u 0/1 )
                 #1 , sub ,                  #1 , sub ,
                 "d2*+" , jmp ,                  "d2*+" , jmp ,
 end-code  end-code
   
   Code (key)      
                   SP , accu ,
                   #1 , sub ,
                   accu , SP ,
                   rxd , *accu ,
                   "Next" , jmp ,
   end-code
   
   Code (key?)      
                   rx? , accu ,
                   ZF , accu ,
                   #1 , sub ,
                   accu , t0 ,
                   SP , accu ,
                   #1 , sub ,
                   accu , SP ,
                   t0 , *accu ,
                   "Next" , jmp ,
   end-code
   
   Code (emit)      
                   SP , accu ,
                   *accu , txd ,
                   #1 , add ,
                   accu , SP ,
                   "Next" , jmp ,
   end-code
                                   
 RP 2* Constant RP  
 SP 2* Constant SP  
 UP 2* Constant UP  UP 2* Constant UP
 IP 2* Constant IP  
   
 \ c: sp! 2/ sp ! ;  
 \ c: sp@ sp @ 1+ 2* ;  
 \ c: rp@ rp @ 2* ;  
 \ c: rp! r> swap 2/ rp ! >r ;  
 : up@ up @ ;  : up@ up @ ;
 : up! up ! ;  : up! up ! ;
   
 include ./key.fs  \ include ./key.fs
   include ./optcmove.fs

Removed from v.1.7  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>