N
jsnesAI
Suivi des versions et de l'avancement
← Émulateur

Avancement de jsnesAI

Version 1.2.5y — fork JavaScript de jsnes orienté compatibilité des mappers. Dernière mise à jour : 27 octobre 2026.

VERSION
1.2.5y
package.json
TESTS
418
verts (1 ignoré sans BIOS)
MAPPERS
64
dont 5 partiels
+10, 17, 18, 27, 28, 29, 30, 31, 32, 33, 67, 87
BUILD
OK
dist/jsnes.min.js

État des chantiers

ChantierÉtatDétail
Mappers 67 (Sunsoft-3), 87 (J87) et correction du 71 (Codemasters) TERMINÉ Fantasy Zone II (67) et The Goonies (87) démarrent et se jouent. Le 67 mappe une fenêtre PRG de 16 Kio à $8000, la dernière banque fixe à $C000, quatre fenêtres CHR de 2 Kio décodées par adresse & $F800, le miroir V/H/1 écran à $E800 et un compteur d'IRQ 16 bits en cycles CPU (deux écritures à $C800, armé par le bit 4 de $D800, acquitté par $8000). Le 87 garde 32 Kio de PRG et sélectionne une banque CHR de 8 Kio par une écriture dans $6000-$7FFF, avec les deux bits croisés (bit 0 = A14, bit 1 = A13), donc écrire 2 choisit la banque 1. Le 71 est corrigé : c'est une carte UNROM (fenêtre de 16 Kio à $8000, dernière banque fixe à $C000, 8 Kio de CHR-RAM), pas deux fenêtres commutables ; Dizzy, qui écrit ses banques à $FFF0/$FFF1, déplaçait la banque fixe et restait sur un écran gris. 14 tests pour les 67/87 et 4 pour le 71 ; suite à 418 tests verts (1 ignoré sans BIOS).
Mapper 1 (MMC1) — écritures RMW et mode 32 Kio TERMINÉ Ninja Cop Saizou se figeait sur un JAM à $F8 après une pluie de BRK : trois écarts de la puce expliquaient le détour. Le port série rate l'écriture résultat d'une instruction lecture-modification-écriture (le CPU pose d'abord l'octet d'origine, le résultat arrive un cycle plus tard et la puce ne le voit pas) — le jeu envoie ses numéros de banque par des INC $FFF6, alors que le moteur n'émettait que le résultat incrémenté. Une écriture au bit 7 force les bits 2-3 du registre de contrôle (mode PRG 3) quelle que soit la fenêtre visée, et non plus seulement $8000-$9FFF. Enfin le mode 32 Kio compte des pages de 16 Kio : le registre 2 mappe les banques 2 et 3, pas 4 et 5, ce qui envoyait le jeu dans une banque vide au premier changement depuis la banque 0. Le 5e bit PRG des cartes 512 Kio (SUROM) vient du registre CHR écrit en dernier. 4 tests dédiés (plus la mise à jour du test des modes 32 Kio) ; Ninja Cop Saizou validé sur ROM réelle jusqu'à son écran-titre, Zelda et Mega Man 2 non régressés ; Dragon Warrior IV (SUROM) garde son plantage propre à $B911, chantier séparé.
Mapper 77 (Irem LROG017) TERMINÉ La seule écriture à $8000-$FFFF verrouille [CCCC PPPP] : banque PRG de 32 Kio et fenêtre CHR de 2 Kio à $0000 — sous conflit de bus, le registre capture l'ET de la valeur écrite et de l'octet de la ROM au même endroit (le jeu réécrit l'octet de sa propre table pour que les deux coïncident). 6 Kio de CHR-RAM à $0800-$1FFF et les quatre tables de noms indépendantes de l'en-tête four-screen. Le titre de Napoleon Senki se vérifie à l'écran. 3 tests dédiés.
Mapper 141 (Sachen 8259A) TERMINÉ Le 141 quitte l'ancien rôle d'alias Jaleco JF-14 (le 140 conserve le câblage fonte) pour le Sachen 8259A : registres $4100/$4101 (rejoints partout où l'adresse répond à $C101), banque PRG de 32 Kio, quatre fenêtres CHR de 2 Kio au câblage variante A (registre décalé d'un bit, PPU A11 réinjecté dans les bits bas en 1,0,1), mirroring cadré sur regs[7] (V / H / 0,1,1,1 / 1 écran A) et mode simple. Les titres de Rockball, Po Po Team, Super Pang et Super Pang 2 (dont le mur de lettres « PANG » du fond) se vérifient à l'écran. 4 tests dédiés.
Mapper 227 (Hexin 1200-in-1) TERMINÉ C'est l'adresse d'écriture qui porte tout : 5 bits de banque en mots de 16 Kio, drapeaux M (modes NROM-128 et NROM-256 de 32 Kio), S, L (la fenêtre $C000 garnie des bits bas, bank|7) et O (+32 au numéro, jusqu'à 1 Mo), le tout re-verrouillé à chaque écriture $8000-$FFFF, mirroring H/V au bit 1 et 8 Kio de CHR-RAM non bancé. Le menu du 1200-in-1 se vérifie à l'écran ; la variante RPG de Waixing à WRAM batterie n'est pas modélisée. 8 tests dédiés.
Mapper 19 (Namco 163) TERMINÉ Le numéro 19 s'appelait « Namcot 106 », mais cette puce n'a jamais été trouvée sur une carte : les cartes portent une Namco 163. La carte avait été implémentée avec une carte de registres entièrement fausse (les registres à $F000-$F007 au lieu de $E000, $E800, $F000 et $F800), si bien que Namco Classic II partait dans un JMP $FFFF dès le reset. Maintenant : trois fenêtres PRG de 8 Ko et le dernier banc fixe à $E000, huit fenêtres CHR de 1 Ko, la RAM de la puce affichable dans les tables de motifs, le choix de la page de nametable pour chacune des quatre zones d'écran, la RAM externe de $6000-$7FFF avec sa protection d'écriture, l'IRQ en cycles CPU et le son de la puce (trois canaux, table d'onde de 4 bits dans les 128 octets de la puce). 11 tests dédiés ; les douze jeux mapper 19 de la collection démarrent, dont Namco Classic II qui va jusqu'à son écran de titres.
Mappers 21 et 22 (Konami VRC4 / VRC2) TERMINÉ Le VRC4 (numéro 21, câblages VRC4a et VRC4c) et le VRC2a (numéro 22) partagent le même plan de registres ; ce qui change, c'est le câblage des lignes d'adresse qui choisissent le registre et la présence d'une IRQ. Le décodeur répond aux deux câblages du VRC4 (A1/A2 pour le VRC4a, A6/A7 pour le VRC4c), qui ne se recouvrent pas. Deux fenêtres PRG de 8 Ko avec les deux derniers bancs fixes, huit fenêtres CHR de 1 Ko (numéro de banque divisé par deux sur le VRC2a), miroir complet, IRQ 16 bits en cycles CPU sur le VRC4 seul, verrou microwire d'un bit à $6000 sur le VRC2. 19 tests dédiés ; validé sur Ganbare Goemon Gaiden 2 (VRC4c), Wai Wai World 2 (VRC4a) et TwinBee 3 (VRC2a).
Mapper 23 (Konami VRC2b / VRC4e) TERMINÉ Les deux derniers câblages de la famille VRC : le VRC2b prend ses registres sur A0/A1 dans l'ordre naturel, le VRC4e les a déplacés sur A2/A3, et le décodeur « ou » répond aux deux, comme le fait le numéro 21. Mêmes fenêtres PRG/CHR que les mappers 21/22, IRQ en cycles CPU restée branchée (le numéro porte aussi le VRC4e — les jeux écrits pour le VRC2b n'écrivent jamais dans $F000-$F003) et verrou microwire à $6000. 11 tests dédiés ; validé sur les cinq jeux mapper 23 de la collection : Ganbare Goemon 2, Wai Wai World, Boku Dracula-kun, Dragon Scroll et Getsufuu Maden, jusqu'à leur écran-titre.
Mapper 62 (Super 700-in-1) TERMINÉ Premier numéro pirate dont l'écriture de registre entièrement codée dans l'adresse : n'importe quelle écriture à $8000-$FFFF porte la page PRG sur A13-A8 plus son bit 7 à A6 (A7 est le bit de miroir, A5 le mode : paire de 32 Ko ou une page de 16 Ko doublée), la page CHR de 8 Ko sur A4-A0 et ses deux bits bas sur les bits 1-0 de la valeur écrite. Décodé d'après les notes de Disch et du Mapper62 de Mesen 2, qui concordent bit pour bit. Sans registre interne : la cartouche est sans état, et l'allumage mappe les pages PRG 0 et 1 (celles du menu), pas un banc fixe en haut. 7 tests dédiés ; aucun ROM mapper 62 dans la collection, validé sur des images synthétiques uniquement.
Mappers 153 et 159 (Bandai FCG) PARTIEL Le numéro 153 ajoute au FCG 8 Ko de WRAM à pile, du CHR-RAM, un mirroring sur batterie et l'IRQ LZ93D50 : le code est en place et testé, mais Famicom Jump II ne démarre pas encore. Le numéro 159 remplace l'EEPROM 24C02 par une X24C01 de 128 octets en little-endian ; Magical Taruruuto-kun 1 et 2 démarrent et affichent leur générique. Ces deux jeux sont annoncés mapper 16 dans leur en-tête iNES, il faut les re-marquer pour les tester.
Asterix : couleurs et PAL automatique TERMINÉ La table de couleurs héritée de vNES est rangée en BGR alors que la PPU la lit en RGB : le tampon d'image sortait avec le rouge et le bleu inversés. La page échangeait ensuite ce tampon à l'envers en l'écrivant dans le canvas, si bien que les deux erreurs s'annulaient et que le jeu avait l'air correct — mais tous les outils qui lisent le tampon directement (captures, tests) voyaient les mauvaises couleurs. La palette est convertie à la source, la page écrit maintenant le tampon en 0xAABBGGRR, et les trois bits d'emphase du PPU sont enfin appliqués aux deux bonnes canaux. Asterix (E) est aussi une cartouche PAL : son en-tête NES 2.0 — ou le CRC du PRG pour les vieux dumps iNES — le déclare, et la frame passe à 312 lignes sans que le joueur ait à activer quoi que ce soit ; la boucle d'affichage cadence alors 50 images par seconde.
Mapper 16 (Bandai FCG / LZ93D50) TERMINÉ Deux ASIC sous un même numéro iNES. PRG de 16 Ko à $8000 avec le dernier banc fixe à $C000, huit fenêtres CHR de 1 Ko, miroir complet. Registres dans $6000-$7FFF (FCG-1/2, compteur d'IRQ direct) ou $8000-$FFFF (LZ93D50, compteur à verrou), IRQ 16 bits en cycles CPU maintenue jusqu'à l'acquittement par $A. EEPROM série 24C02 de 256 octets (pages de 8) modélisée au niveau I2C sur $800D : SCL bit 5, SDA bit 6, sortie sur le bit 4 des lectures $6000-$7FFF, avec sauvegarde batterie. 12 tests dédiés.
Mapper 20 (Famicom Disk System) PARTIEL Le FDS n'est pas un circuit de banques mais un lecteur : 32 Ko de RAM à $6000-$DFFF, BIOS 8 Ko à $E000, registres $4020-$4033, IRQ timer, et un lecteur qui reconstruit les blocs, les marques et les CRC d'une face. Les images .fds (avec ou sans en-tête) se chargent, se lisent, s'écrivent et s'exportent ; la BIOS, protégée, est fournie par l'utilisateur. 19 tests dédiés, dont un démarrage réel de la BIOS quand un dump est présent. Audio d'expansion $4040-$4098 encore absent, comme pour le MMC5.
Mapper 37 (PAL-ZZ, triple cart Nintendo) TERMINÉ Trois jeux MMC3 sur une seule cartouche, isolés par un registre externe $6000-$7FFF : Q2 = PRG/CHR A17, Q0·Q1 forcent A16 haut. Implémenté comme une traduction par-dessus le MMC3 (ses tables et ses fenêtres câblées restent intactes), avec le verrou piloté par $A001 bit 1. 13 tests dédiés.
Mapper 47 (NES-QJ, V'Ball + World Cup) TERMINÉ Même montage que le 37 en plus simple : un bit de sélection de bloc dans $6000-$7FFF, qui devient PRG/CHR A17 sans forcer A16 (des blocs de 128 Ko, donc). Même verrou $A001 bit 1. 10 tests dédiés.
Mapper 205 (JC-016-2, multicarts 15-in-1 / 3-in-1) TERMINÉ MMC3 plus un registre de bloc de 2 bits dans $6000-$7FFF : quatre blocs, dont deux de 256 Ko (où l'A17 du MMC3 sert encore) et deux de 128 Ko. Transcription directe de la table AND/OR des notes NESdev, recoupée avec le RTL MiSTer. 13 tests dédiés.
VRC6 (mappers 24 / 26) TERMINÉ Réécrit selon la doc NESdev : banking PRG/CHR, miroir, IRQ compteur $F000, décodage $F003, swap A0/A1 du mapper 26. Akumajou Densetsu (J) démarre et s'affiche correctement.
Audio d'expansion VRC6 TERMINÉ Deux canaux impulsion + dent de scie, conformes au matériel (horloges 16/14, accumulateur). Écritures $9000-$B002 vérifiées sur cartouche réelle.
MMC5 (mapper 5) — fluidité TERMINÉ Cause : la carte garde deux jeux de registres CHR (sprites $5120-$5127, fond $5128-$512B) et l'ancien code redécodait 8 Ko de CHR à chaque bascule, soit 462×/frame et 1 863 re-rendus partiels par frame. Chaque jeu est maintenant décodé une fois dans sa propre vue et la bascule n'est plus qu'un échange de pointeur. CV3 (U) : 285-325 fps, Gemfire : ~317 fps (contre 43-55 avant).
MMC5 — son d'expansion TERMINÉ Deux impulsions identiques aux carrés du 2A03, sans l'unité de balayage ($5001 sans effet) : enveloppe et compteur de longueur cadencés à un 240 Hz fixe — la puce n'a pas de séquenceur de trame, même en mode 5 trames — table NTSC du wiki identique au $4015 sauf l'index $1C, bit 7 de $5003/$5007 pour couper un canal, $5015 du côté CPU. Le canal PCM 8 bits : $5010 (mode + IRQ), $5011 (écriture brute ; $00 laisse la sortie et déclenche l'IRQ), et le mode lecture où toute lecture $8000-$BFFF devient un échantillon. Modèle calqué sur le MMC5Audio de Mesen. 13 tests dédiés ; dans la collection, les jeux ne font qu'un octet d'init (Gemfire, Uncharted Waters) ou configurent puis se taisent (SDF, Just Breed) : aucun jeu audible ne pilote les canaux, la validation reste synthétique pour l'oreil.
MMC5 — attributs étendus TERMINÉ Le mode $5104 = %01 est fait : l'octet de l'ExRAM à la position de la tuile (carte miroir 1 écran, la même pour les quatre tables de noms) porte la palette 2 bits (bits 7-6) et la banque de motifs 4 Kio (bits 5-0, complétés par le $5130 en direct, jusqu'à 1 Mo de CHR). Mode CHR et banques $5120-$512B ignorés pour ces fetches, et substitutions coupées quand le PPU ne rend pas (bits 4/3 de $2001 tous deux à 0). Le PPU interroge le cartouche à chaque tuile de fond. CHR-RAM garde la voie ordinaire. En pratique : Gemfire (le portrait de la reine, 7 couleurs à l'écran), Just Breed et Uncharted Waters passent d'un bruit de tuiles à leurs vrais écrans, CV3 et SDF inchangés.
Astérix (E) — affichage TERMINÉ La palette de vNES était rangée en BGR et le tampon d'image attend du RGB : le rouge et le bleu étaient inversés dans tous les jeux (ciel orange, tronc bleu sur Astérix). La conversion est faite à la source, bits d'accentuation compris. La cartouche est PAL et les vieux dumps iNES mentent sur la région : le PAL s'active maintenant tout seul (en-tête NES 2.0, octets de l'iNES historique, ou CRC du PRG). Vérifié dans le navigateur à 50,0 images/s.
Punch-Out — public/ring TERMINÉ Verrou CHR du MMC2 rappelé par le PPU à chaque accès de motif, avec l'adresse exacte, et cache de tuiles invalidé par ligne de balayage. Comparé à FCEUmm : public et tapis identiques. Détails ci-dessous.
Ports manettes ($4016/$4017) TERMINÉ Protocole du 4021 aligné sur le matériel : le strobe maintenu haut recharge le registre (chaque lecture renvoie l'état de A sans avancer), et après le 8e bit une manette officielle renvoie 1 indéfiniment (open bus $40 compris, donc $41) au lieu de 0 puis d'un bouclage à 24 lectures. D3/D4 du port 2 ne sont plus pilotés quand aucun Zapper n'est branché. Le Port Test Controller NES-INP-01 (jig d'usine du cartouche « Port Test ») est émulé en option. 10 tests dédiés.
Rangement du dépôt TERMINÉ 48 scripts de diagnostic déplacés à la racine vers tools/, chemins relatifs réécrits, index dans tools/README.md.

Bugs d'affichage connus

Astérix (E) — corrigé

Punch-Out — corrigé

Punch-Out — ancien état (pour mémoire)

Mappers reconnus

Chaque mapper vit dans son propre fichier et n'est chargé qu'au moment où une ROM le déclare. Un numéro inconnu retombe sur NROM plutôt que de refuser de démarrer.

→ Voir les 256 numéros de mappers NES, un par un (désignation, exemples de jeux, état de l'émulation dans jsnesAI).

0 NROM · 1 MMC1 · 2 UxROM · 3 CNROM · 4 MMC3 · 5 MMC5 · 6 FFE F4xxx · 7 AxROM · 8 MROM · 9 MMC2 · 10 MMC4 · 11 Color Dreams · 12 MMC6 · 13 CPROM · 14 SL-1632 · 15 Multicart · 16 Bandai FCG / LZ93D50 · 17 Bandai FCG + WRAM · 18 UNROM variant · 19 Namco 163 · 20 Famicom Disk System · 21 VRC4a / VRC4c · 22 VRC2a · 24/26 VRC6 · 25 VRC4 · 34 BNROM · 37 PAL-ZZ (multicart) · 38 PCI556 · 47 NES-QJ (multicart) · 65 Irem H-3001 · 77 Irem LROG017 · 66 GxROM · 69 Sunsoft FME-7 · 71 Codemasters · 79 NINA-03/06 · 85 VRC7 · 90 J.Y. Company · 91 Shenzhen JY · 94 UN1ROM · 118 TxSROM · 119 TQROM · 140 Jaleco JF-11/JF-14 · 141 Sachen 8259A · 153 Bandai FCG + WRAM · 159 Bandai FCG + X24C01 · 27 VRC4 variant · 28 UNROM · 29 RET-CUFROM · 30 UNROM 512 · 31 NSF · 32 Irem G-101 · 33 Taito TC0190FMC · 180 UNROM · 193 → 11 · 205 JC-016-2 (multicart) · 227 Hexin 1200-in-1 · 228 Action 52 · 240 Jing Ke · 241 BxROM

Non couverts, rencontrés dans la collection : 23, 40, 41, 60, 64, 67.

Historique