Main logo
Index : Goodies : Super Hucard

Cette page est la partie publique du projet Super Hucard ,il est maintenu par Benjamin Quinn.

Le but de ce projet est de faire une application cd native PC-engine laquelle compile plusieurs roms sur un cd.

Pour pouvoir en apprécier l'utilité, vous devez avoir en votre possession une nec PC-engine combinée à un lecteur cd, aussi bien japonaise qu’américaine. Vous devrez alors graver un cd créé à partir du fichier à télécharger ci-dessous et le lancer.

Ce projet est juste une démonstration technique de ce que nous pouvons maintenant réaliser sur la PC-engine. Ne vous attendez pas à ce qu’il soit opérationnel pour tous les jeux, ni qu’il gère de plus gros jeux, etc..
C'est juste une preuve de la concrétisation d'un concept et un défi technique amusant à réaliser.

Maintenant il est plus ou moins utilisable, il est publiquement disponible pour les fans de la nec.
Naturellement vous ne devez pas le vendre, ni réclamer sa paternité, ni blâmer qui que ce soit .

Statut

20030827 : Première distribution publique. Environ 75 jeux fonctionnent.

200306 : Première version. Environ 60 jeux fonctionnent.

Comment celà fonctionne-t-il ?

Sans rentrer trop dans les détails, voici les concepts appliqués ici. D'abord, les extensions CD PC-engine (super cd-rom,cd-rom, duo-R) ont une Ram utilisable au chargement. C’est sur cet emplacement mémoire que les données provenant du cd seront stockées et utilisées en tant que code, graphique, etc... A partir de la version 3.0 (c'est-à-dire, le Super CD system 3.0 et l'Arcade Card), La mémoire fait 2 Mbits. Cet emplacement est suffisant pour stocker une hucard entière, ainsi le système se comporte comme si une cartouche était insérée.

Quelles sont les différences?

