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
(Mise � jour du 24/02/2019) Les mirroirs sont tous un peu (beaucoup) mort, donc voici une copie locale, maintenant que la bande passante le permet:
Version complète
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 |
Design initial par Nostromo
|
|