Dave's nasmjf Dev Log 12

Created: 2022-07-22

nasmjf home

This is an entry in my developer’s log series written between December 2021 and August 2022 (started project in September). I wrote these as I completed my port of the JONESFORTH assembly language Forth interpreter.

← Previous 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Next →
    Okay, EMIT is written. Now to test it, I'll
    push an ASCII character value on the stack
    and call it.

(gdb) c
Continuing.
65 EMIT
A

    No way...it works!

    How about pushing "Foo" onto the stack and
    emitting it all at once:

70 111 111 EMIT EMIT EMIT
ooF

    Ha ha, "oof" is right. The first of, no doubt,
    many out-of-order mistakes.

111 111 70 EMIT EMIT EMIT
Foo

    Now how about compiling a word?

: star 42 EMIT ;
star
*

    And the true test: can I compile a word using the
    new word?

: 3star star star star ;
3star
***

    Wow. I have a FORTH!

    JonesFORTH defines a bunch of words in assembly (mostly
    for speed - there's some theoretical minimum core of
    FORTH words from which all the others could be defined,
    but assembly's gonna be faster.

    So what I'll do is start implementing those. I'll try
    to test them all with EMIT output because that's more fun
    than examining registers. But I doubt we're done with
    GBD just yet.

    - - - - -

    Next night: wait a second! I just realized this is an
    opportunity to demonstrate that this thing is now capable
    of executing the "Hello world" greeting.

    - - - - -

    Next night: okay, I fell asleep entering my hello world
    last night. Let's give it another shot. :-)

: h1 111 108 108 101 72 EMIT EMIT EMIT EMIT EMIT ;
h1
Hello
: h2 100 108 114 87 EMIT EMIT EMIT EMIT EMIT ;
h2
Wrld

    Oops! LOL, I left out the 'o'. Well, I am spelling
    this out backwards in ASCII...

    So, with Forth, I can just redefine the h2
    word and the new definition will replace the
    broken one...

: h2 100 108 114 111 87 EMIT EMIT EMIT EMIT EMIT ;
h2
World

    That's better. And I'll make a word for space:

: s 32 EMIT ;
s

    And now for my triumphant Hello World:

h1 s h2
Hello World

    TADA!
← Previous 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Next →