Une hucard a des données localisées dans une banque de données 0 physique et toutes les opérations au lancement respectent ce schéma (à l'exception de quelques jeux). Si on charge le contenu d'une hucard dans la RAM du CD system card, les données commencent à la banque 0x68. ainsi lorsqu'une opération du type « rendre la banque (mémoire) 4 disponible dans la RAM à l'emplacement 0x4000 » est exécutée, il met à disposition la banque 4 du CD system (lecteur CD, démarreur de jeu (boot), etc...) à l'emplacement 0x4000 et non la banque 4 de notre hucard puisqu'elle est localisée à 0x68 + 4.

Comment faire des opérations d’échange avec la bank nécessaire à partir de la bank 0x68?

Dans notre tâche, nous avons eu de la chance, une seule opération posait problème. C'est le TAM, une opération qui prend un argument, un champ de bit, indiquant l'endroit dans la RAM où récupérer une banque physique (en fait, il pourrait se diriger à plusieurs endroits simultanément, mais une utilisation normale fait qu'il y a seulement ensemble quelques bits définis simultanément). Elle emploie la valeur du registre A pour connaître la valeur de la banque physique. On doit seulement nous assurer qu'A a été incrémenté de 0x68 avant chaque TAM.
Facile.
Facile? Pas vraiment. Vous ne pouvez pas insérer une instruction dans un bytecode sans tout casser. Le problème est que les sauts, les appels, etc..... seront mal interprétés si vous insérez des données supplémentaires. Nous pouvons éventuellement modifier le code mais ne pas changer la longueur des instructions. Maintenant, nous devons vérifier comment la valeur du registre A est définie. Heureusement, elle est la plupart du temps chargée avec une valeur fixe juste avant le TAM. Ce qui est parfait et nous permet d’ajouter 0x68 à l'argument dans le code et A sera incrémenté de 0x68 au lancement. Parfois, A est incrémenté d'une autre valeur de la banque physique. Si nous supposions que nous sommes parvenus à récupérer d'autres arguments TAM, l’incrémentation serait toujours de 0x68, étant donné que c’est un changement relatif de l'argument. Toujours est-il, il y a quelques astuces, comme des valeurs chargées dynamiquement de la mémoire de sa position au chargement. Eventuellement, il peut y avoir modification du registre A avant de l'utiliser ce qui fait que ce chemin soit inutilisable. (imaginez "charger A avec la banque physique à 0x4000 (normalement 2), doubler A (4) et tracer la banque indiquée par A (4) à 0x6000" avec A incrémenté par 0x68, la valeur finale seraient (0x68 + 2) * 2 au lieu de 0x68 + (2 * 2)). D’un autre côté, pour détecter le modèle usuel (chargement de A avec la valeur ensuite application au TAM). Nous pouvons seulement compter sur une expression de base de 4 octets tel que 2 sont fixes (opcode du chargement de A et du TAM), 1 est une valeur donnée (l'argument du chargement de A) et le dernier définit un bit. il était facile d'être dupé et de modifier des données qui ne doivent pas être modifier. Elles auraient fait bloquer ou créer des erreurs graphiques, de sons, etc...
Bien que l'approche statique fonctionne dans quelques cas, elle montre ses limites.
Un jour, en regardant des trucs sur le fonctionnement interne de la pc engine, Ben a remarqué que l'opcode BRK, normalement utilis&eacite; pour indiquer une erreur ou faire du debuggage, est en fait une beˆte interruption logicielle, donc un saut vers une routine, paramétré par une adresse à un endroit fixé à l'avance dans la RAM. Mais contrairement aux interruptions logicielles habituelle, BRK prend un argument et positionne le point de retour de la sous routine après cet argument, exactement comme si il s'agissait d'un opcode de 2 octets de long. Hmm, ça ne vous rappelle pas notre cher opcode TAM ? Bien sur que oui.
Bon, maintenant on peut replacer toutes les occurences de TAM par un saut vers une sous-routine de notre choix et avoir un argument à notre disposition pour cette sous-routine (ouais, c'est coton pour mettre la main dessus mais c'est faisable). Comme cette routine est utilisée pour le débuggage, dans les versions commerciales des hucards, elle est inutilisée et on peut y mettre ce qui nous intéresse sans risque. Que va t'on en faire ? Comme vous vous en doutez, on va reconstruire un TAM à partir de l'argument de BRK en utilisant du code auto modifiable et changer la valeur de A en y ajoutant 0x68 au besoin (oui, parfois, il sert à référencer des banques systèmes et on ne doit pas changer la valeur de A). On appelle ensuite ce TAM customisé et on peut mettre redonner è A sa valeur initiale.
Afin de trouver tous les TAM utilisés et seulement eux, le meilleur moyen de les détecter est de le faire è l'exécution. Donc, comme Hu-Go! était un émulateur pc engine GPL et marchant pas trop mal, le mieux était d'y intégrer le code pour détecter les TAM et de les convertir à la volée en BRK. Avant ça, on a redirigé statiquement le gestionnaire pour BRK vers notre routine, que l'on a pris soin de caler dans un bout inutilis&eacite; de la banque 0 (on trouve de la place dans quasiment touts les jeux, la routine fait juste 40-50 octets de long).

Voilà, on y est, grâce à la gestion dynamique de l'incrémentation de A, on n'a pas à se soucier de la manière dont on calcule sa valeur, puisqu'on s'occupe de lui au tout dernier moment. Toutefois, puisque les TAM sont détectés lorsque l'on passe dessus en exécutant la version spéciale de Hu-Go!, pour qu'un jeu soit utilisable à fond une fois gravé, il faudrait idéalement le finir dans la phase de patchage. Heureusement, en utilisant une détection statique light plus la détection dynamique, on peut couvrir assez de TAM pour finir le jeu avec peu d'efforts. Quelques minutes avec Hu-Go! pour chaque jeu suffisent généralement (vu que les jeux réutilisent souvent les même opérations TAM tout au long du jeu).

Téléchargment

Schmorp propose un miroir de tous les fichiers sur un serveur situé en Europe. Merci infiniment à lui.
Version complète. Cette archive contient le dump complet de la Super Hucard.
Dump ISO de la piste de donnée. Ce fichier contient le minimum pour utiliser la Super Hucard. On peut y ajouter la piste audio qui suit. La version complète inclut déjà cette piste.
Piste audio. Ce fichier contient la piste audio qui peut être gravée avec la piste de données. La version complète inclut déjà cette piste.

Monsieur Areios a gentillement proposé de mirroirer le fichier contenant l'iso full ici. Tout le monde lui fait des grosses papouilles, allez !

Squaresoft74 héberge les liens directs vers les fichiers suivants sur son site. Merci à lui.

Télécharger Super Hucard Iso - ed2k link (Lien direct), SE : aucun rajouté le 2003-09-02 Télécharger Super Hucard Ogg - ed2k link (Lien direct), SE : aucun rajouté le 2003-09-02 Télécharger Super Hucard Full - ed2k link (Lien direct), SE : aucun rajouté le 2003-09-02

 



 

Aucun sous sujet disponible

 

See this page in english English flag

Ce site est généreusement hébergé par pcecp.com

Ce site fait parti du Turbo turnpike

Design initial par Nostromo