31a58d00f1
Among random "better safe than sorry" changes, the real fix is in changing "4" for "5" above _find declaration. This off-by-one error had that word, which is the root word in z80, have a 0x01 prev field instead of a 0x00 one. When all memory was initialized to zero, it didn't matter, we ended up hitting 0 prev and considered ourselves properly at the end of dict. When memory wasn't initialized, however, we would end up jumping at all kinds of places, leading to random behavior.
17 lines
441 B
Plaintext
17 lines
441 B
Plaintext
( handle backspace: go back one char in IN>, if possible, then
|
|
emit BS + SPC + BS )
|
|
: _bs
|
|
( already at IN( ? )
|
|
IN> @ IN( = IF EXIT THEN
|
|
IN> @ 1- IN> !
|
|
BS SPC BS
|
|
;
|
|
( del is same as backspace )
|
|
: BS? DUP 0x7f = SWAP 0x8 = OR ;
|
|
|
|
: KEY
|
|
0x55 RAM+ @ ( (key) override )
|
|
?DUP IF EXECUTE ELSE (key) THEN ;
|
|
( cont.: read one char into input buffer and returns whether we
|
|
should continue, that is, whether CR was not met. )
|