->
64'er ->
Aktuelles Heft ->4/98

4/1998
Spiele erstellen mit AssBlaster++ und Master-Tool
Dieses Spiel kann nur acht Sprites gleichzeitig darstellen, animieren und bewegen - außerdem arbeitet es nur mit zwei Zeichensaetze gleichzeitig.
Es kann nur eine horizontal-SRCollende Landschaft anzeigen und es ist mit Sicherheit schnell langweilig.
Warum Sie sich dieses Spiel trotzdem anschauen sollten? Es ist eigentlich nur ein Beispiel für eigene Projekte und hat folgende Eigenschaften:
Es belegt nur 24 K-Byte des Speichers ($A001-$FFFF) und kollidiert niemals mit einem im Speicher befindlichen Basic-Programmen. Dies gilt auch, wenn sich bereits ein
Basicprogramm im Speicher befindet. Mann kann es auch nach dem Laden des Spiels im Direktmodus sofort weitereditieren. Das Nachladen von einem Basicprogramm und der Start ist auch möglich. Zus„tzlich ist dieses Spiel auch noch Reset-fest.
Mit Hilfe eines Schnelladers (Ultraload-Plus), wird es in den Speicher geladen
und automatisch gestartet (beim Laden im Direktmodus). Dazu müsssen Sie aber eventuelle Erweiterungen (Speeder u.ä.) deaktivieren.
Es werden nur ungenutzte Speicherbereiche der Zeropage benutzt
(s. Speicherplan)
Komplett mit "AssBlaster++" entwicklet und paßt in den Speicher (in der
Version, die nicht einzelne Teile in den hohen Speicher auslagert!). Das heißt: Sie müssen nicht auf Diskette assemblieren, um dann den Source komplett neu zu laden. Sie können in den Speicher assemblieren und dann das Tool verlassen, das Spiel starten und zuletzt den Assembler mit RUN
wieder starten.
Alle Spieledaten lassen sich mit "Master-Tool" bearbeiten. Die Sounds und die Musik sind als Noten mit Oktaven abgelegt leicht änderbar.
Durch den Einsatz des Makroassemblers lßt sich das Programm leicht studieren - schauen sie sich das Listing: "game .src"an. In einer der beigefuegten Dateien befindet sich eine Beschreibung der "Parameter und Routinen des Interrupt-Programmes". Mit Hilfe dieses Textes und dem eben genannten Listing sollte es Ihnen m”glich sein, das Hauptprogramm zu lesen.
Das Programm demonstriert den Einsatz von Warteschleifen mit genauer Verzögerungszeit, SoftSRColling, Joystickabfrage, Musik, Sound, Sprite-Bewegung/Animation, Kollisionsabfrage
für Sprites und Zeichen, acht zusätzliche Zeichensatz-Sprites, eine Uhr,
einen Wecker und ein parallel ablaufendes zusaetzliches timergesteuertes
NMI-Programm. Jeder interessierte Programmierer sollte mit den Beispielen Möglichkeiten bekommen, kleinere Spiele selber zu programmieren.
Ken Schwiersch/lb
Download: D-64-Datei mit Beispielen
IRQ-Loader Relocator
Der Relocator ermöglicht es, den Loader an beliebige Speicherlagen anzupassen und abzuspeichern. Bei der Erstellung dieses Programmes wurde besonders auf Bedienungskomfort Wert gelegt: so werden beispielsweise Falscheingaben zuverlässig abgefangen. Die Bedienung erfolgt gänzlich über die Tastatur. Bei Eingaben reagiert die Tastatur wie man es von Basic gewohnt ist: die Tasten CRSR links und CRSR rechts sowie INST und DEL behalten ihre Funktion bei. Alle Eingaben sind wie gewohnt mit Druck auf die RETURN Taste zu bestätigen. Diskettenoperationen werden generell mit Ausgabe des Disketten-Status quittiert. Der Relocator wird von der Diskette mit
LOAD "IRQ-LOAD REL.",8,1
geladen und mit RUN gestartet.
Gleich nach dem Starten gelangt man ins Hauptmenue des Relocator-Programms, in dem man mit den Cursor-Tasten den gewünschten Menüpunkt auswählt und mit RETURN bestätigt. Nachfolgend die einzelnen Punkte des Menues:
Mit Save Loader ist es möglich, den IRQ-LOADER an die gewünschte Speicherlage anzupassen und anschließend auf Diskette abzuspeichern. Dazu muß zuerst das Highbyte der Speicheradresse eingegeben werden, ab der der Loader zukünfigt im Speicher beginnen soll. Anschließend muß nur noch der Dateiname festgelegt werden, unter dem der Loader auf der Diskette abgelegt werden soll. Wird kein Name eingegeben, kehrt man ins Hauptmenü zurück, ohne zu speichern. Gibt man als Namen hingegen das $-Zeichen ein, wird das Inhaltsverzeichnis der Diskette angezeigt, damit man sich vergewissern kann, daß das File auch auf die richtige Diskette gespeichert wird.
Unter Save Interface wird, im Gegensatz zum ersten Menüpunkt, nicht der ganze IRQ-Loader gespeichert, sondern lediglich die C64-seitige Routine. Die Initialisierung und die Floppy-Routinen werden weggelassen. Diese Option ist nur für Programmierer interessant, die in ihrem eigenen Programm nicht mehr vier Pages Speicherplatz für die "volle" Version des Loaders übrig haben. Die Handhabung dieses Menüpunktes erfolgt analog zum ersten.
Show Directory zeigt das Inhaltsverzeichnis der eingelegten Diskette. Mit SPACE wird die Ausgabe angehalten, ein weiterer Tastendruck setzt sie wieder fort; RUN/STOP bricht ab.
Mit Change Device läßt sich die Gerätenummer des Laufwerks (8-12), auf das sich sämtliche Ein- und Ausgabeoperationen beziehen sollen, festlegen. Für den Fall, daß kein Gerät mit der eingegebenen Nummer am Bus existiert, ist die Eingabe zu wiederholen.
Send Discommand ermöglicht ein Disketten-Kommando an die Floppy zu schicken. Unter diesem Punkt können auch Besitzer von CMD-Geräten das aktuelle Verzeichnis oder die Partition wechseln.
Quit Programme verläßt das Programm wird mit einem Reset.
Während herkömmliche Interrupt-Loader nur mit der Floppy 1541 laufen und nicht zur Zusammenarbeit mit anderen Floppys oder gar Festplatten zu bewegen sind, der vorgestellte Loader diesen gravierenden Nachteil nicht auf; er ist kompatibel zu folgenden Laufwerken: 1541, 1571, 1581, FD2000, FD4000, CMD HD-Series. Auf Laufwerken, die in obiger Liste nicht angeführt sind, also dem Lader unbekannte Typen, wird die 1541er Version des Laders installiert.
Da es hat sich auf dem C64 bei IRQ-Loadern durchgesetzt hat, nur die ersten zwei Zeichen des Dateinamens zu verwenden, macht auch dieser Lader in diesem Punkt keine Ausnahme, damit er an bestehende Software leicht angepaßt werden kann. Die Dateinamen können durchaus mehr als zwei Zeichen enthalten, abgefragt werden aber immer nur die ersten zwei!
Um den Lader zu benutzen, muß er zuvor "initialisiert" werden. Bei diesem Vorgang wird der Laufwerkstypus des aktuellen Geräts (Nummer in Adresse $BA vom C64 Betriebssystem) ermittelt, die Laderoutine entsprechend angepaßt und anschließend zur Floppystation übertragen und dort gestartet. Von nun an tritt am seriellen Bus ein eigenes šbertragungsformat zwischen C64 und Laufwerk in Kraft und sämtliche anderen Zugriffe auf den Bus sind tabu! Auch ein zweites Initialisieren würde einen Absturz zur Folge haben. Will man den Bus wieder normal über das Betriebssystem benutzen, muß der Lader vorher "deinstalliert" werden (s.Deinstallation). Die Initialisierung erfolgt aus dem eigenen Programm mit:
JSR base
base ist hierbei die Startadresse des Laders im Speicher (sie wurde im Relocator beim Speichern festgelegt).
Nach erfolgreichem Initialisieren des Laders können nun Files nachgeladen werden, ohne daß dabei das Interrupt-Flag manipuliert wird. Der Aufruf der Laderoutine erfolgt folgendermaßen:
LDX #"x" ;ASCII-Code des ersten Zeichens des Dateinamens
LDY #"x" ; ASCII-Code des zweiten Zeichens des Namens
JSR base + 3 ; File "xx" laden
Um den Bus wieder für normale Zugriffe zugänglich zu machen, muß der Lader deinstalliert werden. Dies erfolgt mit:
LDX #$00
JSR base+3 ;Lader abschalten
Will man den Lader wieder verwenden, nachdem er abgeschaltet wurde, muß er vorher unbedingt wieder initialisiert werden)!
Komplexe Programme nutzen den Speicher des C64 oft bis in die letzten Ecken aus und haben deswegen oft wenig Platz für ein Ladesystem übrig. Aus diesem Grund gibt es eine "abgespeckte" Version des Laders, bei dem der Initialisierungsteil weggelassen wurde. Es fehlen somit die Erkennungs-, Modifikations- und Floppyroutinen. Aus diesem Grund benötigt das Interface weniger als eine Page Speicher im C64. Voraussetzung zur Verwendung des Interfaces ist aber, daß der Loader zuvor ordnungsgemäß initialisiert wurde; dies kann nur mit dem vollständigen Loader-Programm (s.o.) erfolgen. Man braucht also immer auch die ganze Version des Laders! Nachdem der Lader aber initialisiert wurde, wird das komplett System nicht mehr benötigt.
Laden eines Files über das Interface:
LDY #"x" ;ASCII-Code des zweiten Zeichens
LDX #"x" ;ASCII-Code des ersten Zeichens des Namens
JSR base2 ;und File "xx" laden
Abschalten des Laders über das Interface:
LDX #$00 ;Abschaltcode
JSR base2 ;Lader abschalten
Hier ein Beispiel: Der IRQ-Loader befindet sich ab Adresse $CC00 im Speicher und das File "te" soll nachgeladen werden:
JSR $CC00 ;Init
LDX #"t" ;ASCII Code von "t" in X-Reg
LDY #"e" ;ASCII Code von "e" in Y-Reg
JSR $CC03 ;File "te" laden
Erfahrene Programmierer dürften keine Problem haben, den Loader einzubinden - viel Spaß.
Helfried Preyl/lb
GoDot-Module
Für Freunde des Image-Prozessors GoDot haben wir einen Loader bzw. Saver für die Formate Koala und Doodle auf die Diskette gepackt. Sie untersttzen nun auch gepackte Formate - mehr Informationen finden Sie auf der GoDot-Homepage: