Vom CBM prg Studio zum C64 Studio

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

CBM prg StudioWas muss man bei der Umstellung beachten?C64 Studio

 

Da ich bekanntlich nun auch mit dem C64 Studio liebäugle, möchte ich hier kurz auf die wichtigsten Unterschiede zwischen dem CBM prg Studio und dem C64 Studio eingehen.

Dass sich die Editoren für Sprites, Zeichensätze usw. unterschiedlich bedienen lassen sollte klar sein. Ein „Problem“ stellt dagegen evtl. die Übertragung der Daten von der einen zur anderen IDE dar.

 

Sprites übertragen
Beide Programme bieten die Möglichkeit Sprites als Binär-Datei zu speichern und zu importieren. Daher lassen sich diese relativ einfach austauschen.

Im CBM prg Studio die Sprites einfach als Binär-Datei speichern:

Binär-Export
Binär-Export

 

Dann im C64 Studio ein neues Sprite-Projekt erstellen und die eben erzeugte Binär-Datei importieren.

Mit 'From File...' den Import starten
Unter Project mit ‚From File…‚ den Import starten

 

Nun noch ggf. die notwendigen Anpassungen (Multicolor, Farben) vornehmen

Oben: Direkt nach der Konvertierung Unten: Multi-Color und Farben wurden angepasst
Oben: Direkt nach der Konvertierung
Unten: Multi-Color und Farben wurden angepasst

schon hat man die Sprites übertragen.

 

Screens übertragen
Eigentlich ließen sich Screens so einfach wie Sprites austauschen. Aber leider hakt es aktuell etwas. Das CBM prg Studio bietet nämlich keine Möglichkeit die Daten als Binär-Datei zuspeichern. Aber es kann eine Binär-Datei importieren, falls ihr z. B. einen Screen vom C64 Studio zum CBM prg Studio übertragen möchtet.
Für den Export als Binär-Datei könnt ihr alternativ im CBM prg Studio ein leeres Projekt erstellen, nur den Screen laden und das „Programm“ erstellen. Dann müsst ihr evtl. noch die Ladeadresse, z. B. mit einem Hexeditor, entfernen!
Das C64 Studio kann dagegen nur binär exportieren und aktuell  keine Screens als Binär-Datei importieren! Ein Klick auf den entsprechenden Import-Button führt zu keiner Reaktion. Hier warte ich auf eine Antwort von Georg.

Für den evtl. zugehörigen Zeichensatz müsst ihr natürlich noch mit dem nächsten Schritt sorgen.

 

Zeichensätze austauschen
Ich habe die Zeichensatz-Editoren zwar bisher in keinem Beitrag verwendet, aber die Daten lassen sich wieder, wie die Sprites, über eine Binär-Datei ganz einfach übertragen.

 

Ihr könnt natürlich auch das CBM prg Studio verwenden um z. B. eure Sprites zu erzeugen, ohne die Daten ins C64 Studio-Format zu übertragen. Speichert die Daten als bin-Datei und bindet diese dann direkt in den Source ein. Dass klappt natürlich auch umgekehrt. Genau so müsstet ihr verfahren, wenn ihr einen externen Editor für Sprites, Zeichensätze oder Screens verwendet.

 

Der Assembler
Die gravierensten und bei einer Umstellung fehleranfälligsten Unterschiede finden sich beim Assembler.

Ich denke am Besten lassen sich die Unterschiede mit einem kleinen Programm aufzeigen. Da ich hier bisher das CBM prg Studio verwendet habe, zeige ich ein kleines Assemblerprogramm, dass damit erstellt wurde und dann, was bei der Umstellung aufs C64 Studio beachtet werden muss. Beachtet bitte, dass nicht alles im Source sinvoll ist, einiges dient nur dazu Unterschiede aufzuzeigen!

CBM prg Studio

Möchtet ihr dass Programm erstellen, dann kommentiert bitte die beiden Zeilen mit incasm und incbin einfach aus. Diese dienen nur der Veranschaulichung der Unterschiede und haben auf die Funktionsweise (wie auch einige andere Anweisungen) keinen Einfluss.
 

Und nun zu den Unterschieden. Ihr solltet vorher die Hilfe des C64 Studios und dort besonders den Abschnitt über die Macros studiert haben. Gehen wir einfach schrittweise durch das Programm.

Juhuu, der Kommentar macht kein Problem. Die Kommentare werden bei beiden gleich behandelt. 😉

 

