This web site exists to document my adventures in writing software emulators for old computer hardware. So far, I have completed (sort of) a Commodore PET emulation and am working on a Sinclair Spectrum emulation.
In which I try to unify the defining expressions. There are a number of ways to add words to the dictionary. These include: :, create, constant, and variable. It seems to me that the “primitive” should really be to just add the word to the dictionary and then each of the above words can be … Continue reading Defining Forth
In which we have to reimplement create and does>. Having implemented create and does> as described previously, there are two problems. Consider the following extract from my core tests: The line commented with “1” puts the data field of cr1 on the stack. This means we can’t just compile here into the code of the … Continue reading Forth does create
In which my head explodes. create and does> are what is currently causing the unit tests of my Forth interpreter to fail. So what do these things do? Well, if you read the Forth specification, it becomes obvious that the main thing they do is make a nice smoothy out of your brain. Fortunately, I … Continue reading Does Forth create
In which I prematurely exit loops The basic DO loop is done. Now we need to implement LEAVE. This is effectively a “go to the end of the loop”. It seems simple enough but there is a problem in that LEAVE can occur – in fact, almost certainly will occur – inside other control structures, … Continue reading Go Forth and Leave