2 points par GN⁺ 2024-12-09 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Grâce au CD d’image de jeux Sega Channel de septembre 1996 rendu public en 2024, il est désormais possible d’extraire concrètement les jeux et les données de menu à partir d’une image de diffusion d’environ 60 Mo
  • Sega Channel était un service par abonnement mensuel qui rediffusait en boucle des jeux Genesis sur le réseau câblé, et l’utilisateur jouait en laissant l’adaptateur repérer puis télécharger le jeu voulu dans une boucle de données continue
  • La chaîne de création des images passait par MENUMAKR, PKSPREAD puis NSF, et la présence de symboles de débogage dans NSF.EXE, chargé de l’encodage final, a fourni la percée décisive pour l’analyse
  • La restauration a consisté à créer d’abord un programme en C produisant exactement la même sortie que NSF, puis à séparer les fichiers avec un décodeur inversant le processus, avant de décompresser le format .SA pour obtenir des ROM Genesis standard
  • Parmi les contenus extraits figurent les jeux exclusifs Sega Channel Chessmaster et Klondike, de nouveaux builds, des ROM marquées par watermark, ainsi que des ROM de menu et de descriptions de jeux, le tout désormais exécutable dans un émulateur

Contexte du service Sega Channel et des fichiers image

  • Sega Channel était un service de jeux à la demande exploité de juin 1994 à juin 1998
    • Le lancement national a eu lieu en décembre 1994
    • Selon l’opérateur câble, l’abonnement coûtait généralement 10 à 15 dollars par mois et donnait accès chaque mois à une bibliothèque d’environ 50 jeux Sega Genesis
    • Le service a culminé à environ 250 000 abonnés
  • Les abonnés recevaient une cartouche adaptatrice connectée à la Genesis, elle-même reliée au câble TV
    • Au démarrage, elle cherchait le signal Sega Channel et téléchargeait le menu des jeux
    • Le téléchargement du menu prenait généralement environ 20 secondes
    • Une fois un jeu sélectionné, celui-ci était téléchargé dans la RAM de l’adaptateur en environ 1 minute
    • Le jeu téléchargé se comportait ensuite comme une cartouche vendue au détail classique
  • Quand on coupait l’alimentation ou qu’on appuyait sur le bouton de menu de l’adaptateur, le jeu téléchargé était effacé
    • Les données de sauvegarde restaient conservées tant que l’utilisateur ne téléchargeait pas un autre jeu
  • Sega Channel proposait aussi une section Test Drives
    • Elle permettait de jouer à des versions limitées dans le temps ou dans le contenu de jeux avant leur sortie
    • Certains jeux n’étaient disponibles que sur Sega Channel

Comment l’image de diffusion était créée et distribuée

  • Les équipes de Sega Channel sélectionnaient chaque mois la programmation des jeux ainsi que des contenus comme des astuces, manuels, actualités et fan arts numériques
  • Le contenu était ensuite transmis à Foley Hi-Tech
    • Foley Hi-Tech réalisait les graphismes et animations du menu, puis y intégrait le contenu mensuel
    • Le résultat était un fichier image de jeux d’environ 60 Mo
  • L’image de jeux était gravée sur CD puis envoyée vers une installation de liaison montante satellite à Denver, dans le Colorado
    • Le CD était installé sur l’ordinateur serveur de jeux de la station montante
    • Le serveur diffusait ensuite les données des jeux en boucle continue par satellite
    • Les têtes de réseau câblé à travers les États-Unis recevaient ce signal satellite et le retransmettaient aux abonnés
  • Dans un environnement où l’opérateur câble ne pouvait pas recevoir de données des abonnés, la diffusion en boucle continue a déterminé le mode d’interaction du service
    • Quand l’utilisateur choisissait un jeu, l’adaptateur repérait les données correspondantes dans le flux Sega Channel
  • L’image de jeux d’environ 60 Mo était transmise à environ 12 Mbps via deux porteuses à 6 Mbps
    • En l’absence de problème de signal, l’utilisateur pouvait lancer le jeu choisi en un seul cycle de boucle de données
    • Le menu était dupliqué dans le flux pour pouvoir être téléchargé plus rapidement

