Anscheinend geht die "Länge" der Basic-Befehle ziemlich stark in die Ausführungszeit ein. Das verwundert nicht: jedes Byte eines jeden Basic tokens muss ja einzeln aus dem EEPROM gelesen werden, bevor das token ausgeführt werden kann.
Ich habe deshalb das Programm so erweitert, dass auch die Länge der getesteten Basic Anweisung(en) in einem Unterprogramm gemessen und mit ausgegeben wird:
Code:
#getCodeAddress
' reversed: lda _stack2 / sta $91 / lda _stack2 + 1 / sta $92 / rts, nop
sys &h91 &h819d, &hb792, &hb6c3, &hb791, &hb6c2
return
Die Messungen habe ich entsprechend erweitert, und auch die GOTOs explizit gemessen:
Code:
#test_goto
delta = timer : codes = getCodeAddress
for i = 1 to 1000
goto label_11
#label_11
next i
delta = timer - delta - base : codes = getCodeAddress - codes - baseCodes
print "goto label_11", delta * 20, codes
und so weiter.
Ergebnis bisher (4 MHz):
1. Nächstes Byte aus EEPROM lesen und ausführen: ca. 160 [us]
2. Sonderfall GOTO: ca. 600 + 3 * 160 = 1050 [us]
(Token ist zwar nur 3 Bytes lang, ändert aber EEPROM Adresse)
3. Sonderfall leeres GOSUB / RETURN: overhead ca. 1900 [us]
(2 Tokens = 4 Bytes, aber 2 * EEPROM Adresse ändern)
4. Sonderfall leeres FOR / NEXT: overhead ca. 2500 [us]
(dynamisch 14 bytes pro Durchlauf, mit 1 * EEPROM Adresse ändern)
Das heisst:
Eine 4 MHz CC1 macht im Schnitt so etwa 1000 bis maximal 2000 Basic-Befehle pro Sekunde.
Kann das jemand bestätigen?
Lesezeichen