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

[résolu] Douce reprise de l'assembleur (par un gros boulet)
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=6483
Page 1 sur 1

Auteur :  DiVi [ 16 Mars 2021, 14:16 ]
Sujet du message :  [résolu] Douce reprise de l'assembleur (par un gros boulet)

Comme beaucoup avant moi, ça fait plusieurs dizaines d'année que je n'ai pas touché à l'assembleur Z80, j'ai décidé de m'y remettre doucement en reprenant tout depuis le début.
J'étudie donc le listing présenté dans l'initiation à l'assembleur de Amstrad 100%, n°11 page 75.

Évidement, ça marche pas comme je veux. Je vous met là ca que j'ai tapé :

Code :
;
;
        org     #9000
;       exec    $  <- commenté parce que l'assembleur de WinAPE aime pas beaucoup ça
;
        ex      de, hl
        ld      a, (hl)
        inc     hl
        ld      e, (hl)
        inc     hl
        ld      d, (hl)
        push    de
        pop     hl
        add     a, e
        ld      e, a
        jr      nc, suit
        inc     d
suit    xor     a
        ld      (de), a
pass    push    hl
        call    #bd19
        ld      hl, #c781
loop    ld      b, #4f
        push    hl
        push    hl
        pop     de
        dec     de
bouc    ld      a, (hl)
        ld      (de), a
        inc     hl
        inc     de
        djnz    bouc
        ld      de, #800
        pop     hl
        add     hl, de
        jr      nc, loop
        ld      hl, #5019
        call    #bb75
        pop     hl
        ld      a, (hl)
        inc     hl
        or      a
        jr      z, sors
        call    #bb5a
        jr      pass
sors    ld      a, 32
        jp      #bb5a


Je crois qu'il est sencé faire scroller une ligne de texte en bas de l'écran.
Déjà, pour l'appeller, c'est bien un
Code :
call &9000,"Ma super chaine que je veux faire scroller"

qu'il faut faire ?
Si mes souvenirs sont bons, le XOR A qui sort de nulle part ligne 18 sert bien à mettre A à zéro plus vite qu'un LD, oui ?

Désolé, c'est du niveau hyper débutant, et je galère déjà :D Toute aide est la bienvenue. Merci d'avance !

Auteur :  Nemo59 [ 16 Mars 2021, 15:46 ]
Sujet du message :  Re: Douce reprise de l'assembleur

Hello. Ça remonte à très loin pour moi aussi. Mais il me semble qu’il manque toute la partie pour pointer vers ta chaîne de caractère en paramètre au début de ton programme.

Auteur :  DiVi [ 16 Mars 2021, 16:51 ]
Sujet du message :  Re: Douce reprise de l'assembleur

Non j' ai cru ça aussi au début, mais l'adresse du debut de la chaine est bien récupéré dans DE par

Code :
        ex      de, hl      ; on met l'adresse du descripteur de la chaine dans HL
        ld      a, (hl)     ; A contient maintenant la longueur de la chaine
        inc     hl          ; HL pointe sur l'octet de poids faible de l'adresse de la chaine
        ld      e, (hl)     ; -> qu'on charge dans E
        inc     hl          ; HL pointe sur l'octet de poids fort de la chaine
        ld      d, (hl)     ; -> chargé dans D. DE pointe maintenant sur l'adresse de la chaine


Je me suis amusé à commenter tout le listing pour mieux le comprendre et tout parrait correct. J'ai pas encore vérifé si les vecteurs utilisés sont les bons mais il y a pas de raisons. J'ai pas vu non plus de correctif dans le numéro suivant.
D'ailleurs la chaîne s'affiche bien, juste pas au bon endroit et donc le scroll se fait dans le vide, s'il se fait.
Je vais essayer de faire un GIF du résultat, si c'est possible avec WinAPE.

edit : Il y avait pas une histoire de saut de ligne qui décale tout l'écran vers le haut quand on affiche un caractère dans la dernière colonne de la dernière ligne ? Je suis à peu près sûr que c'est le cas en basic, en assembleur je sais pas... Si c'est le cas ça peut pas marcher comme ça son truc, étonnant tout de même...
non pas du tout, je sais pas d'où je sors ça.

Auteur :  demoniakparadox [ 16 Mars 2021, 17:19 ]
Sujet du message :  Re: Douce reprise de l'assembleur

DiVi a écrit :
Déjà, pour l'appeller, c'est bien un
Code :
call &9000,"Ma super chaine que je veux faire scroller"

qu'il faut faire ?
Si mes souvenirs sont bons, le XOR A qui sort de nulle part ligne 18 sert bien à mettre A à zéro plus vite qu'un LD, oui ?

Désolé, c'est du niveau hyper débutant, et je galère déjà :D Toute aide est la bienvenue. Merci d'avance !


Oui, c'est bien call &9000,"chaine" à faire pour l'appeler
Effectivement, le XOR A met 0 dans A (entre autres), plus vite que LD A,0

Sinon le programme que tu as listé semble fonctionner pour moi...

Auteur :  DiVi [ 16 Mars 2021, 17:57 ]
Sujet du message :  Re: Douce reprise de l'assembleur

demoniakparadox a écrit :
Sinon le programme que tu as listé semble fonctionner pour moi...


Curieux, chez moi ça donne ça (piece jointe).

Bon merci pour vos réponses, je vais continuer à investiguer...

Auteur :  DiVi [ 16 Mars 2021, 18:40 ]
Sujet du message :  Re: Douce reprise de l'assembleur

Alors en fait, ça marche en mode 2.
C'est pas précisé dans l'article, et j'ai pas fait gaffe aux coordonées du curseur...
Toutes mes confuses :oops:

(edit:par contre je comprend pas pourquoi en corrigeant les coordonnées du locate ça écrase le texte en mode 1, ça devrait rien changer puisque tout les octets sont décalés ?
oui si forcément, faudrait décaler de 2 octets par caractere affiché... double boulet)

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