Logicielsmoto.com

Nous sommes le 28 Mar 2024, 20:39

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
MessagePosté: 28 Fév 2022, 15:41 
Hors ligne

Inscription: 12 Fév 2021, 15:54
Messages: 78
Localisation: Rennes
Bonjour à tous,

je fais l'appel à un (des) ami(s), je vous demande votre avis sur cette petite routine pour l'améliorer (sous entendu, Sam, c'est pour toi :-) )

Code:
PALETTE_DEFINITION_BEGIN
   FDB $0000,$00DD,$0048,$0AAA
PALETTE_DEFINITION_END

SET_ALL_PALETTE
   PSHS D,X
   LDA #$00
   STA PALETTE_SEL  * on se place sur la couleur 0
   LDX #PALETTE_DEFINITION_BEGIN
!  * boucle sur toutes les couleurs de la palette
   LDD ,X++
   STB PALETTE_REG
   STA PALETTE_REG
   CMPX #PALETTE_DEFINITION_END
   BNE <
!  * fin de boucle
   PULS X,D,PC


Merki ! :D

_________________
Fan de Atari 2600, Thomson MO5, Thomson TO8, Atari STE.
Retro-Codeur à mes heures perdues. https://www.fxjavadevblog.fr


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Fév 2022, 18:15 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Il y a quelques micro-optimizations (clra à la place de lda, mettre le bit de signe de la dernière entrée de la palette pour indiquer la fin, etc) , mais est-ce-que ca vaut la peine?

Tu feux gagner des octets ou des cycles ? Dans tous les cas sur une routine aussi courte, ce sera marginal.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Fév 2022, 22:42 
Hors ligne

Inscription: 12 Fév 2021, 15:54
Messages: 78
Localisation: Rennes
L'idée c'est plutôt de gagner de la place, ce n'est invoqué que quelques fois, donc pas besoin d'économiser de cycles.
Le test de bit de signe sera plus rapide que la comparaison d'adresse j'imagine.
J'avoue que c'est aussi un peu pour me rassurer et voir si j'applique les bons conseils.

_________________
Fan de Atari 2600, Thomson MO5, Thomson TO8, Atari STE.
Retro-Codeur à mes heures perdues. https://www.fxjavadevblog.fr


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Fév 2022, 23:16 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Gagner de la place, allons y:
Code:
PALETTE_DEFINITION_BEGIN
   FDB $0000,$00DD,$0048,$8AAA
PALETTE_DEFINITION_END

SET_ALL_PALETTE
   PSHS D,X,U
   LDU #PALETTE_REG
   CLR -1,U  *  PALETTE_SEL  * on se place sur la couleur 0
   LDX #PALETTE_DEFINITION_BEGIN
!  * boucle sur toutes les couleurs de la palette
   LDD ,X++
   STB ,U
   STA ,U
   BGE <
!  * fin de boucle
   PULS U,X,D,PC


J’ ai deux doutes sur le CLR -1,U:
1) c’est peut être 1,U car je ne sais plus la position relative des registres palette (et j’ai la flemme de chercher :p ).
2) CLR ne marche peut être pas bien car je ne sais plus si son cycle de lecture se fait avant ou après le cycle d’écriture. Je pense que c’est avant comme les INC, DEC, LSR, etc. Il faudrait vérifier sur machine si ca marche. Si ca marche pas, utiliser CLRA/STA.

En fin de compte l’utilisation de U ne fait rien gagner en place. Certes l’adressage relatif économise 3*1 octets, mais le LDU en coûte 3. Bilan nul en terme de place. Par contre on gagne quelques cycles.

Seul le truc du bit de signe économise le CMPX (3 octets), mais j’ai un doute avec le code. J’aurais cru qu’il fallait écrire le poids fort en premier, ce qui casse le truc. Mais bon, je reste fidèle au code d’origine, donc le STA positionné le poids fort en dernier laissant le test du bit de signe gratos.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Mar 2022, 10:18 
Hors ligne

Inscription: 12 Fév 2021, 15:54
Messages: 78
Localisation: Rennes
Effectivement, ça fonctionne nickel :

Code:
****************************************************************************************************
* DEFINITION DE LA PALETTE CIBLE (valeurs xBVR), si la couleur a le bit se signe $8xxx, c'est la dernière
****************************************************************************************************
PALETTE_DEFINITION
   FDB $0000,$00DD,$0048,$8AAA
****************************************************************************************************


****************************************************************************************************
* Routine SET_ALL_PALETTE : affecte toutes les valeurs d'une tableau de mots (16 bits), à la palette
* Prend en "paramètre" l'adresse de l'étiquette "PALETTE_DEFINITION_BEGIN"
* et "PALETTE_DEFINITION_END"
****************************************************************************************************
SET_ALL_PALETTE
   PSHS D,X,U
   LDU #PALETTE_REG       
   CLR 1,U               * efface le contenu de PALETTE_SEL qui est situé un octet après PALETTE_REG
   LDX #PALETTE_DEFINITION
!  * boucle sur toutes les couleurs de la palette
   LDD ,X++
   STB ,U
   STA ,U
   BGE <
!  * fin de boucle
   PULS U,X,D,PC
****************************************************************************************************


Merci.
Je ne suis pas encore très "à l'aise" avec l'utilisation de U : j'y pense pas.

_________________
Fan de Atari 2600, Thomson MO5, Thomson TO8, Atari STE.
Retro-Codeur à mes heures perdues. https://www.fxjavadevblog.fr


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Mar 2022, 11:52 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Tu pourrais utiliser Y aussi, mais LDY coûte un octet et un cycle de plus que LDU.

Autre "astuce" pour aller vite et economiser des octets en évitant plein de LDreg: on place les constantes des LDreg en ram et on charge tout avec un PULU. Bon ici ça s'y prête mal car il y a peu de LDreg, mais parfois ça vaut le coup.

Ca pourrait donner cela
Code:
CONSTANTS
   FDB PALETTE_REG
PALETTE_DEFINITION
   FDB $0000,$00DD,$0048,$8AAA

SET_ALL_PALETTE
   PSHS D,X,U
   LDU #CONSTANTS
   PULU X                 * on peut charger plein de regs en 2 octets (ici il n’y a que X). U pointe maintenant sur PALETTE_DEFINITION
   CLR 1,X               * efface le contenu de PALETTE_SEL qui est situé un octet après PALETTE_REG
 !  * boucle sur toutes les couleurs de la palette
   PULU D
   STB ,X
   STA ,X
   BGE <
!  * fin de boucle
   PULS U,X,D,PC

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Mar 2022, 16:21 
Hors ligne

Inscription: 12 Fév 2021, 15:54
Messages: 78
Localisation: Rennes
L'astuce de dingue. :bien:
C'est beau.

_________________
Fan de Atari 2600, Thomson MO5, Thomson TO8, Atari STE.
Retro-Codeur à mes heures perdues. https://www.fxjavadevblog.fr


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

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 49 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 à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com