816563e2e3
This is done by adding a "C<* override" layer that is reset to 0 on ABORT. The problem was that when ABORT happened during a LOAD, we had a resetted RSP and started from a clean INTERPRET, but LOAD didn't have the opportunity to restore C<*, which caused it to continue interpreting from the faulty BLK. With a C<* override, we don't need to *restore* C<*, we just need to clear the override.
16 lines
369 B
Plaintext
16 lines
369 B
Plaintext
: BOOT
|
|
0x02 RAM+ CURRENT* !
|
|
LIT< (parse) (find) DROP (parse*) !
|
|
( 2e == SYSTEM SCRATCHPAD )
|
|
CURRENT @ 0x2e RAM+ !
|
|
0 0x08 RAM+ ! ( 08 == C<* override )
|
|
( 0c == C<* )
|
|
LIT< (boot<) (find) DROP 0x0c RAM+ !
|
|
( boot< always has a char waiting. 06 == C<?* )
|
|
1 0x06 RAM+ !
|
|
LIT< INIT (find)
|
|
IF EXECUTE
|
|
ELSE DROP INTERPRET THEN
|
|
;
|
|
|