--- gforth/arch/misc/prim.fs 1997/05/29 19:43:10 1.1 +++ gforth/arch/misc/prim.fs 1998/03/08 23:47:00 1.2 @@ -2,36 +2,44 @@ $20 allot -Label start ahere $28 + , jmp , +Label start ahere $21 + , jmp , Label #0 0 , Label #1 1 , -Label #2 2 , -Label #4 4 , -Label #FF $FF , -Label #$8000 $8000 , -Label #-1 -1 , Label RP 0 , Label SP 0 , Label UP 0 , Label IP 0 , Label W 0 , +Label t0 0 , +Label t1 0 , +Label t2 0 , +Label t3 0 , +Label srcx 0 , +Label dstx 0 , + +\ Up to here it's self modified +\ If there's a gap here, add a jump to Next after dstx + Label Next #0 , add , IP , shr , sym Next - accu , 0 m , - 0 r , W , + *accu , W , #1 , add , accu , add , accu , IP , -Label Next1 #0 , add , - W , shr , - accu , 0 m , - #0 , add , - 0 r , shr , +Label Next1 W , shr , + *accu , shr , accu , jmp , Label "Next" Next , Label "Next1" Next1 , +Label "xmov" srcx , + +Label #2 2 , +Label #4 4 , +Label #FF $FF , +Label #$8000 $8000 , +Label #-1 -1 , Label "0" '< , Label "1" '1 , @@ -71,8 +79,7 @@ Code: :docol sym docol RP , accu , #1 , sub , accu , RP , - accu , 0 m , - IP , 0 r , + IP , *accu , W , accu , #4 , add , accu , IP , @@ -81,43 +88,41 @@ end-code Code: :docon sym docon \ "1" , tx , - SP , accu , - #1 , sub , - accu , SP , - accu , 0 m , #0 , add , W , shr , #2 , add , - accu , 1 m , - 1 r , 0 r , + *accu , t0 , + SP , accu , + #1 , sub , + accu , SP , + t0 , *accu , "Next" , jmp , end-code Code: :dovar sym dovar \ "2" , tx , + W , accu , + #4 , add , + accu , t0 , SP , accu , #1 , sub , accu , SP , - accu , 0 m , - W , accu , - #4 , add , - accu , 0 r , + t0 , *accu , "Next" , jmp , end-code Code: :douser sym douser \ "3" , tx , - SP , accu , - #1 , sub , - accu , SP , - accu , 0 m , #0 , add , W , shr , #2 , add , - accu , 1 m , - 1 r , accu , + *accu , accu , UP , add , - accu , 0 r , + accu , t0 , + SP , accu , + #1 , sub , + accu , SP , + t0 , *accu , "Next" , jmp , end-code @@ -126,8 +131,7 @@ Code: :dodefer sym dodefer #0 , add , W , shr , #2 , add , - accu , 0 m , - 0 r , W , + *accu , W , "Next1" , jmp , end-code @@ -136,12 +140,14 @@ Code: :dofield sym dofield #0 , add , W , shr , #2 , add , - accu , 0 m , - 0 r , accu , - SP , 0 m , - 0 r , add , - SP , 0 m , - accu , 0 r , + *accu , accu , + accu , t0 , + SP , accu , + *accu , accu , + t0 , add , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code @@ -150,76 +156,69 @@ Code: :dodoes sym dodoes RP , accu , #1 , sub , accu , RP , - accu , 0 m , - ip , 0 r , + IP , *accu , + W , accu , + #4 , add , + accu , t0 , SP , accu , #1 , sub , accu , SP , - accu , 0 m , - W , accu , - #4 , add , - accu , 0 r , + t0 , *accu , + t0 , accu , #2 , sub , #0 , add , accu , shr , - accu , 0 m , - 0 r , IP , + *accu , IP , "Next" , jmp , end-code Code ! sym ! \ "A" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , - accu , 1 m , + *accu , t1 , #1 , add , accu , SP , - #0 , add , - 0 r , shr , - accu , 2 m , - 1 r , 2 r , + t0 , shr , + t1 , *accu , "Next" , jmp , end-code Code @ sym @ \ "B" , tx , #0 , add , - SP , 0 m , - SP , 1 m , - 1 r , shr , - accu , 2 m , - 2 r , 0 r , + SP , accu , + *accu , shr , + *accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code x! sym x! \ "C" , tx , SP , accu , - accu , 0 m , + *accu , dstx , #1 , add , - accu , 1 m , + accu , srcx , #1 , add , accu , SP , - 0 r , 2 m , - 1 r , 2 r , - "Next" , jmp , + "xmov" , jmp , end-code Code x@ sym x@ \ "D" , tx , - SP , 0 m , - SP , 1 m , - 1 r , 2 m , - 2 r , 0 r , - "Next" , jmp , + SP , accu , + *accu , srcx , + accu , dstx , + "xmov" , jmp , end-code Code execute sym execute \ "E" , tx , SP , accu , - accu , 0 m , - 0 r , W , + *accu , W , #1 , add , accu , SP , "Next1" , jmp , @@ -228,10 +227,10 @@ end-code Code ;s sym ;s \ "F" , tx , RP , accu , - accu , 0 m , #1 , add , accu , RP , - 0 r , IP , + #1 , sub , + *accu , IP , "Next" , jmp , end-code @@ -239,7 +238,7 @@ Code ?branch sym ?branch \ "?" , tx , #0 , add , IP , shr , - accu , 0 m , + accu , t0 , #1 , add , accu , add , accu , IP , @@ -252,7 +251,8 @@ Code ?branch sym ?branch sym no-branch "Next" , jmp , \ "+" , tx , - 0 r , accu , + t0 , accu , + *accu , accu , Label >branch sym branch-o IP , add , #2 , sub , @@ -266,8 +266,7 @@ Code branch sym branch \ "/" , tx , #0 , add , IP , shr , - accu , 0 m , - 0 r , accu , + *accu , accu , IP , add , accu , IP , "Next" , jmp , @@ -276,175 +275,184 @@ end-code Code (loop) sym (loop) #0 , add , IP , shr , - accu , 0 m , + *accu , t0 , #1 , add , accu , add , accu , IP , RP , accu , - accu , 1 m , - accu , 2 m , + *accu , t2 , #1 , add , - accu , 3 m , - 2 r , accu , + *accu , t3 , + t2 , accu , #1 , add , - accu , 1 r , - 3 r , sub , + accu , t1 , + RP , accu , + t1 , *accu , + t1 , accu , + t3 , sub , "Next" , jz , - 0 r , accu , + t0 , accu , "branch" , jmp , end-code Code xor sym xor \ "H" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , xor , - accu , 2 r , + *accu , accu , + t0 , xor , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code or sym or \ "I" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , or , - accu , 2 r , + *accu , accu , + t0 , or , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code and sym and \ "J" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , and , - accu , 2 r , + *accu , accu , + t0 , and , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code + sym + \ "K" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , add , - accu , 2 r , + *accu , accu , + t0 , add , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code - sym - \ "L" , tx , SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , subr , - accu , 2 r , + *accu , accu , + t0 , sub , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code 2/ sym 2\/ \ "M" , tx , #0 , add , - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , PC+6 , js , accu , shr , PC+6 , jmp , accu , shr , #$8000 , or , - accu , 1 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code 0= sym 0= - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , ZF , accu , - #0 , subr , - accu , 1 r , + #1 , xor , + #1 , sub , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code 0<> sym 0<> - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , ZF , accu , - #0 , subr , - #-1 , xor , - accu , 1 r , + #1 , sub , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code = sym = SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 0 r , accu , - 1 r , sub , + *accu , accu , + t0 , sub , ZF , accu , - #0 , subr , - accu , 2 r , + #1 , xor , + #1 , sub , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code u< sym u< SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , - accu , 1 m , - accu , 2 m , - 1 r , accu , - 0 r , sub , + *accu , accu , + t0 , sub , CF , accu , - #0 , subr , - accu , 2 r , + #1 , xor , + #1 , sub , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code 1+ sym 1+ - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , #1 , add , - accu , 1 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code cell+ sym cell+ - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , #2 , add , - accu , 1 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code @@ -452,8 +460,7 @@ Code 8<< sym 8<< \ "T" , tx , #0 , add , SP , accu , - accu , 0 m , - 0 r , accu , + *accu , accu , accu , add , accu , add , accu , add , @@ -462,8 +469,9 @@ Code 8<< sym 8<< accu , add , accu , add , accu , add , - SP , 0 m , - accu , 0 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code @@ -471,8 +479,7 @@ Code 8>> sym 8>> \ "T" , tx , #0 , add , SP , accu , -Label c-even@ accu , 0 m , - 0 r , shr , +Label c-even@ *accu , shr , accu , shr , accu , shr , accu , shr , @@ -481,102 +488,102 @@ Label c-even@ accu , 0 m , accu , shr , accu , shr , #FF , and , - SP , 0 m , - accu , 0 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , Label "c-even@" c-even@ , end-code Code c@ sym c@ #0 , add , - SP , 0 m , - 0 r , shr , + SP , accu , + *accu , shr , PC+4 , jc , "c-even@" , jmp , - accu , 0 m , - 0 r , accu , + *accu , accu , #FF , and , - SP , 0 m , - accu , 0 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , Code 2* sym 2* \ "N" , tx , - SP , 0 m , - SP , 1 m , - 0 r , accu , + SP , accu , + *accu , accu , accu , add , - accu , 1 r , + accu , t0 , + SP , accu , + t0 , *accu , "Next" , jmp , end-code Code >r sym >r \ "O" , tx , - RP , accu , - #1 , sub , - accu , RP , - accu , 0 m , SP , accu , - accu , 1 m , + *accu , t0 , #1 , add , accu , SP , - 1 r , 0 r , + RP , accu , + #1 , sub , + accu , RP , + t0 , *accu , "Next" , jmp , end-code Code r> sym r> \ "P" , tx , RP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , RP , SP , accu , #1 , sub , accu , SP , - accu , 1 m , - 0 r , 1 r , + t0 , *accu , "Next" , jmp , end-code Code sp@ sym sp@ \ "Q" , tx , SP , accu , + accu , add , + accu , t0 , + SP , accu , #1 , sub , - accu , 0 m , accu , SP , - #1 , add , - accu , add , - accu , 0 r , + t0 , *accu , "Next" , jmp , end-code Code sp! sym sp! #0 , add , - SP , 0 m , - 0 r , shr , + SP , accu , + *accu , shr , accu , SP , "Next" , jmp , end-code Code rp@ sym rp@ \ "R" , tx , + RP , accu , + accu , add , + accu , t0 , SP , accu , #1 , sub , - accu , 0 m , accu , SP , - RP , accu , - accu , add , - accu , 0 r , + t0 , *accu , "Next" , jmp , end-code Code rp! sym rp! SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , accu , SP , #0 , add , - 0 r , shr , + t0 , shr , accu , RP , "Next" , jmp , end-code @@ -591,112 +598,107 @@ end-code Code lit sym lit \ "#" , tx , - SP , accu , - #1 , sub , - accu , SP , - #0 , add , - accu , 0 m , IP , shr , - accu , 1 m , + *accu , t0 , #1 , add , accu , add , accu , IP , - 1 r , 0 r , + SP , accu , + #1 , sub , + accu , SP , + t0 , *accu , "Next" , jmp , end-code Code dup sym dup SP , accu , - accu , 0 m , + *accu , t0 , #1 , sub , accu , SP , - accu , 1 m , - 0 r , 1 r , + t0 , *accu , "Next" , jmp , end-code Code I sym r@ + RP , accu , + *accu , t0 , SP , accu , - RP , 0 m , #1 , sub , accu , SP , - accu , 1 m , - 0 r , 1 r , + t0 , *accu , "Next" , jmp , end-code Code over sym over SP , accu , #1 , add , - accu , 0 m , + *accu , t0 , #2 , sub , - accu , 1 m , accu , SP , - 0 r , 1 r , + t0 , *accu , "Next" , jmp , end-code Code swap sym swap SP , accu , - accu , 0 m , - accu , 1 m , + *accu , t0 , #1 , add , - accu , 2 m , - accu , 3 m , - 0 r , accu , \ TOS -> accu - 2 r , 1 r , \ NOS -> TOS - accu , 3 r , \ accu -> NOS + *accu , t1 , + t0 , *accu , + #1 , sub , + t1 , *accu , "Next" , jmp , end-code Code d+ sym d+ SP , accu , - accu , 0 m , + *accu , t0 , #1 , add , - accu , 1 m , + *accu , t1 , #1 , add , + *accu , t2 , accu , SP , - accu , 2 m , - accu , 3 m , #1 , add , - accu , 4 m , - accu , 5 m , - 1 r , accu , - 4 r , add , - accu , 5 r , + *accu , accu , + t1 , add , + accu , t1 , CF , accu , - 0 r , add , - 2 r , add , - accu , 3 r , + t2 , add , + t0 , add , + accu , t0 , + SP , accu , + t0 , *accu , + #1 , add , + t1 , *accu , "Next" , jmp , end-code Label cf1 0 , Code d2*+ sym d2*+ -Label >d2*+ SP , accu , - accu , 0 m , - accu , 1 m , + SP , accu , +Label >d2*+ *accu , t0 , #1 , add , - accu , 2 m , - accu , 3 m , - accu , 4 m , - accu , 5 m , - #1 , add , - accu , 6 m , - accu , 7 m , - 6 r , accu , - accu , add , - CF , cf1 , - 0 r , add , - accu , 7 r , - 5 r , accu , - #$8000 , and , - accu , 1 r , + *accu , t1 , + #1 , add , + *accu , t2 , + accu , t3 , + t0 , accu , + t2 , add , + t2 , add , + accu , t2 , CF , accu , - cf1 , add , - 2 r , add , - 3 r , add , - accu , 4 r , + t1 , add , + t1 , add , + accu , t0 , + t1 , accu , + #$8000 , and , + accu , t1 , + t3 , accu , + t2 , *accu , + #1 , sub , + t0 , *accu , + #1 , sub , + t1 , *accu , "Next" , jmp , end-code @@ -705,23 +707,28 @@ Label "d2*+" >d2*+ , Code /modstep ( ud c R: u -- ud-?u 0/1 ) sym /modstep SP , accu , - accu , 0 m , - accu , 1 m , + *accu , t0 , + #1 , add , + *accu , t1 , #1 , add , - accu , 2 m , - accu , 3 m , - RP , 4 m , - 2 r , accu , - 4 r , sub , - accu , res1 , + *accu , t2 , + t2 , accu , + t0 , sub , + accu , t0 , CF , accu , - 0 r , or , + t1 , or , PC+6 , JZ , #0 , accu , PC+6 , jmp , - res1 , 3 r , + t0 , t2 , #1 , accu , - accu , 1 r , + accu , t0 , + SP , accu , + #1 , add , + t0 , *accu , + #1 , add , + t2 , *accu , + #1 , sub , "d2*+" , jmp , end-code