Frame

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Frame (engl.: "Rahmen") steht im Zusammenhang mit dem C64 und anderen Computersystemen für ein Einzelbild. Der Grafikchip eines Heimcomputers baut, analog zu dem genutzten Anzeigemedium (Monitor oder Fernseher), das für den User sichtbare Bild mehrmals pro Sekunde neu auf.

Ein PAL-C64 zeigt pro Sekunde 50 Einzelbilder, welche sich unterscheiden können aber nicht müssen. Bewegt oder verändert sich etwas im Bild, so wird diese Veränderung erst mit dem Aufbau des nächsten Einzelbildes sichtbar.
Ein Beispiel: Wird mittels POKE 1024,1 das Zeichen "A" in die linkere obere Ecke des Bildschirmspeichers geschrieben, so erscheint dies nicht wirklich sofort. Es erscheint auch noch nicht, wenn die 1, welche das "A" repräsentiert, in der entsprechenden Speicherstelle angekommen ist. Es erscheint erst, wenn der VIC ein neues Einzelbild (Frame) aufbaut. In diesem Bild ist das "A" enthalten und wir sehen es auf dem Bildschirm. Weil das Bild so häufig neu aufgebaut wird, scheint das "A" sofort aufzutauchen.

Spiele und Demos müssen, um eine flüssige Bewegung von Objekten zu zeigen, idealerweise pro Frame einen Bewegungsschritt darstellen. Beispiel: Eine Laufschrift wird genau dann als butterweich empfunden, wenn sie genau 1x pro Frame um einen Pixel weiterbewegt wird. Bewegt man die Laufschrift nur jeden 2. Frame, wird sie langsamer, aber immer noch weich scrollend gesehen. Wird sie jeden Frame zwei Pixel weiterbewegt, nimmt das Auge sie schneller, aber auch weich scrollend wahr. Ein Ruckeln der Laufschrift kommt zustande, wenn der Programmierer es nicht geschafft hat, die Bewegung an die Frame-Rate anzupassen, sprich in manchen Frames gar keine Bewegung durchführt und in anderen mehrere Pixel auf einmal (vergl. Laufschriften in frühen Windows-Bildschirmschonern).

Viele C64-Spiele und -Demos laufen deshalb Frame-basiert, d.h. das gesamte Programm wird an der Bildwiederholrate des Grafikchips ausgerichtet, parallel dazu wird meistens der Standard-CIA-Timer (unter anderem für die Tastaturabfrage zuständig) deaktiviert, um den regelmäßigen Ablauf nicht zu stören. Auch Musik wird fast immer Frame-basiert abgespielt, d.h. pro Frame wird in der Regel der SID einmal mit neuen Daten gefüttert (oder mehrmals - siehe Multi Speed Musikstücke).

Der VIC im C64 erleichtert das Synchronisieren des Geschehens auf dem Bildschirm zum tatsächlichen Bildaufbau, da man über eine Register-Abfrage auslesen kann, wo sich der Rasterstrahl zurzeit befindet. Außerdem kann er an einer frei programmierbaren Rasterzeile einen Interrupt auslösen (Rasterzeilen-Interrupt). Viele grafisch aufwändige Programme bereiten beispielsweise den nächsten Frame in einem separaten Speicherbereich vor und schalten dann im richtigen Moment den VIC auf diesen um - z.B. genau auf der Rasterzeile, bei der der obere Border endet.

Der VDC im C128 hingegen besitzt diese Fähigkeit nicht, was frame-basierte Programmierung enorm schwierig macht. Anspruchsvolle Spiele oder gar Demos für den C128 im 80-Zeichen-Modus gibt es deshalb quasi keine. Die einzige Ausnahme stellt das Demo Risen from Oblivion dar, bei dem der Programmierer Graham es tatsächlich schaffte, über sich selbst austarierenden Timer-Messungen den VDC in den Griff zu bekommen und so bisher für unmöglich gehaltene Effekte aus dem C128 zu kitzeln.