Hier die Kommentierung von "ON" aus "64intern":
******************************* BASIC-Befehl ON
A94B 20 9E B7 JSR $B79E Byte-Wert (0 Bis 255) holen
A94E 48 PHA Kode merken
A94F C9 8D CMP #$8D 'GOSUB'-Kode
A951 F0 04 BEQ $A957 ja
A953 C9 89 CMP #$89 'GOTO'-Kode
A955 D0 91 BNE $A8E8 nein, dann 'syntax error'
A957 C6 65 DEC $65 Zähler erniedrigen
A959 D0 04 BNE $A95F noch nicht null ?
A95B 68 PLA ja, Kode zurückholen
A95C 4C EF A7 JMP $A7EF und Befehl ausführen
A95F 20 73 00 JSR $0073 CHRGET nächstes Zeichen holen
A962 20 6B A9 JSR $A96B Zeilennummer holen
A965 C9 2C CMP #$2C ',' Komma ?
A967 F0 EE BEQ $A957 ja, dann weiter
A969 68 PLA kein Sprung, Kode zurückholen, fertig
A96A 60 RTS
Alles anzeigen
Man sieht, dass er immer folgendermassen vorgeht: Es wird der "Zähler" (das "E" in deinem Beispiel) in $A957 dekrementiert. Ist es danach 0, dann wird der GOTO oder GOSUB-Befehl einfach ausgeführt. ($A95B-$A95C) (Dieses ON ist wohl auch der Grund, wieso GOTO und GOSUB nicht testen, ob nach der Zahl noch etwas kommt, weil sie hier fehlschlagen würden. Es ist also kein Fehler im BASIC, sondern Absicht, dass "GOTO 1000,.+-$" keine Fehlermeldung ausgibt.
Ansonsten wird eine Zeilennummer gelesen ($A95F-$A962) und ignoriert und getestet, ob ein Komma folgt. Falls ja, wird erneut das E dekrementiert (s.o.)
Falls nichts mehr folgt, wird die Routine einfach verlassen, das "ON ... GOTO/GOSUB" hat dann also gar keine Auswirkung.
Durch die Dekrementierung vor dem Test erreicht man auch, das für E=0 auch nichts ausgeführt wird, weil das einem E=256 entspricht.
Das habe ich übrigens in "Das Maschinensprache-Buch für den C64" von Lothar Englisch schonmal gesehen, im Einzelschritt-Simulator sogar noch interessanter:
1110 ONAGOTO1200,1210,1220,1230,1240,1250,1260,1270,1280,1290,1300,1310,1320,1330
1115 A=A-14
1120 ONAGOTO1340,1340,1360,1370,1380,1390,1400,1410,1420,1430,1440,1450,1470,1470
1125 A=A-14
1130 ONAGOTO1480,1490,1500,1510,1520,1530,1540,1550,1560,1570,1580,1590,1600,1610
1135 A=A-14
1140 ONAGOTO1620,1630,1640,1650,1660,1670,1680,1690,1700,1710,1720,1730,1740,1750
1150 GOTO200
Er hätte hier ein berechnetes GOTO besser gebrauchen können:
1110 IF A=0 OR A>42 GOTO 200
1120 GOTO 1190+10*A