VICE : Émulateur C64 sous Debian 13

Afin de préserver mon Commodore 64, j’ai installé l’émulateur VICE (version 3.9 sous Debian 13) : sudo apt-get install vice
Télécharger la ROM du C64 sur www.zimmers.net > Commodore > 8-bit Files > crossplatform > emulators > VICE > VICE 3.9 source code (vice-3.9.tar.gz).
Décompresser l’archive.

cd ~/Téléchargements
sudo cp -vR vice-3.9/data/* /usr/share/vice

Dans VICE, pour pouvoir sauvegarder ses programmes dans un répertoire personnel sous Debian, aller dans Preferences > Settings … > Peripheral devices > Drive puis cocher IEC Device. Dans Host file system Device, sélectionner le répertoire désiré en cliquant sur Browse. Puis cocher Save settings on exit.

Aide mémoire :
ALT D : Pour passer en plein écran et revenir en fenêtré.
ALT J : Pour inverser Joystick.
Pour lire un fichier .D64 :
Dans VICE, File > Attach disk image > Drive #8 > Choisir son fichier .D64 > Attach / Load
LOAD "*",8 puis éventuellement RUN.
RUN/STOP du C64 correspond à la touche ESC du PC.
Pour lire un fichier .TAP : LOAD

Commodore 64 : Guide de référence du programmeur


HELLO WORLD (1ère méthode)
Dans VICE, taper les lignes suivantes :

10 PRINT "HELLO WORLD"

Enregistrer le programme (le ,8 indique le lecteur de disquette – Drive 8):

SAVE "HELLO",8

Vider la mémoire de l’ordinateur :

NEW

Charger le programme, le lister et l’exécuter :

LOAD "HELLO",8
LIST
RUN

HELLO WORLD (2ème méthode) :
Passer par mon éditeur dans Debian (Geany) :

10 print "hello world"

C’est très important de tout taper en minuscules pour que la suite fonctionne correctement.

Dans la console :

petcat -w2 -o hello.prg -- hello.bas

Dans VICE :

LOAD "HELLO.PRG",8
RUN

Pour automatiser la compilation / l’exécution du fichier .bas dans Geany (je n’utilise pas FreeBasic) :

petcat -w2 -o "%e.prg" -- "%f"
x64sc "%e.prg"

Pour de la programmation en assembleur ACME (assembleur croisé multiplateforme pour les processeurs 6502/6510/65816):

sudo apt-get install acme

Pour automatiser la compilation / l’exécution du fichier .asm dans Geany (à la place de nasm) :

acme -f cbm -o "%e.prg" "%f"
x64sc "%e.prg"

; ============================================================
; Assembleur 6502/6510 pour Commodore 64
; Compilation : acme -f cbm -o hello.prg hello.asm
; ============================================================

; ------------------------------------------------------------
; Point d'entrée du programme (adresse $0801)
; ------------------------------------------------------------

* = $0801  ; Directive ACME (pas une instruction 6502) :
           ; place le code qui suit à l'adresse $0801,
           ; l'adresse standard où le C64 attend le début
           ; d'un programme BASIC (utilisée par LOAD/SAVE).

; ------------------------------------------------------------
; En-tête BASIC minimal, équivalent à la ligne : "10 SYS 2064"
; ------------------------------------------------------------

!byte $0c, $08, $0a, $00, $9e, $20, $32, $30, $36, $34, $00, $00, $00
            
; Résultat : un LIST sur ce mini-programme affiche "10 SYS 2064", et un RUN
; exécute cette ligne comme un SYS normal, qui saute en exécution machine
; à l'adresse 2064 (décimal) = $0810 (hexadécimal).

; ------------------------------------------------------------
; Code machine
; ------------------------------------------------------------

* = $0810  ; 2064 en décimal = $0810 : adresse ciblée par le
           ; SYS 2064 de l'en-tête ci-dessus. Entre $080d (fin
           ; de l'en-tête) et $0810, ACME insère automatiquement
           ; des octets de remplissage ($00), sans conséquence.

CHROUT = $FFD2  ; Routine KERNAL : afficher caractère

start:
        ldx #0         ; Initialise l'index x dans la chaine
loop:
        lda message,x  ; Charge le caractère
        beq done       ; Si caractère = 0, fin de chaîne
        jsr CHROUT     ; Affiche le caractère
        inx            ; Passe au caractère suivant
        jmp loop       ; Boucle
done:
        rts            ; Retour au BASIC

; ------------------------------------------------------------
; Données : la chaîne de caractères à afficher
; ------------------------------------------------------------

message:
        !text "HELLO WORLD"
        !byte 0

LIENS :

8-bit RetroProgramming : Chaine YouTube de Philippe Gianviti
RetroProgrammation : Chaine YouTube
Commodore Books
Demoscene TV – Playlist Commodore 64