Découverte du CD d’image de jeux de septembre 1996

  • En novembre 2024, l’utilisateur du forum Sonic Retro RisingFromRuins a découvert un CD d’image de jeux Sega Channel de septembre 1996 en examinant un lot de vieux équipements PC acheté il y a longtemps
  • Il a publié des photos du CD et mis en ligne une copie du fichier image de jeux présent sur le disque
  • L’objectif de l’analyse était d’extraire les données de l’image pour vérifier la présence de jeux exclusifs ou de prototypes
  • L’examen a d’abord commencé avec un éditeur hexadécimal
    • Les jeux Genesis comportent un en-tête ASCII standard, et l’on pensait aussi pouvoir lire les astuces et manuels téléchargeables
    • En pratique, aucun texte lisible n’apparaissait dans le fichier
    • Il est alors devenu probable que le fichier image ait été brouillé ou chiffré

La chaîne de création de l’image retrouvée sur un CD d’outils de développement

  • Un indice majeur est venu d’un CD de sauvegarde des ressources de développement Sega Channel de Foley Hi-Tech, publié en 2017 par l’utilisateur tdijital
    • Ce CD avait déjà permis d’identifier une version concours de Primal Rage, un quiz game Sega Channel japonais et des ROM de démonstration des menus de décembre 1994 à janvier 1996
    • Les outils de développement eux-mêmes n’avaient toutefois pas été étudiés en profondeur
  • Plutôt que de rétroconcevoir le code de téléchargement côté Genesis, l’approche choisie a été de rétroconcevoir les outils qui fabriquaient l’image de jeux
  • Le flux de création de l’image se déroulait en trois étapes
    • MENUMAKR : ajout des jeux, descriptions, textes d’actualité, illustrations, musique, etc., puis création du binaire de menu et du script MENUSPIN.BAT
    • PKSPREAD : programme conçu par Scientific Atlanta qui validait le contenu de MENUSPIN.BAT et produisait PMAP.DAT
    • NSF : utilisait PMAP.DAT pour encoder les fichiers d’entrée et générer le fichier image de jeux final
  • Scientific Atlanta était une entreprise d’équipements câble ayant collaboré avec Sega sur le matériel de diffusion Sega Channel et sur l’adaptateur cartouche
  • La cible principale de l’analyse était NSF.EXE, qui produisait le fichier image final

Rétro-ingénierie de NSF.EXE

  • NSF.EXE avait été compilé en mode debug, avec les optimisations désactivées, et contenait encore ses symboles dans l’exécutable
    • Il s’agissait d’un programme compilé avec Borland C++ 4.1
    • Comme IDA Pro ne reconnaissait pas automatiquement les symboles de débogage, ceux-ci ont été consultés dans Turbo Debugger puis reportés manuellement
  • Au lieu d’écrire immédiatement un décodeur, la première étape a été de créer un programme équivalent à NSF.EXE
    • Si l’image produite par le programme DOS NSF.EXE pouvait être reproduite avec une sortie identique octet pour octet, cela validait la compréhension de l’algorithme
    • Une image de jeux de test a donc été générée, puis l’implémentation a été ajustée jusqu’à obtenir une sortie identique
  • Après une journée de travail et plusieurs soirées de débogage, un programme en C reproduisant la sortie de NSF.EXE a été écrit
    • L’implémentation a été faite en gardant IDA et Visual Studio ouverts côte à côte, avec l’objectif de rester aussi proche que possible de l’assembleur
    • Le but n’était pas de reconstruire un binaire compilé identique à l’original
    • L’implémentation utilise des déclarations C99 et les types de stdint.h, ce qui signifie qu’elle ne compilera peut-être pas telle quelle avec Borland C++ 4

