Hallo Besucher, der Thread wurde 7,3k mal aufgerufen und enthält 12 Antworten

letzter Beitrag von sparhawk am

Hello World für den ca65 Assembler

  • Ich habe mal ein wenig rumgespielt, weil ich schauen wollte welche Toolchain funktioniert und wollte dazu den cc65 benutzen. Da man aber schwer Infos findet, dachte ich, ich teile das mal hier, falls es für Andere auch von Interesse ist. Da das mein erster Versuch ist auf dem C64 wieder einzusteigen habe ich erstmal ein paar einfach batchfiles geschrieben um die Umgebung zu setzen. Finde das aber ganz hilfreich weil es am Besten zeigt was man alles braucht und wie man das aufruft. Bei CC65 sind leider keinerlei Beispiel vorhanden die Out-of-the-Box funktioniert hätten.


    cc65 beokmmt man hier https://github.com/cc65/cc65 muss den aber selbst kompilieren. Ich weiss nicht ob es auch eine vorkompilierte Version gibt.


    1. Im DOS Fenster dann cc65_env.bat ausführen (Pfad anpassen)
    2. Verzeichnis hello_world anlegen und hellow_world.s reinkopieren.
    3. build.cmd ebenfalls in das hellow_world reinlegen und ausführen.


    Das fertige PRG kann man dann problemlos am C64 mit "HELLO WORL",8,1 laden und mit SYS 49152 starten.


    Habs nur in VICE getestet, aber das funktioniert auch auf einem echten C64. :)


    Was leider noch nicht funktioniert ist, dass der Text dann auch korrekt ausgegeben wird, weil die ASCII Zeichen nicht korrekt konvertiert werden. Da versuche ich jetzt eine Lösung zu finden, wie man das am Bestne bewerkstelligen kann, weil das etwas unpraktisch ist, wenn man die immer erst zur Laufzeit konvertieren muss.


    Code: cc65_env.bat
    1. @echo off
    2. set CC65_HOME=D:\src\java\C64-Dev\cc65
    3. set PATH=%PATH%;%CC65_HOME%\bin
    4. echo Home: %CC65_HOME%




  • nö, der linker kann nichts mehr übersetzen. der assembler übersetzt das mit -t c64 schon richtig, und zwar in PETSCII. Du schreibst die Daten aber ins screenram, dann brauchst du "screencode".


    Dem ca65 liegt ein Makropaket für C64 bei, das auch ein Makro für screencodes enthält, weiß die Details gerade nicht auswendig, aber das findest du sicher :)

  • Also ich bin mit der Doku eigentlich ganz zufrieden ;) Nur für den Fall, die aktuelle Doku liegt hier:


    https://cc65.github.io/doc/


    Die unter cc65.org bezieht sich leider auf eine uralte Version.


    edit: Hier ist auch das nötige Makropaket dokumentiert: https://cc65.github.io/doc/ca65.html#ss13.5 ;)


    edit2: Muss auch noch deinen Code ein bisschen kritisieren:

    Mit .byte bekommst du keinen null-terminierten String. Dein beq @Done funktioniert also nur "zufällig" :) Du müsstest noch ein , 0 nach dem String anhängen. Mit Screencode ist das aber wieder blöd, denn 0 ist da ein valides Zeichen (das @).


    Warum nicht gleich viel einfacher:

  • Also ich bin mit der Doku eigentlich ganz zufrieden ;) Nur für den Fall, die aktuelle Doku liegt hier:


    https://cc65.github.io/doc/


    Die unter cc65.org bezieht sich leider auf eine uralte Version.


    Diese Doku kannte ich. Aber wenn ich mir die so ansehe, dann muss man teilweise schon wissen was man finden will. Das Macro z.B. ist mir nicht aufgefallen, selbst als ich schon versucht habe es zu finden. Ich habe mir jetzt ein include erzeugt mit charmaps, aber ich werde das mal mit dem Macro ausprobieren-


    Zitat

    Mit .byte bekommst du keinen null-terminierten String. Dein beq @Done funktioniert also nur "zufällig" :) Du müsstest noch ein , 0 nach dem String anhängen. Mit Screencode ist das aber wieder blöd, denn 0 ist da ein valides Zeichen (das @).


    Da hast du recht. Das mit dem '@' hatte ich nicht bedacht. :)


    Das mit dem ß-Byte hatte ich vorher sogar drin, aber dann habe ich das geändert weil ich .asciiz ausprobiert hatte. Da das nicht funktioniert hat, habe ich es wieder auf .byte zurück geändert, und vergessen das 0-byte wieder zu platzieren. :)

  • Habe das mit dem macro '.macpack cbm' ausprobviert, aber das funktioniert nicht. Ich habe mir ein include erstellt mit allen charmaps für screencodes. Mit dem funlktioniert es einwandfrei. Ich habe dafür auch einen Pullrequest für cc65 erstellt, so dass der hoffentlich in das offizielle Repo reinkommt. Weiss allerdings nicht wie lange das dauert. Zumindest habe ich aber schon eine positive Antwort von einem der Entwickler bekommen (was ziemlich schnell ging :) ).

  • Ich habe ein Repository eingerichtet unter https://github.com/skeetor/c64-src wo das Hello World voll funktionsfähig enthalten ist. Ausserdem ist da auch noch ein weiteres Hello World, welches auf zwei Systemen läuft (C64 und VIC20) und ausserdem auch einen BASIC stub enthält.


    Denke das kann recht nützlich sein als Startpunkt für andere Projekte.


    Wollte das auch für C128 und Plus/4 erweitern, aber ich habe da noch nicht die nötigen Infos gefunden. :)


    Falls das vic20-asm.cfg fehlt, dann kann das aus meinem Fork von cc65 runtergeladen werden. https://github.com/skeetor/cc65