Logicielsmoto.com

Nous sommes le 20 Mar 2025, 05:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
MessagePosté: 23 Oct 2023, 17:05 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 372
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.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Oct 2023, 17:44 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 437
Localisation: Var
Avec A ou B c’est en signé, avec D c’est en non signé.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Oct 2023, 20:21 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1827
Localisation: Brest
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 ;) !

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Oct 2023, 20:36 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 372
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.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com