mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-27 09:38:06 +11:00
doc: improve "hook word" description
This commit is contained in:
parent
3f38c025e7
commit
4720714bd4
@ -68,9 +68,33 @@ as tricky immediates which, if they're defined sooner, mess
|
|||||||
cross compilation up. Once this layer is loaded, we become
|
cross compilation up. Once this layer is loaded, we become
|
||||||
severly limited in the words we can use without messing up.
|
severly limited in the words we can use without messing up.
|
||||||
|
|
||||||
After having loaded that last layer, we end that with a hook
|
# Hook word
|
||||||
word which is also where CURRENT will be on boot, which is then
|
|
||||||
followed by the initialization string (see below).
|
After having loaded that last core words layer, we end that
|
||||||
|
with a hook word, the "(entry) _" line. A hook word is an empty
|
||||||
|
word at the end of the dictionary which serves 3 purposes:
|
||||||
|
|
||||||
|
1. After having created that word, PC conveniently holds the
|
||||||
|
value that should go in the LATEST field in stable ABI. Had
|
||||||
|
the word been non-empty, getting that value would be less
|
||||||
|
straightforward.
|
||||||
|
2. Because LATEST points to an empty word, it means that it also
|
||||||
|
points to the initialization string, which directly follows.
|
||||||
|
If it was non-empty, we would need to know the word's length
|
||||||
|
to get to that string.
|
||||||
|
3. If, for some reason, you want to "graft" another dictionary
|
||||||
|
on top of this one, having it end with an empty word makes
|
||||||
|
grafting convenient: you already know what your "prev field"
|
||||||
|
offset should be for the grafting to be correct.
|
||||||
|
|
||||||
|
# Initialization string
|
||||||
|
|
||||||
|
After the last word of the dictionary comes the "source init"
|
||||||
|
part. The boot sequence is designed to interpret whatever comes
|
||||||
|
after LATEST as Forth source, and this, until it reads ASCII
|
||||||
|
EOT character (4). This is generally used for driver init.
|
||||||
|
|
||||||
|
# Building it
|
||||||
|
|
||||||
So that's the anatomy of a Collapse OS binary. How do you build
|
So that's the anatomy of a Collapse OS binary. How do you build
|
||||||
one? If your machine is already covered by a recipe, you're in
|
one? If your machine is already covered by a recipe, you're in
|
||||||
@ -99,15 +123,7 @@ same way. Drivers are a bit tricker and machine specific. I
|
|||||||
can't help you there, you'll have to use your wits.
|
can't help you there, you'll have to use your wits.
|
||||||
|
|
||||||
After we've loaded the high part of the core words, we're at
|
After we've loaded the high part of the core words, we're at
|
||||||
the "wrapping up" part. We add what we call a "hook word", an
|
the "wrapping up" part. We add the hook word and init string.
|
||||||
empty word with a single letter name. This allows us to boot
|
|
||||||
with CURRENT pointing to "source init" content rather than being
|
|
||||||
an actual wordref.
|
|
||||||
|
|
||||||
After the last word of the dictionary comes the "source init"
|
|
||||||
part. The boot sequence is designed to interpret whatever comes
|
|
||||||
after LATEST as Forth source, and this, until it reads ASCII
|
|
||||||
EOT character (4). This is generally used for driver init.
|
|
||||||
|
|
||||||
To produce a Collapse OS binary, you run that xcomp unit and
|
To produce a Collapse OS binary, you run that xcomp unit and
|
||||||
then observe the values of "ORG @" and "H@". That will give you
|
then observe the values of "ORG @" and "H@". That will give you
|
||||||
|
Loading…
Reference in New Issue
Block a user