Krill: der BASIC-Interpreter checkt in Bitte melde dich an, um diesen Link zu sehen. explizit, ob der Stackpointer noch $3E (plus ein paar Extra-Bytes je nach Fall) oder größer ist, und zwar:
- beim Anlegen einer FOR-Schleife (will 9 Bytes "Luft"),
- bei der Ausführung von GOSUB (will 3 Bytes Luft) und
- bei der Auswertung eines (Unter-)Ausdrucks (will 1 Byte Luft).
Damit hält sich der BASIC-Interpreter effektiv aus dem Bereich $0100..$013D heraus. Der KERNAL nutzt diesen unteren Teil des Stackbereichs, um das Error-Log bei Tape-Betrieb abzulegen und BASIC selbst nutzt dann auch noch $0100 bis $010F bei der FP->ASCII-Umwandlung.
Knapp unterhalb von $0200 werkelt BASIC auch noch bei der Eingabe einer BASIC-Zeile herum, neben der KERNAL-ISR-Geschichte dürfte das noch ein weiterer Grund sein, warum BASIC beim Warmstart den Stackpointer auf $FB bzw. $FA setzt (und warum da zwei verschiedene Werte verwendet werden geht mir auch nicht ein. Hat da jemand nicht aufgepaßt?)
sparhawk: Klar kann man im allgemeinen einen konstanten Offset auch in der Basis-Adresse subsumieren. Nur ist in diesem Fall die Semantik des Stacks (Zugriff auf $0100..$01FF) eine andere als die des LDA-Befehls (Zugriff auf $0104..$0203) und damit ist die B-Flag-Abfrage im Original-KERNAL eben Murks.