désassemblage de l'Aigle d'or

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: désassemblage de l'Aigle d'or

Message par Fool-DupleX »

Amusant, ces fichiers .k7 remplis de "DCMOTO".

Voici les contenus des trois fichiers binaires sur MO5. DES.BIN et BIN.BIN sont chargés et utilisés par l'intro, respectivement en &H9204 et en &H5000, puis ils sont intégralement recouverts par AIGLE.BIN, qui prend toute la RAM de &H4000 à &H9FFF. C'est donc à ce dernier qu'on s'intéressera plus particulièrement.

Le désassemblage est laissé au lecteur à titre d'exercice :wink: On pourra commencer à dérouler la pelote de laine en partant de tous les points d'entrées du programme BASIC:

Code : Tout sélectionner

BO 43A2
EN 4399
FL 5A0C
IO 43B4
PT 5946
TP 4390
XP 59CC
MT 5900
MS 5A4D
XM 5986
PS 5A96

43AB
43BD
43C6
43CF
43D8
43E1
43EA
43F3
43FC
4405
55D0
Pièces jointes
aigle_binaire.zip
(16.56 Kio) Téléchargé 8 fois
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: désassemblage de l'Aigle d'or

Message par Dominique »

Fool-DupleX a écrit : 22 mars 2024 10:20 ....
On voit aisément que le jeu est entre les lignes 900 et 5030, avec beaucoup de sous-routines placées avant. Comme souvent avec les listings BASIC d'époque, il suffit de formater correctement, ligne par ligne et bloc par bloc pour s'apercevoir que ce n'est pas si spaghetti que ça.
Tout à fait. C'est même un exemple de 'Programmation structurée' dont on nous abreuvait à l'époque. On voit bien que chaque sous-routine est un module, ainsi que l'utilisation des éléments de contrôle recommandés comme dans :

Code : Tout sélectionner

5020 GOSUB2:IFPEEK(P+202)>0THENRETURNELSEIFW=66THENFORV=0TO4:PSET(112-V*4,134+7*V):NEXT:RETURN
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: désassemblage de l'Aigle d'or

Message par __sam__ »

Fool-DupleX a écrit : 22 mars 2024 10:33 Amusant, ces fichiers .k7 remplis de "DCMOTO".
C'est au début de chaque bloc logique sur les K7 MO5, juste avant l'amorce par une série de $01 $01 $01 $01 $01 $01 $01 $01 $01 $01 $3c $5a. Sur les K7 TO7 il n'y a rien de cela.

Je suppose que c'est lié au fait que l'écriture sur K7 sur MO5 est faite par bloc logiques dans la ROM et octet par octet sur TO7 (pas de notion de bloc logique dans le moniteur des TO). La routine de lectrre/écriture par bloc du moniteur MO5 est patchée et prise en charge par l'émul qui doit lire/écrire ce TAG au début.

Je n'en connais pas la raison, mais Daniel avait parlé de protection sur MO5 avec des blocs non standards. Si ca se trouve ce tag permet de discriminer entre les blocs standards qui peuvent être lus directement sans soucis par l'émul et les blocs non standards qui doivent avoir une procédure de lecture/écriture différente (genre buffer plus long, ignorer le checksum).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: désassemblage de l'Aigle d'or

Message par Fool-DupleX »

On admettra que c'est tout de même plus lisible ainsi :

Code : Tout sélectionner

5020 GOSUB2
     IF PEEK(P+202)>0 THEN 
       RETURN
     ELSE
       IF W=66 THEN
         FOR V=0 TO 4
           PSET(112-V*4,134+7*V)
         NEXT
         RETURN
Ce qui devient subitement remarquablement structuré.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: désassemblage de l'Aigle d'or

Message par __sam__ »

Il manque des ENDIF en basic pour bien "deviner" la structure. Sans ENDIF, savoir si le ELSE dans une ligne se rapporte à tel ou tel IF avant devient vite très, trop, compliqué.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: désassemblage de l'Aigle d'or

Message par Dominique »

Cela devient tout de suite plus clair.
Je ne connais pas ce Basic (je ne sais même pas s'il y a un <= 0 )
mais ça pourrait s'écrire (je prend le risque de dire une bétise) :

Code : Tout sélectionner

5020 GOSUB2
     IF PEEK(P+202)<= 0 
	AND W=66 THEN
         FOR V=0 TO 4
           PSET(112-V*4,134+7*V)
         NEXT
	
     (ENDIF)			
         RETURN
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: désassemblage de l'Aigle d'or

Message par Daniel »

Fool-DupleX a écrit : 22 mars 2024 10:33 Amusant, ces fichiers .k7 remplis de "DCMOTO".
Une cassette Thomson est structurée en blocs, commençant par une séquence bien définie avec un identifiant de bloc. Pour le MO5 c'est une dizaine de $01 suivis de $3C5A, pour le TO7 c'est des $FF suivis de $013C. Entre les blocs c'est rien, ou plus exactement n'importe quels parasites ne contenant pas d'identifiant de bloc. Ils sont ignorés lors de la lecture.

A une certaine époque je mettais DCMOTO entre les blocs. A une autre époque c'était DCMO6 ou DCMO5. Aujourd'hui c'est plus discret : juste un octet $DC. Cette astuce me permet de savoir d'où viennent les fichiers .k7 trouvés sur internet, en particulier dans les sites de "ROMs" comme TOSEC. Au moins 90% des fichiers .k7 Thomson proviennent du site dcmoto.

Dans le site logicielsmoto, vous verrez que la cassette de l'Aigle d'Or contient DCMO6 entre chaque bloc. A l'époque j'ai passé à Yoann toutes les cassettes MO que j'avais numérisées. Au total, depuis les années 1980, je dois avoir numérisé plus de mille cassettes, MO et TO confondus. C'est ce que j'appelle la sauvegarde du patrimoine. Sans cela plus de la moitié des logiciels Thomson auraient disparu à jamais.
Daniel
L'obstacle augmente mon ardeur.
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: désassemblage de l'Aigle d'or

Message par Fool-DupleX »

Ah, c'est donc le fameux fingerprinting sauce Daniel pour identifier discrètement l'origine des images, ça n'a aucune utilité dans le décodage.

J'ai regardé vite fait le code machine de l'Aigle d'or, c'est "naïf" comme programmation, ce qui n'est pas nécessairement surprenant. Mais ça fait le taf, c'est tout ce qui compte. Ce que je veux dire par là, c'est que c'est facile à désassembler. Pas de déchiffreur obfusqué qui tourne en ram vidéo, à la façon de William Hennebois :)
Avatar de l’utilisateur
DataPro
Messages : 2807
Inscription : 07 févr. 2011 17:03
Localisation : France - Auvergne

Re: désassemblage de l'Aigle d'or

Message par DataPro »

Merci pour ces informations.
Certains se demandaient pourquoi il n'y avait pas pas de version pour MSX.
Peut-être qu'un jour prochain elle verra le jour.
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
Répondre