Ein Modul erstellen

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

CBM prg StudioEin Blick darauf, wie man eine Cartridge / ein Modul erstellen kann.

Wer schon mal ein Steckmodul in den C64 gestöpselt hat, der fragt sich evtl. wie das Programm darauf, ohne die Eingabe eines Startbefehls, ausgeführt wird. Die Lösung ist eigentlich sehr simpel. Ab der Speicherstelle $8000 sind einige Bytes zu finden, die für den Modulstart ausschlaggebend sind (s. The Transactor Vol. 5, Issue 1, Page 74).

 

Für uns sind zunächst mal die ersten neun BYTES interessant.

  • $8000 & $8001 : Hier können wir die Startadresse für unser Programm auf dem Modul ablegen. Dann wird dieses immer ausgeführt, wenn ein RESET auftritt. Wie gewohnt wird die Adresse als LSB/MSB gespeichert.
     
  • $8002 & $8003 : In diesen beiden BYTES können wir eine Adresse (LSB/MSB) hinterlegen, die beim Auftritt eines NMI angesprungen wird, z. B. beim Drücken der <RESTORE>-Taste.
     
  • $8004 bis $8008 : Die Adressen für RESET und NMI von eben haben nur eine Auswirkung, wenn in den folgenden fünf BYTES der Text CBM80 steht. Dabei ist zu beachten, dass bei den drei Buchstaben CBM das 7. Bit gesetzt ist!

 

Schauen wir uns jetzt mal ein kleines Programm an, dass die eben gemachten Ausführungen in die Praxis umsetzt. Unser Programm soll bei einem RESET den Rahmen wild blinken lassen und beim Betätigen von <RESTORE> die Hintergundfarbe ändern.

Wie ihr seht, laden wir das Programm nach $8000 und beginnen, wie so häufig, mit einigen BYTE-Anweisungen. Diesmal steht hier aber keine BASIC-Startzeile, sondern wir füllen, wie eben erklärt, die Adressen $8000 bis $8008. Dahinter wird dann unser Hauptprogramm liegen.

Direkt nach dem Label reset: führen wir einige Initialisierungen durch. Ohne diese kann es zu einem ungewollten verhalten des Moduls kommen. Zum Schluß die Interrupts wieder freigeben und das Programm läuft dann in unsere Endlosschleife um die Rahmenfarbe zu ändern.

 

Wenn ihr dieses Programm jetzt startet, passiert zunächst nichts. Führt ihr aber einen RESET aus (in VICE ALT+R oder den entsprechenden Menüpunkt auswählen) dann blinkt der Rahmen wie wir es gewohnt sind. Drückt ihr nun die <RESTORE>-Taste (unter VICE normalerweise <Bild rauf>) dann ändert sich die Hintergrundfarbe und der Rahmen flimmert auch noch. Wir ihr euch sicher vorstellen könnt, läßt sich das Programm nicht mehr verlassen, wir haben ja RESET und <RESTORE> umgebogen. Unter VICE hilft z. B. der sog. harte RESET (STRG+ALT+R). Startet das Programm erneut und betätigt dann <RESTORE>, der Hintergrund ändert sich auch jetzt und wir können immer noch im BASIC weiterarbeiten.

Dieses Vorgehen könnt ihr z. B. auch nutzen um eure Programme gegen RESET und <RESTORE> abzusichern. Ihr kennt das bestimmt auch von Spielen (die nicht auf einem Modul sind), ein RESET startet das Spiel einfach erneut. Bei 1942 von Elite könnt ihr das schön sehen, da es aber verschiedene Kopien von dem Spiel gibt muss das Verhalten nicht überall so sein! Solltet ihr das Spiel besitzen, startet es mal und drückt zum Beispiel mitten im Spiel dann RESET oder RUN/STOP-RESTORE.
Habt ihr eine Version die neustartet und die Möglichkeit einen Monitor aufzurufen (unter VICE ALT+M), dann findet ihr ab der Adresse $8000 folgenden Zeilen, die uns jetzt nicht mehr fremd sein sollten:

 

