Comme j'expliquais dans mon message de présentation viewtopic.php?f=11&t=6514 j'ai à coeur de découvrir les entrailles du CPC et son langage machine Z80.
Pour cela, j'ai entrepris de désassembler SORCERY, ce jeu magnifique que j'ai adoré.
Je me suis fait un desassembleur sous python (si certains le souhaite mais attention il est codé à l’arrache !), peut être en existe-t-il un sous PC prêt à l'emploi ?
---------------------------------------- CODE RELOGE ? ---------------------------------------- Alors voilà, après avoir désassemblé le binary (42Ko) le code est relogé de son adresse d'origne 014ah vers 05DCh
1ere question : quelle est l'utilité de reloger le code plutôt que de mettre dans le header du binary directement l'adresse 05DCh ?
---------------------------------------- INIT REGISTRES ? ---------------------------------------- Une fois relogé, le code démarre par ces instructions :
Code :
Start: DI LD SP,ecran_C000 LD BC,7F8Ch ;Mode 0 + Désactive ROM basse & sup OUT (C),C CALL Lbl1_1bdd ...
Lbl1_1bdd: LD DE,0000h Lbl14_1be0: LD A,D CALL Lbl13_22f1 INC D LD A,D CP 0Eh ;compare A-byte JR NZ,Lbl14_1be0 ;saute si non zéro (Z flag = 0) LD A,07h LD E,3Fh CALL Lbl13_22f1 RET
Lbl13_22f1: PUSH BC LD B,F4h OUT (C),A LD B,F6h LD A,C0h OUT (C),A XOR A ;raz A OUT (C),A LD B,F4h OUT (C),E LD B,F6h LD C,A OR 80h OUT (C),A OUT (C),C POP BC RET
Ça semble être une config graphique ou autre (boucle de 15 couleurs mais j'en suis pas sûr), je comprends pas trop les accès et les façons d'dresser les registres $F4xx, $F6xx (peut être ce n'est pas celà du tout)
Bref je suis sec et je n'aurais rien contre des commentaires bien placés sur ce code
C'est impossible de charger un programme qui terminerait si haut en mémoire => De=#AAFF
Pour le reste, je pense que si tu veux re-découvrir le Z80 tu ferais mieux de tracer des jeux à l'exécution dans un émulateur (et même plusieurs jeux!)
RasmLive te permettant de tester/modifier/visualiser en live du code z80 assemblé avec l'assembleur Rasm (Auteur : RoudoudouMarcel) et injecté dans un émulateur en ligne Tiny8bit (Auteur : floooh) https://rasmlive.amstrad.info/doc
Oui en même temps je trace le code dans l'émulateur et je vais tenter d'identifier les différentes routines.
ce qui peut être intéressant à faire est de partir (comme Tronic en parle concernant Rasm-Live et certains jeux décompilés dispos) d'un SNAPSHOT de la mémoire une fois que le jeu s'est initialisé, sinon tout désassemblage va etre aux fraises sur les redirections et des données risquent de manquer
Voici mes travaux du moment : le source partiellement désassemblé.
Il n'est pas directement interprétable car j'ai pas encore balisé les lignes comme il se doit Il reste des blocs non désassemblés, certains sont des data, d'autres du codes.
Si vous reconnaissez des blocs ou fonctions de sub je suis preneur Si vous souhaitez mon source python (en l'état) pour désassembler, je suis donneur !
Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum