The Meta-Machine Code Targeted at CHIP-8: The Initial Release As this writing is a collection of my ideas that have not been written down in full before now, this page will be gradually updated and refined whenever I recall more and more of my ideas concerning the topic and feel the want. This page is expected to change heavily as more advances are made. This serves as the primary page for the CHIP-8 targeting of my Meta-Machine Code (MMC) tool. For information about the general idea of the tool, see my 2017-07-07 article. Currently, there exists only one implementation of the tool, written in Common Lisp and implementing a Meta-CHIP-8 for the customization machine code. Firstly, a description of the interface will be necessary. The MMC largely bases its hand interface around the shape of the keyboard, rather than any individual key. Exceptions to this include the backspace, escape, and delete keys; also excepted are miscellaneous keys to the right of the upper row, typically numbering three on a common keyboard. As implemented, the hand interface only uses the three main rows of the keyboard, unshifted and shifted. If the following descriptions of the instruction placements confuse you, know that the interface is specifically designed to be forgiving with regards to which key is pressed; you can simply try keys until you find the correct one. The left half of unshifted upper row implements the first instruction type, the XYYY instructions, which consist of a command nibble followed by a three nibble address, in order; the exception is the rightmost, as the 0XXX instruction is placed elsewhere and so the DXYZ instruction takes this place. The menu linking this file has video demonstrations of the various routines in action. Follows is a demonstration of the DXYZ routine in action; I'm particularly pleased with the flexibility of my design enabling one to use zero or sixteen as an answer to the height for 16x16 sprite purposes. The right half of the unshifted upper row implements the second instruction type, the XYZZ instructions, which consist of a command nibble followed by a register nibble followed by a varying two nibble value, in order. The shifted upper row implements the remaining instructions of the second instruction type, which use the two nibble value as a subcommand code. The only exceptions are the FX55, FX65, FX75, and FX85 instructions, placed to the right of the upper row in the two shifted and unshifted keys closest. The middle row implements integral functionality, not all of which has been assigned yet. What has been assigned is the left ring finger controls upwards movement; the left middle finger controls downwards movement; the left index finger controls jumping around the memory space by address or name and moving over by one to dictate saving. The right index finger controls whether to input a two byte value or, shifted, a single byte value and moving over by one to dictate instating; the right middle finger creates names or changes an already existing one and, shifted, deletes a name; the right ring finger creates a label or changes an already existing one and, shifted, deletes a label. The escape key allows one to exit the tool by answering one or zero, which are by convention the values of the names ``yes'' or ``no'', respectively, but are not in play by default. The bottom row implements the third and also last instruction type, the WXYZ instructions, which consist of four nibbles, the first being a command, the second and third being registers, and the last being a subcommand code, in order. The only exception is the 8XY7 instruction, which is located furthest from the top row, typically the ``\'' key, as it's relatively unimportant. Lastly, in the hardest to reach positions are the 0XXX instructions, in order. Moving on, this MMC targets CHIP-8, as it was thought to be a good initial target. This was, ironically, fraught with its own particular errors. CHIP-8 lacks power and space for an MMC compared to a machine with a larger program space, which is part of the reason it was chosen to avoid needing sparse representations, but this required a Meta-CHIP-8 to be created. Regardless, it is good that this was targeted first, as surpassing design challenges and frustrations was much easier with an abstract implementation. It is expected that a future MMC targeted at CHIP-8 will lack a customization machine code and so become simpler, as it was found that there's not much availability for good abstractions to be formed over the CHIP-8 instruction set, given that everything should be thoroughly optimized. This has also advanced the idea of what an MMC's abstractions are and are not good for. It was initially thought that modifying the metaprogram in tandem with the program would be simple and so encourage specialized routines, but this has been uncovered as overly complicated and so not implemented; it is now thought that the power of the metaprogram will lie mostly in targeting instruction set specializations rather than common and mundaine instruction patterns, necessarily. The development of Meta-CHIP-8 was seen as odd and whatnot early on, but primarily served as an excercise in memory-to-memory experimentation and whatnot. Several influences for integral MMC routines have been derived from this experimentation, such as writing to a target memory location clearing any and all metadata, which greatly simplifies the common routine and makes writing a correct routine simpler. Further experimentation, particularly with a noncustomizable Meta-Machine Code targeted at CHIP-8, is underway, but this initial release is sufficient; installation involves downloading SHUT-IT-DOWN, CL-ECMA-48, ACUTE-TERMINAL-CONTROL, the MMC file itself, the sh program to launch the MMC, and a Dvorak or Qwerty Meta-CHIP-8 program space. The Meta-CHIP-8 program space should be renamed to ``map.mc8'' and placed in the user's home directory or you will be asked to provide it explicitly at every invocation; everything else must be placed in the same directory but is otherwise inconsequential. As an update, I'll be massively changing this installation procedure soon; if you have any issues or questions, do feel free to email me. .