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:
Die Messungen habe ich entsprechend erweitert, und auch die GOTOs explizit gemessen:Code:#getCodeAddress ' reversed: lda _stack2 / sta $91 / lda _stack2 + 1 / sta $92 / rts, nop sys &h91 &h819d, &hb792, &hb6c3, &hb791, &hb6c2 return
und so weiter.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
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?







Zitieren

Lesezeichen