Dies wird beim C64 Studio nicht benötigt. Das < und > zum Ermitteln des LSB und MSB stellt dort einen Operator mit eigener Wichtung dar, wie z. B. + - * /, daher gibt es kein Umschalten, wie beim CBM prg Studio. Also weg mit der Zeile. Genauere Infos gibt es weiter unten, sobald ein solcher Befehl auftaucht.

 

Dem Assembler des C64 Studios muss man mitteilen, wie die Ausgabedatei heißt und wo und wie sie gespeichert werden soll. Dies geschieht über das Macro !to gefolgt vom Pfad inkl. Zielnamen in Anführungszeichen. Abschließend wird noch hinter dem Komma festgelegt, wie gespeichert werden soll. Mit ,cbm weisen wir den Assembler an die Ladeadresse an den Anfang der Datei zu schreiben (also im bekannten Commodore Business Machines-Format zu speichern). Durch die Angabe von ,plain wird z. B. keine Ladeadresse am Anfang der Zieldatei gespeichert.

 

Dieser Abschnitt ist wieder bei beiden identisch. Lasst mich noch erwähnen, dass das C64 Studio aktuell keine binären Konstanten mag. Etwas wie JOY_FIRE = %00010000 sorgt für eine Fehlermeldung beim Erstellen, Georg ist informiert.

 

Wie ihr beim !to gesehen habt, beginnen die Macros beim C64 Studio mit einem Ausrufezeichen !, daher muss es statt BYTE jetzt !byte lauten. Für viele Macros gibt es mehrere (oft kürzere) Schreibweisen. Man könnte hier auch !by, !08 oder einfach nur !8 schreiben. Schaut dazu einfach mal in die Hilfe. Daher muss die nächste Zeile nun

lauten.

 

Auch IFDEF DEBUG und das dazugehörige ENDIF versteht das C64 Studio so nicht. Zunächst muss wieder ein Ausrufezeichen verwendet werden, außerdem muss der dazugehörige Block in geschweifte Klammern (wie unter C) eingeschlossen werden. Dabei ist es wichtig, dass die offene Klammer in der selben Zeile, also direkt hinter der Bedingung, steht.

 

