In der diversen Atari Literatur gibt es dazu leider sehr unterschiedliche Auskünfte und die Antworten dort reichen von 1400 bis 8000 Zyklen. Also doch ein sehr breit gefächerter Zeitraum.
Fairerweise muss man sagen, dass meistens keine der Angaben falsch ist. Es ist meist eine Frage der Betrachtungsweise. Zum einen hat man große Unterschiede zwischen PAL und NTSC Maschinen und dann ist die Frage, wie ich das mögliche Ende der eigenen VBI definiere.
Die besten technischen Informationen zu Lösung dieser Frage erhält man übrigens in der wirklich sehr guten Dokumentation des Altirra Emulators.
Um die genaue Anzahl der Takte errechnen zu können, bedarf es zunächst ein wenig Theorie in Sachen Bildaufbau:
Bekannt war mir, dass eine Display-List normalerweise wie folgt aufgebaut ist:
3*8=24 Blank-Lines
gefolgt von
192 angezeigten Bildzeilen
Macht also in Summe 216 Scan-Lines
Nun besteht aber ein PAL-Halbbild wie es vom GTIA erzeugt wird (ich berschränke mich bei meinem kleinen Vortrag hier ab nun auf die Werte eines PAL Ataris) aus 312 Zeilen! Aber wo sind die restlichen 96 Zeilen geblieben? Diese Frage hat mir tatsächlich keine Ruhe gelassen und erst nach dem Studium der oben erwähnten Altirra Dokumentation konnte ich das Rätsel lückenlos klären:
Zunächst ignoriert der ANTIC die ersten 8 Zeilen eines Frames komplett. Die 24 Blanklines beginnen also erst bei der 9. Zeile. Nach den 192 angezeigten Zeilen folgen noch mal 24 Zeilen die in einer Displaylist theoretisch genutzt werden können, aber sich im Overscan-Bereich (also dem nicht Sichtbaren Bereich alter Röhrenfernseher) befinden. Der ANTIC kann technisch nämlich 240 Zeilen nutzen. Zusammen mit den ersten 8 übersprungenen Zeilen sind wir nun bei Zeile 248 und genau hier löst der VBI aus. Jetzt fehlen uns aber immer noch 64 Zeilen. Es folgen tatsächlich noch 14 Zeilen die vom GTIA mit der Hintergrundfarbe (COLOR4) gezeichnet werden und dann folgt bei Zeile 262 die Blank-Phase. Jetzt wird also der Elektronenstrahl dunkel geschaltet und kann wieder in die obere linke Ecke gefahren werden. Während dieses Zurückfahrens und in der Wartezeit davor, werden aber fleißig weiter Scanlines erzeugt, und zwar genau 50 Stück! Und summa summarum sind wir jetzt bei unseren 312 Zeilen. HEUREKA!
Etwas klarer wird es mit folgender Aufstellung:
Code: Alles auswählen
8 Lines Skipped
24 DL blank lines
192 DL display lines (z.B. Gr.0 = 24 Zeilen mit je 8 Scanlines)
24 Lines Skipped (aber von ANTIC in DL nutzbar)
START des Vertical Blanc
14 Lines Skipped
50 vertical blank lines
---
312 Scanlines
Wir kennen jetzt also die genaue Aufteilung und Anzahl der Scanlines eines Frames. Was uns noch fehlt sind die Nutzbaren Taktzyklen in einer einzelnen Zeile. Dies ist aber ein sehr komplexes Thema, auf das ich in einem anderen Kapitel eingehen kann. Wichtig ist nur folgende Information:
Eine Scanline wird in genau 114 Taktzyklen gezeichnet. Davon gehen allerdings noch je nach Grafikstufe unterschiedlich viele Zaktzyklen ab, die der ANTIC während des DMA für sich abzweigt. Diese abgezwackten Taktzyklen werden unter anderem dafür benötigt die Bildinformationen aus dem Bildspeicher in den ANTIC zu laden, die RAM-Bausteine mit Refresh-Befehlen am Leben zu halten oder auch die Player-Missile Grafik-Daten zu laden. Selbst für das Laden der Display-List und der Zeichensatzinformationen klaut der ANTIC Taktzyklen. (Wer dies ganz genau wissen will, kann auch dies wunderbar in der ALTIRRA Doku nachlesen). Im Extremfall verbleiben nur wenige Duzend Taktzyklen pro Zeile für eigene Programme und wie gesagt ist dies sehr unterschiedlich und abhängig von vielen Faktoren.
Wir haben jetzt aber das Glück, dass ab dem Einsetzen des VBI bei Scanline 248 der ANTIC mit seiner ARBEIT fertig ist. Die einzigen Takte, die von Zeile 248 bis 312 jeweils abgezogen werden sind 9 Refresh-Takte für die Aufrechterhaltung des dynamischen-Rams (Refresh-DMA). Uns bleiben also von den 114 Takten pro Zeile 105 für unseren VBI übrig.
So, mit diesen Informationen können wir uns nun genau errechnen, was wir eigentlich wissen wollten:
Unser VBI beginnt bei Zeile 248 und hat nun faktisch bis zum Ende der Bildschirmseite Zeit. Also 64 Zeilen:
64 Scanlines * 105 Takte (pro Zeile) = 6720 Takte
Verbraten wir in unserer eigenen VBI Routine diese Taktanzahl, dann beginnt die OS-VBI Routine genau bei Zeile 0 des nächsten Bildes. Eigentlich sollte natürlich die OS-VBI Routine vor dem Aufbau des neuen Bildes fertig sein, aber wir erinnern uns: Der ANTIC ignoriert die ersten 8 Scanlines. Also 840 Zyklen für den OS-VBI und das reicht locker. (Der verbraucht je nachdem was so ansteht zwischen geschätzt bis zu 800 Takte)
Wie kommen nun aber diese vielen verschiedenen Aussagen in der ATARI Literatur zu Stande? Mal abgesehen von den Unterschieden zwischen PAL und NTSC (die Werte für NTSC stelle ich bei Bedarf auch gerne zur Verfügung). Nun ganze einfach: Man kann die erlaubte Taktzahl auch so definieren, dass der eigene VBI so beendet wird, dass dieser vor dem Vertikal-Blank (Also bei Zeile 262) beendet ist. Oder so, dass er inklusive des OS-VBI vor Zeile 312 endet. Oder ganz extrem, man nutzt noch die 24 Blanklines der Displaylist mit (Das ist dann wirklich das Maximum und man könnte über 9000 Takte nutzen.)
Also wem das alles jetzt zu viel Theorie war nun endlich einmal eine einfache Tabelle mit den Werten für die Anzahl der nutzbaren Taktzyklen in der eigenen VBI-Routine:
Code: Alles auswählen
ca. Takte für VBI-Routine Eigener VBI endet bei Scanline
1400 Zyklen bis Ende Scanline 262 *
6100 Zyklen bis Ende Scanline 306 **
6700 Zyklen bis Ende Scanline 312 ***
7600 Zyklen bis Ende Scanline 8 ****
9800 Zyklen bis erste Bildprobleme auftreten *****
* OS-VBI beginnt mit Blank (261)
** OS-VBI endet etwa mit letzer Scanline (312)
*** OS-VBI beginnt bei Scanline 0
**** Ab 9 beginnt ANTIC mit erster Scanline aus der Displaylist. OS-VBI endet dann aber bereits in den ersten 8 DL-Blanks.
***** VBI endet dann bei Scanline 32, OS-VBI ca. bei 38 und somit in der ersten richtigen Display-List Zeile
Ah ja: diese theoretischen Werte habe ich im Übrgen alle im Emulator empirisch geprüft. Da hier der komplette vertikale Overscan Bereich dargestellt werden kann ist dies sehr gut möglich durch Umschalten der Hintergrundfarbe im Farb-Hardwareregister am Anfang und Ende des VBI. Die Zeilenzahl an der der VBI Endet kann über das VCOUNT Register erfasst werden. (Wie so ein Test aussah seht ihr an einem Beispiel im Anhang)
Am oberen ende des PlayMissile-Streifens beginnt der ANTIC zu arbeiten (ScanLine 9) und am unteren Ende endet die Arbeit des ANTIC (ScanLine 248)
Die beiden blauen Linien sind der Rand des sichtbaren Playfields (192 Scanlines
Der untere graue Balken beginnt mit dem eigenen VBI und endet in Zeile 0. der weiße Streifen ganz oben ist dann die OS-VBI Routine.