Bereits im Januar 2020 begann ich mit den Vorbereitungen für die Teilnahme an der Forever 2020-Demoparty. Das Compo-Thema wurde von ROBO angekündigt, daher habe ich beschlossen, eine einfache Arbeit für den Atari 65XE zu schreiben. Als das Intro fertig war, habe ich beschlossen, einen Bitmap-Effekt hinzuzufügen. Leider wurde aufgrund der Absage des Forever ein Teil des Intro veröffentlicht.Der Atari-Prozessor besteht aus MOS 6502 - 8-Bit-Registern und dem Fehlen von Ports für den Zugriff auf Hardware. Eine weitere Komponente des Computers ist ANTIC - er implementiert Bilder - Farben, Videomodi, Symbole. Es gibt Hardwarezellen für den Zugriff auf ANTIC. Ihr Zweck wird in Mapping The beschrieben AtariIch werde nicht alle Adressen der Zellen und des Ziels auflisten, sondern die Idee des Effekts selbst beschreiben. Es sollte beachtet werden, dass die Adressen in Mapping der Einfachheit halber Mnemonik haben - sie sind so bequem zu merken.Was ist ein Bildschirm? Im Textmodus ist ein Rechteck mit Symbolen und einem Rahmen sichtbar.Der Einfachheit halber können Sie das Rechteck deaktivieren, indem Sie den Wert 0 bis 559 schreiben. Wie Sie sehen, ist Platz für einen Rastereffekt.Jetzt müssen Sie die Zeichnung mit der Ausgabe auf dem Bildschirm synchronisieren. Es gibt zwei Methoden:RTCLOK equ $0012
lda RTCLOK+2
waits
cmp RTCLOK+2
beq waits
Hier ist RTCLOCK die Echtzeituhr, die beim Einschalten des Computers startet. Erhöht zuerst 14 $, dann 13 $ und 12 $. Die Idee der Synchronisation ist einfach: Vergleichen Sie den Wert von Zelle $ 14 mit dem aktuellen. Wenn der vorherige Wert nicht übereinstimmt, ist ein Interrupt aufgetreten.Meiner Meinung nach passt die Methode jedoch nicht. Daher ist es bequemer, einen vertikalen VCOUNT-Zähler ($ D40B) für Linien zu verwenden, die auf dem Frame generiert wurden. Warten auf den Start des Frames wird sein:ws
lda $D40B ; VCOUNT
bne ws
Die Idee selbst ist, Farbwerte in das COLBK-Register ($ D01A) zu schreiben - die Farbe des Rahmens.Der in das Register geschriebene Wert ist in zwei Teile unterteilt: Farbtyp und Helligkeit, berechnet als Typ * 16 + Helligkeit. Hier und hier ausführlich beschrieben .Wenn Sie jedoch die Farbe für jede Zeile einstellen, ist eine Synchronisierung erforderlich. Wenn Sie einen beliebigen Wert in WSYNC (D40A) schreiben, wird der Prozessor angehalten und auf den Start der nächsten Zeile gewartet. Die gleiche Methode wird in Interrupts der Anzeigeliste verwendet.Der Effekt selbst gliedert sich in das Warten auf den Frame, das Generieren von Farbwerten und das Schreiben in die beschriebenen Register. Der Einfachheit halber habe ich Seitenadressen von Null verwendet. Sie können den xasm-Assembler zum Kompilieren verwenden. org $4000
start
wait_frame
ws
lda $D40B ; VCOUNT
bne ws
LDY #0
STY 559
zz
LDA $CD
CLC
ADC #5
STA $CD
BCC BR1
INC $CE
BR1
ADC $CB
STA $CB
BCC BR2
INC $CC
BR2
LDA $CC
STA $D40A ; WSYNC
STA $D01A
INY
BNE zz
BEQ wait_frame
run start
Es stellte sich heraus, 54 Bytes. 54-6 (Programmkopf) = 48 Bytes. Es ist Zeit zu experimentieren, zum Beispiel mit der Helligkeit von Grün zu spielen lda $CC
;*
and #$0f
ORA #$C0
;*
sta $D40A ; wsync
sta $D01A
Weitere Möglichkeiten zur Farbgenerierung überlasse ich Interessierten und versuche mich selbst. Erstellen, experimentieren und erstellen. Das ist so aufregend!