désassemblage de l'Aigle d'or

Cette catégorie traite de développements récents pour 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

nouvelhermes
Messages : 54
Enregistré le : 22 juil. 2020 20:56

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

Message par nouvelhermes » 24 sept. 2020 06:00

Sinon comment expliquer la ligne suivante :

Code : Tout sélectionner

1400 COLOR7,4:LOCATE1,22:PRINT"Forces: "
CHR$(20);:CONSOLE0,2:EXECEN
Où l'on commence par écrire le "status" en BASIC (PRINT "Forces:") et on termine de le faire en ASM (EXECEN) ?

Ou l'on fait tout l'un ou l'on fait tout l'autre, mais l'intérêt de faire un mix des deux m'échappe, ce qui montre bien que ce programme a été "bricolé".

On le voit aussi nettement au niveau de l'irrégularité des incréments des numéros de ligne.

gotcha
Messages : 1041
Enregistré le : 30 mars 2017 11:39
Localisation : Isère

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

Message par gotcha » 24 sept. 2020 07:55

Je pense qu'il est difficile de 'juger' un programme des année 80 avec notre culture informatique d'aujourd'hui.

Voici quelques point qui peuvent permettre de tempérer ce jugement:
  • A l'époque, la mémoire coutait cher, les processeurs étaient peu puissants et donc pour beaucoup de programmeurs, gagner des octets ou des cycles par ci par là était important, plus que la structuration du programme.
  • Les jeux étaient souvent le produit d’autodidactes et non le fruit de professionnels de l'informatique formés au software engineering. D'ailleurs, ce besoin de structuration au niveau des langages et de la manière de les utiliser s'est accentué quand les machines sont devenues plus puissantes, les programmes plus gros et que l'informatique s'est professionnalisé.
  • A l’époque, il n'y avait pas forcement d' "ABI" clairement définie pour les processeurs (par exemple quels registres doivent être conservés par la fonction appelée, quel registres sont utilisés pour passer les paramètres, retourner des valeurs). Donc chacun faisait un peu ce qu'il voulait et sans forcement suivre de règles rigide (ce qui permet de gagner des cycles).
  • Il peut y avoir des contraintes budgétaires pour la création d'un jeu. Si le budget alloué est petit, le programmeur se concentrera sur l'obtention d'un résultat rapide et non sur la création d'une œuvre d'art programmatique.
  • Rendre un code non lisible (offuscation de code) peut être une stratégie de protection du programmeur ou de l'entreprise pour qui il travaille pour compliquer la tache de ceux qui essaient de le comprendre, de le bidouiller ou de le copier
Juste à titre d'exemple, quand j'ai désassemblé le secteur de boot d'une disquette DOS, j'ai trouvé que le code assembleur était un vrai bazar.
Amstrad CPC addict :mrgreen:

Ythunder
Messages : 272
Enregistré le : 21 août 2019 10:12

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

Message par Ythunder » 24 sept. 2020 15:46

Xavier_ a écrit :
24 sept. 2020 00:16
Ythunder a écrit :
23 sept. 2020 22:06
Car je comprends à moitié le post...
T'es bête de lire le milieu de mes messages, j'y mets pleins de conneries.
Je m'arrange à bien commencer, vachement sérieux, et je peaufine la fin… le reste n'est que pure délire.

95% des lecteurs ne lisent que le début et la fin…

La preuve, on me prend pour un intello du "TOP ten" du forum.
Non, j'ai tout lu ! (en général je lis tout), mais il y a des références à visiblement un autre post (la réponse de Daniel), donc voilà

Avatar du membre
Xavier_
Messages : 301
Enregistré le : 24 avr. 2020 21:20

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

Message par Xavier_ » 24 sept. 2020 22:12

Salut,

J'aimerai revenir sur certains préjugés, sûrement induits par une recontextualisation anachronique.
sa programmation a plutôt été "bricolée" au fil de l'eau.

Il faut rappeler que nous sommes sur une programmation avec un éditeur Basic rustique et pas très facile à utiliser.

Nous ne sommes pas sur un fichier texte qui permet d'avoir une vue globale du programme, un accès rapide de la première ligne à la dernière.
Il fallait donc faire des LIST, des editions lignes par ligne, et faire des recherches visuelles sans l'aide d'une fonction particulière.

Donc changer la numérotation d'une ligne impliquait la recherche des fonctions associées GOTO et GOSUB... visuellement, et cela sur l'ensemble du programme… et tout cela pour faire joli, pour un code que personne ne regardera.

La programmation se faisait en mémorisant la structure du programme, et en ajoutant/modifiant le programme dans une fenêtre limitée pour l'édition.

Il était possible d'imprimer le programme pour le modifier, mais au bout d'un moment, le listing devait être réimprimé car plein de ratures.

Maintenant, critiquer la forme est facile mais basée sur des appréciations contemporaines d'esthétisme.
structure "spaghetti"
Bon… Oui, mais pourquoi?

Toujours dans une naïveté esthétique compréhensible, à première vue, cela passe pour une particularité issue d'un cerveau dérangé.

