Je m'adresse à Matref, TheMachine42 et tous ceux qui seront en mesure de répondre à ma question, question qui demande pas mal de connaissances en programmation assembleur. Je compte sur vous, ce sera probablement une fonctionnalité de PHASM si j'arrive à débugger ça.
Commençons....
Vocabulaire : L'edit Buffer est un endroit de RAM ou la variable actuellement éditée est stockée. L'exemple le plus courant d'edit buffer est l'édition de programme basic, dans
![[prgm] :f43:](./images/smilies/z80/43.png)
![[->] :f26:](./images/smilies/z80/26.png)
Je suis sur PHASM, le shell pour ti-83 premium CE, depuis pas mal de temps et j'ai terminé les fonctionnalités de base.
Maintenant je veux m'attaquer à la suppression du never-ending scroll, qu'on a lorsqu'on choisit "goTo" lors d'une erreur dans un programma basic. Attention à faire la différence avec ce qu'avait matref ici. Je veux vraiment faire un instant goTo, pas voir le code défiler pendant 10 minutes.
Tout content de mon idée je me suis documenté pendant quelques heures, et j'ai trouvé ce que je cherchais : editCursor. Cet emplacement de RAM contient en fait l'adresse du token sous le curseur dans l'édition de variable ou pour être plus précis : Stores the address of where editing is taking place. As opposed to the visible cursor displayed on screen, this location stores the address of the token under the cursor.
C'est donc avec le fonctionnement des romCalls du buffer d'édition en tête que je me met à l'écriture de mon code. Je fais bien sûr quelques tests pour voir si tout marche et je me rend compte que changer editCursor c'est bien beau, mais ça ne change QUE le token (enfin, abus de langage, ce n'est pas un token mais passons) en dessous du curseur, ce qui nécessite de scroller un peu pour remettre les tokens à leur place. En gros faudrait rafraichir le contenu de l'edit buffer. Bon bien entendu, pas la peine de penser à grBufCpy, l'écran n'est pas contenu dedans. Je vous met mon code :
- Code: Select all
ld hl,RawKeyHook
ld de,$D052C6 ; Adresse saferam
ld bc,stop-begin+1
ldir
ld hl,$D052C6
ld (RawKeyHookPtr),hl ; Activation du Raw Key Hook
set rawKeyHookActive, (iy+hookFlags2)
ret
RawKeyHook:
.org $D052C6
begin:
.db 83h
cp 250 ; if [<>] has been pressed
ret nz
bit editOpen, (iy+editFlags)
ret z
ld hl,editCursor
inc (hl)
inc (hl)
inc (hl)
inc (hl)
inc (hl)
ld a,0
ret
stop:
Concrètement que fait ce code ? Déjà le début jusqu'à begin c'est juste pour activer le hook. J'utilise le rawKeyHook, le hook qui s'exécute à chaque fois qu'une touche a été pressée, en gros.
Le hook vérifie d'abord que c'est bien la touche <> qui a été pressée, ensuite il vérifie qu'on est bien dans l'edit buffer. Enfin, il incrémente 5 fois l'adresse du curseur, pour ensuite retourner à l'OS. Logiciellement ce hook marche, le curseur est bien 5 tokens après. Graphiquement c'est la guerre du Vietnam : on a des tokens qui se baladent à l'écran quand on re-bouge le curseur.
Bref, ma question est : comment fait-on pour rafraichir l'edit buffer ? la romCall _DispTail le fait bien elle, il doit y avoir un moyen...
Merci de m'avoir lu, si c'est le cas, jusqu'ici ! J'espère que vous pourrez m'aider

N'hésitez pas à me demander plus d'infos si vous n'avez pas compris quelque chose, je vous répondrai le plus vite possible !