eine zahl die man mal versuchen kann ist zB
|
Source code
|
1
|
350800
|
Ja, cool! Die Eingabe einer Basic-Zeile mit der Zeilennummer 350800, oder eben einfach die Eingabe dieser Zahl 350800 ohne weitere Zeichen dahinter, bewirkt einen Effekt, als hätte man Run/Stop + Restore gedrückt (Warmstart).
Die Ursache liegt in einem Fehler im BASIC-ROM (ab Adresse $A97B). Dort soll eigentlich geprüft werden, ob die eingegebene Zahl zu groß ist. Falls ja, soll die Fehlermeldung SYNTAX ERROR ausgegeben werden. Der Sprung zur Fehlermeldung enthält aber eine Lücke (ab Adresse $A953), in die man tappt, wenn der Inhalt des Akkus zufällig gleich #$89 ist.
Bei Eingabe von 350800 wird diese Zahl Ziffer für Ziffer verarbeitet. Das Zwischenergebnis 35080 ist hexadezimal $8908, das MSB ist also #$89!
Dann wird nicht wie beabsichtigt zur Fehlermeldung gesprungen, sondern stattdessen unbeabsichtigt eine Teil-Routine des Basic-Befehls ON [GOTO, GOSUB] ausgeführt (ab Adresse $A957). Diese Teil-Routine geht aber davon aus, dass ein Zwischenwert auf dem Stack liegt, und holt ihn wieder vom Stack herunter. Dadurch wird die Rücksprungadresse zerstört und beim folgenden RTS-Befehl springt er nach Sonstwo und landet vermutlich letztendlich in einem BRK-Befehl, der den Warmstart auslöst.
Der Fehler müsste bei allen Zahlen auftreten, die mindestens 6 Ziffern haben, und bei denen die ersten 5 Ziffern zwischen 35072 und 35327 liegen.