Landung 004

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‚Lasernetz‚ stabilisieren

Kümmern wir uns endlich darum, dass der Himmel nicht mehr flackert, sobald sich das Sprite dem Lasernetz nähert. Dazu verwenden wir einen stabilen Rasterzeileninterrupt.

 

Vorausgesetzt wird das Wissen aus den weiterführenden Rasterzeilen-Interrupt Beiträgen: Raster-IRQ: PAL oder NTSC, Raster-IRQ: Timing-Probleme und Raster-IRQ: Endlich stabil!!!.

 

Um das Problem nachzuvollziehen, achtet bitte darauf, dass SPACESHIPSTARTY noch den Wert = $32 hat. Am besten benutzt ihr einfach den Download aus ‚Landung 003‚.

Wie ihr euch als zukünftige Raster-Profis denken könnt, haben wir hier ein Timing-Problem. Um darauf besser reagieren zu können, benutzen wir zwei Raster-IRQs. Einen für den Himmel und den zweiten für den ‚Laser‚. Für diesen verwenden wir einen stabilen Rasterzeileninterrupt. Also, „Frisch Gesellen, seid zur Hand…„

 

Ändert erstmal  RASTERIRQ_LASER, wie oben zu sehen. Da der stabile Raster-IRQ etwas Vorlauf benötigt, startet der Laser-Interrupt nun in Zeile 46 ($2E). RASTERIRQ_CANYON kann gelöscht werden, die Konstante benötigen wir nicht mehr.

Da wir uns vom Timer-IRQ nicht mehr stören lassen wollen, fügt noch folgende Zeilen zur Interrupt-Einrichtung hinzu, um diesen zu deaktivieren.
Wie wäre es zwischen sta VICCONTROLREG1 und cli.

 

Jetzt entsorgen wir unseren bisherigen Interrupthandler (also die komplette lander_IRQ: Routine löschen) und beginnen mit einem neuen:

Da wir nun getrennte Interrupts verwenden, setzten wir jetzt direkt ohne Prüfung die Farbe für den Himmel, tragen dann die Zeile für den nächsten Raster-IRQ ein und biegen den RAM-Vector auf doRasterIRQ: um. Dann springen zum Ende des Interrupts, um ihn zu bestätigen und zu verlassen.

Schon kommen wir zum zweiten Interrupt. Dieser verwendet einen stabilen Raster-IRQ und sorgt somit dafür, dass unser Laser immer an der selben Position beginnt.

Mit dem align 256 sorgen wir wieder dafür, dass uns keine Page-Grenze das Timing zerschießt. Den Rest kennt ihr aus ‚Raster-IRQ: Endlich stabil!!!‚, außer bei der Zeile  lda LaserFlash:  und einigen Label, sowie Kommentaren hat sich nichts dramatisch geändert. Der lda verwendet jetzt die absolute Adressierung, also mussten wir darauf achten, dass das Timing noch passt.

Nachdem für Stabilität gesorgt wurde, machen wir uns jetzt endlich an die eigentliche Arbeit und sorgen für das Lasernetz.

Wir beginnen damit, die Hintergrundfarbe auf die vom Laser zu setzen und erhöhen dann für den nächsten Durchlauf die Laserfarbe. Dann verbummeln wir mal wieder etwas Zeit, damit der Laser sich über zwei Rasterzeilen erstreckt.
Danach wird der Rahmen auf die Canyon-Farbe gesetzt, im RAM-Vector wieder die Adresse vom Laser-IRQ hinterlegt und schließlich der IRQ bestätigt und verlassen.

 

Ein Start zeigt uns, dass der Himmel endlich nicht mehr flackert, auch wenn ihr alle Sprites aktiviert ändert sich daran nichts, oder??

Links gibt es noch ein kleines Problem.
Links gibt es noch ein kleines Problem.

Es gibt einen kleinen Grafikfehler ganz links! Bei bestimmten Kombinationen von Sprites ‚verlieren‚ wir wohl etwas Zeit. Auch hierfür gibt es eine Erklärung, die aber mal wieder auf später vertagt wird. Wir könnten das Problem zwar einfach ignorieren, aber wir lösen es durch eine kleine zusätzliche Prüfung. Ersetzt einfach die bisherige Zeile lda #$15 kurz hinter dem Label doRasterIRQ_Laser: durch folgenden Block.

Wir verkürzen unsere Warteschleife einfach um eins und prüfen dann, ob sich das Raumschiff direkt unter dem Laser befindet. Falls ja verringern wir die Warteschleife um zwei Durchläufe.

Jetzt kommt der Laser nur noch aus dem Tritt, wenn sich das Sprite noch weiter nach oben bewegt. Dass kommt aber nicht vor, da das Raumschiff dann zerstört wird und wir z. B. das Lasernetz deaktivieren und eine Explosion anzeigen.

Das Lasernetz ist endlich stabil. (Screenshot Emu64 Beta 5.0.8 mit Simulation der Bildschirmkrümmung und Unschärfe)
Das Lasernetz ist endlich stabil.
Screenshot Emu64 Beta 5.0.8 mit Simulation der Bildschirmkrümmung und Unschärfe

Wie euch im Source evtl. aufgefallen ist, habe ich hier komplett auf das Anspringen der Timer-IRQ-Routine verzichtet. Da wir diese zur Zeit nicht benötigen, können wir sie auch ganz ignorieren.


Das wäre es auch schon wieder. Beim nächsten Mal kümmern wir uns endlich um die Steuerung.

Start im Java-Emulator

 


Schrott!!Naja...Geht so...Ganz gut...SUPER! (3 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück | weiter >>>

 

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