Weihnachten 2013

Es weihnachtet…

C64 Studio, AMCE & TASM

Da wir heute den 2. Advent haben und ich mich langsam in die Winterpause verabschiede, wollen wir noch kurz für etwas weihnachtliche Stimmung auf dem C64 sorgen.

Schneefall auf dem C64

Wir wollen es also auf dem C64 schneien lassen. Für die Schneeflocken verwenden wir ein Sprite, das in X- & Y-Richtung verdoppelt wird. Also ein neues Projekt erstellt und los gehts…

Der Anfang beinhaltet wieder die Einrichtung eines Rasterzeilen-Interrupts, die von uns gewünschte Rasterzeile wird über die Konstante RASTER bestimmt. Außerdem initialisieren wir die Sprites jsr initSprites und sorgen mit roter Zeichenfarbe jsr setCharColor und grünem Hintergrund $d021 sowie Rahmen $d020 für etwas Weihnachtsflair.

Sprites initialisieren

Hier bereiten wir unsere Sprites vor. Um die gesamte Anzeige, die bekanntlich 320 x 200 Punkte aufweist, mit Sprites zu füllen, benötigen wir, bei doppelter Größe, sieben Sprites in der X-Richtung (48 * 7 = 336) und fünf in Y-Richtung (5 * 42 = 210). Sorgen wir also dafür, dass die Sprites, für die jeweilige Zeile, korrekt positioniert und eingerichtet werden.

Mit lda #sprite/64 berechnen wir die Nr. des 64-Byte-Blocks für unser Sprite. Da wir für alle sieben dasselbe Sprite verwenden, schreiben wir diese Adresse für die Sprites 0 bis 6 in die Sprite-Pointer. Dann setzten wir die Farbe dieser Sprites auf weiß und setzen auch noch die X-Position auf die richtigen Werte. Die Sprites beginnen links mit Sprite-0 ab dem Pixel 24 und dann folgt alle 48 Bildpunkte das nächste Sprite. Beachten müssen wir natürlich, dass die letzten beiden Sprites an einer X-Position über 255 beginnen.

Abschließend sorgen wir noch für die Anzeige von einfarbigen Sprites, die vor dem Hintergrund erscheinen und in X- & Y-Richtung verdoppelt sind.

Da die Sprites später nur noch auf der Y-Achse verschoben werden, reicht es diese Funktion einmalig beim Programmstart aufzurufen.

Zeichenfarbe setzen

Um die Zeichenfarbe auf rot zu setzen, schreiben wir einfach ins COLOR-RAM für jedes Zeichen den Wert für rot. Die Schleife solltet ihr vom BS-Löschen kennen, nur dass wir hier eben ins Farb-RAM schreiben. Damit auch neue Zeichen rot erscheinen, schreiben wir den Wert abschließend auch nach $286, hier merkt sich das Betriebssystem die aktuelle Zeichenfarbe.

Der Interrupt

Unser Rasterzeilen-Interrupt holt sich zunächst die aktuelle Zeile ins X-Register. Dann werden alle sieben Sprites auf die passende Y-Position gesetzt. Die IRQ-Zeile haben wir der Einfachheit in einer Tabelle bei YPos abgelegt. Für die Sprites addieren wir noch einen kleinen Offset von zwei Zeilen. Die ermittelte Position wird natürlich für alle Sprites gesetzt. Dann bestätigen wir den Raster-IRQ und prüfen, ob dies die letzte Spritezeile war. Falls ja geht es bei Exit weiter, sonst erhöhen wir RowCnt, holen die nächste Rasterzeile und verlassen den Interrupt. Wir lösen also für jede Spritezeile alle 42 Zeilen einen neuen Interrupt aus.

Wurden alle Spritezeilen dargestellt, dann beginnen wir wieder von vorne. Dazu wird RowCnt zurück auf 0 gestellt und der Rasterzeilen-Interrupt auf die erste Zeile laut unserer Konstanten RASTER gesetzt.

Die Schneeflocken sollen sich natürlich noch etwas bewegen, dazu kopieren wir die Spritedaten einfach, wie beim Color-Cycling zyklisch. Um die Animation zu timen, verwenden wir einen weiteren Zähler Wait.

Wir verringern Wait also einfach. Ist der Wert größer null, dann verlassen wir den Interrupt bei toSystem direkt Richtung System-Routine. Wenn der Zähler auf 0 geht, dann setzen wir ihn wieder auf den Anfangswert, kopieren die Spritedaten und laufen ebenfalls zum Sprung zur System-Routine durch.

Variablen

Am Ende folgen natürlich noch unsere Variablen und die Spritedaten.

Hier findet ihr auch unsere Tabelle mit den Y-Positionen (ok, eigentlich ist es die Rasterzeile für den Interrupt).

Schneeflöckchen, Weißröckchen…

Frohe Weihnachten 2013
Frohe Weihnachten 2013

Ich hoffe euch ist aufgefallen, dass wir hier 35 Sprites gleichzeitig verwenden.

Um die Stimmung noch etwas zu steigern findet ihr im Download eine Fassung mit Musik. Dazu sind, neben dem Musikstück, nur zwei weitere Befehle notwendig.


Ich mache nun etwas Pause und hoffe das erste Jahr auf dieser Seite hat euch gefallen und ihr besucht sie auch 2014 wieder.

Frohe Weihnachten und einen guten Rutsch ins neue Jahr,
Jörn


Schrott!!Naja...Geht so...Ganz gut...SUPER! (10 Bewertungen | Ø 4,80 von 5 | 96,00%)

Loading...


Zurück

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam