La Place des Développeurs Projet GOS Et oui, encore trop d'ambitions ^^
ericb59
Membre non connecté
Conseiller Municipal
Reprise du message précédent
Ce qui m'intéresse de voir c'est ta routine la plus rapide.En Screen mode 8 ou 5 ont doit obtenir les mêmes vitesses.
Oui utilises 7 Prints différents s'il te plait.
J'ai vu dans ta routine que tu transferts des caractères avec fonction Ram To VRAM. Tu en fait 8 par caractères, si j'ai bien pigé. 1 par ligne.
Pourquoi tu n'utilises pas HMMC ou LMMC pour faire un seul transfert par caractère ? Edité par ericb59 Le 22/12/2020 à 15h23
aoineko
Membre non connecté
Conseiller Municipal
En mode 8 (8-bits per dot), on a 2 fois plus de data à envoyer au VDP qu'en mode 5 (4-bits par dot).
Je n'utilise pas HMMC ou LMMC parce que... je les ais pas encore (re)implémenté.
C'est prévu (c'est nécessaire pour le mode "ombre" notamment).
Ceci dit, si un jour je veux avoir un système d'affichage vraiment performant (pour afficher bcp de texte par frame), j'installerai mes fonts en VRAM et je n'afficherai mon texte qu'à base de commandes inter-VDP.
Je te ferais quand même les tests ce soir ; ça m'intéresse aussi d'avoir un comparatif avec le Bios (j'imagine que tu as fais tes tests via les routines du Bios).
Je n'utilise pas HMMC ou LMMC parce que... je les ais pas encore (re)implémenté.
C'est prévu (c'est nécessaire pour le mode "ombre" notamment).
Ceci dit, si un jour je veux avoir un système d'affichage vraiment performant (pour afficher bcp de texte par frame), j'installerai mes fonts en VRAM et je n'afficherai mon texte qu'à base de commandes inter-VDP.
Je te ferais quand même les tests ce soir ; ça m'intéresse aussi d'avoir un comparatif avec le Bios (j'imagine que tu as fais tes tests via les routines du Bios).
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
Je viens de m'apercevoir que de mesurer le temps avec le Timer ce n'était pas du tout fiable. Le Timer étant synchronisé sur les interruptions, les routines qui utilisent un DI / EI faussent le résultat.
Tu as une idée de comment faire autrement ?
Tu as une idée de comment faire autrement ?
aoineko
Membre non connecté
Conseiller Municipal
Une question pour les connaisseurs du MSX.
A priori, y a un port avec un registre 'timer' mais ça semble spécifique au TruboR (chip S1990).
Mais sinon, si la tâche prends plusieurs frames, la méthode du JIFFY devrait pas être trop mauvaise.
Y a pas de raison que des DI/EI fassent sauter une frame (le VDP va tenter de re-balancer son interruption tant que le flag de S#0 n'est pas reset) ; par contre, si tu fais des lectures du registre S#0 du VDP, là ça va tout fausser.
En tout cas, j'ai pas d'autres idées là comme ça.
A priori, y a un port avec un registre 'timer' mais ça semble spécifique au TruboR (chip S1990).
Mais sinon, si la tâche prends plusieurs frames, la méthode du JIFFY devrait pas être trop mauvaise.
Y a pas de raison que des DI/EI fassent sauter une frame (le VDP va tenter de re-balancer son interruption tant que le flag de S#0 n'est pas reset) ; par contre, si tu fais des lectures du registre S#0 du VDP, là ça va tout fausser.
En tout cas, j'ai pas d'autres idées là comme ça.
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
J'ai modifié ma routine pour ne pas avoir de DI / EI, j'utilise donc comme toi un copy Ram To vram par ligne de chaque caractère.
J'affiche mes 7 lignes de texte en Screen 8, MSX2 PAL, en197 154 Cycles.
Ce qui est bien trop long.
Avec le bios ca ne prend que 28 Cycles. Edité par ericb59 Le 22/12/2020 à 20h39
J'affiche mes 7 lignes de texte en Screen 8, MSX2 PAL, en
Ce qui est bien trop long.
Avec le bios ca ne prend que 28 Cycles. Edité par ericb59 Le 22/12/2020 à 20h39
aoineko
Membre non connecté
Conseiller Municipal
Voici mes résultats :
Screen | Freq | Lib | Frames |
---|---|---|---|
5 | 60 | Full | 23 |
5 | 60 | Optim | 22 |
8 | 60 | Full | 83 |
8 | 60 | Optim | |
5 | 50 | Full | 19 |
5 | 50 | Optim | 18 |
8 | 50 | Full | 69 |
8 | 50 | Optim |
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
Il y a quelques incohérence dans ton tableau, c'est étrange ...
Je viens de passer à 154 Cycles, dans les mêmes conditions.
HA ! Une idée ...
Je suis passé à 75 Cycles !
Et 64 cycles en utilisant un HMMC pour copier un bloc de 8x8 vers la VRAM.
Toujours plus lent que le Bios... Mais comment fait il donc ? Edité par ericb59 Le 22/12/2020 à 21h09
Je viens de passer à 154 Cycles, dans les mêmes conditions.
HA ! Une idée ...
Je suis passé à 75 Cycles !
Et 64 cycles en utilisant un HMMC pour copier un bloc de 8x8 vers la VRAM.
Toujours plus lent que le Bios... Mais comment fait il donc ? Edité par ericb59 Le 22/12/2020 à 21h09
ericb59
Membre non connecté
Conseiller Municipal
28 Cycles en Screen 5.
Identique au Screen 8 !
PutText( int X, int Y, char *str, char LogOp )
Identique au Screen 8 !
PutText( int X, int Y, char *str, char LogOp )
Code ASM :
Edité par
ericb59
Le 22/12/2020 à 21h14
_PutText:: push ix ld ix,#0 add ix,sp ld l,4(ix) ld h,5(ix) ld (GRPACX),hl ; X ld l,6(ix) ld h,7(ix) ld (GRPACY),hl ; Y ld a,10(ix) ld (LOGOPR),a ; LogOp ld l,8(ix) ld h,9(ix) lb_ptlp: ld a,(hl) or a jr z, lb_ptEx call 0x008D ; Call Bios ei inc hl jr lb_ptlp lb_ptEx: pop ix ret
ericb59
Membre non connecté
Conseiller Municipal
aoineko
Membre non connecté
Conseiller Municipal
C'est normal, on compte le nombre de frames... à 60 Hz y a plus de frames pour un même temps donné.
Tout va bien, tu peux ranger ton pack de proton
En tout cas, j'suis content d'être plus rapide que le Bios en Screen Mode 5 !
Par contre, je comprends pas comment il peut aller à la même vitesse en Screen 8 !?
Y a 2 fois plus de données à envoyer...
Tout va bien, tu peux ranger ton pack de proton
En tout cas, j'suis content d'être plus rapide que le Bios en Screen Mode 5 !
Par contre, je comprends pas comment il peut aller à la même vitesse en Screen 8 !?
Y a 2 fois plus de données à envoyer...
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Je vois pas de ruse pour décoder rapidement 8-bits en 8 bytes, mais je vais y réfléchir...
Si les ingénieurs des années 80 ont trouvés, on doit pouvoir le faire aussi
Si les ingénieurs des années 80 ont trouvés, on doit pouvoir le faire aussi
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
C'est bon, je suis tombé à 21 frames en Screen 8 @ 50 Hz !
(et 23 frames avec la version autorisant les tailles variables de caractères)
L'explication serait un peu technique, mais je peux vous montrer si ça vous tente.
(et 23 frames avec la version autorisant les tailles variables de caractères)
L'explication serait un peu technique, mais je peux vous montrer si ça vous tente.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Je descend même à 19 frames si je décode/envoi que 6-bits par ligne (la font du Bios n'utilise que 6 de ses 8-bits).
J'ai ajouté des paramètres à la lib pour que l'utilisateur puisse choisir entre rapidité et flexibilité.
J'ai encore un p'tit bug à corriger et du ménage à faire, puis je pusherai sur GitHub.
EDIT : C'est bon. C'est à jour sur https://github.com/aoineko-fr/cmsx
J'ai ajouté des paramètres à la lib pour que l'utilisateur puisse choisir entre rapidité et flexibilité.
J'ai encore un p'tit bug à corriger et du ménage à faire, puis je pusherai sur GitHub.
EDIT : C'est bon. C'est à jour sur https://github.com/aoineko-fr/cmsx
On est toujours ignorant avant de savoir.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie