Oh, das Beispiel von Mike ist gut. Das ist geschickt, mit dem BASIC-Starter an der normalen Adresse, etc. Hat was. Ist aber auch etwas, dass man nicht all zu oft manuell machen möchte
Zwingt einen ja auch keiner zu.
Wenn man den BASIC-Start in 43/44 verdreht, läuft der Rest vom Programm allerdings gewissermaßen ohne Netz. TXTPTR in CHRGET ist erst mal unbeeindruckt und CHRGET scannt den Programmtext normal weiter - so wird dann eben das RUN ausgeführt, welches sich dann eben den neuen BASIC-Start als Ausgangspunkt hernimmt. Ansonsten darf aber nichts mehr ausgeführt werden, was in irgendeiner Weise vom BASIC-Start abhängt.
Als Referenz: All_About_Your_64-Online-Help Version 0.64 (unusedino.de), $2B-$2C/43-44: Pointer: Start of BASIC Text Area -
$A533: Rechain Lines - machen wir während des Programmablaufs nicht, also unproblematisch
$A613: Search for Line Number - betrifft GOTO, GOSUB, etc. - sind also nicht mehr verwendbar
$A68E: Reset TXTPTR - genau das, was das RUN dann (erst) macht (also O.K.!)
$A81D: Perform [restore] - RESTORE tut erwartbar nicht mehr, was es soll
$E168: Perform [load] - machen wir wahrscheinlich gerade nicht
$E422: Output Power-Up Message - passiert gerade nicht, also unproblematisch
Damals™ hatte ich diese One-Filer-Methode mit einem BASIC-Stub mit SYS und einem kleinen Maschinenprogramm dahinter genutzt. Dieses Hilfs-Maschinenprogramm hatte dann im wesentlichen nur den BASIC-Start hochgesetzt und ging dann mit JSR $A533/JSR $A659/JMP $A7AE wieder in die Interpreterschleife. Und das geht halt noch einfacher mit RUN selbst.