La Place des Développeurs MSX1 / Scrolling
Hello!
Bon, je sais je cherche les ennuis...
Je suis tout nouveau dans le dev pour MSX.
Et je m'attaque au MSX 1.
Avez-vous un truc pour faire un scrolling vertical plus ou moins correct en Screen 2 ?
J'ai bien la méthode "bourrin" qui consiste à copier les 6144K de la table des couleurs et les 6144K de la tables des patterns en RAM.
Faire mon scrolling.
et tout recopier en VRAM.
Évidemment, c'est pas très beau (lent) (pour mon projet à la limite ce n'est pas trop grave), mais surtout, ca bouffe pas mal de RAM tout cela !
S'il y a un truc, dites-le moi !
(j'ai cherché, mais rien vu de particulier...)
Bon, je sais je cherche les ennuis...
Je suis tout nouveau dans le dev pour MSX.
Et je m'attaque au MSX 1.
Avez-vous un truc pour faire un scrolling vertical plus ou moins correct en Screen 2 ?
J'ai bien la méthode "bourrin" qui consiste à copier les 6144K de la table des couleurs et les 6144K de la tables des patterns en RAM.
Faire mon scrolling.
et tout recopier en VRAM.
Évidemment, c'est pas très beau (lent) (pour mon projet à la limite ce n'est pas trop grave), mais surtout, ca bouffe pas mal de RAM tout cela !
S'il y a un truc, dites-le moi !
(j'ai cherché, mais rien vu de particulier...)

La réponse simple : Fuis pauvre fou ! 
...
Tu es encore là ? Bon, ok, y a plusieurs solutions :
- La version simple et rapide : tu scrolles par pas de 8 pixel (ça revient juste à mettre à jour la table des noms, celle qui dit quelle tuile est affiché sur chaque case de l'écran)
- La version simple et très lente : ce que tu fais à priori (recopier les patterns en décalant d'un pixel à chaque fois)
- La version beaucoup moins simple mais encore un peu lente : tu fais la même chose mais tu skip toutes les tuiles qui n'ont pas besoin de bouger (tu peux faire ça en temps-réel ou le pré-calculer)
- La version simple et 2 fois moins lente : tu fais la même chose qu'actuellement mais tu passes en noir et blanc. Et boum, tu divises par 2 les données à bouger (plus besoin de bouger la table de couleur)
Comme tu vois, y a pas de magie.
La bonne méthode dépend surtout de ce que tu es près à sacrifier.

...
Tu es encore là ? Bon, ok, y a plusieurs solutions :
- La version simple et rapide : tu scrolles par pas de 8 pixel (ça revient juste à mettre à jour la table des noms, celle qui dit quelle tuile est affiché sur chaque case de l'écran)
- La version simple et très lente : ce que tu fais à priori (recopier les patterns en décalant d'un pixel à chaque fois)
- La version beaucoup moins simple mais encore un peu lente : tu fais la même chose mais tu skip toutes les tuiles qui n'ont pas besoin de bouger (tu peux faire ça en temps-réel ou le pré-calculer)
- La version simple et 2 fois moins lente : tu fais la même chose qu'actuellement mais tu passes en noir et blanc. Et boum, tu divises par 2 les données à bouger (plus besoin de bouger la table de couleur)
Comme tu vois, y a pas de magie.
La bonne méthode dépend surtout de ce que tu es près à sacrifier.

On est toujours ignorant avant de savoir.

la fonction copie n est pas recommandé. moi je me servais d'une instruction vdp(x) quelque chose. mais sur msx2 !! et le defilement est fluide, mais c est juste l ecran qui defile sur lui meme
Tous mes PCB -> github.com/msxlegend
challenge 2013 -> neodream MSX 2013
Concepteur du -> KCX Bluetooth transmitter
aoineko :
La réponse simple : Fuis pauvre fou ! 
...
Tu es encore là ? Bon, ok, y a plusieurs solutions :
- La version simple et rapide : tu scrolles par pas de 8 pixel (ça revient juste à mettre à jour la table des noms, celle qui dit quelle tuile est affiché sur chaque case de l'écran)
- La version simple et très lente : ce que tu fais à priori (recopier les patterns en décalant d'un pixel à chaque fois)
- La version beaucoup moins simple mais encore un peu lente : tu fais la même chose mais tu skip toutes les tuiles qui n'ont pas besoin de bouger (tu peux faire ça en temps-réel ou le pré-calculer)
- La version simple et 2 fois moins lente : tu fais la même chose qu'actuellement mais tu passes en noir et blanc. Et boum, tu divises par 2 les données à bouger (plus besoin de bouger la table de couleur)
Comme tu vois, y a pas de magie.
La bonne méthode dépend surtout de ce que tu es près à sacrifier.

...
Tu es encore là ? Bon, ok, y a plusieurs solutions :
- La version simple et rapide : tu scrolles par pas de 8 pixel (ça revient juste à mettre à jour la table des noms, celle qui dit quelle tuile est affiché sur chaque case de l'écran)
- La version simple et très lente : ce que tu fais à priori (recopier les patterns en décalant d'un pixel à chaque fois)
- La version beaucoup moins simple mais encore un peu lente : tu fais la même chose mais tu skip toutes les tuiles qui n'ont pas besoin de bouger (tu peux faire ça en temps-réel ou le pré-calculer)
- La version simple et 2 fois moins lente : tu fais la même chose qu'actuellement mais tu passes en noir et blanc. Et boum, tu divises par 2 les données à bouger (plus besoin de bouger la table de couleur)
Comme tu vois, y a pas de magie.
La bonne méthode dépend surtout de ce que tu es près à sacrifier.

Non, je reste !
J'avais déjà lu un truc sur la "version simple et rapide" du scroll par 8 pixels (ce dont j'ai besoin de toutes facons).
Mais il y a un truc qui m'échappe : cette table des noms (de 768 octets) est divisée par tiers (de 256 octets chacun donc).
Ainsi la position 0 du premier tiers pointe vers la position 0 de la table des couleurs et de la table des formes des tuiles (je ne sais pas trop comment vous appelez ces tables en français dans le monde MSX), etc..
La position 0 du second tiers pointe vers la position 2048 de la table des couleurs et de la table des formes des tuiles , etc..
La position 0 du second tiers pointe vers la position 4096 de la table des couleurs et de la table des formes des tuiles , etc..
Si je scroll uniquement la table des noms, forcément , je vais avoir des tuiles qui vont pointer vers un emplacement ne correspondant plus au tiers vers lequel elles pointaient..
Je ne sais pas si je suis clair..(mais bon, vous devez connaître j'imagine !)
Alors, il est probable que je n'ai rien compris..je sais pas...

Tu as bien compris. C'est juste que dans la plupart des cas, on met les mêmes patterns dans les 3 tables donc ça pose pas de soucis.
Mais si tu es en mode pseudo-bitmap (un numéro de tuile unique sur chaque case de l'écran) tu as effectivement besoin d'un pattern unique par case et donc de déplacer les patterns quand une tuile change de tiers d'écran.
Pas d'autre solution ici que de copier les 32 patterns d'une table vers l'autre.
Note que tu peux copier les patterns à la place de la rangée qui a disparu, comme ça tu n'as pas besoin de tout déplacer. Il faut juste mettre à jour les indexes de tuiles en conséquence.
Mais si tu es en mode pseudo-bitmap (un numéro de tuile unique sur chaque case de l'écran) tu as effectivement besoin d'un pattern unique par case et donc de déplacer les patterns quand une tuile change de tiers d'écran.
Pas d'autre solution ici que de copier les 32 patterns d'une table vers l'autre.
Note que tu peux copier les patterns à la place de la rangée qui a disparu, comme ça tu n'as pas besoin de tout déplacer. Il faut juste mettre à jour les indexes de tuiles en conséquence.
On est toujours ignorant avant de savoir.
d'abord il faudrait préciser ce que tu veux faire comme scrolling si c'est pour ton émulation minitel ou autre ?
après il y a scrolling avant ( le plus utilisé dans les jeux ) ou scrolling arrière
après il y a scrolling avant ( le plus utilisé dans les jeux ) ou scrolling arrière
aoineko :
Tu as bien compris. C'est juste que dans la plupart des cas, on met les mêmes patterns dans les 3 tables donc ça pose pas de soucis.
Mais si tu es en mode pseudo-bitmap (un numéro de tuile unique sur chaque case de l'écran) tu as effectivement besoin d'un pattern unique par case et donc de déplacer les patterns quand une tuile change de tiers d'écran.
Pas d'autre solution ici que de copier les 32 patterns d'une table vers l'autre.
Note que tu peux copier les patterns à la place de la rangée qui a disparu, comme ça tu n'as pas besoin de tout déplacer. Il faut juste mettre à jour les indexes de tuiles en conséquence.
Mais si tu es en mode pseudo-bitmap (un numéro de tuile unique sur chaque case de l'écran) tu as effectivement besoin d'un pattern unique par case et donc de déplacer les patterns quand une tuile change de tiers d'écran.
Pas d'autre solution ici que de copier les 32 patterns d'une table vers l'autre.
Note que tu peux copier les patterns à la place de la rangée qui a disparu, comme ça tu n'as pas besoin de tout déplacer. Il faut juste mettre à jour les indexes de tuiles en conséquence.
Oui, c'est pour la petite émulation minitel. C'est un exercice qui, sous son air simple, est assez complexe !
Le scrolling peut se faire vers le haut et vers le bas.
Le mix pattern-couleur peut être "infini" c'est à dire que chaque caractère, quelque soit sa position, peut avoir une couleur de premier plan et de fond différente (Exemple : dans un même "tiers" je peux avoir un A rouge sur fond blanc et un "A" vert sur fond cyan). De plus, la définition elle-même des patternes est aussi "infini", puisque une tuile de 8x8 affiche un caractère défini,lui, sur 6(large)x8(hauteur). Les 2 colonnes supplémentaires sont utilisées pour afficher le début du caractère suivant..! Une tuile peut donc être un mélange de A + un début de B !
Edité par ludojoey Le 27/12/2024 à 17h37
si tu utilise des "patterns" de 6 x 8 en screen 2 tu va avoir beaucoup de bavures avec les couleurs et ça va vite être illisible
si le minitel à une résolution de 320 x 240 ça fait bien 40 patterns de 8 pixels pourquoi ne pas utiliser un scrolling horizontal de 8 patterns qui éviterait ce problème de limitation des couleurs
si le minitel à une résolution de 320 x 240 ça fait bien 40 patterns de 8 pixels pourquoi ne pas utiliser un scrolling horizontal de 8 patterns qui éviterait ce problème de limitation des couleurs
Jipe :
si tu utilise des "patterns" de 6 x 8 en screen 2 tu va avoir beaucoup de bavures avec les couleurs et ça va vite être illisible
si le minitel à une résolution de 320 x 240 ça fait bien 40 patterns de 8 pixels pourquoi ne pas utiliser un scrolling horizontal de 8 patterns qui éviterait ce problème de limitation des couleurs
si le minitel à une résolution de 320 x 240 ça fait bien 40 patterns de 8 pixels pourquoi ne pas utiliser un scrolling horizontal de 8 patterns qui éviterait ce problème de limitation des couleurs
L'idée du scrolling, j'y ai pensé, mais j'ai trouvé qu'a l'utilisation cela est peu pratique.
Le bavage de couleur n'est pas si terrible en fait.
Après, peut-être que je tenterai une version scrolling aussi !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie