Der MOS 6567/6569 Videocontroller (VIC-II) und seine Anwendung im Commodore 64
Inhalt 3. Funktionsweise des VIC 3.6. Speicherzugriff/Timing einer Rasterzeile
3.6.1. Die X-Koordinaten |
Bevor das Timing der Speicherzugriffe innerhalb einer Rasterzeile erläutert wird, soll noch kurz darauf eingegangen werden, woher die angegebenen X-Koordinaten stammen. Der VIC besitzt nämlich zum RASTER-Register, das die aktuelle Y-Koordinate angibt, kein passendes Gegenstück für die X-Achse, man kann die X-Koordinate also nicht einfach direkt mit dem Prozessor auslesen. Jedoch zählt der VIC intern die X-Koordinaten sehr wohl mit, denn die horizontale Sprite-Positionierung basiert ja darauf und bei einem Impuls am Lichtgriffel-Eingang LP wird die aktuelle X-Position im Register LPX ($d013) gelatcht. Die Bestimmung der absoluten X-Koordinaten von Ereignissen innerhalb einer Rasterzeile ist nicht trivial, denn man kann nicht einfach z.B. ein Sprite an eine definierte X-Koordinate bringen und aus den Textzeichen, die an der gleichen X-Position dargestellt werden, auf die X-Koordinate der zu diesen Textzeichen gehörenden Speicherzugriffe schließen. Der Speicherzugriff und die Darstellung sind getrennte Funktionsgruppen und die gelesenen Grafikdaten werden nicht direkt auf dem Bildschirm ausgegeben (es besteht eine Verzögerung von 12 Pixeln). Daher wurde anders vorgegangen und eine einzige X-Koordinate mit Hilfe des LPX-Registers in ihrer absoluten Position innerhalb der Rasterzeile bestimmt und die anderen X-Koordinaten relativ dazu ermittelt. Dazu wurde der IRQ-Ausgang des VIC mit dem LP-Eingang verbunden und der VIC auf einen Rasterzeileninterrupt programmiert. Weil die negative Flanke von IRQ als Beginn einer Rasterzeile festgelegt wurde, konnte so die absolute X-Position des Rasterzeilenbeginns ermittelt werden. Die Position der negativen Flanke von BA während einer Bad Line wurde ebenfalls mit dieser Methode bestimmt und die so erhaltene Position war mit dem relativen Abstand von IRQ und BA zueinander konsistent. Auf der Grundlage dieser beiden Messungen wurden die X-Koordinaten aller anderen Ereignisse innerhalb einer Rasterzeile relativ dazu bestimmt (siehe [4]). Jetzt erst wurden die Sprite-X-Koordinaten herangezogen, um den Zeitpunkt der Bilderzeugung der Textzeichen bestimmen zu können. Dabei wird natürlich implizit angenommen, daß die LPX-Koordinaten mit den Sprite-X-Koordinaten übereinstimmen. Es gibt jedoch keinen Hinweis darauf und somit auch keinen Grund zur Annahme, daß sie es nicht täten (eine Übereinstimmung der Koordinaten wäre auch schaltungstechnisch die einfachste Lösung).