Mist! nach 20 Minuten getippe 'ne falsche Taste gedrückt und alles in den Orkus gesemmelt. Also nochmal:
Assembler, dort würde ich auch einen geschwindigkeitsvergleich von beiden Systemen nachvollziehen können, da man dort ähnliche umstände haben kann.
Nö, das kann man so einfach auch nicht sagen!
BASIC 7.0 vs. BASIC 2.0: Im C128-Mode des C128 gibt es nur Basic 7.0. Auch wenn ein Programm nur Befehle aus dem Befehlsvorrat von Basic 2.0 benutzt. Im C64-Mode ist der C128 genauso schnell wie ein "reiner" C64. Im C128-Mode hingegen muss jedes Programm den "Ballast" des komplexen C128-Systems mit 128 kB RAM mittragen und ist langsamer. Bei den schon oben erwähnten Befehlen Peek, Poke und Sys gilt natürlich, dass der C128 andere Systemadressen hat und die Zahlenwerte daher nicht (oder selten) mit denen vom C64 übereinstimmen. Zudem ist die Syntax bei SYS verändert. Befehle wie SYS 123,"TEXT" sind nicht mehr möglich (die Parameterübergabe wurde um Register erweitert, was die Übergabe "eigener" Parameter verkompliziert). Was kaum einer weiß: Auch LOAD funktioniert ein klein wenig anders, da Pgrogramm- und Datenspeicher getrennt sind (Das Handbuch zum C128 schweigt sich dazu aber aus).
Speed: Die Aufteilung in Programmspeicher (Bank 0) und Datenspeicher (Bank 1) ermöglicht zwar umfangreichere Projekte bedeutet aber auch zusätzliche Komplexität für den Interpreter. Bankswitching, Bankswitching und nochmals Bankswitching bestimmen hier die Geschwindigkeit. Zudem ist die Switchroutine universell programmiert (spart ROM-Speicher) und nicht für jeden einzelnen Benutzungsfall optimiert (würde der Geschwindigkeit gut tun). Alle Programmroutinen der Standardvektoren (BSOUT, CHRIN etc.) durchlaufen Bankswitching und sind damit schon von vornherein langsamer als die Pendants im C64.
Desweiteren gibt es im Basic 7.0 Befehle für Sprites und Musik. Dazu werden stets Register gespiegelt. Das bedeutet eine umfangreichere Interruptroutine und die läuft ja jede 1/60 Sekunde. Das ist ein weiterer Rechenleistungsfresser.
Natürlich kann man bei Verzicht auf den VIC (40-Zeichen) den FAST-Modus (2MHz) aktivieren. Will man jedoch auf den 40-Zeichenschirm nicht verzichten, gibt es einen anderen Trick: Der 2MHz-Mode kann selektiv im oberen und unteren Rahmen aktiviert werden (es gibt passende Tools). damit erreicht man 20 - 30% mehr Speed und der c128 kann wieder mit dem C64 gleich ziehen.
Es gibt natürlich einen Sonderfall, bei dem Basic 7.0 den C64 abhängt. Da hat der CeVi keine Chance mitzuhalten. In Basic 7.0 steckt die Grabage Collection des Basic 4.0 und ich kann bis heute nicht verstehen, warum die damals nicht auch beim C64 implementiert wurde. Jedenfalls sind Programme, die reichlich Stringmüll produzieren unter BASIC 7.0 schneller, da hier die Grabage Collection unbemerkt verläuft, während der C64 bei solchen Gelegenheiten den Dornröschenschlaf antritt.
Assembler: Einfache Programme wie LDA#x STA#x RTS laufen bei gleicher Taktfrequenz (die 2 MHz des C128 wollen wir hier mal außen vor lassen) natürlich gleich schnell. Aber bedingt durch die Komplexität des C128 beginnt das untere BASIC-ROM schon bei $4000. Größere Programmprojekte, die unter das ROM reichen, werden also - zumindest wenn die ROM-Routinen nutzen wollen - ebenfalls zu Bankswitching genötigt und das geht gewaltig auf die Performance. Das einfachste Beispiel ist die Ausgabe von Daten über den BSOUT-Vektor. Somit ist auch hier der C128 oft langsamer als der C64. Wenn unter dem ROM natürlich nur Routinen laufen, die "im eigenen Saft schmoren", dann ist dieser Komplexitätsfaktor gering. Es kommt also ganz auf das Programm und die geschickte Anordnung der Programmmodule (unter dem ROM oder eben nicht) an, ob man einen Geschwindigkeitsunterschied zwischen C64 und C128 bemerkt.
Gruß WTE