Page 1 of 1

[ASM] Hooks

Unread postPosted: 05 Nov 2014, 13:17
by Clément.7
(je demande pas mal de chose ces temps-ci sur le chat et sur le forum parce que je m'intéresse de beaucoup plus près aux TI que j'avais délaissées il y a 2-3 mois)

Bonjour à tous !
J'ai une petite question pour les pros de l'Asm z80 car m'y étant récemment intéressé de près et suivant le tuto de la TIFT (coucou persalteas :D) :

Comment on fait des hooks en assembleur ?
genre un prog qui quand on appuie sur sin( affiche "salut les gens" sur l'écran ?
et comment faire un code qui permet (par exemple quand on appuie sur cos( ) de désactiver ce hook jusqu'à la prochaine exécution du hook asm ?

Merci d'avance !

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 16:29
by grosged
Salut!
Il se trouve que ces hooks m'intriguent aussi ! :)
Je ne connais pas grand'chose en hardware,romcalls,...etc concernant les TI,
mais je me débrouille en assembleur Z80.
Afin d'en savoir un peu plus, je me suis donc amusé à désassembler le Hook "Aller à la fin du code avec [2nd][X,t,θ,n]" (éteindre avec [2nd][trace])
( voir viewtopic.php?f=63&t=11790#p139818 )
et ce, grâce a onlinedisassembler.com
ce qui donne ceci:
Image
Puis, je me suis documenté sur les 3 bcall utilisés, grâce à cette page:
http://wikiti.brandonw.net/index.php?ti ... A#mw-pages

Code: Select all
ld hl,&9da9      ; adresse de départ du prog à copier
ld de,&8000         ; adresse où seront transférés les
ld bc,25         ; 25 octets
ldir                ; lance la copie
ld hl,&8000         ; adresse du hook
ld a,1          ; page du hook
rst 40         ; BCALL "EnableRawKeyHook"
dw &4f66
ret

db &83         ; marque le début du Hook
bit 2,(iy+1)
ret z
cp &41
jr nz,&9db9        ; sinon , passe à la 2ème partie du prog
rst 40          ; BCALL "DispTail" (part en "queue d'affichage" , donc en fin d'affichage du code basic)
dw &495d
ld a,0
ret

cp &3b        ; (début de la 2ème partie du prog)
ret nz
rst 40              ; BCALL "DisableRawKeyHook"
dw &4f6f
ld a,0
ret


Voilà où j'en suis ...si ça peut t'aider ;)
Quelqu'un pourrait-il modifier/compléter les explications ?

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 16:34
by matref
Ben fallait demander :P c'est moi qui ai fait ce hook.

En fait tout est expliqué là : http://wikiti.brandonw.net/index.php?ti ... ks:By_Name

Et "éteindre" c'est arrêter le hook :P la dernière BCALL c'est _disableRawKeyHook.

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 16:50
by grosged
En effet, j'aurais gagné du temps ! héhé !
Merci de nous avoir éclairé si rapidement !

Cette page m'a bien aidé aussi :
http://wikiti.brandonw.net/index.php?ti ... s:OS:Hooks
Je me demandais pourquoi il y avait add a,e , je comprends maintenant qu'il faut prendre cet octet &83 comme marqueur de hook !

(je modifie le post tout de suite)

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 17:12
by grosged
...Quelques petites questions qui me viennent à l'esprit :
-On ne pouvait pas laisser le hook en &9da9 ?
-Avant de quitter, on doit absolument mettre le registre A à zéro? (si oui, pourquoi pas XOR A ?)
(serait-ce par rapport à l'état du clavier contenu dans le registre A ?)
-et ce bit 2,(iy+1) correspond à quoi?
-je me souviens qu'on peut remplacer un CALL...RET par un JP... y a pas une astuce de ce genre concernant les BCALL ?

Merci d'avance !

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 17:42
by matref
Franchement je sais plus, il est vieux le code. Tu devrais te référer à la page WikiTI.

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 17:43
by grosged
Okay , j' y vais !
merci ;)

Re: [ASM] Hooks

Unread postPosted: 05 Nov 2014, 17:49
by Clément.7