Weihnachten 2013

Für diesen Beitrag wurde das CBM prg Studio verwendet.
weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

CBM prg Studio
Es weihnachtet…

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, dass in X- & Y-Richtung verdoppelt wird. Also ein neues Projekt erstellt und los gehts…

Das Sprite für die Schneeflocken.
Das Sprite für die Schneeflocken.

 

Nun ist es an der Zeit mit dem Programm zu beginnen.

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.

 

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.

 

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.

 

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 @exit1: 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.

 

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). Beim incbin habe ich auf das abschließende ,true verzeichtet, da wir nur ein Sprite laden. Schaden würde es natürlich nicht.


Jetzt fallen die Schneeflocken…

Frohe Weihnachten
Frohe Weihnachten

 

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. Diese Fassung könnt ihr auch im Java-Emulator starten bzw. euch den Source inkl. .d64-Image herunterladen.


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 |

 

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

Schreibe einen Kommentar

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

Protected by WP Anti Spam