x16-emulator
x16-emulator est un émulateur open-source dédié au Commander X16, un ordinateur néo-rétro inspiré du Commodore 64 mais doté d’architecture moderne. Il reproduit fidèlement son matériel, incluant le processeur 65C02/65C816, la carte graphique VERA (avec sprites et effets raster), le son (PCM, PSG, YM2151), et des périphériques comme la carte SD, le clavier, et les ports joystick. L’émulation est quasi-cycle-exacte, garantissant une compatibilité optimale avec les logiciels conçus pour la plateforme.
Disponible pour macOS 10.15 et versions ultérieures, il dépend de SDL2 pour son fonctionnement. Bien que les binaires officiels ne ciblent pas explicitement Apple Silicon, il peut fonctionner sur ces architectures via SDL2 natif. Une ROM compatible (rom.bin) est requise pour démarrer l’émulateur, disponible dans les releases ou compilable depuis le dépôt source. L’outil s’adresse aux développeurs, collectionneurs et passionnés souhaitant explorer ce système rétro-moderniste.
Dernière mise à jour :
Plateformes
Architecture
Mac OS X - macOS
Apple Silicon
64 bits
SDL Library
Téléchargement et liens
Historique des versions
v49
-
Nouveauté majeure : Ajout du support pour un système expérimental
-gsavec 24 bits d’adressage RAM et un processeur 65C816, en prévision du futur X16 GS (corrections des instructions MVN et MVP pour le 65C816). -
Améliorations matérielles :
- VERA : Précision accrue du temps d’occupation SPI et corrections des registres d’écriture/lecture (alertes pour accès invalides).
- VERA : Correction du comportement des sprites en 8bpp avec décalage de palette non nul.
- VERA PSG : Correction de la fréquence du bruit (doublée dans la version précédente).
- VIA : Correction du gestionnaire de flags IFR.
-
Fonctionnalités utilisateur :
- Ajout de l’émulation MIDI série via FluidSynth (exclu du build WebAssembly).
- Optimisation majeure de la performance du système de fichiers hôte (HostFS) pour les appels MACPTR, XMACPTR et XMCIOUT (compatibilité avec CMDR-DOS).
-
Corrections critiques :
- Bug connu dans X16EDIT :
Ctrl+Fsuivi deBéchoue à compiler avec BASLOAD (contournable viaBASLOAD ""depuis BASIC). - Sortie de l’émulateur possible avec Alt+F4 même si SDL ne gère pas la clé (sous Windows/Linux/macOS).
- Bug connu dans X16EDIT :
-
Spécifique macOS :
- Builds officiels :
- Version Intel : macOS 15 (Sequoia) minimum (fonctionne sur macOS 15+).
- Version Apple Silicon (M1/M2/M3) : macOS 14 (Sonoma) minimum (fonctionne sur macOS 14+).
- Note : Les builds ne sont pas garantis compatibles avec des versions antérieures aux OS de compilation (GitHub runner).
- Builds officiels :
Changelog complet
v48
-
Correction majeure sur le matériel VERA : la fréquence du SPI émulée est désormais alignée sur la moitié de la vitesse du VERA (au lieu du CPU), améliorant la compatibilité matérielle.
-
Nouveauté pour les développeurs : prise en charge du débogage des banques ROM 13-15 (utilisées par x16edit et Basload), ainsi qu’un affichage corrigé des valeurs non bornées dans le débogueur.
-
Précision technique sur le VERA PSG : implémentation fidèle du comportement du modèle 47.0.2 pour les ondes saw et triangle (XOR inverse de la largeur d’impulsion).
-
Améliorations CPU 65C816 :
- Correction des calculs d’adressage indirect relatif (stack relative indirect) et des modes indirects via page directe (
[dp]). - Nettoyage des octets hauts de
.Xet.YaprèsPLP/RTIsix=1. - Suppression de la page wraparound incorrecte dans l’instruction
PEI.
- Correction des calculs d’adressage indirect relatif (stack relative indirect) et des modes indirects via page directe (
-
Fonctionnalités utilisateur :
- Ajout d’un outil de statistiques mémoire et d’un support du DOS "T"ell dans HostFS.
- Affichage du temps CPU écoulé depuis le dernier point d’arrêt dans le débogueur.
Changelog complet
v47
-
Nouveauté majeure :
- Ajout du support optionnel du processeur 65C816, activable via la nouvelle option en ligne de commande
-c816(et-c02pour forcer le mode 65C02).
- Ajout du support optionnel du processeur 65C816, activable via la nouvelle option en ligne de commande
-
Corrections et améliorations techniques :
- Correction d’un bug dans BASIC : les expressions de pointeurs dans le troisième argument de
VPOKEécrivaient à la mauvaise adresse VRAM (ex.VPOKE 1,$B000,PEEK($400)). - Prise en charge native pour Apple Silicon (M1/M2/M3) via un build officiel compilé sur les runners GitHub macOS ARM.
- Correction d’un bug dans BASIC : les expressions de pointeurs dans le troisième argument de
-
Améliorations matérielles (VERA, SMC, PSG) :
- Correction d’un bug d’adressage dans VERA FX (remplissage de cache non aligné en 4bpp).
- Correction du retard d’une trame pour DC_VSTOP sur VERA.
- Mise à jour de la logique de l’activité light du SMC (correction de la documentation erronée sur les niveaux PWM).
- Mise à jour de la table de volume PSG de VERA pour correspondre à la version 47.0.0 (suppression de doublons de niveaux sonores).
-
Flexibilité du système de fichiers HostFS :
- Ajout de l’option
-hostfsdevpour configurer un numéro de périphérique non standard. - Meilleure gestion des chemins absolus et syntaxes DOS/CMD (ex.
MD//:TESTcrée bien le dossier à la racine).
- Ajout de l’option
-
Améliorations audio et performances :
- Adaptation dynamique du nombre de buffers audio (
-abufs) selon l’utilisation de HostFS (32 buffers par défaut si HostFS actif, 8 sinon) pour réduire les stutters.
- Adaptation dynamique du nombre de buffers audio (
Changelog complet
v46
-
Correction majeure dans le ROM : ajustement d’un décalage des boutons des manettes lié à la gestion du polling par le VIA, bien que cela ne soit pas un bug de l’émulateur (modification côté ROM uniquement).
-
Améliorations du système de fichiers HostFS :
- Correction du comportement de
UNLSNpour aligner le statut KERNAL sur celui de CMDR-DOS (découvert par voidstar78). - Ouverture en mode Modify : création automatique du fichier s’il n’existe pas (découvert par m00dawg).
- Correction du comportement de
-
Stabilité audio : suppression de l’initialisation erronée de la bibliothèque ymfm (YM2151) quand le son est désactivé (
-sound none), avec retour systématique à 0 pour le registre de statut. -
Nouveautés GUI :
- Option en ligne de commande
-capturepour démarrer l’émulateur avec la souris capturée. - Déplacement automatique de la fenêtre si la barre de titre est hors écran.
- Mouvement de la souris en mode capture basé sur des coordonnées relatives (indépendant de la position de la souris hôte).
- Option en ligne de commande
-
WebAssembly : meilleure gestion des fichiers ZIP sans fichier manifest.json.
Changelog complet
v45
-
Nouveautés majeures dans le firmware ROM :
- Réversion de la résolution d'amplitude du PSG VERA à 6 bits (au lieu de 8 bits précédemment augmentée pour correspondre au firmware VERA, puis révisée pour libérer de la place pour la fonctionnalité FX).
-
Améliorations matérielles et périphériques :
- Ajout du support pour la souris Intellimouse dans le SMC émulé (partiellement implémenté selon le firmware 45.1.0 du matériel) :
- Roue de défilement fonctionnelle (ID de périphérique 3).
- Non implémenté : boutons supplémentaires (ID de périphérique 4).
- Ajout du support pour la souris Intellimouse dans le SMC émulé (partiellement implémenté selon le firmware 45.1.0 du matériel) :
-
Nouveautés pour le débogage :
- Comportements mis à jour des registres de débogage émulateur ($9FB8–$9FBB) :
- Lecture séquentielle de $9FB8–$9FBB retourne un compteur de clock CPU 32 bits figé au moment de la première lecture (évitant les débordements imprévisibles).
- Écriture dans ces registres :
- $9FB8 : réinitialise le compteur de clock CPU à 0.
- $9FB9–$9FBA : affiche des messages de débogage console (
User debug 1/2: $xx). - $9FBB : affiche la représentation UTF-8 du caractère ISO (sortie debug équivalente à STDOUT).
- Prérequis : vérifier la présence de l'émulateur via les lectures en $9FBE ($31 attendu) et $9FBF ($36 attendu).
- Comportements mis à jour des registres de débogage émulateur ($9FB8–$9FBB) :
-
Fonctionnalités système :
- Implémentation du MCIOUT (écriture bloc) pour HostFS, reproduisant la fonctionnalité du noyau pour les cartes SD.
-
Gestion des entrées utilisateur :
- Nouveau raccourci ⌃M/⇧⌘M pour basculer le mode capture (souris/clavier), indépendamment du flag "Disable Emulator Keys" :
- Active le mode capture → dés
- Nouveau raccourci ⌃M/⇧⌘M pour basculer le mode capture (souris/clavier), indépendamment du flag "Disable Emulator Keys" :
Changelog complet
v44
-
Nouveautés majeures :
- Ajout de l'émulation FX pour VERA, incluant la gestion du looping du FIFO audio via des écritures spécifiques sur
VERA_AUDIO_CTRL. - Remplacement du noyau audio YM2151 (basé sur MAME) par une implémentation moderne (ymfm), avec support des IRQs (nécessite
-enable-ym2151-irq). - FX emulation : compatibilité avec les extensions matérielles du firmware VERA (documentation disponible ici).
- Ajout de l'émulation FX pour VERA, incluant la gestion du looping du FIFO audio via des écritures spécifiques sur
-
Améliorations fonctionnelles :
- Correction de la gestion des filtrages de fichiers (wildcards, casse-insensitive partielle sur les chemins sans
/ou sur le dernier segment). - Ajout de la commande
CD:←pour naviguer dans les répertoires (style SD2IEC). - Support des touches supplémentaires (NumLock, Menu) et amélioration du débogueur (gestion correcte des breakpoints bancaires).
- Nouveaux raccourcis : screenshots (Ctrl+P/⌘P), plein écran (
-fullscreen), et transparence (-opacity). - Correction de comportements matériels (lecture de bus ouvert en
$9Fxx, réinitialisation via I2C propre).
- Correction de la gestion des filtrages de fichiers (wildcards, casse-insensitive partielle sur les chemins sans
-
Corrections critiques :
- Régression corrigée pour le chargement de
:*depuis HostFS avec une carte SD active. - Synchronisation des options
-prget-sdcardaprès réinitialisation de l'émulateur. - Fix du comportement 65C02
BITimmediate et de l'instruction BRK (comportement VPB). - Suppression d'une fuite mémoire liée au copier-coller et optimisation des mouvements relatifs de la souris en mode grabbed.
- Régression corrigée pour le chargement de
Note : Aucun changement spécifique à macOS ou Apple Silicon n’est mentionné dans ce changelog.
Changelog complet
v43
-
Changement majeur obligatoire : Modification du protocole clavier entre le SMC émulé et le KERNAL, nécessitant la version R43 du ROM pour un fonctionnement correct (sinon, le clavier ne répondra pas). Cela inclut aussi une refonte du gestionnaire de clavier personnalisé (
keyhdl). -
Améliorations du débogage :
- Possibilité de stepping (exécution pas à pas) sur l’instruction
WAI. - Affichage par défaut du bon bank dans la disassemblage du débogueur.
- Les breakpoints du débogueur sont désormais spécifiques à chaque bank.
- Possibilité de stepping (exécution pas à pas) sur l’instruction
-
Nouveautés techniques :
- Support de la résolution 240p en mode NTSC/RGB pour le chipset VERA (le désactivations des chroma reste limité au NTSC).
- Option
-midline-effectspour réactiver (par défaut désactivé) les modifications mid-line de palette ou de données tile/sprite (compatible avec R42 mais potentiellement gourmand en CPU). - Ajout de l’option
-mhzpour ajuster la vitesse hors de la valeur par défaut (8 MHz).
-
Corrections spécifiques à macOS :
- Fixes de build pour macOS (détails non précisés, mais probablement liés à la compatibilité ou aux dépendances).
- Pas de changement notable pour les builds
.dmgou l’Apple Silicon (M1/M2/M3) dans ce changelog.
-
Autres corrections/améliorations :
- Correction d’un bug lié à la gestion des événements SDL (souris cliquante ou mouvements saccadés avec des frappes simultanées).
- Optimisations des performances via l’optimisation link-time pour les builds de release.
- Fixes dans le sous-système HostFS (gestion du temps réel pour éviter les warps lors de lectures lentes).
- Améliorations du son (resampling et buffer audio).
Changelog complet
v42
-
Nouveautés majeures :
- Ajout du mode testbench pour des tests logiciels avancés.
- Support natif des cartouches ROM via les options
-cartet-cartbin, avec un utilitairemakecartpour créer des fichiers.crt. - Gestion améliorée des périphériques : connexion des périphériques PS/2 via SMC/I2C (compatibilité matérielle renforcée), reconnaissance du bouton central de la souris.
- Améliorations audio : équilibrage entre VERA et YM2151, réduction des stutters et clics grâce à des routines de mixage optimisées.
-
Corrections et ajustements techniques :
- Correction du comportement des interruptions (IRQ/NMI) et du flag D lors de leur entrée.
- Synchronisation des clavier (keymaps) avec la ROM et ajustement des instructions
WAI/STPpour une précision matérielle accrue. - Mise à jour des registres VERA (
SCANLINE,PCM_CTRL) et des effets raster pour coller au comportement du Proto 4. - Affichage : nettoyage du buffer sprite lors de la désactivation de la couche sprite, et gestion des cycles d’horloge pour les interruptions.
-
Fonctionnalités utilisateur et compatibilité :
- Options CLI pour personnaliser l’initialisation (
-randram,-wuninit) ou le matériel (-via2,-widescreenpour un affichage 16:9 étiré). - Gestion des fichiers hôtes : options
-fsrootet-startinpour spécifier un système de fichiers emulé et un répertoire de démarrage. - Support des images SD compressées et améliorations du système de fichiers hôte (parité accrue avec les images SD).
- Options CLI pour personnaliser l’initialisation (
-
Spécifique macOS :
- Mode "souris grab" activable avec ⇧⌘M (Ctrl+M sur d’autres OS), pour une meilleure compatibilité avec les configurations Mac.
- *Aucun build
.dmgou support Apple Silicon (M1