Logicielsmoto.com
http://www.logicielsmoto.com/phpBB/

[Asseùbleur 6809] Question sur LEAX ?
http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=700
Page 1 sur 1

Auteur:  Neotenien [ 23 Oct 2023, 17:05 ]
Sujet du message:  [Asseùbleur 6809] Question sur LEAX ?

Bonjour

Je suis en train de porter un jeu vidéo shot m up de 1981, célèbre jeu d'arcade, sur Thomson, Scramble pour ne pas le citer.

Voici le bout de code sensé afficher un rectangle de sol (incomplet)
Code:
*************************************
*Routine début Scrolling
* Affichage Rectangle
* Les coordonnées Col se déduisent
*************************************
DebScr *
 LDA #8
 LDB #CuDeBc
 SUBB #65
 MUL
 STD XXXXX X1 Rectangle
 TFR D,X X2 rect Provisoire
 LDA #8
 LDB #LargEc Fct de largeur Ecran
 MUL
 LEAX B,X X2 rect Définitif
 LDA #8
 LDB #CuDeBl
 SUBB #64
 MUL
 STD YYYYY Y1 Rectangle
 ADDD #32
 TFR D,Y Y2 rectangle
 LDA $FF
 STA FILFLG
 LDB #BOX
* LDU #MOTIF
* STU MACP
 JSR EXTRA
 RTS
MOTIF FCB 255,255,255,255,255,255,255,255



Et lors de mes tests pour afficher le sol de début, j'ai utilisé
LEAX B,X
Sauf que le résultat n'affiche qu'une ligne verticale de 32 pxl de haut et vide en largeur!
En remplaçant par
LEAX D,X,
ça affiche bien un rectangle
Idem si je fais
LEAX 160,X

Mais quand on met en décalage A ou B, il ne se produit pas de décalage, alors que dans la documentation assembleur que j'ai ("Le microprocesseur 6809, ses périphériques est le processeur graphique 6365-66" aux éditions Eyrole, et "Manuel de l'assembleur 6809" pour TO8) il n'est fait mention nulle part que les régistres A et B ne peuvent pas servir à l'adressage indexé pour LEA.

Je précise que l'étiquette LargEc est initialisé à 20 ici (ça représente la largeur écran en caractères).

Est ce que ce problème là est connu ?

J'utilise l'Asembleur 3.0 pour TO8 (De préhisto) via DC Moto d'avril 2023.

Auteur:  Bentoc [ 23 Oct 2023, 17:44 ]
Sujet du message:  Re: [Asseùbleur 6809] Question sur LEAX ?

Avec A ou B c’est en signé, avec D c’est en non signé.

Auteur:  Samuel Devulder [ 23 Oct 2023, 20:21 ]
Sujet du message:  Re: [Asseùbleur 6809] Question sur LEAX ?

Oui, voir dans les cours de préhisto au sujet des LEA
Citation:
ATTENTION! Ces instructions prennent en compte le signe (bit 7) du registre de déplacement dans le cas de l'utilisation d'un registre 8 bits. "LEAX B,X" n'aura pas le même effet que "ABX": si le bit 7 de B est à 1 (valeur comprise de $80 à $FF), le registre 16 bits X sera décrémenté.
Donc si on veut faire X=X+B avec B non signé on peut faire
Code:
CLRA       ; 2 cycles
LEAX D,X   ; 8 cycles
Ou mieux avec l'instruction ABX (3 cycles) qui ajoute B non signé sans passer par D. C'est nettement plus rapide et compact que le LEAX.

A noter que si on fait de l'arithmétique sur des constantes (au temps de la compilation) comme ici:
Code:
 LDA #8
 LDB #CuDeBc
 SUBB #65
 MUL
 STD XXXXX X1 Rectangle
on peut carrément faire ca par l'assembleur en écrivant directement
Code:
LDD #CuDeBc*8-65
STD XXXXX
Idem avec les LEAX B,X quand B est constant comme ici
Code:
 LDA #8
 LDB #LargEc Fct de largeur Ecran
 MUL
 LEAX B,X X2 rect Définitif
qui peut être remplacé par
Code:
 LEAX 8*LargEc,X
C'est plus petit, plus rapide, bref plus malin ;) !

Auteur:  Neotenien [ 23 Oct 2023, 20:36 ]
Sujet du message:  Re: [Asseùbleur 6809] Question sur LEAX ?

Haha merci bcp Bentoc et Samuel!!

En effet, puisque le B ici est >=128 (160) c'est comme si on enlevait quelque chose à X et donc, l'extrémité droite du rectangle est forccément avant le bord gauche de l'écran!

Merci pour l'astuce ABX (Citroen ?) ça m'arrange même cette instruction.

Jsé pas si on peut mettre une étiquette "sujet résolu" à ce post pour qu'il n'y ai plus d'autre commentaire.

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/