Up walks back through the last eight lines and Down forward again. It exists only because the keys reach the system now: until A1 and A2 there was nothing to press Up at, and the line was assembled somewhere the shell could not see. A RING RATHER THAN A LIST. A ninth line pushes the oldest out by moving where the ring starts, not by moving any of the lines - so keeping a line costs a copy of that line and nothing else, however full the history is. Eight is a power of two, so which slot an entry lives in is an AND. The ISA had the awkward part already: A and B are a sixteen bit shift register, so one SHR with B empty turns a slot number into the offset of a 128 byte slot, high byte and low, ready for DPUW. A NINTH SLOT HOLDS WHAT WAS BEING TYPED when Up left it, and Down brings it back. Losing a half written line to a keypress is the sort of small rudeness that makes a thing unpleasant to use, and it costs one slot to avoid. An empty line is not kept, and neither is one the same as the line already at the top. The test proves the second by looking one further back: if a repeated command were kept twice, the line behind the newest would be the same line again. The redraw had to learn to rub out. One space was enough while the only thing that shortened a line was taking one character out of it; a recalled line replaces the whole of it, and a short line over a long one left the tail of the long one on screen looking like part of what you were typing. It now covers exactly what was lost - which turned out to be one space fewer than before in the cases that GREW, so two lines of cosmosEditKeys lost a trailing space that was never doing anything. Costs 1157 bytes of Data Memory, taking CosmOS to 6220 of the 8192 it has before a loaded program's data begins. Worth writing down: that is the budget, and this is the largest single thing in it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
491 B
491 B
CosmOS
> echo a
a
> echo b
b
> echo c
c
> echo d
d
> echo e
e
> echo f
f
> echo g
g
> echo h
h
> echo i
i
>
echo i
echo h
echo g
echo f
echo e
echo d
echo c
echo b
b
> echo z
echo b
echo z
z
>
echo z
z
>
echo z
echo b
b
> echo yyyyyyyyyyyyyyyyyyyy
echo b
echo yyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyy
> exit
halted
Execution halted.
[exit 0]
> echo a
a
> echo b
b
> echo c
c
> echo d
d
> echo e
e
> echo f
f
> echo g
g
> echo h
h
> echo i
i
>
echo i
echo h
echo g
echo f
echo e
echo d
echo c
echo b
b
> echo z
echo b
echo z
z
>
echo z
z
>
echo z
echo b
b
> echo yyyyyyyyyyyyyyyyyyyy
echo b
echo yyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyy
> exit
halted
Execution halted.
[exit 0]