Présentation du port
Le projet River Raid propose une version jouable du titre Activision 1982 directement dans le navigateur. Chaque routine du cartouche original de 4 096 octets a été réécrite en JavaScript, instruction par instruction, afin de reproduire le comportement du processeur 6502 et du TIA sur les mêmes adresses mémoire.
Méthode de reconstruction
Le développeur a décodé le ROM à l’aide de la désassemblage de 2001 de Thomas Jentzsch, puis a transposé chaque opcode 6502 en équivalent JavaScript. Le cœur du jeu repose sur un générateur de nombres pseudo‑aléatoires 16 bits initialisé avec la graine
seed = $A814;. Cette graine assure que chaque partie génère la même séquence de blocs de rivière, chaque bloc contenant 32 lignes de terrain. Les sections sont composées de 32 blocs ; les sections impaires sont droites, les paires sinueuses et comportent des ponts ou des îles.Vérification et précision
Pour garantir la fidélité, un petit cœur 6502 intégré exécute le ROM original en parallèle du port JavaScript. Le système compare chaque image générée image par image, octet par octet. Sur 45 000 images testées, aucune différence n’a été détectée, soit 0 % d’écart. Le processus a également validé 300 000 états du générateur de rivière et 31 840 pixels de la trame d’ouverture, identiques à une capture réalisée avec l’émulateur Stella.
Analyse des mécanismes internes
Le code révèle plusieurs particularités du cartouche. Le score n’est pas stocké sous forme numérique ; les six chiffres affichés sont des pointeurs vers les graphiques des chiffres, incrémentés à chaque gain de points. Les collisions sont gérées exclusivement par les verrous matériels du TIA, lus une fois par bloc de rivière, sans aucune arithmétique de collision supplémentaire. Ainsi, toucher un bâtiment ou un dépôt de carburant déclenche le même traitement que toucher un ennemi. Le système de ravitaillement fonctionne de façon continue : le niveau de carburant diminue chaque trame et se recharge tant que le jet survole un dépôt, tandis que le tir du dépôt ne fournit que des points.