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 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.LEAX D,X ; 8 cycles A noter que si on fait de l'arithmétique sur des constantes (au temps de la compilation) comme ici: Code: LDA #8 on peut carrément faire ca par l'assembleur en écrivant directementLDB #CuDeBc SUBB #65 MUL STD XXXXX X1 Rectangle Code: LDD #CuDeBc*8-65 Idem avec les LEAX B,X quand B est constant comme iciSTD XXXXX Code: LDA #8 qui peut être remplacé par LDB #LargEc Fct de largeur Ecran MUL LEAX B,X X2 rect Définitif 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/ |