Den Hardware-Teil findet ihr unter ‚Ein EPROM brennen‚, hier geht es ja in erster Linie um die Programmierung, daher nur einige kurze Infos:
Wer nun einen EPROMinfoInfoE)rasable P)rogrammable R)ead O)nly M)emory Ein EPROM ist ein lösch- und programmierbarer ROM-Baustein. Der Inhalt läßt sich über ein 'Sichtfenster' per UV-Licht löschen. Daher findet ihr in der Regel einen lichtundurchlässigen Aufkleber auf solchen Bausteinen.-‚Brenner‚ hat, der kann das fertige Programm direkt brennen und auf ein entsprechendes Modul packen. Brennt ihr am PC, dann müsst ihr aber darauf achten, dass ihr die ersten beiden BYTES einer .prg-Datei nicht mitbrennt! Hier steht die Ladeadresse an der das Programm im Speicher abgelegt wird und diese darf nicht mit aufs Modul! Brennt ihr am C64 sollte eure Brenn-Software dies eigentlich erkennen und die beiden BYTES automatisch entfernen.

Wer jetzt plant sein geliebtes Spiel (z. B. Frogger) auf ein Modul zu packen, der muss (neben der Programmgröße) noch etwas beachten: Ist das Programm z. B. für die Startadresse $0801 ausgelegt, dann wird es im Modul (dort liegt es ja ab $8009) nicht laufen. Ihr müsst eine Kopierroutine davor schalten. Diese kopiert alles vom Modul an die original Speicheradressen und springt dann zum Start direkt dorthin.

 

Unser Programm läuft jetzt zwar und läßt sich, wie eben beschrieben, auch für einen C64 brennen, aber wollen wir es als ‚echte‚ Cartridge (.crt-Datei) im Emulator verwenden, dann ist noch etwas Arbeit nötig.

Dazu muss das Programm mit einem 80-BYTE umfassenden Header als .crt-Datei gespeichert werden. Das CBM prg Studio bietet hierzu leider keine Möglichkeit, im Netz finden sich aber entsprechende Programme und auch VICE stellt mit der ‚cartconv.exe‚ ein Hilfsmittel zur Erstellung von .crt-Dateien zur Verfügung.
Da ich mir zur Übung aber einige eigene Tools schreiben wollte, habe ich mir die Dokumentation zum CCS64 geschnappt und auf Basis der Beschreibung meinen Dateiconverter ‚RetroPrgFileWizard‚ (C# .NET 4.5) begonnen. Dieser erlaubt es eine .prg-Datei als .crt zu speichern. Aktuell kann man nur den Namen des Moduls eingeben, die anderen Felder sind noch gesperrt. Gespeichert wird immer im Verzeichnis in dem auch die .prg-Datei liegt, hier wird einfach .prg durch .crt ersetzt. Ich habe das Programm nur kurz zusammengezimmert, daher ist es weder besonders hübsch noch fängt es Fehler ab, liegt die .prg z. B. auf einer CD, dann fällt das Speichers eher schwer  😉

 

Unerwähnt soll natürlich nicht bleiben, dass ihr .crt-Dateien nicht nur mit VICE, sondern auch mit dem Turbo Chameleon 64 benutzen könnt. Somit lassen sich eure Modul-Programme, auch ohne EPROMMER, direkt am C64 starten.

 

Viel mehr gibt es zum Einstieg zur Programmierung von Modulen eigentlich nicht sagen. Wie oben erwähnt plane ich noch einen Hardwareteil (dort wird dann z. B. auch das Bankswitching behandelt, sprich das Modul blendet sich in andere Speicherbereiche, statt nach $8000, ein und man kann größere Module erstellen). Das dauert aber sicher noch einige Wochen oder gar Monate, ich habe zur Zeit keinen EPROM-Brenner mehr. Wie das Brennen mit dem TINY-EPROMMER funktioniert, findet ihr unter ‚Ein EPROM brennen‚.

 


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

Loading...


 

<<< zurück | weiter >>>

 

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

2 Gedanken zu „Ein Modul erstellen“

Schreibe einen Kommentar

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

Protected by WP Anti Spam