Le schéma d’encodage de NSF pour la transmission

  • La fonction GetData de NSF récupérait depuis PMAP.DAT, pour chaque paquet, le fichier d’entrée, la position dans le fichier et les métadonnées Sega Channel
    • Ces métadonnées incluaient notamment l’identifiant de fichier et la durée jouable des démos limitées dans le temps
    • Le programme lisait ensuite des blocs de 246 octets dans le fichier de données
  • La fonction LoadFrame ajoutait un en-tête devant chaque paquet de données et inversait tous les octets des données
    • Cette inversion pouvait être liée au transport des données ou servir à masquer le contenu du paquet
    • Des codes de correction d’erreurs BCH et des bits de parité étaient insérés au milieu des données du jeu
    • Au final, 246 octets de données étaient étendus à 288 octets
  • L’en-tête contenait plusieurs champs
    • GameTimeSync et GameTimeBit transmettaient bit par bit la valeur de la limite de temps d’un jeu
    • ServiceID valait généralement 1 et pourrait être lié à Express Games
    • FileID identifiait de façon unique chaque fichier dans l’image de jeux, le menu étant toujours le fichier 0
    • Address indiquait où l’adaptateur devait télécharger le fichier en RAM
    • HeaderCRC et Header Copy étaient également présents
  • La fonction InterLeave découpait les paquets en blocs de 450 bits puis en mélangeait les bits
    • Cela semble destiné à mieux répartir les erreurs en rafale afin d’améliorer l’efficacité de la correction d’erreurs
  • Ce processus se répétait par groupes de 10 paquets
    • Ces 10 paquets étaient regroupés en une trame de 2880 octets
    • La trame était écrite sur disque en entrelaçant les données, par exemple les 2 premiers octets du paquet 0, puis les 2 premiers du paquet 1, etc.
    • Le même traitement se poursuivait jusqu’à la génération de l’intégralité du fichier image

Décodage et décompression

  • Une fois le fonctionnement de NSF compris, un programme de décodage inversant le processus a été écrit
    • Le décodeur extrait les différents fichiers de données de l’image
  • La première sortie du décodeur ne correspondait pas à des données ROM Genesis valides
    • Les données des jeux avaient en effet été compressées avant transmission
  • L’outil de compression des ROM était GAMEEDIT.EXE, présent sur le CD de Foley Hi-Tech
    • Il n’a pas été nécessaire de le rétroconcevoir à son tour
    • L’utilisateur GitHub Octocontrabass avait déjà rétroconçu le format de compression .SA
  • L’outil unsa d’Octocontrabass a permis de décompresser les fichiers .SA en fichiers ROM standard

Jeux et contenus extraits de l’image de septembre 1996

  • Le résultat le plus marquant a été la récupération de deux jeux exclusifs Sega Channel diffusés en septembre 1996
    • Chessmaster : jeu d’échecs sorti sur plusieurs plateformes dans les années 1990, mais pas sur Genesis
    • Klondike : jeu de solitaire commandé par Sega pour Sega Channel et programmé par David Crane, connu pour Pitfall
  • Les jeux contenus dans l’image ont été répartis en plusieurs catégories
    • Contenus exclusifs : Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
    • Nouveaux builds : Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
    • Éléments ne différant des dumps existants que par le padding : Flashback, Phantasy Star II, The Punisher
    • Dumps existants avec watermark ajouté : Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles, etc.
    • Nombreux jeux correspondant aux dumps existants : Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III, etc.
  • Black Squirrel, de Sonic Retro, a trouvé comment lancer le menu de septembre 1996 dans un émulateur
    • La méthode consiste à copier les octets 0-0x1003FF de la ROM de la cartouche de démonstration Sega Channel, puis à y ajouter à la suite les données de menu de l’image de jeux
    • La fonction de téléchargement ne marche pas, mais il est possible de parcourir le menu
  • Le dernier contenu était une ROM de descriptions de jeux
    • Elle ressemblait à une ROM Genesis classique, mais n’affichait qu’un écran noir dans l’émulateur
    • La raison était qu’elle n’était pas liée à partir de l’adresse 0 comme une cartouche normale, mais à partir de 0x100000
    • Elle semble avoir été conçue pour s’exécuter directement depuis la mémoire de l’adaptateur Sega Channel
    • En ajoutant des zéros après l’en-tête afin d’aligner le code avec les vecteurs de l’en-tête, elle a pu être exécutée dans l’émulateur
    • Une fois lancée, elle affichait un menu destiné aux développeurs avec les noms internes de chaque jeu
  • Ce processus a finalement permis d’exécuter dans un émulateur l’ensemble du contenu du fichier image de jeux

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.