A word the shell has no command for is now looked for on the disk as "<name>.sbx", and if it is there it is loaded and started exactly as load and run would do it. Whatever followed the word reaches the program through osArgument by the same route as whatever follows run, so "Say hello there" and "Type notes.txt" work without either program knowing how it was started. load and run are unchanged and both stay. load is how the monitor puts an arbitrary file in front of itself, which typing a name deliberately cannot do: the extension is added rather than assumed, so "notes.txt" looks for notes.txt.sbx and a text file is unreachable by name whatever is inside it. Three things this had to get right: The built-ins are tried first and always win. The search hangs off the end of the dispatch chain, so a file called dir.sbx cannot become dir, and the commands worth trusting when the disk is what you are doubting stay trustworthy. The invoke disk carries a working dir.sbx so that this is checked rather than asserted. A file that is found but is broken says so. "not a program" and "I do not know" are different answers, and giving the second about a file sitting on the disk would send somebody looking in the wrong place. loadProgram therefore hands back a status as well as a message, since only "no file of that name" can fairly be reported as anything other than a fault. doLoad became that subroutine rather than being copied. It ends in RET instead of a jump to the prompt, and each way of failing sets its number and its text together so a new one cannot leave half of the answer behind. cosmosBreak moves because Break prints the pointers it was handed and those are the shell's leftovers, which a CALL now puts back. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
17 lines
344 B
Plaintext
17 lines
344 B
Plaintext
CosmOS
|
|
> loaded, starting at 2000
|
|
> two stops, and what the registers were at each
|
|
break at 200E
|
|
A 11 B 22 Q 00 status 00
|
|
DP0 1030 DP1 06C2 DP2 0000 DP3 2000 SP FFFF
|
|
press a key
|
|
break at 2023
|
|
A 44 B 55 Q 00 status 00
|
|
DP0 1000 DP1 06C2 DP2 0000 DP3 2000 SP FFF5
|
|
press a key
|
|
carried on to the end
|
|
finished
|
|
> halted
|
|
Execution halted.
|
|
[exit 0]
|