The reimplementation of mine MMC targeted at CHIP-8 has grown to displease me, mere months after its release. In using it, I noticed a flaw with the name system which I located and corrected, but this was enough for me to become disillusioned with its internal model. The flaw, that the name deletion command only actually worked in narrow instances, interacted with the part of the system responsible for associating names in a way which never should've been made possible, and which wouldn't be under a better system. I'd mulled over a higher-level internal representation for my design before, which this revealed as a necessary step. This better design, tempered with other experience, has resulted in a shorter program doing more with less. The only thing it should ever do is continue this trend.
To experiment with this representation, I've used an even simpler machine code, Little Man Computer.
That prior implementation used parallel arrays, maintaining the program separately, as its numerical representation. This newer and higher-level internal representation uses a doubly-linked list model with program and metadata intermeshed; the goal of this new way is to reduce the potential for error and to ease writing the program, both of which it's suited for, compared to the method preceding it.
The old method represented a label as a name with a boolean set; now labels are names which directly reference the list structure, requiring resolution for determining their numerical values, but being more unlikely to suffer queer mistakes. I've been mulling over commands I've found difficult to add to my satisfaction, finding them much simpler under the model, including ways to make a recollection system more or less as efficient as without. Unlike my prior implementation, those numerical values for the program are only resolved upon saving, as it's otherwise wasteful and stupid to maintain it.
I wonder which issues I'll later find with this internal representation, despite finding it so nice.
The Litte Man Computer is significantly simpler than even CHIP-8, and the top row of the keyboard is sufficient to reference all instructions, without any shifting needed; I've seen references to a 4NN instruction, but couldn't find a satisfying display for it, so it's been omitted; a diagram follows:
1NN 2NN 3NN 5NN 6NN 7NN 8NN 901 902
Follows is the diagram of the middle row which holds commands more intimately telling it what to do:
Delete morph ~~ ~~
Insert up down jump save instate value name label
The insertion and deletion commands aren't yet finished, and neither is the instate command working.
The up and down traverse the memory space, with jump allowing easier immediate movement. That morph always turns the contents of the current address into an instruction, with value enabling placing an arbitrary number at the current address. The name and label allow creating a new name or naming the current address, with their shifted commands deleting such. The backspace and delete keys allow for wiping the current address or merely removing metadata; terminals tend to report these keys as being identical, and so one must adjust the terminal to enable this and enable part of the system program.
This program uses a very basic character set I've designed, holding only the English alphabet, along with digits. There is no need to allow for viewing nor entering numbers in multiple bases; the mode for entering integers permits top and bottom row to be used for submission, with space as backspace.
For more knowledge of the general model, I strongly suggest reading the article covering the CHIP-8. This is the smaller MMC referenced therein; I saw someone over Gopher who had built an assembler for it, and thought I could perhaps show him my superior model. I can no longer find this man, however.
I've long thought mine MMC is a design I can mull over and refine unto my death, not unlike Forth to Chuck Moore. Still, there are so many other programs and designs I wish to work on; I can rest easy enough knowing my design is only becoming smaller and easier to implement. Perhaps I'll perfect it.
Here is the program, the system program, and the license. Here are the pages for the first, second, third, and fourth library it uses.