Monitor: a line assembler
a <address>, then instructions until a line that is just a dot. The syntax is the assembler's own: a selector rides on the mnemonic as LDA.0 or LDD.0.1, and leaving one off means Data Pointer 0 exactly as it does in a source file, so nothing learned at the monitor has to be unlearned when writing a program. Case is folded, since the assembler does not care either. Numbers are hexadecimal and bare. A source file writes 0x2000 or 0d16 because it has both and must say which; a monitor has one and says so once, in the manual, rather than on every line. It reads the same table the disassembler does, searched the other way round, which is the point of it being a table rather than two lists: what a writes, d reads back, and neither can drift from the other or from the assembler both were generated from. Instruction lengths come from the shared shape table too, so the cursor cannot get out of step with what was written. THE WHOLE LINE IS UNDERSTOOD BEFORE ANYTHING IS WRITTEN. Emitting the opcode first and discovering a missing operand afterwards leaves half an instruction in memory, which the next line usually covers up and the last line of a session does not. Written that way first and fixed. What cannot be written is a label, and that is the whole difference between this and the assembler proper: a label is a promise to fill an address in later, and later is what a line at a time does not have. The recorded test now types in a complete program - a string poked into Data Memory, instructions assembled into Program Memory, and the result run - and includes a lower case mnemonic, both selector forms, an instruction that does not exist and one missing its value, so the refusals sit beside the successes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c23adb2836
commit
3b800a69e8
@@ -99,6 +99,7 @@ prompt rather than at the shell.
|
||||
| -- | -- |
|
||||
| `x [address]` | Display 64 bytes as hexadecimal and as characters. |
|
||||
| `d [address]` | Disassemble eight instructions. |
|
||||
| `a <address>` | Assemble instructions into memory until a line containing only a dot. |
|
||||
| `s <address> <byte>...` | Write bytes into the bank being examined, including Program Memory. |
|
||||
| `b <program\|data\|bank>` | Select a memory space or a registered bank number. |
|
||||
| `g <address>` | Begin execution at an address. |
|
||||
@@ -250,7 +251,7 @@ than merely checking its filesystem code against itself.
|
||||
|
||||
CosmOS is early software for an experimental computer. It runs one application at a
|
||||
time, has no privilege levels or process isolation, does not relocate applications, and
|
||||
does not yet provide a native assembler or linker. Its present purpose is to make
|
||||
provides a line assembler but not yet a native assembler for source files, nor a linker. Its present purpose is to make
|
||||
SplitBit usable from inside the machine: inspect it, manage persistent files, load
|
||||
programs, provide common services, and return reliably to a command prompt.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user