Mais, cela fait gagner de précieux octets de mémoire et accélère l'execution du Basic.

Une ligne en plus, c'est près de 7 octets de mémoire en moins de mémoire, et répété 1000 fois , ça fait 7k de gagné dans une mémoire toujours trop limitée dans la création d'un programme. Sur certains Basic (Ti99...), le nombre de caractère par ligne était bridé et dépasser cette limite pouvait faire gagner des octets.

Le passage d'une ligne à l'autre demande au BIOS Basic de trouver la ligne suivante et de l'exécuter… donc des cycles processeur en plus, et produisent un ralentissement globale du Basic en cas de répétition.

Donc, cette structure n'est pas une curiosité farfelue, mais une nécessité pour optimiser le programme.

Markerror
Messages : 1649
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

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

Message par Markerror » 25 sept. 2020 07:21

Bonjour,

Les remarques de Xavier me font penser au premier bouquin d'informatique que mes parents m'avaient achetés : "L'art de bien programmer en Basic" de John M.Nevision publié chez Eyrolles. Tout ce qu'expliquait l'auteur avait pour but de structurer er rendre autant lisible que possible un listing. C'est exactement l'inverse de ce qu'il faut faire pour optimiser l'espace mémoire et la vitesse d'exécution d'un programme interprété !

Donc, oui, ce n'est pas forcément bien étonnant que le listing de la version Thomson de L'Aigle d'or soit un peu "bordélique".

Avatar du membre
Xavier_
Messages : 301
Enregistré le : 24 avr. 2020 21:20

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

Message par Xavier_ » 25 sept. 2020 10:45

Je pense que le beau et le structuré est apparu avec le Pascal et le C++, car il fallait retomber sur ses pieds au niveau des points virgules, des parenthèse et des imbrications de conditions.

Pour en revenir au programmes hybrides Basic/assembleur, généralement, l'auteur envoyait le programme à l'éditeur et été refusé ou pas.
Au début, l'éditeur publiait tel-quel le programme… mais, vers 1984-85, il fallait du rapide et du beau… donc de l'assembleur... les programmes en Basic refusés partaient généralement vers l'Hebdogiciel!

Le programme était donc retravaillé par l'éditeur pour optimiser certaines lacunes du programme.

Alain Bregeon m'a expliqué qu'il avait envoyé son jeu d'aventure, "Le passager du temps" en Basic… un jeux d'aventure en mode texte pour CPC.
Puis il a été repris en y ajoutant des images et des routines assembleur par l'éditeur.
Son jeu a été publié, mais il n'avait pas eu son mot à dire sur les ajouts et corrections.

Donc, à partir du moment où plusieurs programmeurs modifient un programme, il y aura toujours des modifications plutôt artificielles.
Ce programme était une "mise à jour" d'un jeu pour Zx81, "La maison du docteur Folibus" déjà édité dans un Micro-Système.
Paradoxalement, tout le monde se souvient du "Chat" dans le jeu, alors que dans son jeu, il n'y avait aucune mention de cet animal.

Avatar du membre
hlide
Messages : 1879
Enregistré le : 29 nov. 2017 10:23

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

Message par hlide » 25 sept. 2020 11:06

Pascal et C. Le C++ est venu bien tard.

Avatar du membre
Xavier_
Messages : 301
Enregistré le : 24 avr. 2020 21:20

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

Message par Xavier_ » 25 sept. 2020 11:17

Oui, effectivement… et il y a eu le C# entre temps…

Par contre le wiki est vague "Créé initialement par Bjarne Stroustrup dans les années 1980,"

Mais, bon… comme je suis de mauvaise foi, je vais dire… "Mais personne ne connais le C (sans rien)".
Donc, le C sur Amiga, l'Atari et l'IBM.

Mais les jeunes ne connaissent pas le C (sans rien)...

gotcha
Messages : 1041
Enregistré le : 30 mars 2017 11:39
Localisation : Isère

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

Message par gotcha » 25 sept. 2020 11:26

Xavier_ a écrit :
25 sept. 2020 11:17
Mais les jeunes ne connaissent pas le C (sans rien)...
Le jeune ne connaissent pas non plus le C++, car ils font maintenant du Python ;-)
Le C est quand même toujours utilisé aujourd'hui pour tout ce qui est couche logicielle proche du matériel (driver, OS etc..)
Amstrad CPC addict :mrgreen:

gotcha
Messages : 1041
Enregistré le : 30 mars 2017 11:39
Localisation : Isère

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

Message par gotcha » 25 sept. 2020 11:31

Xavier_ a écrit :
25 sept. 2020 10:45
Je pense que le beau et le structuré est apparu avec le Pascal et le C++
Je ne pense pas qu'on structure un programme pour qu'il soit 'beau'. L’ingénieur ne connait pas le 'beau', qui est plus un problème de philosophie :-)

On le structure pour être capable d'augmenter la complexité des programmes, pour que les programmes aient moins de bugs, soient plus facilement maintenable et donc au final pour augmenter la productivité des programmeurs.

