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.
- ; Sample hello world for C64 with CA65 assembler
- ; Written by Gerhard W. Gruber in 22.01.2019
- ;
- ; Execute with SYS __LOADADDR__
- ; Default is 49152 ($C000)
- SCREEN = $0400
- VIC_BORDERCOLOR = $D020
- VIC_BG_COLOR0 = $D021
- VIC_CHAR_COLOR = $D800
- BLACK = 0
- DARK_GREY = 12
- .export __LOADADDR__ = *
- .export STARTADDRESS = *
- ; Here we define the address bytes needed by C64 so it knows where it should load it
- ; to if loaded with LOAD "PRG",8,1
- ; I expected that the linker should do this, but it doesn't seem to work, so this is a workaround.
- .segment "LOADADDR"
- .byte .LOBYTE( __LOADADDR__ ), .HIBYTE( __LOADADDR__ )
- .segment "CODE"
- main:
- lda #BLACK
- sta VIC_BORDERCOLOR
- sta VIC_BG_COLOR0
- ldy #$00
- ldx #DARK_GREY
- @print:
- lda Greetings,y
- beq @Done
- sta SCREEN,y
- txa
- sta VIC_CHAR_COLOR,y
- iny
- jmp @print
- @Done:
- rts
- .segment "DATA"
- Greetings: .byte "---===<* GREETINGS *>===---"