I would like to show off a tool I've created; the included image is an example of the tool with a program I've written loaded; the main page for this tool can be found here:
verisimilitudes.net
The page for the only current version of the tool is here; note it is an immature page in comparison:
verisimilitudes.net
This is an interactive machine code development environment I've created. The basic idea is each key of the keyboard, decided by position rather than value, is bound to a routine which asks questions until an action can be decided upon. An example is pressing a key for a routine that merely needs two registers in order to complete; you're permitted to enter a register number, the tool won't allow invalid such numbers to be entered at all, it asks again in the same way, and it then writes the finished instruction to the current location; if a name referring to a number was used, that name will likely be displayed instead of the numerical value, varying, and any changes to the name will update the instruction as well.
I wrote this tool in Common Lisp purely because Common Lisp has the necessary primitives. The program is decidedly non-Lispy. I'm planning to write a simpler reimplementation in Ada by the year's end and expect this will be the version that is distributed to package managers and whatnot. Some simple figuring has shown to me that the memory usage for this program, sans any undo and redo mechanism, should be well within an eighth of a megabyte in the general case and below a quarter in all cases.
The tool was borne of my dislike for assemblers. Answers are saved by similar routines and so you can very easily press keys until you find the one you need; you can't touch and feel your way around an assembler. Aside from this, there are also special routines, primarily located on the home row, which control movement, insertion, deletion, jumping around the program space, creating and deleting names, and other necessities.
In contrast to a one or two pass assembler, this is a no-pass tool, as everything must at all times be in a valid state. You can't use a name before it's created; updating a name works modulo its usage size, preventing errors from surpassing limits; and deleting a name merely removes the association, preventing further updates upon changes, among other such measures.
This is a reasonable description of the tool. Currently, only I can use it, because it's not in a friendly state for installation and I only have a correct Dvorak mapping created. I'm also still refining it and removing bugs I've added during this refining. The entire system, including the three libraries I wrote for it, is less than two and a half thousand lines of code.
I've been trying to show this tool to a wider audience, but I've not found much of one yet. Feel free to tell me what you think and ask any questions concerning the tool.