Re: [colorforth] Disassembling Pentium ColorForth
- Subject: Re: [colorforth] Disassembling Pentium ColorForth
- From: "Jeff Fox" <fox@xxxxxxxxxxxxxxxxxxx>
- Date: Thu, 29 Dec 2005 18:02:23 -0800 (PST)
- Importance: Normal
I think this shows a difference between Pentium colorforth and MISC
because on the MISC machines I have used the -IF opcode branches when the
sign or carry bit is not set. It is a branch if not negative, and
that includes 0.
I guess on Pentium colorforth -IF must not branch on 0 like it does
on MISC thus the -9 + instead of the -10 + that I would have expected
from MISC colorforth.
So on MISC to test for 0-9 or 10-15 I would do -10 +
0-9 becomes -10 to -1
10-15 becomes 0-5
you test sign or carry with -IF
if 0-5 you add the char "A"
if -10 to -1 you add the 10 back to get 0-9
and you add the char "0"
but you do just one + after the -IF
you use a ; after the second +
it packs into the same number of words either way
but it makes one path through the word 33% faster
(and will consume less power)
it is wasteful on MISC to fall through and do three +
at runtime
here it is a machineforth dialect that closely resembles
misc colorforth
: digit ( 0-15 -- "0"-"9"|"A"-"F")
-10 +
-if [ char 0 10 + ], + ;
then [ char A ], + ;
The -if might pack into the same word as the first +
it depends on the opcode bit-width, optional short-literal
availability, any need for extra nop with +, and cell width etc.
It could be written as one line, but I think it is easier
to read. I might put the + -IF on the same line if I knew it was
going to pack.
I am used to yellow to green color transition in colorforth
doing what the [ generate-number ], does above. Without that
it could be:
: digit ( n-n) -10 + -if 58 + ; then 65 + ;
---------------------------------------------------------------------
To unsubscribe, e-mail: colorforth-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: colorforth-help@xxxxxxxxxxxxxxxxxx
Main web page - http://www.colorforth.com