Re: Probleme mit Display-List


[ Antworten ] [ Ihre Antwort ] [ Forum www.abbuc.de ]

Abgeschickt von Stefan Dorndorf am 05 April, 2002 um 22:02:23:

Antwort auf: Probleme mit Display-List von Bastian Moritz am 31 Maerz, 2002 um 13:14:41:

Hallo Bastian,

habe ich das richtig gelesen 60%: GR.9 und 40% GR.5 (oder meinst Du GR.15) ?
Also, ohne Maschinensprache geht das nicht, da GR.9 keine "echte" Grafikstufe ist.
GR.9 ist eigentlich GR.8, wobei durch einen POKE 623,64 der Graphikchip GTIA im ATARI dazu "überredet" wird, die vom Grafikchip ANTIC (der liest die Display-List und alle Grafikdaten aus dem Speicher) gelieferten Grafikdaten anders als gewöhnlich auf dem Bildschirm darzustellen.

Das kannst Du leicht selbst ausprobieren:
GR.8 (Grafik 8 einschalten)
POKE 87,9 (Damit "denkt" das Betriebssystem, es hätte nun GR.9, womit folgende DRAWTO-Befehle wie in GR.9 funktioneren)
POKE 623,64 (damit wird der GTIA auf GR.9-Betrieb umgeschaltet)
Die 4 Zeilen Text sind nach diesem Poke nicht mehr lesbar, da der GTIA den GANZEN Bildschirm GR.9-artig darstellt, eben auch die Textzeilen.
Nun kannst Du blind ein paar PLOT/DRAWTO.Befehle eingeben, vorher natürlich mit COLOR eine Farbe setzen, sonst zeichnest Du schwarz auf schwarz ;-)

OK, wie kriegst Du nun Gr.9 und Gr.5 auf einmal ?
1) Schreib' ein Programm, das 60% GR.8 und 40% GR.5 darstellt (oder nicht doch GR.15 ?).

2) Irgendwo in der Display-List taucht dann folgende Byte-Folge auf:
.....,15,15,15,10,10,10,......
(oder mit GR.15 statt GR.5: ......,15,15,15,14,14,14,.....)
Ändere mit einem POKE die letzte 15 vor der 10 (bzw.14) auf 143.

3) Rufe dann mit GOSUB folgende Routine auf

32000 REM *** Display List Interrupt ***
32010 RESTORE 32000:FOR I=0 TO 10:READ X:POKE 6*256+I,X:NEXT I
32020 DATA 72,169,0,141,10,212,141,27,208,104,64
32030 POKE 623,64:DPOKE 512,6*256:POKE 54286,192:RETURN

Das wars. Wie funktioniert's ?
Mit dem POKE 623,64 wird dafür gesorgt, dass GR.9 am oberen Rand des Bildschirms eingeschaltet wird (der sog. "Vertical Blank Interrupt", der immer vom ATARI durchlaufen wird, wenn ein Bildschirm fertig gezeichnet wurde überträgt den Inhalt von 623 in das Register 53275 des GTIA. (Der ATARI zeichnet wie ein normaler Fernseher auch 60 mal in der Sekunde von oben nach unten Zeile für Zeile ein Bild auf den Bildschirm)
Mit der FOR-Schleife wird ein kleines Maschinenprogramm in den Speicher gePOKEt, mit den POKEs auf 512 und 513 wird dem Betriebssystem die Anfangsadresse mitgeteilt (in diesem Fall 6*256=1536, die "berühmte" Page 6).
Mit POKE 54286,192 wird der sog. Display-List-Interrupt (DLI) aktiviert. Wenn der ANTIC nun beim Lesen der Display-List auf einen Wert >=128 (in diesem Fall 143) trifft, zieht er 128 ab (hier 143-128=15), stellt die erhaltene Grafikstufe dar (hier 15, also Gr.8) und löst zusätzlich einen Display-List-Interrupt aus. Das Betriebssystem ruft dann das bei DPEEK(512) stehende Maschinenprogramm auf.
Das tut folgendes:
72 PHA Push A: A auf dem Stack zwischenspeichern
169,0 LDA #0
141,10,212 STA 54282 entspricht POKE 54282,0 (warte bis der ANTIC alle Grafikdaten dieser Zeile gelesen hat)
141,27,208 STA 53275 entspricht POKE 53275,0 (schalte GR.9-Betrieb aus)
104 PLA Pull A; A wieder herstellen
64 RTI Return from Interrupt; Interrupt beenden
Damit wird mitten im Bildschirm der GR.9 Modus wiederaufgehoben (und durch den Vertical-Blank-Interrupt am oberen Bildschirmrand wieder eingeschaltet).

OK, ich hoffe, ich hab' keinen Fehler gemacht. Falls doch, sorry, aber ich hab's nicht ausprobiert...

Noch ein Tip: Wenn Du nun mit DRAWTO auf den Bildschirm zeichnen willst, musst Du dem Betriebssystem mitteilen, in welcher Grafikstufe (9 oder 5 oder 15) Du zeichnen willst (sonst gibt's lustige Effekte ;-)). Das machst Du per POKE 87,9 bzw. POKE 87,5 (bzw. POKE 87,15).

Gruß
Stefan



Antworten:



Ihre Antwort

Name:
E-Mail:

Subject:

Text:

Optionale URL:
Link Titel:
Optionale Bild-URL:


[ Antworten ] [ Ihre Antwort ] [ Forum www.abbuc.de ]