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

Alimentation pour Commodore 64

Afin de remplacer l’alimentation d’origine du Commodore 64 qui avec l’âge risque de détruire l’ordinateur, Electroware en a conçu une nouvelle, disponible sur ce site. Suite à une polémique sur la tension délivrée par cette alimentation, j’ai démonté le Commodore et pris la tension au niveau du processeur. J’obtiens les 5 V attendus. Au niveau du SID 6581, j’obtiens 11,85 V au lieu de 12 V. Pour la fabrication d’un testeur d’alimentation spécifique au Commodore 64, voir cette vidéo.

SD2IEC pour Commodore 64

Vendeur : https://www.ebay.fr/usr/despegatop
Mode d’emploi : Commodore SD2IEC user guide

Après avoir formaté sur mon PC la carte SD (8 Go) en FAT32, je l’insère dans le boitier SD2IEC, j’allume le C64 et je tape :
10 PRINT « HELLO WORLD »
SAVE « HELLO »,8
Le programme est alors sauvegardé directement sur la carte SD.
Pour vérifier que tout a bien fonctionné, je charge la liste des fichiers de la carte dans la mémoire de l’ordinateur :
LOAD « $ »,8
J’affiche cette liste :
LIST
Le programme « HELLO » apparaît bien.
Je vide la mémoire de l’ordinateur :
NEW
Je charge le programme à partir de la carte SD :
LOAD « HELLO »,8
J’affiche le listing du programme :
LIST
Je l’exécute :
RUN

Retour de la carte SD sur le PC avec un éditeur hexadécimal => 24 octets :

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