Un tuto tout simple aujourd'hui concernant le débugger de WinUAE qui peut nous donner de très précieuses informations assez facilement.
Pour cet exemple ici, j'aimerais savoir si a6 est nécessaire d'être sauvé puis restauré sur la stack :
Alors il est nécessaire de connaitre l'adresse de retour du rts afin d'y voir plus clair. Pour cela, il suffit d'ajouter dans le source juste après ce fameux rts, un tag comme 'yopyop' par exemple :
Ensuite sous WinUAE, il suffit juste d'entrer dans le débugger par <Shit F12> et de chercher ensuite notre tag avec la commande <s "yopyop"> :
Le débugger le localise à l'adresse $4005170A. Allons voir de plus près le désassemblage un peu avant cette adresse avec la commande <d $40051700> pour avoir l'adresse du rts qui est donc à $40051708 :
Plaçons donc un breakpoint à la place du rts avec la commande <f $40051708> et quittons le débugger avec la commande <x> pour revenir sous WinUAE :
Dès qu'AmigaOS rencontrera ce breakpoint, hop, le débugger s'ouvrira automatiquement. Revenons un peu avant l'adresse Kickstart $fb21d8 à alors $fb21d0 pour mieux voir le source :
Nous somme donc dans la routine qui appel la notre en question, c'est à dire _VRPHook. Nous constatons alors qu'a6 a été sauvé avant l'appel "jsr (a6)" et ensuite restauré juste après.
La sauvegarde et la restauration d'a6 dans notre _VRPHook ne sert donc à rien et peut être supprimé des deux movem avec "movem.l d0-d5/a0-a2,-(sp)" et pour finir "movem.l (sp)+,d0-d5/a0-a2".
Il y avait 3 fonctions Hook assez ressemblantes dans la fblit.library, avec un total de 6 accès mémoire supprimés (3 lectures et 3 écritures d'a6) dans la version 1.5 !
Aucun commentaire:
Enregistrer un commentaire
Posté vos remarques :