CPC Rulez
https://cpcrulez.fr/forum/

[SORCERY] DASM
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=6516
Page 1 sur 1

Auteur :  amiga68000 [ 03 Mai 2021, 21:48 ]
Sujet du message :  [SORCERY] DASM

Bonsoir,

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

Code :
014ah : LD HL,A67Bh     ; 217BA6
014dh : LD DE,AAFFh     ; 11FFAA
0150h : LD BC,A524h     ; 0124A5
0153h : LDDR      ; EDB8
0155h : JP 05DCh     ; C3DC05

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 ;-)

Merci d'avance de votre aide

Arnaud

Auteur :  marcel [ 03 Mai 2021, 22:16 ]
Sujet du message :  Re: [SORCERY] DASM

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!)

Auteur :  amiga68000 [ 03 Mai 2021, 22:22 ]
Sujet du message :  Re: [SORCERY] DASM

Merci pour l'info.

Oui en même temps je trace le code dans l'émulateur et je vais tenter d'identifier les différentes routines.

Auteur :  Tronic [ 04 Mai 2021, 08:11 ]
Sujet du message :  Re: [SORCERY] DASM

Bonjour,
Dès fois que et vu que personne ne l'évoque... :

- Oui, il existe un désassembleur intéressant sur PC, Disark (auteur : Targhan)
http://julien-nevo.com/disark/

- Également un script python (expérimental) qui permet d'approfondir/distinguer code/data, z80-smart-disassembler (auteur : Siko)
https://github.com/sikorama/z80-smart-disassembler

- Sur RasmLive, une ébauche de désassemblage de Sorcery (ainsi que d'autres jeux) avait déjà été commencé :
https://rasmlive.amstrad.info/edit/KxbrM9CDkG2n5v3sM
https://rasmlive.amstrad.info/browse

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

Bon amusement...

Auteur :  marcel [ 04 Mai 2021, 17:09 ]
Sujet du message :  Re: [SORCERY] DASM

amiga68000 a écrit :
Merci pour l'info.

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

Auteur :  amiga68000 [ 04 Mai 2021, 19:22 ]
Sujet du message :  Re: [SORCERY] DASM

Merci beaucoup pour les (top) liens Tronic, y a de quoi faire !

Oui Marcel, je desassemble au fur et à mesure avec le debug de l'émulateur

Auteur :  velus [ 06 Mai 2021, 02:04 ]
Sujet du message :  Re: [SORCERY] DASM

Va voir sur
https://www.chibiakumas.com/z80/#z80

Auteur :  hERMOL [ 06 Mai 2021, 18:39 ]
Sujet du message :  Re: [SORCERY] DASM

velus a écrit :

Sinon t'as 3 tonnes de cours que je m'amuse a numérisé depuis presque une 20ene d'année sur ce lien : https://cpcrulez.fr/coding_menu-cours_e ... ations.htm :cow: :pig: :cow:

Auteur :  amiga68000 [ 08 Mai 2021, 21:19 ]
Sujet du message :  Re: [SORCERY] DASM

Merci pour les liens, ça fait une sacrée mine d'informations
J'ai déjà commencé à les parcourir.

J'avoue que les doc de ce site sont très lisible, bravo.

Auteur :  amiga68000 [ 08 Mai 2021, 21:30 ]
Sujet du message :  Re: [SORCERY] DASM

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 !

Auteur :  Nemo59 [ 09 Mai 2021, 09:58 ]
Sujet du message :  Re: [SORCERY] DASM

Intéressant tout cela. Je me (re)mets (un peu) ) l'assembleur Z80 ;D

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/