Eine nette Fehlerquelle ist die folgende Anweisung lda 'x' (bzw. die korrekte Schreibweise lda #'x' die ab Version 3.0.0 endlich unterstützt wird)! Das CBM prg Studio erlaubt es so (durch einfache ') den Screencode für das x in den Akku zu holen. Mit lda "x" könntet ihr den PETSCII-Code in den Akku laden, beachtet die doppelten ".
Hier kommt es nun zu zwei Problemen: Das C64 Studio kennt diese Unterscheidung zwischen  ' und  " nicht (beide Schreibweisen sind hier gleichwertig möglich), außerdem würde so der Wert von der Adresse für die das  "x" steht in den Akku geholt werden.

Wollen wir also das x in den Akku laden, dann müssen wir zunächst, wie eigentlich immer, eine Raute # voranstellen. Aber auch dann wird ‘nur‚ der PETSCII-Code verwendet, was nicht zum gewünschten Ergebnis führt. Wir können hier aber tricksen, indem wir einfach die folgende Zeile verwenden:

Wir berechnen hier den Screencode einfach, indem wir vom PETSCII-Code fürs x  (120) den fürs a (97) abziehen und eins hinzuzählen. Somit kommen wir auf 24, was bei einem Blick ins Char-ROM dem X entspricht.
Kleiner Exkurs: Diese Zeile ließe sich für den häufigen Gebrauch z. B. mit einen eigenen Macro vereinfachen.

Dann könntet ihr lda #"x"-"a"+1 einfach durch +ldasrc "x" ersetzen. Beachtet das +, damit wird der Aufruf eines eigenen Macros eingeleitet! Bei Ziffern dürft / braucht ihr nicht so vorgehen, diese liegen im PETSCII und Char-ROM an der selben Stelle!

 

Dies funktioniert bei beiden IDEs.

 

Die Anweisung lda txt2:,X macht dann aber gleich wieder Probleme. Einmal stört sich das C64 Studio am Doppelpunkt. Solange dieser alleine vorkommt ist alles OK, aber wehe hinter dem : kommen weitere Zeichen (wie hier das ,), dann sind Probleme vorprogrammiert. Also entfernen wir die Doppelpunkte für alle Label am besten. Ich werde daher auch beim CBM prg Studio in Zukunft auf Doppelpunkte verzichten.
Aber auch ohne  :  gibt es noch einen Fehler. Das C64 Studio ist casesensity, d. h. es unterscheidet (zumindest teilweise) zwischen Groß- & Kleinschreibung! Interessant ist, dass bei den vorgegebenen Macros keine Unterscheidung stattfindet, ihr könnt also sowohl !to als auch  !TO  schreiben.

Wir müssen aber für unser Label TXT2 auf die Großschreibung achten und daher

verwenden.

 

Auch mit dem folgenden Cheaplabel beq @exit: haben wir beim C64 Studio keinen Erfolg. Laut Georg darf ein @ nicht für ein Label verwendet werden. Interessant ist, dass es nur, wenn es mit @ex beginnt zu einer Fehlermeldung kommt. Wir sollten beim C64 Studio aber zur Sicherheit immer aufs @ verzichten.
Ich habe bei der ersten Umstellung fast drei Stunden gesucht, warum ein Programm nicht richtig funktionierte, bis ich feststellte, dass Zeilen wie  beq @exit: vom C64 Studio ohne jeden Fehler einfach ausgelassen wurden. Es gab im fertigen Programm also keinen Sprung. Erst nach meiner Meldung wurde der eben erwähnte Hinweis eingebaut.
Wie Cheaplabel im C64 Studio realisierbar sind sehen wir gleich. Hier möchte ich eine weitere Möglichkeit für „einfache“ Label zeigen.

Mit bne + springt ihr immer vorwärts zum nächsten +-Label, ihr müsst euch so keine umständlichen Namen ausdenken. Man kann die Kette auch erweitern, wie ihr am ++ erkennen könnt. Das gleiche Spiel, nur umgekehrt, klappt auch mit -, dann wird immer rückwärts zum nächsten - gesprungen.

Also ersetzen wir hier  @exit: einfach durch ein +.

 

Da der Rest wieder identisch ist, hier nochmal der komplette !ifdef-Block.

Das bne *-9 könntet ihr, wie eben erwähnt, durch ein bne - ersetzen. Dann müsste natürlich auch vor lda TXT2,X ein - stehen.
Da das ldy #$00 wieder bei beiden funktioniert, habe ich es hier gleich mit angegeben.

 

Dann stoßen wir bei  @loop: wieder auf ein @. Diesmal wollen wir aber ein wiederverwendbares Label haben. Dies ist beim C64 Studio auch möglich, nur beginnen diese Label dort mit einem Punkt .. Ändern wir also einfach @loop: in

 

Nun zum lda #>TESTADR+$100. Wie Benutzer des CBM prg Studios aus leidvoller Erfahrung wissen, wird dort über einen Schalter (oder mit der in diesem Beispiel verwendeten Kompilerdirektive  Operator Calc) bestimmt, ob hier erst das MSB der Adresse ermittelt und dann addiert wird, oder ob erst der angegebene Wert auf die Adresse addiert und anschließend das MSB ermittelt wird. Durch die verwendete Direktive wollen wir also erst addieren.
Beim C64 Studio sind < und > allerdings ganz normale Operatoren. Diese haben eine höhere Priorität als + - * /. Somit führt ein lda #>TESTADR+$100 immer dazu, dass erst das MSB gebildet und dann der Wert addiert wird. Um erst zu addieren müssen wir also Klammern verwenden.

 

Der Rest ist, bis auf die Änderung von jmp @loop: in jmp .loop, wieder identisch.

 

Das Einbinden von Dateien funktioniert auch etwas anders. Statt incasm "Test.asm" verwendet das C64 Studio diese Anweisung:

um einen Quellcode hinzuzuladen.


Auch ein align 64 lehnt das C64 Studio ab. Hier ist die Anweisung etwas komplexer, aber damit auch flexibler. Sie lautet !align UND-Wert, Vergleichswert [, Füllwert]. Umgangssprachlich „sagen“ wir also: Fülle den Speicher solange mit dem angegebenen Füllwert (0 falls nichts angegeben wurde), bis  Programcounter AND UND-Wert gleich dem Vergleichswert ist.

Wir schreiben also einfach:

 

Sprites lassen sich leider nicht so einfach über ein incbin "Test.spt",1,8,true einbinden. Das C64 Studio ist sehr auf Binär-Dateien ausgerichtet. Daher muss

verwendet werden, dies setzt selbstverständlich voraus, dass "Test.spt" eine Binär-Datei ist. Zu beachten ist, dass die eigenen Projektdateien beim C64 Studio nicht umgewandelt werden. Wollt ihr diese direkt einbinden, dann müsst ihr ggf. BYTES überspringen oder die Daten beim Programmstart passend umkopieren. Hier hat man es mit dem CBM prg Studio einfacher. Das Macro !binary kann noch die Anzahl zu lesender BYTES und die zu überspringenden BYTES als Parameter bekommen, schaut dazu einfach mal in die Hilfe.

 

Dies bedarf keiner großen Änderung, wir verzichten auf den Doppelpunkt und dass es statt TEXT nun !text lauten muss, wird keinen mehr überraschen. Beide Fassungen liefern hier einen PETSCII-Text. Beim C64 Studio können wir allerdings das BYTE  $00  direkt hinter den Text schreiben…

Das CBM prg Studio verhält sich dort etwas merkwürdig. $00 wird als Text mit ausgegeben, falls es mit in der TEXT-Zeile steht.

 

Beim nächsten  TEXT sieht die Sache wieder etwas anders aus:

Hier erzeugt man beim CBM prg Studio Screencodes. Wie weiter oben bereits erwähnt, findet beim C64 Studio keine besondere Unterscheidung zwischen  ' und  " statt. Um dort ebenfalls Screencodes zu erhalten, müssen wir dem Assembler mitteilen, dass er eine Konvertierung durchführen soll. Das geschieht über das Macro !convtab. Dieses erwartet als Parameter, wie gemappt werden soll. Man kann ein eigenes Mapping übergeben oder mit raw und scr auf die vorgegebenen zurückgreifen. Wir brauchen hier scr um Screencodes zu erhalten.

Beachtet, dass !convtab seine Gültigkeit für alle folgenden !text-Macros behält, nicht nur für die direkt folgende Anweisung!


Beim Label wd1: verzichten wir wieder auf den Doppelpunkt und aus WORD wird !word.

 

Nun sind wir fast fertig, nur noch die Doppelpunkte entfernen und @loop: in .loop ändern. BANG! Schon haben wir die nächste Fehlermeldung.
Wir sind mit dem Thema Cheaplabel noch nicht ganz durch!
Mit .loop haben wir ein Cheaplabel doppelt vergeben, aber das C64 Studio mag dies anscheinend nicht. Das Problem ist hier die „Sichtbarkeit“. Beim CBM prg Studio gilt ein Cheaplabel immer bis zum nächsten normalen Label. Das C64 Studio verwendet aber sog. Zonen. Diese werden über das Macro !zone, gefolgt von einem eindeutigen Namen für die Zone, definiert. Es ist keine schlechte Idee Zonen direkt vor einem eindeutigen Label zu definieren und dabei den Labelnamen auch als Namen für die Zone zu verwenden. Der Rest unseres Programms sieht dann so aus:

Natürlich könnt ihr Zonen ganz nach euren Anforderungen definieren, sie müssen nicht zwingend Bezug zu einem Label haben.

 

Hier nochmal das komplette Programm in der C64 Studio-Fassung…

C64 Studio

 

Den Einen oder Anderen mag dies nun abschrecken, aber so wild sind die Unterschiede auch wieder nicht. Insgesamt bietet der Assembler des C64 Studios viel mehr Möglichkeiten, als der vom CBM prg Studio. Einiges davon seht ihr bei ‚Level 3 – Die Fahrt zur Basis‚.


Wer möchte, kann auch schon mal das fürs C64 Studio umgestellte ‚L.O.V.E.‚-Projekt herunterladen. Dies stellt den Ausgangspunkt für den bald folgenden dritten Level dar.


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

Loading...



<<< zurück |

 

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

2 Gedanken zu „Vom CBM prg Studio zum C64 Studio“

  1. Hallo,

    erstmal Danke für das ausführliche Tutorial! Sehr gut verständlich erklärt alles, auch wenn wirklich viele „Typos“ vorzufinden sind. Good job!

    Mir ist im abschliessenden Listing allerdings diese Zeile aufgefallen:
    lda #>TESTADR+$100
    Sollte diese nicht folgendermassen lauten?:
    lda #>(TESTADR+$100)

    Ich habe das Listing nicht compiled, da ich das hier erlernte Wissen lieber direkt in ein eigenes Projekt einfliessen lasse! 😉 Von daher kann ich jetzt nicht sagen ob ich hier richtig oder falsch liege.

    Grüsse!

Schreibe einen Kommentar

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

Protected by WP Anti Spam