FORTH Beginner Question.
09-06-2020, 06:49 PM
Post: #1
 twoweims Member Posts: 278 Joined: Apr 2019
FORTH Beginner Question.

I am just beginning to try to learn Forth on EMU71 for windows.
I have a bare bones real 71B but actual ROMs are made of unobtanium!

I have loaded the HP-41 Translator Pac and it seems to work fine.
I am able to switch between BASIC, FORTH, and HP-41 Modes.

I am trying to work through the examples in the "Starting-FORTH" Book.

I can execute built-in FORTH words but if i try to define a new word I get:
FTH ERR:Dictionary Full

The FTH41RAM file exists.
The "GROW" word seems to have no effect on the FTH41RAM File size (Should it?)

I am probably overlooking something very basic.

Thanks in advance for any assistance.
09-06-2020, 06:56 PM
Post: #2
 Massimo Gnerucci Senior Member Posts: 2,475 Joined: Dec 2013
RE: FORTH Beginner Question.
(09-06-2020 06:49 PM)twoweims Wrote:  Forgive me if this has already been answered. I did attempt to search the forum but got no results.

I am just beginning to try to learn Forth on EMU71 for windows.
I have a bare bones real 71B but actual ROMs are made of unobtanium!

I have loaded the HP-41 Translator Pac and it seems to work fine.
I am able to switch between BASIC, FORTH, and HP-41 Modes.

I am trying to work through the examples in the "Starting-FORTH" Book.

I can execute built-in FORTH words but if i try to define a new word I get:
FTH ERR:Dictionary Full

The FTH41RAM file exists.
The "GROW" word seems to have no effect on the FTH41RAM File size (Should it?)

I am probably overlooking something very basic.

Thanks in advance for any assistance.

I think you should use HP-71B Forth/Assembler ROM (HP 82441A).
But since I am no expert on the 71 I'll leave this to others.

This thread could be of interest.

Greetings,
Massimo

-+×÷ ↔ left is right and right is wrong
09-06-2020, 07:10 PM
Post: #3
 Garth Wilson Senior Member Posts: 515 Joined: Dec 2013
RE: FORTH Beginner Question.
Are you giving GROW the quantity parameter on the stack? I don't have that module but rather the other Forth module (HP82441A), and it works fine.

The HP82441A was my entry into Forth as well, and I had the book "Starting Forth" which I bought from EduCalc. The manual for the Forth module assumed you already spoke Forth and only needed to know the particulars about how it works on this systems with a 4-bit data bus and a 20-bit address bus and word length of five nybbles, and the book assumed you had something to practice on; so they were left pointing at each other. I did eventually get going though. The Forth provided by HP was not a very good one; but since it's Forth, I was able to expand and improve it a lot. I timed and re-wrote a lot of the built-in words, achieving, in the extreme case (of CHR\$), a 14x improvement in speed, without resorting to assembly language.

09-06-2020, 07:59 PM
Post: #4
 twoweims Member Posts: 278 Joined: Apr 2019
RE: FORTH Beginner Question.
Yes. It helps to push the number onto the stack first. DOH!
My dictionary has GROWn.

Thanks!
09-06-2020, 08:12 PM (This post was last modified: 09-06-2020 08:13 PM by Sylvain Cote.)
Post: #5
 Sylvain Cote Senior Member Posts: 1,810 Joined: Dec 2013
RE: FORTH Beginner Question.
Try this:

Start FORTH and get dictionary free space
Code:
FORTH [ENTER]           // display: HP-71 FORTH 2A ROOM  [ENTER]           // display: OK { 1 }        // get dictionary free space .     [ENTER]           // display: 0  OK { 0 }     // show dictionary free space, should be 0

Grow the stack
Code:
1000  [ENTER]           // display: OK { 1 }        // enter 1000 on the stack GROW  [ENTER]           // display: OK { 1 }        // grow dictionary free space .     [ENTER]           // display: -1  OK { 0 }    // show grow result value, -1 means true means successfull

Create a new word
Code:
ROOM .        [ENTER]   // display: 1000  OK { 0 }  // show dictionary free space before MYDUP creation : MYDUP DUP ; [ENTER]   // display: OK { 0 }        // add MYDUP word to the current dictionary ROOM .        [ENTER]   // display: 968  OK { 0 }   // show dictionary free space after MYDUP creation 25 MYDUP      [ENTER]   // display: OK { 2 }        // put 25 on the stack and execute MYDUP . .           [ENTER]   // display: 25 25 OK { 0 }  // dump stack on the screen

Leave FORTH
Code:
BYE   [ENTER]           // display: >
09-06-2020, 09:31 PM
Post: #6
 rprosperi Super Moderator Posts: 5,367 Joined: Dec 2013
RE: FORTH Beginner Question.
Good answers already listed above, but keep in mind you need to set the proper numeric base (DECIMAL, HEX) before entering the amount to GROW, or you may grow by more (or less!) then you expected.

Not knowing the default base (you can always get it using "BASE @ .") can lead to confusion and unexpected results when first learning FORTH, and you should probably get in the habit of always specifying the base your code needs right at the top of the word definition source files. Another common technique is to preserve/restore the already existing default, by surrounding the word definitions in your source file as in:

: NEWNAME ( stack diagram )
BASE @ ( Save the prior default base )
HEX ( or DECIMAL as you desire for use in your code )
CODE
CODE
CODE
BASE ! ; ( Restore the prior default )

You can change the base as often as you like to make your code easier for the reader (or you, months later) to understand what you're doing.

--Bob Prosperi
09-07-2020, 02:09 AM
Post: #7
 twoweims Member Posts: 278 Joined: Apr 2019
RE: FORTH Beginner Question.
Thanks for the tips.

I was entering something like

Code:
GROW 1000

rather than

Code:
1000 GROW

The first case does not cause an error, it just pushes 1000 on the stack after growing by zero.

I have a lot to learn, but my employer is making me stand-by at home for the remainder of the year due to the virus so I am grateful to have something wholesome to stimulate my imagination...
09-07-2020, 02:46 AM
Post: #8
 Sylvain Cote Senior Member Posts: 1,810 Joined: Dec 2013
RE: FORTH Beginner Question.
Common beginner mistake.
Most function parameters are taken from the data stack and most return values are pushed back to the data stack.
09-07-2020, 02:50 AM
Post: #9
 rprosperi Super Moderator Posts: 5,367 Joined: Dec 2013
RE: FORTH Beginner Question.
Even for hardened RPN users, learning Forth takes a lot of time and patience, so it's a good fit for your situation. Sure, it's just another language, but I find that it really is a very different paradigm, and you really do have to think differently to learn and utilize it well, but maybe I simply haven't been exposed to enough odd languages.

--Bob Prosperi
09-08-2020, 02:26 AM
Post: #10
 Jim Horn Member Posts: 206 Joined: Dec 2013
RE: FORTH Beginner Question.
Having used FORTH on a New Micros Inc. Rockwell 65F12 based single board computer to create the engine monitoring system for the Voyager aircraft, I was pleased to get a bumper sticker that said "FORTH (heart) IF HONK THEN" where "(heart)" was a big red heart. I was also surprised, years later, to discover that much of the diagnostic software used by Versatron (later Wescam Sonoma) to debug their high-end stabilized camera systems (as used on the Predator and such) was written in FORTH. Amazing where it turns up...

So many signals, so little bandwidth!
 « Next Oldest | Next Newest »

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