Post Reply 
FORTH for the SHARP PC-E500 (S)
11-13-2021, 07:19 PM (This post was last modified: 11-17-2021 09:09 PM by robve.)
Post: #56
RE: FORTH for the SHARP PC-E500 (S)
(11-13-2021 12:07 PM)Klaus Overhage Wrote:  I was curious whether the test suite works with Forth500. (https://forth-standard.org/standard/testsuite)
And the answer is yes, absolutely no problem.
[...]
The result is the DATE.FTH file in the attached zip archive. At the end of DATE.FTH there are two examples:
Code:
    2021 12 25 ymd2day 2dup day2dow weekday CR
    2021 11 13 ymd2day D- D.
The display shows after successful loading:
Saturday
42
The first day of Christmas is a Saturday and there are still 42 days until then.

Thanks for testing Forth500 and for providing a very useful example.

I've added DATE.FTH to the Forth500 additions on GitHub. I also added a new SEE.FTH decompiler and a Galton board demo GALTON.FTH. I plan to add more examples. Contributions to Forth500 are more than welcome Smile

With the new CLOAD Forth500 command, I can load any Forth program without a problem with the CE-126P, not needing a serial cable to do so. Using option -dINV with PocketTools bin2wav fixed my wav transfer issues as suggested by Torsten Mücker, the PocketTools maintainer (I had helped him update PocketTools for the PC-E500 with new C code so that E500 BASIC images are fully compiled now with bas2img.) With -dINV I've not had a single transfer error. However, transfer over serial is nicer, because loading and compiling happen simultaneously. And serial is bidirectional. I'm waiting for a serial cable to arrive from Takamatsu Japan. They also offer 256KB FRAM cards for the PC-E500(S).

I made a small change to DATE.FTH. I noticed that you defined RDROP but R>DROP is already included in Forth500. Either one is not standardized, so some Forth's use RDROP and other use R>DROP. Either one makes logically sense: R>DROP means R> DROP and RDROP simply means to drop from the R stack. So use R>DROP instead of RDROP in Forth500. Also please note that I've included extra words <> and > for all numeric versions (<> > D<> D> 0<> 0> D0<> D0> F<> F> F0<> F0>) for consistency. Also note that <= and >= are not part of the standard either, but these can be easily defined using INVERT and the Forth500 < and > words that already exist:

Code:
: <=    > INVERT ;
: >=    < INVERT ;
: 0<=   0> INVERT ;
: 0>=   0< INVERT ;
: D<=   D> INVERT ;
: D>=   D< INVERT ;
: D0<=  D0> INVERT ;
: D0>=  D0< INVERT ;
: F<=   F> INVERT ;
: F>=   F< INVERT ;
: F0<=  F0> INVERT ;
: F0>=  F0< INVERT ;

If you want to get the best performance by inlining this code, then define them IMMEDIATE with POSTPONEd words:

Code:
: <=    POSTPONE > POSTPONE INVERT ; IMMEDIATE
: >=    POSTPONE < POSTPONE INVERT ; IMMEDIATE

However, these words can now only be used in definitions (i.e. when compiling) and not interpreted and executed on the command line unless their definitions include a branch to execute code when in interpreting.

Alas, Forth in general has no INLINE modifier (I think I can do that in Forth500 as its updated design allows something like that actually), but the result with IMMEDIATE and POSTPONE is the same, just a lot more code to write when the definition is long. But inlining long definitions won't keep compiled Forth compact. Inlining only two words like the ones above is useful though if you're keen to use these words instead of just writing > INVERT etc.

- Rob

"I count on old friends to remain rational"
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
FORTH for the SHARP PC-E500 (S) - Helix - 09-06-2021, 11:41 PM
RE: FORTH for the SHARP PC-E500 (S) - dmh - 10-02-2022, 02:29 PM
RE: FORTH for the SHARP PC-E500 (S) - dmh - 10-04-2022, 12:46 PM
RE: FORTH for the SHARP PC-E500 (S) - dmh - 10-04-2022, 10:55 PM
RE: FORTH for the SHARP PC-E500 (S) - robve - 11-13-2021 07:19 PM



User(s) browsing this thread: 7 Guest(s)