D'ailleurs, la structuration ne suffit pas à la fiabilité et maintenabilité, il faut aussi de la verbosité.
Pour ça, il faut aller voir du coté du langage ADA : https://fr.wikipedia.org/wiki/Ada_(langage)
Amstrad CPC addict :mrgreen:

__sam__
Messages : 5507
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ » 25 sept. 2020 13:38

gotcha a écrit :
25 sept. 2020 11:26
Le jeune ne connaissent pas non plus le C++, car ils font maintenant du Python ;-)
Le C est quand même toujours utilisé aujourd'hui pour tout ce qui est couche logicielle proche du matériel (driver, OS etc..)
Même plus. Perso je suis désespéré de voir ca
* https://www.kickstarter.com/projects/70 ... ay?lang=fr
* https://www.st.com/en/embedded-software ... ython.html
* https://circuitpython.org/
* https://pycpu.wordpress.com/
Et le corolaire: ADAfruit (concurant des pi) se met maintenant quasi exclusivement au python pour programmer leur cartes je crois :(

Python c'est une daube infame au niveau langage: aucune structure de bloc (faut utiliser les tabulations/espaces, pas de grammaire formelle pour le parser correctement il me semble), aucun typage statique, non débuggable, condamné à faire des trucs sans ambitions (on ne peut pas faire des trucs trop gros avec) mais requierant quand même un espace disk conséquant, d'une lenteur absolue, on contrôle pas l'occupation mémoire (c'est du garbage collect qu'on te dit, c'est magique...) et maintenant ca prétends faire du temps réel. Misère!

Le choix du python est dicté par le marketting (les utilisateurs ne veulent pas faire du C), et pas par l'ingénierie (tirer le max de puissance du matériel), ni même l'écologie (réduire la conso des trucs embarqués).
Samuel.
A500 Vampire V2+ ^8^, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Avatar du membre
hlide
Messages : 1879
Enregistré le : 29 nov. 2017 10:23

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

Message par hlide » 25 sept. 2020 14:37

Bien que mon principal langage de programmation soit le C++, j'ai pu à plusieurs reprise faire de l'outillage avec du Python. Je dois reconnaître que la "simplicité" de ce langage a la faveur des entreprises et des scientifiques car il est vraiment flexible. Il n’y a pas de règles strictes sur la façon de créer des fonctionnalités, et en l’utilisant on a plus de flexibilité pour résoudre les problèmes car Il tolère les erreurs pour pouvoir exécuter le programme jusqu’à rencontrer la partie problématique. Et je ne parle pas de sa polyvalence.

Bien évidemment, il ne remplacera jamais le C++ ou tout autre langage du même gabarit pour les questions de performance.

Je suis assez d'accord avec toi, __sam__, sur les projets hardware qui abusent du Python : ce n'est pas la vision que j'ai de l'embarqué et ça m'ennuie que l'on soit à utiliser du Python interprété pour faire des tâches. Certes, c'est flexible mais si c'est pour se cantonner qu'à du Python, sans moi.

gotcha
Messages : 1041
Enregistré le : 30 mars 2017 11:39
Localisation : Isère

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

Message par gotcha » 26 sept. 2020 10:25

Bon, on diverge quelque peu du sujet initial de nouvelhermes:D

Il n'y a pas que des aspects de performance qui fait pour moi de Python un langage 'problématique'. Le fait comme il était dit plus haut qu'il n'y ait pas de typage statique, que tout soit dynamique (par exemple on ne déclare pas ce qu'une fonction va renvoyer) fait qu'un code python est presque illisible pour quelqu'un d'autre que celui qui l'a écrit et qu'il est très dur de le tester. Et je ne parle pas des aspects syntaxiques, par exemple ces 'tabulations' à mettre quand on fait des if, des boucles (j'ai l'impression de revenir à l’époque du Fortran ... :? ).

Donc au niveau production de code (au sens industriel), c'est pour moi un langage problématique à éviter (hormis pour remplacer des scripts bash/sh par exemple). Pour moi, python est un langage de script évolué et doit être considéré comme tel dans les projets informatiques.

Par contre, je comprends bien que pour le programmeur amateur, Python est assez attirant. Un autre gros point fort de Python est aussi la portabilité du code sur les différents OS.

Si on veut de la gestion mémoire simplifié, je trouve personnellement Java beaucoup plus élégant que python, et d'ailleurs aussi plus propre que C++.
Amstrad CPC addict :mrgreen:

nouvelhermes
Messages : 54
Enregistré le : 22 juil. 2020 20:56

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

Message par nouvelhermes » 28 sept. 2020 22:25

Je crois qu'on s'éloigne un peu en effet. Je crois en plus qu'il est vain de comparer C++ à Python, les langages sont très différents par nature, ils n'adressent ni aux même types de projets, ni aux mêmes objectifs.

Revenons un peu au BASIC

nouvelhermes
Messages : 54
Enregistré le : 22 juil. 2020 20:56

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

Message par nouvelhermes » 28 sept. 2020 22:32

grosprog.png
grosprog.png (97.05 Kio) Vu 299 fois
Quelques conseils d'optimisations sont donnés dans le Guide Du Mo5 v2 p116 fournis ici.

Répondre